relocated system/smptr primiives to pf-sys.c
This commit is contained in:
		| @ -320,7 +320,7 @@ class MyObject(Object) | |||||||
| 		System logNl: 'Sleeping start now....'. | 		System logNl: 'Sleeping start now....'. | ||||||
|  |  | ||||||
| 		 | 		 | ||||||
| a := System _malloc(200). | a := System malloc(200). | ||||||
| i := 0. | i := 0. | ||||||
| while (i < 26) | while (i < 26) | ||||||
| { | { | ||||||
| @ -337,7 +337,7 @@ a getUint32(0) dump. | |||||||
| a getUint32(1) dump. | a getUint32(1) dump. | ||||||
|  |  | ||||||
| ##a dump. | ##a dump. | ||||||
| ##System _free(a). | ##System free(a). | ||||||
| a free. | a free. | ||||||
|  |  | ||||||
| 		System sleepForSecs: 2. | 		System sleepForSecs: 2. | ||||||
|  | |||||||
| @ -288,28 +288,32 @@ TODO: how to pass all variadic arguments to another variadic methods??? | |||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	(* raw memory allocation *) | 	(* raw memory allocation *) | ||||||
| 	method(#class,#primitive) _malloc (size). | 	method(#class,#primitive) malloc (size). | ||||||
| 	method(#class,#primitive) _calloc (size). | 	method(#class,#primitive) calloc (size). | ||||||
| 	method(#class,#primitive) _free (rawptr). | 	method(#class,#primitive) free (rawptr). | ||||||
|  | 	 | ||||||
|  | 	method(#class,#primitive) malloc: size. | ||||||
|  | 	method(#class,#primitive) calloc: size. | ||||||
|  | 	method(#class,#primitive) free: rawptr. | ||||||
|  |  | ||||||
| 	(* raw memory access *) | 	(* raw memory access *) | ||||||
| 	method(#class,#primitive) _getInt8   (rawptr, offset). ## <primitive: #System__getInt8> | 	method(#class,#primitive) getInt8   (rawptr, offset). ## <primitive: #System__getInt8> | ||||||
| 	method(#class,#primitive) _getInt16  (rawptr, offset). | 	method(#class,#primitive) getInt16  (rawptr, offset). | ||||||
| 	method(#class,#primitive) _getInt32  (rawptr, offset). | 	method(#class,#primitive) getInt32  (rawptr, offset). | ||||||
| 	method(#class,#primitive) _getInt64  (rawptr, offset). | 	method(#class,#primitive) getInt64  (rawptr, offset). | ||||||
| 	method(#class,#primitive) _getUint8  (rawptr, offset). ## <primitive: #System__getUint8> | 	method(#class,#primitive) getUint8  (rawptr, offset). ## <primitive: #System__getUint8> | ||||||
| 	method(#class,#primitive) _getUint16 (rawptr, offset). | 	method(#class,#primitive) getUint16 (rawptr, offset). | ||||||
| 	method(#class,#primitive) _getUint32 (rawptr, offset). | 	method(#class,#primitive) getUint32 (rawptr, offset). | ||||||
| 	method(#class,#primitive) _getUint64 (rawptr, offset). | 	method(#class,#primitive) getUint64 (rawptr, offset). | ||||||
|  |  | ||||||
| 	method(#class,#primitive) _putInt8   (rawptr, offset, value). | 	method(#class,#primitive) putInt8   (rawptr, offset, value). | ||||||
| 	method(#class,#primitive) _putInt16  (rawptr, offset, value). | 	method(#class,#primitive) putInt16  (rawptr, offset, value). | ||||||
| 	method(#class,#primitive) _putInt32  (rawptr, offset, value). | 	method(#class,#primitive) putInt32  (rawptr, offset, value). | ||||||
| 	method(#class,#primitive) _putInt64  (rawptr, offset, value). | 	method(#class,#primitive) putInt64  (rawptr, offset, value). | ||||||
| 	method(#class,#primitive) _putUint8  (rawptr, offset, value). | 	method(#class,#primitive) putUint8  (rawptr, offset, value). | ||||||
| 	method(#class,#primitive) _putUint16 (rawptr, offset, value). | 	method(#class,#primitive) putUint16 (rawptr, offset, value). | ||||||
| 	method(#class,#primitive) _putUint32 (rawptr, offset, value). | 	method(#class,#primitive) putUint32 (rawptr, offset, value). | ||||||
| 	method(#class,#primitive) _putUint64 (rawptr, offset, value). | 	method(#class,#primitive) putUint64 (rawptr, offset, value). | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -325,7 +329,7 @@ class SmallPointer(Object) | |||||||
| 	method(#primitive) getUint16 (offset). | 	method(#primitive) getUint16 (offset). | ||||||
| 	method(#primitive) getUint32 (offset). | 	method(#primitive) getUint32 (offset). | ||||||
| 	method(#primitive) getUint64 (offset). | 	method(#primitive) getUint64 (offset). | ||||||
| 	 |  | ||||||
| 	method(#primitive) putInt8   (offset, value). | 	method(#primitive) putInt8   (offset, value). | ||||||
| 	method(#primitive) putInt16  (offset, value). | 	method(#primitive) putInt16  (offset, value). | ||||||
| 	method(#primitive) putInt32  (offset, value). | 	method(#primitive) putInt32  (offset, value). | ||||||
|  | |||||||
| @ -62,6 +62,7 @@ libmoo_la_SOURCES = \ | |||||||
| 	opt-impl.h \ | 	opt-impl.h \ | ||||||
| 	opt.c \ | 	opt.c \ | ||||||
| 	pf-basic.c \ | 	pf-basic.c \ | ||||||
|  | 	pf-sys.c \ | ||||||
| 	rbt.c \ | 	rbt.c \ | ||||||
| 	sym.c \ | 	sym.c \ | ||||||
| 	utf8.c \ | 	utf8.c \ | ||||||
|  | |||||||
| @ -155,8 +155,8 @@ am_libmoo_la_OBJECTS = libmoo_la-bigint.lo libmoo_la-comp.lo \ | |||||||
| 	libmoo_la-err.lo libmoo_la-exec.lo libmoo_la-logfmt.lo \ | 	libmoo_la-err.lo libmoo_la-exec.lo libmoo_la-logfmt.lo \ | ||||||
| 	libmoo_la-gc.lo libmoo_la-heap.lo libmoo_la-moo.lo \ | 	libmoo_la-gc.lo libmoo_la-heap.lo libmoo_la-moo.lo \ | ||||||
| 	libmoo_la-obj.lo libmoo_la-opt.lo libmoo_la-pf-basic.lo \ | 	libmoo_la-obj.lo libmoo_la-opt.lo libmoo_la-pf-basic.lo \ | ||||||
| 	libmoo_la-rbt.lo libmoo_la-sym.lo libmoo_la-utf8.lo \ | 	libmoo_la-pf-sys.lo libmoo_la-rbt.lo libmoo_la-sym.lo \ | ||||||
| 	libmoo_la-utl.lo | 	libmoo_la-utf8.lo libmoo_la-utl.lo | ||||||
| libmoo_la_OBJECTS = $(am_libmoo_la_OBJECTS) | libmoo_la_OBJECTS = $(am_libmoo_la_OBJECTS) | ||||||
| AM_V_lt = $(am__v_lt_@AM_V@) | AM_V_lt = $(am__v_lt_@AM_V@) | ||||||
| am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) | am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) | ||||||
| @ -439,6 +439,7 @@ libmoo_la_SOURCES = \ | |||||||
| 	opt-impl.h \ | 	opt-impl.h \ | ||||||
| 	opt.c \ | 	opt.c \ | ||||||
| 	pf-basic.c \ | 	pf-basic.c \ | ||||||
|  | 	pf-sys.c \ | ||||||
| 	rbt.c \ | 	rbt.c \ | ||||||
| 	sym.c \ | 	sym.c \ | ||||||
| 	utf8.c \ | 	utf8.c \ | ||||||
| @ -619,6 +620,7 @@ distclean-compile: | |||||||
| @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmoo_la-obj.Plo@am__quote@ | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmoo_la-obj.Plo@am__quote@ | ||||||
| @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmoo_la-opt.Plo@am__quote@ | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmoo_la-opt.Plo@am__quote@ | ||||||
| @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmoo_la-pf-basic.Plo@am__quote@ | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmoo_la-pf-basic.Plo@am__quote@ | ||||||
|  | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmoo_la-pf-sys.Plo@am__quote@ | ||||||
| @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmoo_la-rbt.Plo@am__quote@ | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmoo_la-rbt.Plo@am__quote@ | ||||||
| @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmoo_la-sym.Plo@am__quote@ | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmoo_la-sym.Plo@am__quote@ | ||||||
| @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmoo_la-utf8.Plo@am__quote@ | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmoo_la-utf8.Plo@am__quote@ | ||||||
| @ -747,6 +749,13 @@ libmoo_la-pf-basic.lo: pf-basic.c | |||||||
| @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ | @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ | ||||||
| @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmoo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmoo_la-pf-basic.lo `test -f 'pf-basic.c' || echo '$(srcdir)/'`pf-basic.c | @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmoo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmoo_la-pf-basic.lo `test -f 'pf-basic.c' || echo '$(srcdir)/'`pf-basic.c | ||||||
|  |  | ||||||
|  | libmoo_la-pf-sys.lo: pf-sys.c | ||||||
|  | @am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmoo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmoo_la-pf-sys.lo -MD -MP -MF $(DEPDIR)/libmoo_la-pf-sys.Tpo -c -o libmoo_la-pf-sys.lo `test -f 'pf-sys.c' || echo '$(srcdir)/'`pf-sys.c | ||||||
|  | @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libmoo_la-pf-sys.Tpo $(DEPDIR)/libmoo_la-pf-sys.Plo | ||||||
|  | @AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='pf-sys.c' object='libmoo_la-pf-sys.lo' libtool=yes @AMDEPBACKSLASH@ | ||||||
|  | @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ | ||||||
|  | @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmoo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmoo_la-pf-sys.lo `test -f 'pf-sys.c' || echo '$(srcdir)/'`pf-sys.c | ||||||
|  |  | ||||||
| libmoo_la-rbt.lo: rbt.c | libmoo_la-rbt.lo: rbt.c | ||||||
| @am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmoo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmoo_la-rbt.lo -MD -MP -MF $(DEPDIR)/libmoo_la-rbt.Tpo -c -o libmoo_la-rbt.lo `test -f 'rbt.c' || echo '$(srcdir)/'`rbt.c | @am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmoo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmoo_la-rbt.lo -MD -MP -MF $(DEPDIR)/libmoo_la-rbt.Tpo -c -o libmoo_la-rbt.lo `test -f 'rbt.c' || echo '$(srcdir)/'`rbt.c | ||||||
| @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libmoo_la-rbt.Tpo $(DEPDIR)/libmoo_la-rbt.Plo | @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libmoo_la-rbt.Tpo $(DEPDIR)/libmoo_la-rbt.Plo | ||||||
|  | |||||||
							
								
								
									
										789
									
								
								moo/lib/exec.c
									
									
									
									
									
								
							
							
						
						
									
										789
									
								
								moo/lib/exec.c
									
									
									
									
									
								
							| @ -1374,7 +1374,7 @@ static MOO_INLINE int activate_new_method (moo_t* moo, moo_oop_method_t mth, moo | |||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
|  |  | ||||||
| static moo_oop_method_t find_method (moo_t* moo, moo_oop_t receiver, const moo_oocs_t* message, int super) | moo_oop_method_t moo_findmethod (moo_t* moo, moo_oop_t receiver, const moo_oocs_t* message, int super) | ||||||
| { | { | ||||||
| 	moo_oop_class_t cls; | 	moo_oop_class_t cls; | ||||||
| 	moo_oop_association_t ass; | 	moo_oop_association_t ass; | ||||||
| @ -1488,7 +1488,7 @@ static int start_initial_process_and_context (moo_t* moo, const moo_oocs_t* objn | |||||||
| 		return -1; | 		return -1; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	mth = find_method (moo, ass->value, mthname, 0); | 	mth = moo_findmethod (moo, ass->value, mthname, 0); | ||||||
| 	if (!mth)  | 	if (!mth)  | ||||||
| 	{ | 	{ | ||||||
| 		MOO_DEBUG4 (moo, "Cannot find a method in %.*js - %.*js", objname->len, objname->ptr, mthname->len, mthname->ptr); | 		MOO_DEBUG4 (moo, "Cannot find a method in %.*js - %.*js", objname->len, objname->ptr, mthname->len, mthname->ptr); | ||||||
| @ -1512,7 +1512,7 @@ TODO: overcome this problem - accept parameters.... | |||||||
|  |  | ||||||
| 	startup.ptr = str_startup; | 	startup.ptr = str_startup; | ||||||
| 	startup.len = 7; | 	startup.len = 7; | ||||||
| 	mth = find_method (moo, (moo_oop_t)moo->_system, &startup, 0); | 	mth = moo_findmethod (moo, (moo_oop_t)moo->_system, &startup, 0); | ||||||
| 	if (!mth)  | 	if (!mth)  | ||||||
| 	{ | 	{ | ||||||
| 		MOO_DEBUG0 (moo, "Cannot find the startup method in the system class"); | 		MOO_DEBUG0 (moo, "Cannot find the startup method in the system class"); | ||||||
| @ -1749,33 +1749,7 @@ static moo_pfrc_t pf_hash (moo_t* moo, moo_ooi_t nargs) | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| static moo_pfrc_t pf_responds_to (moo_t* moo, moo_ooi_t nargs) |  | ||||||
| { |  | ||||||
| 	moo_oop_t rcv, selector; |  | ||||||
| 	moo_oocs_t mthname; |  | ||||||
|  |  | ||||||
| 	rcv = MOO_STACK_GETRCV(moo, nargs); |  | ||||||
| 	selector = MOO_STACK_GETARG(moo, nargs, 0); |  | ||||||
|  |  | ||||||
| 	if (MOO_CLASSOF(moo,selector) != moo->_symbol) |  | ||||||
| 	{ |  | ||||||
| 		moo_seterrbfmt (moo, MOO_EINVAL, "invalid argument - %O", selector); |  | ||||||
| 		return MOO_PF_FAILURE; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	mthname.ptr = MOO_OBJ_GET_CHAR_SLOT(selector); |  | ||||||
| 	mthname.len = MOO_OBJ_GET_SIZE(selector); |  | ||||||
| 	if (find_method (moo, rcv, &mthname, 0)) |  | ||||||
| 	{ |  | ||||||
| 		MOO_STACK_SETRET (moo, nargs, moo->_true); |  | ||||||
| 	} |  | ||||||
| 	else |  | ||||||
| 	{ |  | ||||||
| 		MOO_STACK_SETRET (moo, nargs, moo->_false); |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	return MOO_PF_SUCCESS; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static moo_pfrc_t pf_perform (moo_t* moo, moo_ooi_t nargs) | static moo_pfrc_t pf_perform (moo_t* moo, moo_ooi_t nargs) | ||||||
| { | { | ||||||
| @ -3140,679 +3114,7 @@ static moo_pfrc_t pf_system_pop_collectable (moo_t* moo, moo_ooi_t nargs) | |||||||
| 	return MOO_PF_SUCCESS; | 	return MOO_PF_SUCCESS; | ||||||
| } | } | ||||||
|  |  | ||||||
| static MOO_INLINE moo_pfrc_t _system_alloc (moo_t* moo, moo_ooi_t nargs, int clear) |  | ||||||
| { |  | ||||||
| 	moo_oop_t tmp; |  | ||||||
|  |  | ||||||
| 	MOO_ASSERT (moo, nargs == 1); |  | ||||||
|  |  | ||||||
| 	tmp = MOO_STACK_GETARG(moo, nargs, 0); |  | ||||||
| 	if (MOO_OOP_IS_SMOOI(tmp))  |  | ||||||
| 	{ |  | ||||||
| 		void* ptr; |  | ||||||
|  |  | ||||||
| 		ptr = clear? moo_callocmem (moo, MOO_OOP_TO_SMOOI(tmp)): |  | ||||||
| 		             moo_allocmem (moo, MOO_OOP_TO_SMOOI(tmp)); |  | ||||||
| 		if (ptr) |  | ||||||
| 		{ |  | ||||||
| 			MOO_ASSERT (moo, MOO_IN_SMPTR_RANGE(ptr)); |  | ||||||
| 			MOO_STACK_SETRET (moo, nargs, MOO_SMPTR_TO_OOP(ptr)); |  | ||||||
| 		} |  | ||||||
| 		else |  | ||||||
| 		{ |  | ||||||
| 			MOO_STACK_SETRETTOERRNUM (moo, nargs); |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	else |  | ||||||
| 	{ |  | ||||||
| 		MOO_STACK_SETRETTOERROR (moo, nargs, MOO_EINVAL); |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	return MOO_PF_SUCCESS; |  | ||||||
| }  |  | ||||||
|  |  | ||||||
| static moo_pfrc_t pf_system_calloc (moo_t* moo, moo_ooi_t nargs) |  | ||||||
| { |  | ||||||
| 	return _system_alloc (moo, nargs, 1); |  | ||||||
| } |  | ||||||
| static moo_pfrc_t pf_system_malloc (moo_t* moo, moo_ooi_t nargs) |  | ||||||
| { |  | ||||||
| 	return _system_alloc (moo, nargs, 0); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static moo_pfrc_t pf_system_free (moo_t* moo, moo_ooi_t nargs) |  | ||||||
| { |  | ||||||
| 	moo_oop_t tmp; |  | ||||||
| 	void* rawptr; |  | ||||||
|  |  | ||||||
| 	/*MOO_PF_CHECK_RCV (moo, MOO_STACK_GETRCV(moo, nargs) == (moo_oop_t)moo->_system);*/ |  | ||||||
|  |  | ||||||
| 	MOO_ASSERT (moo, nargs == 1); |  | ||||||
|  |  | ||||||
| 	tmp = MOO_STACK_GETARG(moo, nargs, 0); |  | ||||||
| 	if (MOO_OOP_IS_SMPTR(tmp))  |  | ||||||
| 	{ |  | ||||||
| 		moo_freemem (moo, MOO_OOP_TO_SMPTR(tmp)); |  | ||||||
| 	} |  | ||||||
| 	else if (moo_inttooow(moo, tmp, (moo_oow_t*)&rawptr) >= 1) |  | ||||||
| 	{ |  | ||||||
| 		moo_freemem (moo, rawptr); |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	MOO_STACK_SETRETTORCV (moo, nargs); |  | ||||||
| 	return MOO_PF_SUCCESS; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static moo_pfrc_t pf_smptr_free (moo_t* moo, moo_ooi_t nargs) |  | ||||||
| { |  | ||||||
| 	moo_oop_t tmp; |  | ||||||
|  |  | ||||||
| 	MOO_ASSERT (moo, nargs == 0); |  | ||||||
|  |  | ||||||
| 	tmp = MOO_STACK_GETRCV(moo, nargs); |  | ||||||
| 	MOO_PF_CHECK_RCV (moo, MOO_OOP_IS_SMPTR(tmp)); |  | ||||||
|  |  | ||||||
| 	moo_freemem (moo, MOO_OOP_TO_SMPTR(tmp)); |  | ||||||
|  |  | ||||||
| 	MOO_STACK_SETRETTORCV (moo, nargs); |  | ||||||
| 	return MOO_PF_SUCCESS; |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #include "pack1.h" |  | ||||||
| struct st_int8_t    { moo_int8_t  v; }; |  | ||||||
| struct st_int16_t   { moo_int16_t v; }; |  | ||||||
| struct st_int32_t   { moo_int32_t v; }; |  | ||||||
|  |  | ||||||
| struct st_uint8_t   { moo_uint8_t  v; }; |  | ||||||
| struct st_uint16_t  { moo_uint16_t v; }; |  | ||||||
| struct st_uint32_t  { moo_uint32_t v; }; |  | ||||||
|  |  | ||||||
| #if defined(MOO_HAVE_UINT64_T) |  | ||||||
| struct st_int64_t   { moo_int64_t v; }; |  | ||||||
| struct st_uint64_t  { moo_uint64_t v; }; |  | ||||||
| #endif |  | ||||||
| #if defined(MOO_HAVE_UINT128_T) |  | ||||||
| struct st_int128_t   { moo_int128_t v; }; |  | ||||||
| struct st_uint128_t  { moo_uint128_t v; }; |  | ||||||
| #endif |  | ||||||
| #include "unpack.h" |  | ||||||
|  |  | ||||||
|  |  | ||||||
| static MOO_INLINE moo_oop_t _fetch_raw_int (moo_t* moo, moo_int8_t* rawptr, moo_oow_t offset, int size) |  | ||||||
| { |  | ||||||
| 	moo_ooi_t v; |  | ||||||
|  |  | ||||||
| 	switch (size) |  | ||||||
| 	{ |  | ||||||
| 		case 1:  |  | ||||||
| 			v = ((struct st_int8_t*)&rawptr[offset])->v; |  | ||||||
| 			break; |  | ||||||
|  |  | ||||||
| 		case 2: |  | ||||||
| 			v = ((struct st_int16_t*)&rawptr[offset])->v; |  | ||||||
| 			break; |  | ||||||
|  |  | ||||||
| 		case 4:  |  | ||||||
| 			v = ((struct st_int32_t*)&rawptr[offset])->v; |  | ||||||
| 			break; |  | ||||||
|  |  | ||||||
| 	#if defined(MOO_HAVE_INT64_T) &&  (MOO_SIZEOF_OOW_T >= MOO_SIZEOF_INT64_T) |  | ||||||
| 		case 8:  |  | ||||||
| 			v = ((struct st_int64_t*)&rawptr[offset])->v; |  | ||||||
| 			break; |  | ||||||
| 	#endif |  | ||||||
|  |  | ||||||
| 	#if defined(MOO_HAVE_INT128_T) && (MOO_SIZEOF_OOW_T >= MOO_SIZEOF_INT128_T) |  | ||||||
| 		case 16:  |  | ||||||
| 			v = ((struct st_int128_t*)&rawptr[offset])->v; |  | ||||||
| 			break; |  | ||||||
| 	#endif |  | ||||||
|  |  | ||||||
| 		default: |  | ||||||
| 			moo_seterrnum (moo, MOO_EINVAL); |  | ||||||
| 			return MOO_NULL; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	return moo_ooitoint (moo, v); |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| static MOO_INLINE moo_oop_t _fetch_raw_uint (moo_t* moo, moo_uint8_t* rawptr, moo_oow_t offset, int size) |  | ||||||
| { |  | ||||||
| 	moo_oow_t v; |  | ||||||
|  |  | ||||||
| 	switch (size) |  | ||||||
| 	{ |  | ||||||
| 		case 1:  |  | ||||||
| 			v = ((struct st_uint8_t*)&rawptr[offset])->v; |  | ||||||
| 			break; |  | ||||||
|  |  | ||||||
| 		case 2: |  | ||||||
| 			v = ((struct st_uint16_t*)&rawptr[offset])->v; |  | ||||||
| 			break; |  | ||||||
|  |  | ||||||
| 		case 4:  |  | ||||||
| 			v = ((struct st_uint32_t*)&rawptr[offset])->v; |  | ||||||
| 			break; |  | ||||||
|  |  | ||||||
| 	#if defined(MOO_HAVE_UINT64_T) &&  (MOO_SIZEOF_OOW_T >= MOO_SIZEOF_UINT64_T) |  | ||||||
| 		case 8:  |  | ||||||
| 			v = ((struct st_uint64_t*)&rawptr[offset])->v; |  | ||||||
| 			break; |  | ||||||
| 	#endif |  | ||||||
|  |  | ||||||
| 	#if defined(MOO_HAVE_UINT128_T) && (MOO_SIZEOF_OOW_T >= MOO_SIZEOF_UINT128_T) |  | ||||||
| 		case 16:  |  | ||||||
| 			v = ((struct st_uint128_t*)&rawptr[offset])->v; |  | ||||||
| 			break; |  | ||||||
| 	#endif |  | ||||||
|  |  | ||||||
| 		default: |  | ||||||
| 			moo_seterrnum (moo, MOO_EINVAL); |  | ||||||
| 			return MOO_NULL; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	return moo_oowtoint (moo, v); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static MOO_INLINE int _store_raw_int (moo_t* moo, moo_uint8_t* rawptr, moo_oow_t offset, int size, moo_oop_t voop) |  | ||||||
| { |  | ||||||
| 	moo_ooi_t w, max, min; |  | ||||||
|  |  | ||||||
| 	if (moo_inttoooi (moo, voop, &w) == 0) return -1; |  | ||||||
|  |  | ||||||
| 	/* assume 2's complement */ |  | ||||||
| 	max = (moo_ooi_t)(~(moo_oow_t)0 >> ((MOO_SIZEOF_OOW_T - size) * 8  + 1)); |  | ||||||
| 	min = -max - 1; |  | ||||||
|  |  | ||||||
| 	if (w > max || w < min)  |  | ||||||
| 	{ |  | ||||||
| 		moo_seterrnum (moo, MOO_ERANGE);  |  | ||||||
| 		return -1; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	switch (size) |  | ||||||
| 	{  |  | ||||||
| 		case 1: |  | ||||||
| 			((struct st_int8_t*)&rawptr[offset])->v = w; |  | ||||||
| 			return 0; |  | ||||||
|  |  | ||||||
| 		case 2: |  | ||||||
| 			((struct st_int16_t*)&rawptr[offset])->v = w; |  | ||||||
| 			return 0; |  | ||||||
|  |  | ||||||
| 		case 4: |  | ||||||
| 			((struct st_int32_t*)&rawptr[offset])->v = w; |  | ||||||
| 			return 0; |  | ||||||
|  |  | ||||||
| 	#if defined(MOO_HAVE_INT64_T) && (MOO_SIZEOF_OOW_T >= MOO_SIZEOF_INT64_T) |  | ||||||
| 		case 8: |  | ||||||
| 			((struct st_int64_t*)&rawptr[offset])->v = w;  |  | ||||||
| 			return 0; |  | ||||||
| 	#endif |  | ||||||
|  |  | ||||||
| 	#if defined(MOO_HAVE_INT128_T) && (MOO_SIZEOF_OOW_T >= MOO_SIZEOF_INT128_T) |  | ||||||
| 		case 16: |  | ||||||
| 			((struct st_int128_t*)&rawptr[offset])->v = w;  |  | ||||||
| 			return 0; |  | ||||||
| 	#endif |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	moo_seterrnum (moo, MOO_EINVAL); |  | ||||||
| 	return -1; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static MOO_INLINE int _store_raw_uint (moo_t* moo, moo_uint8_t* rawptr, moo_oow_t offset, int size, moo_oop_t voop) |  | ||||||
| { |  | ||||||
| 	int n; |  | ||||||
| 	moo_oow_t w, max; |  | ||||||
|  |  | ||||||
| 	if ((n = moo_inttooow (moo, voop, &w)) <= 0)  |  | ||||||
| 	{ |  | ||||||
| 		if (n <= -1) moo_seterrnum (moo, MOO_ERANGE); /* negative number */ |  | ||||||
| 		return -1; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	max = (~(moo_oow_t)0 >> ((MOO_SIZEOF_OOW_T - size) * 8)); |  | ||||||
| 	if (w > max)  |  | ||||||
| 	{ |  | ||||||
| 		moo_seterrnum (moo, MOO_ERANGE);  |  | ||||||
| 		return -1; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	switch (size) |  | ||||||
| 	{  |  | ||||||
| 		case 1: |  | ||||||
| 			((struct st_uint8_t*)&rawptr[offset])->v = w; |  | ||||||
| 			return 0; |  | ||||||
|  |  | ||||||
| 		case 2: |  | ||||||
| 			((struct st_uint16_t*)&rawptr[offset])->v = w; |  | ||||||
| 			return 0; |  | ||||||
|  |  | ||||||
| 		case 4: |  | ||||||
| 			((struct st_uint32_t*)&rawptr[offset])->v = w; |  | ||||||
| 			return 0; |  | ||||||
|  |  | ||||||
| 	#if defined(MOO_HAVE_UINT64_T) &&  (MOO_SIZEOF_OOW_T >= MOO_SIZEOF_UINT64_T) |  | ||||||
| 		case 8: |  | ||||||
| 			((struct st_uint64_t*)&rawptr[offset])->v = w; |  | ||||||
| 			return 0; |  | ||||||
| 	#endif |  | ||||||
|  |  | ||||||
| 	#if defined(MOO_HAVE_UINT128_T) && (MOO_SIZEOF_OOW_T >= MOO_SIZEOF_UINT128_T) |  | ||||||
| 		case 16: |  | ||||||
| 			((struct st_uint128_t*)&rawptr[offset])->v = w;  |  | ||||||
| 			return 0; |  | ||||||
| 	#endif |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	moo_seterrnum (moo, MOO_EINVAL); |  | ||||||
| 	return -1; |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| static moo_pfrc_t _get_system_int (moo_t* moo, moo_ooi_t nargs, int size) |  | ||||||
| { |  | ||||||
| 	moo_int8_t* rawptr; |  | ||||||
| 	moo_oow_t offset; |  | ||||||
| 	moo_oop_t tmp; |  | ||||||
|  |  | ||||||
| 	/* MOO_PF_CHECK_RCV (moo, MOO_STACK_GETRCV(moo, nargs) == (moo_oop_t)moo->_system); */ |  | ||||||
|  |  | ||||||
| 	MOO_ASSERT (moo, nargs == 2); |  | ||||||
| 	tmp = MOO_STACK_GETARG(moo, nargs, 0); |  | ||||||
| 	if (MOO_OOP_IS_SMPTR(tmp)) rawptr = MOO_OOP_TO_SMPTR(tmp); |  | ||||||
| 	else if (moo_inttooow (moo, tmp, (moo_oow_t*)&rawptr) <= 0) goto einval; |  | ||||||
|  |  | ||||||
| 	if (moo_inttooow (moo, MOO_STACK_GETARG(moo, nargs, 1), &offset) <= 0) |  | ||||||
| 	{ |  | ||||||
| 	einval: |  | ||||||
| 		MOO_STACK_SETRETTOERROR (moo, nargs, MOO_EINVAL); |  | ||||||
| 		return MOO_PF_SUCCESS; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	tmp = _fetch_raw_int (moo, rawptr, offset, size); |  | ||||||
| 	if (!tmp)  |  | ||||||
| 	{ |  | ||||||
| 		MOO_STACK_SETRETTOERRNUM (moo, nargs); |  | ||||||
| 		return MOO_PF_SUCCESS; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	MOO_STACK_SETRET (moo, nargs, tmp); |  | ||||||
| 	return MOO_PF_SUCCESS; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static moo_pfrc_t _get_system_uint (moo_t* moo, moo_ooi_t nargs, int size) |  | ||||||
| { |  | ||||||
| 	moo_uint8_t* rawptr; |  | ||||||
| 	moo_oow_t offset; |  | ||||||
| 	moo_oop_t tmp; |  | ||||||
|  |  | ||||||
| 	/* MOO_PF_CHECK_RCV (moo, MOO_STACK_GETRCV(moo, nargs) == (moo_oop_t)moo->_system); */ |  | ||||||
|  |  | ||||||
| 	MOO_ASSERT (moo, nargs == 2); |  | ||||||
| 	tmp = MOO_STACK_GETARG(moo, nargs, 0); |  | ||||||
| 	if (MOO_OOP_IS_SMPTR(tmp)) rawptr = MOO_OOP_TO_SMPTR(tmp); |  | ||||||
| 	else if (moo_inttooow (moo, tmp, (moo_oow_t*)&rawptr) <= 0) goto einval; |  | ||||||
|  |  | ||||||
| 	if (moo_inttooow (moo, MOO_STACK_GETARG(moo, nargs, 1), &offset) <= 0)  |  | ||||||
| 	{ |  | ||||||
| 	einval: |  | ||||||
| 		MOO_STACK_SETRETTOERROR (moo, nargs, MOO_EINVAL); |  | ||||||
| 		return MOO_PF_SUCCESS; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	tmp = _fetch_raw_uint (moo, rawptr, offset, size); |  | ||||||
| 	if (!tmp)  |  | ||||||
| 	{ |  | ||||||
| 		MOO_STACK_SETRETTOERRNUM (moo, nargs); |  | ||||||
| 		return MOO_PF_SUCCESS; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	MOO_STACK_SETRET (moo, nargs, tmp); |  | ||||||
| 	return MOO_PF_SUCCESS; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static moo_pfrc_t pf_system_get_int8 (moo_t* moo, moo_ooi_t nargs) |  | ||||||
| { |  | ||||||
| 	return _get_system_int (moo, nargs, 1); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static moo_pfrc_t pf_system_get_int16 (moo_t* moo, moo_ooi_t nargs) |  | ||||||
| { |  | ||||||
| 	return _get_system_int (moo, nargs, 2); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static moo_pfrc_t pf_system_get_int32 (moo_t* moo, moo_ooi_t nargs) |  | ||||||
| { |  | ||||||
| 	return _get_system_int (moo, nargs, 4); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static moo_pfrc_t pf_system_get_int64 (moo_t* moo, moo_ooi_t nargs) |  | ||||||
| { |  | ||||||
| 	return _get_system_int (moo, nargs, 8); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static moo_pfrc_t pf_system_get_uint8 (moo_t* moo, moo_ooi_t nargs) |  | ||||||
| { |  | ||||||
| 	return _get_system_uint (moo, nargs, 1); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static moo_pfrc_t pf_system_get_uint16 (moo_t* moo, moo_ooi_t nargs) |  | ||||||
| { |  | ||||||
| 	return _get_system_uint (moo, nargs, 2); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static moo_pfrc_t pf_system_get_uint32 (moo_t* moo, moo_ooi_t nargs) |  | ||||||
| { |  | ||||||
| 	return _get_system_uint (moo, nargs, 4); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static moo_pfrc_t pf_system_get_uint64 (moo_t* moo, moo_ooi_t nargs) |  | ||||||
| { |  | ||||||
| 	return _get_system_uint (moo, nargs, 8); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static moo_pfrc_t _put_system_int (moo_t* moo, moo_ooi_t nargs, int size) |  | ||||||
| { |  | ||||||
| 	moo_uint8_t* rawptr; |  | ||||||
| 	moo_oow_t offset; |  | ||||||
| 	moo_oop_t tmp; |  | ||||||
|  |  | ||||||
| 	/* MOO_PF_CHECK_RCV (moo, MOO_STACK_GETRCV(moo, nargs) == (moo_oop_t)moo->_system); */ |  | ||||||
|  |  | ||||||
| 	MOO_ASSERT (moo, nargs == 3); |  | ||||||
| 	tmp = MOO_STACK_GETARG(moo, nargs, 0); |  | ||||||
| 	if (MOO_OOP_IS_SMPTR(tmp)) rawptr = MOO_OOP_TO_SMPTR(tmp); |  | ||||||
| 	else if (moo_inttooow (moo, tmp, (moo_oow_t*)&rawptr) <= 0) goto einval; |  | ||||||
|  |  | ||||||
| 	if (moo_inttooow(moo, MOO_STACK_GETARG(moo, nargs, 1), &offset) <= 0) goto einval; |  | ||||||
|  |  | ||||||
| 	if (_store_raw_int (moo, rawptr, offset, size, MOO_STACK_GETARG(moo, nargs, 2)) <= -1) |  | ||||||
| 	{ |  | ||||||
| 		MOO_STACK_SETRETTOERRNUM (moo, nargs); |  | ||||||
| 		return MOO_PF_SUCCESS; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	MOO_STACK_SETRETTORCV (moo, nargs); |  | ||||||
| 	return MOO_PF_SUCCESS; |  | ||||||
|  |  | ||||||
| einval: |  | ||||||
| 	MOO_STACK_SETRETTOERROR (moo, nargs, MOO_EINVAL); |  | ||||||
| 	return MOO_PF_SUCCESS; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static moo_pfrc_t _put_system_uint (moo_t* moo, moo_ooi_t nargs, int size) |  | ||||||
| { |  | ||||||
| 	moo_uint8_t* rawptr; |  | ||||||
| 	moo_oow_t offset; |  | ||||||
| 	moo_oop_t tmp; |  | ||||||
|  |  | ||||||
| 	/* MOO_PF_CHECK_RCV (moo, MOO_STACK_GETRCV(moo, nargs) == (moo_oop_t)moo->_system); */ |  | ||||||
|  |  | ||||||
| 	MOO_ASSERT (moo, nargs == 3); |  | ||||||
| 	tmp = MOO_STACK_GETARG(moo, nargs, 0); |  | ||||||
| 	if (MOO_OOP_IS_SMPTR(tmp)) rawptr = MOO_OOP_TO_SMPTR(tmp); |  | ||||||
| 	else if (moo_inttooow (moo, tmp, (moo_oow_t*)&rawptr) <= 0) goto einval; |  | ||||||
|  |  | ||||||
| 	if (moo_inttooow(moo, MOO_STACK_GETARG(moo, nargs, 1), &offset) <= 0) goto einval; |  | ||||||
|  |  | ||||||
| 	if (_store_raw_uint (moo, rawptr, offset, size, MOO_STACK_GETARG(moo, nargs, 2)) <= -1) |  | ||||||
| 	{ |  | ||||||
| 		MOO_STACK_SETRETTOERRNUM (moo, nargs); |  | ||||||
| 		return MOO_PF_SUCCESS; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	MOO_STACK_SETRETTORCV (moo, nargs); |  | ||||||
| 	return MOO_PF_SUCCESS; |  | ||||||
|  |  | ||||||
| einval: |  | ||||||
| 	MOO_STACK_SETRETTOERROR (moo, nargs, MOO_EINVAL); |  | ||||||
| 	return MOO_PF_SUCCESS; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static moo_pfrc_t pf_system_put_int8 (moo_t* moo, moo_ooi_t nargs) |  | ||||||
| { |  | ||||||
| 	return _put_system_int (moo, nargs, 1); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static moo_pfrc_t pf_system_put_int16 (moo_t* moo, moo_ooi_t nargs) |  | ||||||
| { |  | ||||||
| 	return _put_system_int (moo, nargs, 2); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static moo_pfrc_t pf_system_put_int32 (moo_t* moo, moo_ooi_t nargs) |  | ||||||
| { |  | ||||||
| 	return _put_system_int (moo, nargs, 4); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static moo_pfrc_t pf_system_put_int64 (moo_t* moo, moo_ooi_t nargs) |  | ||||||
| { |  | ||||||
| 	return _put_system_int (moo, nargs, 8); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static moo_pfrc_t pf_system_put_uint8 (moo_t* moo, moo_ooi_t nargs) |  | ||||||
| { |  | ||||||
| 	return _put_system_uint (moo, nargs, 1); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static moo_pfrc_t pf_system_put_uint16 (moo_t* moo, moo_ooi_t nargs) |  | ||||||
| { |  | ||||||
| 	return _put_system_uint (moo, nargs, 2); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static moo_pfrc_t pf_system_put_uint32 (moo_t* moo, moo_ooi_t nargs) |  | ||||||
| { |  | ||||||
| 	return _put_system_uint (moo, nargs, 4); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static moo_pfrc_t pf_system_put_uint64 (moo_t* moo, moo_ooi_t nargs) |  | ||||||
| { |  | ||||||
| 	return _put_system_uint (moo, nargs, 8); |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| static moo_pfrc_t _get_smptr_int (moo_t* moo, moo_ooi_t nargs, int size) |  | ||||||
| { |  | ||||||
| 	moo_oop_t rcv; |  | ||||||
| 	moo_int8_t* rawptr; |  | ||||||
| 	moo_oow_t offset; |  | ||||||
| 	moo_oop_t result; |  | ||||||
|  |  | ||||||
| 	MOO_ASSERT (moo, nargs == 1); |  | ||||||
|  |  | ||||||
| 	rcv = MOO_STACK_GETRCV(moo, nargs); |  | ||||||
| 	MOO_PF_CHECK_RCV (moo, MOO_OOP_IS_SMPTR(rcv)); |  | ||||||
|  |  | ||||||
| 	if (moo_inttooow (moo, MOO_STACK_GETARG(moo, nargs, 0), &offset) <= 0) |  | ||||||
| 	{ |  | ||||||
| 		MOO_STACK_SETRETTOERROR(moo, nargs, MOO_EINVAL); |  | ||||||
| 		return MOO_PF_SUCCESS; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	rawptr = MOO_OOP_TO_SMPTR(rcv); |  | ||||||
|  |  | ||||||
| 	result = _fetch_raw_int (moo, rawptr, offset, size); |  | ||||||
| 	if (!result)  |  | ||||||
| 	{ |  | ||||||
| 		MOO_STACK_SETRETTOERRNUM (moo, nargs); |  | ||||||
| 		return MOO_PF_SUCCESS; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	MOO_STACK_SETRET (moo, nargs, result); |  | ||||||
| 	return MOO_PF_SUCCESS; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static moo_pfrc_t _get_smptr_uint (moo_t* moo, moo_ooi_t nargs, int size) |  | ||||||
| { |  | ||||||
| 	moo_oop_t rcv; |  | ||||||
| 	moo_uint8_t* rawptr; |  | ||||||
| 	moo_oow_t offset; |  | ||||||
| 	moo_oop_t result; |  | ||||||
|  |  | ||||||
| 	MOO_ASSERT (moo, nargs == 1); |  | ||||||
|  |  | ||||||
| 	rcv = MOO_STACK_GETRCV(moo, nargs); |  | ||||||
| 	MOO_PF_CHECK_RCV (moo, MOO_OOP_IS_SMPTR(rcv)); |  | ||||||
|  |  | ||||||
| 	if (moo_inttooow (moo, MOO_STACK_GETARG(moo, nargs, 0), &offset) <= 0) |  | ||||||
| 	{ |  | ||||||
| 		MOO_STACK_SETRETTOERROR(moo, nargs, MOO_EINVAL); |  | ||||||
| 		return MOO_PF_SUCCESS; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	rawptr = MOO_OOP_TO_SMPTR(rcv); |  | ||||||
|  |  | ||||||
| 	result = _fetch_raw_uint (moo, rawptr, offset, size); |  | ||||||
| 	if (!result)  |  | ||||||
| 	{ |  | ||||||
| 		MOO_STACK_SETRETTOERRNUM(moo, nargs); |  | ||||||
| 		return MOO_PF_SUCCESS; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	MOO_STACK_SETRET (moo, nargs, result); |  | ||||||
| 	return MOO_PF_SUCCESS; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static moo_pfrc_t pf_smptr_get_int8 (moo_t* moo, moo_ooi_t nargs) |  | ||||||
| { |  | ||||||
| 	return _get_smptr_int (moo, nargs, 1); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static moo_pfrc_t pf_smptr_get_int16 (moo_t* moo, moo_ooi_t nargs) |  | ||||||
| { |  | ||||||
| 	return _get_smptr_int (moo, nargs, 2); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static moo_pfrc_t pf_smptr_get_int32 (moo_t* moo, moo_ooi_t nargs) |  | ||||||
| { |  | ||||||
| 	return _get_smptr_int (moo, nargs, 4); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static moo_pfrc_t pf_smptr_get_int64 (moo_t* moo, moo_ooi_t nargs) |  | ||||||
| { |  | ||||||
| 	return _get_smptr_int (moo, nargs, 8); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static moo_pfrc_t pf_smptr_get_uint8 (moo_t* moo, moo_ooi_t nargs) |  | ||||||
| { |  | ||||||
| 	return _get_smptr_uint (moo, nargs, 1); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static moo_pfrc_t pf_smptr_get_uint16 (moo_t* moo, moo_ooi_t nargs) |  | ||||||
| { |  | ||||||
| 	return _get_smptr_uint (moo, nargs, 2); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static moo_pfrc_t pf_smptr_get_uint32 (moo_t* moo, moo_ooi_t nargs) |  | ||||||
| { |  | ||||||
| 	return _get_smptr_uint (moo, nargs, 4); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static moo_pfrc_t pf_smptr_get_uint64 (moo_t* moo, moo_ooi_t nargs) |  | ||||||
| { |  | ||||||
| 	return _get_smptr_uint (moo, nargs, 8); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static moo_pfrc_t _put_smptr_int (moo_t* moo, moo_ooi_t nargs, int size) |  | ||||||
| { |  | ||||||
| 	moo_uint8_t* rawptr; |  | ||||||
| 	moo_oow_t offset; |  | ||||||
| 	moo_oop_t tmp; |  | ||||||
|  |  | ||||||
| 	MOO_ASSERT (moo, nargs == 2); |  | ||||||
|  |  | ||||||
| 	tmp = MOO_STACK_GETRCV(moo, nargs); |  | ||||||
| 	MOO_PF_CHECK_RCV (moo, MOO_OOP_IS_SMPTR(tmp)); |  | ||||||
|  |  | ||||||
| 	rawptr = MOO_OOP_TO_SMPTR(tmp); |  | ||||||
|  |  | ||||||
| 	if (moo_inttooow(moo, MOO_STACK_GETARG(moo, nargs, 0), &offset) <= 0) |  | ||||||
| 	{ |  | ||||||
| 		MOO_STACK_SETRETTOERROR (moo, nargs, MOO_EINVAL); |  | ||||||
| 		return MOO_PF_SUCCESS; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	if (_store_raw_int (moo, rawptr, offset, size, MOO_STACK_GETARG(moo, nargs, 1)) <= -1) |  | ||||||
| 	{ |  | ||||||
| 		MOO_STACK_SETRETTOERRNUM (moo, nargs); |  | ||||||
| 		return MOO_PF_SUCCESS; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	MOO_STACK_SETRETTORCV (moo, nargs); |  | ||||||
| 	return MOO_PF_SUCCESS; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static moo_pfrc_t _put_smptr_uint (moo_t* moo, moo_ooi_t nargs, int size) |  | ||||||
| { |  | ||||||
| 	moo_uint8_t* rawptr; |  | ||||||
| 	moo_oow_t offset; |  | ||||||
| 	moo_oop_t tmp; |  | ||||||
|  |  | ||||||
| 	MOO_ASSERT (moo, nargs == 2); |  | ||||||
|  |  | ||||||
| 	tmp = MOO_STACK_GETRCV(moo, nargs); |  | ||||||
| 	MOO_PF_CHECK_RCV (moo, MOO_OOP_IS_SMPTR(tmp)); |  | ||||||
|  |  | ||||||
| 	rawptr = MOO_OOP_TO_SMPTR(tmp); |  | ||||||
|  |  | ||||||
| 	if (moo_inttooow(moo, MOO_STACK_GETARG(moo, nargs, 0), &offset) <= 0) |  | ||||||
| 	{ |  | ||||||
| 		MOO_STACK_SETRETTOERROR (moo, nargs, MOO_EINVAL); |  | ||||||
| 		return MOO_PF_SUCCESS; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	if (_store_raw_uint (moo, rawptr, offset, size, MOO_STACK_GETARG(moo, nargs, 1)) <= -1) |  | ||||||
| 	{ |  | ||||||
| 		MOO_STACK_SETRETTOERRNUM (moo, nargs); |  | ||||||
| 		return MOO_PF_SUCCESS; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	MOO_STACK_SETRETTORCV (moo, nargs); |  | ||||||
| 	return MOO_PF_SUCCESS; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static moo_pfrc_t pf_smptr_put_int8 (moo_t* moo, moo_ooi_t nargs) |  | ||||||
| { |  | ||||||
| 	return _put_smptr_int (moo, nargs, 1); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static moo_pfrc_t pf_smptr_put_int16 (moo_t* moo, moo_ooi_t nargs) |  | ||||||
| { |  | ||||||
| 	return _put_smptr_int (moo, nargs, 2); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static moo_pfrc_t pf_smptr_put_int32 (moo_t* moo, moo_ooi_t nargs) |  | ||||||
| { |  | ||||||
| 	return _put_smptr_int (moo, nargs, 4); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static moo_pfrc_t pf_smptr_put_int64 (moo_t* moo, moo_ooi_t nargs) |  | ||||||
| { |  | ||||||
| 	return _put_smptr_int (moo, nargs, 8); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static moo_pfrc_t pf_smptr_put_uint8 (moo_t* moo, moo_ooi_t nargs) |  | ||||||
| { |  | ||||||
| 	return _put_smptr_uint (moo, nargs, 1); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static moo_pfrc_t pf_smptr_put_uint16 (moo_t* moo, moo_ooi_t nargs) |  | ||||||
| { |  | ||||||
| 	return _put_smptr_uint (moo, nargs, 2); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static moo_pfrc_t pf_smptr_put_uint32 (moo_t* moo, moo_ooi_t nargs) |  | ||||||
| { |  | ||||||
| 	return _put_smptr_uint (moo, nargs, 4); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static moo_pfrc_t pf_smptr_put_uint64 (moo_t* moo, moo_ooi_t nargs) |  | ||||||
| { |  | ||||||
| 	return _put_smptr_uint (moo, nargs, 8); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static void sprintptr (moo_ooch_t* nbuf, moo_oow_t num, moo_oow_t *lenp) | static void sprintptr (moo_ooch_t* nbuf, moo_oow_t num, moo_oow_t *lenp) | ||||||
| { | { | ||||||
| @ -3913,10 +3215,10 @@ static pf_t pftab[] = | |||||||
| 	{ "Apex_basicSize",                        { moo_pf_basic_size,                       0, 0 } }, | 	{ "Apex_basicSize",                        { moo_pf_basic_size,                       0, 0 } }, | ||||||
| 	{ "Apex_class",                            { moo_pf_class,                            0, 0 } }, | 	{ "Apex_class",                            { moo_pf_class,                            0, 0 } }, | ||||||
| 	{ "Apex_hash",                             { pf_hash,                                 0, 0 } }, | 	{ "Apex_hash",                             { pf_hash,                                 0, 0 } }, | ||||||
| 	{ "Apex_isKindOf:",                        { pf_is_kind_of,                           1, 1, } }, | 	{ "Apex_isKindOf:",                        { moo_pf_is_kind_of,                       1, 1, } }, | ||||||
| 	{ "Apex_perform",                          { pf_perform,                              1, MA } }, | 	{ "Apex_perform",                          { pf_perform,                              1, MA } }, | ||||||
| 	{ "Apex_removeToBeFinalized",              { pf_remove_to_be_finalized,               0, 0 } }, | 	{ "Apex_removeToBeFinalized",              { pf_remove_to_be_finalized,               0, 0 } }, | ||||||
| 	{ "Apex_respondsTo:",                      { pf_responds_to,                          1, 1 } }, | 	{ "Apex_respondsTo:",                      { moo_pf_responds_to,                      1, 1 } }, | ||||||
| 	{ "Apex_shallowCopy",                      { moo_pf_shallow_copy,                     0, 0 } }, | 	{ "Apex_shallowCopy",                      { moo_pf_shallow_copy,                     0, 0 } }, | ||||||
|  |  | ||||||
| 	{ "Apex_==",                               { moo_pf_identical,                        1, 1 } }, | 	{ "Apex_==",                               { moo_pf_identical,                        1, 1 } }, | ||||||
| @ -3951,46 +3253,49 @@ static pf_t pftab[] = | |||||||
| 	{ "SmallInteger_asError",                  { pf_smooi_as_error,                       0, 0 } }, | 	{ "SmallInteger_asError",                  { pf_smooi_as_error,                       0, 0 } }, | ||||||
|  |  | ||||||
| 	{ "SmallPointer_asString",                 { pf_smptr_as_string,                      0, 0 } }, | 	{ "SmallPointer_asString",                 { pf_smptr_as_string,                      0, 0 } }, | ||||||
| 	{ "SmallPointer_free",                     { pf_smptr_free,                           0, 0 } }, | 	{ "SmallPointer_free",                     { moo_pf_smptr_free,                       0, 0 } }, | ||||||
| 	{ "SmallPointer_getInt16",                 { pf_smptr_get_int16,                      1, 1 } }, | 	{ "SmallPointer_getInt16",                 { moo_pf_smptr_get_int16,                  1, 1 } }, | ||||||
| 	{ "SmallPointer_getInt32",                 { pf_smptr_get_int32,                      1, 1 } }, | 	{ "SmallPointer_getInt32",                 { moo_pf_smptr_get_int32,                  1, 1 } }, | ||||||
| 	{ "SmallPointer_getInt64",                 { pf_smptr_get_int64,                      1, 1 } }, | 	{ "SmallPointer_getInt64",                 { moo_pf_smptr_get_int64,                  1, 1 } }, | ||||||
| 	{ "SmallPointer_getInt8",                  { pf_smptr_get_int8,                       1, 1 } }, | 	{ "SmallPointer_getInt8",                  { moo_pf_smptr_get_int8,                   1, 1 } }, | ||||||
| 	{ "SmallPointer_getUint16",                { pf_smptr_get_uint16,                     1, 1 } }, | 	{ "SmallPointer_getUint16",                { moo_pf_smptr_get_uint16,                 1, 1 } }, | ||||||
| 	{ "SmallPointer_getUint32",                { pf_smptr_get_uint32,                     1, 1 } }, | 	{ "SmallPointer_getUint32",                { moo_pf_smptr_get_uint32,                 1, 1 } }, | ||||||
| 	{ "SmallPointer_getUint64",                { pf_smptr_get_uint64,                     1, 1 } }, | 	{ "SmallPointer_getUint64",                { moo_pf_smptr_get_uint64,                 1, 1 } }, | ||||||
| 	{ "SmallPointer_getUint8",                 { pf_smptr_get_uint8,                      1, 1 } }, | 	{ "SmallPointer_getUint8",                 { moo_pf_smptr_get_uint8,                  1, 1 } }, | ||||||
| 	{ "SmallPointer_putInt8",                  { pf_smptr_put_int8,                       2, 2 } }, | 	{ "SmallPointer_putInt8",                  { moo_pf_smptr_put_int8,                   2, 2 } }, | ||||||
| 	{ "SmallPointer_putInt16",                 { pf_smptr_put_int16,                      2, 2 } }, | 	{ "SmallPointer_putInt16",                 { moo_pf_smptr_put_int16,                  2, 2 } }, | ||||||
| 	{ "SmallPointer_putInt32",                 { pf_smptr_put_int32,                      2, 2 } }, | 	{ "SmallPointer_putInt32",                 { moo_pf_smptr_put_int32,                  2, 2 } }, | ||||||
| 	{ "SmallPointer_putInt64",                 { pf_smptr_put_int64,                      2, 2 } }, | 	{ "SmallPointer_putInt64",                 { moo_pf_smptr_put_int64,                  2, 2 } }, | ||||||
| 	{ "SmallPointer_putUint8",                 { pf_smptr_put_uint8,                      2, 2 } }, | 	{ "SmallPointer_putUint8",                 { moo_pf_smptr_put_uint8,                  2, 2 } }, | ||||||
| 	{ "SmallPointer_putUint16",                { pf_smptr_put_uint16,                     2, 2 } }, | 	{ "SmallPointer_putUint16",                { moo_pf_smptr_put_uint16,                 2, 2 } }, | ||||||
| 	{ "SmallPointer_putUint32",                { pf_smptr_put_uint32,                     2, 2 } }, | 	{ "SmallPointer_putUint32",                { moo_pf_smptr_put_uint32,                 2, 2 } }, | ||||||
| 	{ "SmallPointer_putUint64",                { pf_smptr_put_uint64,                     2, 2 } }, | 	{ "SmallPointer_putUint64",                { moo_pf_smptr_put_uint64,                 2, 2 } }, | ||||||
|  |  | ||||||
| 	{ "String_strlen",                         { pf_strlen,                               0, 0 } }, | 	{ "String_strlen",                         { pf_strlen,                               0, 0 } }, | ||||||
|  |  | ||||||
| 	{ "System_calloc",                         { pf_system_calloc,                        1, 1 } }, | 	{ "System_calloc",                         { moo_pf_system_calloc,                    1, 1 } }, | ||||||
| 	{ "System_free",                           { pf_system_free,                          1, 1 } }, | 	{ "System_calloc:",                        { moo_pf_system_calloc,                    1, 1 } }, | ||||||
| 	{ "System_getInt16",                       { pf_system_get_int16,                     2, 2 } }, | 	{ "System_free",                           { moo_pf_system_free,                      1, 1 } }, | ||||||
| 	{ "System_getInt32",                       { pf_system_get_int32,                     2, 2 } }, | 	{ "System_free:",                          { moo_pf_system_free,                      1, 1 } }, | ||||||
| 	{ "System_getInt64",                       { pf_system_get_int64,                     2, 2 } }, | 	{ "System_getInt16",                       { moo_pf_system_get_int16,                 2, 2 } }, | ||||||
| 	{ "System_getInt8",                        { pf_system_get_int8,                      2, 2 } }, | 	{ "System_getInt32",                       { moo_pf_system_get_int32,                 2, 2 } }, | ||||||
| 	{ "System_getUint16",                      { pf_system_get_uint16,                    2, 2 } }, | 	{ "System_getInt64",                       { moo_pf_system_get_int64,                 2, 2 } }, | ||||||
| 	{ "System_getUint32",                      { pf_system_get_uint32,                    2, 2 } }, | 	{ "System_getInt8",                        { moo_pf_system_get_int8,                  2, 2 } }, | ||||||
| 	{ "System_getUint64",                      { pf_system_get_uint64,                    2, 2 } }, | 	{ "System_getUint16",                      { moo_pf_system_get_uint16,                2, 2 } }, | ||||||
| 	{ "System_getUint8",                       { pf_system_get_uint8,                     2, 2 } }, | 	{ "System_getUint32",                      { moo_pf_system_get_uint32,                2, 2 } }, | ||||||
| 	{ "System_malloc",                         { pf_system_malloc,                        1, 1 } }, | 	{ "System_getUint64",                      { moo_pf_system_get_uint64,                2, 2 } }, | ||||||
|  | 	{ "System_getUint8",                       { moo_pf_system_get_uint8,                 2, 2 } }, | ||||||
|  | 	{ "System_malloc",                         { moo_pf_system_malloc,                    1, 1 } }, | ||||||
|  | 	{ "System_malloc:",                        { moo_pf_system_malloc,                    1, 1 } }, | ||||||
| 	{ "System_popCollectable",                 { pf_system_pop_collectable,               0, 0 } }, | 	{ "System_popCollectable",                 { pf_system_pop_collectable,               0, 0 } }, | ||||||
| 	{ "System_putInt8",                        { pf_system_put_int8,                      3, 3 } }, | 	{ "System_putInt8",                        { moo_pf_system_put_int8,                  3, 3 } }, | ||||||
| 	{ "System_putInt16",                       { pf_system_put_int16,                     3, 3 } }, | 	{ "System_putInt16",                       { moo_pf_system_put_int16,                 3, 3 } }, | ||||||
| 	{ "System_putInt32",                       { pf_system_put_int32,                     3, 3 } }, | 	{ "System_putInt32",                       { moo_pf_system_put_int32,                 3, 3 } }, | ||||||
| 	{ "System_putInt64",                       { pf_system_put_int64,                     3, 3 } }, | 	{ "System_putInt64",                       { moo_pf_system_put_int64,                 3, 3 } }, | ||||||
| 	{ "System_putUint8",                       { pf_system_put_uint8,                     3, 3 } }, | 	{ "System_putUint8",                       { moo_pf_system_put_uint8,                 3, 3 } }, | ||||||
| 	{ "System_putUint16",                      { pf_system_put_uint16,                    3, 3 } }, | 	{ "System_putUint16",                      { moo_pf_system_put_uint16,                3, 3 } }, | ||||||
| 	{ "System_putUint32",                      { pf_system_put_uint32,                    3, 3 } }, | 	{ "System_putUint32",                      { moo_pf_system_put_uint32,                3, 3 } }, | ||||||
| 	{ "System_putUint64",                      { pf_system_put_uint64,                    3, 3 } }, | 	{ "System_putUint64",                      { moo_pf_system_put_uint64,                3, 3 } }, | ||||||
|  |  | ||||||
| 	{ "System_signal:afterSecs:",              { pf_system_add_timed_semaphore,           2, 2 } }, | 	{ "System_signal:afterSecs:",              { pf_system_add_timed_semaphore,           2, 2 } }, | ||||||
| 	{ "System_signal:afterSecs:nanosecs:",     { pf_system_add_timed_semaphore,           3, 3 } }, | 	{ "System_signal:afterSecs:nanosecs:",     { pf_system_add_timed_semaphore,           3, 3 } }, | ||||||
| @ -4383,7 +3688,7 @@ static int send_message (moo_t* moo, moo_oop_char_t selector, int to_super, moo_ | |||||||
|  |  | ||||||
| 	mthname.ptr = MOO_OBJ_GET_CHAR_SLOT(selector); | 	mthname.ptr = MOO_OBJ_GET_CHAR_SLOT(selector); | ||||||
| 	mthname.len = MOO_OBJ_GET_SIZE(selector); | 	mthname.len = MOO_OBJ_GET_SIZE(selector); | ||||||
| 	method = find_method (moo, receiver, &mthname, to_super); | 	method = moo_findmethod (moo, receiver, &mthname, to_super); | ||||||
| 	if (!method)  | 	if (!method)  | ||||||
| 	{ | 	{ | ||||||
| 		static moo_ooch_t fbm[] = {  | 		static moo_ooch_t fbm[] = {  | ||||||
| @ -4394,7 +3699,7 @@ static int send_message (moo_t* moo, moo_oop_char_t selector, int to_super, moo_ | |||||||
| 		mthname.ptr = fbm; | 		mthname.ptr = fbm; | ||||||
| 		mthname.len = 18; | 		mthname.len = 18; | ||||||
|  |  | ||||||
| 		method = find_method (moo, receiver, &mthname, 0); | 		method = moo_findmethod (moo, receiver, &mthname, 0); | ||||||
| 		if (!method) | 		if (!method) | ||||||
| 		{ | 		{ | ||||||
| 			/* this must not happen as long as doesNotUnderstand: is implemented under Apex. | 			/* this must not happen as long as doesNotUnderstand: is implemented under Apex. | ||||||
| @ -4431,7 +3736,7 @@ static int send_message_with_str (moo_t* moo, const moo_ooch_t* nameptr, moo_oow | |||||||
|  |  | ||||||
| 	mthname.ptr = (moo_ooch_t*)nameptr; | 	mthname.ptr = (moo_ooch_t*)nameptr; | ||||||
| 	mthname.len = namelen; | 	mthname.len = namelen; | ||||||
| 	method = find_method (moo, receiver, &mthname, to_super); | 	method = moo_findmethod (moo, receiver, &mthname, to_super); | ||||||
| 	if (!method) | 	if (!method) | ||||||
| 	{ | 	{ | ||||||
| 		MOO_LOG4 (moo, MOO_LOG_IC | MOO_LOG_FATAL,  | 		MOO_LOG4 (moo, MOO_LOG_IC | MOO_LOG_FATAL,  | ||||||
|  | |||||||
| @ -1262,6 +1262,12 @@ moo_pfbase_t* moo_getpfnum ( | |||||||
| 	moo_ooi_t*        pfnum | 	moo_ooi_t*        pfnum | ||||||
| ); | ); | ||||||
|  |  | ||||||
|  | moo_oop_method_t moo_findmethod ( | ||||||
|  | 	moo_t*            moo, | ||||||
|  | 	moo_oop_t         receiver, | ||||||
|  | 	const moo_oocs_t* message, | ||||||
|  | 	int               super | ||||||
|  | ); | ||||||
|  |  | ||||||
| /* ========================================================================= */ | /* ========================================================================= */ | ||||||
| /* moo.c                                                                     */ | /* moo.c                                                                     */ | ||||||
| @ -1314,6 +1320,57 @@ moo_pfrc_t moo_pf_basic_at (moo_t* moo, moo_ooi_t nargs); | |||||||
| moo_pfrc_t moo_pf_basic_at_put (moo_t* moo, moo_ooi_t nargs); | moo_pfrc_t moo_pf_basic_at_put (moo_t* moo, moo_ooi_t nargs); | ||||||
|  |  | ||||||
| moo_pfrc_t moo_pf_is_kind_of (moo_t* moo, moo_ooi_t nargs); | moo_pfrc_t moo_pf_is_kind_of (moo_t* moo, moo_ooi_t nargs); | ||||||
|  | moo_pfrc_t moo_pf_responds_to (moo_t* moo, moo_ooi_t nargs); | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /* ========================================================================= */ | ||||||
|  | /* pf-sys.c                                                                  */ | ||||||
|  | /* ========================================================================= */ | ||||||
|  | moo_pfrc_t moo_pf_system_malloc (moo_t* moo, moo_ooi_t nargs); | ||||||
|  | moo_pfrc_t moo_pf_system_calloc (moo_t* moo, moo_ooi_t nargs); | ||||||
|  | moo_pfrc_t moo_pf_system_free (moo_t* moo, moo_ooi_t nargs); | ||||||
|  | moo_pfrc_t moo_pf_smptr_free (moo_t* moo, moo_ooi_t nargs); | ||||||
|  |  | ||||||
|  | moo_pfrc_t moo_pf_system_get_int8 (moo_t* moo, moo_ooi_t nargs); | ||||||
|  | moo_pfrc_t moo_pf_system_get_int16 (moo_t* moo, moo_ooi_t nargs); | ||||||
|  | moo_pfrc_t moo_pf_system_get_int32 (moo_t* moo, moo_ooi_t nargs); | ||||||
|  | moo_pfrc_t moo_pf_system_get_int64 (moo_t* moo, moo_ooi_t nargs); | ||||||
|  |  | ||||||
|  | moo_pfrc_t moo_pf_system_get_uint8 (moo_t* moo, moo_ooi_t nargs); | ||||||
|  | moo_pfrc_t moo_pf_system_get_uint16 (moo_t* moo, moo_ooi_t nargs); | ||||||
|  | moo_pfrc_t moo_pf_system_get_uint32 (moo_t* moo, moo_ooi_t nargs); | ||||||
|  | moo_pfrc_t moo_pf_system_get_uint64 (moo_t* moo, moo_ooi_t nargs); | ||||||
|  |  | ||||||
|  | moo_pfrc_t moo_pf_system_put_int8 (moo_t* moo, moo_ooi_t nargs); | ||||||
|  | moo_pfrc_t moo_pf_system_put_int16 (moo_t* moo, moo_ooi_t nargs); | ||||||
|  | moo_pfrc_t moo_pf_system_put_int32 (moo_t* moo, moo_ooi_t nargs); | ||||||
|  | moo_pfrc_t moo_pf_system_put_int64 (moo_t* moo, moo_ooi_t nargs); | ||||||
|  |  | ||||||
|  | moo_pfrc_t moo_pf_system_put_uint8 (moo_t* moo, moo_ooi_t nargs); | ||||||
|  | moo_pfrc_t moo_pf_system_put_uint16 (moo_t* moo, moo_ooi_t nargs); | ||||||
|  | moo_pfrc_t moo_pf_system_put_uint32 (moo_t* moo, moo_ooi_t nargs); | ||||||
|  | moo_pfrc_t moo_pf_system_put_uint64 (moo_t* moo, moo_ooi_t nargs); | ||||||
|  |  | ||||||
|  |  | ||||||
|  | moo_pfrc_t moo_pf_smptr_get_int8 (moo_t* moo, moo_ooi_t nargs); | ||||||
|  | moo_pfrc_t moo_pf_smptr_get_int16 (moo_t* moo, moo_ooi_t nargs); | ||||||
|  | moo_pfrc_t moo_pf_smptr_get_int32 (moo_t* moo, moo_ooi_t nargs); | ||||||
|  | moo_pfrc_t moo_pf_smptr_get_int64 (moo_t* moo, moo_ooi_t nargs); | ||||||
|  |  | ||||||
|  | moo_pfrc_t moo_pf_smptr_get_uint8 (moo_t* moo, moo_ooi_t nargs); | ||||||
|  | moo_pfrc_t moo_pf_smptr_get_uint16 (moo_t* moo, moo_ooi_t nargs); | ||||||
|  | moo_pfrc_t moo_pf_smptr_get_uint32 (moo_t* moo, moo_ooi_t nargs); | ||||||
|  | moo_pfrc_t moo_pf_smptr_get_uint64 (moo_t* moo, moo_ooi_t nargs); | ||||||
|  |  | ||||||
|  | moo_pfrc_t moo_pf_smptr_put_int8 (moo_t* moo, moo_ooi_t nargs); | ||||||
|  | moo_pfrc_t moo_pf_smptr_put_int16 (moo_t* moo, moo_ooi_t nargs); | ||||||
|  | moo_pfrc_t moo_pf_smptr_put_int32 (moo_t* moo, moo_ooi_t nargs); | ||||||
|  | moo_pfrc_t moo_pf_smptr_put_int64 (moo_t* moo, moo_ooi_t nargs); | ||||||
|  |  | ||||||
|  | moo_pfrc_t moo_pf_smptr_put_uint8 (moo_t* moo, moo_ooi_t nargs); | ||||||
|  | moo_pfrc_t moo_pf_smptr_put_uint16 (moo_t* moo, moo_ooi_t nargs); | ||||||
|  | moo_pfrc_t moo_pf_smptr_put_uint32 (moo_t* moo, moo_ooi_t nargs); | ||||||
|  | moo_pfrc_t moo_pf_smptr_put_uint64 (moo_t* moo, moo_ooi_t nargs); | ||||||
|  |  | ||||||
| /* TODO: remove the following debugging functions */ | /* TODO: remove the following debugging functions */ | ||||||
| /* ========================================================================= */ | /* ========================================================================= */ | ||||||
|  | |||||||
| @ -460,3 +460,32 @@ moo_pfrc_t moo_pf_is_kind_of (moo_t* moo, moo_ooi_t nargs) | |||||||
| 	return MOO_PF_SUCCESS; | 	return MOO_PF_SUCCESS; | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | moo_pfrc_t moo_pf_responds_to (moo_t* moo, moo_ooi_t nargs) | ||||||
|  | { | ||||||
|  | 	moo_oop_t rcv, selector; | ||||||
|  | 	moo_oocs_t mthname; | ||||||
|  |  | ||||||
|  | 	rcv = MOO_STACK_GETRCV(moo, nargs); | ||||||
|  | 	selector = MOO_STACK_GETARG(moo, nargs, 0); | ||||||
|  |  | ||||||
|  | 	/*if (MOO_CLASSOF(moo,selector) != moo->_symbol)*/ | ||||||
|  | 	if (!MOO_OOP_IS_POINTER(selector) || !MOO_OBJ_IS_CHAR_POINTER(selector)) | ||||||
|  | 	{ | ||||||
|  | 		moo_seterrbfmt (moo, MOO_EINVAL, "invalid argument - %O", selector); | ||||||
|  | 		return MOO_PF_FAILURE; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	mthname.ptr = MOO_OBJ_GET_CHAR_SLOT(selector); | ||||||
|  | 	mthname.len = MOO_OBJ_GET_SIZE(selector); | ||||||
|  | 	if (moo_findmethod (moo, rcv, &mthname, 0)) | ||||||
|  | 	{ | ||||||
|  | 		MOO_STACK_SETRET (moo, nargs, moo->_true); | ||||||
|  | 	} | ||||||
|  | 	else | ||||||
|  | 	{ | ||||||
|  | 		MOO_STACK_SETRET (moo, nargs, moo->_false); | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	return MOO_PF_SUCCESS; | ||||||
|  | } | ||||||
|  | |||||||
							
								
								
									
										716
									
								
								moo/lib/pf-sys.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										716
									
								
								moo/lib/pf-sys.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,716 @@ | |||||||
|  | /* | ||||||
|  |  * $Id$ | ||||||
|  |  * | ||||||
|  |     Copyright (c) 2014-2017 Chung, Hyung-Hwan. All rights reserved. | ||||||
|  |  | ||||||
|  |     Redistribution and use in source and binary forms, with or without | ||||||
|  |     modification, are permitted provided that the following conditions | ||||||
|  |     are met: | ||||||
|  |     1. Redistributions of source code must retain the above copyright | ||||||
|  |        notice, this list of conditions and the following disclaimer. | ||||||
|  |     2. Redistributions in binary form must reproduce the above copyright | ||||||
|  |        notice, this list of conditions and the following disclaimer in the | ||||||
|  |        documentation and/or other materials provided with the distribution. | ||||||
|  |  | ||||||
|  |     THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR | ||||||
|  |     IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WAfRRANTIES | ||||||
|  |     OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. | ||||||
|  |     IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, | ||||||
|  |     INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||||||
|  |     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | ||||||
|  |     DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | ||||||
|  |     THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||||
|  |     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | ||||||
|  |     THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  |  | ||||||
|  | #include "moo-prv.h" | ||||||
|  |  | ||||||
|  | static MOO_INLINE moo_pfrc_t _system_alloc (moo_t* moo, moo_ooi_t nargs, int clear) | ||||||
|  | { | ||||||
|  | 	moo_oop_t tmp; | ||||||
|  | 	void* ptr; | ||||||
|  |  | ||||||
|  | 	MOO_ASSERT (moo, nargs == 1); | ||||||
|  |  | ||||||
|  | 	tmp = MOO_STACK_GETARG(moo, nargs, 0); | ||||||
|  | 	if (!MOO_OOP_IS_SMOOI(tmp))  | ||||||
|  | 	{ | ||||||
|  | 		moo_seterrbfmt (moo, MOO_EINVAL, "invalid size - %O", tmp); | ||||||
|  | 		return MOO_PF_FAILURE; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	ptr = clear? moo_callocmem (moo, MOO_OOP_TO_SMOOI(tmp)): | ||||||
|  | 	             moo_allocmem (moo, MOO_OOP_TO_SMOOI(tmp)); | ||||||
|  | 	if (!ptr) return MOO_PF_FAILURE; | ||||||
|  |  | ||||||
|  | 	if (!MOO_IN_SMPTR_RANGE(ptr)) | ||||||
|  | 	{ | ||||||
|  | 		moo_seterrbfmt (moo, MOO_ERANGE, "%p not in smptr range", ptr); | ||||||
|  | 		moo_freemem (moo, ptr); | ||||||
|  | 		return MOO_PF_FAILURE; | ||||||
|  | 	} | ||||||
|  | 	 | ||||||
|  | 	MOO_STACK_SETRET (moo, nargs, MOO_SMPTR_TO_OOP(ptr)); | ||||||
|  | 	return MOO_PF_SUCCESS; | ||||||
|  | }  | ||||||
|  |  | ||||||
|  | moo_pfrc_t moo_pf_system_calloc (moo_t* moo, moo_ooi_t nargs) | ||||||
|  | { | ||||||
|  | 	/*MOO_PF_CHECK_RCV (moo, MOO_STACK_GETRCV(moo, nargs) == (moo_oop_t)moo->_system);*/ | ||||||
|  | 	return _system_alloc (moo, nargs, 1); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | moo_pfrc_t moo_pf_system_malloc (moo_t* moo, moo_ooi_t nargs) | ||||||
|  | { | ||||||
|  | 	/*MOO_PF_CHECK_RCV (moo, MOO_STACK_GETRCV(moo, nargs) == (moo_oop_t)moo->_system);*/ | ||||||
|  | 	return _system_alloc (moo, nargs, 0); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | moo_pfrc_t moo_pf_system_free (moo_t* moo, moo_ooi_t nargs) | ||||||
|  | { | ||||||
|  | 	moo_oop_t tmp; | ||||||
|  | 	void* rawptr; | ||||||
|  |  | ||||||
|  | 	/*MOO_PF_CHECK_RCV (moo, MOO_STACK_GETRCV(moo, nargs) == (moo_oop_t)moo->_system);*/ | ||||||
|  |  | ||||||
|  | 	MOO_ASSERT (moo, nargs == 1); | ||||||
|  |  | ||||||
|  | 	tmp = MOO_STACK_GETARG(moo, nargs, 0); | ||||||
|  | 	if (MOO_OOP_IS_SMPTR(tmp))  | ||||||
|  | 	{ | ||||||
|  | 		moo_freemem (moo, MOO_OOP_TO_SMPTR(tmp)); | ||||||
|  | 	} | ||||||
|  | 	else if (moo_inttooow(moo, tmp, (moo_oow_t*)&rawptr) >= 1) | ||||||
|  | 	{ | ||||||
|  | 		moo_freemem (moo, rawptr); | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	MOO_STACK_SETRETTORCV (moo, nargs); | ||||||
|  | 	return MOO_PF_SUCCESS; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | moo_pfrc_t moo_pf_smptr_free (moo_t* moo, moo_ooi_t nargs) | ||||||
|  | { | ||||||
|  | 	moo_oop_t tmp; | ||||||
|  |  | ||||||
|  | 	MOO_ASSERT (moo, nargs == 0); | ||||||
|  |  | ||||||
|  | 	tmp = MOO_STACK_GETRCV(moo, nargs); | ||||||
|  | 	MOO_PF_CHECK_RCV (moo, MOO_OOP_IS_SMPTR(tmp)); | ||||||
|  |  | ||||||
|  | 	moo_freemem (moo, MOO_OOP_TO_SMPTR(tmp)); | ||||||
|  |  | ||||||
|  | 	MOO_STACK_SETRETTORCV (moo, nargs); | ||||||
|  | 	return MOO_PF_SUCCESS; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /* ------------------------------------------------------------------------------------- */ | ||||||
|  |  | ||||||
|  | #include "pack1.h" | ||||||
|  | struct st_int8_t    { moo_int8_t  v; }; | ||||||
|  | struct st_int16_t   { moo_int16_t v; }; | ||||||
|  | struct st_int32_t   { moo_int32_t v; }; | ||||||
|  |  | ||||||
|  | struct st_uint8_t   { moo_uint8_t  v; }; | ||||||
|  | struct st_uint16_t  { moo_uint16_t v; }; | ||||||
|  | struct st_uint32_t  { moo_uint32_t v; }; | ||||||
|  |  | ||||||
|  | #if defined(MOO_HAVE_UINT64_T) | ||||||
|  | struct st_int64_t   { moo_int64_t v; }; | ||||||
|  | struct st_uint64_t  { moo_uint64_t v; }; | ||||||
|  | #endif | ||||||
|  | #if defined(MOO_HAVE_UINT128_T) | ||||||
|  | struct st_int128_t   { moo_int128_t v; }; | ||||||
|  | struct st_uint128_t  { moo_uint128_t v; }; | ||||||
|  | #endif | ||||||
|  | #include "unpack.h" | ||||||
|  |  | ||||||
|  |  | ||||||
|  | static MOO_INLINE moo_oop_t _fetch_raw_int (moo_t* moo, moo_int8_t* rawptr, moo_oow_t offset, int size) | ||||||
|  | { | ||||||
|  | 	moo_ooi_t v; | ||||||
|  |  | ||||||
|  | 	switch (size) | ||||||
|  | 	{ | ||||||
|  | 		case 1:  | ||||||
|  | 			v = ((struct st_int8_t*)&rawptr[offset])->v; | ||||||
|  | 			break; | ||||||
|  |  | ||||||
|  | 		case 2: | ||||||
|  | 			v = ((struct st_int16_t*)&rawptr[offset])->v; | ||||||
|  | 			break; | ||||||
|  |  | ||||||
|  | 		case 4:  | ||||||
|  | 			v = ((struct st_int32_t*)&rawptr[offset])->v; | ||||||
|  | 			break; | ||||||
|  |  | ||||||
|  | 	#if defined(MOO_HAVE_INT64_T) &&  (MOO_SIZEOF_OOW_T >= MOO_SIZEOF_INT64_T) | ||||||
|  | 		case 8:  | ||||||
|  | 			v = ((struct st_int64_t*)&rawptr[offset])->v; | ||||||
|  | 			break; | ||||||
|  | 	#endif | ||||||
|  |  | ||||||
|  | 	#if defined(MOO_HAVE_INT128_T) && (MOO_SIZEOF_OOW_T >= MOO_SIZEOF_INT128_T) | ||||||
|  | 		case 16:  | ||||||
|  | 			v = ((struct st_int128_t*)&rawptr[offset])->v; | ||||||
|  | 			break; | ||||||
|  | 	#endif | ||||||
|  |  | ||||||
|  | 		default: | ||||||
|  | 			moo_seterrnum (moo, MOO_EINVAL); | ||||||
|  | 			return MOO_NULL; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	return moo_ooitoint (moo, v); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | static MOO_INLINE moo_oop_t _fetch_raw_uint (moo_t* moo, moo_uint8_t* rawptr, moo_oow_t offset, int size) | ||||||
|  | { | ||||||
|  | 	moo_oow_t v; | ||||||
|  |  | ||||||
|  | 	switch (size) | ||||||
|  | 	{ | ||||||
|  | 		case 1:  | ||||||
|  | 			v = ((struct st_uint8_t*)&rawptr[offset])->v; | ||||||
|  | 			break; | ||||||
|  |  | ||||||
|  | 		case 2: | ||||||
|  | 			v = ((struct st_uint16_t*)&rawptr[offset])->v; | ||||||
|  | 			break; | ||||||
|  |  | ||||||
|  | 		case 4:  | ||||||
|  | 			v = ((struct st_uint32_t*)&rawptr[offset])->v; | ||||||
|  | 			break; | ||||||
|  |  | ||||||
|  | 	#if defined(MOO_HAVE_UINT64_T) &&  (MOO_SIZEOF_OOW_T >= MOO_SIZEOF_UINT64_T) | ||||||
|  | 		case 8:  | ||||||
|  | 			v = ((struct st_uint64_t*)&rawptr[offset])->v; | ||||||
|  | 			break; | ||||||
|  | 	#endif | ||||||
|  |  | ||||||
|  | 	#if defined(MOO_HAVE_UINT128_T) && (MOO_SIZEOF_OOW_T >= MOO_SIZEOF_UINT128_T) | ||||||
|  | 		case 16:  | ||||||
|  | 			v = ((struct st_uint128_t*)&rawptr[offset])->v; | ||||||
|  | 			break; | ||||||
|  | 	#endif | ||||||
|  |  | ||||||
|  | 		default: | ||||||
|  | 			moo_seterrnum (moo, MOO_EINVAL); | ||||||
|  | 			return MOO_NULL; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	return moo_oowtoint (moo, v); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static MOO_INLINE int _store_raw_int (moo_t* moo, moo_uint8_t* rawptr, moo_oow_t offset, int size, moo_oop_t voop) | ||||||
|  | { | ||||||
|  | 	moo_ooi_t w, max, min; | ||||||
|  |  | ||||||
|  | 	if (moo_inttoooi (moo, voop, &w) == 0) return -1; | ||||||
|  |  | ||||||
|  | 	/* assume 2's complement */ | ||||||
|  | 	max = (moo_ooi_t)(~(moo_oow_t)0 >> ((MOO_SIZEOF_OOW_T - size) * 8  + 1)); | ||||||
|  | 	min = -max - 1; | ||||||
|  |  | ||||||
|  | 	if (w > max || w < min)  | ||||||
|  | 	{ | ||||||
|  | 		moo_seterrnum (moo, MOO_ERANGE);  | ||||||
|  | 		return -1; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	switch (size) | ||||||
|  | 	{  | ||||||
|  | 		case 1: | ||||||
|  | 			((struct st_int8_t*)&rawptr[offset])->v = w; | ||||||
|  | 			return 0; | ||||||
|  |  | ||||||
|  | 		case 2: | ||||||
|  | 			((struct st_int16_t*)&rawptr[offset])->v = w; | ||||||
|  | 			return 0; | ||||||
|  |  | ||||||
|  | 		case 4: | ||||||
|  | 			((struct st_int32_t*)&rawptr[offset])->v = w; | ||||||
|  | 			return 0; | ||||||
|  |  | ||||||
|  | 	#if defined(MOO_HAVE_INT64_T) && (MOO_SIZEOF_OOW_T >= MOO_SIZEOF_INT64_T) | ||||||
|  | 		case 8: | ||||||
|  | 			((struct st_int64_t*)&rawptr[offset])->v = w;  | ||||||
|  | 			return 0; | ||||||
|  | 	#endif | ||||||
|  |  | ||||||
|  | 	#if defined(MOO_HAVE_INT128_T) && (MOO_SIZEOF_OOW_T >= MOO_SIZEOF_INT128_T) | ||||||
|  | 		case 16: | ||||||
|  | 			((struct st_int128_t*)&rawptr[offset])->v = w;  | ||||||
|  | 			return 0; | ||||||
|  | 	#endif | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	moo_seterrnum (moo, MOO_EINVAL); | ||||||
|  | 	return -1; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static MOO_INLINE int _store_raw_uint (moo_t* moo, moo_uint8_t* rawptr, moo_oow_t offset, int size, moo_oop_t voop) | ||||||
|  | { | ||||||
|  | 	int n; | ||||||
|  | 	moo_oow_t w, max; | ||||||
|  |  | ||||||
|  | 	if ((n = moo_inttooow (moo, voop, &w)) <= 0)  | ||||||
|  | 	{ | ||||||
|  | 		if (n <= -1) moo_seterrnum (moo, MOO_ERANGE); /* negative number */ | ||||||
|  | 		return -1; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	max = (~(moo_oow_t)0 >> ((MOO_SIZEOF_OOW_T - size) * 8)); | ||||||
|  | 	if (w > max)  | ||||||
|  | 	{ | ||||||
|  | 		moo_seterrnum (moo, MOO_ERANGE);  | ||||||
|  | 		return -1; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	switch (size) | ||||||
|  | 	{  | ||||||
|  | 		case 1: | ||||||
|  | 			((struct st_uint8_t*)&rawptr[offset])->v = w; | ||||||
|  | 			return 0; | ||||||
|  |  | ||||||
|  | 		case 2: | ||||||
|  | 			((struct st_uint16_t*)&rawptr[offset])->v = w; | ||||||
|  | 			return 0; | ||||||
|  |  | ||||||
|  | 		case 4: | ||||||
|  | 			((struct st_uint32_t*)&rawptr[offset])->v = w; | ||||||
|  | 			return 0; | ||||||
|  |  | ||||||
|  | 	#if defined(MOO_HAVE_UINT64_T) &&  (MOO_SIZEOF_OOW_T >= MOO_SIZEOF_UINT64_T) | ||||||
|  | 		case 8: | ||||||
|  | 			((struct st_uint64_t*)&rawptr[offset])->v = w; | ||||||
|  | 			return 0; | ||||||
|  | 	#endif | ||||||
|  |  | ||||||
|  | 	#if defined(MOO_HAVE_UINT128_T) && (MOO_SIZEOF_OOW_T >= MOO_SIZEOF_UINT128_T) | ||||||
|  | 		case 16: | ||||||
|  | 			((struct st_uint128_t*)&rawptr[offset])->v = w;  | ||||||
|  | 			return 0; | ||||||
|  | 	#endif | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	moo_seterrnum (moo, MOO_EINVAL); | ||||||
|  | 	return -1; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | static moo_pfrc_t _get_system_int (moo_t* moo, moo_ooi_t nargs, int size) | ||||||
|  | { | ||||||
|  | 	moo_int8_t* rawptr; | ||||||
|  | 	moo_oow_t offset; | ||||||
|  | 	moo_oop_t tmp; | ||||||
|  |  | ||||||
|  | 	/* MOO_PF_CHECK_RCV (moo, MOO_STACK_GETRCV(moo, nargs) == (moo_oop_t)moo->_system); */ | ||||||
|  |  | ||||||
|  | 	MOO_ASSERT (moo, nargs == 2); | ||||||
|  | 	tmp = MOO_STACK_GETARG(moo, nargs, 0); | ||||||
|  | 	if (MOO_OOP_IS_SMPTR(tmp)) rawptr = MOO_OOP_TO_SMPTR(tmp); | ||||||
|  | 	else if (moo_inttooow (moo, tmp, (moo_oow_t*)&rawptr) <= 0) goto einval; | ||||||
|  |  | ||||||
|  | 	if (moo_inttooow (moo, MOO_STACK_GETARG(moo, nargs, 1), &offset) <= 0) | ||||||
|  | 	{ | ||||||
|  | 	einval: | ||||||
|  | 		MOO_STACK_SETRETTOERROR (moo, nargs, MOO_EINVAL); | ||||||
|  | 		return MOO_PF_SUCCESS; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	tmp = _fetch_raw_int (moo, rawptr, offset, size); | ||||||
|  | 	if (!tmp)  | ||||||
|  | 	{ | ||||||
|  | 		MOO_STACK_SETRETTOERRNUM (moo, nargs); | ||||||
|  | 		return MOO_PF_SUCCESS; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	MOO_STACK_SETRET (moo, nargs, tmp); | ||||||
|  | 	return MOO_PF_SUCCESS; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static moo_pfrc_t _get_system_uint (moo_t* moo, moo_ooi_t nargs, int size) | ||||||
|  | { | ||||||
|  | 	moo_uint8_t* rawptr; | ||||||
|  | 	moo_oow_t offset; | ||||||
|  | 	moo_oop_t tmp; | ||||||
|  |  | ||||||
|  | 	/* MOO_PF_CHECK_RCV (moo, MOO_STACK_GETRCV(moo, nargs) == (moo_oop_t)moo->_system); */ | ||||||
|  |  | ||||||
|  | 	MOO_ASSERT (moo, nargs == 2); | ||||||
|  | 	tmp = MOO_STACK_GETARG(moo, nargs, 0); | ||||||
|  | 	if (MOO_OOP_IS_SMPTR(tmp)) rawptr = MOO_OOP_TO_SMPTR(tmp); | ||||||
|  | 	else if (moo_inttooow (moo, tmp, (moo_oow_t*)&rawptr) <= 0) goto einval; | ||||||
|  |  | ||||||
|  | 	if (moo_inttooow (moo, MOO_STACK_GETARG(moo, nargs, 1), &offset) <= 0)  | ||||||
|  | 	{ | ||||||
|  | 	einval: | ||||||
|  | 		MOO_STACK_SETRETTOERROR (moo, nargs, MOO_EINVAL); | ||||||
|  | 		return MOO_PF_SUCCESS; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	tmp = _fetch_raw_uint (moo, rawptr, offset, size); | ||||||
|  | 	if (!tmp)  | ||||||
|  | 	{ | ||||||
|  | 		MOO_STACK_SETRETTOERRNUM (moo, nargs); | ||||||
|  | 		return MOO_PF_SUCCESS; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	MOO_STACK_SETRET (moo, nargs, tmp); | ||||||
|  | 	return MOO_PF_SUCCESS; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | moo_pfrc_t moo_pf_system_get_int8 (moo_t* moo, moo_ooi_t nargs) | ||||||
|  | { | ||||||
|  | 	return _get_system_int (moo, nargs, 1); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | moo_pfrc_t moo_pf_system_get_int16 (moo_t* moo, moo_ooi_t nargs) | ||||||
|  | { | ||||||
|  | 	return _get_system_int (moo, nargs, 2); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | moo_pfrc_t moo_pf_system_get_int32 (moo_t* moo, moo_ooi_t nargs) | ||||||
|  | { | ||||||
|  | 	return _get_system_int (moo, nargs, 4); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | moo_pfrc_t moo_pf_system_get_int64 (moo_t* moo, moo_ooi_t nargs) | ||||||
|  | { | ||||||
|  | 	return _get_system_int (moo, nargs, 8); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | moo_pfrc_t moo_pf_system_get_uint8 (moo_t* moo, moo_ooi_t nargs) | ||||||
|  | { | ||||||
|  | 	return _get_system_uint (moo, nargs, 1); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | moo_pfrc_t moo_pf_system_get_uint16 (moo_t* moo, moo_ooi_t nargs) | ||||||
|  | { | ||||||
|  | 	return _get_system_uint (moo, nargs, 2); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | moo_pfrc_t moo_pf_system_get_uint32 (moo_t* moo, moo_ooi_t nargs) | ||||||
|  | { | ||||||
|  | 	return _get_system_uint (moo, nargs, 4); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | moo_pfrc_t moo_pf_system_get_uint64 (moo_t* moo, moo_ooi_t nargs) | ||||||
|  | { | ||||||
|  | 	return _get_system_uint (moo, nargs, 8); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static moo_pfrc_t _put_system_int (moo_t* moo, moo_ooi_t nargs, int size) | ||||||
|  | { | ||||||
|  | 	moo_uint8_t* rawptr; | ||||||
|  | 	moo_oow_t offset; | ||||||
|  | 	moo_oop_t tmp; | ||||||
|  |  | ||||||
|  | 	/* MOO_PF_CHECK_RCV (moo, MOO_STACK_GETRCV(moo, nargs) == (moo_oop_t)moo->_system); */ | ||||||
|  |  | ||||||
|  | 	MOO_ASSERT (moo, nargs == 3); | ||||||
|  | 	tmp = MOO_STACK_GETARG(moo, nargs, 0); | ||||||
|  | 	if (MOO_OOP_IS_SMPTR(tmp)) rawptr = MOO_OOP_TO_SMPTR(tmp); | ||||||
|  | 	else if (moo_inttooow (moo, tmp, (moo_oow_t*)&rawptr) <= 0) goto einval; | ||||||
|  |  | ||||||
|  | 	if (moo_inttooow(moo, MOO_STACK_GETARG(moo, nargs, 1), &offset) <= 0) goto einval; | ||||||
|  |  | ||||||
|  | 	if (_store_raw_int (moo, rawptr, offset, size, MOO_STACK_GETARG(moo, nargs, 2)) <= -1) | ||||||
|  | 	{ | ||||||
|  | 		MOO_STACK_SETRETTOERRNUM (moo, nargs); | ||||||
|  | 		return MOO_PF_SUCCESS; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	MOO_STACK_SETRETTORCV (moo, nargs); | ||||||
|  | 	return MOO_PF_SUCCESS; | ||||||
|  |  | ||||||
|  | einval: | ||||||
|  | 	MOO_STACK_SETRETTOERROR (moo, nargs, MOO_EINVAL); | ||||||
|  | 	return MOO_PF_SUCCESS; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static moo_pfrc_t _put_system_uint (moo_t* moo, moo_ooi_t nargs, int size) | ||||||
|  | { | ||||||
|  | 	moo_uint8_t* rawptr; | ||||||
|  | 	moo_oow_t offset; | ||||||
|  | 	moo_oop_t tmp; | ||||||
|  |  | ||||||
|  | 	/* MOO_PF_CHECK_RCV (moo, MOO_STACK_GETRCV(moo, nargs) == (moo_oop_t)moo->_system); */ | ||||||
|  |  | ||||||
|  | 	MOO_ASSERT (moo, nargs == 3); | ||||||
|  | 	tmp = MOO_STACK_GETARG(moo, nargs, 0); | ||||||
|  | 	if (MOO_OOP_IS_SMPTR(tmp)) rawptr = MOO_OOP_TO_SMPTR(tmp); | ||||||
|  | 	else if (moo_inttooow (moo, tmp, (moo_oow_t*)&rawptr) <= 0) goto einval; | ||||||
|  |  | ||||||
|  | 	if (moo_inttooow(moo, MOO_STACK_GETARG(moo, nargs, 1), &offset) <= 0) goto einval; | ||||||
|  |  | ||||||
|  | 	if (_store_raw_uint (moo, rawptr, offset, size, MOO_STACK_GETARG(moo, nargs, 2)) <= -1) | ||||||
|  | 	{ | ||||||
|  | 		MOO_STACK_SETRETTOERRNUM (moo, nargs); | ||||||
|  | 		return MOO_PF_SUCCESS; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	MOO_STACK_SETRETTORCV (moo, nargs); | ||||||
|  | 	return MOO_PF_SUCCESS; | ||||||
|  |  | ||||||
|  | einval: | ||||||
|  | 	MOO_STACK_SETRETTOERROR (moo, nargs, MOO_EINVAL); | ||||||
|  | 	return MOO_PF_SUCCESS; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | moo_pfrc_t moo_pf_system_put_int8 (moo_t* moo, moo_ooi_t nargs) | ||||||
|  | { | ||||||
|  | 	return _put_system_int (moo, nargs, 1); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | moo_pfrc_t moo_pf_system_put_int16 (moo_t* moo, moo_ooi_t nargs) | ||||||
|  | { | ||||||
|  | 	return _put_system_int (moo, nargs, 2); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | moo_pfrc_t moo_pf_system_put_int32 (moo_t* moo, moo_ooi_t nargs) | ||||||
|  | { | ||||||
|  | 	return _put_system_int (moo, nargs, 4); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | moo_pfrc_t moo_pf_system_put_int64 (moo_t* moo, moo_ooi_t nargs) | ||||||
|  | { | ||||||
|  | 	return _put_system_int (moo, nargs, 8); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | moo_pfrc_t moo_pf_system_put_uint8 (moo_t* moo, moo_ooi_t nargs) | ||||||
|  | { | ||||||
|  | 	return _put_system_uint (moo, nargs, 1); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | moo_pfrc_t moo_pf_system_put_uint16 (moo_t* moo, moo_ooi_t nargs) | ||||||
|  | { | ||||||
|  | 	return _put_system_uint (moo, nargs, 2); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | moo_pfrc_t moo_pf_system_put_uint32 (moo_t* moo, moo_ooi_t nargs) | ||||||
|  | { | ||||||
|  | 	return _put_system_uint (moo, nargs, 4); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | moo_pfrc_t moo_pf_system_put_uint64 (moo_t* moo, moo_ooi_t nargs) | ||||||
|  | { | ||||||
|  | 	return _put_system_uint (moo, nargs, 8); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /* ------------------------------------------------------------------------------------- */ | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | static moo_pfrc_t _get_smptr_int (moo_t* moo, moo_ooi_t nargs, int size) | ||||||
|  | { | ||||||
|  | 	moo_oop_t rcv; | ||||||
|  | 	moo_int8_t* rawptr; | ||||||
|  | 	moo_oow_t offset; | ||||||
|  | 	moo_oop_t result; | ||||||
|  |  | ||||||
|  | 	MOO_ASSERT (moo, nargs == 1); | ||||||
|  |  | ||||||
|  | 	rcv = MOO_STACK_GETRCV(moo, nargs); | ||||||
|  | 	MOO_PF_CHECK_RCV (moo, MOO_OOP_IS_SMPTR(rcv)); | ||||||
|  |  | ||||||
|  | 	if (moo_inttooow (moo, MOO_STACK_GETARG(moo, nargs, 0), &offset) <= 0) | ||||||
|  | 	{ | ||||||
|  | 		MOO_STACK_SETRETTOERROR(moo, nargs, MOO_EINVAL); | ||||||
|  | 		return MOO_PF_SUCCESS; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	rawptr = MOO_OOP_TO_SMPTR(rcv); | ||||||
|  |  | ||||||
|  | 	result = _fetch_raw_int (moo, rawptr, offset, size); | ||||||
|  | 	if (!result)  | ||||||
|  | 	{ | ||||||
|  | 		MOO_STACK_SETRETTOERRNUM (moo, nargs); | ||||||
|  | 		return MOO_PF_SUCCESS; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	MOO_STACK_SETRET (moo, nargs, result); | ||||||
|  | 	return MOO_PF_SUCCESS; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static moo_pfrc_t _get_smptr_uint (moo_t* moo, moo_ooi_t nargs, int size) | ||||||
|  | { | ||||||
|  | 	moo_oop_t rcv; | ||||||
|  | 	moo_uint8_t* rawptr; | ||||||
|  | 	moo_oow_t offset; | ||||||
|  | 	moo_oop_t result; | ||||||
|  |  | ||||||
|  | 	MOO_ASSERT (moo, nargs == 1); | ||||||
|  |  | ||||||
|  | 	rcv = MOO_STACK_GETRCV(moo, nargs); | ||||||
|  | 	MOO_PF_CHECK_RCV (moo, MOO_OOP_IS_SMPTR(rcv)); | ||||||
|  |  | ||||||
|  | 	if (moo_inttooow (moo, MOO_STACK_GETARG(moo, nargs, 0), &offset) <= 0) | ||||||
|  | 	{ | ||||||
|  | 		MOO_STACK_SETRETTOERROR(moo, nargs, MOO_EINVAL); | ||||||
|  | 		return MOO_PF_SUCCESS; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	rawptr = MOO_OOP_TO_SMPTR(rcv); | ||||||
|  |  | ||||||
|  | 	result = _fetch_raw_uint (moo, rawptr, offset, size); | ||||||
|  | 	if (!result)  | ||||||
|  | 	{ | ||||||
|  | 		MOO_STACK_SETRETTOERRNUM(moo, nargs); | ||||||
|  | 		return MOO_PF_SUCCESS; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	MOO_STACK_SETRET (moo, nargs, result); | ||||||
|  | 	return MOO_PF_SUCCESS; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  moo_pfrc_t moo_pf_smptr_get_int8 (moo_t* moo, moo_ooi_t nargs) | ||||||
|  | { | ||||||
|  | 	return _get_smptr_int (moo, nargs, 1); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  moo_pfrc_t moo_pf_smptr_get_int16 (moo_t* moo, moo_ooi_t nargs) | ||||||
|  | { | ||||||
|  | 	return _get_smptr_int (moo, nargs, 2); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  moo_pfrc_t moo_pf_smptr_get_int32 (moo_t* moo, moo_ooi_t nargs) | ||||||
|  | { | ||||||
|  | 	return _get_smptr_int (moo, nargs, 4); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  moo_pfrc_t moo_pf_smptr_get_int64 (moo_t* moo, moo_ooi_t nargs) | ||||||
|  | { | ||||||
|  | 	return _get_smptr_int (moo, nargs, 8); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  moo_pfrc_t moo_pf_smptr_get_uint8 (moo_t* moo, moo_ooi_t nargs) | ||||||
|  | { | ||||||
|  | 	return _get_smptr_uint (moo, nargs, 1); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  moo_pfrc_t moo_pf_smptr_get_uint16 (moo_t* moo, moo_ooi_t nargs) | ||||||
|  | { | ||||||
|  | 	return _get_smptr_uint (moo, nargs, 2); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  moo_pfrc_t moo_pf_smptr_get_uint32 (moo_t* moo, moo_ooi_t nargs) | ||||||
|  | { | ||||||
|  | 	return _get_smptr_uint (moo, nargs, 4); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  moo_pfrc_t moo_pf_smptr_get_uint64 (moo_t* moo, moo_ooi_t nargs) | ||||||
|  | { | ||||||
|  | 	return _get_smptr_uint (moo, nargs, 8); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static moo_pfrc_t _put_smptr_int (moo_t* moo, moo_ooi_t nargs, int size) | ||||||
|  | { | ||||||
|  | 	moo_uint8_t* rawptr; | ||||||
|  | 	moo_oow_t offset; | ||||||
|  | 	moo_oop_t tmp; | ||||||
|  |  | ||||||
|  | 	MOO_ASSERT (moo, nargs == 2); | ||||||
|  |  | ||||||
|  | 	tmp = MOO_STACK_GETRCV(moo, nargs); | ||||||
|  | 	MOO_PF_CHECK_RCV (moo, MOO_OOP_IS_SMPTR(tmp)); | ||||||
|  |  | ||||||
|  | 	rawptr = MOO_OOP_TO_SMPTR(tmp); | ||||||
|  |  | ||||||
|  | 	if (moo_inttooow(moo, MOO_STACK_GETARG(moo, nargs, 0), &offset) <= 0) | ||||||
|  | 	{ | ||||||
|  | 		MOO_STACK_SETRETTOERROR (moo, nargs, MOO_EINVAL); | ||||||
|  | 		return MOO_PF_SUCCESS; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if (_store_raw_int (moo, rawptr, offset, size, MOO_STACK_GETARG(moo, nargs, 1)) <= -1) | ||||||
|  | 	{ | ||||||
|  | 		MOO_STACK_SETRETTOERRNUM (moo, nargs); | ||||||
|  | 		return MOO_PF_SUCCESS; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	MOO_STACK_SETRETTORCV (moo, nargs); | ||||||
|  | 	return MOO_PF_SUCCESS; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static moo_pfrc_t _put_smptr_uint (moo_t* moo, moo_ooi_t nargs, int size) | ||||||
|  | { | ||||||
|  | 	moo_uint8_t* rawptr; | ||||||
|  | 	moo_oow_t offset; | ||||||
|  | 	moo_oop_t tmp; | ||||||
|  |  | ||||||
|  | 	MOO_ASSERT (moo, nargs == 2); | ||||||
|  |  | ||||||
|  | 	tmp = MOO_STACK_GETRCV(moo, nargs); | ||||||
|  | 	MOO_PF_CHECK_RCV (moo, MOO_OOP_IS_SMPTR(tmp)); | ||||||
|  |  | ||||||
|  | 	rawptr = MOO_OOP_TO_SMPTR(tmp); | ||||||
|  |  | ||||||
|  | 	if (moo_inttooow(moo, MOO_STACK_GETARG(moo, nargs, 0), &offset) <= 0) | ||||||
|  | 	{ | ||||||
|  | 		MOO_STACK_SETRETTOERROR (moo, nargs, MOO_EINVAL); | ||||||
|  | 		return MOO_PF_SUCCESS; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if (_store_raw_uint (moo, rawptr, offset, size, MOO_STACK_GETARG(moo, nargs, 1)) <= -1) | ||||||
|  | 	{ | ||||||
|  | 		MOO_STACK_SETRETTOERRNUM (moo, nargs); | ||||||
|  | 		return MOO_PF_SUCCESS; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	MOO_STACK_SETRETTORCV (moo, nargs); | ||||||
|  | 	return MOO_PF_SUCCESS; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | moo_pfrc_t moo_pf_smptr_put_int8 (moo_t* moo, moo_ooi_t nargs) | ||||||
|  | { | ||||||
|  | 	return _put_smptr_int (moo, nargs, 1); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | moo_pfrc_t moo_pf_smptr_put_int16 (moo_t* moo, moo_ooi_t nargs) | ||||||
|  | { | ||||||
|  | 	return _put_smptr_int (moo, nargs, 2); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | moo_pfrc_t moo_pf_smptr_put_int32 (moo_t* moo, moo_ooi_t nargs) | ||||||
|  | { | ||||||
|  | 	return _put_smptr_int (moo, nargs, 4); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | moo_pfrc_t moo_pf_smptr_put_int64 (moo_t* moo, moo_ooi_t nargs) | ||||||
|  | { | ||||||
|  | 	return _put_smptr_int (moo, nargs, 8); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | moo_pfrc_t moo_pf_smptr_put_uint8 (moo_t* moo, moo_ooi_t nargs) | ||||||
|  | { | ||||||
|  | 	return _put_smptr_uint (moo, nargs, 1); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | moo_pfrc_t moo_pf_smptr_put_uint16 (moo_t* moo, moo_ooi_t nargs) | ||||||
|  | { | ||||||
|  | 	return _put_smptr_uint (moo, nargs, 2); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | moo_pfrc_t moo_pf_smptr_put_uint32 (moo_t* moo, moo_ooi_t nargs) | ||||||
|  | { | ||||||
|  | 	return _put_smptr_uint (moo, nargs, 4); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | moo_pfrc_t moo_pf_smptr_put_uint64 (moo_t* moo, moo_ooi_t nargs) | ||||||
|  | { | ||||||
|  | 	return _put_smptr_uint (moo, nargs, 8); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /* ------------------------------------------------------------------------------------- */ | ||||||
|  |  | ||||||
		Reference in New Issue
	
	Block a user