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;
