[pypy-svn] r10399 - in pypy/dist/pypy/translator/llvm: . test
cfbolz at codespeak.net
cfbolz at codespeak.net
Thu Apr 7 13:30:52 CEST 2005
Author: cfbolz
Date: Thu Apr 7 13:30:52 2005
New Revision: 10399
Modified:
pypy/dist/pypy/translator/llvm/representation.py
pypy/dist/pypy/translator/llvm/seqrepr.py
pypy/dist/pypy/translator/llvm/test/llvmsnippet.py
pypy/dist/pypy/translator/llvm/test/test_genllvm.py
Log:
Fixed implementation of constant tuples.
Modified: pypy/dist/pypy/translator/llvm/representation.py
==============================================================================
--- pypy/dist/pypy/translator/llvm/representation.py (original)
+++ pypy/dist/pypy/translator/llvm/representation.py Thu Apr 7 13:30:52 2005
@@ -215,41 +215,3 @@
raise AttributeError, ("VariableRepr instance has no attribute %s"
% repr(name))
-class TupleRepr(LLVMRepr):
- def get(obj, gen):
- if isinstance(obj, Constant):
- type_ = gen.annotator.binding(obj)
- if isinstance(type_, annmodel.SomeTuple):
- return TupleRepr(obj, gen)
- return None
- get = staticmethod(get)
-
- def __init__(self, obj, gen):
- if debug:
- print "TupleRepr", obj, obj.value
- self.const = obj
- self.tuple = obj.value
- self.gen = gen
- self.dependencies = sets.Set()
-
- def setup(self):
- self.l_tuple = [self.gen.get_repr(l) for l in list(self.tuple)]
- self.glvar = self.gen.get_global_tmp("TupleRepr")
- self.dependencies.update(self.l_tuple)
- self.type = self.gen.get_repr(self.gen.annotator.binding(self.const))
-
- def get_globals(self):
- s = "%s = internal global " % self.glvar + " " + self.llvmtype()
- s += "{" + ", ".join([l.typed_name() for l in self.l_tuple]) + "}"
- i = self.l_tuple[0]
- return s
-
- def llvmname(self):
- return self.glvar
-
- def __getattr__(self, name):
- if name.startswith("op_"):
- return getattr(self.type, "t_" + name, None)
- else:
- raise AttributeError, ("TupleRepr instance has no attribute %s"
- % repr(name))
Modified: pypy/dist/pypy/translator/llvm/seqrepr.py
==============================================================================
--- pypy/dist/pypy/translator/llvm/seqrepr.py (original)
+++ pypy/dist/pypy/translator/llvm/seqrepr.py Thu Apr 7 13:30:52 2005
@@ -3,6 +3,7 @@
from pypy.objspace.flow.model import Constant
from pypy.annotation import model as annmodel
+from pypy.translator import gensupp
from pypy.translator.llvm.representation import debug, LLVMRepr
from pypy.translator.llvm.typerepr import TypeRepr, IntTypeRepr
@@ -71,6 +72,49 @@
else:
raise CompileError, "List method %s not supported." % args[1].value
+
+class TupleRepr(LLVMRepr):
+ def get(obj, gen):
+ if isinstance(obj, Constant):
+ type_ = gen.annotator.binding(obj)
+ if isinstance(type_, annmodel.SomeTuple):
+ return TupleRepr(obj, gen)
+ return None
+ get = staticmethod(get)
+
+ def __init__(self, obj, gen):
+ if debug:
+ print "TupleRepr", obj, obj.value
+ self.const = obj
+ self.tuple = obj.value
+ self.gen = gen
+ self.dependencies = sets.Set()
+
+ def setup(self):
+ self.l_tuple = [self.gen.get_repr(l) for l in list(self.tuple)]
+ self.glvar = self.gen.get_global_tmp(
+ repr(self.tuple).replace(" ", "").translate(gensupp.C_IDENTIFIER))
+ self.dependencies.update(self.l_tuple)
+ self.type = self.gen.get_repr(self.gen.annotator.binding(self.const))
+ self.dependencies.add(self.type)
+
+ def get_globals(self):
+ s = "%s = internal global " % self.glvar + " " + self.llvmtype()[:-1]
+ s += "{" + ", ".join([l.typed_name() for l in self.l_tuple]) + "}"
+ i = self.l_tuple[0]
+ return s
+
+ def llvmname(self):
+ return self.glvar
+
+ def __getattr__(self, name):
+ if name.startswith("op_"):
+ return getattr(self.type, "t_" + name, None)
+ else:
+ raise AttributeError, ("TupleRepr instance has no attribute %s"
+ % repr(name))
+
+
class TupleTypeRepr(TypeRepr):
def get(obj, gen):
if isinstance(obj, annmodel.SomeTuple):
Modified: pypy/dist/pypy/translator/llvm/test/llvmsnippet.py
==============================================================================
--- pypy/dist/pypy/translator/llvm/test/llvmsnippet.py (original)
+++ pypy/dist/pypy/translator/llvm/test/llvmsnippet.py Thu Apr 7 13:30:52 2005
@@ -267,6 +267,9 @@
j, s1, s2, l = tuple_f2(i)
return j
+def constant_tuple(i):
+ return len((1, 2, "asdf")) + i
+
#exception snippets:
def simple_exception(n):
Modified: pypy/dist/pypy/translator/llvm/test/test_genllvm.py
==============================================================================
--- pypy/dist/pypy/translator/llvm/test/test_genllvm.py (original)
+++ pypy/dist/pypy/translator/llvm/test/test_genllvm.py Thu Apr 7 13:30:52 2005
@@ -250,6 +250,11 @@
assert f(15) == 15
assert f(30) == 30
+ def test_constant_tuple(self):
+ f = compile_function(llvmsnippet.constant_tuple, [int])
+ for i in range(3, 7):
+ assert f(i) == i + 3
+
class TestException(object):
def setup_method(self,method):
if not llvm_found:
More information about the Pypy-commit
mailing list