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

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

View File

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