# HG changeset patch # User Paul Boddie # Date 1307057487 -7200 # Node ID a69eb0aac1dec83d98c24ee2543185985c2f9d51 # Parent ffbf3cbb265819ac06014d6f73a7e079d240ad7f Support the tuple callable as a means of making tuples. diff -r ffbf3cbb2658 -r a69eb0aac1de rsvplib.py --- a/rsvplib.py Fri Jun 03 01:30:35 2011 +0200 +++ b/rsvplib.py Fri Jun 03 01:31:27 2011 +0200 @@ -376,14 +376,33 @@ self.machine.save(obj_value.ref + self.instance_data_offset, DataValue(None, new_fragment)) + def builtins_tuple_new(self): + frame = self.local_sp_stack[-1] + + # Get the sequence address. + # The first argument should be empty. + + obj_value = self.frame_stack[frame + 1] + return self._builtins_tuple(obj_value) + def builtins_tuple(self): frame = self.local_sp_stack[-1] - # Get the list address. + # Get the sequence address. obj_value = self.frame_stack[frame] + return self._builtins_tuple(obj_value) - if not self.machine._CheckInstance(obj_value.ref, self.list_class): + def _builtins_tuple(self, obj_value): + + if self.machine._CheckInstance(obj_value.ref, self.tuple_class): + self.machine.result = obj_value + return + + # Reject non-list, non-tuple types. + # NOTE: This should probably accept any sequence. + + elif not self.machine._CheckInstance(obj_value.ref, self.list_class): self.machine.exception = self.machine._MakeObject(self.instance_size, self.type_error_instance) return self.machine.RaiseException() @@ -529,6 +548,13 @@ # Native method implementations: + "__builtins__.basestring.__lt__" : builtins_str_lt, + "__builtins__.basestring.__le__" : builtins_str_le, + "__builtins__.basestring.__gt__" : builtins_str_gt, + "__builtins__.basestring.__ge__" : builtins_str_ge, + "__builtins__.basestring.__eq__" : builtins_str_eq, + "__builtins__.basestring.__ne__" : builtins_str_ne, + "__builtins__.bool.__bool__" : builtins_bool_bool, "__builtins__.int.__add__" : builtins_int_add, "__builtins__.int.__radd__" : builtins_int_add, # NOTE: To be made distinct. "__builtins__.int.__sub__" : builtins_int_sub, @@ -546,18 +572,12 @@ "__builtins__.int.__rand__" : builtins_int_and, "__builtins__.int.__or__" : builtins_int_or, "__builtins__.int.__ror__" : builtins_int_or, - "__builtins__.bool.__bool__" : builtins_bool_bool, "__builtins__.list.__get_single_item__" : builtins_list_get_single_item, "__builtins__.list.__len__" : builtins_list_len, "__builtins__.list.append" : builtins_list_append, + "__builtins__.tuple" : builtins_tuple_new, "__builtins__.tuple.__len__" : builtins_tuple_len, "__builtins__.tuple.__get_single_item__" : builtins_tuple_get_single_item, - "__builtins__.basestring.__lt__" : builtins_str_lt, - "__builtins__.basestring.__le__" : builtins_str_le, - "__builtins__.basestring.__gt__" : builtins_str_gt, - "__builtins__.basestring.__ge__" : builtins_str_ge, - "__builtins__.basestring.__eq__" : builtins_str_eq, - "__builtins__.basestring.__ne__" : builtins_str_ne, # Native initialisers: