diff --git a/vm/alien.cpp b/vm/alien.cpp index 38078b6679..44365859e2 100755 --- a/vm/alien.cpp +++ b/vm/alien.cpp @@ -113,19 +113,7 @@ void *factor_vm::alien_pointer() *ptr = value; \ } -DEFINE_ALIEN_ACCESSOR(signed_cell,fixnum,from_signed_cell,to_fixnum) -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) +EACH_ALIEN_PRIMITIVE(DEFINE_ALIEN_ACCESSOR) /* open a native library and push a handle */ void factor_vm::primitive_dlopen() diff --git a/vm/primitives.cpp b/vm/primitives.cpp index aa1e10f5a5..104b180341 100644 --- a/vm/primitives.cpp +++ b/vm/primitives.cpp @@ -8,131 +8,6 @@ namespace factor parent->primitive_##name(); \ } -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_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) +EACH_PRIMITIVE(PRIMITIVE) } diff --git a/vm/primitives.hpp b/vm/primitives.hpp index a36050323f..df36ed84b2 100644 --- a/vm/primitives.hpp +++ b/vm/primitives.hpp @@ -1,163 +1,159 @@ namespace factor { -#define DECLARE_PRIMITIVE(name) VM_C_API void primitive_##name(factor_vm *parent); - /* 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_blocks) -DECLARE_PRIMITIVE(code_room) -DECLARE_PRIMITIVE(compact_gc) -DECLARE_PRIMITIVE(compute_identity_hashcode) -DECLARE_PRIMITIVE(context_object) -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_context_object) -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(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(word) -DECLARE_PRIMITIVE(word_code) -DECLARE_PRIMITIVE(wrapper) +#define EACH_PRIMITIVE(_) \ + _(alien_address) \ + _(all_instances) \ + _(array) \ + _(array_to_quotation) \ + _(become) \ + _(bignum_add) \ + _(bignum_and) \ + _(bignum_bitp) \ + _(bignum_divint) \ + _(bignum_divmod) \ + _(bignum_eq) \ + _(bignum_greater) \ + _(bignum_greatereq) \ + _(bignum_less) \ + _(bignum_lesseq) \ + _(bignum_log2) \ + _(bignum_mod) \ + _(bignum_multiply) \ + _(bignum_not) \ + _(bignum_or) \ + _(bignum_shift) \ + _(bignum_subtract) \ + _(bignum_to_fixnum) \ + _(bignum_to_float) \ + _(bignum_xor) \ + _(bits_double) \ + _(bits_float) \ + _(byte_array) \ + _(byte_array_to_bignum) \ + _(call_clear) \ + _(callback) \ + _(callstack) \ + _(callstack_to_array) \ + _(check_datastack) \ + _(clone) \ + _(code_blocks) \ + _(code_room) \ + _(compact_gc) \ + _(compute_identity_hashcode) \ + _(context_object) \ + _(data_room) \ + _(datastack) \ + _(die) \ + _(disable_gc_events) \ + _(dispatch_stats) \ + _(displaced_alien) \ + _(dlclose) \ + _(dll_validp) \ + _(dlopen) \ + _(dlsym) \ + _(double_bits) \ + _(enable_gc_events) \ + _(existsp) \ + _(exit) \ + _(fclose) \ + _(fflush) \ + _(fgetc) \ + _(fixnum_divint) \ + _(fixnum_divmod) \ + _(fixnum_shift) \ + _(fixnum_to_bignum) \ + _(fixnum_to_float) \ + _(float_add) \ + _(float_bits) \ + _(float_divfloat) \ + _(float_eq) \ + _(float_greater) \ + _(float_greatereq) \ + _(float_less) \ + _(float_lesseq) \ + _(float_mod) \ + _(float_multiply) \ + _(float_subtract) \ + _(float_to_bignum) \ + _(float_to_fixnum) \ + _(float_to_str) \ + _(fopen) \ + _(fputc) \ + _(fread) \ + _(fseek) \ + _(ftell) \ + _(full_gc) \ + _(fwrite) \ + _(identity_hashcode) \ + _(innermost_stack_frame_executing) \ + _(innermost_stack_frame_scan) \ + _(jit_compile) \ + _(load_locals) \ + _(lookup_method) \ + _(mega_cache_miss) \ + _(minor_gc) \ + _(modify_code_heap) \ + _(nano_count) \ + _(optimized_p) \ + _(profiling) \ + _(quot_compiled_p) \ + _(quotation_code) \ + _(reset_dispatch_stats) \ + _(resize_array) \ + _(resize_byte_array) \ + _(resize_string) \ + _(retainstack) \ + _(save_image) \ + _(save_image_and_exit) \ + _(set_context_object) \ + _(set_datastack) \ + _(set_innermost_stack_frame_quot) \ + _(set_retainstack) \ + _(set_slot) \ + _(set_special_object) \ + _(set_string_nth_fast) \ + _(set_string_nth_slow) \ + _(size) \ + _(sleep) \ + _(special_object) \ + _(string) \ + _(string_nth) \ + _(strip_stack_traces) \ + _(system_micros) \ + _(tuple) \ + _(tuple_boa) \ + _(unimplemented) \ + _(uninitialized_byte_array) \ + _(word) \ + _(word_code) \ + _(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) +#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) }