Ensure owner and receiver are reset after executing alias (#373)

This fixes an issue where the frame's owner/receiver are not reset
if a type test on a typealias fails.
This commit is contained in:
Daniel Chao
2024-03-28 07:58:22 -07:00
committed by GitHub
parent 759d4806c0
commit 28448b5512
3 changed files with 23 additions and 7 deletions

View File

@@ -1627,9 +1627,12 @@ public abstract class TypeNode extends PklNode {
VmUtils.setOwner(frame, VmUtils.getOwner(typeAlias.getEnclosingFrame()));
VmUtils.setReceiver(frame, VmUtils.getReceiver(typeAlias.getEnclosingFrame()));
aliasedTypeNode.execute(frame, value);
VmUtils.setOwner(frame, prevOwner);
VmUtils.setReceiver(frame, prevReceiver);
try {
aliasedTypeNode.execute(frame, value);
} finally {
VmUtils.setOwner(frame, prevOwner);
VmUtils.setReceiver(frame, prevReceiver);
}
}
/** See docstring on {@link TypeAliasTypeNode#execute}. */
@@ -1640,10 +1643,12 @@ public abstract class TypeNode extends PklNode {
VmUtils.setOwner(frame, VmUtils.getOwner(typeAlias.getEnclosingFrame()));
VmUtils.setReceiver(frame, VmUtils.getReceiver(typeAlias.getEnclosingFrame()));
aliasedTypeNode.executeAndSet(frame, value);
VmUtils.setOwner(frame, prevOwner);
VmUtils.setReceiver(frame, prevReceiver);
try {
aliasedTypeNode.executeAndSet(frame, value);
} finally {
VmUtils.setOwner(frame, prevOwner);
VmUtils.setReceiver(frame, prevReceiver);
}
}
@Override