mirror of
https://github.com/urbit/ares.git
synced 2024-11-26 09:57:56 +03:00
interpreter: check for copying flag in exit
This commit is contained in:
parent
f68a95e1f2
commit
45f7f00dc9
@ -1185,6 +1185,11 @@ fn exit(
|
|||||||
unsafe {
|
unsafe {
|
||||||
context.restore(snapshot);
|
context.restore(snapshot);
|
||||||
|
|
||||||
|
if context.stack.copying() {
|
||||||
|
assert!(context.stack.get_frame_pointer() != virtual_frame);
|
||||||
|
context.stack.frame_pop();
|
||||||
|
}
|
||||||
|
|
||||||
let stack = &mut context.stack;
|
let stack = &mut context.stack;
|
||||||
let mut preserve = match error {
|
let mut preserve = match error {
|
||||||
Error::ScryBlocked(path) => path,
|
Error::ScryBlocked(path) => path,
|
||||||
@ -1192,6 +1197,7 @@ fn exit(
|
|||||||
// Return $tang of traces
|
// Return $tang of traces
|
||||||
let h = *(stack.local_noun_pointer(0));
|
let h = *(stack.local_noun_pointer(0));
|
||||||
// XX: Small chance of clobbering something important after OOM?
|
// XX: Small chance of clobbering something important after OOM?
|
||||||
|
// XX: what if we OOM while making a stack trace
|
||||||
T(stack, &[h, t])
|
T(stack, &[h, t])
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -137,6 +137,10 @@ impl NockStack {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn copying(&self) -> bool {
|
||||||
|
self.pc
|
||||||
|
}
|
||||||
|
|
||||||
/** Current frame pointer of this NockStack */
|
/** Current frame pointer of this NockStack */
|
||||||
pub fn get_frame_pointer(&self) -> *const u64 {
|
pub fn get_frame_pointer(&self) -> *const u64 {
|
||||||
self.frame_pointer
|
self.frame_pointer
|
||||||
|
Loading…
Reference in New Issue
Block a user