[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