/* Function: tp_set * Attribute modification. * * This is the counterpart of tp_get, it does the same as self[k] = v would do * in actual tinypy code. */ void tp_set(TP,tp_obj self, tp_obj k, tp_obj v) { int type = self.type; if (type == TP_DICT) { TP_META_BEGIN(self,"__set__"); tp_call(tp,meta,tp_params_v(tp,2,k,v)); return; TP_META_END; _tp_dict_set(tp,self.dict.val,k,v); return; } else if (type == TP_LIST) { if (k.type == TP_NUMBER) { _tp_list_set(tp,self.list.val,k.number.val,v,"tp_set"); return; } else if (k.type == TP_NONE) { _tp_list_append(tp,self.list.val,v); return; } else if (k.type == TP_STRING) { if (tp_cmp(tp,tp_string("*"),k) == 0) { tp_params_v(tp,2,self,v); tp_extend(tp); return; } } } tp_raise(,tp_string("(tp_set) TypeError: object does not support item assignment")); }
void tp_set(TP,tp_obj self, tp_obj k, tp_obj v) { int type; type = self.type; if (type == TP_DICT) { _tp_dict_set(tp,self.dict.val,k,v); return; } else if (type == TP_LIST) { if (k.type == TP_NUMBER) { _tp_list_set(tp,self.list.val,k.number.val,v,"tp_set"); return; } else if (k.type == TP_NONE) { _tp_list_append(tp,self.list.val,v); return; } else if (k.type == TP_STRING) { if (strcmp("*",TP_CSTR(k)) == 0) { tp_params_v(tp,2,self,v); tp_extend(tp); return; } } } tp_raise(,"tp_set(%s,%s,%s)",TP_CSTR(self),TP_CSTR(k),TP_CSTR(v)); }