[pypy-svn] r13581 - pypy/dist/pypy/translator/llvm2
cfbolz at codespeak.net
cfbolz at codespeak.net
Sat Jun 18 16:39:10 CEST 2005
Author: cfbolz
Date: Sat Jun 18 16:39:10 2005
New Revision: 13581
Modified:
pypy/dist/pypy/translator/llvm2/database.py
pypy/dist/pypy/translator/llvm2/funcnode.py
pypy/dist/pypy/translator/llvm2/pyxwrapper.py
Log:
moved some methods to database
Modified: pypy/dist/pypy/translator/llvm2/database.py
==============================================================================
--- pypy/dist/pypy/translator/llvm2/database.py (original)
+++ pypy/dist/pypy/translator/llvm2/database.py Sat Jun 18 16:39:10 2005
@@ -1,8 +1,12 @@
from pypy.translator.llvm2.log import log
from pypy.translator.llvm2.funcnode import FuncNode
+from pypy.rpython import lltype
+from pypy.objspace.flow.model import Block, Constant, Variable
log = log.database
+PRIMITIVES_TO_LLVM = {lltype.Signed: "int"}
+
class Database(object):
def __init__(self, translator):
self._translator = translator
@@ -31,4 +35,21 @@
def getobjects(self):
return self.obj2node.values()
-
+ def getref(self, arg):
+ if isinstance(arg, Constant):
+ if isinstance(arg.concretetype, lltype.Primitive):
+ return str(arg.value).lower() #False --> false
+ raise TypeError, "can't handle the Constant %s" % arg
+ elif isinstance(arg, Variable):
+ return "%" + str(arg)
+ else:
+ raise TypeError, arg
+
+ def gettyperef(self, arg):
+ return PRIMITIVES_TO_LLVM[arg.concretetype]
+
+ def multi_getref(self, args):
+ return [self.getref(arg) for arg in args]
+
+ def multi_gettyperef(self, args):
+ return [self.gettyperef(arg) for arg in args]
Modified: pypy/dist/pypy/translator/llvm2/funcnode.py
==============================================================================
--- pypy/dist/pypy/translator/llvm2/funcnode.py (original)
+++ pypy/dist/pypy/translator/llvm2/funcnode.py Sat Jun 18 16:39:10 2005
@@ -1,11 +1,8 @@
import py
-from pypy.rpython import lltype
from pypy.objspace.flow.model import Block, Constant, Variable, flatten, mkentrymap
from pypy.translator.llvm2.log import log
log = log.funcnode
-PRIMITIVES_TO_LLVM = {lltype.Signed: "int"}
-
class FuncNode(object):
_issetup = False
@@ -22,9 +19,9 @@
assert self._issetup
startblock = self.graph.startblock
returnblock = self.graph.returnblock
- inputargs = self.getllvmnames(startblock.inputargs)
- inputargtypes = self.getllvmtypes(startblock.inputargs)
- returntype = self.getllvmtype(self.graph.returnblock.inputargs[0])
+ inputargs = self.db.multi_getref(startblock.inputargs)
+ inputargtypes = self.db.multi_gettyperef(startblock.inputargs)
+ returntype = self.db.gettyperef(self.graph.returnblock.inputargs[0])
result = "%s %%%s" % (returntype, self.ref)
args = ["%s %s" % item for item in zip(inputargs, inputargtypes)]
result += "(%s)" % ", ".join(args)
@@ -49,12 +46,12 @@
codewriter.closefunc()
def write_block(self, codewriter, block):
- inputargs = self.getllvmnames(block.inputargs)
- inputargtypes = self.getllvmtypes(block.inputargs)
+ inputargs = self.db.multi_getref(block.inputargs)
+ inputargtypes = self.db.multi_gettyperef(block.inputargs)
codewriter.label(self.block_to_name[block])
entrylinks = mkentrymap(self.graph)[block]
for i, (arg, type_) in enumerate(zip(inputargs, inputargtypes)):
- names = self.getllvmnames([link.args[i] for link in entrylinks])
+ names = self.db.multi_getref([link.args[i] for link in entrylinks])
blocknames = [self.block_to_name[link.prevblock] for link in entrylinks]
codewriter.phi(arg, type_, names, blocknames)
if block is self.graph.returnblock:
@@ -66,19 +63,3 @@
assert len(block.exits) == 1
codewriter.br_uncond(self.block_to_name[block.exits[0].target])
- def getllvmname(self, arg):
- if isinstance(arg, Constant):
- return str(arg.value).lower() #False --> false
- elif isinstance(arg, Variable):
- return "%" + str(arg)
- else:
- raise TypeError, arg
-
- def getllvmtype(self, arg):
- return PRIMITIVES_TO_LLVM[arg.concretetype]
-
- def getllvmnames(self, args):
- return [self.getllvmname(arg) for arg in args]
-
- def getllvmtypes(self, args):
- return [self.getllvmtype(arg) for arg in args]
Modified: pypy/dist/pypy/translator/llvm2/pyxwrapper.py
==============================================================================
--- pypy/dist/pypy/translator/llvm2/pyxwrapper.py (original)
+++ pypy/dist/pypy/translator/llvm2/pyxwrapper.py Sat Jun 18 16:39:10 2005
@@ -15,7 +15,7 @@
return result
lines = []
append = lines.append
- inputargs = funcgen.getllvmnames(funcgen.graph.startblock.inputargs)
+ inputargs = funcgen.db.multi_getref(funcgen.graph.startblock.inputargs)
append("cdef extern " + c_declaration())
append("")
append("def %s_wrapper(%s):" % (funcgen.ref, ", ".join(inputargs)))
More information about the Pypy-commit
mailing list