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

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

commit 06ba69dbe0c198422db72b5b5eea71c022143c66
Author: Josh Tynjala <[email protected]>
AuthorDate: Wed Feb 20 15:26:23 2019 -0800

    compiler-jx: moved one use Language.closure() to the same place as another 
because they both should be there
---
 .../internal/codegen/js/goog/JSGoogEmitter.java    | 17 +-----------
 .../codegen/js/jx/MemberAccessEmitter.java         | 32 ++++++++++++++++++++++
 2 files changed, 33 insertions(+), 16 deletions(-)

diff --git 
a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/goog/JSGoogEmitter.java
 
b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/goog/JSGoogEmitter.java
index 341c9c7..693c476 100644
--- 
a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/goog/JSGoogEmitter.java
+++ 
b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/goog/JSGoogEmitter.java
@@ -957,22 +957,7 @@ public class JSGoogEmitter extends JSEmitter implements 
IJSGoogEmitter
         }
         else
         {
-            // AJH need Language.bind here and maybe not require
-            // that the node is a MemberAccessExpression
-            if (definition instanceof FunctionDefinition &&
-                    !((FunctionDefinition)definition).isStatic() &&
-                    (!(definition instanceof AccessorDefinition)) &&
-                    node instanceof MemberAccessExpressionNode &&
-                    
((MemberAccessExpressionNode)node).getLeftOperandNode().getNodeID() != 
ASTNodeID.SuperID)
-            {
-                emitClosureStart();
-                getWalker().walk(node);
-                writeToken(ASEmitterTokens.COMMA);
-                
getWalker().walk(((MemberAccessExpressionNode)node).getLeftOperandNode());
-                
emitClosureEnd(((MemberAccessExpressionNode)node).getLeftOperandNode(), 
definition);
-            }
-            else
-                getWalker().walk(node);
+            getWalker().walk(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 009e783..23e5ec0 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
@@ -216,6 +216,27 @@ public class MemberAccessEmitter extends JSSubEmitter 
implements
                }
        else if (rightNode instanceof NamespaceAccessExpressionNode)
        {
+                       boolean isStatic = false;
+                       if (def != null && def.isStatic())
+                               isStatic = true;
+                       boolean needClosure = false;
+                       if (def instanceof FunctionDefinition && (!(def 
instanceof AccessorDefinition))
+                                       && 
!def.getBaseName().equals("constructor")) // don't wrap references to 
obj.constructor
+                       {
+                               IASNode parentNode = node.getParent();
+                               if (parentNode != null)
+                               {
+                                       ASTNodeID parentNodeId = 
parentNode.getNodeID();
+                                       // we need a closure if this MAE is the 
top-level in a chain
+                                       // of MAE and not in a function call.
+                                       needClosure = !isStatic && parentNodeId 
!= ASTNodeID.FunctionCallID &&
+                                                               parentNodeId != 
ASTNodeID.MemberAccessExpressionID &&
+                                                               parentNodeId != 
ASTNodeID.ArrayIndexExpressionID;
+                               }
+                       }
+               if (needClosure)
+                       getEmitter().emitClosureStart();
+
                NamespaceAccessExpressionNode naen = 
(NamespaceAccessExpressionNode)rightNode;
                IDefinition d = naen.getLeftOperandNode().resolve(getProject());
                IdentifierNode r = (IdentifierNode)(naen.getRightOperandNode());
@@ -243,6 +264,17 @@ public class MemberAccessEmitter extends JSSubEmitter 
implements
                 write(node.getOperator().getOperatorText());
                        write(r.getName());                     
                }
+        
+                       if (needClosure)
+                       {
+                               write(ASEmitterTokens.COMMA);
+                               write(ASEmitterTokens.SPACE);
+                               if (leftNode.getNodeID() == ASTNodeID.SuperID)
+                                       write(ASEmitterTokens.THIS);
+                               else
+                                       writeLeftSide(node, leftNode, 
rightNode);
+                               getEmitter().emitClosureEnd(leftNode, def);
+                       }
                return;
        }
         boolean isCustomNamespace = false;

Reply via email to