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 b939a18ed UnaryOperatorEmitter: followup to adding new JSDynamicAccess 
metadata to also support ++ and -- operators
b939a18ed is described below

commit b939a18ed7d101a505eda9c1aba5ec7b746d63d2
Author: Josh Tynjala <[email protected]>
AuthorDate: Tue Aug 11 15:06:32 2026 -0700

    UnaryOperatorEmitter: followup to adding new JSDynamicAccess metadata to 
also support ++ and -- operators
    
    Followup to commit 308d8867b923c0edff4bf814fa89a175123dcf37
---
 .../codegen/js/jx/UnaryOperatorEmitter.java        | 71 ++++++++++++++++++++++
 1 file changed, 71 insertions(+)

diff --git 
a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/UnaryOperatorEmitter.java
 
b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/UnaryOperatorEmitter.java
index 5b0171ded..8de4c800c 100644
--- 
a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/UnaryOperatorEmitter.java
+++ 
b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/UnaryOperatorEmitter.java
@@ -31,6 +31,7 @@ import 
org.apache.royale.compiler.internal.codegen.js.royale.JSRoyaleEmitterToke
 import org.apache.royale.compiler.internal.definitions.AppliedVectorDefinition;
 import org.apache.royale.compiler.internal.projects.RoyaleJSProject;
 import org.apache.royale.compiler.internal.tree.as.*;
+import org.apache.royale.compiler.tree.as.IOperatorNode.OperatorType;
 import org.apache.royale.compiler.tree.ASTNodeID;
 import org.apache.royale.compiler.tree.as.IDynamicAccessNode;
 import org.apache.royale.compiler.tree.as.IExpressionNode;
@@ -88,6 +89,76 @@ public class UnaryOperatorEmitter extends JSSubEmitter 
implements
             ((MemberAccessExpressionNode) 
node.getOperandNode()).setLeftOperandNode(patchedVectorReference);
         }
 
+        if (isAssignment && node.getOperandNode() instanceof 
IDynamicAccessNode)
+        {
+            IDynamicAccessNode dynamicAccessNode = (IDynamicAccessNode) 
node.getOperandNode();
+            IExpressionNode leftOperandNode = 
dynamicAccessNode.getLeftOperandNode();
+            ITypeDefinition leftType = 
leftOperandNode.resolveType(getProject());
+            if (leftType != null)
+            {
+                IMetaTag dynamicOverrideMeta = null;
+                for (ITypeDefinition currentType : 
leftType.typeIteratable(getProject(), false))
+                {
+                    dynamicOverrideMeta = 
currentType.getMetaTagByName(IJSMetaAttributeConstants.ATTRIBUTE_DYNAMIC_OVERRIDE);
+                    if (dynamicOverrideMeta != null)
+                    {
+                        break;
+                    }
+                }
+                if (dynamicOverrideMeta != null)
+                {
+                    String getMethod = 
dynamicOverrideMeta.getAttributeValue(IJSMetaAttributeConstants.NAME_DYNAMIC_OVERRIDE_GET_METHOD);
+                    String setMethod = 
dynamicOverrideMeta.getAttributeValue(IJSMetaAttributeConstants.NAME_DYNAMIC_OVERRIDE_SET_METHOD);
+                    if (getMethod != null && setMethod != null)
+                    {
+                        // BEFORE: abc[xyz]++
+                        // AFTER:  abc.set(xyz, abc.get(xyz) + 1)
+
+                        
getWalker().walk(dynamicAccessNode.getLeftOperandNode());
+                        startMapping(node);
+                        write(ASEmitterTokens.MEMBER_ACCESS);
+                        write(setMethod);
+                        write(ASEmitterTokens.PAREN_OPEN);
+                        endMapping(node);
+                        
getWalker().walk(dynamicAccessNode.getRightOperandNode());
+                        writeToken(ASEmitterTokens.COMMA);
+
+                        
getWalker().walk(dynamicAccessNode.getLeftOperandNode());
+                        startMapping(node);
+                        write(ASEmitterTokens.MEMBER_ACCESS);
+                        write(getMethod);
+                        write(ASEmitterTokens.PAREN_OPEN);
+                        endMapping(node);
+                        
getWalker().walk(dynamicAccessNode.getRightOperandNode());
+                        startMapping(node);
+                        write(ASEmitterTokens.PAREN_CLOSE);
+                        endMapping(node);
+                        startMapping(node, dynamicAccessNode);
+                        if (node.getNodeID() == ASTNodeID.Op_PreIncrID
+                                || node.getNodeID() == ASTNodeID.Op_PostIncrID)
+                        {
+                            write(ASEmitterTokens.SPACE);
+                            write(OperatorType.PLUS.getOperatorText());
+                            write(ASEmitterTokens.SPACE);
+                            write("1");
+                        }
+                        else // decrement
+                        {
+                            write(ASEmitterTokens.SPACE);
+                            write(OperatorType.MINUS.getOperatorText());
+                            write(ASEmitterTokens.SPACE);
+                            write("1");
+                        }
+                        endMapping(node);
+                        startMapping(node);
+                        write(ASEmitterTokens.PAREN_CLOSE);
+                        endMapping(node);
+                        return;
+                    }
+                }
+            }
+        }
+
         if (node.getNodeID() == ASTNodeID.Op_PreIncrID
                 || node.getNodeID() == ASTNodeID.Op_PreDecrID
                 || node.getNodeID() == ASTNodeID.Op_BitwiseNotID

Reply via email to