[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