[pypy-svn] r22518 - in pypy/dist/pypy: annotation rpython rpython/lltypesystem rpython/memory rpython/memory/test translator/c

mwh at codespeak.net mwh at codespeak.net
Mon Jan 23 14:42:38 CET 2006


Author: mwh
Date: Mon Jan 23 14:42:29 2006
New Revision: 22518

Added:
   pypy/dist/pypy/rpython/lltypesystem/llmemory.py   (contents, props changed)
Modified:
   pypy/dist/pypy/annotation/binaryop.py
   pypy/dist/pypy/annotation/bookkeeper.py
   pypy/dist/pypy/annotation/builtin.py
   pypy/dist/pypy/annotation/model.py
   pypy/dist/pypy/rpython/llinterp.py
   pypy/dist/pypy/rpython/memory/gc.py
   pypy/dist/pypy/rpython/memory/lladdress.py
   pypy/dist/pypy/rpython/memory/lltypelayout.py
   pypy/dist/pypy/rpython/memory/lltypesimulation.py
   pypy/dist/pypy/rpython/memory/test/test_address.py
   pypy/dist/pypy/rpython/memory/test/test_lltypesimulation.py
   pypy/dist/pypy/rpython/raddress.py
   pypy/dist/pypy/rpython/rbuiltin.py
   pypy/dist/pypy/translator/c/primitive.py
Log:
(arre, mwh)
Move Address and OffsetOf and a few other bits from rpython.memory.lladdress into the new
file rpython.lltypesystem.llmemory.  This probably breaks l3interp as it currently is in
the repository, but we're working there anyway.


Modified: pypy/dist/pypy/annotation/binaryop.py
==============================================================================
--- pypy/dist/pypy/annotation/binaryop.py	(original)
+++ pypy/dist/pypy/annotation/binaryop.py	Mon Jan 23 14:42:29 2006
@@ -736,3 +736,7 @@
 class __extend__(pairtype(SomeOffset, SomeOffset)):
     def add((s_off1, s_off2)):
         return SomeOffset()
+
+class __extend__(pairtype(SomeAddress, SomeOffset)):
+    def add((s_addr, s_off)):
+        return SomeAddress()

Modified: pypy/dist/pypy/annotation/bookkeeper.py
==============================================================================
--- pypy/dist/pypy/annotation/bookkeeper.py	(original)
+++ pypy/dist/pypy/annotation/bookkeeper.py	Mon Jan 23 14:42:29 2006
@@ -20,7 +20,7 @@
 from pypy.rpython.rarithmetic import r_int, r_uint, r_ulonglong, r_longlong
 from pypy.rpython.objectmodel import r_dict, Symbolic
 from pypy.tool.algo.unionfind import UnionFind
-from pypy.rpython.lltypesystem import lltype
+from pypy.rpython.lltypesystem import lltype, llmemory
 from pypy.rpython.ootypesystem import ootype
 from pypy.rpython.memory import lladdress
 
@@ -361,6 +361,8 @@
         elif isinstance(x, lladdress.address):
             assert x is lladdress.NULL
             result= SomeAddress(is_null=True)
+        elif isinstance(x, llmemory.fakeaddress):
+            result = SomeAddress()
         elif isinstance(x, ootype._static_meth):
             result = SomeOOStaticMeth(ootype.typeOf(x))
         elif isinstance(x, ootype._class):

Modified: pypy/dist/pypy/annotation/builtin.py
==============================================================================
--- pypy/dist/pypy/annotation/builtin.py	(original)
+++ pypy/dist/pypy/annotation/builtin.py	Mon Jan 23 14:42:29 2006
@@ -504,10 +504,12 @@
 #_________________________________
 # offsetof/sizeof
 
+from pypy.rpython.lltypesystem import llmemory 
+
 def offsetof(TYPE, fldname):
     return SomeOffset()
 
-BUILTIN_ANALYZERS[lladdress.offsetof] = offsetof
+BUILTIN_ANALYZERS[llmemory.offsetof] = offsetof
 
 
 #_________________________________

Modified: pypy/dist/pypy/annotation/model.py
==============================================================================
--- pypy/dist/pypy/annotation/model.py	(original)
+++ pypy/dist/pypy/annotation/model.py	Mon Jan 23 14:42:29 2006
@@ -442,7 +442,7 @@
 # ____________________________________________________________
 # memory addresses
 
-from pypy.rpython.memory import lladdress
+from pypy.rpython.lltypesystem import llmemory
 
 class SomeAddress(SomeObject):
     immutable = True
@@ -521,8 +521,8 @@
     (SomeFloat(), lltype.Float),
     (SomeChar(), lltype.Char),
     (SomeUnicodeCodePoint(), lltype.UniChar),
-    (SomeAddress(), lladdress.Address),
-    (SomeOffset(), lladdress.Offset),
+    (SomeAddress(), llmemory.Address),
+    (SomeOffset(), llmemory.Offset),
 ]
 
 def annotation_to_lltype(s_val, info=None):

Modified: pypy/dist/pypy/rpython/llinterp.py
==============================================================================
--- pypy/dist/pypy/rpython/llinterp.py	(original)
+++ pypy/dist/pypy/rpython/llinterp.py	Mon Jan 23 14:42:29 2006
@@ -1,6 +1,6 @@
 from pypy.objspace.flow.model import FunctionGraph, Constant, Variable, c_last_exception
 from pypy.rpython.rarithmetic import intmask, r_uint, ovfcheck, r_longlong, r_ulonglong
-from pypy.rpython.lltypesystem import lltype
+from pypy.rpython.lltypesystem import lltype, llmemory
 from pypy.rpython.memory import lladdress
 from pypy.rpython.ootypesystem import ootype
 from pypy.rpython.objectmodel import FREED_OBJECT
@@ -543,12 +543,12 @@
         return lladdress.raw_malloc(size)
 
     def op_raw_free(self, addr):
-        assert self.llt.typeOf(addr) == lladdress.Address
+        assert self.llt.typeOf(addr) == llmemory.Address
         lladdress.raw_free(addr)
 
     def op_raw_memcopy(self, fromaddr, toaddr, size):
-        assert self.llt.typeOf(fromaddr) == lladdress.Address
-        assert self.llt.typeOf(toaddr) == lladdress.Address
+        assert self.llt.typeOf(fromaddr) == llmemory.Address
+        assert self.llt.typeOf(toaddr) == llmemory.Address
         lladdress.raw_memcopy(fromaddr, toaddr, size)
 
     def op_raw_load(self, addr, typ, offset):

Added: pypy/dist/pypy/rpython/lltypesystem/llmemory.py
==============================================================================
--- (empty file)
+++ pypy/dist/pypy/rpython/lltypesystem/llmemory.py	Mon Jan 23 14:42:29 2006
@@ -0,0 +1,79 @@
+# this file contains the definitions and most extremely faked
+# implementations of things relating to the description of the layout
+# of objects in memeory.
+
+# sizeof, offsetof
+
+from pypy.rpython.objectmodel import Symbolic
+from pypy.rpython.lltypesystem import lltype
+
+class OffsetOf(Symbolic):
+
+    def __init__(self, TYPE, *fldnames):
+        self.TYPE = TYPE
+        self.fldnames = fldnames
+
+    def annotation(self):
+        from pypy.annotation import model
+        return model.SomeOffset()
+
+    def lltype(self):
+        return Offset
+
+    def __repr__(self):
+        return "<OffsetOf %r %r>" % (self.TYPE, self.fldnames)
+
+    def __add__(self, other):
+        if not isinstance(other, OffsetOf):
+            return NotImplemented
+        t = self.TYPE
+        for f in self.fldnames:
+            t = t._flds[f]
+        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
+
+def offsetof(TYPE, fldname):
+    assert fldname in TYPE._flds
+    return OffsetOf(TYPE, fldname)
+
+def itemoffsetof(TYPE, n=None):
+    pass
+
+class fakeaddress(object):
+    def __init__(self, ob, offset=None):
+        self.ob = ob
+        if offset is None:
+            self.offset = OffsetOf(lltype.typeOf(self.ob))
+        else:
+            self.offset = offset
+
+    def __add__(self, other):
+        if not isinstance(other, OffsetOf):
+            return NotImplemented
+        return fakeaddress(self.ob, self.offset + other)
+    
+class _fakeaccessor(object):
+    def __init__(self, addr):
+        self.addr = addr
+    def __getitem__(self, index):
+        assert index == 0
+        ob = self.addr.ob
+        for n in self.addr.offset.fldnames:
+            ob = getattr(ob, n)
+        # XXX will need to do pointers differently!
+        assert lltype.typeOf(ob) == self.TYPE 
+        return ob
+        
+class _signed_fakeaccessor(_fakeaccessor):
+    TYPE = lltype.Signed
+
+fakeaddress.signed = property(_signed_fakeaccessor)
+
+Address = lltype.Primitive("Address", fakeaddress(None))
+
+fakeaddress._TYPE = Address

Modified: pypy/dist/pypy/rpython/memory/gc.py
==============================================================================
--- pypy/dist/pypy/rpython/memory/gc.py	(original)
+++ pypy/dist/pypy/rpython/memory/gc.py	Mon Jan 23 14:42:29 2006
@@ -1,8 +1,8 @@
 from pypy.rpython.memory.lladdress import raw_malloc, raw_free, raw_memcopy
-from pypy.rpython.memory.lladdress import NULL, address, Address
+from pypy.rpython.memory.lladdress import NULL, address
 from pypy.rpython.memory.support import AddressLinkedList
 from pypy.rpython.memory import lltypesimulation
-from pypy.rpython.lltypesystem import lltype
+from pypy.rpython.lltypesystem import lltype, llmemory
 from pypy.rpython.objectmodel import free_non_gc_object
 
 import sys
@@ -27,7 +27,7 @@
 gc_interface = {
     "malloc": lltype.FuncType((lltype.Signed, lltype.Signed), lltype.Signed),
     "collect": lltype.FuncType((), lltype.Void),
-    "write_barrier": lltype.FuncType((Address, ) * 3, lltype.Void),
+    "write_barrier": lltype.FuncType((llmemory.Address, ) * 3, lltype.Void),
     }
 
 def dummy_get_roots1():

Modified: pypy/dist/pypy/rpython/memory/lladdress.py
==============================================================================
--- pypy/dist/pypy/rpython/memory/lladdress.py	(original)
+++ pypy/dist/pypy/rpython/memory/lladdress.py	Mon Jan 23 14:42:29 2006
@@ -1,7 +1,8 @@
 import struct
 from pypy.rpython.memory.simulator import MemorySimulator, MemorySimulatorError
 from pypy.rpython.rarithmetic import r_uint
-
+from pypy.rpython.lltypesystem import llmemory
+from pypy.rpython.lltypesystem import lltype
 
 class address(object):
     def __new__(cls, intaddress=0):
@@ -108,85 +109,10 @@
 def get_py_object(address):
     return simulator.get_py_object(address.intaddress)
 
-
-from pypy.rpython.lltypesystem import lltype
-Address = lltype.Primitive("Address", NULL)
-
-address._TYPE = Address
+address._TYPE = llmemory.Address
 
 supported_access_types = {"signed":    lltype.Signed,
                           "unsigned":  lltype.Unsigned,
                           "char":      lltype.Char,
-                          "address":   Address,
+                          "address":   llmemory.Address,
                           }
-
-# sizeof, offsetof
-
-from pypy.rpython.objectmodel import Symbolic
-
-class OffsetOf(Symbolic):
-
-    def __init__(self, TYPE, *fldnames):
-        self.TYPE = TYPE
-        self.fldnames = fldnames
-
-    def annotation(self):
-        from pypy.annotation import model
-        return model.SomeOffset()
-
-    def lltype(self):
-        return Offset
-
-    def __repr__(self):
-        return "<OffsetOf %r %r>" % (self.TYPE, self.fldnames)
-
-    def __add__(self, other):
-        if not isinstance(other, OffsetOf):
-            return NotImplemented
-        t = self.TYPE
-        for f in self.fldnames:
-            t = t._flds[f]
-        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
-
-def offsetof(TYPE, fldname):
-    assert fldname in TYPE._flds
-    return OffsetOf(TYPE, fldname)
-
-def itemoffsetof(TYPE, n=None):
-    pass
-
-class fakeaddress(object):
-    def __init__(self, ob, offset=None):
-        self.ob = ob
-        if offset is None:
-            self.offset = OffsetOf(self.ob._TYPE)
-        else:
-            self.offset = offset
-
-    def __add__(self, other):
-        if not isinstance(other, OffsetOf):
-            return NotImplemented
-        return fakeaddress(self.ob, self.offset + other)
-    
-class _fakeaccessor(object):
-    def __init__(self, addr):
-        self.addr = addr
-    def __getitem__(self, index):
-        assert index == 0
-        ob = self.addr.ob
-        for n in self.addr.offset.fldnames:
-            ob = getattr(ob, n)
-        # XXX will need to do pointers differently!
-        assert lltype.typeOf(ob) == self.TYPE 
-        return ob
-        
-class _signed_fakeaccessor(_fakeaccessor):
-    TYPE = lltype.Signed
-
-fakeaddress.signed = property(_signed_fakeaccessor)

Modified: pypy/dist/pypy/rpython/memory/lltypelayout.py
==============================================================================
--- pypy/dist/pypy/rpython/memory/lltypelayout.py	(original)
+++ pypy/dist/pypy/rpython/memory/lltypelayout.py	Mon Jan 23 14:42:29 2006
@@ -1,5 +1,4 @@
-from pypy.rpython.lltypesystem import lltype
-from pypy.rpython.memory import lladdress
+from pypy.rpython.lltypesystem import lltype, llmemory
 
 import struct
 
@@ -8,7 +7,7 @@
                     lltype.Char:            "c",
                     lltype.Bool:            "B",
                     lltype.Float:           "d",
-                    lladdress.Address:      "P",
+                    llmemory.Address:       "P",
                     }
 
 

Modified: pypy/dist/pypy/rpython/memory/lltypesimulation.py
==============================================================================
--- pypy/dist/pypy/rpython/memory/lltypesimulation.py	(original)
+++ pypy/dist/pypy/rpython/memory/lltypesimulation.py	Mon Jan 23 14:42:29 2006
@@ -4,7 +4,7 @@
 from pypy.rpython.memory.lltypelayout import get_variable_size, sizeof
 from pypy.rpython.memory.lltypelayout import primitive_to_fmt
 from pypy.rpython.memory import lladdress
-from pypy.rpython.lltypesystem import lltype
+from pypy.rpython.lltypesystem import lltype, llmemory
 
 log = py.log.Producer("lltypesim")
 
@@ -15,7 +15,7 @@
         return simulatorptr(lltype.Ptr(T), address)
     elif T == lltype.Bool:
         return bool(address._load(primitive_to_fmt[T])[0])
-    elif T == lladdress.Address:
+    elif T == llmemory.Address:
         return (self._address + offset).address[0]
     elif isinstance(T, lltype.Primitive):
         return address._load(primitive_to_fmt[T])[0]
@@ -63,7 +63,7 @@
                 if isinstance(T, lltype.Primitive):
                     if T == lltype.Void:
                         return None
-                    elif T == lladdress.Address:
+                    elif T == llmemory.Address:
                         return (self._address + offset).address[0]
                     res = (self._address + offset)._load(primitive_to_fmt[T])[0]
                     if T == lltype.Bool:
@@ -92,7 +92,7 @@
                 if isinstance(T, lltype.Primitive):
                     if T == lltype.Void:
                         return
-                    if T == lladdress.Address:
+                    if T == llmemory.Address:
                         (self._address + offset).address[0] = value
                     else:
                         (self._address + offset)._store(primitive_to_fmt[T],

Modified: pypy/dist/pypy/rpython/memory/test/test_address.py
==============================================================================
--- pypy/dist/pypy/rpython/memory/test/test_address.py	(original)
+++ pypy/dist/pypy/rpython/memory/test/test_address.py	Mon Jan 23 14:42:29 2006
@@ -9,7 +9,7 @@
 from pypy.rpython.memory.lladdress import address, NULL
 from pypy.rpython.memory.lladdress import raw_malloc, raw_free, raw_memcopy
 from pypy.rpython.memory.lladdress import get_py_object, get_address_of_object
-from pypy.rpython.memory.lladdress import Address
+from pypy.rpython.lltypesystem.llmemory import Address
 from pypy.rpython.memory.simulator import MemorySimulatorError
 from pypy.rpython.memory.test.test_llinterpsim import interpret
 
@@ -114,7 +114,7 @@
 
     def test_simple_offsetof(self):
         from pypy.rpython.lltypesystem import lltype
-        from pypy.rpython.memory.lladdress import offsetof
+        from pypy.rpython.lltypesystem.llmemory import offsetof
         S = lltype.GcStruct('S', ('x', lltype.Bool), ('y', lltype.Signed))
         def f():
             return offsetof(S, 'x')
@@ -133,7 +133,7 @@
 
     def test_offset_addition(self):
         from pypy.rpython.lltypesystem import lltype
-        from pypy.rpython.memory.lladdress import offsetof
+        from pypy.rpython.lltypesystem.llmemory import offsetof
         S = lltype.Struct('S', ('x', lltype.Bool), ('y', lltype.Signed))
         T = lltype.GcStruct('T', ('r', lltype.Float), ('s1', S), ('s2', S))
         def f():
@@ -244,7 +244,7 @@
 
     def test_simple_offsetof(self):
         from pypy.rpython.lltypesystem import lltype
-        from pypy.rpython.memory.lladdress import offsetof
+        from pypy.rpython.lltypesystem.llmemory import offsetof
         S = lltype.GcStruct('S', ('x', lltype.Bool), ('y', lltype.Signed))
         def f():
             return offsetof(S, 'x')
@@ -265,7 +265,7 @@
 
     def test_offset_addition(self):
         from pypy.rpython.lltypesystem import lltype
-        from pypy.rpython.memory.lladdress import offsetof
+        from pypy.rpython.lltypesystem.llmemory import offsetof
         S = lltype.Struct('S', ('x', lltype.Bool), ('y', lltype.Signed))
         T = lltype.GcStruct('T', ('r', lltype.Float), ('s1', S), ('s2', S))
         def f():

Modified: pypy/dist/pypy/rpython/memory/test/test_lltypesimulation.py
==============================================================================
--- pypy/dist/pypy/rpython/memory/test/test_lltypesimulation.py	(original)
+++ pypy/dist/pypy/rpython/memory/test/test_lltypesimulation.py	Mon Jan 23 14:42:29 2006
@@ -331,7 +331,7 @@
     assert not s0.a != s0.a
     
 def test_struct_with_address():
-    S = lltype.GcStruct("s", ('a', lladdress.Address))
+    S = lltype.GcStruct("s", ('a', llmemory.Address))
     s = malloc(S)
     s.a = lladdress.NULL
     assert s.a == lladdress.NULL

Modified: pypy/dist/pypy/rpython/raddress.py
==============================================================================
--- pypy/dist/pypy/rpython/raddress.py	(original)
+++ pypy/dist/pypy/rpython/raddress.py	Mon Jan 23 14:42:29 2006
@@ -1,7 +1,8 @@
 # rtyping of memory address operations
 from pypy.annotation.pairtype import pairtype
 from pypy.annotation import model as annmodel
-from pypy.rpython.memory.lladdress import NULL, Address, Offset
+from pypy.rpython.memory.lladdress import NULL, address
+from pypy.rpython.lltypesystem.llmemory import Address, Offset
 from pypy.rpython.rmodel import Repr, IntegerRepr
 from pypy.rpython.lltypesystem import lltype
 
@@ -23,8 +24,8 @@
     lowleveltype = Address
 
     def convert_const(self, value):
-        assert value is NULL
-        return NULL
+        assert not isinstance(value, address) or value is NULL
+        return value
 
     def rtype_getattr(self, hop):
         v_access = hop.inputarg(address_repr, 0)

Modified: pypy/dist/pypy/rpython/rbuiltin.py
==============================================================================
--- pypy/dist/pypy/rpython/rbuiltin.py	(original)
+++ pypy/dist/pypy/rpython/rbuiltin.py	Mon Jan 23 14:42:29 2006
@@ -361,17 +361,18 @@
 # memory addresses
 
 from pypy.rpython.memory import lladdress
+from pypy.rpython.lltypesystem import llmemory
 
 def rtype_raw_malloc(hop):
     v_size, = hop.inputargs(lltype.Signed)
-    return hop.genop('raw_malloc', [v_size], resulttype=lladdress.Address)
+    return hop.genop('raw_malloc', [v_size], resulttype=llmemory.Address)
 
 def rtype_raw_free(hop):
-    v_addr, = hop.inputargs(lladdress.Address)
+    v_addr, = hop.inputargs(llmemory.Address)
     return hop.genop('raw_free', [v_addr])
 
 def rtype_raw_memcopy(hop):
-    v_list = hop.inputargs(lladdress.Address, lladdress.Address, lltype.Signed)
+    v_list = hop.inputargs(llmemory.Address, llmemory.Address, lltype.Signed)
     return hop.genop('raw_memcopy', v_list)
 
 BUILTIN_TYPER[lladdress.raw_malloc] = rtype_raw_malloc
@@ -379,11 +380,11 @@
 BUILTIN_TYPER[lladdress.raw_memcopy] = rtype_raw_memcopy
 
 def rtype_offsetof(hop):
-    from pypy.rpython.memory.lladdress import Offset
     TYPE, field = hop.inputargs(lltype.Void, lltype.Void)
-    return hop.inputconst(Offset, lladdress.offsetof(TYPE.value, field.value))
+    return hop.inputconst(llmemory.Offset,
+                          llmemory.offsetof(TYPE.value, field.value))
 
-BUILTIN_TYPER[lladdress.offsetof] = rtype_offsetof
+BUILTIN_TYPER[llmemory.offsetof] = rtype_offsetof
 
 # _________________________________________________________________
 # non-gc objects

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 14:42:29 2006
@@ -1,6 +1,7 @@
 import sys
 from pypy.rpython.lltypesystem.lltype import *
-from pypy.rpython.memory.lladdress import Address, NULL
+from pypy.rpython.lltypesystem.llmemory import Address
+from pypy.rpython.memory.lladdress import NULL
 
 # ____________________________________________________________
 #
@@ -53,6 +54,7 @@
     return '%d' % ord(value)
 
 def name_address(value):
+    # XXX this will need to change!
     assert value == NULL
     return 'NULL' 
 



More information about the Pypy-commit mailing list