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

commit 16e41abb886ea592c6c7bc9390ca98ce100f4e24
Author: Josh Tynjala <[email protected]>
AuthorDate: Wed Mar 11 15:30:22 2026 -0700

    MXMLRoyaleEmitter: missing implementation for <fx:Vector> inside 
<fx:Declarations>
---
 .../codegen/mxml/royale/MXMLRoyaleEmitter.java     | 218 ++++++++++++++++++++-
 1 file changed, 217 insertions(+), 1 deletion(-)

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 fbdac5f90..4b37bff50 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
@@ -90,7 +90,6 @@ import 
org.apache.royale.compiler.internal.tree.as.MemberAccessExpressionNode;
 import org.apache.royale.compiler.internal.tree.as.VariableNode;
 import org.apache.royale.compiler.internal.tree.mxml.MXMLDocumentNode;
 import org.apache.royale.compiler.internal.tree.mxml.MXMLFileNode;
-import org.apache.royale.compiler.internal.tree.mxml.MXMLFunctionNode;
 import org.apache.royale.compiler.internal.tree.mxml.MXMLBindingNode;
 import org.apache.royale.compiler.mxml.IMXMLLanguageConstants;
 import org.apache.royale.compiler.problems.FileNotFoundProblem;
@@ -3236,6 +3235,20 @@ public class MXMLRoyaleEmitter extends MXMLEmitter 
implements
 
     }
 
+    @Override
+    public void emitVector(IMXMLVectorNode node)
+    {
+       if (node.getParent().getNodeID() == ASTNodeID.MXMLDeclarationsID)
+       {
+               primitiveDeclarationNodes.add(node);
+               return;
+       }
+
+        // TODO: implement <fx:Vector/>
+
+        super.emitVector(node);
+    }
+
     @Override
     public void emitBoolean(IMXMLBooleanNode node)
     {
@@ -3768,6 +3781,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter 
implements
     @SuppressWarnings("incomplete-switch")
        private void emitComplexInitializers(IASNode node)
     {
+        RoyaleJSProject fjp = (RoyaleJSProject) getMXMLWalker().getProject();
         boolean wroteSelf = false;
         int n = node.getChildCount();
        for (int i = 0; i < n; i++)
@@ -3901,6 +3915,111 @@ public class MXMLRoyaleEmitter extends MXMLEmitter 
implements
                         }
                         write(ASEmitterTokens.SQUARE_CLOSE);
                         write(ASEmitterTokens.SEMICOLON);
+                    }
+                           break;
+                               }
+                               case MXMLVectorID:
+                               {
+                                       IMXMLVectorNode vectorNode = 
(IMXMLVectorNode)declNode;
+                    int m = vectorNode.getChildCount();
+                    boolean isDataBinding = false;
+                    if(m == 1)
+                    {
+                        IASNode child = vectorNode.getChild(0);
+                        isDataBinding = child instanceof IMXMLDataBindingNode;
+                    }
+                    if (!isDataBinding)
+                    {
+                        String elementClassName = 
formatQualifiedName(vectorNode.getType().getQualifiedName());
+
+                        varname = vectorNode.getEffectiveID();
+                        writeNewline();
+                        write(ASEmitterTokens.THIS);
+                        write(ASEmitterTokens.MEMBER_ACCESS);
+                        write(varname);
+                        write(ASEmitterTokens.SPACE);
+                        writeToken(ASEmitterTokens.EQUAL);
+
+                        String vectorEmulationClass = null;
+                        String vectorEmulationLiteralFunction = null;
+                        boolean vectorEmulationElementTypes = true;
+                        if (fjp.config != null)
+                        {
+                            vectorEmulationClass = 
fjp.config.getJsVectorEmulationClass();
+                            vectorEmulationLiteralFunction = 
fjp.config.getJsVectorEmulationLiteralFunction();
+                            vectorEmulationElementTypes = 
fjp.config.getJsVectorEmulationElementTypes();
+                        }
+
+                        if (vectorEmulationLiteralFunction != null)
+                        {
+                            write(vectorEmulationLiteralFunction);
+                            write(ASEmitterTokens.PAREN_OPEN);
+                        }
+                        else if (vectorEmulationClass != null)
+                        {
+                            if 
(!vectorEmulationClass.equals(IASLanguageConstants.Array))
+                            {
+                                //Explanation:
+                                //this was how it was originally set up, but 
it assumes the constructor of the emulation
+                                //class can handle first argument being an 
Array or numeric value...
+                                writeToken(ASEmitterTokens.NEW);
+                                write(vectorEmulationClass);
+                                write(ASEmitterTokens.PAREN_OPEN);
+                            }
+                            // otherwise.... if 'Array' is the emulation 
class, then just use the literal content
+                        }
+                        else
+                        {
+                            //no 'new' output in this case, just coercion, so 
map from the start of 'new'
+                            
write(formatQualifiedName(JSRoyaleEmitterTokens.LANGUAGE_QNAME.getToken()));
+                            write(ASEmitterTokens.MEMBER_ACCESS);
+                            write(JSRoyaleEmitterTokens.SYNTH_VECTOR);
+                            write(ASEmitterTokens.PAREN_OPEN);
+                            write(ASEmitterTokens.SINGLE_QUOTE);
+                            //the element type of the Vector:
+                            write(elementClassName);
+                            write(ASEmitterTokens.SINGLE_QUOTE);
+                            write(ASEmitterTokens.PAREN_CLOSE);
+                            write(ASEmitterTokens.SQUARE_OPEN);
+                            write(ASEmitterTokens.SINGLE_QUOTE);
+                            write("coerce");
+                            write(ASEmitterTokens.SINGLE_QUOTE);
+                            write(ASEmitterTokens.SQUARE_CLOSE);
+                            write(ASEmitterTokens.PAREN_OPEN);
+                        }
+
+                        write(ASEmitterTokens.SQUARE_OPEN);
+                        boolean firstOne = true;
+                        for (int j = 0; j < m; j++)
+                        {
+                            IMXMLInstanceNode valueNode = 
(IMXMLInstanceNode)(vectorNode.getChild(j));
+                            if (firstOne)
+                                firstOne = false;
+                            else
+                                writeToken(ASEmitterTokens.COMMA);
+                            write(instanceToString(valueNode));
+                        }
+                        write(ASEmitterTokens.SQUARE_CLOSE);
+
+                        if (vectorEmulationClass != null)
+                        {
+                            if 
(!vectorEmulationClass.equals(IASLanguageConstants.Array))
+                            {
+                                if (vectorEmulationElementTypes)
+                                {
+                                    writeToken(ASEmitterTokens.COMMA);
+                                    write(ASEmitterTokens.SINGLE_QUOTE);
+                                    write(elementClassName);
+                                    write(ASEmitterTokens.SINGLE_QUOTE);
+                                }
+                                write(ASEmitterTokens.PAREN_CLOSE);
+                            }
+                        }
+                        else
+                        {
+                            write(ASEmitterTokens.PAREN_CLOSE);
+                        }
+                        write(ASEmitterTokens.SEMICOLON);
                     }
                            break;
                                }
@@ -4068,6 +4187,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter 
implements
 
     private String instanceToString(IMXMLInstanceNode instanceNode)
     {
+        RoyaleJSProject fjp = (RoyaleJSProject) getMXMLWalker().getProject();
        if (instanceNode instanceof IMXMLStringNode)
        {
                IMXMLStringNode stringNode = (IMXMLStringNode)instanceNode;
@@ -4135,6 +4255,102 @@ public class MXMLRoyaleEmitter extends MXMLEmitter 
implements
             sb.append(ASEmitterTokens.SQUARE_CLOSE.getToken());
             return sb.toString();
        }
+       else if (instanceNode instanceof IMXMLVectorNode)
+       {
+               IMXMLVectorNode vectorNode = (IMXMLVectorNode)instanceNode;
+            StringBuilder sb = new StringBuilder();
+
+            String elementClassName = 
formatQualifiedName(vectorNode.getType().getQualifiedName());
+
+            String vectorEmulationClass = null;
+            String vectorEmulationLiteralFunction = null;
+            boolean vectorEmulationElementTypes = true;
+            if (fjp.config != null)
+            {
+                vectorEmulationClass = fjp.config.getJsVectorEmulationClass();
+                vectorEmulationLiteralFunction = 
fjp.config.getJsVectorEmulationLiteralFunction();
+                vectorEmulationElementTypes = 
fjp.config.getJsVectorEmulationElementTypes();
+            }
+
+            if (vectorEmulationLiteralFunction != null)
+            {
+                sb.append(vectorEmulationLiteralFunction);
+                sb.append(ASEmitterTokens.PAREN_OPEN.getToken());
+            }
+            else if (vectorEmulationClass != null)
+            {
+                if (!vectorEmulationClass.equals(IASLanguageConstants.Array))
+                {
+                    //Explanation:
+                    //this was how it was originally set up, but it assumes 
the constructor of the emulation
+                    //class can handle first argument being an Array or 
numeric value...
+                    sb.append(ASEmitterTokens.NEW.getToken());
+                    sb.append(vectorEmulationClass);
+                    sb.append(ASEmitterTokens.PAREN_OPEN.getToken());
+                }
+                // otherwise.... if 'Array' is the emulation class, then just 
use the literal content
+            }
+            else
+            {
+                //no 'new' output in this case, just coercion, so map from the 
start of 'new'
+                
sb.append(formatQualifiedName(JSRoyaleEmitterTokens.LANGUAGE_QNAME.getToken()));
+                sb.append(ASEmitterTokens.MEMBER_ACCESS.getToken());
+                sb.append(JSRoyaleEmitterTokens.SYNTH_VECTOR.getToken());
+                sb.append(ASEmitterTokens.PAREN_OPEN.getToken());
+                sb.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
+                //the element type of the Vector:
+                sb.append(elementClassName);
+                sb.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
+                sb.append(ASEmitterTokens.PAREN_CLOSE.getToken());
+                sb.append(ASEmitterTokens.SQUARE_OPEN.getToken());
+                sb.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
+                sb.append("coerce");
+                sb.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
+                sb.append(ASEmitterTokens.SQUARE_CLOSE.getToken());
+                sb.append(ASEmitterTokens.PAREN_OPEN.getToken());
+            }
+
+            sb.append(ASEmitterTokens.SQUARE_OPEN.getToken());
+            int m = vectorNode.getChildCount();
+               boolean firstOne = true;
+            for (int j = 0; j < m; j++)
+            {
+                   IMXMLInstanceNode valueNode = 
(IMXMLInstanceNode)(vectorNode.getChild(j));
+               if (firstOne)
+                {
+                       firstOne = false;
+                }
+               else
+                {
+                       sb.append(ASEmitterTokens.COMMA.getToken());
+                       sb.append(ASEmitterTokens.SPACE.getToken());
+                }
+                   sb.append(instanceToString(valueNode));
+            }
+            sb.append(ASEmitterTokens.SQUARE_CLOSE.getToken());
+
+            if (vectorEmulationClass != null)
+            {
+                if (!vectorEmulationClass.equals(IASLanguageConstants.Array))
+                {
+                    if (vectorEmulationElementTypes)
+                    {
+                        sb.append(ASEmitterTokens.COMMA.getToken());
+                        sb.append(ASEmitterTokens.SPACE.getToken());
+                        sb.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
+                        sb.append(elementClassName);
+                        sb.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
+                    }
+                    sb.append(ASEmitterTokens.PAREN_CLOSE.getToken());
+                }
+            }
+            else
+            {
+                sb.append(ASEmitterTokens.PAREN_CLOSE.getToken());
+            }
+
+            return sb.toString();
+       }
        else if ((instanceNode instanceof IMXMLIntNode) ||
                        (instanceNode instanceof IMXMLUintNode) ||
                        (instanceNode instanceof IMXMLNumberNode) ||

Reply via email to