You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by gr...@apache.org on 2020/04/02 09:50:35 UTC

[royale-compiler] branch develop updated (fd0cad1 -> dfd8c72)

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

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


    from fd0cad1  initial attempt at approval script
     new 132d3d6  fix for the original tweak I did here, adding more support for line separations in additionalCompilerOptions
     new 0fad5e8  fix for const or var as main definition instead of a class. Treat their assigned values like a static initializer
     new cf1fe8d  Merge branch 'develop' of https://github.com/apache/royale-compiler into develop
     new 332a2e8  Fix for the fix.
     new 89a62e1  Needs more investigation. A binding definition inside a <fx:Boolean id='myBoolean'>{bindingexpression}</fx:Boolean> causes a compiler error without this.
     new 53fd372  Fix for an issue with complex static initializers. Fixes access to vars and consts from other code.
     new 4c1b2f4  Additions to XML and XML list to support more e4X conformance. Aligned with framework classes (extra unit tests)
     new dfd8c72  Merge branch 'develop' of https://github.com/apache/royale-compiler into develop

The 8 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../codegen/js/jx/BinaryOperatorEmitter.java       | 40 ++++++++++++++++------
 .../codegen/js/jx/DynamicAccessEmitter.java        |  2 +-
 .../internal/codegen/js/jx/FieldEmitter.java       | 14 +++++++-
 .../internal/codegen/js/jx/ForEachEmitter.java     |  2 +-
 .../codegen/js/jx/MemberAccessEmitter.java         |  2 +-
 .../codegen/js/royale/JSRoyaleEmitter.java         | 23 +++++++++----
 .../internal/codegen/js/utils/EmitterUtils.java    | 12 ++++---
 .../internal/codegen/mxml/MXMLEmitter.java         | 34 +++---------------
 .../codegen/js/royale/TestRoyaleGlobalClasses.java |  2 +-
 .../java/org/apache/royale/maven/BaseMojo.java     | 10 ++++--
 10 files changed, 81 insertions(+), 60 deletions(-)


[royale-compiler] 03/08: Merge branch 'develop' of https://github.com/apache/royale-compiler into develop

Posted by gr...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit cf1fe8d12b66939e88043d8d41caa35711777802
Merge: 0fad5e8 4508b13
Author: greg-dove <gr...@gmail.com>
AuthorDate: Thu Apr 2 07:54:46 2020 +1300

    Merge branch 'develop' of https://github.com/apache/royale-compiler into develop

 compiler-build-tools/pom.xml | 65 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 65 insertions(+)


[royale-compiler] 02/08: fix for const or var as main definition instead of a class. Treat their assigned values like a static initializer

Posted by gr...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 0fad5e8175e6d73e8a54d76e767bb8d259819c9d
Author: greg-dove <gr...@gmail.com>
AuthorDate: Wed Apr 1 21:56:54 2020 +1300

    fix for const or var as main definition instead of a class. Treat their assigned values like a static initializer
---
 .../org/apache/royale/compiler/internal/codegen/js/jx/FieldEmitter.java | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/FieldEmitter.java b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/FieldEmitter.java
index ca635e3..b6ac6a3 100644
--- a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/FieldEmitter.java
+++ b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/FieldEmitter.java
@@ -303,7 +303,7 @@ public class FieldEmitter extends JSSubEmitter implements
         }
         if (vnode != null && !isComplexInitializedStatic)
         {
-        	getModel().inStaticInitializer = ndef.isStatic();
+        	getModel().inStaticInitializer = ndef.isStatic() || isPackageOrFileMember;
             String vnodeString = getEmitter().stringifyNode(vnode);
             if (ndef.isStatic() && vnode instanceof FunctionCallNode)
             {


[royale-compiler] 05/08: Needs more investigation. A binding definition inside a {bindingexpression} causes a compiler error without this.

Posted by gr...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 89a62e12875d5e95472a30ed9cbebcac7662d3bf
Author: greg-dove <gr...@gmail.com>
AuthorDate: Thu Apr 2 22:33:00 2020 +1300

    Needs more investigation. A binding definition inside a <fx:Boolean id='myBoolean'>{bindingexpression}</fx:Boolean> causes a compiler error without this.
---
 .../internal/codegen/mxml/MXMLEmitter.java         | 34 +++-------------------
 1 file changed, 4 insertions(+), 30 deletions(-)

diff --git a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/MXMLEmitter.java b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/MXMLEmitter.java
index cdef6e0..9e550fa 100644
--- a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/MXMLEmitter.java
+++ b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/MXMLEmitter.java
@@ -27,36 +27,7 @@ import org.apache.royale.compiler.internal.codegen.Emitter;
 import org.apache.royale.compiler.internal.codegen.as.ASEmitterTokens;
 import org.apache.royale.compiler.projects.ICompilerProject;
 import org.apache.royale.compiler.tree.as.IASNode;
-import org.apache.royale.compiler.tree.mxml.IMXMLArrayNode;
-import org.apache.royale.compiler.tree.mxml.IMXMLBooleanNode;
-import org.apache.royale.compiler.tree.mxml.IMXMLClassDefinitionNode;
-import org.apache.royale.compiler.tree.mxml.IMXMLClassNode;
-import org.apache.royale.compiler.tree.mxml.IMXMLComponentNode;
-import org.apache.royale.compiler.tree.mxml.IMXMLDataBindingNode;
-import org.apache.royale.compiler.tree.mxml.IMXMLDeclarationsNode;
-import org.apache.royale.compiler.tree.mxml.IMXMLDocumentNode;
-import org.apache.royale.compiler.tree.mxml.IMXMLEmbedNode;
-import org.apache.royale.compiler.tree.mxml.IMXMLEventSpecifierNode;
-import org.apache.royale.compiler.tree.mxml.IMXMLFactoryNode;
-import org.apache.royale.compiler.tree.mxml.IMXMLFileNode;
-import org.apache.royale.compiler.tree.mxml.IMXMLImplementsNode;
-import org.apache.royale.compiler.tree.mxml.IMXMLInstanceNode;
-import org.apache.royale.compiler.tree.mxml.IMXMLIntNode;
-import org.apache.royale.compiler.tree.mxml.IMXMLLiteralNode;
-import org.apache.royale.compiler.tree.mxml.IMXMLMetadataNode;
-import org.apache.royale.compiler.tree.mxml.IMXMLNode;
-import org.apache.royale.compiler.tree.mxml.IMXMLNumberNode;
-import org.apache.royale.compiler.tree.mxml.IMXMLObjectNode;
-import org.apache.royale.compiler.tree.mxml.IMXMLPropertySpecifierNode;
-import org.apache.royale.compiler.tree.mxml.IMXMLRemoteObjectMethodNode;
-import org.apache.royale.compiler.tree.mxml.IMXMLRemoteObjectNode;
-import org.apache.royale.compiler.tree.mxml.IMXMLScriptNode;
-import org.apache.royale.compiler.tree.mxml.IMXMLStringNode;
-import org.apache.royale.compiler.tree.mxml.IMXMLStyleSpecifierNode;
-import org.apache.royale.compiler.tree.mxml.IMXMLUintNode;
-import org.apache.royale.compiler.tree.mxml.IMXMLVectorNode;
-import org.apache.royale.compiler.tree.mxml.IMXMLWebServiceNode;
-import org.apache.royale.compiler.tree.mxml.IMXMLWebServiceOperationNode;
+import org.apache.royale.compiler.tree.mxml.*;
 import org.apache.royale.compiler.visitor.IBlockWalker;
 import org.apache.royale.compiler.visitor.mxml.IMXMLBlockWalker;
 
@@ -294,6 +265,9 @@ public class MXMLEmitter extends Emitter implements IMXMLEmitter
     @Override
     public void emitBoolean(IMXMLBooleanNode node)
     {
+        if (node.getChildCount()>0 && (node.getChild(0) instanceof IMXMLSingleDataBindingNode)) {
+            return; //@todo more investigation needed
+        }
         emitAttributeValue(node);
     }
 


[royale-compiler] 06/08: Fix for an issue with complex static initializers. Fixes access to vars and consts from other code.

Posted by gr...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 53fd37240745bbb9f668cfd5ed81b12bd6547e60
Author: greg-dove <gr...@gmail.com>
AuthorDate: Thu Apr 2 22:35:22 2020 +1300

    Fix for an issue with complex static initializers. Fixes access to vars and consts from other code.
---
 .../royale/compiler/internal/codegen/js/jx/FieldEmitter.java | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/FieldEmitter.java b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/FieldEmitter.java
index b6ac6a3..7e81916 100644
--- a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/FieldEmitter.java
+++ b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/FieldEmitter.java
@@ -232,6 +232,18 @@ public class FieldEmitter extends JSSubEmitter implements
 	                write(ASEmitterTokens.BLOCK_CLOSE);
 	                writeNewline(ASEmitterTokens.SEMICOLON);
                 }
+                //Fix for references to the target : the following empty declaration is required for @lends to work in Object.defineProperties below
+                //otherwise references elsewhere in code to the target can be renamed (and therefore do not work)
+                if (getEmitter().getDocEmitter() instanceof IJSGoogDocEmitter)
+                {
+                    ((IJSGoogDocEmitter) getEmitter().getDocEmitter()).emitFieldDoc(node, def, getProject());
+                }
+                write(className);
+                write(ASEmitterTokens.MEMBER_ACCESS);
+                writeFieldName(node, fjs);
+                write(ASEmitterTokens.SEMICOLON);
+                writeNewline();
+                writeNewline();
                 write(IASLanguageConstants.Object);
                 write(ASEmitterTokens.MEMBER_ACCESS);
                 write(JSEmitterTokens.DEFINE_PROPERTIES);


[royale-compiler] 04/08: Fix for the fix.

Posted by gr...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 332a2e8d366136ba435a10a6bb8c37a66ad28532
Author: greg-dove <gr...@gmail.com>
AuthorDate: Thu Apr 2 22:30:38 2020 +1300

    Fix for the fix.
---
 .../src/main/java/org/apache/royale/maven/BaseMojo.java              | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/royale-maven-plugin/src/main/java/org/apache/royale/maven/BaseMojo.java b/royale-maven-plugin/src/main/java/org/apache/royale/maven/BaseMojo.java
index 9968054..a72a0fb 100644
--- a/royale-maven-plugin/src/main/java/org/apache/royale/maven/BaseMojo.java
+++ b/royale-maven-plugin/src/main/java/org/apache/royale/maven/BaseMojo.java
@@ -285,8 +285,9 @@ public abstract class BaseMojo
             additionalCompilerOptions = additionalCompilerOptions.replaceAll("=\\s+", "=");
             //remove whitespace before or after any ',' (this assumes that ',' is never part of a value assignment itself and is only used to separate list values in config settings)
             additionalCompilerOptions = additionalCompilerOptions.replaceAll("\\s*,\\s*", ",");
-            //any other whitespace can be resolved to a single separator (';') multiple sequential separators will be ignored if there are explicit ';' separators included
-            additionalCompilerOptions = additionalCompilerOptions.replaceAll("\\s+", ";");
+
+            //any explicit line separators can be resolved to a single separator (';') multiple sequential separators will be ignored if there are explicit ';' separators included below
+            additionalCompilerOptions = additionalCompilerOptions.replaceAll("(\\r\\n?|\\n)+", ";");
             if (additionalCompilerOptions.contains(";"))
             {
                 String[] options = additionalCompilerOptions.split(";");


[royale-compiler] 07/08: Additions to XML and XML list to support more e4X conformance. Aligned with framework classes (extra unit tests)

Posted by gr...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 4c1b2f4aa1b11b58cad648c912ac633ebecf0590
Author: greg-dove <gr...@gmail.com>
AuthorDate: Thu Apr 2 22:38:12 2020 +1300

    Additions to XML and XML list to support more e4X conformance. Aligned with framework classes (extra unit tests)
---
 .../codegen/js/jx/BinaryOperatorEmitter.java       | 40 ++++++++++++++++------
 .../codegen/js/jx/DynamicAccessEmitter.java        |  2 +-
 .../internal/codegen/js/jx/ForEachEmitter.java     |  2 +-
 .../codegen/js/jx/MemberAccessEmitter.java         |  2 +-
 .../codegen/js/royale/JSRoyaleEmitter.java         | 23 +++++++++----
 .../internal/codegen/js/utils/EmitterUtils.java    | 12 ++++---
 .../codegen/js/royale/TestRoyaleGlobalClasses.java |  2 +-
 7 files changed, 57 insertions(+), 26 deletions(-)

diff --git a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/BinaryOperatorEmitter.java b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/BinaryOperatorEmitter.java
index 2aa2e77..2138d61 100644
--- a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/BinaryOperatorEmitter.java
+++ b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/BinaryOperatorEmitter.java
@@ -192,19 +192,35 @@ public class BinaryOperatorEmitter extends JSSubEmitter implements
                 	MemberAccessExpressionNode xmlNode = (MemberAccessExpressionNode)leftSide;
                 	if (node.getNodeID() == ASTNodeID.Op_AssignId)
                 	{
+                		boolean wrapQuotes = true;
 	                    getWalker().walk(xmlNode.getLeftOperandNode());
 	                    IExpressionNode rightSide = xmlNode.getRightOperandNode();
 	                    if (rightSide instanceof UnaryOperatorAtNode)
 	                    {
 		                    write(".setAttribute('");
-		                    getWalker().walk(((UnaryOperatorAtNode)rightSide).getChild(0));
+		                    getWalker().walk(rightSide.getChild(0));
 	                    }
+	                    else if (rightSide instanceof IDynamicAccessNode && ((IDynamicAccessNode) rightSide).getLeftOperandNode().getNodeID() == ASTNodeID.Op_AtID) {
+							write(".setAttribute(");
+							wrapQuotes = false;
+							getWalker().walk(((IDynamicAccessNode)rightSide).getRightOperandNode());
+						}
+	                    else if (rightSide instanceof INamespaceAccessExpressionNode) {
+							write(".setChild(");
+							write("new QName(");
+							getWalker().walk(((INamespaceAccessExpressionNode) rightSide).getLeftOperandNode());
+							write(",'");
+							getWalker().walk(((INamespaceAccessExpressionNode) rightSide).getRightOperandNode());
+							write("')");
+							wrapQuotes = false;
+						}
 	                    else
 	                    {
 		                    write(".setChild('");
 		                    getWalker().walk(rightSide);
 	                    }
-	                    write("', ");
+	                    if (wrapQuotes) write("'");
+	                    write(", ");
 	                    getWalker().walk(node.getRightOperandNode());
 	                    write(ASEmitterTokens.PAREN_CLOSE);
 	                    return;
@@ -240,7 +256,7 @@ public class BinaryOperatorEmitter extends JSSubEmitter implements
 	                    return;
                 	}
                 }
-                else if (isDynamicAccess && ((JSRoyaleEmitter)getEmitter()).isXML((IExpressionNode)lnode))
+                else if (isDynamicAccess && ((JSRoyaleEmitter)getEmitter()).isXMLish((IExpressionNode)lnode))
                 {
                 	DynamicAccessNode dyn = (DynamicAccessNode)rnode;
                 	ITypeDefinition type = dyn.getRightOperandNode().resolveType(getProject());
@@ -368,7 +384,7 @@ public class BinaryOperatorEmitter extends JSSubEmitter implements
             	DynamicAccessNode dyn = (DynamicAccessNode)leftSide;
             	IExpressionNode dynLeft = dyn.getLeftOperandNode();
             	ITypeDefinition type = dyn.getRightOperandNode().resolveType(getProject());
-            	if (((JSRoyaleEmitter)getEmitter()).isXML(dynLeft) && type.isInstanceOf("String", getProject()))
+            	if (((JSRoyaleEmitter)getEmitter()).isXMLish(dynLeft)/* && !SemanticUtils.isNumericType(type, getProject())*/) //type.isInstanceOf("String", getProject())
     			{
             		String field;
                 	if (node.getNodeID() == ASTNodeID.Op_AssignId)
@@ -377,17 +393,19 @@ public class BinaryOperatorEmitter extends JSSubEmitter implements
 	                    IExpressionNode rightSide = dyn.getRightOperandNode();
 	                    if (rightSide instanceof UnaryOperatorAtNode)
 	                    {
-		                    write(".setAttribute('");
-							field = fjs.stringifyNode(((UnaryOperatorAtNode)rightSide).getChild(0));
-							field = field.replace("\"", ""); // remove wrapping double-quotes
+		                    write(".setAttribute(");
+							field = fjs.stringifyNode((rightSide).getChild(0));
 	                    }
 	                    else
 	                    {
-		                    write(".setChild('");
+							write(".setChild(");
 							field = fjs.stringifyNode(rightSide);
-							field = field.replace("\"", ""); // remove wrapping double-quotes
 	                    }
-	                    write(field + "', ");
+						if (field.startsWith("\"") && field.endsWith("\"")) {
+							// remove wrapping double-quotes and swap to single quotes
+							field = "'" + field.substring(1, field.length() - 1) + "'";
+						}
+	                    write(field + ", ");
 	                    getWalker().walk(node.getRightOperandNode());
 	                    write(ASEmitterTokens.PAREN_CLOSE);
 	                    return;
@@ -576,7 +594,7 @@ public class BinaryOperatorEmitter extends JSSubEmitter implements
 				getWalker().walk(node.getRightOperandNode());
 				
 				if (node.getNodeID() == ASTNodeID.Op_InID &&
-						((JSRoyaleEmitter)getEmitter()).isXML(node.getRightOperandNode()))
+						((JSRoyaleEmitter)getEmitter()).isXMLish(node.getRightOperandNode()))
 				{
 					write(".elementNames()");
 				}
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 bdcb9c6..878b69a 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
@@ -72,7 +72,7 @@ public class DynamicAccessEmitter extends JSSubEmitter implements
 	    	if (leftOperandNode instanceof MemberAccessExpressionNode)
 	    		isXML = fjs.isLeftNodeXMLish((MemberAccessExpressionNode)leftOperandNode);
 	    	else if (leftOperandNode instanceof IExpressionNode)
-	    		isXML = fjs.isXML((IExpressionNode)leftOperandNode);
+	    		isXML = fjs.isXMLish((IExpressionNode)leftOperandNode);
         	if (leftOperandNode instanceof MemberAccessExpressionNode)
         		isProxy = fjs.isProxy((MemberAccessExpressionNode)leftOperandNode);
         	else if (leftOperandNode instanceof IExpressionNode)
diff --git a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/ForEachEmitter.java b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/ForEachEmitter.java
index 2994707..4920604 100644
--- a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/ForEachEmitter.java
+++ b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/ForEachEmitter.java
@@ -104,7 +104,7 @@ public class ForEachEmitter extends JSSubEmitter implements
         boolean isProxy = false;
         if (obj.getNodeID() == ASTNodeID.IdentifierID)
         {
-        	if (((JSRoyaleEmitter)getEmitter()).isXML((IdentifierNode)obj))
+        	if (((JSRoyaleEmitter)getEmitter()).isXMLish((IdentifierNode)obj))
         	{
         		write(".elementNames()");
         		isXML = true;
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 51d45b5..274cd4f 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
@@ -108,7 +108,7 @@ public class MemberAccessEmitter extends JSSubEmitter implements
         	if (leftNode instanceof MemberAccessExpressionNode)
         		isXML = fjs.isLeftNodeXMLish(leftNode);
         	else if (leftNode != null)
-        		isXML = fjs.isXML(leftNode);
+        		isXML = fjs.isXMLish(leftNode);
 
 			if (!isXML) {
 				if (leftNode instanceof MemberAccessExpressionNode)
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 0a05318..0626e79 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
@@ -709,7 +709,7 @@ public class JSRoyaleEmitter extends JSGoogEmitter implements IJSRoyaleEmitter
     	{
         	if (getModel().inStaticInitializer)
         		if (!staticUsedNames.contains(name) && !NativeUtils.isJSNative(name)
-        				&& isGoogProvided(name) && !getModel().getCurrentClass().getQualifiedName().equals(name)
+        				&& isGoogProvided(name) && (getModel().getCurrentClass() == null || !getModel().getCurrentClass().getQualifiedName().equals(name))
         				&& (getModel().primaryDefinitionQName == null
         					|| !getModel().primaryDefinitionQName.equals(name)))
         			staticUsedNames.add(name);
@@ -1245,7 +1245,7 @@ public class JSRoyaleEmitter extends JSGoogEmitter implements IJSRoyaleEmitter
         		}
         		else if (node.getChild(0).getChild(0).getNodeID() == ASTNodeID.IdentifierID)
         		{
-        			if (isXML((IdentifierNode)(node.getChild(0).getChild(0))))
+        			if (isXMLish((IdentifierNode)(node.getChild(0).getChild(0))))
         			{
         		        if (ASNodeUtils.hasParenOpen(node))
         		            write(ASEmitterTokens.PAREN_OPEN);
@@ -1288,13 +1288,15 @@ public class JSRoyaleEmitter extends JSGoogEmitter implements IJSRoyaleEmitter
 
     		        IExpressionNode rightNode = obj.getRightOperandNode();
     	            String s = stringifyNode(obj.getLeftOperandNode());
-    	            boolean needsQuotes = rightNode.getNodeID() != ASTNodeID.Op_AtID;
+    	            boolean avoidMethodAccess = (rightNode instanceof IDynamicAccessNode && ((IDynamicAccessNode) rightNode).getLeftOperandNode().getNodeID() == ASTNodeID.Op_AtID);
+    	            boolean needsQuotes = rightNode.getNodeID() != ASTNodeID.Op_AtID
+                             && !avoidMethodAccess;
     	            write(s);
     	            write(".removeChild(");
     	            if (needsQuotes)
     	            	write("'");
     	            else
-    	            	write(s + ".");
+    	            	if (!avoidMethodAccess) write(s + ".");
     	            s = stringifyNode(rightNode);
     	            write(s);
     	            if (needsQuotes)
@@ -1353,6 +1355,15 @@ public class JSRoyaleEmitter extends JSGoogEmitter implements IJSRoyaleEmitter
         		DynamicAccessNode parentNode = (DynamicAccessNode)node.getParent();
         		if (EmitterUtils.writeE4xFilterNode(getWalker().getProject(), getModel(), node))
         			write("node.");
+        		if (node.getParent().getParent() != null
+                        && node.getParent().getParent().getParent() != null
+                        && node.getParent().getParent().getParent().getNodeID() == ASTNodeID.Op_DeleteID) {
+        		    write ("'@' + ");
+        		    //example : delete myXML.@[MyConst];
+        		    //output myXML.removeChild('@' + MyConst) <-- variant is handled in emulation class
+                    getWalker().walk(parentNode.getRightOperandNode());
+                    return;
+                }
             	write("attribute(");
         		getWalker().walk(parentNode.getRightOperandNode());
             	write(")");
@@ -1474,9 +1485,9 @@ public class JSRoyaleEmitter extends JSGoogEmitter implements IJSRoyaleEmitter
      * @param obj
      * @return
      */
-    public boolean isXML(IExpressionNode obj)
+    public boolean isXMLish(IExpressionNode obj)
     {
-		return EmitterUtils.isXML(obj, getWalker().getProject());
+		return EmitterUtils.isXMLish(obj, getWalker().getProject());
     }
 
     public MemberAccessExpressionNode getLastMAEInChain(MemberAccessExpressionNode node)
diff --git a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/utils/EmitterUtils.java b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/utils/EmitterUtils.java
index 2e03bf2..0be6c74 100644
--- a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/utils/EmitterUtils.java
+++ b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/utils/EmitterUtils.java
@@ -751,16 +751,16 @@ public class EmitterUtils
      * @param obj
      * @return
      */
-    public static boolean isXML(IExpressionNode obj, ICompilerProject project )
+    public static boolean isXMLish(IExpressionNode obj, ICompilerProject project )
     {
         // See if the left side is XML or XMLList
         IDefinition leftDef = obj.resolveType(project);
         if (leftDef == null && obj.getNodeID() == ASTNodeID.MemberAccessExpressionID)
         {
-            return isXML(((MemberAccessExpressionNode)obj).getLeftOperandNode(), project);
+            return isXMLish(((MemberAccessExpressionNode)obj).getLeftOperandNode(), project);
         }
         else if (leftDef != null && leftDef.getBaseName().equals("*") && obj instanceof DynamicAccessNode) {
-            return isXML(((DynamicAccessNode)obj).getLeftOperandNode(), project);
+            return isXMLish(((DynamicAccessNode)obj).getLeftOperandNode(), project);
         }
         return SemanticUtils.isXMLish(leftDef, project);
     }
@@ -785,7 +785,7 @@ public class EmitterUtils
         IExpressionNode leftNode = obj.getLeftOperandNode();
         IExpressionNode rightNode = obj.getRightOperandNode();
         ASTNodeID rightID = rightNode.getNodeID();
-        if (rightID == ASTNodeID.IdentifierID)
+        if (rightID == ASTNodeID.IdentifierID || (rightID == ASTNodeID.NamespaceAccessExpressionID && rightNode.getChild(1).getNodeID() == ASTNodeID.IdentifierID))
         {
             IDefinition rightDef = rightNode.resolveType(project);
             if (rightDef != null)
@@ -800,6 +800,8 @@ public class EmitterUtils
         }
         else if (rightID == ASTNodeID.Op_AtID)
             return true;
+        else if (rightNode instanceof IDynamicAccessNode && ((IDynamicAccessNode) rightNode).getLeftOperandNode().getNodeID() == ASTNodeID.Op_AtID)
+            return true;
         return false;
     }
 
@@ -904,7 +906,7 @@ public class EmitterUtils
                 boolean isXML = leftNode instanceof MemberAccessExpressionNode
                         && isLeftNodeXMLish((MemberAccessExpressionNode) leftNode, project);
                 if (!isXML) {
-                    isXML = leftNode instanceof IExpressionNode && isXML((IExpressionNode)leftNode, project);
+                    isXML = leftNode instanceof IExpressionNode && isXMLish((IExpressionNode)leftNode, project);
                 }
                 if (isXML) {
                     //check argumentsNode
diff --git a/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleGlobalClasses.java b/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleGlobalClasses.java
index d090658..bae6cd4 100644
--- a/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleGlobalClasses.java
+++ b/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleGlobalClasses.java
@@ -1098,7 +1098,7 @@ public class TestRoyaleGlobalClasses extends TestGoogGlobalClasses
     {
     		IBinaryOperatorNode node = (IBinaryOperatorNode)getNode("var a:XMLList = new XMLList();a[a.length()] = <foo/>;a[a.length()] = <baz/>;", IBinaryOperatorNode.class);
         asBlockWalker.visitBinaryOperator(node);
-        assertOut("a[a.length()] = new XML( '<foo/>')");
+        assertOut("a.setChild(a.length(), new XML( '<foo/>'))");
     }
 
     @Test


[royale-compiler] 01/08: fix for the original tweak I did here, adding more support for line separations in additionalCompilerOptions

Posted by gr...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 132d3d62c61e3f57cb36b214c680ff120d5eb6a9
Author: greg-dove <gr...@gmail.com>
AuthorDate: Wed Apr 1 21:47:13 2020 +1300

    fix for the original tweak I did here, adding more support for line separations in additionalCompilerOptions
---
 .../src/main/java/org/apache/royale/maven/BaseMojo.java          | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/royale-maven-plugin/src/main/java/org/apache/royale/maven/BaseMojo.java b/royale-maven-plugin/src/main/java/org/apache/royale/maven/BaseMojo.java
index 98ea54a..9968054 100644
--- a/royale-maven-plugin/src/main/java/org/apache/royale/maven/BaseMojo.java
+++ b/royale-maven-plugin/src/main/java/org/apache/royale/maven/BaseMojo.java
@@ -281,9 +281,12 @@ public abstract class BaseMojo
         List<String> args = new LinkedList<String>();
         args.add("-load-config=" + configFile.getPath());
         if(additionalCompilerOptions != null) {
-            if (additionalCompilerOptions.contains("\n")) {
-                additionalCompilerOptions = additionalCompilerOptions.replace("\n", "");
-            }
+            //remove whitespace after any '=' or '+='
+            additionalCompilerOptions = additionalCompilerOptions.replaceAll("=\\s+", "=");
+            //remove whitespace before or after any ',' (this assumes that ',' is never part of a value assignment itself and is only used to separate list values in config settings)
+            additionalCompilerOptions = additionalCompilerOptions.replaceAll("\\s*,\\s*", ",");
+            //any other whitespace can be resolved to a single separator (';') multiple sequential separators will be ignored if there are explicit ';' separators included
+            additionalCompilerOptions = additionalCompilerOptions.replaceAll("\\s+", ";");
             if (additionalCompilerOptions.contains(";"))
             {
                 String[] options = additionalCompilerOptions.split(";");


[royale-compiler] 08/08: Merge branch 'develop' of https://github.com/apache/royale-compiler into develop

Posted by gr...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit dfd8c726a3724330b2aad9d0c32e9564f9c176db
Merge: 4c1b2f4 fd0cad1
Author: greg-dove <gr...@gmail.com>
AuthorDate: Thu Apr 2 22:50:12 2020 +1300

    Merge branch 'develop' of https://github.com/apache/royale-compiler into develop

 compiler-build-tools/ApproveBuildTools.xml | 632 +++++++++++++++++++++++++++++
 1 file changed, 632 insertions(+)