You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by ah...@apache.org on 2019/01/02 07:09:22 UTC

[royale-compiler] branch develop updated: fix #68

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

aharui 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 46e39bf  fix #68
46e39bf is described below

commit 46e39bf5bbb02a14df705d5c77a3c8030d7be29c
Author: Alex Harui <ah...@apache.org>
AuthorDate: Tue Jan 1 23:09:10 2019 -0800

    fix #68
---
 .../internal/codegen/js/royale/JSRoyaleEmitter.java      | 12 +++++++++++-
 .../codegen/js/royale/TestRoyaleExpressions.java         | 16 ++++++++++++++++
 2 files changed, 27 insertions(+), 1 deletion(-)

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 6e8d55d..b5d47a0 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
@@ -465,7 +465,17 @@ public class JSRoyaleEmitter extends JSGoogEmitter implements IJSRoyaleEmitter
             if (i < 0)
             	System.out.println("missing index for " + node.toString());
             else
-            	write("__localFn" + Integer.toString(i) + "__");
+            {
+            	IFunctionNode localFn = anonFns.get(i);
+            	IExpressionNode idNode = localFn.getNameExpressionNode();
+            	String fnName = "";
+            	if (idNode != null && idNode.getNodeID() == ASTNodeID.IdentifierID)
+            		fnName = ((IdentifierNode)idNode).getName();
+            	if (!fnName.isEmpty())
+            		write(((IdentifierNode)idNode).getName());
+            	else
+            		write("__localFn" + Integer.toString(i) + "__");
+            }
     	}
     }
 
diff --git a/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleExpressions.java b/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleExpressions.java
index bf9d38a..c8d0ec0 100644
--- a/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleExpressions.java
+++ b/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleExpressions.java
@@ -1154,6 +1154,22 @@ public class TestRoyaleExpressions extends TestGoogExpressions
     }
     
     @Test
+    public void testES5StrictNamedLocalFunctionsAsParameter()
+    {
+        IFunctionNode node = (IFunctionNode) getNode(
+                "public function foo() { var a:Array = []; a.filter(function isEven(element: int, index: int, arr: Array) : Boolean {\n" + 
+                "  return element % 2 == 0;\n" + 
+                "});}",
+                IFunctionNode.class, WRAP_LEVEL_CLASS);
+        asBlockWalker.visitFunction(node);
+        assertOut("/**\n * @export\n */\n" + 
+      		  "RoyaleTest_A.prototype.foo = function() {\n" +
+      		  "  var self = this;\n" +
+      		  "  function isEven(element, index, arr) {\n    return element % 2 == 0;\n  };\n  var /** @type {Array} */ a = [];\n"
+      		  + "  a.filter(isEven);\n}");
+    }
+    
+    @Test
     public void testParametersInInnerFunctions()
     {
         IFunctionNode node = (IFunctionNode) getNode(