Changeset 427
- Timestamp:
- 10/26/08 03:14:22 (2 months ago)
- Location:
- interpreter/trunk/vm
- Files:
-
- 3 modified
-
kite_execute.c (modified) (5 diffs)
-
kite_parser.y (modified) (4 diffs)
-
kite_vm.h (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
interpreter/trunk/vm/kite_execute.c
r426 r427 189 189 res = kite_new_null(thd); 190 190 } 191 } else if (((kite_funccall_info_t*)cur->obj)->last_deref && 192 !strcmp(((kite_funccall_info_t*)cur->obj)->last_deref, ident_string)) { 193 found = ((kite_funccall_info_t*)cur->obj)->last_deref_obj; 194 kite_reference_object(found->value); 195 kite_push_stack(&thd->running_stack, TRUE, found); 196 return; 191 197 } else { 192 198 do { … … 264 270 kite_push_stack(&thd->running_stack, TRUE, found); 265 271 kite_dereference_object(ident); 272 273 stackentry->last_deref = ident_string; 274 stackentry->last_deref_obj = found; 275 266 276 return; 267 277 } … … 314 324 found->value = kite_new_null(thd); 315 325 kite_symtab_insert(thd, &stackentry->locals, found); 326 stackentry->last_deref = NULL; 327 stackentry->last_deref_obj = NULL; 316 328 } 317 329 … … 676 688 (kite_funccall_info_t*)(thd->func_stack->stack[thd->func_stack->length - 1].obj); 677 689 kite_symtab_insert(thd, ¤t->locals, propinfo); 678 690 current->last_deref = NULL; 691 current->last_deref_obj = NULL; 692 679 693 thd->exception = NULL; 680 694 return ins->handler; … … 954 968 (kite_funccall_info_t*)kite_top_stack(thd->func_stack); 955 969 entry->this = this; 970 entry->last_deref = NULL; 971 entry->last_deref_obj = NULL; 956 972 } 957 973 -
interpreter/trunk/vm/kite_parser.y
r426 r427 209 209 fcall->line = @2.first_line; 210 210 fcall->locals = NULL; 211 fcall->last_deref = NULL; 212 fcall->last_deref_obj = NULL; 211 213 fcall->sys_or_user = 0; 212 214 fcall->this = obj; … … 372 374 fcall->sys_or_user = 0; 373 375 fcall->this = obj; 376 fcall->last_deref = NULL; 377 fcall->last_deref_obj = NULL; 374 378 kite_push_stack(&thd->func_stack, FALSE, fcall); 375 379 … … 416 420 fcall->line = @1.first_line; 417 421 fcall->locals = NULL; 422 fcall->last_deref = NULL; 423 fcall->last_deref_obj = NULL; 418 424 fcall->sys_or_user = 0; 419 425 int idx = compiler->obj_created->length; … … 448 454 fcall->line = @1.first_line; 449 455 fcall->locals = NULL; 456 fcall->last_deref = NULL; 457 fcall->last_deref_obj = NULL; 450 458 fcall->sys_or_user = 0; 451 459 int idx = compiler->obj_created->length; -
interpreter/trunk/vm/kite_vm.h
r426 r427 71 71 struct kite_symtab_t *locals; 72 72 struct kite_object_t *this; 73 char *last_deref; 74 struct kite_symtab_t *last_deref_obj; 73 75 } kite_funccall_info_t; 74 76 … … 211 213 entry->file = ins->common.file; \ 212 214 entry->line = ins->common.line; \ 215 entry->last_deref = NULL; \ 216 entry->last_deref_obj = NULL; \ 213 217 entry->sys_or_user = 0; \ 214 218 kite_push_stack(&thd->func_stack, FALSE, entry); \
