[pypy-svn] r14083 - pypy/dist/pypy/translator/llvm2
cfbolz at codespeak.net
cfbolz at codespeak.net
Sat Jul 2 13:38:22 CEST 2005
Author: cfbolz
Date: Sat Jul 2 13:38:22 2005
New Revision: 14083
Added:
pypy/dist/pypy/translator/llvm2/node.py
Modified:
pypy/dist/pypy/translator/llvm2/codewriter.py
pypy/dist/pypy/translator/llvm2/database.py
pypy/dist/pypy/translator/llvm2/funcnode.py
Log:
(ericvrp, cfbolz):
fixed FuncTypeNode to use the prepare properly, not change ref after construction etc.
Modified: pypy/dist/pypy/translator/llvm2/codewriter.py
==============================================================================
--- pypy/dist/pypy/translator/llvm2/codewriter.py (original)
+++ pypy/dist/pypy/translator/llvm2/codewriter.py Sat Jul 2 13:38:22 2005
@@ -10,12 +10,7 @@
def append(self, line):
if show_line_numbers:
- global line_number
- try:
- line_number += 1
- except:
- line_number = 1
- line = "%-80s; %d" % (line, line_number)
+ line = "%-75s; %d" % (line, len(self._lines) + 1)
self._lines.append(line)
log(line)
@@ -34,6 +29,10 @@
def arraydef(self, name, typerepr):
self.append("%s = type { int, [0 x %s] }" % (name, typerepr))
+ def funcdef(self, name, rettyperepr, argtypereprs):
+ self.append("%s = type %s (%s)" % (name, rettyperepr,
+ ", ".join(argtypereprs)))
+
def declare(self, decl):
self.append("declare %s" %(decl,))
Modified: pypy/dist/pypy/translator/llvm2/database.py
==============================================================================
--- pypy/dist/pypy/translator/llvm2/database.py (original)
+++ pypy/dist/pypy/translator/llvm2/database.py Sat Jul 2 13:38:22 2005
@@ -1,8 +1,7 @@
from pypy.translator.llvm2.log import log
-from pypy.translator.llvm2.funcnode import FuncNode, FuncSig
+from pypy.translator.llvm2.funcnode import FuncNode, FuncTypeNode
from pypy.translator.llvm2.structnode import StructNode, StructInstance
from pypy.translator.llvm2.arraynode import ArrayNode
-ArrayNode
from pypy.rpython import lltype
from pypy.objspace.flow.model import Block, Constant, Variable
@@ -55,7 +54,11 @@
else:
log.XXX("not sure what to do about %s(%s)" % (ct, const_or_var))
else:
- log.prepare.ignore(const_or_var)
+ log.prepare.ignore(const_or_var)
+
+ def prepare_repr_arg_multi(self, args):
+ for const_or_var in args:
+ self.prepare_repr_arg(const_or_var)
def prepare_repr_arg_type(self, type_):
if type_ in self.obj2node:
@@ -69,7 +72,7 @@
self.addpending(type_, StructNode(self, type_))
elif isinstance(type_, lltype.FuncType):
- self.addpending(type_, FuncSig(self, type_))
+ self.addpending(type_, FuncTypeNode(self, type_))
elif isinstance(type_, lltype.Array):
self.addpending(type_, ArrayNode(self, type_))
@@ -77,6 +80,10 @@
else:
log.XXX("need to prepare typerepr", type_)
+ def prepare_repr_arg_type_multi(self, types):
+ for type_ in types:
+ self.prepare_repr_arg_type(type_)
+
def prepare_arg(self, const_or_var):
log.prepare(const_or_var)
self.prepare_repr_arg_type(const_or_var.concretetype)
@@ -95,7 +102,7 @@
return res
def get_typedecls(self):
- return self.getobjects((StructNode, ArrayNode))
+ return self.getobjects((StructNode, ArrayNode, FuncTypeNode))
def get_globaldata(self):
return self.getobjects((StructInstance))
@@ -132,7 +139,7 @@
log.dump_db("*** unknown ***")
for k,v in all_objs:
- if isinstance(v, (FuncSig)):
+ if isinstance(v, (FuncTypeNode)):
log.dump_db("%s ---> %s" % (k, v))
# __________________________________________________________
Modified: pypy/dist/pypy/translator/llvm2/funcnode.py
==============================================================================
--- pypy/dist/pypy/translator/llvm2/funcnode.py (original)
+++ pypy/dist/pypy/translator/llvm2/funcnode.py Sat Jul 2 13:38:22 2005
@@ -3,28 +3,36 @@
from pypy.objspace.flow.model import flatten, mkentrymap, traverse
from pypy.rpython import lltype
from pypy.translator.llvm2.cfgtransform import prepare_graph
+from pypy.translator.llvm2.node import LLVMNode
from pypy.translator.llvm2.log import log
log = log.funcnode
-class FuncSig(object):
- """ XXX Not sure about this - should be combined with FuncNode?
- Abstract function signature. """
- def __init__(self, db, typ):
+class FuncTypeNode(LLVMNode):
+ func_type_node_counter = 0
+
+ def __init__(self, db, type_):
self.db = db
- self.typ = typ
- # Hack around some debug statements
- self.ref = "pending setup!"
+ self.type_ = type_
+ ref = '"ft.%s.%s"' % (type_, FuncTypeNode.func_type_node_counter)
+ self.ref = ref.replace(" ", "")
+ FuncTypeNode.func_type_node_counter += 1
def __str__(self):
- return "<FuncSig %r>" % self.ref
+ return "<FuncTypeNode %r>" % self.ref
def setup(self):
- returntype = self.db.repr_arg_type(self.typ.RESULT)
- inputargtypes = self.db.repr_arg_type_multi(self.typ.ARGS)
- self.ref = "%s (%s)" % (returntype, ", ".join(inputargtypes))
+ self.db.prepare_repr_arg_type(self.type_.RESULT)
+ self.db.prepare_repr_arg_type(self.type_.ARGS)
+
+ def writedatatypedecl(self, codewriter):
+ returntype = self.db.repr_arg_type(self.type_.RESULT)
+ inputargtypes = self.db.repr_arg_type_multi(self.type_.ARGS)
+ decl = "%s type %s (%s)*" % (self.ref, returntype,
+ ", ".join(inputargtypes))
+ codewriter.funcdef(self.ref, returntype, inputargtypes)
-class FuncNode(object):
+class FuncNode(LLVMNode):
_issetup = False
def __init__(self, db, const_ptr_func):
Added: pypy/dist/pypy/translator/llvm2/node.py
==============================================================================
--- (empty file)
+++ pypy/dist/pypy/translator/llvm2/node.py Sat Jul 2 13:38:22 2005
@@ -0,0 +1,9 @@
+class LLVMNode(object):
+ def _get_ref(self):
+ return self._ref
+ def _set_ref(self, ref):
+ if hasattr(self, "_ref"):
+ raise TypeError, ("can only set ref once! currently: %s" %
+ (self._ref,))
+ self._ref = ref
+ ref = property(_get_ref, _set_ref)
More information about the Pypy-commit
mailing list