From 50f9bf67a78a36e0bdb65c45cde8dba6f38eb1ba Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Tue, 20 Oct 2009 12:19:02 -0500 Subject: [PATCH] vm: fix crash when converting a callstack to an array --- vm/callstack.cpp | 6 +++--- vm/code_block.cpp | 2 +- vm/vm.hpp | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/vm/callstack.cpp b/vm/callstack.cpp index 4721fc4ece..623db8a3fe 100755 --- a/vm/callstack.cpp +++ b/vm/callstack.cpp @@ -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)); diff --git a/vm/code_block.cpp b/vm/code_block.cpp index 7e6892202a..e29d708c25 100755 --- a/vm/code_block.cpp +++ b/vm/code_block.cpp @@ -479,7 +479,7 @@ code_block *factor_vm::add_code_block(code_block_type type, cell code_, cell lab gc_root relocation(relocation_,this); gc_root 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(); diff --git a/vm/vm.hpp b/vm/vm.hpp index 921e829bda..a2f979e400 100755 --- a/vm/vm.hpp +++ b/vm/vm.hpp @@ -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);