1.1 --- a/rsvplib.py Sun Jun 12 00:57:03 2011 +0200
1.2 +++ b/rsvplib.py Sun Jun 12 22:14:36 2011 +0200
1.3 @@ -101,7 +101,8 @@
1.4 # Return the new object.
1.5 # Introduce object as context for the new object.
1.6
1.7 - self.machine.result = DataValue(addr, addr)
1.8 + self.machine.result_context = addr
1.9 + self.machine.result_value = addr
1.10
1.11 def builtins_logical_op(self, operand_class, op):
1.12 frame = self.local_sp_stack[-1]
1.13 @@ -119,7 +120,8 @@
1.14 self.machine._CheckInstance(right_value.ref, operand_class)):
1.15
1.16 notimpl = self.constants[NotImplemented]
1.17 - self.machine.result = DataValue(notimpl, notimpl)
1.18 + self.machine.result_context = notimpl
1.19 + self.machine.result_value = notimpl
1.20 return
1.21
1.22 left_data = left_value.ref + self.instance_data_offset
1.23 @@ -129,9 +131,11 @@
1.24 # NOTE: The data is considered ready to use.
1.25
1.26 if op(self.machine.load(left_data), self.machine.load(right_data)):
1.27 - self.machine.result = DataValue(self.constants[True], self.constants[True])
1.28 + self.machine.result_context = self.constants[True]
1.29 + self.machine.result_value = self.constants[True]
1.30 else:
1.31 - self.machine.result = DataValue(self.constants[False], self.constants[False])
1.32 + self.machine.result_context = self.constants[False]
1.33 + self.machine.result_value = self.constants[False]
1.34
1.35 # Operators.
1.36 # Although this takes a short-cut by using the operator module, testing is
1.37 @@ -210,9 +214,11 @@
1.38 # NOTE: The data is considered ready to use.
1.39
1.40 if self.machine.load(left_data) != 0:
1.41 - self.machine.result = DataValue(self.constants[True], self.constants[True])
1.42 + self.machine.result_context = self.constants[True]
1.43 + self.machine.result_value = self.constants[True]
1.44 else:
1.45 - self.machine.result = DataValue(self.constants[False], self.constants[False])
1.46 + self.machine.result_context = self.constants[False]
1.47 + self.machine.result_value = self.constants[False]
1.48
1.49 def builtins_int_neg(self):
1.50 frame = self.local_sp_stack[-1]
1.51 @@ -241,7 +247,8 @@
1.52 # Return the new object.
1.53 # Introduce object as context for the new object.
1.54
1.55 - self.machine.result = DataValue(addr, addr)
1.56 + self.machine.result_context = addr
1.57 + self.machine.result_value = addr
1.58
1.59 # Various built-in methods.
1.60
1.61 @@ -251,7 +258,8 @@
1.62 # Get operands addresses.
1.63
1.64 left_value = self.frame_stack[frame]
1.65 - self.machine.result = DataValue(left_value.ref, left_value.ref)
1.66 + self.machine.result_context = left_value.ref
1.67 + self.machine.result_value = left_value.ref
1.68
1.69 def builtins_list_new(self):
1.70 frame = self.local_sp_stack[-1]
1.71 @@ -301,7 +309,9 @@
1.72
1.73 # Get the item itself.
1.74
1.75 - self.machine.result = self.machine.load(fragment.ref + self.fragment_data_offset + item_pos)
1.76 + data = self.machine.load(fragment.ref + self.fragment_data_offset + item_pos)
1.77 + self.machine.result_context = data.context
1.78 + self.machine.result_value = data.ref
1.79
1.80 def builtins_list_len(self):
1.81 frame = self.local_sp_stack[-1]
1.82 @@ -331,7 +341,8 @@
1.83 # Return the new object.
1.84 # Introduce object as context for the new object.
1.85
1.86 - self.machine.result = DataValue(addr, addr)
1.87 + self.machine.result_context = addr
1.88 + self.machine.result_value = addr
1.89
1.90 def builtins_list_append(self):
1.91 frame = self.local_sp_stack[-1]
1.92 @@ -399,7 +410,8 @@
1.93 def _builtins_tuple(self, obj_value):
1.94
1.95 if self.machine._CheckInstance(obj_value.ref, self.tuple_class):
1.96 - self.machine.result = obj_value
1.97 + self.machine.result_context = obj_value.context
1.98 + self.machine.result_value = obj_value.ref
1.99 return
1.100
1.101 # Reject non-list, non-tuple types.
1.102 @@ -430,7 +442,8 @@
1.103 # Return the new object.
1.104 # Introduce object as context for the new object.
1.105
1.106 - self.machine.result = DataValue(addr, addr)
1.107 + self.machine.result_context = addr
1.108 + self.machine.result_value = addr
1.109
1.110 def builtins_tuple_len(self):
1.111 frame = self.local_sp_stack[-1]
1.112 @@ -456,7 +469,8 @@
1.113 # Return the new object.
1.114 # Introduce object as context for the new object.
1.115
1.116 - self.machine.result = DataValue(addr, addr)
1.117 + self.machine.result_context = addr
1.118 + self.machine.result_value = addr
1.119
1.120 def builtins_tuple_get_single_item(self):
1.121 frame = self.local_sp_stack[-1]
1.122 @@ -484,7 +498,9 @@
1.123
1.124 # Get the item.
1.125
1.126 - self.machine.result = self.machine.load(obj_value.ref + self.instance_data_offset + item_pos)
1.127 + data = self.machine.load(obj_value.ref + self.instance_data_offset + item_pos)
1.128 + self.machine.result_context = data.context
1.129 + self.machine.result_value = data.ref
1.130
1.131 def builtins_object_init(self):
1.132 pass
1.133 @@ -514,13 +530,13 @@
1.134 attr_index, static_attr, offset = element
1.135 if attr_index == index:
1.136 if static_attr:
1.137 - loaded_value = self.machine.load(offset) # offset is address of class/module attribute
1.138 - if data.attrcode is None: # absent attrcode == class/module
1.139 - self.machine.result = loaded_value
1.140 - else:
1.141 - self.machine.result = self.machine._LoadAddressContextCond(loaded_value.context, loaded_value.ref, obj_value.ref)
1.142 + loaded_data = self.machine.load(offset) # offset is address of class/module attribute
1.143 + if data.attrcode is not None: # absent attrcode == class/module
1.144 + loaded_data = self.machine._LoadAddressContextCond(loaded_data.context, loaded_data.ref, obj_value.ref)
1.145 else:
1.146 - self.machine.result = self.machine.load(obj_value.ref + offset)
1.147 + loaded_data = self.machine.load(obj_value.ref + offset)
1.148 + self.machine.result_context = loaded_data.context
1.149 + self.machine.result_value = loaded_data.ref
1.150 return
1.151
1.152 self.machine.exception = self.machine._MakeObject(self.instance_size, self.attr_error_instance)
1.153 @@ -535,9 +551,11 @@
1.154 cls_value = self.frame_stack[frame + 1]
1.155
1.156 if self.machine._CheckInstance(obj_value.ref, cls_value.ref):
1.157 - self.machine.result = DataValue(self.constants[True], self.constants[True])
1.158 + self.machine.result_context = self.constants[True]
1.159 + self.machine.result_value = self.constants[True]
1.160 else:
1.161 - self.machine.result = DataValue(self.constants[False], self.constants[False])
1.162 + self.machine.result_context = self.constants[False]
1.163 + self.machine.result_value = self.constants[False]
1.164
1.165 def builtins_print(self):
1.166 # NOTE: Do nothing for now.