You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by jo...@apache.org on 2019/02/20 23:26:36 UTC
[royale-compiler] 02/02: compiler-jx: moved one use
Language.closure() to the same place as another because they both should be
there
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 <jo...@apache.org>
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;