[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.
|