[pypy-commit] pypy default: don't store arity twice, move bool results as flag on class

cfbolz noreply at buildbot.pypy.org
Mon Apr 1 22:19:08 CEST 2013


Author: Carl Friedrich Bolz <cfbolz at gmx.de>
Branch: 
Changeset: r62913:2619f89c28cc
Date: 2013-04-01 22:09 +0200
http://bitbucket.org/pypy/pypy/changeset/2619f89c28cc/

Log:	don't store arity twice, move bool results as flag on class

diff --git a/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py b/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
@@ -7,7 +7,7 @@
 from rpython.jit.metainterp.history import AbstractDescr, ConstInt, BoxInt
 from rpython.jit.metainterp.history import TreeLoop
 from rpython.jit.metainterp import compile, resume
-from rpython.jit.metainterp.resoperation import rop, opname, opargnum
+from rpython.jit.metainterp.resoperation import rop, opname, oparity
 from rpython.jit.metainterp.optimizeopt.test.test_optimizebasic import FakeMetaInterpStaticData
 
 def test_build_opt_chain():
@@ -188,7 +188,7 @@
             if 'FLOAT' in op:
                 continue
             args = []
-            for _ in range(opargnum[opnum]):
+            for _ in range(oparity[opnum]):
                 args.append(random.randrange(1, 20))
             ops = """
             []
diff --git a/rpython/jit/metainterp/resoperation.py b/rpython/jit/metainterp/resoperation.py
--- a/rpython/jit/metainterp/resoperation.py
+++ b/rpython/jit/metainterp/resoperation.py
@@ -21,6 +21,7 @@
     name = ""
     pc = 0
     opnum = 0
+    _cls_has_bool_result = False
 
     _attrs_ = ('result',)
 
@@ -172,12 +173,7 @@
         return rop._FINAL_FIRST <= self.getopnum() <= rop._FINAL_LAST
 
     def returns_bool_result(self):
-        opnum = self.getopnum()
-        if we_are_translated():
-            assert opnum >= 0
-        elif opnum < 0:
-            return False     # for tests
-        return opboolresult[opnum]
+        return self._cls_has_bool_result
 
 
 # ===================
@@ -550,11 +546,9 @@
     pass
 
 opclasses = []   # mapping numbers to the concrete ResOp class
-opargnum  = []   # mapping numbers to number or args (or -1)
 opname = {}      # mapping numbers to the original names, for debugging
 oparity = []     # mapping numbers to the arity of the operation or -1
 opwithdescr = [] # mapping numbers to a flag "takes a descr"
-opboolresult= [] # mapping numbers to a flag "returns a boolean"
 
 
 def setup(debug_print=False):
@@ -576,14 +570,13 @@
         if not name.startswith('_'):
             opname[i] = name
             cls = create_class_for_op(name, i, arity, withdescr)
+            cls._cls_has_bool_result = boolresult
         else:
             cls = None
         opclasses.append(cls)
-        opargnum.append(arity)
         oparity.append(arity)
         opwithdescr.append(withdescr)
-        opboolresult.append(boolresult)
-    assert len(opclasses)==len(oparity)==len(opwithdescr)==len(opboolresult)==len(_oplist)
+    assert len(opclasses)==len(oparity)==len(opwithdescr)==len(_oplist)
 
 def get_base_class(mixin, base):
     try:


More information about the pypy-commit mailing list