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);

Reply via email to