1.1 --- a/rsvp.py Sat Mar 19 22:46:02 2011 +0100
1.2 +++ b/rsvp.py Sun Mar 20 23:00:45 2011 +0100
1.3 @@ -463,11 +463,7 @@
1.4 # Overwrite context if null.
1.5 context_value = self.value
1.6 source_value = self.source
1.7 - if source_value.context is ReplaceableContext:
1.8 - context = context_value.ref
1.9 - else:
1.10 - context = source_value.context
1.11 - self.save(self.operand, DataValue(context, source_value.ref))
1.12 + self._StoreAddressContext(self.operand, context_value, source_value)
1.13
1.14 def MakeInstance(self):
1.15 size = self.operand
1.16 @@ -545,8 +541,8 @@
1.17 attr_index, static_attr, offset = element
1.18 if attr_index == self.operand:
1.19 if static_attr:
1.20 - self.exception = self._MakeObject(Library.instance_size, self.type_error_instance)
1.21 - return self.RaiseException()
1.22 + self._StoreAddressContext(offset, value, self.source)
1.23 + return
1.24 else:
1.25 self.save(value.ref + offset, self.source)
1.26 return
1.27 @@ -864,6 +860,13 @@
1.28 else:
1.29 return DataValue(context, ref)
1.30
1.31 + def _StoreAddressContext(self, location, context_value, source_value):
1.32 + if source_value.context is ReplaceableContext:
1.33 + context = context_value.ref
1.34 + else:
1.35 + context = source_value.context
1.36 + self.save(location, DataValue(context, source_value.ref))
1.37 +
1.38 # Convenience functions.
1.39
1.40 def machine(program, with_builtins=0, debug=0, abort_upon_exception=0):