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 <yishayj...@hotmail.com> 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"),