Skip to content

Commit

Permalink
fix translation with immutability plugin
Browse files Browse the repository at this point in the history
  • Loading branch information
timfel committed Mar 6, 2017
1 parent 1ad1975 commit 588e9e6
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 6 deletions.
11 changes: 9 additions & 2 deletions rsqueakvm/model/pointers.py
Original file line number Diff line number Diff line change
Expand Up @@ -218,8 +218,8 @@ def pointers_become_one_way(self, space, from_w, to_w):

def clone(self, space):
my_pointers = self.fetch_all(space)
w_result = self.__class__(space, self.getclass(space),
len(my_pointers))
w_result = W_PointersObject(space, self.getclass(space),
len(my_pointers))
w_result.store_all(space, my_pointers)
return w_result

Expand Down Expand Up @@ -272,3 +272,10 @@ def _become(self, w_other):
W_PointersObject._become(self, w_other)
self._swap_inline_fields(w_other)
self._size, w_other._size = w_other._size, self._size

def clone(self, space):
my_pointers = self.fetch_all(space)
w_result = W_FixedPointersObject(space, self.getclass(space),
len(my_pointers))
w_result.store_all(space, my_pointers)
return w_result
12 changes: 9 additions & 3 deletions rsqueakvm/plugins/immutability/pointers.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ class W_AbstractImmutable_PointersObject(W_PointersObject):
repr_classname = ('%s_AbstractImmutable' %
W_PointersObject.repr_classname)

def __init__(self, space, w_cls):
def __init__(self, space, w_cls, pointers_w):
"""
Initialize immutable pointers object, but avoid initializing storage
by calling `W_AbstractObjectWithIdentityHash.__init__(self)` instead of
Expand Down Expand Up @@ -68,6 +68,12 @@ def fetch(self, space, n0):
""":raises: NotImplementedError"""
raise NotImplementedError('abstract base class')

def clone(self, space):

This comment has been minimized.

Copy link
@krono

krono Mar 14, 2017

Member

Isn't this not_rpython?

my_pointers = self.fetch_all(space)
w_result = self.__class__(space, self.getclass(space), my_pointers)
w_result.store_all(space, my_pointers)
return w_result


class W_Immutable_PointersObject(W_AbstractImmutable_PointersObject):
"""`W_PointersObject` subclass with immutable storage of variable size."""
Expand All @@ -77,7 +83,7 @@ class W_Immutable_PointersObject(W_AbstractImmutable_PointersObject):
staticmethod, rerased.new_erasing_pair('storage_eraser'))

def __init__(self, space, w_cls, pointers_w):
W_AbstractImmutable_PointersObject.__init__(self, space, w_cls)
W_AbstractImmutable_PointersObject.__init__(self, space, w_cls, pointers_w)
self._storage = self.erase(pointers_w)

def size(self):
Expand Down Expand Up @@ -105,7 +111,7 @@ class W_FixedImmutable_PointersObject(W_AbstractImmutable_PointersObject):
repr_classname = cls_name

def __init__(self, space, w_cls, pointers_w):
W_AbstractImmutable_PointersObject.__init__(self, space, w_cls)
W_AbstractImmutable_PointersObject.__init__(self, space, w_cls, pointers_w)
for x in storage_iter:
setattr(self, STORAGE_ATTR_TEMPLATE % x, pointers_w[x])

Expand Down
2 changes: 1 addition & 1 deletion rsqueakvm/storage_classes.py
Original file line number Diff line number Diff line change
Expand Up @@ -251,7 +251,7 @@ def new(self, extrasize=0):
return w_new

def make_pointers_object(self, w_cls, size):
if self.isvariable():
if self.isvariable() or size > 16:
return W_PointersObject(self.space, w_cls, size)
else:
assert size == self.instsize()
Expand Down

0 comments on commit 588e9e6

Please sign in to comment.