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 a5405799e70af96273da943966a3c7cc4437f9c4 Author: Josh Tynjala <[email protected]> AuthorDate: Thu Sep 4 09:12:59 2025 -0700 IMXMLBlockVisitor, IMXMLEmitter: move MXMLFunctionID/fx:Function into its own visitFunction and emitFunction methods Functions were previously handled in visitInstance and emitInstance, emitInstance had a completely separate path for functions that it didn't have for other instances. Additionally, it doesn't make sense to me that MXMLClassID would have its own methods (similar to other primitives), and not MXMLFunctionID. --- .../royale/compiler/codegen/mxml/IMXMLEmitter.java | 3 ++ .../internal/codegen/mxml/MXMLBlockWalker.java | 9 ++++ .../internal/codegen/mxml/MXMLEmitter.java | 6 +++ .../codegen/mxml/royale/MXMLRoyaleEmitter.java | 49 ++++++++++++---------- .../internal/visitor/mxml/MXMLNodeSwitch.java | 5 ++- .../compiler/visitor/mxml/IMXMLBlockVisitor.java | 3 ++ 6 files changed, 53 insertions(+), 22 deletions(-) diff --git a/compiler-jx/src/main/java/org/apache/royale/compiler/codegen/mxml/IMXMLEmitter.java b/compiler-jx/src/main/java/org/apache/royale/compiler/codegen/mxml/IMXMLEmitter.java index 450140d11..368473eb1 100644 --- a/compiler-jx/src/main/java/org/apache/royale/compiler/codegen/mxml/IMXMLEmitter.java +++ b/compiler-jx/src/main/java/org/apache/royale/compiler/codegen/mxml/IMXMLEmitter.java @@ -33,6 +33,7 @@ import org.apache.royale.compiler.tree.mxml.IMXMLEmbedNode; import org.apache.royale.compiler.tree.mxml.IMXMLEventSpecifierNode; import org.apache.royale.compiler.tree.mxml.IMXMLFactoryNode; import org.apache.royale.compiler.tree.mxml.IMXMLFileNode; +import org.apache.royale.compiler.tree.mxml.IMXMLFunctionNode; import org.apache.royale.compiler.tree.mxml.IMXMLImplementsNode; import org.apache.royale.compiler.tree.mxml.IMXMLInstanceNode; import org.apache.royale.compiler.tree.mxml.IMXMLIntNode; @@ -109,6 +110,8 @@ public interface IMXMLEmitter extends IEmitter void emitMXMLClass(IMXMLClassNode node); + void emitFunction(IMXMLFunctionNode node); + //-------------------------------------------------------------------------- void emitLiteral(IMXMLLiteralNode node); diff --git a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/MXMLBlockWalker.java b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/MXMLBlockWalker.java index 07ac4f650..455044481 100644 --- a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/MXMLBlockWalker.java +++ b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/MXMLBlockWalker.java @@ -42,6 +42,7 @@ import org.apache.royale.compiler.tree.mxml.IMXMLEmbedNode; import org.apache.royale.compiler.tree.mxml.IMXMLEventSpecifierNode; import org.apache.royale.compiler.tree.mxml.IMXMLFactoryNode; import org.apache.royale.compiler.tree.mxml.IMXMLFileNode; +import org.apache.royale.compiler.tree.mxml.IMXMLFunctionNode; import org.apache.royale.compiler.tree.mxml.IMXMLImplementsNode; import org.apache.royale.compiler.tree.mxml.IMXMLInstanceNode; import org.apache.royale.compiler.tree.mxml.IMXMLIntNode; @@ -352,6 +353,14 @@ public class MXMLBlockWalker implements IMXMLBlockVisitor, IMXMLBlockWalker mxmlEmitter.emitMXMLClass(node); } + + @Override + public void visitFunction(IMXMLFunctionNode node) + { + debug("visitFunction()"); + + mxmlEmitter.emitFunction(node); + } //-------------------------------------------------------------------------- diff --git a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/MXMLEmitter.java b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/MXMLEmitter.java index 9e550faf4..8d3fdc3af 100644 --- a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/MXMLEmitter.java +++ b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/MXMLEmitter.java @@ -301,6 +301,12 @@ public class MXMLEmitter extends Emitter implements IMXMLEmitter write(node.getValue(getMXMLWalker().getProject()).getQualifiedName()); } + @Override + public void emitFunction(IMXMLFunctionNode node) + { + emitInstance(node); + } + //-------------------------------------------------------------------------- @Override 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 ff9f18296..73000515b 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 @@ -2507,8 +2507,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements ASTNodeID nodeID = node.getNodeID(); if ((nodeID == ASTNodeID.MXMLXMLID - || nodeID == ASTNodeID.MXMLXMLListID - || nodeID == ASTNodeID.MXMLFunctionID) + || nodeID == ASTNodeID.MXMLXMLListID) && node.getParent().getNodeID() == ASTNodeID.MXMLDeclarationsID) { primitiveDeclarationNodes.add(node); @@ -2520,25 +2519,6 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements .getProject()); MXMLDescriptorSpecifier currentPropertySpecifier = getCurrentDescriptor("ps"); - if (nodeID == ASTNodeID.MXMLFunctionID) - { - RoyaleJSProject project = (RoyaleJSProject) getMXMLWalker().getProject(); - project.needLanguage = true; - MXMLFunctionNode fnode = ((MXMLFunctionNode)node); - IExpressionNode fexpNode = (IExpressionNode)fnode.getExpressionNode(); - IASEmitter asEmitter = ((IMXMLBlockWalker) getMXMLWalker()) - .getASEmitter(); - String fNodeString = ((JSRoyaleEmitter)asEmitter).stringifyNode(fexpNode); - currentPropertySpecifier.value = fNodeString; - - String id = node.getID(); - String localId = node.getLocalID(); - if (id != null || localId != null) - { - primitiveDeclarationNodes.add(node); - } - return; - } String effectiveId = null; String id = node.getID(); @@ -3373,6 +3353,33 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements } } + @Override + public void emitFunction(IMXMLFunctionNode node) + { + RoyaleJSProject project = (RoyaleJSProject) getMXMLWalker().getProject(); + project.needLanguage = true; + IASNode exprNode = node.getExpressionNode(); + IASEmitter asEmitter = ((IMXMLBlockWalker) getMXMLWalker()) + .getASEmitter(); + String functionName = ((JSRoyaleEmitter)asEmitter).stringifyNode(exprNode); + + if (node.getParent().getNodeID() == ASTNodeID.MXMLDeclarationsID) + { + primitiveDeclarationNodes.add(node); + return; + } + + MXMLDescriptorSpecifier currentPropertySpecifier = getCurrentDescriptor("ps"); + currentPropertySpecifier.value = functionName; + + String id = node.getID(); + String localId = node.getLocalID(); + if (id != null || localId != null) + { + primitiveDeclarationNodes.add(node); + } + } + //-------------------------------------------------------------------------- @Override diff --git a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/visitor/mxml/MXMLNodeSwitch.java b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/visitor/mxml/MXMLNodeSwitch.java index a203c7970..b5c2188bb 100644 --- a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/visitor/mxml/MXMLNodeSwitch.java +++ b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/visitor/mxml/MXMLNodeSwitch.java @@ -33,6 +33,7 @@ import org.apache.royale.compiler.tree.mxml.IMXMLEmbedNode; import org.apache.royale.compiler.tree.mxml.IMXMLEventSpecifierNode; import org.apache.royale.compiler.tree.mxml.IMXMLFactoryNode; import org.apache.royale.compiler.tree.mxml.IMXMLFileNode; +import org.apache.royale.compiler.tree.mxml.IMXMLFunctionNode; import org.apache.royale.compiler.tree.mxml.IMXMLImplementsNode; import org.apache.royale.compiler.tree.mxml.IMXMLInstanceNode; import org.apache.royale.compiler.tree.mxml.IMXMLIntNode; @@ -125,6 +126,9 @@ public class MXMLNodeSwitch implements IASNodeStrategy case MXMLClassID: visitor.visitMXMLClass((IMXMLClassNode) node); break; + case MXMLFunctionID: + visitor.visitFunction((IMXMLFunctionNode) node); + break; case MXMLStyleID: visitor.visitStyleBlock((IMXMLStyleNode)node); break; @@ -161,7 +165,6 @@ public class MXMLNodeSwitch implements IASNodeStrategy case MXMLHTTPServiceID: case MXMLXMLID: case MXMLXMLListID: - case MXMLFunctionID: visitor.visitInstance((IMXMLInstanceNode) node); break; case MXMLRemoteObjectID: diff --git a/compiler-jx/src/main/java/org/apache/royale/compiler/visitor/mxml/IMXMLBlockVisitor.java b/compiler-jx/src/main/java/org/apache/royale/compiler/visitor/mxml/IMXMLBlockVisitor.java index 2144865c3..55edcd34e 100644 --- a/compiler-jx/src/main/java/org/apache/royale/compiler/visitor/mxml/IMXMLBlockVisitor.java +++ b/compiler-jx/src/main/java/org/apache/royale/compiler/visitor/mxml/IMXMLBlockVisitor.java @@ -33,6 +33,7 @@ import org.apache.royale.compiler.tree.mxml.IMXMLEmbedNode; import org.apache.royale.compiler.tree.mxml.IMXMLEventSpecifierNode; import org.apache.royale.compiler.tree.mxml.IMXMLFactoryNode; import org.apache.royale.compiler.tree.mxml.IMXMLFileNode; +import org.apache.royale.compiler.tree.mxml.IMXMLFunctionNode; import org.apache.royale.compiler.tree.mxml.IMXMLImplementsNode; import org.apache.royale.compiler.tree.mxml.IMXMLInstanceNode; import org.apache.royale.compiler.tree.mxml.IMXMLIntNode; @@ -107,6 +108,8 @@ public interface IMXMLBlockVisitor extends IBlockVisitor void visitMXMLClass(IMXMLClassNode node); + void visitFunction(IMXMLFunctionNode node); + //-------------------------------------------------------------------------- void visitLiteral(IMXMLLiteralNode node);
