vm: fix crash when converting a callstack to an array

db4
Slava Pestov 2009-10-20 12:19:02 -05:00
parent acdcb181e0
commit 50f9bf67a7
3 changed files with 5 additions and 5 deletions

View File

@ -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));

View File

@ -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();

View File

@ -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);