vm: don't recompile lazy-jit-compile more than once
parent
860641f759
commit
cc69719147
|
@ -76,7 +76,7 @@ gc
|
|||
"." write flush
|
||||
|
||||
{
|
||||
+ 2/ < <= > >= shift
|
||||
+ * 2/ < <= > >= shift
|
||||
} compile-unoptimized
|
||||
|
||||
"." write flush
|
||||
|
|
|
@ -102,11 +102,11 @@ void *factor_vm::alien_pointer()
|
|||
|
||||
/* define words to read/write values at an alien address */
|
||||
#define DEFINE_ALIEN_ACCESSOR(name,type,from,to) \
|
||||
PRIMITIVE(alien_##name) \
|
||||
VM_C_API void primitive_alien_##name(factor_vm *parent) \
|
||||
{ \
|
||||
parent->ctx->push(from(*(type*)(parent->alien_pointer()),parent)); \
|
||||
} \
|
||||
PRIMITIVE(set_alien_##name) \
|
||||
VM_C_API void primitive_set_alien_##name(factor_vm *parent) \
|
||||
{ \
|
||||
type *ptr = (type *)parent->alien_pointer(); \
|
||||
type value = (type)to(parent->ctx->pop(),parent); \
|
||||
|
|
|
@ -3,135 +3,135 @@
|
|||
namespace factor
|
||||
{
|
||||
|
||||
#define PRIMITIVE_FORWARD(name) extern "C" void primitive_##name(factor_vm *parent) \
|
||||
#define PRIMITIVE(name) VM_C_API void primitive_##name(factor_vm *parent) \
|
||||
{ \
|
||||
parent->primitive_##name(); \
|
||||
}
|
||||
|
||||
PRIMITIVE_FORWARD(alien_address)
|
||||
PRIMITIVE_FORWARD(all_instances)
|
||||
PRIMITIVE_FORWARD(array)
|
||||
PRIMITIVE_FORWARD(array_to_quotation)
|
||||
PRIMITIVE_FORWARD(become)
|
||||
PRIMITIVE_FORWARD(bignum_add)
|
||||
PRIMITIVE_FORWARD(bignum_and)
|
||||
PRIMITIVE_FORWARD(bignum_bitp)
|
||||
PRIMITIVE_FORWARD(bignum_divint)
|
||||
PRIMITIVE_FORWARD(bignum_divmod)
|
||||
PRIMITIVE_FORWARD(bignum_eq)
|
||||
PRIMITIVE_FORWARD(bignum_greater)
|
||||
PRIMITIVE_FORWARD(bignum_greatereq)
|
||||
PRIMITIVE_FORWARD(bignum_less)
|
||||
PRIMITIVE_FORWARD(bignum_lesseq)
|
||||
PRIMITIVE_FORWARD(bignum_log2)
|
||||
PRIMITIVE_FORWARD(bignum_mod)
|
||||
PRIMITIVE_FORWARD(bignum_multiply)
|
||||
PRIMITIVE_FORWARD(bignum_not)
|
||||
PRIMITIVE_FORWARD(bignum_or)
|
||||
PRIMITIVE_FORWARD(bignum_shift)
|
||||
PRIMITIVE_FORWARD(bignum_subtract)
|
||||
PRIMITIVE_FORWARD(bignum_to_fixnum)
|
||||
PRIMITIVE_FORWARD(bignum_to_float)
|
||||
PRIMITIVE_FORWARD(bignum_xor)
|
||||
PRIMITIVE_FORWARD(bits_double)
|
||||
PRIMITIVE_FORWARD(bits_float)
|
||||
PRIMITIVE_FORWARD(byte_array)
|
||||
PRIMITIVE_FORWARD(byte_array_to_bignum)
|
||||
PRIMITIVE_FORWARD(call_clear)
|
||||
PRIMITIVE_FORWARD(callback)
|
||||
PRIMITIVE_FORWARD(callstack)
|
||||
PRIMITIVE_FORWARD(callstack_to_array)
|
||||
PRIMITIVE_FORWARD(check_datastack)
|
||||
PRIMITIVE_FORWARD(clone)
|
||||
PRIMITIVE_FORWARD(code_room)
|
||||
PRIMITIVE_FORWARD(compact_gc)
|
||||
PRIMITIVE_FORWARD(compute_identity_hashcode)
|
||||
PRIMITIVE_FORWARD(data_room)
|
||||
PRIMITIVE_FORWARD(datastack)
|
||||
PRIMITIVE_FORWARD(die)
|
||||
PRIMITIVE_FORWARD(disable_gc_events)
|
||||
PRIMITIVE_FORWARD(dispatch_stats)
|
||||
PRIMITIVE_FORWARD(displaced_alien)
|
||||
PRIMITIVE_FORWARD(dlclose)
|
||||
PRIMITIVE_FORWARD(dll_validp)
|
||||
PRIMITIVE_FORWARD(dlopen)
|
||||
PRIMITIVE_FORWARD(dlsym)
|
||||
PRIMITIVE_FORWARD(double_bits)
|
||||
PRIMITIVE_FORWARD(enable_gc_events)
|
||||
PRIMITIVE_FORWARD(existsp)
|
||||
PRIMITIVE_FORWARD(exit)
|
||||
PRIMITIVE_FORWARD(fclose)
|
||||
PRIMITIVE_FORWARD(fflush)
|
||||
PRIMITIVE_FORWARD(fgetc)
|
||||
PRIMITIVE_FORWARD(fixnum_divint)
|
||||
PRIMITIVE_FORWARD(fixnum_divmod)
|
||||
PRIMITIVE_FORWARD(fixnum_shift)
|
||||
PRIMITIVE_FORWARD(fixnum_to_bignum)
|
||||
PRIMITIVE_FORWARD(fixnum_to_float)
|
||||
PRIMITIVE_FORWARD(float_add)
|
||||
PRIMITIVE_FORWARD(float_bits)
|
||||
PRIMITIVE_FORWARD(float_divfloat)
|
||||
PRIMITIVE_FORWARD(float_eq)
|
||||
PRIMITIVE_FORWARD(float_greater)
|
||||
PRIMITIVE_FORWARD(float_greatereq)
|
||||
PRIMITIVE_FORWARD(float_less)
|
||||
PRIMITIVE_FORWARD(float_lesseq)
|
||||
PRIMITIVE_FORWARD(float_mod)
|
||||
PRIMITIVE_FORWARD(float_multiply)
|
||||
PRIMITIVE_FORWARD(float_subtract)
|
||||
PRIMITIVE_FORWARD(float_to_bignum)
|
||||
PRIMITIVE_FORWARD(float_to_fixnum)
|
||||
PRIMITIVE_FORWARD(float_to_str)
|
||||
PRIMITIVE_FORWARD(fopen)
|
||||
PRIMITIVE_FORWARD(fputc)
|
||||
PRIMITIVE_FORWARD(fread)
|
||||
PRIMITIVE_FORWARD(fseek)
|
||||
PRIMITIVE_FORWARD(ftell)
|
||||
PRIMITIVE_FORWARD(full_gc)
|
||||
PRIMITIVE_FORWARD(fwrite)
|
||||
PRIMITIVE_FORWARD(identity_hashcode)
|
||||
PRIMITIVE_FORWARD(innermost_stack_frame_executing)
|
||||
PRIMITIVE_FORWARD(innermost_stack_frame_scan)
|
||||
PRIMITIVE_FORWARD(jit_compile)
|
||||
PRIMITIVE_FORWARD(load_locals)
|
||||
PRIMITIVE_FORWARD(lookup_method)
|
||||
PRIMITIVE_FORWARD(mega_cache_miss)
|
||||
PRIMITIVE_FORWARD(minor_gc)
|
||||
PRIMITIVE_FORWARD(modify_code_heap)
|
||||
PRIMITIVE_FORWARD(nano_count)
|
||||
PRIMITIVE_FORWARD(optimized_p)
|
||||
PRIMITIVE_FORWARD(profiling)
|
||||
PRIMITIVE_FORWARD(quot_compiled_p)
|
||||
PRIMITIVE_FORWARD(quotation_code)
|
||||
PRIMITIVE_FORWARD(reset_dispatch_stats)
|
||||
PRIMITIVE_FORWARD(resize_array)
|
||||
PRIMITIVE_FORWARD(resize_byte_array)
|
||||
PRIMITIVE_FORWARD(resize_string)
|
||||
PRIMITIVE_FORWARD(retainstack)
|
||||
PRIMITIVE_FORWARD(save_image)
|
||||
PRIMITIVE_FORWARD(save_image_and_exit)
|
||||
PRIMITIVE_FORWARD(set_datastack)
|
||||
PRIMITIVE_FORWARD(set_innermost_stack_frame_quot)
|
||||
PRIMITIVE_FORWARD(set_retainstack)
|
||||
PRIMITIVE_FORWARD(set_slot)
|
||||
PRIMITIVE_FORWARD(set_special_object)
|
||||
PRIMITIVE_FORWARD(set_string_nth_fast)
|
||||
PRIMITIVE_FORWARD(set_string_nth_slow)
|
||||
PRIMITIVE_FORWARD(size)
|
||||
PRIMITIVE_FORWARD(sleep)
|
||||
PRIMITIVE_FORWARD(special_object)
|
||||
PRIMITIVE_FORWARD(str_to_float)
|
||||
PRIMITIVE_FORWARD(string)
|
||||
PRIMITIVE_FORWARD(string_nth)
|
||||
PRIMITIVE_FORWARD(strip_stack_traces)
|
||||
PRIMITIVE_FORWARD(system_micros)
|
||||
PRIMITIVE_FORWARD(tuple)
|
||||
PRIMITIVE_FORWARD(tuple_boa)
|
||||
PRIMITIVE_FORWARD(unimplemented)
|
||||
PRIMITIVE_FORWARD(uninitialized_byte_array)
|
||||
PRIMITIVE_FORWARD(vm_ptr)
|
||||
PRIMITIVE_FORWARD(word)
|
||||
PRIMITIVE_FORWARD(word_code)
|
||||
PRIMITIVE_FORWARD(wrapper)
|
||||
PRIMITIVE(alien_address)
|
||||
PRIMITIVE(all_instances)
|
||||
PRIMITIVE(array)
|
||||
PRIMITIVE(array_to_quotation)
|
||||
PRIMITIVE(become)
|
||||
PRIMITIVE(bignum_add)
|
||||
PRIMITIVE(bignum_and)
|
||||
PRIMITIVE(bignum_bitp)
|
||||
PRIMITIVE(bignum_divint)
|
||||
PRIMITIVE(bignum_divmod)
|
||||
PRIMITIVE(bignum_eq)
|
||||
PRIMITIVE(bignum_greater)
|
||||
PRIMITIVE(bignum_greatereq)
|
||||
PRIMITIVE(bignum_less)
|
||||
PRIMITIVE(bignum_lesseq)
|
||||
PRIMITIVE(bignum_log2)
|
||||
PRIMITIVE(bignum_mod)
|
||||
PRIMITIVE(bignum_multiply)
|
||||
PRIMITIVE(bignum_not)
|
||||
PRIMITIVE(bignum_or)
|
||||
PRIMITIVE(bignum_shift)
|
||||
PRIMITIVE(bignum_subtract)
|
||||
PRIMITIVE(bignum_to_fixnum)
|
||||
PRIMITIVE(bignum_to_float)
|
||||
PRIMITIVE(bignum_xor)
|
||||
PRIMITIVE(bits_double)
|
||||
PRIMITIVE(bits_float)
|
||||
PRIMITIVE(byte_array)
|
||||
PRIMITIVE(byte_array_to_bignum)
|
||||
PRIMITIVE(call_clear)
|
||||
PRIMITIVE(callback)
|
||||
PRIMITIVE(callstack)
|
||||
PRIMITIVE(callstack_to_array)
|
||||
PRIMITIVE(check_datastack)
|
||||
PRIMITIVE(clone)
|
||||
PRIMITIVE(code_room)
|
||||
PRIMITIVE(compact_gc)
|
||||
PRIMITIVE(compute_identity_hashcode)
|
||||
PRIMITIVE(data_room)
|
||||
PRIMITIVE(datastack)
|
||||
PRIMITIVE(die)
|
||||
PRIMITIVE(disable_gc_events)
|
||||
PRIMITIVE(dispatch_stats)
|
||||
PRIMITIVE(displaced_alien)
|
||||
PRIMITIVE(dlclose)
|
||||
PRIMITIVE(dll_validp)
|
||||
PRIMITIVE(dlopen)
|
||||
PRIMITIVE(dlsym)
|
||||
PRIMITIVE(double_bits)
|
||||
PRIMITIVE(enable_gc_events)
|
||||
PRIMITIVE(existsp)
|
||||
PRIMITIVE(exit)
|
||||
PRIMITIVE(fclose)
|
||||
PRIMITIVE(fflush)
|
||||
PRIMITIVE(fgetc)
|
||||
PRIMITIVE(fixnum_divint)
|
||||
PRIMITIVE(fixnum_divmod)
|
||||
PRIMITIVE(fixnum_shift)
|
||||
PRIMITIVE(fixnum_to_bignum)
|
||||
PRIMITIVE(fixnum_to_float)
|
||||
PRIMITIVE(float_add)
|
||||
PRIMITIVE(float_bits)
|
||||
PRIMITIVE(float_divfloat)
|
||||
PRIMITIVE(float_eq)
|
||||
PRIMITIVE(float_greater)
|
||||
PRIMITIVE(float_greatereq)
|
||||
PRIMITIVE(float_less)
|
||||
PRIMITIVE(float_lesseq)
|
||||
PRIMITIVE(float_mod)
|
||||
PRIMITIVE(float_multiply)
|
||||
PRIMITIVE(float_subtract)
|
||||
PRIMITIVE(float_to_bignum)
|
||||
PRIMITIVE(float_to_fixnum)
|
||||
PRIMITIVE(float_to_str)
|
||||
PRIMITIVE(fopen)
|
||||
PRIMITIVE(fputc)
|
||||
PRIMITIVE(fread)
|
||||
PRIMITIVE(fseek)
|
||||
PRIMITIVE(ftell)
|
||||
PRIMITIVE(full_gc)
|
||||
PRIMITIVE(fwrite)
|
||||
PRIMITIVE(identity_hashcode)
|
||||
PRIMITIVE(innermost_stack_frame_executing)
|
||||
PRIMITIVE(innermost_stack_frame_scan)
|
||||
PRIMITIVE(jit_compile)
|
||||
PRIMITIVE(load_locals)
|
||||
PRIMITIVE(lookup_method)
|
||||
PRIMITIVE(mega_cache_miss)
|
||||
PRIMITIVE(minor_gc)
|
||||
PRIMITIVE(modify_code_heap)
|
||||
PRIMITIVE(nano_count)
|
||||
PRIMITIVE(optimized_p)
|
||||
PRIMITIVE(profiling)
|
||||
PRIMITIVE(quot_compiled_p)
|
||||
PRIMITIVE(quotation_code)
|
||||
PRIMITIVE(reset_dispatch_stats)
|
||||
PRIMITIVE(resize_array)
|
||||
PRIMITIVE(resize_byte_array)
|
||||
PRIMITIVE(resize_string)
|
||||
PRIMITIVE(retainstack)
|
||||
PRIMITIVE(save_image)
|
||||
PRIMITIVE(save_image_and_exit)
|
||||
PRIMITIVE(set_datastack)
|
||||
PRIMITIVE(set_innermost_stack_frame_quot)
|
||||
PRIMITIVE(set_retainstack)
|
||||
PRIMITIVE(set_slot)
|
||||
PRIMITIVE(set_special_object)
|
||||
PRIMITIVE(set_string_nth_fast)
|
||||
PRIMITIVE(set_string_nth_slow)
|
||||
PRIMITIVE(size)
|
||||
PRIMITIVE(sleep)
|
||||
PRIMITIVE(special_object)
|
||||
PRIMITIVE(str_to_float)
|
||||
PRIMITIVE(string)
|
||||
PRIMITIVE(string_nth)
|
||||
PRIMITIVE(strip_stack_traces)
|
||||
PRIMITIVE(system_micros)
|
||||
PRIMITIVE(tuple)
|
||||
PRIMITIVE(tuple_boa)
|
||||
PRIMITIVE(unimplemented)
|
||||
PRIMITIVE(uninitialized_byte_array)
|
||||
PRIMITIVE(vm_ptr)
|
||||
PRIMITIVE(word)
|
||||
PRIMITIVE(word_code)
|
||||
PRIMITIVE(wrapper)
|
||||
|
||||
}
|
||||
|
|
|
@ -1,34 +1,162 @@
|
|||
namespace factor
|
||||
{
|
||||
|
||||
#define PRIMITIVE(name) extern "C" void primitive_##name(factor_vm *parent)
|
||||
#define DECLARE_PRIMITIVE(name) VM_C_API void primitive_##name(factor_vm *parent);
|
||||
|
||||
/* These are generated with macros in alien.cpp */
|
||||
PRIMITIVE(alien_signed_cell);
|
||||
PRIMITIVE(set_alien_signed_cell);
|
||||
PRIMITIVE(alien_unsigned_cell);
|
||||
PRIMITIVE(set_alien_unsigned_cell);
|
||||
PRIMITIVE(alien_signed_8);
|
||||
PRIMITIVE(set_alien_signed_8);
|
||||
PRIMITIVE(alien_unsigned_8);
|
||||
PRIMITIVE(set_alien_unsigned_8);
|
||||
PRIMITIVE(alien_signed_4);
|
||||
PRIMITIVE(set_alien_signed_4);
|
||||
PRIMITIVE(alien_unsigned_4);
|
||||
PRIMITIVE(set_alien_unsigned_4);
|
||||
PRIMITIVE(alien_signed_2);
|
||||
PRIMITIVE(set_alien_signed_2);
|
||||
PRIMITIVE(alien_unsigned_2);
|
||||
PRIMITIVE(set_alien_unsigned_2);
|
||||
PRIMITIVE(alien_signed_1);
|
||||
PRIMITIVE(set_alien_signed_1);
|
||||
PRIMITIVE(alien_unsigned_1);
|
||||
PRIMITIVE(set_alien_unsigned_1);
|
||||
PRIMITIVE(alien_float);
|
||||
PRIMITIVE(set_alien_float);
|
||||
PRIMITIVE(alien_double);
|
||||
PRIMITIVE(set_alien_double);
|
||||
PRIMITIVE(alien_cell);
|
||||
PRIMITIVE(set_alien_cell);
|
||||
/* Generated with PRIMITIVE in primitives.cpp */
|
||||
DECLARE_PRIMITIVE(alien_address)
|
||||
DECLARE_PRIMITIVE(all_instances)
|
||||
DECLARE_PRIMITIVE(array)
|
||||
DECLARE_PRIMITIVE(array_to_quotation)
|
||||
DECLARE_PRIMITIVE(become)
|
||||
DECLARE_PRIMITIVE(bignum_add)
|
||||
DECLARE_PRIMITIVE(bignum_and)
|
||||
DECLARE_PRIMITIVE(bignum_bitp)
|
||||
DECLARE_PRIMITIVE(bignum_divint)
|
||||
DECLARE_PRIMITIVE(bignum_divmod)
|
||||
DECLARE_PRIMITIVE(bignum_eq)
|
||||
DECLARE_PRIMITIVE(bignum_greater)
|
||||
DECLARE_PRIMITIVE(bignum_greatereq)
|
||||
DECLARE_PRIMITIVE(bignum_less)
|
||||
DECLARE_PRIMITIVE(bignum_lesseq)
|
||||
DECLARE_PRIMITIVE(bignum_log2)
|
||||
DECLARE_PRIMITIVE(bignum_mod)
|
||||
DECLARE_PRIMITIVE(bignum_multiply)
|
||||
DECLARE_PRIMITIVE(bignum_not)
|
||||
DECLARE_PRIMITIVE(bignum_or)
|
||||
DECLARE_PRIMITIVE(bignum_shift)
|
||||
DECLARE_PRIMITIVE(bignum_subtract)
|
||||
DECLARE_PRIMITIVE(bignum_to_fixnum)
|
||||
DECLARE_PRIMITIVE(bignum_to_float)
|
||||
DECLARE_PRIMITIVE(bignum_xor)
|
||||
DECLARE_PRIMITIVE(bits_double)
|
||||
DECLARE_PRIMITIVE(bits_float)
|
||||
DECLARE_PRIMITIVE(byte_array)
|
||||
DECLARE_PRIMITIVE(byte_array_to_bignum)
|
||||
DECLARE_PRIMITIVE(call_clear)
|
||||
DECLARE_PRIMITIVE(callback)
|
||||
DECLARE_PRIMITIVE(callstack)
|
||||
DECLARE_PRIMITIVE(callstack_to_array)
|
||||
DECLARE_PRIMITIVE(check_datastack)
|
||||
DECLARE_PRIMITIVE(clone)
|
||||
DECLARE_PRIMITIVE(code_room)
|
||||
DECLARE_PRIMITIVE(compact_gc)
|
||||
DECLARE_PRIMITIVE(compute_identity_hashcode)
|
||||
DECLARE_PRIMITIVE(data_room)
|
||||
DECLARE_PRIMITIVE(datastack)
|
||||
DECLARE_PRIMITIVE(die)
|
||||
DECLARE_PRIMITIVE(disable_gc_events)
|
||||
DECLARE_PRIMITIVE(dispatch_stats)
|
||||
DECLARE_PRIMITIVE(displaced_alien)
|
||||
DECLARE_PRIMITIVE(dlclose)
|
||||
DECLARE_PRIMITIVE(dll_validp)
|
||||
DECLARE_PRIMITIVE(dlopen)
|
||||
DECLARE_PRIMITIVE(dlsym)
|
||||
DECLARE_PRIMITIVE(double_bits)
|
||||
DECLARE_PRIMITIVE(enable_gc_events)
|
||||
DECLARE_PRIMITIVE(existsp)
|
||||
DECLARE_PRIMITIVE(exit)
|
||||
DECLARE_PRIMITIVE(fclose)
|
||||
DECLARE_PRIMITIVE(fflush)
|
||||
DECLARE_PRIMITIVE(fgetc)
|
||||
DECLARE_PRIMITIVE(fixnum_divint)
|
||||
DECLARE_PRIMITIVE(fixnum_divmod)
|
||||
DECLARE_PRIMITIVE(fixnum_shift)
|
||||
DECLARE_PRIMITIVE(fixnum_to_bignum)
|
||||
DECLARE_PRIMITIVE(fixnum_to_float)
|
||||
DECLARE_PRIMITIVE(float_add)
|
||||
DECLARE_PRIMITIVE(float_bits)
|
||||
DECLARE_PRIMITIVE(float_divfloat)
|
||||
DECLARE_PRIMITIVE(float_eq)
|
||||
DECLARE_PRIMITIVE(float_greater)
|
||||
DECLARE_PRIMITIVE(float_greatereq)
|
||||
DECLARE_PRIMITIVE(float_less)
|
||||
DECLARE_PRIMITIVE(float_lesseq)
|
||||
DECLARE_PRIMITIVE(float_mod)
|
||||
DECLARE_PRIMITIVE(float_multiply)
|
||||
DECLARE_PRIMITIVE(float_subtract)
|
||||
DECLARE_PRIMITIVE(float_to_bignum)
|
||||
DECLARE_PRIMITIVE(float_to_fixnum)
|
||||
DECLARE_PRIMITIVE(float_to_str)
|
||||
DECLARE_PRIMITIVE(fopen)
|
||||
DECLARE_PRIMITIVE(fputc)
|
||||
DECLARE_PRIMITIVE(fread)
|
||||
DECLARE_PRIMITIVE(fseek)
|
||||
DECLARE_PRIMITIVE(ftell)
|
||||
DECLARE_PRIMITIVE(full_gc)
|
||||
DECLARE_PRIMITIVE(fwrite)
|
||||
DECLARE_PRIMITIVE(identity_hashcode)
|
||||
DECLARE_PRIMITIVE(innermost_stack_frame_executing)
|
||||
DECLARE_PRIMITIVE(innermost_stack_frame_scan)
|
||||
DECLARE_PRIMITIVE(jit_compile)
|
||||
DECLARE_PRIMITIVE(load_locals)
|
||||
DECLARE_PRIMITIVE(lookup_method)
|
||||
DECLARE_PRIMITIVE(mega_cache_miss)
|
||||
DECLARE_PRIMITIVE(minor_gc)
|
||||
DECLARE_PRIMITIVE(modify_code_heap)
|
||||
DECLARE_PRIMITIVE(nano_count)
|
||||
DECLARE_PRIMITIVE(optimized_p)
|
||||
DECLARE_PRIMITIVE(profiling)
|
||||
DECLARE_PRIMITIVE(quot_compiled_p)
|
||||
DECLARE_PRIMITIVE(quotation_code)
|
||||
DECLARE_PRIMITIVE(reset_dispatch_stats)
|
||||
DECLARE_PRIMITIVE(resize_array)
|
||||
DECLARE_PRIMITIVE(resize_byte_array)
|
||||
DECLARE_PRIMITIVE(resize_string)
|
||||
DECLARE_PRIMITIVE(retainstack)
|
||||
DECLARE_PRIMITIVE(save_image)
|
||||
DECLARE_PRIMITIVE(save_image_and_exit)
|
||||
DECLARE_PRIMITIVE(set_datastack)
|
||||
DECLARE_PRIMITIVE(set_innermost_stack_frame_quot)
|
||||
DECLARE_PRIMITIVE(set_retainstack)
|
||||
DECLARE_PRIMITIVE(set_slot)
|
||||
DECLARE_PRIMITIVE(set_special_object)
|
||||
DECLARE_PRIMITIVE(set_string_nth_fast)
|
||||
DECLARE_PRIMITIVE(set_string_nth_slow)
|
||||
DECLARE_PRIMITIVE(size)
|
||||
DECLARE_PRIMITIVE(sleep)
|
||||
DECLARE_PRIMITIVE(special_object)
|
||||
DECLARE_PRIMITIVE(str_to_float)
|
||||
DECLARE_PRIMITIVE(string)
|
||||
DECLARE_PRIMITIVE(string_nth)
|
||||
DECLARE_PRIMITIVE(strip_stack_traces)
|
||||
DECLARE_PRIMITIVE(system_micros)
|
||||
DECLARE_PRIMITIVE(tuple)
|
||||
DECLARE_PRIMITIVE(tuple_boa)
|
||||
DECLARE_PRIMITIVE(unimplemented)
|
||||
DECLARE_PRIMITIVE(uninitialized_byte_array)
|
||||
DECLARE_PRIMITIVE(vm_ptr)
|
||||
DECLARE_PRIMITIVE(word)
|
||||
DECLARE_PRIMITIVE(word_code)
|
||||
DECLARE_PRIMITIVE(wrapper)
|
||||
|
||||
/* These are generated with macros in alien.cpp, and not with PRIMIIVE in
|
||||
primitives.cpp */
|
||||
DECLARE_PRIMITIVE(alien_signed_cell)
|
||||
DECLARE_PRIMITIVE(set_alien_signed_cell)
|
||||
DECLARE_PRIMITIVE(alien_unsigned_cell)
|
||||
DECLARE_PRIMITIVE(set_alien_unsigned_cell)
|
||||
DECLARE_PRIMITIVE(alien_signed_8)
|
||||
DECLARE_PRIMITIVE(set_alien_signed_8)
|
||||
DECLARE_PRIMITIVE(alien_unsigned_8)
|
||||
DECLARE_PRIMITIVE(set_alien_unsigned_8)
|
||||
DECLARE_PRIMITIVE(alien_signed_4)
|
||||
DECLARE_PRIMITIVE(set_alien_signed_4)
|
||||
DECLARE_PRIMITIVE(alien_unsigned_4)
|
||||
DECLARE_PRIMITIVE(set_alien_unsigned_4)
|
||||
DECLARE_PRIMITIVE(alien_signed_2)
|
||||
DECLARE_PRIMITIVE(set_alien_signed_2)
|
||||
DECLARE_PRIMITIVE(alien_unsigned_2)
|
||||
DECLARE_PRIMITIVE(set_alien_unsigned_2)
|
||||
DECLARE_PRIMITIVE(alien_signed_1)
|
||||
DECLARE_PRIMITIVE(set_alien_signed_1)
|
||||
DECLARE_PRIMITIVE(alien_unsigned_1)
|
||||
DECLARE_PRIMITIVE(set_alien_unsigned_1)
|
||||
DECLARE_PRIMITIVE(alien_float)
|
||||
DECLARE_PRIMITIVE(set_alien_float)
|
||||
DECLARE_PRIMITIVE(alien_double)
|
||||
DECLARE_PRIMITIVE(set_alien_double)
|
||||
DECLARE_PRIMITIVE(alien_cell)
|
||||
DECLARE_PRIMITIVE(set_alien_cell)
|
||||
|
||||
}
|
||||
|
|
|
@ -349,7 +349,12 @@ fixnum factor_vm::quot_code_offset_to_scan(cell quot_, cell offset)
|
|||
cell factor_vm::lazy_jit_compile(cell quot_)
|
||||
{
|
||||
data_root<quotation> quot(quot_,this);
|
||||
jit_compile_quot(quot.value(),true);
|
||||
|
||||
assert(!quot_compiled_p(quot.untagged()));
|
||||
|
||||
code_block *compiled = jit_compile_quot(quot.value(),quot.value(),true);
|
||||
set_quot_entry_point(quot.untagged(),compiled);
|
||||
|
||||
return quot.value();
|
||||
}
|
||||
|
||||
|
|
|
@ -9,6 +9,11 @@ void factor_vm::jit_compile_word(cell word_, cell def_, bool relocating)
|
|||
data_root<word> word(word_,this);
|
||||
data_root<quotation> def(def_,this);
|
||||
|
||||
/* Refuse to compile this word more than once, because quot_compiled_p()
|
||||
depends on the identity of its code block */
|
||||
if(word->code && word.value() == special_objects[LAZY_JIT_COMPILE_WORD])
|
||||
return;
|
||||
|
||||
code_block *compiled = jit_compile_quot(word.value(),def.value(),relocating);
|
||||
word->code = compiled;
|
||||
|
||||
|
|
Loading…
Reference in New Issue