[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