vm: fix crash when converting a callstack to an array
parent
acdcb181e0
commit
50f9bf67a7
|
@ -76,7 +76,7 @@ code_block *factor_vm::frame_code(stack_frame *frame)
|
|||
return (code_block *)frame->xt - 1;
|
||||
}
|
||||
|
||||
cell factor_vm::frame_type(stack_frame *frame)
|
||||
code_block_type factor_vm::frame_type(stack_frame *frame)
|
||||
{
|
||||
return frame_code(frame)->type();
|
||||
}
|
||||
|
@ -97,7 +97,7 @@ cell factor_vm::frame_scan(stack_frame *frame)
|
|||
{
|
||||
switch(frame_type(frame))
|
||||
{
|
||||
case QUOTATION_TYPE:
|
||||
case code_block_unoptimized:
|
||||
{
|
||||
cell quot = frame_executing(frame);
|
||||
if(to_boolean(quot))
|
||||
|
@ -111,7 +111,7 @@ cell factor_vm::frame_scan(stack_frame *frame)
|
|||
else
|
||||
return false_object;
|
||||
}
|
||||
case WORD_TYPE:
|
||||
case code_block_optimized:
|
||||
return false_object;
|
||||
default:
|
||||
critical_error("Bad frame type",frame_type(frame));
|
||||
|
|
|
@ -479,7 +479,7 @@ code_block *factor_vm::add_code_block(code_block_type type, cell code_, cell lab
|
|||
gc_root<byte_array> relocation(relocation_,this);
|
||||
gc_root<array> literals(literals_,this);
|
||||
|
||||
cell code_length = align8(array_capacity(code.untagged()));
|
||||
cell code_length = array_capacity(code.untagged());
|
||||
code_block *compiled = allot_code_block(code_length,type);
|
||||
|
||||
compiled->owner = owner.value();
|
||||
|
|
|
@ -571,7 +571,7 @@ struct factor_vm
|
|||
void primitive_callstack();
|
||||
void primitive_set_callstack();
|
||||
code_block *frame_code(stack_frame *frame);
|
||||
cell frame_type(stack_frame *frame);
|
||||
code_block_type frame_type(stack_frame *frame);
|
||||
cell frame_executing(stack_frame *frame);
|
||||
stack_frame *frame_successor(stack_frame *frame);
|
||||
cell frame_scan(stack_frame *frame);
|
||||
|
|
Loading…
Reference in New Issue