[pypy-svn] r67886 - pypy/trunk/pypy/jit/metainterp/test

arigo at codespeak.net arigo at codespeak.net
Fri Sep 25 15:49:47 CEST 2009


Author: arigo
Date: Fri Sep 25 15:49:47 2009
New Revision: 67886

Added:
   pypy/trunk/pypy/jit/metainterp/test/oparser.py.merge.tmp
      - copied, changed from r67880, pypy/trunk/pypy/jit/metainterp/test/oparser.py
Log:
merging of svn+ssh://codespeak.net/svn/pypy/branch/remove-plfbid/pypy/jit/metainterp/test/oparser.py
revisions 67829 to 67880:

    ------------------------------------------------------------------------
    r67862 | pedronis | 2009-09-24 11:40:52 +0200 (Thu, 24 Sep 2009) | 4 lines
    
    (micke, pedronis)  test_finish was failing, fix it by clarifying a bit more the role of AbstractFailDescr
    and introducing a convenience BasicFailDescr
    
    
    ------------------------------------------------------------------------
    r67859 | pedronis | 2009-09-23 20:24:08 +0200 (Wed, 23 Sep 2009) | 3 lines
    
    (arigo, pedronis) getting somewhere in terms of a saner backend interface
    
    
    ------------------------------------------------------------------------
    r67851 | pedronis | 2009-09-23 15:09:23 +0200 (Wed, 23 Sep 2009) | 3 lines
    
    (arigo, pedronis) we don't keep loop around anymore, just loop tokens
    
    
    ------------------------------------------------------------------------
    r67830 | arigo | 2009-09-21 18:11:04 +0200 (Mon, 21 Sep 2009) | 2 lines
    
    A branch in which we try to remove PrepareLoopFromBridgeIsDisabled.
    
    ------------------------------------------------------------------------


Copied: pypy/trunk/pypy/jit/metainterp/test/oparser.py.merge.tmp (from r67880, pypy/trunk/pypy/jit/metainterp/test/oparser.py)
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/test/oparser.py	(original)
+++ pypy/trunk/pypy/jit/metainterp/test/oparser.py.merge.tmp	Fri Sep 25 15:49:47 2009
@@ -4,7 +4,7 @@
 """
 
 from pypy.jit.metainterp.history import TreeLoop, BoxInt, ConstInt,\
-     ConstAddr, ConstObj, ConstPtr, Box
+     ConstAddr, ConstObj, ConstPtr, Box, BasicFailDescr
 from pypy.jit.metainterp.resoperation import rop, ResOperation
 from pypy.jit.metainterp.typesystem import llhelper
 from pypy.rpython.lltypesystem import lltype, llmemory
@@ -48,7 +48,7 @@
             getattr(boxes, name).value = value
 
 class OpParser(object):
-    def __init__(self, descr, cpu, namespace, type_system, boxkinds, jump_targets):
+    def __init__(self, descr, cpu, namespace, type_system, boxkinds, jump_targets, invent_fail_descrs=True):
         self.descr = descr
         self.vars = {}
         self.cpu = cpu
@@ -58,6 +58,7 @@
         self.jumps = []
         self.jump_targets = jump_targets
         self._cache = namespace.setdefault('_CACHE_', {})
+        self.invent_fail_descrs = invent_fail_descrs
 
     def box_for_var(self, elem):
         try:
@@ -142,30 +143,32 @@
         endnum = line.rfind(')')
         if endnum == -1:
             raise ParseError("invalid line: %s" % line)
-        argspec = line[num + 1:endnum]
-        if not argspec.strip():
-            return opnum, [], None
-        if opname == 'debug_merge_point':
-            allargs = [argspec]
-        else:
-            allargs = argspec.split(",")
         args = []
         descr = None
-        poss_descr = allargs[-1].strip()
-        if poss_descr.startswith('descr='):
-            if poss_descr.startswith('descr=<'):
-                descr = None
+        argspec = line[num + 1:endnum]
+        if argspec.strip():
+            if opname == 'debug_merge_point':
+                allargs = [argspec]
             else:
-                descr = self.consts[poss_descr[len('descr='):]]
-            allargs = allargs[:-1]        
-        for arg in allargs:
-            arg = arg.strip()
-            try:
-                args.append(self.getvar(arg))
-            except KeyError:
-                raise ParseError("Unknown var: %s" % arg)
-        if hasattr(descr, '_oparser_uses_descr'):
-            descr._oparser_uses_descr(self, args)
+                allargs = argspec.split(",")
+
+            poss_descr = allargs[-1].strip()
+            if poss_descr.startswith('descr='):
+                if poss_descr.startswith('descr=<'):
+                    descr = None
+                else:
+                    descr = self.consts[poss_descr[len('descr='):]]
+                allargs = allargs[:-1]        
+            for arg in allargs:
+                arg = arg.strip()
+                try:
+                    args.append(self.getvar(arg))
+                except KeyError:
+                    raise ParseError("Unknown var: %s" % arg)
+            if hasattr(descr, '_oparser_uses_descr'):
+                descr._oparser_uses_descr(self, args)
+        if opnum == rop.FAIL and descr is None and self.invent_fail_descrs:
+            descr = BasicFailDescr()
         return opnum, args, descr
 
     def parse_result_op(self, line):
@@ -221,11 +224,9 @@
             raise ParseError("Wrong number of jump targets")
         if self.jump_targets is None:
             for jump in self.jumps:
-                jump.jump_target = loop
+                jump.jump_target = None
         else:
             for jump, jump_target in zip(self.jumps, self.jump_targets):
-                if jump_target == 'self':
-                    jump_target = loop
                 jump.jump_target = jump_target
         loop.operations = ops
         loop.inputargs = inpargs
@@ -260,10 +261,14 @@
         return base_indent, inpargs
 
 def parse(descr, cpu=None, namespace=None, type_system='lltype',
-          boxkinds=None, jump_targets=None):
+          boxkinds=None, jump_targets=None, invent_fail_descrs=True):
     if namespace is None:
         namespace = {}
-    return OpParser(descr, cpu, namespace, type_system, boxkinds, jump_targets).parse()
+    return OpParser(descr, cpu, namespace, type_system, boxkinds, jump_targets, invent_fail_descrs).parse()
+
+def pure_parse(*args, **kwds):
+    kwds['invent_fail_descrs'] = False
+    return parse(*args, **kwds)
 
 def _box_counter_more_than(s):
     if s.isdigit():



More information about the Pypy-commit mailing list