You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by yi...@apache.org on 2020/04/10 13:05:22 UTC

[royale-compiler] branch issue_143 updated: Cache conditionalClosure

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 <yi...@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"),