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"),

Reply via email to