Changeset 529
- Timestamp:
- 02/04/09 22:01:44 (3 years ago)
- File:
-
- 1 edited
-
interpreter/trunk/modules/System/list.c (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
interpreter/trunk/modules/System/list.c
r523 r529 105 105 return; \ 106 106 } 107 108 KITE_CLASS_METHOD(List_add) { 107 KITE_CLASS_METHOD(List_lshift) { 109 108 kite_object_t *cur = this, *rhs; 110 109 kite_object_t *secondhalf; 111 110 112 111 rhs = kite_list_object(thd, args); 113 112 secondhalf = rhs->builtin_data.listvalue.car; 114 113 115 114 if (cur->builtin_data.listvalue.car == NULL) { 116 115 cur->builtin_data.listvalue.car = kite_reference_object(secondhalf); … … 118 117 kite_vm_return(thd, this); 119 118 } 120 119 121 120 while(cur->builtin_data.listvalue.cdr != NULL) { 122 121 cur = cur->builtin_data.listvalue.cdr; 123 122 } 124 123 125 124 if (secondhalf->type == OBJ_LIST) { 126 125 secondhalf = kite_reference_object(secondhalf); … … 130 129 kite_reference_object(rhs->builtin_data.listvalue.car); 131 130 } 132 131 133 132 cur->builtin_data.listvalue.cdr = secondhalf; 134 133 kite_dereference_object(rhs); 135 134 kite_vm_return(thd, this); 135 } 136 137 KITE_CLASS_METHOD(List_add) { 138 kite_object_t *cur = this, *rhs; 139 kite_object_t *secondhalf, *new; 140 141 new = kite_new_list(thd); 142 143 rhs = kite_list_object(thd, args); 144 secondhalf = rhs->builtin_data.listvalue.car; 145 146 if (secondhalf->type == OBJ_LIST) { 147 secondhalf = kite_reference_object(secondhalf); 148 } else { 149 secondhalf = kite_new_list(thd); 150 secondhalf->builtin_data.listvalue.car = 151 kite_reference_object(rhs->builtin_data.listvalue.car); 152 } 153 154 if (cur->builtin_data.listvalue.car == NULL) { 155 if (secondhalf->type == OBJ_LIST) 156 new = kite_reference_object(secondhalf); 157 else 158 new->builtin_data.listvalue.car = kite_reference_object(secondhalf); 159 kite_dereference_object(rhs); 160 kite_vm_return(thd, new); 161 return; 162 } 163 164 while (cur && cur->builtin_data.listvalue.car) { 165 kite_append_list(thd,new,cur->builtin_data.listvalue.car); 166 cur = cur->builtin_data.listvalue.cdr; 167 } 168 cur = new; 169 while(cur->builtin_data.listvalue.cdr != NULL) { 170 cur = cur->builtin_data.listvalue.cdr; 171 } 172 173 cur->builtin_data.listvalue.cdr = secondhalf; 174 175 kite_dereference_object(rhs); 176 kite_vm_return(thd, new); 136 177 } 137 178 … … 578 619 kite_add_operator(thread, newclass, OP_ADD, 579 620 kite_new_method_compiled_with_docs(thread, List_add, 580 "Adds item to the end of the list.", 1, 621 kite_add_operator(thread, newclass, OP_LEFT_SHIFT, 622 kite_new_method_compiled_with_docs(thread, List_lshift, 623 "Adds item to the end of the list.", 1, 624 "item", "Item to add.")); 625 626 "Creates a new list that is the combination of the two operands.", 1, 581 627 "item", "Item to add.")); 582 628 kite_add_operator(thread, newclass, OP_LESS_THAN,
Note: See TracChangeset
for help on using the changeset viewer.
