You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@royale.apache.org by GitBox <gi...@apache.org> on 2019/02/04 07:38:15 UTC

[GitHub] joshtynjala opened a new issue #74: Assign to int or uint variable does not convert Number from floating point to integer

joshtynjala opened a new issue #74: Assign to int or uint variable does not convert Number from floating point to integer
URL: https://github.com/apache/royale-compiler/issues/74
 
 
   A developer using `int` or `uint` will never want floating point values. Otherwise, they'd be using `Number` instead. We need to ensure that `int` and `uint` behave correctly in our generated JavaScript.
   
   Current behavior:
   
   ``` actionscript
   var integer:int = -10.25;
   trace("init with literal:", integer); //-10.25
   integer = -10.25;
   trace("assign with literal:", integer); //-10.25
   integer = -10.25 + -5;
   trace("add with literals:", integer); //-15.25
   
   var number:Number = -10.25;
   var number2:Number = -5;
   
   var integer2:int = number;
   trace("init with Number:", integer2); //-10.25
   integer2 = number;
   trace("assign with Number:", integer2); //-10.25
   integer2 = number + number2;
   trace("add with Number:", integer2); //-15.25
   ```
   
   Expected behavior:
   
   ``` actionscript
   var integer:int = -10.25;
   trace("init with literal:", integer); //-10
   integer = -10.25;
   trace("assign with literal:", integer); //-10
   integer = -10.25 + -5;
   trace("add with literals:", integer); //-15
   
   var number:Number = -10.25;
   var number2:Number = -5;
   
   var integer2:int = number;
   trace("init with Number:", integer2); //-10
   integer2 = number;
   trace("assign with Number:", integer2); //-10
   integer2 = number + number2;
   trace("add with Number:", integer2); //-15
   ```
   
   To fix, the emitter could output `Language._int()`. However, we probably want to avoid a function call, so maybe just inline the same operation:
   
   ``` js
   var integer = (-10.25) >> 0;
   ```
   
   (The parentheses will be needed for complex expressions, but we might be able to remove them sometimes... or maybe Closure compiler will do it for us?) 
   
   Some alternate syntax options that should work too (however, we should probably be consistent with `Language._int()`:
   
   ``` js
   var integer = (-10.25) | 0;
   ```
   
   ``` js
   var integer = ~~(-10.25);
   ```
   
   `Math.floor()` should definitely be avoided. It does not simply drop the decimal part. It rounds down, which would give an incorrect value for negative floating point numbers. `-10.25` would become `-11` with `Math.floor()`

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services