mirror of
https://github.com/apple/pkl.git
synced 2026-04-21 16:01:31 +02:00
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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user