[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