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(