[pypy-svn] r22545 - in pypy/dist/pypy: annotation rpython rpython/lltypesystem translator/c

cfbolz at codespeak.net cfbolz at codespeak.net
Mon Jan 23 18:50:00 CET 2006


Author: cfbolz
Date: Mon Jan 23 18:49:56 2006
New Revision: 22545

Modified:
   pypy/dist/pypy/annotation/model.py
   pypy/dist/pypy/rpython/lltypesystem/llmemory.py
   pypy/dist/pypy/rpython/raddress.py
   pypy/dist/pypy/rpython/rbuiltin.py
   pypy/dist/pypy/translator/c/database.py
   pypy/dist/pypy/translator/c/primitive.py
Log:
(arigo, cfbolz):

maybe intermediate checkin

removed the Offset Primitive and replaced it by Signed everywhere.



Modified: pypy/dist/pypy/annotation/model.py
==============================================================================
--- pypy/dist/pypy/annotation/model.py	(original)
+++ pypy/dist/pypy/annotation/model.py	Mon Jan 23 18:49:56 2006
@@ -514,6 +514,7 @@
 annotation_to_ll_map = [
     (s_None, lltype.Void),   # also matches SomeImpossibleValue()
     (SomeBool(), lltype.Bool),
+    (SomeOffset(), lltype.Signed),
     (SomeInteger(), lltype.Signed),
     (SomeInteger(size=2), lltype.SignedLongLong),    
     (SomeInteger(nonneg=True, unsigned=True), lltype.Unsigned),    
@@ -522,7 +523,6 @@
     (SomeChar(), lltype.Char),
     (SomeUnicodeCodePoint(), lltype.UniChar),
     (SomeAddress(), llmemory.Address),
-    (SomeOffset(), llmemory.Offset),
 ]
 
 def annotation_to_lltype(s_val, info=None):

Modified: pypy/dist/pypy/rpython/lltypesystem/llmemory.py
==============================================================================
--- pypy/dist/pypy/rpython/lltypesystem/llmemory.py	(original)
+++ pypy/dist/pypy/rpython/lltypesystem/llmemory.py	Mon Jan 23 18:49:56 2006
@@ -18,7 +18,7 @@
         return model.SomeOffset()
 
     def lltype(self):
-        return Offset
+        return lltype.Signed
 
     def __repr__(self):
         return "<OffsetOf %r %r>" % (self.TYPE, self.fldnames)
@@ -32,8 +32,6 @@
         assert t == other.TYPE
         return OffsetOf(self.TYPE, *(self.fldnames + other.fldnames))
 
-Offset = lltype.Primitive("Offset", OffsetOf(lltype.Void))
-
 def sizeof(TYPE, n=None):
     pass
 

Modified: pypy/dist/pypy/rpython/raddress.py
==============================================================================
--- pypy/dist/pypy/rpython/raddress.py	(original)
+++ pypy/dist/pypy/rpython/raddress.py	Mon Jan 23 18:49:56 2006
@@ -2,7 +2,7 @@
 from pypy.annotation.pairtype import pairtype
 from pypy.annotation import model as annmodel
 from pypy.rpython.memory.lladdress import NULL, address
-from pypy.rpython.lltypesystem.llmemory import Address, Offset
+from pypy.rpython.lltypesystem.llmemory import Address
 from pypy.rpython.rmodel import Repr, IntegerRepr
 from pypy.rpython.lltypesystem import lltype
 
@@ -120,16 +120,16 @@
         return self.__class__,
 
 class OffsetRepr(Repr):
-    lowleveltype = Offset
+    lowleveltype = lltype.Signed
 
 offset_repr = OffsetRepr()
 
 class __extend__(pairtype(OffsetRepr, OffsetRepr)):
     def rtype_add((r_offset1, r_offset2), hop):
-        v_offset1, v_offset2 = hop.inputargs(Offset, Offset)
-        return hop.genop('offset_add', [v_offset1, v_offset2], resulttype=Offset)
+        v_offset1, v_offset2 = hop.inputargs(offset_repr, offset_repr)
+        return hop.genop('offset_add', [v_offset1, v_offset2], resulttype=lltype.Signed)
 
 class __extend__(pairtype(AddressRepr, OffsetRepr)):
     def rtype_add((r_offset1, r_offset2), hop):
-        v_offset1, v_offset2 = hop.inputargs(Address, Offset)
+        v_offset1, v_offset2 = hop.inputargs(Address, offset_repr)
         return hop.genop('adr_offset_add', [v_offset1, v_offset2], resulttype=Address)

Modified: pypy/dist/pypy/rpython/rbuiltin.py
==============================================================================
--- pypy/dist/pypy/rpython/rbuiltin.py	(original)
+++ pypy/dist/pypy/rpython/rbuiltin.py	Mon Jan 23 18:49:56 2006
@@ -381,7 +381,7 @@
 
 def rtype_offsetof(hop):
     TYPE, field = hop.inputargs(lltype.Void, lltype.Void)
-    return hop.inputconst(llmemory.Offset,
+    return hop.inputconst(lltype.Signed,
                           llmemory.offsetof(TYPE.value, field.value))
 
 BUILTIN_TYPER[llmemory.offsetof] = rtype_offsetof

Modified: pypy/dist/pypy/translator/c/database.py
==============================================================================
--- pypy/dist/pypy/translator/c/database.py	(original)
+++ pypy/dist/pypy/translator/c/database.py	Mon Jan 23 18:49:56 2006
@@ -2,7 +2,7 @@
      Primitive, Ptr, typeOf, RuntimeTypeInfo, \
      Struct, Array, FuncType, PyObject, Void, \
      ContainerType, OpaqueType
-from pypy.rpython.lltypesystem.llmemory import Offset, Address
+from pypy.rpython.lltypesystem.llmemory import Address
 from pypy.rpython.memory.lladdress import NULL
 from pypy.translator.c.primitive import PrimitiveName, PrimitiveType
 from pypy.translator.c.primitive import PrimitiveErrorValue
@@ -121,22 +121,8 @@
                 raise Exception("don't know about %r" % (T,))
         else:
             T = typeOf(obj)
-            if T is Offset:
-                assert len(obj.fldnames) <= 1
-                if len(obj.fldnames) == 0:
-                    return '0 /*offsetof*/'
-                else:
-                    structnode = self.gettypedefnode(obj.TYPE.TO)
-                    return 'offsetof(struct %s, %s)'%(
-                        structnode.name,
-                        structnode.c_struct_field_name(obj.fldnames[0]))
-            elif T is Address and obj is not NULL:
-                if obj.ob is None:
-                    return 'NULL'
-                else:
-                    return self.get(obj.ob)
-            elif isinstance(T, Primitive):
-                return PrimitiveName[T](obj)
+            if isinstance(T, Primitive):
+                return PrimitiveName[T](obj, self)
             elif isinstance(T, Ptr):
                 if obj:   # test if the ptr is non-NULL
                     node = self.getcontainernode(obj._obj)

Modified: pypy/dist/pypy/translator/c/primitive.py
==============================================================================
--- pypy/dist/pypy/translator/c/primitive.py	(original)
+++ pypy/dist/pypy/translator/c/primitive.py	Mon Jan 23 18:49:56 2006
@@ -1,33 +1,43 @@
 import sys
 from pypy.rpython.lltypesystem.lltype import *
-from pypy.rpython.lltypesystem.llmemory import Address, Offset
+from pypy.rpython.lltypesystem.llmemory import Address, OffsetOf, fakeaddress
 from pypy.rpython.memory.lladdress import NULL
 
 # ____________________________________________________________
 #
 # Primitives
 
-def name_signed(value):
+def name_signed(value, db):
+    if isinstance(value, Symbolic):
+        assert isinstance(value, OffsetOf)
+        assert len(value.fldnames) <= 1
+        if len(value.fldnames) == 0:
+            return '0 /*offsetof*/'
+        else:
+            structnode = db.gettypedefnode(value.TYPE.TO)
+            return 'offsetof(struct %s, %s)'%(
+                structnode.name,
+                structnode.c_struct_field_name(value.fldnames[0]))
     if value == -sys.maxint-1:   # blame C
         return '(-%dL-1L)' % sys.maxint
     else:
         return '%dL' % value
 
-def name_unsigned(value):
+def name_unsigned(value, db):
     assert value >= 0
     return '%dUL' % value
 
-def name_unsignedlonglong(value):
+def name_unsignedlonglong(value, db):
     assert value >= 0
     return '%dULL' % value
 
-def name_signedlonglong(value):
+def name_signedlonglong(value, db):
     return '%dLL' % value
 
 def isinf(x):
     return x != 0.0 and x / 2 == x
 
-def name_float(value):
+def name_float(value, db):
     if isinf(value):
         if value > 0:
             return '(Py_HUGE_VAL)'
@@ -36,27 +46,31 @@
     else:
         return repr(value)
 
-def name_char(value):
+def name_char(value, db):
     assert type(value) is str and len(value) == 1
     if ' ' <= value < '\x7f':
         return "'%s'" % (value.replace("\\", r"\\").replace("'", r"\'"),)
     else:
         return '%d' % ord(value)
 
-def name_bool(value):
+def name_bool(value, db):
     return '%d' % value
 
-def name_void(value):
+def name_void(value, db):
     return '/* nothing */'
 
-def name_unichar(value):
+def name_unichar(value, db):
     assert type(value) is unicode and len(value) == 1
     return '%d' % ord(value)
 
-def name_address(value):
-    # XXX this will need to change!
-    assert value == NULL
-    return 'NULL' 
+def name_address(value, db):
+    if value is NULL:
+        return 'NULL'
+    assert isinstance(value, fakeaddress)
+    if value.ob is None:
+        return 'NULL'
+    else:
+        return db.get(value.ob)
 
 PrimitiveName = {
     Signed:   name_signed,
@@ -82,7 +96,6 @@
     Bool:     'char @',
     Void:     'void @',
     Address:  'void* @',
-    Offset:   'long @',
     }
 
 PrimitiveErrorValue = {
@@ -96,5 +109,4 @@
     Bool:     '((char) -1)',
     Void:     '/* error */',
     Address:  'NULL',
-    Offset:   '0',
     }



More information about the Pypy-commit mailing list