Merge branch 'vm' of git://github.com/littledan/Factor

db4
Slava Pestov 2010-03-22 15:49:39 -07:00
commit 5f6fbb694d
3 changed files with 152 additions and 293 deletions

View File

@ -113,19 +113,7 @@ void *factor_vm::alien_pointer()
*ptr = value; \ *ptr = value; \
} }
DEFINE_ALIEN_ACCESSOR(signed_cell,fixnum,from_signed_cell,to_fixnum) EACH_ALIEN_PRIMITIVE(DEFINE_ALIEN_ACCESSOR)
DEFINE_ALIEN_ACCESSOR(unsigned_cell,cell,from_unsigned_cell,to_cell)
DEFINE_ALIEN_ACCESSOR(signed_8,s64,from_signed_8,to_signed_8)
DEFINE_ALIEN_ACCESSOR(unsigned_8,u64,from_unsigned_8,to_unsigned_8)
DEFINE_ALIEN_ACCESSOR(signed_4,s32,from_signed_4,to_fixnum)
DEFINE_ALIEN_ACCESSOR(unsigned_4,u32,from_unsigned_4,to_cell)
DEFINE_ALIEN_ACCESSOR(signed_2,s16,from_signed_2,to_fixnum)
DEFINE_ALIEN_ACCESSOR(unsigned_2,u16,from_unsigned_2,to_cell)
DEFINE_ALIEN_ACCESSOR(signed_1,s8,from_signed_1,to_fixnum)
DEFINE_ALIEN_ACCESSOR(unsigned_1,u8,from_unsigned_1,to_cell)
DEFINE_ALIEN_ACCESSOR(float,float,from_float,to_float)
DEFINE_ALIEN_ACCESSOR(double,double,from_double,to_double)
DEFINE_ALIEN_ACCESSOR(cell,void *,allot_alien,pinned_alien_offset)
/* open a native library and push a handle */ /* open a native library and push a handle */
void factor_vm::primitive_dlopen() void factor_vm::primitive_dlopen()

View File

@ -8,131 +8,6 @@ namespace factor
parent->primitive_##name(); \ parent->primitive_##name(); \
} }
PRIMITIVE(alien_address) EACH_PRIMITIVE(PRIMITIVE)
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_blocks)
PRIMITIVE(code_room)
PRIMITIVE(compact_gc)
PRIMITIVE(compute_identity_hashcode)
PRIMITIVE(context_object)
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_context_object)
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(string)
PRIMITIVE(string_nth)
PRIMITIVE(strip_stack_traces)
PRIMITIVE(system_micros)
PRIMITIVE(tuple)
PRIMITIVE(tuple_boa)
PRIMITIVE(unimplemented)
PRIMITIVE(uninitialized_byte_array)
PRIMITIVE(word)
PRIMITIVE(word_code)
PRIMITIVE(wrapper)
} }

View File

@ -1,163 +1,159 @@
namespace factor namespace factor
{ {
#define DECLARE_PRIMITIVE(name) VM_C_API void primitive_##name(factor_vm *parent);
/* Generated with PRIMITIVE in primitives.cpp */ /* Generated with PRIMITIVE in primitives.cpp */
DECLARE_PRIMITIVE(alien_address) #define EACH_PRIMITIVE(_) \
DECLARE_PRIMITIVE(all_instances) _(alien_address) \
DECLARE_PRIMITIVE(array) _(all_instances) \
DECLARE_PRIMITIVE(array_to_quotation) _(array) \
DECLARE_PRIMITIVE(become) _(array_to_quotation) \
DECLARE_PRIMITIVE(bignum_add) _(become) \
DECLARE_PRIMITIVE(bignum_and) _(bignum_add) \
DECLARE_PRIMITIVE(bignum_bitp) _(bignum_and) \
DECLARE_PRIMITIVE(bignum_divint) _(bignum_bitp) \
DECLARE_PRIMITIVE(bignum_divmod) _(bignum_divint) \
DECLARE_PRIMITIVE(bignum_eq) _(bignum_divmod) \
DECLARE_PRIMITIVE(bignum_greater) _(bignum_eq) \
DECLARE_PRIMITIVE(bignum_greatereq) _(bignum_greater) \
DECLARE_PRIMITIVE(bignum_less) _(bignum_greatereq) \
DECLARE_PRIMITIVE(bignum_lesseq) _(bignum_less) \
DECLARE_PRIMITIVE(bignum_log2) _(bignum_lesseq) \
DECLARE_PRIMITIVE(bignum_mod) _(bignum_log2) \
DECLARE_PRIMITIVE(bignum_multiply) _(bignum_mod) \
DECLARE_PRIMITIVE(bignum_not) _(bignum_multiply) \
DECLARE_PRIMITIVE(bignum_or) _(bignum_not) \
DECLARE_PRIMITIVE(bignum_shift) _(bignum_or) \
DECLARE_PRIMITIVE(bignum_subtract) _(bignum_shift) \
DECLARE_PRIMITIVE(bignum_to_fixnum) _(bignum_subtract) \
DECLARE_PRIMITIVE(bignum_to_float) _(bignum_to_fixnum) \
DECLARE_PRIMITIVE(bignum_xor) _(bignum_to_float) \
DECLARE_PRIMITIVE(bits_double) _(bignum_xor) \
DECLARE_PRIMITIVE(bits_float) _(bits_double) \
DECLARE_PRIMITIVE(byte_array) _(bits_float) \
DECLARE_PRIMITIVE(byte_array_to_bignum) _(byte_array) \
DECLARE_PRIMITIVE(call_clear) _(byte_array_to_bignum) \
DECLARE_PRIMITIVE(callback) _(call_clear) \
DECLARE_PRIMITIVE(callstack) _(callback) \
DECLARE_PRIMITIVE(callstack_to_array) _(callstack) \
DECLARE_PRIMITIVE(check_datastack) _(callstack_to_array) \
DECLARE_PRIMITIVE(clone) _(check_datastack) \
DECLARE_PRIMITIVE(code_blocks) _(clone) \
DECLARE_PRIMITIVE(code_room) _(code_blocks) \
DECLARE_PRIMITIVE(compact_gc) _(code_room) \
DECLARE_PRIMITIVE(compute_identity_hashcode) _(compact_gc) \
DECLARE_PRIMITIVE(context_object) _(compute_identity_hashcode) \
DECLARE_PRIMITIVE(data_room) _(context_object) \
DECLARE_PRIMITIVE(datastack) _(data_room) \
DECLARE_PRIMITIVE(die) _(datastack) \
DECLARE_PRIMITIVE(disable_gc_events) _(die) \
DECLARE_PRIMITIVE(dispatch_stats) _(disable_gc_events) \
DECLARE_PRIMITIVE(displaced_alien) _(dispatch_stats) \
DECLARE_PRIMITIVE(dlclose) _(displaced_alien) \
DECLARE_PRIMITIVE(dll_validp) _(dlclose) \
DECLARE_PRIMITIVE(dlopen) _(dll_validp) \
DECLARE_PRIMITIVE(dlsym) _(dlopen) \
DECLARE_PRIMITIVE(double_bits) _(dlsym) \
DECLARE_PRIMITIVE(enable_gc_events) _(double_bits) \
DECLARE_PRIMITIVE(existsp) _(enable_gc_events) \
DECLARE_PRIMITIVE(exit) _(existsp) \
DECLARE_PRIMITIVE(fclose) _(exit) \
DECLARE_PRIMITIVE(fflush) _(fclose) \
DECLARE_PRIMITIVE(fgetc) _(fflush) \
DECLARE_PRIMITIVE(fixnum_divint) _(fgetc) \
DECLARE_PRIMITIVE(fixnum_divmod) _(fixnum_divint) \
DECLARE_PRIMITIVE(fixnum_shift) _(fixnum_divmod) \
DECLARE_PRIMITIVE(fixnum_to_bignum) _(fixnum_shift) \
DECLARE_PRIMITIVE(fixnum_to_float) _(fixnum_to_bignum) \
DECLARE_PRIMITIVE(float_add) _(fixnum_to_float) \
DECLARE_PRIMITIVE(float_bits) _(float_add) \
DECLARE_PRIMITIVE(float_divfloat) _(float_bits) \
DECLARE_PRIMITIVE(float_eq) _(float_divfloat) \
DECLARE_PRIMITIVE(float_greater) _(float_eq) \
DECLARE_PRIMITIVE(float_greatereq) _(float_greater) \
DECLARE_PRIMITIVE(float_less) _(float_greatereq) \
DECLARE_PRIMITIVE(float_lesseq) _(float_less) \
DECLARE_PRIMITIVE(float_mod) _(float_lesseq) \
DECLARE_PRIMITIVE(float_multiply) _(float_mod) \
DECLARE_PRIMITIVE(float_subtract) _(float_multiply) \
DECLARE_PRIMITIVE(float_to_bignum) _(float_subtract) \
DECLARE_PRIMITIVE(float_to_fixnum) _(float_to_bignum) \
DECLARE_PRIMITIVE(float_to_str) _(float_to_fixnum) \
DECLARE_PRIMITIVE(fopen) _(float_to_str) \
DECLARE_PRIMITIVE(fputc) _(fopen) \
DECLARE_PRIMITIVE(fread) _(fputc) \
DECLARE_PRIMITIVE(fseek) _(fread) \
DECLARE_PRIMITIVE(ftell) _(fseek) \
DECLARE_PRIMITIVE(full_gc) _(ftell) \
DECLARE_PRIMITIVE(fwrite) _(full_gc) \
DECLARE_PRIMITIVE(identity_hashcode) _(fwrite) \
DECLARE_PRIMITIVE(innermost_stack_frame_executing) _(identity_hashcode) \
DECLARE_PRIMITIVE(innermost_stack_frame_scan) _(innermost_stack_frame_executing) \
DECLARE_PRIMITIVE(jit_compile) _(innermost_stack_frame_scan) \
DECLARE_PRIMITIVE(load_locals) _(jit_compile) \
DECLARE_PRIMITIVE(lookup_method) _(load_locals) \
DECLARE_PRIMITIVE(mega_cache_miss) _(lookup_method) \
DECLARE_PRIMITIVE(minor_gc) _(mega_cache_miss) \
DECLARE_PRIMITIVE(modify_code_heap) _(minor_gc) \
DECLARE_PRIMITIVE(nano_count) _(modify_code_heap) \
DECLARE_PRIMITIVE(optimized_p) _(nano_count) \
DECLARE_PRIMITIVE(profiling) _(optimized_p) \
DECLARE_PRIMITIVE(quot_compiled_p) _(profiling) \
DECLARE_PRIMITIVE(quotation_code) _(quot_compiled_p) \
DECLARE_PRIMITIVE(reset_dispatch_stats) _(quotation_code) \
DECLARE_PRIMITIVE(resize_array) _(reset_dispatch_stats) \
DECLARE_PRIMITIVE(resize_byte_array) _(resize_array) \
DECLARE_PRIMITIVE(resize_string) _(resize_byte_array) \
DECLARE_PRIMITIVE(retainstack) _(resize_string) \
DECLARE_PRIMITIVE(save_image) _(retainstack) \
DECLARE_PRIMITIVE(save_image_and_exit) _(save_image) \
DECLARE_PRIMITIVE(set_context_object) _(save_image_and_exit) \
DECLARE_PRIMITIVE(set_datastack) _(set_context_object) \
DECLARE_PRIMITIVE(set_innermost_stack_frame_quot) _(set_datastack) \
DECLARE_PRIMITIVE(set_retainstack) _(set_innermost_stack_frame_quot) \
DECLARE_PRIMITIVE(set_slot) _(set_retainstack) \
DECLARE_PRIMITIVE(set_special_object) _(set_slot) \
DECLARE_PRIMITIVE(set_string_nth_fast) _(set_special_object) \
DECLARE_PRIMITIVE(set_string_nth_slow) _(set_string_nth_fast) \
DECLARE_PRIMITIVE(size) _(set_string_nth_slow) \
DECLARE_PRIMITIVE(sleep) _(size) \
DECLARE_PRIMITIVE(special_object) _(sleep) \
DECLARE_PRIMITIVE(string) _(special_object) \
DECLARE_PRIMITIVE(string_nth) _(string) \
DECLARE_PRIMITIVE(strip_stack_traces) _(string_nth) \
DECLARE_PRIMITIVE(system_micros) _(strip_stack_traces) \
DECLARE_PRIMITIVE(tuple) _(system_micros) \
DECLARE_PRIMITIVE(tuple_boa) _(tuple) \
DECLARE_PRIMITIVE(unimplemented) _(tuple_boa) \
DECLARE_PRIMITIVE(uninitialized_byte_array) _(unimplemented) \
DECLARE_PRIMITIVE(word) _(uninitialized_byte_array) \
DECLARE_PRIMITIVE(word_code) _(word) \
DECLARE_PRIMITIVE(wrapper) _(word_code) \
_(wrapper)
/* These are generated with macros in alien.cpp, and not with PRIMIIVE in /* These are generated with macros in alien.cpp, and not with PRIMIIVE in
primitives.cpp */ 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)
#define EACH_ALIEN_PRIMITIVE(_) \
_(signed_cell,fixnum,from_signed_cell,to_fixnum) \
_(unsigned_cell,cell,from_unsigned_cell,to_cell) \
_(signed_8,s64,from_signed_8,to_signed_8) \
_(unsigned_8,u64,from_unsigned_8,to_unsigned_8) \
_(signed_4,s32,from_signed_4,to_fixnum) \
_(unsigned_4,u32,from_unsigned_4,to_cell) \
_(signed_2,s16,from_signed_2,to_fixnum) \
_(unsigned_2,u16,from_unsigned_2,to_cell) \
_(signed_1,s8,from_signed_1,to_fixnum) \
_(unsigned_1,u8,from_unsigned_1,to_cell) \
_(float,float,from_float,to_float) \
_(double,double,from_double,to_double) \
_(cell,void *,allot_alien,pinned_alien_offset)
#define DECLARE_PRIMITIVE(name) VM_C_API void primitive_##name(factor_vm *parent);
#define DECLARE_ALIEN_PRIMITIVE(name, type, from, to) \
DECLARE_PRIMITIVE(alien_##name) \
DECLARE_PRIMITIVE(set_alien_##name)
EACH_PRIMITIVE(DECLARE_PRIMITIVE)
EACH_ALIEN_PRIMITIVE(DECLARE_ALIEN_PRIMITIVE)
} }