mirror of
https://github.com/apple/pkl.git
synced 2026-07-09 22:52:44 +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.setOwner(frame, VmUtils.getOwner(typeAlias.getEnclosingFrame()));
|
||||||
VmUtils.setReceiver(frame, VmUtils.getReceiver(typeAlias.getEnclosingFrame()));
|
VmUtils.setReceiver(frame, VmUtils.getReceiver(typeAlias.getEnclosingFrame()));
|
||||||
|
|
||||||
aliasedTypeNode.execute(frame, value);
|
try {
|
||||||
VmUtils.setOwner(frame, prevOwner);
|
aliasedTypeNode.execute(frame, value);
|
||||||
VmUtils.setReceiver(frame, prevReceiver);
|
} finally {
|
||||||
|
VmUtils.setOwner(frame, prevOwner);
|
||||||
|
VmUtils.setReceiver(frame, prevReceiver);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** See docstring on {@link TypeAliasTypeNode#execute}. */
|
/** See docstring on {@link TypeAliasTypeNode#execute}. */
|
||||||
@@ -1640,10 +1643,12 @@ public abstract class TypeNode extends PklNode {
|
|||||||
VmUtils.setOwner(frame, VmUtils.getOwner(typeAlias.getEnclosingFrame()));
|
VmUtils.setOwner(frame, VmUtils.getOwner(typeAlias.getEnclosingFrame()));
|
||||||
VmUtils.setReceiver(frame, VmUtils.getReceiver(typeAlias.getEnclosingFrame()));
|
VmUtils.setReceiver(frame, VmUtils.getReceiver(typeAlias.getEnclosingFrame()));
|
||||||
|
|
||||||
aliasedTypeNode.executeAndSet(frame, value);
|
try {
|
||||||
|
aliasedTypeNode.executeAndSet(frame, value);
|
||||||
VmUtils.setOwner(frame, prevOwner);
|
} finally {
|
||||||
VmUtils.setReceiver(frame, prevReceiver);
|
VmUtils.setOwner(frame, prevOwner);
|
||||||
|
VmUtils.setReceiver(frame, prevReceiver);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -35,3 +35,10 @@ typealias Bar = Foo
|
|||||||
class Baz extends Bar {}
|
class Baz extends Bar {}
|
||||||
|
|
||||||
res7 = (new Baz {}).value
|
res7 = (new Baz {}).value
|
||||||
|
|
||||||
|
typealias MappingOrListing = Mapping|Listing
|
||||||
|
|
||||||
|
res8 = new {
|
||||||
|
foo = 5
|
||||||
|
bar = if (foo is MappingOrListing) "bar" else foo
|
||||||
|
}
|
||||||
|
|||||||
@@ -11,3 +11,7 @@ res6 {
|
|||||||
name = "Other"
|
name = "Other"
|
||||||
}
|
}
|
||||||
res7 = 42
|
res7 = 42
|
||||||
|
res8 {
|
||||||
|
foo = 5
|
||||||
|
bar = 5
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user