[pypy-svn] r13402 - in pypy/dist/pypy: rpython translator/c translator/genc/test

arigo at codespeak.net arigo at codespeak.net
Tue Jun 14 20:24:39 CEST 2005


Author: arigo
Date: Tue Jun 14 20:24:34 2005
New Revision: 13402

Added:
   pypy/dist/pypy/translator/c/float_include.h   (contents, props changed)
Modified:
   pypy/dist/pypy/rpython/rfloat.py
   pypy/dist/pypy/translator/c/g_include.h
   pypy/dist/pypy/translator/c/int_include.h
   pypy/dist/pypy/translator/c/primitive.py
   pypy/dist/pypy/translator/genc/test/test_annotated.py
Log:
Started the support for floats in genc.


Modified: pypy/dist/pypy/rpython/rfloat.py
==============================================================================
--- pypy/dist/pypy/rpython/rfloat.py	(original)
+++ pypy/dist/pypy/rpython/rfloat.py	Tue Jun 14 20:24:34 2005
@@ -3,6 +3,7 @@
 from pypy.rpython.lltype import Signed, Unsigned, Bool, Float, Void
 from pypy.rpython.rmodel import Repr, TyperError, FloatRepr
 from pypy.rpython.rmodel import IntegerRepr, BoolRepr
+from pypy.rpython.robject import PyObjRepr, pyobj_repr
 
 
 debug = False
@@ -131,3 +132,17 @@
             if debug: print 'explicit cast_bool_to_float'
             return llops.genop('cast_bool_to_float', [v], resulttype=Float)
         return NotImplemented
+
+class __extend__(pairtype(PyObjRepr, FloatRepr)):
+    def convert_from_to((r_from, r_to), v, llops):
+        if r_to.lowleveltype == Float:
+            return llops.gencapicall('PyFloat_AsDouble', [v],
+                                     resulttype=Float)
+        return NotImplemented
+
+class __extend__(pairtype(FloatRepr, PyObjRepr)):
+    def convert_from_to((r_from, r_to), v, llops):
+        if r_from.lowleveltype == Float:
+            return llops.gencapicall('PyFloat_FromDouble', [v],
+                                     resulttype=pyobj_repr)
+        return NotImplemented

Added: pypy/dist/pypy/translator/c/float_include.h
==============================================================================
--- (empty file)
+++ pypy/dist/pypy/translator/c/float_include.h	Tue Jun 14 20:24:34 2005
@@ -0,0 +1,39 @@
+
+/************************************************************/
+ /***  C header subsection: operations between floats      ***/
+
+
+/* XXX INCOMPLETE */
+
+
+/*** unary operations ***/
+
+#define OP_FLOAT_IS_TRUE(x,r,err)   OP_FLOAT_NE(x,0.0,r,err)
+
+
+/***  binary operations ***/
+
+#define OP_FLOAT_EQ(x,y,r,err)	  r = (x == y);
+#define OP_FLOAT_NE(x,y,r,err)	  r = (x != y);
+#define OP_FLOAT_LE(x,y,r,err)	  r = (x <= y);
+#define OP_FLOAT_GT(x,y,r,err)	  r = (x >  y);
+#define OP_FLOAT_LT(x,y,r,err)	  r = (x <  y);
+#define OP_FLOAT_GE(x,y,r,err)	  r = (x >= y);
+
+#define OP_FLOAT_CMP(x,y,r,err) \
+	r = ((x > y) - (x < y))
+
+/* addition, subtraction */
+
+#define OP_FLOAT_ADD(x,y,r,err)     r = x + y;
+#define OP_FLOAT_SUB(x,y,r,err)     r = x - y;
+#define OP_FLOAT_MUL(x,y,r,err)     r = x * y;
+
+
+/*** conversions ***/
+
+#define OP_CAST_FLOAT_TO_INT(x,r,err)    r = (long)(x);
+#define OP_CAST_FLOAT_TO_UINT(x,r,err)   r = (unsigned long)(x);
+#define OP_CAST_INT_TO_FLOAT(x,r,err)    r = (double)(x);
+#define OP_CAST_UINT_TO_FLOAT(x,r,err)   r = (double)(x);
+#define OP_CAST_BOOL_TO_FLOAT(x,r,err)   r = (double)(x);

Modified: pypy/dist/pypy/translator/c/g_include.h
==============================================================================
--- pypy/dist/pypy/translator/c/g_include.h	(original)
+++ pypy/dist/pypy/translator/c/g_include.h	Tue Jun 14 20:24:34 2005
@@ -16,5 +16,6 @@
 #include "g_module.h"
 
 #include "int_include.h"
+#include "float_include.h"
 #include "ll_include.h"
 #include "pyobj_include.h"

Modified: pypy/dist/pypy/translator/c/int_include.h
==============================================================================
--- pypy/dist/pypy/translator/c/int_include.h	(original)
+++ pypy/dist/pypy/translator/c/int_include.h	Tue Jun 14 20:24:34 2005
@@ -135,6 +135,15 @@
 	if ((long)(y)) { OP_INT_MOD_OVF(x,y,r,err) } \
 	else FAIL_ZER(err, "integer modulo")
 
+/*** conversions ***/
+
+#define OP_CAST_BOOL_TO_INT(x,r,err)    r = (long)(x);
+#define OP_CAST_BOOL_TO_UINT(x,r,err)   r = (unsigned long)(x);
+#define OP_CAST_UINT_TO_INT(x,r,err)    r = (long)(x);
+#define OP_CAST_INT_TO_UINT(x,r,err)    r = (unsigned long)(x);
+#define OP_CAST_CHAR_TO_INT(x,r,err)    r = (long)(x);
+#define OP_CAST_INT_TO_CHAR(x,r,err)    r = (char)(x);
+
 /* _________________ certain implementations __________________ */
 
 #ifndef HAVE_LONG_LONG

Modified: pypy/dist/pypy/translator/c/primitive.py
==============================================================================
--- pypy/dist/pypy/translator/c/primitive.py	(original)
+++ pypy/dist/pypy/translator/c/primitive.py	Tue Jun 14 20:24:34 2005
@@ -11,6 +11,9 @@
     assert value >= 0
     return '%d' % value
 
+def name_float(value):
+    return repr(value)
+
 def name_char(value):
     value = value
     assert type(value) is str and len(value) == 1
@@ -28,6 +31,7 @@
 PrimitiveName = {
     Signed:   name_signed,
     Unsigned: name_unsigned,
+    Float:    name_float,
     Char:     name_char,
     Bool:     name_bool,
     Void:     name_void,
@@ -36,6 +40,7 @@
 PrimitiveType = {
     Signed:   'long @',
     Unsigned: 'unsigned long @',
+    Float:    'double @',
     Char:     'char @',
     Bool:     'char @',
     Void:     'void @',
@@ -44,6 +49,7 @@
 PrimitiveErrorValue = {
     Signed:   '-1',
     Unsigned: '((unsigned) -1)',
+    Float:    '-1.0',
     Char:     '((char) -1)',
     Bool:     '((char) -1)',
     Void:     '/* error */',

Modified: pypy/dist/pypy/translator/genc/test/test_annotated.py
==============================================================================
--- pypy/dist/pypy/translator/genc/test/test_annotated.py	(original)
+++ pypy/dist/pypy/translator/genc/test/test_annotated.py	Tue Jun 14 20:24:34 2005
@@ -110,7 +110,7 @@
 
     def test_type_conversion(self):
         # obfuscated test case specially for typer.insert_link_conversions()
-        def type_conversion(n):
+        def type_conversion(n=int):
             if n > 3:
                 while n > 0:
                     n = n-1



More information about the Pypy-commit mailing list