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 e81b5dc Check for null assignment, ignore non-binary operator
assignments, ignore this memeber access
e81b5dc is described below
commit e81b5dc753a99b94278d021890e406a0864b7137
Author: DESKTOP-RH4S838\Yishay <[email protected]>
AuthorDate: Thu Apr 9 12:29:57 2020 +0300
Check for null assignment, ignore non-binary operator assignments,
ignore this memeber access
Reference #143
---
.../royale/compiler/codegen/js/IJSEmitter.java | 1 +
.../compiler/internal/codegen/js/JSEmitter.java | 36 +++++++++++++++-------
.../codegen/js/jx/BinaryOperatorEmitter.java | 2 +-
.../codegen/js/royale/JSRoyaleEmitterTokens.java | 1 +
4 files changed, 28 insertions(+), 12 deletions(-)
diff --git
a/compiler-jx/src/main/java/org/apache/royale/compiler/codegen/js/IJSEmitter.java
b/compiler-jx/src/main/java/org/apache/royale/compiler/codegen/js/IJSEmitter.java
index c20261c..b4ab41c 100644
---
a/compiler-jx/src/main/java/org/apache/royale/compiler/codegen/js/IJSEmitter.java
+++
b/compiler-jx/src/main/java/org/apache/royale/compiler/codegen/js/IJSEmitter.java
@@ -49,4 +49,5 @@ public interface IJSEmitter extends IASEmitter,
IMappingEmitter
void emitClosureEnd(IASNode node, IDefinition nodeDef);
void emitAssignmentCoercion(IExpressionNode assignedNode, IDefinition
definition);
+ void emitAssignmentCoercion(IExpressionNode assignedNode, IDefinition
definition, Boolean checkForConditionalBind);
}
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 24c65f3..e7d5194 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
@@ -40,7 +40,6 @@ import
org.apache.royale.compiler.definitions.metadata.IMetaTag;
import org.apache.royale.compiler.definitions.metadata.IMetaTagAttribute;
import org.apache.royale.compiler.internal.codegen.as.ASEmitter;
import org.apache.royale.compiler.internal.codegen.as.ASEmitterTokens;
-import org.apache.royale.compiler.internal.codegen.js.goog.JSGoogEmitterTokens;
import org.apache.royale.compiler.internal.codegen.js.jx.BlockCloseEmitter;
import org.apache.royale.compiler.internal.codegen.js.jx.BlockOpenEmitter;
import org.apache.royale.compiler.internal.codegen.js.jx.CatchEmitter;
@@ -73,6 +72,7 @@ import
org.apache.royale.compiler.internal.projects.RoyaleJSProject;
import org.apache.royale.compiler.internal.semantics.SemanticUtils;
import org.apache.royale.compiler.internal.tree.as.*;
import org.apache.royale.compiler.projects.ICompilerProject;
+import org.apache.royale.compiler.tree.ASTNodeID;
import org.apache.royale.compiler.tree.as.IASNode;
import org.apache.royale.compiler.tree.as.ICatchNode;
import org.apache.royale.compiler.tree.as.IContainerNode;
@@ -543,7 +543,7 @@ public class JSEmitter extends ASEmitter implements
IJSEmitter
}
}
- public void emitAssignmentCoercion(IExpressionNode assignedNode,
IDefinition definition)
+ public void emitAssignmentCoercion(IExpressionNode assignedNode,
IDefinition definition, Boolean checkForConditionalBind)
{
IDefinition assignedDef = null;
IDefinition assignedTypeDef = null;
@@ -915,16 +915,9 @@ public class JSEmitter extends ASEmitter implements
IJSEmitter
{
write(coercionStart);
}
- if
(project.getBuiltinType(BuiltinType.FUNCTION).equals(definition) &&
+ if (checkForConditionalBind &&
project.getBuiltinType(BuiltinType.FUNCTION).equals(definition) &&
assignedNode instanceof
MemberAccessExpressionNode) {
- write(JSGoogEmitterTokens.GOOG_BIND.getToken() +
- ASEmitterTokens.PAREN_OPEN.getToken()
- );
- emitAssignedValue(assignedNode);
- write(ASEmitterTokens.COMMA.getToken());
- MemberAccessExpressionNode maenode =
(MemberAccessExpressionNode)assignedNode;
- getWalker().walk(maenode.getLeftOperandNode());
- write(ASEmitterTokens.PAREN_CLOSE.getToken());
+ emitAssignedCoercionHelper(assignedNode);
} else {
emitAssignedValue(assignedNode);
}
@@ -940,5 +933,26 @@ public class JSEmitter extends ASEmitter implements
IJSEmitter
}
}
}
+
+ private void emitAssignedCoercionHelper(IExpressionNode assignedNode) {
+ MemberAccessExpressionNode maeNode =
(MemberAccessExpressionNode)assignedNode;
+ if (maeNode.getLeftOperandNode() instanceof
ILanguageIdentifierNode &&
+
((ILanguageIdentifierNode)maeNode.getLeftOperandNode()).getKind().equals(ILanguageIdentifierNode.LanguageIdentifierKind.THIS))
{
+ emitAssignedValue(assignedNode);
+ } else {
+
write(JSRoyaleEmitterTokens.CONDITIONAL_BIND_FUNCTION_NAME.getToken() +
+ ASEmitterTokens.PAREN_OPEN.getToken()
+ );
+ emitAssignedValue(assignedNode);
+ write(ASEmitterTokens.COMMA.getToken());
+ getWalker().walk(maeNode.getLeftOperandNode());
+ write(ASEmitterTokens.PAREN_CLOSE.getToken());
+ }
+ }
+
+ public void emitAssignmentCoercion(IExpressionNode assignedNode,
IDefinition definition)
+ {
+ emitAssignmentCoercion(assignedNode, definition, false);
+ }
}
diff --git
a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/BinaryOperatorEmitter.java
b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/BinaryOperatorEmitter.java
index 2aa2e77..a0ed8eb 100644
---
a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/BinaryOperatorEmitter.java
+++
b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/BinaryOperatorEmitter.java
@@ -568,7 +568,7 @@ public class BinaryOperatorEmitter extends JSSubEmitter
implements
if (isAssignment)
{
-
getEmitter().emitAssignmentCoercion(node.getRightOperandNode(),
node.getLeftOperandNode().resolveType(getProject()));
+
getEmitter().emitAssignmentCoercion(node.getRightOperandNode(),
node.getLeftOperandNode().resolveType(getProject()), true);
}
else
{
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 7e9d169..722906e 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,6 +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"),
SKIP_AS_COERCIONS("skipAsCoercions"),
SKIP_FUNCTION_COERCIONS("skipFunctionCoercions"),
JSX("JSX"),