[pure-lang-svn] SF.net SVN: pure-lang:[842] pure/trunk
Status: Beta
Brought to you by:
agraef
From: <ag...@us...> - 2008-09-23 21:56:57
|
Revision: 842 http://pure-lang.svn.sourceforge.net/pure-lang/?rev=842&view=rev Author: agraef Date: 2008-09-23 21:56:51 +0000 (Tue, 23 Sep 2008) Log Message: ----------- Add some missing memory operations. Modified Paths: -------------- pure/trunk/lib/primitives.pure pure/trunk/runtime.cc pure/trunk/runtime.h Modified: pure/trunk/lib/primitives.pure =================================================================== --- pure/trunk/lib/primitives.pure 2008-09-23 18:56:29 UTC (rev 841) +++ pure/trunk/lib/primitives.pure 2008-09-23 21:56:51 UTC (rev 842) @@ -396,30 +396,40 @@ /* Direct memory accesses. Use with care ... or else! */ -private pointer_get_byte pointer_get_int pointer_get_double +private pointer_get_byte pointer_get_short pointer_get_int + pointer_get_float pointer_get_double pointer_get_string pointer_get_pointer; extern int pointer_get_byte(void *ptr); +extern int pointer_get_short(void *ptr); extern int pointer_get_int(void *ptr); +extern double pointer_get_float(void *ptr); extern double pointer_get_double(void *ptr); extern char *pointer_get_string(void *ptr); extern void *pointer_get_pointer(void *ptr); get_byte x::pointer = pointer_get_byte x; +get_short x::pointer = pointer_get_short x; get_int x::pointer = pointer_get_int x; +get_float x::pointer = pointer_get_float x; get_double x::pointer = pointer_get_double x; get_string x::pointer = pointer_get_string x; get_pointer x::pointer = pointer_get_pointer x; -private pointer_put_byte pointer_put_int pointer_put_double +private pointer_put_byte pointer_put_short pointer_put_int + pointer_put_float pointer_put_double pointer_put_string pointer_put_pointer; extern void pointer_put_byte(void *ptr, int x); // IMPURE! +extern void pointer_put_short(void *ptr, int x); // IMPURE! extern void pointer_put_int(void *ptr, int x); // IMPURE! +extern void pointer_put_float(void *ptr, double x); // IMPURE! extern void pointer_put_double(void *ptr, double x); // IMPURE! extern void pointer_put_string(void *ptr, char *x); // IMPURE! extern void pointer_put_pointer(void *ptr, void *x); // IMPURE! put_byte x::pointer y::int = pointer_put_byte x y; +put_short x::pointer y::int = pointer_put_short x y; put_int x::pointer y::int = pointer_put_int x y; +put_float x::pointer y::double = pointer_put_float x y; put_double x::pointer y::double = pointer_put_double x y; put_string x::pointer y::string = pointer_put_string x y; put_pointer x::pointer y::string = pointer_put_pointer x y; Modified: pure/trunk/runtime.cc =================================================================== --- pure/trunk/runtime.cc 2008-09-23 18:56:29 UTC (rev 841) +++ pure/trunk/runtime.cc 2008-09-23 21:56:51 UTC (rev 842) @@ -5301,11 +5301,18 @@ extern "C" int32_t pointer_get_byte(void *ptr) { - uint8_t *p = (uint8_t*)ptr; + int8_t *p = (int8_t*)ptr; return *p; } extern "C" +int32_t pointer_get_short(void *ptr) +{ + int16_t *p = (int16_t*)ptr; + return *p; +} + +extern "C" int32_t pointer_get_int(void *ptr) { int32_t *p = (int32_t*)ptr; @@ -5313,6 +5320,13 @@ } extern "C" +double pointer_get_float(void *ptr) +{ + float *p = (float*)ptr; + return *p; +} + +extern "C" double pointer_get_double(void *ptr) { double *p = (double*)ptr; @@ -5343,11 +5357,18 @@ extern "C" void pointer_put_byte(void *ptr, int32_t x) { - uint8_t *p = (uint8_t*)ptr; + int8_t *p = (int8_t*)ptr; *p = x; } extern "C" +void pointer_put_short(void *ptr, int32_t x) +{ + int16_t *p = (int16_t*)ptr; + *p = x; +} + +extern "C" void pointer_put_int(void *ptr, int32_t x) { int32_t *p = (int32_t*)ptr; @@ -5355,6 +5376,13 @@ } extern "C" +void pointer_put_float(void *ptr, double x) +{ + float *p = (float*)ptr; + *p = x; +} + +extern "C" void pointer_put_double(void *ptr, double x) { double *p = (double*)ptr; Modified: pure/trunk/runtime.h =================================================================== --- pure/trunk/runtime.h 2008-09-23 18:56:29 UTC (rev 841) +++ pure/trunk/runtime.h 2008-09-23 21:56:51 UTC (rev 842) @@ -767,14 +767,18 @@ you'll have to use the memory management routines above to do that. */ int32_t pointer_get_byte(void *ptr); +int32_t pointer_get_short(void *ptr); int32_t pointer_get_int(void *ptr); +double pointer_get_float(void *ptr); double pointer_get_double(void *ptr); char *pointer_get_string(void *ptr); void *pointer_get_pointer(void *ptr); pure_expr *pointer_get_expr(void *ptr); void pointer_put_byte(void *ptr, int32_t x); +void pointer_put_short(void *ptr, int32_t x); void pointer_put_int(void *ptr, int32_t x); +void pointer_put_float(void *ptr, double x); void pointer_put_double(void *ptr, double x); void pointer_put_string(void *ptr, const char *x); void pointer_put_pointer(void *ptr, void *x); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |