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;
|
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();
|
return frame_code(frame)->type();
|
||||||
}
|
}
|
||||||
|
@ -97,7 +97,7 @@ cell factor_vm::frame_scan(stack_frame *frame)
|
||||||
{
|
{
|
||||||
switch(frame_type(frame))
|
switch(frame_type(frame))
|
||||||
{
|
{
|
||||||
case QUOTATION_TYPE:
|
case code_block_unoptimized:
|
||||||
{
|
{
|
||||||
cell quot = frame_executing(frame);
|
cell quot = frame_executing(frame);
|
||||||
if(to_boolean(quot))
|
if(to_boolean(quot))
|
||||||
|
@ -111,7 +111,7 @@ cell factor_vm::frame_scan(stack_frame *frame)
|
||||||
else
|
else
|
||||||
return false_object;
|
return false_object;
|
||||||
}
|
}
|
||||||
case WORD_TYPE:
|
case code_block_optimized:
|
||||||
return false_object;
|
return false_object;
|
||||||
default:
|
default:
|
||||||
critical_error("Bad frame type",frame_type(frame));
|
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<byte_array> relocation(relocation_,this);
|
||||||
gc_root<array> literals(literals_,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);
|
code_block *compiled = allot_code_block(code_length,type);
|
||||||
|
|
||||||
compiled->owner = owner.value();
|
compiled->owner = owner.value();
|
||||||
|
|
|
@ -571,7 +571,7 @@ struct factor_vm
|
||||||
void primitive_callstack();
|
void primitive_callstack();
|
||||||
void primitive_set_callstack();
|
void primitive_set_callstack();
|
||||||
code_block *frame_code(stack_frame *frame);
|
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);
|
cell frame_executing(stack_frame *frame);
|
||||||
stack_frame *frame_successor(stack_frame *frame);
|
stack_frame *frame_successor(stack_frame *frame);
|
||||||
cell frame_scan(stack_frame *frame);
|
cell frame_scan(stack_frame *frame);
|
||||||
|
|
Loading…
Reference in New Issue