Author: Anton Gulenko <[email protected]>
Branch: storage
Changeset: r773:a9d2b6743c2c
Date: 2014-04-03 13:38 +0200
http://bitbucket.org/pypy/lang-smalltalk/changeset/a9d2b6743c2c/

Log:    Extracted util-function for tests.

diff --git a/spyvm/test/jit.py b/spyvm/test/jit.py
--- a/spyvm/test/jit.py
+++ b/spyvm/test/jit.py
@@ -13,37 +13,16 @@
 
 from rpython.jit.metainterp.test.test_ajit import LLJitMixin
 
-from .util import bootstrap_class
+from .util import import_bytecodes
 from spyvm import model, interpreter, primitives, shadow
 from spyvm import objspace, squeakimage
 from spyvm.tool.analyseimage import create_squeakimage, create_testimage
 from rpython.rlib.streamio import open_file_as_stream
 
+import_bytecodes(__name__)
+
 space = objspace.ObjSpace()
 
-# expose the bytecode's values as global constants.
-# Bytecodes that have a whole range are exposed as global functions:
-# call them with an argument 'n' to get the bytecode number 'base + n'.
-# XXX hackish
-def setup():
-    def make_getter(entry):
-        def get_opcode_chr(n):
-            opcode = entry[0] + n
-            assert entry[0] <= opcode <= entry[1]
-            return chr(opcode)
-        return get_opcode_chr
-    for entry in interpreter.BYTECODE_RANGES:
-        name = entry[-1]
-        if len(entry) == 2:     # no range
-            globals()[name] = chr(entry[0])
-        else:
-            globals()[name] = make_getter(entry)
-setup()
-
-#
-# Tests
-#
-
 sys.setrecursionlimit(5000)
 
 class TestLLtype(LLJitMixin):
diff --git a/spyvm/test/test_interpreter.py b/spyvm/test/test_interpreter.py
--- a/spyvm/test/test_interpreter.py
+++ b/spyvm/test/test_interpreter.py
@@ -1,9 +1,11 @@
 import py, operator, sys
 from spyvm import model, interpreter, primitives, shadow, objspace, wrapper, 
constants
-from .util import create_space_interp, copy_to_module, cleanup_module
+from .util import create_space_interp, copy_to_module, cleanup_module, 
import_bytecodes
 from spyvm.wrapper import PointWrapper
 from spyvm.conftest import option
 
+import_bytecodes(__name__)
+
 def setup_module():
     space, interp = create_space_interp(bootstrap = True)
     w = space.w
@@ -36,25 +38,6 @@
             exp = w(exp)
         assert list[i].is_same_object(exp)
 
-# expose the bytecode's values as global constants.
-# Bytecodes that have a whole range are exposed as global functions:
-# call them with an argument 'n' to get the bytecode number 'base + n'.
-# XXX hackish
-def setup():
-    def make_getter(entry):
-        def get_opcode_chr(n):
-            opcode = entry[0] + n
-            assert entry[0] <= opcode <= entry[1]
-            return chr(opcode)
-        return get_opcode_chr
-    for entry in interpreter.BYTECODE_RANGES:
-        name = entry[-1]
-        if len(entry) == 2:     # no range
-            globals()[name] = chr(entry[0])
-        else:
-            globals()[name] = make_getter(entry)
-setup()
-
 def run_with_faked_primitive_methods(methods, func, active_context=None):
 
     # Install faked compiled methods that just invoke the primitive:
diff --git a/spyvm/test/util.py b/spyvm/test/util.py
--- a/spyvm/test/util.py
+++ b/spyvm/test/util.py
@@ -54,6 +54,24 @@
         del mod._copied_objects_
         import gc; gc.collect()
 
+def import_bytecodes(module_name):
+    # expose the bytecode's values as global constants.
+    # Bytecodes that have a whole range are exposed as global functions:
+    # call them with an argument 'n' to get the bytecode number 'base + n'.
+    mod = sys.modules[module_name]
+    def make_getter(entry):
+        def get_opcode_chr(n):
+            opcode = entry[0] + n
+            assert entry[0] <= opcode <= entry[1]
+            return chr(opcode)
+        setattr(mod, name, get_opcode_chr)
+    for entry in interpreter.BYTECODE_RANGES:
+        name = entry[-1]
+        if len(entry) == 2:     # no range
+            setattr(mod, name, chr(entry[0]))
+        else:
+            make_getter(entry)
+
 class BootstrappedObjSpace(objspace.ObjSpace):
     
     def bootstrap(self):
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to