This is an automated email from the ASF dual-hosted git repository.

joshtynjala pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/royale-compiler.git


The following commit(s) were added to refs/heads/develop by this push:
     new 179edad  JSRoyaleEmitter: when inserting a synthetic second argument 
for parseInt() pass 0 instead of undefined
179edad is described below

commit 179edad95b4bd8c859c8940b9316f9980ad4579a
Author: Josh Tynjala <[email protected]>
AuthorDate: Wed Sep 22 12:34:37 2021 -0700

    JSRoyaleEmitter: when inserting a synthetic second argument for parseInt() 
pass 0 instead of undefined
    
    undefined can't be used as a NumericLiteralNode because it results in the 
compiler throwing a NumberFormatException. According to the ECMAScript spec, 
parseInt() treats 0, NaN, and Infinity the same as undefined, so 0 is fine. Fun 
fact: Technically, undefined is coerced to NaN when calling parseInt().
---
 .../royale/compiler/internal/codegen/js/royale/JSRoyaleEmitter.java     | 2 +-
 .../compiler/internal/codegen/js/royale/TestRoyaleGlobalFunctions.java  | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git 
a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/royale/JSRoyaleEmitter.java
 
b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/royale/JSRoyaleEmitter.java
index 49bdf23..6cfd566 100644
--- 
a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/royale/JSRoyaleEmitter.java
+++ 
b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/royale/JSRoyaleEmitter.java
@@ -1004,7 +1004,7 @@ public class JSRoyaleEmitter extends JSGoogEmitter 
implements IJSRoyaleEmitter
                     if (nameNode instanceof IdentifierNode)
                     {
                         //see FLEX-35283
-                        LiteralNode appendedArgument = new 
NumericLiteralNode("undefined");
+                        LiteralNode appendedArgument = new 
NumericLiteralNode("0");
                         appendedArgument.setSynthetic(true);
                         newNode = EmitterUtils.insertArgumentsAfter(node, 
appendedArgument);
                     }
diff --git 
a/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleGlobalFunctions.java
 
b/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleGlobalFunctions.java
index 83af814..e293ad0 100644
--- 
a/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleGlobalFunctions.java
+++ 
b/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleGlobalFunctions.java
@@ -115,7 +115,7 @@ public class TestRoyaleGlobalFunctions extends 
TestGoogGlobalFunctions
     {
         IVariableNode node = getVariable("var a:Number = parseInt('1.8');");
         asBlockWalker.visitVariable(node);
-        assertOut("var /** @type {number} */ a = parseInt('1.8', undefined)");
+        assertOut("var /** @type {number} */ a = parseInt('1.8', 0)");
     }
 
     @Test

Reply via email to