Author: Ronan Lamy <ronan.l...@gmail.com>
Branch: less-stringly-ops
Changeset: r66245:a8a1f2f496f1
Date: 2013-08-12 20:18 +0100
http://bitbucket.org/pypy/pypy/changeset/a8a1f2f496f1/

Log:    Don't sugar isinstance in the first place

diff --git a/rpython/flowspace/objspace.py b/rpython/flowspace/objspace.py
--- a/rpython/flowspace/objspace.py
+++ b/rpython/flowspace/objspace.py
@@ -158,7 +158,8 @@
         Returns an FSException object whose w_value is an instance of w_type.
         """
         frame = self.frame
-        if frame.guessbool(self.isinstance(w_arg1, self.w_type)):
+        if frame.guessbool(self.call_function(const(isinstance), w_arg1,
+                self.w_type)):
             # this is for all cases of the form (Class, something)
             if frame.guessbool(self.is_(w_arg2, self.w_None)):
                 # raise Type: we assume we have to instantiate Type
diff --git a/rpython/flowspace/operation.py b/rpython/flowspace/operation.py
--- a/rpython/flowspace/operation.py
+++ b/rpython/flowspace/operation.py
@@ -211,7 +211,6 @@
 add_operator('is_', 2, 'is', pure=True)
 add_operator('id', 1, 'id', pyfunc=id)
 add_operator('type', 1, 'type', pyfunc=new_style_type, pure=True)
-add_operator('isinstance', 2, 'isinstance', pyfunc=isinstance, pure=True)
 add_operator('issubtype', 2, 'issubtype', pyfunc=issubclass, pure=True)  # not 
for old-style classes
 add_operator('repr', 1, 'repr', pyfunc=repr, pure=True)
 add_operator('str', 1, 'str', pyfunc=str, pure=True)
@@ -232,7 +231,7 @@
 add_operator('neg', 1, 'neg', pure=True, ovf=True)
 add_operator('bool', 1, 'truth', pyfunc=bool, pure=True)
 op.is_true = op.nonzero = op.bool  # for llinterp
-add_operator('abs' , 1, 'abs', pyfunc=abs, pure=True, ovf=True)
+add_operator('abs', 1, 'abs', pyfunc=abs, pure=True, ovf=True)
 add_operator('hex', 1, 'hex', pyfunc=hex, pure=True)
 add_operator('oct', 1, 'oct', pyfunc=oct, pure=True)
 add_operator('ord', 1, 'ord', pyfunc=ord, pure=True)
diff --git a/rpython/flowspace/specialcase.py b/rpython/flowspace/specialcase.py
--- a/rpython/flowspace/specialcase.py
+++ b/rpython/flowspace/specialcase.py
@@ -1,4 +1,4 @@
-from rpython.flowspace.model import Constant
+from rpython.flowspace.model import Constant, const
 
 SPECIAL_CASES = {}
 
@@ -30,6 +30,14 @@
         "pytest.ini from the root of the PyPy repository into your "
         "own project.")
 
+@register_flow_sc(isinstance)
+def sc_isinstance(space, args):
+    w_instance, w_type = args
+    if w_instance.foldable() and w_type.foldable():
+        return const(isinstance(w_instance.value, w_type.value))
+    return space.frame.do_operation('simple_call', const(isinstance),
+            w_instance, w_type)
+
 # _________________________________________________________________________
 # a simplified version of the basic printing routines, for RPython programs
 class StdOutBuffer:
diff --git a/rpython/translator/simplify.py b/rpython/translator/simplify.py
--- a/rpython/translator/simplify.py
+++ b/rpython/translator/simplify.py
@@ -57,17 +57,6 @@
 
 # ____________________________________________________________
 
-def desugar_isinstance(graph):
-    """Replace isinstance operation with a call to isinstance."""
-    constant_isinstance = Constant(isinstance)
-    for block in graph.iterblocks():
-        for i in range(len(block.operations) - 1, -1, -1):
-            op = block.operations[i]
-            if op.opname == "isinstance":
-                args = [constant_isinstance, op.args[0], op.args[1]]
-                new_op = SpaceOperation("simple_call", args, op.result)
-                block.operations[i] = new_op
-
 def eliminate_empty_blocks(graph):
     """Eliminate basic blocks that do not contain any operations.
     When this happens, we need to replace the preceeding link with the
@@ -975,7 +964,6 @@
 # ____ all passes & simplify_graph
 
 all_passes = [
-    desugar_isinstance,
     eliminate_empty_blocks,
     remove_assertion_errors,
     join_blocks,
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to