This is an automated email from the ASF dual-hosted git repository.
yishayw pushed a commit to branch issue_143
in repository https://gitbox.apache.org/repos/asf/royale-compiler.git
The following commit(s) were added to refs/heads/issue_143 by this push:
new 6461abf Cache conditionalClosure
6461abf is described below
commit 6461abff68aa1fddc7ffcd745403982a900f6919
Author: DESKTOP-RH4S838\Yishay <[email protected]>
AuthorDate: Fri Apr 10 16:04:31 2020 +0300
Cache conditionalClosure
Reference #143
---
.../compiler/internal/codegen/js/JSEmitter.java | 24 ++++++++++++++--------
.../codegen/js/royale/JSRoyaleEmitterTokens.java | 2 +-
2 files changed, 17 insertions(+), 9 deletions(-)
diff --git
a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/JSEmitter.java
b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/JSEmitter.java
index e7d5194..338d138 100644
---
a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/JSEmitter.java
+++
b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/JSEmitter.java
@@ -917,7 +917,7 @@ public class JSEmitter extends ASEmitter implements
IJSEmitter
}
if (checkForConditionalBind &&
project.getBuiltinType(BuiltinType.FUNCTION).equals(definition) &&
assignedNode instanceof
MemberAccessExpressionNode) {
- emitAssignedCoercionHelper(assignedNode);
+ emitAssignedCoercionHelper(assignedNode, definition);
} else {
emitAssignedValue(assignedNode);
}
@@ -934,19 +934,27 @@ public class JSEmitter extends ASEmitter implements
IJSEmitter
}
}
- private void emitAssignedCoercionHelper(IExpressionNode assignedNode) {
+ private void emitAssignedCoercionHelper(IExpressionNode assignedNode,
IDefinition nodeDef) {
MemberAccessExpressionNode maeNode =
(MemberAccessExpressionNode)assignedNode;
- if (maeNode.getLeftOperandNode() instanceof
ILanguageIdentifierNode &&
-
((ILanguageIdentifierNode)maeNode.getLeftOperandNode()).getKind().equals(ILanguageIdentifierNode.LanguageIdentifierKind.THIS))
{
+ ILanguageIdentifierNode.LanguageIdentifierKind kind = null;
+ if (nodeDef.isStatic() || maeNode.getLeftOperandNode()
instanceof ILanguageIdentifierNode &&
+ ((kind =
((ILanguageIdentifierNode)maeNode.getLeftOperandNode()).getKind()).equals(ILanguageIdentifierNode.LanguageIdentifierKind.THIS)
||
+
kind.equals(ILanguageIdentifierNode.LanguageIdentifierKind.SUPER))) {
emitAssignedValue(assignedNode);
} else {
-
write(JSRoyaleEmitterTokens.CONDITIONAL_BIND_FUNCTION_NAME.getToken() +
+
write(JSRoyaleEmitterTokens.CONDITIONAL_CLOSURE_FUNCTION_NAME.getToken() +
ASEmitterTokens.PAREN_OPEN.getToken()
);
emitAssignedValue(assignedNode);
- write(ASEmitterTokens.COMMA.getToken());
- getWalker().walk(maeNode.getLeftOperandNode());
- write(ASEmitterTokens.PAREN_CLOSE.getToken());
+ write(ASEmitterTokens.COMMA.getToken());
+ write(ASEmitterTokens.SPACE.getToken());
+ getWalker().walk(maeNode.getLeftOperandNode());
+ write(ASEmitterTokens.COMMA.getToken());
+ write(ASEmitterTokens.SPACE.getToken());
+ write(ASEmitterTokens.SINGLE_QUOTE.getToken());
+ getWalker().walk(maeNode.getRightOperandNode());
+ write(ASEmitterTokens.SINGLE_QUOTE.getToken());
+ write(ASEmitterTokens.PAREN_CLOSE.getToken());
}
}
diff --git
a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/royale/JSRoyaleEmitterTokens.java
b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/royale/JSRoyaleEmitterTokens.java
index 722906e..4f3815b 100644
---
a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/royale/JSRoyaleEmitterTokens.java
+++
b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/royale/JSRoyaleEmitterTokens.java
@@ -68,7 +68,7 @@ public enum JSRoyaleEmitterTokens implements IEmitterTokens
SETTER_PREFIX("set__"),
BINDABLE_PREFIX("bindable__"),
CLOSURE_FUNCTION_NAME("org.apache.royale.utils.Language.closure"),
-
CONDITIONAL_BIND_FUNCTION_NAME("org.apache.royale.utils.Language.conditionalBind"),
+
CONDITIONAL_CLOSURE_FUNCTION_NAME("org.apache.royale.utils.Language.conditionalClosure"),
SKIP_AS_COERCIONS("skipAsCoercions"),
SKIP_FUNCTION_COERCIONS("skipFunctionCoercions"),
JSX("JSX"),