[pypy-commit] pypy quad-color-gc: Make some C compilation working (WIP)
ntruessel
pypy.commits at gmail.com
Fri Aug 19 09:03:11 EDT 2016
Author: Nicolas Truessel <ntruessel at njsm.de>
Branch: quad-color-gc
Changeset: r86315:025a7647e086
Date: 2016-08-19 15:02 +0200
http://bitbucket.org/pypy/pypy/changeset/025a7647e086/
Log: Make some C compilation working (WIP)
diff --git a/rpython/memory/gc/qcgc.py b/rpython/memory/gc/qcgc.py
--- a/rpython/memory/gc/qcgc.py
+++ b/rpython/memory/gc/qcgc.py
@@ -18,7 +18,7 @@
TRANSLATION_PARAMS = {}
HDR = lltype.Struct(
'PYPYHDR',
- ('hdr', rffi.COpaque('object_t')),
+ ('hdr', rffi.COpaque('object_t', hints={"is_qcgc_header": True})),
('tid', lltype.Signed),
('hash', lltype.Signed))
#HDR = rffi.COpaque('object_t')
@@ -72,7 +72,7 @@
def init_gc_object(self, addr, typeid, flags=0):
assert flags == 0
hdr = llmemory.cast_adr_to_ptr(addr, lltype.Ptr(self.HDR))
- hdr.tid = llop.combine_ushort(lltype.Signed, typeid, 0)
+ hdr.tid = typeid.index
def init_gc_object_immortal(self, addr, typeid, flags=0): # XXX: Prebuilt Objects?
assert flags == 0
@@ -83,6 +83,7 @@
#
hdr = llmemory.cast_adr_to_ptr(addr, lltype.Ptr(self.HDR))
hdr.hash = prebuilt_hash
+ #hdr._obj._name = typeid.index
#
# STMGC CODE:
#assert flags == 0
diff --git a/rpython/translator/c/node.py b/rpython/translator/c/node.py
--- a/rpython/translator/c/node.py
+++ b/rpython/translator/c/node.py
@@ -976,12 +976,33 @@
args.append('0')
yield 'RPyOpaque_SETUP_%s(%s);' % (T.tag, ', '.join(args))
+class QcgcHeader_OpaqueNode(ContainerNode):
+ nodekind = 'qcgchdr'
+ globalcontainer = True
+ typename = 'object_t @'
+ implementationtypename = typename
+ _funccodegen_owner = None
+
+ def __init__(self, db, T, obj):
+ ContainerNode.__init__(self, db, T, obj)
+
+ def initializationexpr(self, decoration=''):
+ yield '{ QCGC_PREBUILT_OBJECT }'
+
+ def enum_dependencies(self):
+ return []
+
+ def basename(self):
+ return self.nodekind
+
def opaquenode_factory(db, T, obj):
if T == RuntimeTypeInfo:
return db.gcpolicy.rtti_node_factory()(db, T, obj)
if T.hints.get("render_structure", False):
return ExtType_OpaqueNode(db, T, obj)
+ if T.hints.get("is_qcgc_header", False):
+ return QcgcHeader_OpaqueNode(db, T, obj)
raise Exception("don't know about %r" % (T,))
More information about the pypy-commit
mailing list