From f5057fd8595dcd5957a1425300216e6f79986ea1 Mon Sep 17 00:00:00 2001 From: paladin-t Date: Thu, 17 Dec 2015 16:24:11 +0800 Subject: [PATCH] +added support to get a value by an accessor in a print statement. --- HISTORY | 3 ++- core/my_basic.c | 25 ++++++++++++++++++++----- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/HISTORY b/HISTORY index 331396d..86d04d0 100755 --- a/HISTORY +++ b/HISTORY @@ -1,5 +1,6 @@ Dec. 17 2015 -Added support to evaluate a sub routine by an accessor in PRINT statement +Added support to evaluate a sub routine by an accessor in a PRINT statement +Added support to get a value by an accessor in a PRINT statement Dec. 15 2015 Added a pair of mb_begin_class/mb_end_class functions diff --git a/core/my_basic.c b/core/my_basic.c index 851a027..bc430e6 100755 --- a/core/my_basic.c +++ b/core/my_basic.c @@ -11793,11 +11793,26 @@ int _std_print(mb_interpreter_t* s, void** l) { switch(obj->type) { case _DT_VAR: if(obj->data.variable->pathing) { - _execute_statement(s, &ast); - _MAKE_NIL(&tmp); - _public_value_to_internal_object(&s->running_context->intermediate_value, &tmp); - val_ptr = obj = &tmp; - if(ast) ast = ast->prev; + _ls_node_t* pathed = _search_identifier_in_scope_chain(s, 0, obj->data.variable->name, obj->data.variable->pathing, 0); + if(pathed && pathed->data) { + if(obj != (_object_t*)pathed->data) { + obj = (_object_t*)pathed->data; + + if(obj->type == _DT_ROUTINE) { + _execute_statement(s, &ast); + _MAKE_NIL(&tmp); + _public_value_to_internal_object(&s->running_context->intermediate_value, &tmp); + val_ptr = obj = &tmp; + if(ast) ast = ast->prev; + } else if(obj->type == _DT_VAR) { + val_ptr = obj = obj->data.variable->data; + if(ast) ast = ast->next; + } else { + val_ptr = obj; + if(ast) ast = ast->next; + } + } + } goto _print; }