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