[pypy-svn] r15354 - pypy/dist/pypy/translator/llvm2
ericvrp at codespeak.net
ericvrp at codespeak.net
Fri Jul 29 16:56:15 CEST 2005
Author: ericvrp
Date: Fri Jul 29 16:56:14 2005
New Revision: 15354
Modified:
pypy/dist/pypy/translator/llvm2/arraynode.py
pypy/dist/pypy/translator/llvm2/extfuncnode.py
pypy/dist/pypy/translator/llvm2/funcnode.py
pypy/dist/pypy/translator/llvm2/genllvm.py
pypy/dist/pypy/translator/llvm2/node.py
pypy/dist/pypy/translator/llvm2/opwriter.py
pypy/dist/pypy/translator/llvm2/structnode.py
Log:
refactor to get more readable llvm code
Modified: pypy/dist/pypy/translator/llvm2/arraynode.py
==============================================================================
--- pypy/dist/pypy/translator/llvm2/arraynode.py (original)
+++ pypy/dist/pypy/translator/llvm2/arraynode.py Fri Jul 29 16:56:14 2005
@@ -3,13 +3,12 @@
from pypy.translator.llvm2.log import log
from pypy.translator.llvm2.node import LLVMNode, ConstantLLVMNode
from pypy.translator.llvm2 import varsize
-import itertools
+import itertools
log = log.structnode
-nextnum = itertools.count().next
+nextnum = itertools.count().next
class ArrayTypeNode(LLVMNode):
- _issetup = False
def __init__(self, db, array):
assert isinstance(array, lltype.Array)
@@ -23,7 +22,7 @@
# for the array type (see writeimpl)
c = nextnum()
self.ref = "%%arraytype.%s.%s" % (c, self.arraytype)
- self.constructor_ref = "%%new.array.%s" % c
+ self.constructor_ref = "%%new.array.%s" % c
self.constructor_decl = "%s * %s(int %%len)" % \
(self.ref, self.constructor_ref)
@@ -32,7 +31,6 @@
def setup(self):
self.db.prepare_repr_arg_type(self.arraytype)
- self._issetup = True
# ______________________________________________________________________
# entry points from genllvm
@@ -57,13 +55,12 @@
a struct,
pointer to struct/array
"""
- _issetup = True
def __init__(self, db, value):
assert isinstance(lltype.typeOf(value), lltype.Array)
self.db = db
self.value = value
self.arraytype = lltype.typeOf(value).OF
- self.ref = "%%arrayinstance.%s" % (nextnum(),)
+ self.ref = self.make_ref('%arrayinstance', '')
def __str__(self):
return "<ArrayNode %r>" % (self.ref,)
@@ -78,7 +75,6 @@
self.castref = "cast (%s* %s to %s*)" % (self.get_typerepr(),
self.ref,
typeval)
- self._issetup = True
def get_typerepr(self):
items = self.value.items
Modified: pypy/dist/pypy/translator/llvm2/extfuncnode.py
==============================================================================
--- pypy/dist/pypy/translator/llvm2/extfuncnode.py (original)
+++ pypy/dist/pypy/translator/llvm2/extfuncnode.py Fri Jul 29 16:56:14 2005
@@ -4,7 +4,6 @@
log = log.extfuncnode
class ExternalFuncNode(LLVMNode):
-
used_external_functions = {}
def __init__(self, db, value):
@@ -12,9 +11,6 @@
self.value = value
self.ref = "%" + value._callable.__name__
- def setup(self):
- self._issetup = True
-
def getdecl(self):
T = self.value._TYPE
args = [self.db.repr_arg_type(a) for a in T.ARGS]
Modified: pypy/dist/pypy/translator/llvm2/funcnode.py
==============================================================================
--- pypy/dist/pypy/translator/llvm2/funcnode.py (original)
+++ pypy/dist/pypy/translator/llvm2/funcnode.py Fri Jul 29 16:56:14 2005
@@ -7,7 +7,6 @@
from pypy.translator.llvm2.node import LLVMNode, ConstantLLVMNode
from pypy.translator.llvm2.opwriter import OpWriter
from pypy.translator.llvm2.log import log
-nextnum = py.std.itertools.count().next
log = log.funcnode
class FuncTypeNode(LLVMNode):
@@ -17,7 +16,7 @@
self.type_ = type_
# XXX Make simplier for now, it is far too hard to read otherwise
#self.ref = 'ft.%s.%s' % (type_, nextnum())
- self.ref = '%%functiontype.%s' % (nextnum(),)
+ self.ref = self.make_ref('%functiontype', '')
def __str__(self):
return "<FuncTypeNode %r>" % self.ref
@@ -32,8 +31,6 @@
codewriter.funcdef(self.ref, returntype, inputargtypes)
class FuncNode(ConstantLLVMNode):
- _issetup = False
-
def __init__(self, db, value):
self.db = db
self.value = value
@@ -57,7 +54,6 @@
self.db.prepare_arg(op.result)
assert self.graph, "cannot traverse"
traverse(visit, self.graph)
- self._issetup = True
# ______________________________________________________________________
# main entry points from genllvm
@@ -65,7 +61,6 @@
codewriter.declare(self.getdecl())
def writeimpl(self, codewriter):
- assert self._issetup
graph = self.graph
log.writeimpl(graph.name)
codewriter.openfunc(self.getdecl())
@@ -89,7 +84,6 @@
# writing helpers for entry points
def getdecl(self):
- assert self._issetup
startblock = self.graph.startblock
returnblock = self.graph.returnblock
inputargs = self.db.repr_arg_multi(startblock.inputargs)
Modified: pypy/dist/pypy/translator/llvm2/genllvm.py
==============================================================================
--- pypy/dist/pypy/translator/llvm2/genllvm.py (original)
+++ pypy/dist/pypy/translator/llvm2/genllvm.py Fri Jul 29 16:56:14 2005
@@ -16,6 +16,7 @@
#from pypy.translator.backendoptimization import rename_extfunc_calls
from pypy.translator.llvm2.module.extfunction import extdeclarations, \
extfunctions, gc_boehm, gc_disabled, dependencies
+from pypy.translator.llvm2.node import LLVMNode
from pypy.translator.translator import Translator
@@ -24,6 +25,7 @@
class GenLLVM(object):
def __init__(self, translator, embedexterns=True):
+ LLVMNode.nodename_count = {} #reset counters
self.db = Database(translator)
self.translator = translator
self.embedexterns = embedexterns
Modified: pypy/dist/pypy/translator/llvm2/node.py
==============================================================================
--- pypy/dist/pypy/translator/llvm2/node.py (original)
+++ pypy/dist/pypy/translator/llvm2/node.py Fri Jul 29 16:56:14 2005
@@ -1,4 +1,18 @@
class LLVMNode(object):
+ nodename_count = {}
+
+ def make_name(self, name):
+ if name in self.nodename_count:
+ postfix = '.%d' % self.nodename_count[name]
+ self.nodename_count[name] += 1
+ else:
+ postfix = ''
+ self.nodename_count[name] = 1
+ return name + postfix
+
+ def make_ref(self, prefix, name):
+ return self.make_name(prefix + name)
+
def ref():
def _get_ref(self):
return self._ref
@@ -25,7 +39,6 @@
return property(_get_ref, _set_ref)
constructor_ref = constructor_ref()
-
def setup(self):
pass
Modified: pypy/dist/pypy/translator/llvm2/opwriter.py
==============================================================================
--- pypy/dist/pypy/translator/llvm2/opwriter.py (original)
+++ pypy/dist/pypy/translator/llvm2/opwriter.py Fri Jul 29 16:56:14 2005
@@ -223,6 +223,29 @@
#self.codewriter.cast(tmpvar2, tmptype1, tmpvar1, tmptype2)
#self.codewriter.switch(tmptype2, tmpvar2, exc_error_label, value_label)
+ #XXX get helper function name
+ exceptiondata = self.db._translator.rtyper.getexceptiondata()
+
+ #functions
+ ll_exception_match = exceptiondata.ll_exception_match.__name__
+ #yield ('RPYTHON_EXCEPTION_MATCH', exceptiondata.ll_exception_match)
+ #yield ('RPYTHON_TYPE_OF_EXC_INST', exceptiondata.ll_type_of_exc_inst)
+ #yield ('RPYTHON_PYEXCCLASS2EXC', exceptiondata.ll_pyexcclass2exc)
+ #yield ('RAISE_OSERROR', exceptiondata.ll_raise_OSError)
+
+ #datatypes
+ lltype_of_exception_type = 'structtype.' + exceptiondata.lltype_of_exception_type.TO.__name__
+ lltype_of_exception_value = 'structtype.' + exceptiondata.lltype_of_exception_value.TO.__name__
+ #yield ('RPYTHON_EXCEPTION_VTABLE', exceptiondata.lltype_of_exception_type)
+ #yield ('RPYTHON_EXCEPTION', exceptiondata.lltype_of_exception_value)
+
+ self.codewriter.newline()
+ self.codewriter.comment('HERE')
+ self.codewriter.comment(ll_exception_match) #ll_issubclass__object_vtablePtr_object_vtablePtr
+ self.codewriter.comment(lltype_of_exception_type) #
+ self.codewriter.comment(lltype_of_exception_value) #
+ self.codewriter.newline()
+
self.codewriter.switch(tmptype1, tmpvar1, exc_error_label, value_label)
self.codewriter.label(exc_error_label)
self.codewriter.comment('dead code ahead')
Modified: pypy/dist/pypy/translator/llvm2/structnode.py
==============================================================================
--- pypy/dist/pypy/translator/llvm2/structnode.py (original)
+++ pypy/dist/pypy/translator/llvm2/structnode.py Fri Jul 29 16:56:14 2005
@@ -4,20 +4,17 @@
from pypy.translator.llvm2 import varsize
from pypy.rpython import lltype
-import itertools
-nextnum = itertools.count().next
-
log = log.structnode
class StructTypeNode(LLVMNode):
- _issetup = False
-
def __init__(self, db, struct):
assert isinstance(struct, lltype.Struct)
self.db = db
self.struct = struct
- self.name = "%s.%s" % (self.struct._name , nextnum())
- self.ref = "%%structtype.%s" % (self.name)
+ prefix = '%structtype.'
+ name = self.struct._name
+ self.ref = self.make_ref(prefix, name)
+ self.name = self.ref[len(prefix):]
def __str__(self):
return "<StructTypeNode %r>" %(self.ref,)
@@ -26,13 +23,11 @@
# Recurse
for field in self.struct._flds.values():
self.db.prepare_repr_arg_type(field)
- self._issetup = True
# ______________________________________________________________________
# main entry points from genllvm
def writedatatypedecl(self, codewriter):
- assert self._issetup
fields = [getattr(self.struct, name)
for name in self.struct._names_without_voids()]
codewriter.structdef(self.ref,
@@ -42,7 +37,7 @@
def __init__(self, db, struct):
super(StructVarsizeTypeNode, self).__init__(db, struct)
- self.constructor_ref = "%%newvarsizestruct.%s" % (self.name)
+ self.constructor_ref = "%%new.varsizestruct.%s" % (self.name)
self.constructor_decl = "%s * %s(int %%len)" % \
(self.ref, self.constructor_ref)
@@ -83,13 +78,11 @@
a struct,
pointer to struct/array
"""
- _issetup = False
-
def __init__(self, db, value):
self.db = db
self.value = value
self.structtype = self.value._TYPE
- self.ref = "%%structinstance.%s" % (nextnum(),)
+ self.ref = self.make_ref('%structinstance', '')
def __str__(self):
return "<StructNode %r>" % (self.ref,)
@@ -111,8 +104,6 @@
value = getattr(self.value, name)
self.db.prepare_constant(T, value)
- self._issetup = True
-
def get_typerepr(self):
return self.db.repr_arg_type(self.structtype)
More information about the Pypy-commit
mailing list