Changeset 523
- Timestamp:
- 01/31/09 20:31:16 (3 years ago)
- Location:
- interpreter/trunk
- Files:
-
- 2 added
- 7 edited
-
ChangeLog (modified) (1 diff)
-
modules/System/list.c (modified) (2 diffs)
-
objs/kite_object.h (modified) (1 diff)
-
objs/kite_symtab.c (modified) (1 diff)
-
tests/Makefile.am (modified) (1 diff)
-
tests/objs/list/set_deref.kt (added)
-
tests/objs/list/set_deref.kt.out (added)
-
vm/kite_execute.c (modified) (1 diff)
-
vm/kite_stack.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
interpreter/trunk/ChangeLog
r522 r523 3 3 * Integrated interface.pop3 and interface.smtp modules (credit: Michael J. Edgar) 4 4 * Integrated new System.date.hires object. (credit: Michael J. Edgar) 5 * Now return reference to list element during list dereference, allowing constructs 6 like list[x] = y; to work properly. (ticket #83) 5 7 6 8 1/30/2009: -
interpreter/trunk/modules/System/list.c
r513 r523 203 203 /* Special-case: return list if range object is given */ 204 204 kite_object_t *exc, *rhs; 205 kite_symtab_t *ret; 205 206 int badType = FALSE, index; 206 207 if (args->type == OBJ_LIST) { … … 243 244 this = this->builtin_data.listvalue.cdr; 244 245 } 245 246 kite_vm_push(thd, this->builtin_data.listvalue.car); 246 247 ret = kite_new_symtab(); 248 ret->value = (kite_object_t*)&this->builtin_data.listvalue.car; 249 ret->global = -1; 250 kite_reference_object(KITE_LIST_CAR(this)); 251 kite_push_stack(&(thd)->running_stack, TRUE, ret); 247 252 } 248 253 -
interpreter/trunk/objs/kite_object.h
r505 r523 611 611 * Symbol table manipulation 612 612 */ 613 613 614 /** 615 * Create a new symbol table object. 616 * @return Symbol table object. 617 */ 618 kite_symtab_t *kite_new_symtab(); 619 614 620 /** 615 621 * Insert entry into symbol table. -
interpreter/trunk/objs/kite_symtab.c
r476 r523 42 42 43 43 /***************************************************************************** 44 * Create a new symbol table object. 45 ****************************************************************************/ 46 kite_symtab_t *kite_new_symtab() 47 { 48 kite_symtab_t *newVal; 49 50 #ifndef HAVE_GC_H 51 newVal = (kite_symtab_t*)calloc(1, sizeof(kite_symtab_t)); 52 #else 53 newVal = (kite_symtab_t*)GC_malloc(sizeof(kite_symtab_t)); 54 #endif 55 56 return newVal; 57 } 58 59 /***************************************************************************** 44 60 * Copy a symbol table's elements. 45 61 ****************************************************************************/ -
interpreter/trunk/tests/Makefile.am
r522 r523 224 224 ./objs/list/sort_list.kt \ 225 225 ./objs/list/sort_list.kt.out \ 226 ./objs/list/set_deref.kt \ 227 ./objs/list/set_deref.kt.out \ 226 228 ./objs/integer/float.kt \ 227 229 ./objs/integer/str.kt \ -
interpreter/trunk/vm/kite_execute.c
r506 r523 834 834 kite_symtab_t *symt = 835 835 (kite_symtab_t*)thd->running_stack->stack[thd->running_stack->length - 1].obj; 836 kite_object_t *oldobj = symt->value; 837 symt->value = kite_reference_object(rhs); 836 kite_object_t *oldobj; 837 if (symt->global == -1) 838 { 839 oldobj = *(kite_object_t**)symt->value; 840 *(kite_object_t**)symt->value = kite_reference_object(rhs); 841 } 842 else 843 { 844 oldobj = symt->value; 845 symt->value = kite_reference_object(rhs); 846 } 838 847 kite_dereference_object(oldobj); 839 848 kite_dereference_object(oldobj->parent); -
interpreter/trunk/vm/kite_stack.c
r477 r523 107 107 entry = &st->stack[st->length - 1]; 108 108 if (entry->reference) { 109 if (((kite_symtab_t*)entry->obj)->global == -1) 110 return *(kite_object_t**)((kite_symtab_t*)entry->obj)->value; 109 111 return ((kite_symtab_t*)entry->obj)->value; 110 112 }
Note: See TracChangeset
for help on using the changeset viewer.
