Author: Anton Gulenko <[email protected]>
Branch: storage
Changeset: r736:5713bb4e171f
Date: 2014-04-01 11:53 +0200
http://bitbucket.org/pypy/lang-smalltalk/changeset/5713bb4e171f/
Log: Fixed compilation.
diff --git a/spyvm/interpreter.py b/spyvm/interpreter.py
--- a/spyvm/interpreter.py
+++ b/spyvm/interpreter.py
@@ -18,7 +18,7 @@
def get_printable_location(pc, self, method):
bc = ord(method.bytes[pc])
- name = method.get_identifier_string()
+ name = method.safe_identifier_string()
return '%d: [%s]%s (%s)' % (pc, hex(bc), BYTECODE_NAMES[bc], name)
@@ -356,7 +356,7 @@
receiver, receiverclassshadow):
if interp.should_trace():
print "%sSending selector #%s to %r with: %r" % (
- interp._last_indent, w_selector.as_string(), receiver,
+ interp._last_indent, w_selector.str_content(), receiver,
[self.peek(argcount-1-i) for i in range(argcount)])
assert argcount >= 0
@@ -402,7 +402,7 @@
#
######################################################################
if interp.trace:
- print '%s%s missing: #%s' % (interp.padding('#'),
s_frame.short_str(), w_selector.as_string())
+ print '%s%s missing: #%s' % (interp.padding('#'),
s_frame.short_str(), w_selector.str_content())
if not objectmodel.we_are_translated():
import pdb; pdb.set_trace()
@@ -417,7 +417,7 @@
if interp.trace:
print "%s-> primitive %d \t(in %s, named #%s)" % (
' ' * (interp.max_stack_depth - interp.remaining_stack_depth),
- code, self.w_method().get_identifier_string(),
w_selector.as_string())
+ code, self.w_method().get_identifier_string(),
w_selector.str_content())
try:
# note: argcount does not include rcvr
return func(interp, self, argcount, w_method)
@@ -427,7 +427,7 @@
' ' * (interp.max_stack_depth - interp.remaining_stack_depth),)
if interp.should_trace(True):
- print "PRIMITIVE FAILED: %d #%s" % (w_method.primitive,
w_selector.as_string())
+ print "PRIMITIVE FAILED: %d #%s" % (w_method.primitive,
w_selector.str_content())
raise e
@@ -895,19 +895,19 @@
receiver, receiverclassshadow):
options = [False]
def next(): interp.message_stepping = True; print 'Now continue
(c).'
- def over(): options[0] = True; print 'Skipping #%s. You still
need to continue(c).' % w_selector.as_string()
+ def over(): options[0] = True; print 'Skipping #%s. You still
need to continue(c).' % w_selector.str_content()
def pstack(): print s_context.print_stack()
if interp.message_stepping:
if argcount == 0:
print "-> %s #%s" % (receiver.as_repr_string(),
- w_selector.as_string())
+ w_selector.str_content())
elif argcount == 1:
print "-> %s #%s %s" % (receiver.as_repr_string(),
- w_selector.as_string(),
+ w_selector.str_content(),
s_context.peek(0).as_repr_string())
else:
print "-> %s #%s %r" % (receiver.as_repr_string(),
- w_selector.as_string(),
+ w_selector.str_content(),
[s_context.peek(argcount-1-i) for i in
range(argcount)])
import pdb; pdb.set_trace()
if options[0]:
diff --git a/spyvm/model.py b/spyvm/model.py
--- a/spyvm/model.py
+++ b/spyvm/model.py
@@ -817,7 +817,7 @@
return self._size
def str_content(self):
- return "'%s'" % self.as_string()
+ return self.as_string()
def as_string(self):
if self.bytes is not None:
@@ -1301,6 +1301,7 @@
if w_candidate.is_class(space):
w_compiledin = w_candidate
self.w_compiledin = w_compiledin
+ assert isinstance(w_compiledin, W_PointersObject)
return w_compiledin
# === Object Access ===
@@ -1419,6 +1420,19 @@
def get_identifier_string(self):
return "%s >> #%s" % (self.guess_containing_classname(),
self._likely_methodname)
+ def safe_identifier_string(self):
+ if not we_are_translated():
+ return self.get_identifier_string()
+ # This has the same functionality as get_identifier_string, but
without calling any
+ # methods in order to avoid side effects that prevent translation.
+ w_class = self.w_compiledin
+ if isinstance(w_class, W_PointersObject):
+ from spyvm.shadow import ClassShadow
+ s_class = w_class.shadow
+ if isinstance(s_class, ClassShadow):
+ return "%s >> #%s" % (s_class.getname(),
self._likely_methodname)
+ return "#%s" % self._likely_methodname
+
class DetachingShadowError(Exception):
def __init__(self, old_shadow, new_shadow_class):
self.old_shadow = old_shadow
diff --git a/spyvm/storage_statistics.py b/spyvm/storage_statistics.py
--- a/spyvm/storage_statistics.py
+++ b/spyvm/storage_statistics.py
@@ -73,7 +73,7 @@
sizes = self.stats[key]
sum = 0
for s in sizes: sum += s
- print "%s: %d times, avg size: %f" % (self.key_string(key),
len(sizes), sum/len(sizes))
+ print "%s: %d times, avg size: %f" % (self.key_string(key),
len(sizes), float(sum)/len(sizes))
if self.do_stats_sizes:
print " All sizes: %s" % sizes
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit