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(