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 23:11:53 UTC
[royale-compiler] branch develop updated: revert back to un-munged
QName toString() and see if we can find all the places QNames are used and
add a custom call
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 9375186 revert back to un-munged QName toString() and see if we can find all the places QNames are used and add a custom call
9375186 is described below
commit 93751868618c76bba6d638f331ada073042e4291
Author: Alex Harui <ah...@apache.org>
AuthorDate: Wed Jan 2 15:11:40 2019 -0800
revert back to un-munged QName toString() and see if we can find all the places QNames are used and add a custom call
---
.../codegen/js/jx/DynamicAccessEmitter.java | 8 +++--
.../codegen/js/jx/MemberAccessEmitter.java | 2 ++
.../codegen/js/royale/JSRoyaleEmitter.java | 2 +-
.../codegen/js/royale/TestRoyaleExpressions.java | 38 ++++++++++++++++++++++
4 files changed, 46 insertions(+), 4 deletions(-)
diff --git a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/DynamicAccessEmitter.java b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/DynamicAccessEmitter.java
index 33231d1..0f18d8c 100644
--- a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/DynamicAccessEmitter.java
+++ b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/DynamicAccessEmitter.java
@@ -21,6 +21,7 @@ package org.apache.royale.compiler.internal.codegen.js.jx;
import org.apache.royale.compiler.codegen.ISubEmitter;
import org.apache.royale.compiler.codegen.js.IJSEmitter;
+import org.apache.royale.compiler.constants.IASLanguageConstants;
import org.apache.royale.compiler.definitions.ITypeDefinition;
import org.apache.royale.compiler.internal.codegen.as.ASEmitterTokens;
import org.apache.royale.compiler.internal.codegen.js.JSSubEmitter;
@@ -48,6 +49,7 @@ public class DynamicAccessEmitter extends JSSubEmitter implements
return;
IExpressionNode rightOperandNode = node.getRightOperandNode();
+ ITypeDefinition type = rightOperandNode.resolveType(getProject());
IJSEmitter ijs = getEmitter();
JSRoyaleEmitter fjs = (ijs instanceof JSRoyaleEmitter) ?
(JSRoyaleEmitter)ijs : null;
@@ -60,7 +62,6 @@ public class DynamicAccessEmitter extends JSSubEmitter implements
isXML = fjs.isXML((IExpressionNode)leftOperandNode);
if (isXML)
{
- ITypeDefinition type = rightOperandNode.resolveType(getProject());
if (type.isInstanceOf("String", getProject()))
{
String field = fjs.stringifyNode(rightOperandNode);
@@ -79,9 +80,10 @@ public class DynamicAccessEmitter extends JSSubEmitter implements
startMapping(node, leftOperandNode);
write(ASEmitterTokens.SQUARE_OPEN);
endMapping(node);
-
+
getWalker().walk(rightOperandNode);
-
+ if (type != null && type.getQualifiedName().contentEquals(IASLanguageConstants.QName))
+ write(".objectAccessFormat()");
startMapping(node, rightOperandNode);
write(ASEmitterTokens.SQUARE_CLOSE);
endMapping(node);
diff --git a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/MemberAccessEmitter.java b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/MemberAccessEmitter.java
index e74820c..e17bc19 100644
--- a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/MemberAccessEmitter.java
+++ b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/MemberAccessEmitter.java
@@ -177,6 +177,7 @@ public class MemberAccessEmitter extends JSSubEmitter implements
write(r.getName());
write(ASEmitterTokens.SINGLE_QUOTE);
write(ASEmitterTokens.PAREN_CLOSE);
+ write(".objectAccessFormat()");
write(ASEmitterTokens.SQUARE_CLOSE);
return;
}
@@ -218,6 +219,7 @@ public class MemberAccessEmitter extends JSSubEmitter implements
write(r.getName());
write(ASEmitterTokens.SINGLE_QUOTE);
write(ASEmitterTokens.PAREN_CLOSE);
+ write(".objectAccessFormat()");
write(ASEmitterTokens.SQUARE_CLOSE);
}
else
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 b5d47a0..558f2f6 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
@@ -1008,7 +1008,7 @@ public class JSRoyaleEmitter extends JSGoogEmitter implements IJSRoyaleEmitter
String ns = ((INamespaceResolvedReference)((FunctionDefinition)nodeDef).getNamespaceReference()).resolveAETNamespace(getWalker().getProject()).getName();
write(ns + "::");
}
- write(((IIdentifierNode)node).getName());
+ write(nodeDef.getBaseName());
}
else if (node.getNodeID() == ASTNodeID.MemberAccessExpressionID)
writeChainName(node);
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 c8d0ec0..90b999f 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
@@ -32,6 +32,7 @@ import org.apache.royale.compiler.internal.tree.as.LiteralNode;
import org.apache.royale.compiler.internal.tree.as.NodeBase;
import org.apache.royale.compiler.tree.as.IBinaryOperatorNode;
import org.apache.royale.compiler.tree.as.IClassNode;
+import org.apache.royale.compiler.tree.as.IDynamicAccessNode;
import org.apache.royale.compiler.tree.as.IFileNode;
import org.apache.royale.compiler.tree.as.IFunctionCallNode;
import org.apache.royale.compiler.tree.as.IFunctionNode;
@@ -63,6 +64,33 @@ public class TestRoyaleExpressions extends TestGoogExpressions
super.setUp();
}
+ @Test
+ public void testVisitDynamicAccessString()
+ {
+ IDynamicAccessNode node = (IDynamicAccessNode) getNode(
+ "public class KnownMember { public function KnownMember() { this[\"knownMember\"] = 4; } public var knownMember:Number; }", IDynamicAccessNode.class, WRAP_LEVEL_PACKAGE);
+ asBlockWalker.visitDynamicAccess(node);
+ assertOut("this[\"knownMember\"]");
+ }
+
+ @Test
+ public void testVisitDynamicAccessQName()
+ {
+ IDynamicAccessNode node = (IDynamicAccessNode) getNode(
+ "public class KnownMember { public function KnownMember() { var q:QName; this[q] = 4; } public var knownMember:Number; }", IDynamicAccessNode.class, WRAP_LEVEL_PACKAGE);
+ asBlockWalker.visitDynamicAccess(node);
+ assertOut("this[q.objectAccessFormat()]");
+ }
+
+ @Test
+ public void testVisitDynamicAccessQName2()
+ {
+ IDynamicAccessNode node = (IDynamicAccessNode) getNode(
+ "public class KnownMember { public function KnownMember() { this[new QName(new Namespace('ns'), 'knownMember')] = 4; } public var knownMember:Number; }", IDynamicAccessNode.class, WRAP_LEVEL_PACKAGE);
+ asBlockWalker.visitDynamicAccess(node);
+ assertOut("this[new QName(new Namespace('ns'), 'knownMember').objectAccessFormat()]");
+ }
+
@Ignore
@Override
@Test
@@ -907,6 +935,16 @@ public class TestRoyaleExpressions extends TestGoogExpressions
}
@Test
+ public void testCustomNamespaceMethodAsVariableWithoutUse()
+ {
+ IFunctionNode node = (IFunctionNode) getNode(
+ "import custom.custom_namespace;;public class B {custom_namespace function b() { function c(f:Function):void {}; var f:Function = this.custom_namespace::b; c(f); }}",
+ IFunctionNode.class, WRAP_LEVEL_PACKAGE);
+ asBlockWalker.visitFunction(node);
+ assertOut("/**\n */\nB.prototype.http_$$ns_apache_org$2017$custom$namespace__b = function() {\n var self = this;\n function c(f) {\n };\n var /** @type {Function} */ f = org.apache.royale.utils.Language.closure(this[new QName(custom.custom_namespace, 'b').objectAccessFormat()], this, 'http://ns.apache.org/2017/custom/namespace::b');\n c(f);\n}");
+ }
+
+ @Test
public void testCustomNamespaceMethodAsVariableViaMemberAccess()
{
IFunctionNode node = (IFunctionNode) getNode(