Author: Anton Gulenko <[email protected]>
Branch: storage-display-refactoring
Changeset: r933:97b7b7828d10
Date: 2014-07-21 19:19 +0200
http://bitbucket.org/pypy/lang-smalltalk/changeset/97b7b7828d10/

Log:    Made image_name available from object space.

diff --git a/spyvm/interpreter.py b/spyvm/interpreter.py
--- a/spyvm/interpreter.py
+++ b/spyvm/interpreter.py
@@ -23,7 +23,7 @@
 
 
 class Interpreter(object):
-    _immutable_fields_ = ["space", "image", "image_name",
+    _immutable_fields_ = ["space", "image",
                           "interrupt_counter_size",
                           "startup_time", "evented", "interrupts"]
 
@@ -34,12 +34,11 @@
         get_printable_location=get_printable_location
     )
 
-    def __init__(self, space, image=None, image_name="",
+    def __init__(self, space, image=None,
                 trace=False, evented=True, interrupts=True):
         # === Initialize immutable variables
         self.space = space
         self.image = image
-        self.image_name = image_name
         if image:
             self.startup_time = image.startup_time
         else:
@@ -1009,9 +1008,8 @@
 # in order to enable tracing/jumping for message sends etc.
 def debugging():
     def stepping_debugger_init(original):
-        def meth(self, space, image=None, image_name="", trace=False):
-            return_value = original(self, space, image=image,
-                                    image_name=image_name, trace=trace)
+        def meth(self, space, image=None, trace=False):
+            return_value = original(self, space, image=image, trace=trace)
             # ##############################################################
 
             self.message_stepping = False
diff --git a/spyvm/objspace.py b/spyvm/objspace.py
--- a/spyvm/objspace.py
+++ b/spyvm/objspace.py
@@ -14,8 +14,7 @@
         self.flag = [set_initially]
     
     def is_set(self):
-        flag = jit.promote(self.flag[0])
-        return flag
+        return jit.promote(self.flag[0])
     
     def set(self):
         self.flag[0] = True
@@ -26,6 +25,16 @@
     def set_to(self, flag):
         self.flag[0] = flag
 
+class ConstantString(object):
+    def __init__(self):
+        self.value = [""]
+    
+    def get(self):
+        return jit.promote(self.value[0])
+    
+    def set(self, value):
+        self.value[0] = value
+
 class ObjSpace(object):
     def __init__(self):
         # If this flag is set, then no optimizing storage strategies will be 
used.
@@ -38,8 +47,8 @@
         
         self.classtable = {}
         self.objtable = {}
-        self._executable_path = [""] # XXX: we cannot set the attribute
-                                  # directly on the frozen objectspace
+        self._executable_path = ConstantString()
+        self._image_name = ConstantString()
         
         # Create the nil object.
         # Circumvent the constructor because nil is already referenced there.
@@ -62,11 +71,12 @@
                     break
         return rpath.rabspath(executable)
 
-    def runtime_setup(self, executable):
+    def runtime_setup(self, executable, image_name):
         fullpath = rpath.rabspath(self.find_executable(executable))
         i = fullpath.rfind(os.path.sep) + 1
         assert i > 0
-        self._executable_path[0] = fullpath[:i]
+        self._executable_path.set(fullpath[:i])
+        self._image_name.set(image_name)
 
     def populate_special_objects(self, specials):
         for name, idx in constants.objects_in_special_object_table.items():
@@ -77,7 +87,10 @@
         self.classtable["w_Metaclass"] = self.w_SmallInteger.w_class.w_class
         
     def executable_path(self):
-        return self._executable_path[0]
+        return self._executable_path.get()
+    
+    def image_name(self):
+        return self._image_name.get()
     
     def add_bootstrap_class(self, name, cls):
         self.classtable[name] = cls
diff --git a/spyvm/primitives.py b/spyvm/primitives.py
--- a/spyvm/primitives.py
+++ b/spyvm/primitives.py
@@ -982,7 +982,7 @@
 def func(interp, s_frame, argument_count):
     if argument_count == 0:
         s_frame.pop()
-        return interp.space.wrap_string(interp.image_name)
+        return interp.space.wrap_string(interp.space.image_name())
     elif argument_count == 1:
         pass # XXX
     raise PrimitiveFailedError
diff --git a/spyvm/test/test_primitives.py b/spyvm/test/test_primitives.py
--- a/spyvm/test/test_primitives.py
+++ b/spyvm/test/test_primitives.py
@@ -47,7 +47,8 @@
         frame = context
         for i in range(len(stack)):
             frame.as_context_get_shadow(space).push(stack[i])
-    interp = TestInterpreter(space, image_name=IMAGENAME)
+    interp = TestInterpreter(space)
+    interp.space._image_name.set(IMAGENAME)
     return interp, frame, len(stack)
 
 def _prim(space, code, stack, context = None):
@@ -680,7 +681,7 @@
 
     closure = space.newClosure(w_frame, 4, 0, [])
     s_frame = w_frame.as_methodcontext_get_shadow(space)
-    interp = TestInterpreter(space, image_name=IMAGENAME)
+    interp = TestInterpreter(space)
     interp._loop = True
 
     try:
diff --git a/targetimageloadingsmalltalk.py b/targetimageloadingsmalltalk.py
--- a/targetimageloadingsmalltalk.py
+++ b/targetimageloadingsmalltalk.py
@@ -161,10 +161,10 @@
     # Load & prepare image and environment
     image_reader = squeakimage.reader_for_image(space, 
squeakimage.Stream(data=imagedata))
     image = create_image(space, image_reader)
-    interp = interpreter.Interpreter(space, image, image_name=path,
+    interp = interpreter.Interpreter(space, image,
                 trace=trace, evented=not poll,
                 interrupts=interrupts)
-    space.runtime_setup(argv[0])
+    space.runtime_setup(argv[0], path)
     print_error("") # Line break after image-loading characters
     
     # Create context to be executed
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to