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