This is an automated email from the ASF dual-hosted git repository.
joshtynjala pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/royale-compiler.git
The following commit(s) were added to refs/heads/develop by this push:
new 0137963 ClassEmitter, MXMLRoyaleEmitter: fixed missing self variable
for complex initializers when one of them is a closure (closes #177)
0137963 is described below
commit 01379635f314ca5520abb6a8c59c05c97d6f3396
Author: Josh Tynjala <[email protected]>
AuthorDate: Wed Jun 16 14:49:40 2021 -0700
ClassEmitter, MXMLRoyaleEmitter: fixed missing self variable for complex
initializers when one of them is a closure (closes #177)
---
.../compiler/internal/codegen/js/jx/ClassEmitter.java | 12 ++++++++++++
.../internal/codegen/mxml/royale/MXMLRoyaleEmitter.java | 16 ++++++++++++++--
2 files changed, 26 insertions(+), 2 deletions(-)
diff --git
a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/ClassEmitter.java
b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/ClassEmitter.java
index 42f3fe5..ca22de7 100644
---
a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/ClassEmitter.java
+++
b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/ClassEmitter.java
@@ -31,6 +31,7 @@ import
org.apache.royale.compiler.definitions.IFunctionDefinition;
import org.apache.royale.compiler.definitions.INamespaceDefinition;
import org.apache.royale.compiler.internal.codegen.as.ASEmitterTokens;
import org.apache.royale.compiler.internal.codegen.js.JSSubEmitter;
+import org.apache.royale.compiler.internal.codegen.js.goog.JSGoogEmitterTokens;
import
org.apache.royale.compiler.internal.codegen.js.royale.JSRoyaleDocEmitter;
import org.apache.royale.compiler.internal.codegen.js.royale.JSRoyaleEmitter;
import
org.apache.royale.compiler.internal.codegen.js.royale.JSRoyaleEmitterTokens;
@@ -249,6 +250,7 @@ public class ClassEmitter extends JSSubEmitter implements
public void emitComplexInitializers(IClassNode node)
{
+ boolean wroteSelf = false;
boolean wroteOne = false;
IDefinitionNode[] dnodes = node.getAllMemberNodes();
for (IDefinitionNode dnode : dnodes)
@@ -259,6 +261,16 @@ public class ClassEmitter extends JSSubEmitter implements
IExpressionNode vnode = varnode.getAssignedValueNode();
if (vnode != null && (!(dnode.getDefinition().isStatic() ||
EmitterUtils.isScalar(vnode))))
{
+ if(!wroteSelf && vnode instanceof IFunctionObjectNode)
+ {
+ writeNewline();
+ writeToken(ASEmitterTokens.VAR);
+ writeToken(JSGoogEmitterTokens.SELF);
+ writeToken(ASEmitterTokens.EQUAL);
+ write(ASEmitterTokens.THIS);
+ writeNewline(ASEmitterTokens.SEMICOLON);
+ wroteSelf = true;
+ }
writeNewline();
write(ASEmitterTokens.THIS);
write(ASEmitterTokens.MEMBER_ACCESS);
diff --git
a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/royale/MXMLRoyaleEmitter.java
b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/royale/MXMLRoyaleEmitter.java
index 9b96f62..7744ebc 100644
---
a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/royale/MXMLRoyaleEmitter.java
+++
b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/royale/MXMLRoyaleEmitter.java
@@ -3598,7 +3598,8 @@ public class MXMLRoyaleEmitter extends MXMLEmitter
implements
@SuppressWarnings("incomplete-switch")
private void emitComplexInitializers(IASNode node)
{
- int n = node.getChildCount();
+ boolean wroteSelf = false;
+ int n = node.getChildCount();
for (int i = 0; i < n; i++)
{
IASNode child = node.getChild(i);
@@ -3615,12 +3616,23 @@ public class MXMLRoyaleEmitter extends MXMLEmitter
implements
IVariableNode varnode =
(IVariableNode)schild;
IExpressionNode vnode =
varnode.getAssignedValueNode();
-
if (vnode != null && (!EmitterUtils.isScalar(vnode)))
{
IDefinition varDef = varnode.getDefinition();
if (varDef.isStatic())
+ {
continue;
+ }
+ if(!wroteSelf && vnode instanceof
IFunctionObjectNode)
+ {
+ writeNewline();
+ writeToken(ASEmitterTokens.VAR);
+ writeToken(JSGoogEmitterTokens.SELF);
+ writeToken(ASEmitterTokens.EQUAL);
+ write(ASEmitterTokens.THIS);
+ writeNewline(ASEmitterTokens.SEMICOLON);
+ wroteSelf = true;
+ }
writeNewline();
write(ASEmitterTokens.THIS);
write(ASEmitterTokens.MEMBER_ACCESS);