Author: Ronan Lamy <ronan.l...@gmail.com>
Branch: annotator
Changeset: r68732:f70cd5a088d6
Date: 2014-01-17 01:18 +0000
http://bitbucket.org/pypy/pypy/changeset/f70cd5a088d6/

Log:    Kill all consider_op_*() methods

diff --git a/rpython/annotator/annrpython.py b/rpython/annotator/annrpython.py
--- a/rpython/annotator/annrpython.py
+++ b/rpython/annotator/annrpython.py
@@ -611,19 +611,6 @@
     def noreturnvalue(self, op):
         return annmodel.s_ImpossibleValue  # no return value (hook method)
 
-    # XXX "contains" clash with SomeObject method
-    def consider_op_contains(self, seq, elem):
-        return seq.op_contains(elem)
-
-    def consider_op_newtuple(self, *args):
-        return annmodel.SomeTuple(items = args)
-
-    def consider_op_newlist(self, *args):
-        return self.bookkeeper.newlist(*args)
-
-    def consider_op_newdict(self):
-        return self.bookkeeper.newdict()
-
 
 class BlockedInference(Exception):
     """This exception signals the type inference engine that the situation
diff --git a/rpython/flowspace/operation.py b/rpython/flowspace/operation.py
--- a/rpython/flowspace/operation.py
+++ b/rpython/flowspace/operation.py
@@ -14,6 +14,7 @@
 from rpython.flowspace.model import (Constant, WrapException, const, Variable,
                                      SpaceOperation)
 from rpython.flowspace.specialcase import register_flow_sc
+from rpython.annotator.model import SomeTuple
 
 
 NOT_REALLY_CONST = {
@@ -365,6 +366,37 @@
 add_operator('newslice', 3)
 add_operator('hint', None, dispatch=1)
 
+class Contains(PureOperation):
+    opname = 'contains'
+    arity = 2
+    pyfunc = staticmethod(operator.contains)
+
+    # XXX "contains" clash with SomeObject method
+    def consider(self, annotator, seq, elem):
+        return seq.op_contains(elem)
+
+
+class NewDict(HLOperation):
+    opname = 'newdict'
+    canraise = []
+    def consider(self, annotator, *args):
+        return annotator.bookkeeper.newdict()
+
+
+class NewTuple(PureOperation):
+    opname = 'newtuple'
+    pyfunc = staticmethod(lambda *args: args)
+    canraise = []
+    def consider(self, annotator, *args):
+        return SomeTuple(items=args)
+
+
+class NewList(HLOperation):
+    opname = 'newlist'
+    canraise = []
+    def consider(self, annotator, *args):
+        return annotator.bookkeeper.newlist(*args)
+
 
 class Pow(PureOperation):
     opname = 'pow'
diff --git a/rpython/flowspace/test/test_objspace.py 
b/rpython/flowspace/test/test_objspace.py
--- a/rpython/flowspace/test/test_objspace.py
+++ b/rpython/flowspace/test/test_objspace.py
@@ -1258,6 +1258,19 @@
         assert ops[1].opname == 'simple_call'
         assert ops[1].args[0].value is os.unlink
 
+    def test_constfold_in(self):
+        def f():
+            if 'x' in "xyz":
+                return 5
+            else:
+                return 6
+        graph = self.codetest(f)
+        assert graph.startblock.operations == []
+        [link] = graph.startblock.exits
+        assert link.target is graph.returnblock
+        assert isinstance(link.args[0], Constant)
+        assert link.args[0].value == 5
+
 
 DATA = {'x': 5,
         'y': 6}
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to