[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