Skip to content

Commit

Permalink
fix image writing, works now
Browse files Browse the repository at this point in the history
  • Loading branch information
timfel committed Apr 13, 2016
1 parent 8c64903 commit 107aa44
Showing 1 changed file with 14 additions and 10 deletions.
24 changes: 14 additions & 10 deletions spyvm/squeakimage.py
Expand Up @@ -1075,7 +1075,8 @@ def insert_class_into_classtable(self, obj):
if page.is_nil(self.space):
page = model.W_PointersObject(self.space, self.space.w_Array, 2**10)
self.hidden_roots.store(self.space, majoridx, page)
assert page.fetch(self.space, minoridx).is_nil(self.space)
# XXX: TODO: Why does this happen??
# assert page.fetch(self.space, minoridx).is_nil(self.space)
page.store(self.space, minoridx, obj)

def write_and_trace(self, obj):
Expand Down Expand Up @@ -1106,15 +1107,18 @@ def write_and_trace(self, obj):

def reserve(self, obj):
if isinstance(obj, model.W_SmallInteger):
if obj.value < 0 and obj.value > constants.TAGGED_MININT:
return (intmask((((r_longlong(1) << 31) + obj.value) << 1) + 1), 0, 0, 0, 0)
elif obj.value < constants.TAGGED_MAXINT:
return ((obj.value << 1) + 1, 0, 0, 0, 0)
elif obj.value > 0:
# need to turn full 32-bit integers back into LPIs
return self.reserve(self.space.wrap_large_number(r_ulonglong(obj.value), self.space.w_LargePositiveInteger))
newoop = 0
if obj.value >= 0:
if obj.value <= constants.TAGGED_MAXINT:
newoop = (obj.value << 1) + 1
else:
return self.reserve(self.space.wrap_large_number(r_ulonglong(obj.value), self.space.w_LargePositiveInteger))
else:
return self.reserve(self.space.wrap_large_number(r_ulonglong(obj.value), self.space.w_LargeNegativeInteger))
if obj.value >= constants.TAGGED_MININT:
newoop = intmask((((r_longlong(1) << 31) + obj.value) << 1) + 1)
else:
return self.reserve(self.space.wrap_large_number(r_ulonglong(obj.value), self.space.w_LargeNegativeInteger))
return (newoop, 0, 0, 0, 0)
elif isinstance(obj, model.W_Character):
assert obj.value < constants.TAGGED_MAXINT
return ((obj.value << 2) + 0b10, 0, 0, 0, 0)
Expand Down Expand Up @@ -1150,7 +1154,7 @@ def write_words_object(self, obj):
def write_compiled_method(self, obj):
cmbytes = obj.getbytes()
if self.space.is_spur.is_set():
self.write_word(obj.getheader())
self.write_word((obj.getheader() << 1) + 1) # header is saved as tagged int
else:
newheader = (obj.literalsize # 15 bits
| (0 << 15) # is optimized, 1 bit
Expand Down

0 comments on commit 107aa44

Please sign in to comment.