[pypy-svn] r33159 - in pypy/dist/pypy/translator/cli: . src src/stub test

antocuni at codespeak.net antocuni at codespeak.net
Wed Oct 11 13:59:32 CEST 2006


Author: antocuni
Date: Wed Oct 11 13:59:29 2006
New Revision: 33159

Modified:
   pypy/dist/pypy/translator/cli/prebuiltnodes.py
   pypy/dist/pypy/translator/cli/src/pypylib.cs
   pypy/dist/pypy/translator/cli/src/stub/main.il
   pypy/dist/pypy/translator/cli/test/test_dict.py
Log:
Make ll_go_next raise RuntimeError when the dictionary we are
iterating over has been changed.



Modified: pypy/dist/pypy/translator/cli/prebuiltnodes.py
==============================================================================
--- pypy/dist/pypy/translator/cli/prebuiltnodes.py	(original)
+++ pypy/dist/pypy/translator/cli/prebuiltnodes.py	Wed Oct 11 13:59:29 2006
@@ -8,6 +8,28 @@
         ilasm.end_class()
         ilasm.end_namespace()
 
+def raise_RuntimeError():
+    raise RuntimeError
+
+HELPERS = [(raise_RuntimeError, [])]
+
+def _build_helpers(translator, db):
+    functions = set()
+    for fn, annotation in HELPERS:
+        functions.add(fn)
+        translator.annotator.build_types(fn, annotation)
+    translator.rtyper.specialize_more_blocks()
+
+    res = []
+    for graph in translator.graphs:
+        func = getattr(graph, 'func', None)
+        if func in functions:
+            res.append(Helper(db, graph, func.func_name))
+    return res
+
+
 def get_prebuilt_nodes(translator, db):
+    prebuilt_nodes = _build_helpers(translator, db)
     raise_OSError_graph = translator.rtyper.exceptiondata.fn_raise_OSError.graph
-    return [Helper(db, raise_OSError_graph, 'raise_OSError')]
+    prebuilt_nodes.append(Helper(db, raise_OSError_graph, 'raise_OSError'))
+    return prebuilt_nodes

Modified: pypy/dist/pypy/translator/cli/src/pypylib.cs
==============================================================================
--- pypy/dist/pypy/translator/cli/src/pypylib.cs	(original)
+++ pypy/dist/pypy/translator/cli/src/pypylib.cs	Wed Oct 11 13:59:29 2006
@@ -479,7 +479,16 @@
             this.it = it;
         }
 
-        public bool ll_go_next() { return it.MoveNext(); }
+        public bool ll_go_next() { 
+            try {
+                return it.MoveNext();
+            }
+            catch(InvalidOperationException e) {
+                Helpers.raise_RuntimeError();
+                return false;
+            }
+        }
+
         public TKey ll_current_key() { return it.Current.Key; }
         public TValue ll_current_value() { return it.Current.Value; }
     }

Modified: pypy/dist/pypy/translator/cli/src/stub/main.il
==============================================================================
--- pypy/dist/pypy/translator/cli/src/stub/main.il	(original)
+++ pypy/dist/pypy/translator/cli/src/stub/main.il	Wed Oct 11 13:59:29 2006
@@ -34,5 +34,13 @@
             throw
             ret
         }
+
+        .method public static void raise_RuntimeError() il managed
+        {
+            ldstr "This is only a stub, it should not be called"
+            newobj instance void class [mscorlib]System.ApplicationException::.ctor(string)
+            throw
+            ret
+        }
     }
 }

Modified: pypy/dist/pypy/translator/cli/test/test_dict.py
==============================================================================
--- pypy/dist/pypy/translator/cli/test/test_dict.py	(original)
+++ pypy/dist/pypy/translator/cli/test/test_dict.py	Wed Oct 11 13:59:29 2006
@@ -1,10 +1,10 @@
 import py
 from pypy.translator.cli.test.runtest import CliTest
-from pypy.rpython.test.test_rdict import BaseTestRdict
+from pypy.rpython.test.test_rdict import TestOOtype as _TestOOtype
 from pypy.rpython.test.test_remptydict import BaseTestRemptydict
 from pypy.rpython.test.test_rconstantdict import BaseTestRconstantdict
 
-class TestCliDict(CliTest, BaseTestRdict):
+class TestCliDict(CliTest, _TestOOtype):
     def test_dict_of_void(self):
         class A: pass
         def f():



More information about the Pypy-commit mailing list