cell factor_vm::capture_callstack(context *ctx) { stack_frame *top = second_from_top_stack_frame(ctx); stack_frame *bottom = ctx->callstack_bottom; fixnum size = std::max((fixnum)0,(fixnum)bottom - (fixnum)top); callstack *stack = allot_callstack(size); memcpy(stack->top(),top,size); return tag<callstack>(stack); }
void factor_vm::primitive_callstack() { stack_frame *top = second_from_top_stack_frame(); stack_frame *bottom = ctx->callstack_bottom; fixnum size = std::max((fixnum)0,(fixnum)bottom - (fixnum)top); callstack *stack = allot_callstack(size); memcpy(stack->top(),top,size); dpush(tag<callstack>(stack)); }
void factor_vm::primitive_callstack() { stack_frame *top = capture_start(); stack_frame *bottom = stack_chain->callstack_bottom; fixnum size = (cell)bottom - (cell)top; if(size < 0) size = 0; callstack *stack = allot_callstack(size); memcpy(stack->top(),top,size); dpush(tag<callstack>(stack)); }