From af2c433d6bd405a7316945bc7af23b6362e2c01b Mon Sep 17 00:00:00 2001 From: Samuel Tardieu Date: Mon, 4 May 2009 14:32:09 +0200 Subject: [PATCH] Do not lower primitives to "void*" to get better compiler checking --- vm/primitives.cpp | 302 +++++++++++++++++++++++----------------------- vm/primitives.hpp | 3 +- 2 files changed, 153 insertions(+), 152 deletions(-) diff --git a/vm/primitives.cpp b/vm/primitives.cpp index 0c9fc32dff..8fb8afaa6a 100755 --- a/vm/primitives.cpp +++ b/vm/primitives.cpp @@ -3,157 +3,157 @@ namespace factor { -void *primitives[] = { - (void *)primitive_bignum_to_fixnum, - (void *)primitive_float_to_fixnum, - (void *)primitive_fixnum_to_bignum, - (void *)primitive_float_to_bignum, - (void *)primitive_fixnum_to_float, - (void *)primitive_bignum_to_float, - (void *)primitive_str_to_float, - (void *)primitive_float_to_str, - (void *)primitive_float_bits, - (void *)primitive_double_bits, - (void *)primitive_bits_float, - (void *)primitive_bits_double, - (void *)primitive_fixnum_add, - (void *)primitive_fixnum_subtract, - (void *)primitive_fixnum_multiply, - (void *)primitive_fixnum_divint, - (void *)primitive_fixnum_divmod, - (void *)primitive_fixnum_shift, - (void *)primitive_bignum_eq, - (void *)primitive_bignum_add, - (void *)primitive_bignum_subtract, - (void *)primitive_bignum_multiply, - (void *)primitive_bignum_divint, - (void *)primitive_bignum_mod, - (void *)primitive_bignum_divmod, - (void *)primitive_bignum_and, - (void *)primitive_bignum_or, - (void *)primitive_bignum_xor, - (void *)primitive_bignum_not, - (void *)primitive_bignum_shift, - (void *)primitive_bignum_less, - (void *)primitive_bignum_lesseq, - (void *)primitive_bignum_greater, - (void *)primitive_bignum_greatereq, - (void *)primitive_bignum_bitp, - (void *)primitive_bignum_log2, - (void *)primitive_byte_array_to_bignum, - (void *)primitive_float_eq, - (void *)primitive_float_add, - (void *)primitive_float_subtract, - (void *)primitive_float_multiply, - (void *)primitive_float_divfloat, - (void *)primitive_float_mod, - (void *)primitive_float_less, - (void *)primitive_float_lesseq, - (void *)primitive_float_greater, - (void *)primitive_float_greatereq, - (void *)primitive_word, - (void *)primitive_word_xt, - (void *)primitive_getenv, - (void *)primitive_setenv, - (void *)primitive_existsp, - (void *)primitive_gc, - (void *)primitive_gc_stats, - (void *)primitive_save_image, - (void *)primitive_save_image_and_exit, - (void *)primitive_datastack, - (void *)primitive_retainstack, - (void *)primitive_callstack, - (void *)primitive_set_datastack, - (void *)primitive_set_retainstack, - (void *)primitive_set_callstack, - (void *)primitive_exit, - (void *)primitive_data_room, - (void *)primitive_code_room, - (void *)primitive_micros, - (void *)primitive_modify_code_heap, - (void *)primitive_dlopen, - (void *)primitive_dlsym, - (void *)primitive_dlclose, - (void *)primitive_byte_array, - (void *)primitive_uninitialized_byte_array, - (void *)primitive_displaced_alien, - (void *)primitive_alien_signed_cell, - (void *)primitive_set_alien_signed_cell, - (void *)primitive_alien_unsigned_cell, - (void *)primitive_set_alien_unsigned_cell, - (void *)primitive_alien_signed_8, - (void *)primitive_set_alien_signed_8, - (void *)primitive_alien_unsigned_8, - (void *)primitive_set_alien_unsigned_8, - (void *)primitive_alien_signed_4, - (void *)primitive_set_alien_signed_4, - (void *)primitive_alien_unsigned_4, - (void *)primitive_set_alien_unsigned_4, - (void *)primitive_alien_signed_2, - (void *)primitive_set_alien_signed_2, - (void *)primitive_alien_unsigned_2, - (void *)primitive_set_alien_unsigned_2, - (void *)primitive_alien_signed_1, - (void *)primitive_set_alien_signed_1, - (void *)primitive_alien_unsigned_1, - (void *)primitive_set_alien_unsigned_1, - (void *)primitive_alien_float, - (void *)primitive_set_alien_float, - (void *)primitive_alien_double, - (void *)primitive_set_alien_double, - (void *)primitive_alien_cell, - (void *)primitive_set_alien_cell, - (void *)primitive_alien_address, - (void *)primitive_set_slot, - (void *)primitive_string_nth, - (void *)primitive_set_string_nth_fast, - (void *)primitive_set_string_nth_slow, - (void *)primitive_resize_array, - (void *)primitive_resize_string, - (void *)primitive_array, - (void *)primitive_begin_scan, - (void *)primitive_next_object, - (void *)primitive_end_scan, - (void *)primitive_size, - (void *)primitive_die, - (void *)primitive_fopen, - (void *)primitive_fgetc, - (void *)primitive_fread, - (void *)primitive_fputc, - (void *)primitive_fwrite, - (void *)primitive_fflush, - (void *)primitive_fseek, - (void *)primitive_fclose, - (void *)primitive_wrapper, - (void *)primitive_clone, - (void *)primitive_string, - (void *)primitive_array_to_quotation, - (void *)primitive_quotation_xt, - (void *)primitive_tuple, - (void *)primitive_profiling, - (void *)primitive_become, - (void *)primitive_sleep, - (void *)primitive_tuple_boa, - (void *)primitive_callstack_to_array, - (void *)primitive_innermost_stack_frame_quot, - (void *)primitive_innermost_stack_frame_scan, - (void *)primitive_set_innermost_stack_frame_quot, - (void *)primitive_call_clear, - (void *)primitive_resize_byte_array, - (void *)primitive_dll_validp, - (void *)primitive_unimplemented, - (void *)primitive_clear_gc_stats, - (void *)primitive_jit_compile, - (void *)primitive_load_locals, - (void *)primitive_check_datastack, - (void *)primitive_inline_cache_miss, - (void *)primitive_mega_cache_miss, - (void *)primitive_lookup_method, - (void *)primitive_reset_dispatch_stats, - (void *)primitive_dispatch_stats, - (void *)primitive_reset_inline_cache_stats, - (void *)primitive_inline_cache_stats, - (void *)primitive_optimized_p, +primitive_type primitives[] = { + primitive_bignum_to_fixnum, + primitive_float_to_fixnum, + primitive_fixnum_to_bignum, + primitive_float_to_bignum, + primitive_fixnum_to_float, + primitive_bignum_to_float, + primitive_str_to_float, + primitive_float_to_str, + primitive_float_bits, + primitive_double_bits, + primitive_bits_float, + primitive_bits_double, + primitive_fixnum_add, + primitive_fixnum_subtract, + primitive_fixnum_multiply, + primitive_fixnum_divint, + primitive_fixnum_divmod, + primitive_fixnum_shift, + primitive_bignum_eq, + primitive_bignum_add, + primitive_bignum_subtract, + primitive_bignum_multiply, + primitive_bignum_divint, + primitive_bignum_mod, + primitive_bignum_divmod, + primitive_bignum_and, + primitive_bignum_or, + primitive_bignum_xor, + primitive_bignum_not, + primitive_bignum_shift, + primitive_bignum_less, + primitive_bignum_lesseq, + primitive_bignum_greater, + primitive_bignum_greatereq, + primitive_bignum_bitp, + primitive_bignum_log2, + primitive_byte_array_to_bignum, + primitive_float_eq, + primitive_float_add, + primitive_float_subtract, + primitive_float_multiply, + primitive_float_divfloat, + primitive_float_mod, + primitive_float_less, + primitive_float_lesseq, + primitive_float_greater, + primitive_float_greatereq, + primitive_word, + primitive_word_xt, + primitive_getenv, + primitive_setenv, + primitive_existsp, + primitive_gc, + primitive_gc_stats, + primitive_save_image, + primitive_save_image_and_exit, + primitive_datastack, + primitive_retainstack, + primitive_callstack, + primitive_set_datastack, + primitive_set_retainstack, + primitive_set_callstack, + primitive_exit, + primitive_data_room, + primitive_code_room, + primitive_micros, + primitive_modify_code_heap, + primitive_dlopen, + primitive_dlsym, + primitive_dlclose, + primitive_byte_array, + primitive_uninitialized_byte_array, + primitive_displaced_alien, + 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, + primitive_alien_address, + primitive_set_slot, + primitive_string_nth, + primitive_set_string_nth_fast, + primitive_set_string_nth_slow, + primitive_resize_array, + primitive_resize_string, + primitive_array, + primitive_begin_scan, + primitive_next_object, + primitive_end_scan, + primitive_size, + primitive_die, + primitive_fopen, + primitive_fgetc, + primitive_fread, + primitive_fputc, + primitive_fwrite, + primitive_fflush, + primitive_fseek, + primitive_fclose, + primitive_wrapper, + primitive_clone, + primitive_string, + primitive_array_to_quotation, + primitive_quotation_xt, + primitive_tuple, + primitive_profiling, + primitive_become, + primitive_sleep, + primitive_tuple_boa, + primitive_callstack_to_array, + primitive_innermost_stack_frame_quot, + primitive_innermost_stack_frame_scan, + primitive_set_innermost_stack_frame_quot, + primitive_call_clear, + primitive_resize_byte_array, + primitive_dll_validp, + primitive_unimplemented, + primitive_clear_gc_stats, + primitive_jit_compile, + primitive_load_locals, + primitive_check_datastack, + primitive_inline_cache_miss, + primitive_mega_cache_miss, + primitive_lookup_method, + primitive_reset_dispatch_stats, + primitive_dispatch_stats, + primitive_reset_inline_cache_stats, + primitive_inline_cache_stats, + primitive_optimized_p, }; } diff --git a/vm/primitives.hpp b/vm/primitives.hpp index f53fcff17f..bc692745dd 100644 --- a/vm/primitives.hpp +++ b/vm/primitives.hpp @@ -1,7 +1,8 @@ namespace factor { -extern void *primitives[]; +extern "C" typedef void (*primitive_type)(); +extern primitive_type primitives[]; #define PRIMITIVE(name) extern "C" void primitive_##name()