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