Using a higher-order C macro to clean up duplication in declaring/defining VM primitives
							parent
							
								
									6aee6b3adc
								
							
						
					
					
						commit
						930b0d931b
					
				
							
								
								
									
										14
									
								
								vm/alien.cpp
								
								
								
								
							
							
						
						
									
										14
									
								
								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()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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)
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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)
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue