From 4c351dc196240af013c27188d007539e7ef0d9dc Mon Sep 17 00:00:00 2001 From: Wang Renxin Date: Sun, 7 Aug 2016 00:21:35 +0800 Subject: [PATCH] *refactored to return unknown when trying to access a not exist member in a prototype. --- HISTORY | 3 ++ core/my_basic.c | 112 ++++++++++++++++++++++++++------------------ output/my_basic.exe | Bin 381440 -> 381952 bytes 3 files changed, 70 insertions(+), 45 deletions(-) diff --git a/HISTORY b/HISTORY index 74bd192..f1e54de 100755 --- a/HISTORY +++ b/HISTORY @@ -1,3 +1,6 @@ +Aug. 7 2016 +Refactored to return UNKNOWN when trying to access a not exist member in a prototype + Aug. 6 2016 Refactored to return UNKNOWN when trying to access a not exist key in a dictionary Added reflection accessing ability to the SET statement diff --git a/core/my_basic.c b/core/my_basic.c index 9c40d80..48b539a 100755 --- a/core/my_basic.c +++ b/core/my_basic.c @@ -146,7 +146,7 @@ extern "C" { # define toupper(__c) (islower(__c) ? ((__c) - 'a' + 'A') : (__c)) #endif /* toupper */ -#define _copy_bytes(__l, __r) do { memcpy((__l), (__r), sizeof(mb_val_bytes_t)); } while(0) +#define _COPY_BYTES(__l, __r) do { memcpy((__l), (__r), sizeof(mb_val_bytes_t)); } while(0) #define _mb_check(__expr, __exit) do { if((__expr) != MB_FUNC_OK) goto __exit; } while(0) #define _mb_check_mark(__expr, __result, __exit) do { __result = (__expr); if(__result != MB_FUNC_OK) goto __exit; } while(0) @@ -392,11 +392,18 @@ typedef struct _func_t { mb_func_t pointer; } _func_t; +#define _PATHING_NONE 0 +#define _PATHING_NORMAL 1 +#define _PATHING_UNKNOWN_FOR_NOT_FOUND 2 + +#define _PN(__b) ((!!(__b)) ? (_PATHING_NORMAL) : (_PATHING_NONE)) +#define _PU(__b) ((!!(__b)) ? (_PATHING_UNKNOWN_FOR_NOT_FOUND) : (_PATHING_NONE)) + typedef struct _var_t { char* name; struct _object_t* data; #ifdef MB_ENABLE_CLASS - int pathing; + bool_t pathing; bool_t isme; #endif /* MB_ENABLE_CLASS */ } _var_t; @@ -686,6 +693,15 @@ static const _object_t _OBJ_INT_ZERO = { _DT_INT, (int_t)0, false, 0 }; static _object_t* _OBJ_BOOL_TRUE = 0; static _object_t* _OBJ_BOOL_FALSE = 0; +#ifdef MB_ENABLE_CLASS +#ifdef MB_ENABLE_SOURCE_TRACE +static const _object_t _OBJ_UNKNOWN = { _DT_UNKNOWN, (int_t)0, false, 0, 0, 0 }; +#else /* MB_ENABLE_SOURCE_TRACE */ +static const _object_t _OBJ_UNKNOWN = { _DT_UNKNOWN, (int_t)0, false, 0 }; +#endif /* MB_ENABLE_SOURCE_TRACE */ +static const _ls_node_t _LS_NODE_UNKNOWN = { (void*)&_OBJ_UNKNOWN, 0, 0, 0 }; +#endif /* MB_ENABLE_CLASS */ + #define _VAR_ARGS_STR "..." #ifdef MB_ENABLE_CLASS @@ -1716,7 +1732,7 @@ static bool_t _is_valid_lambda_body_node(mb_interpreter_t* s, _lambda_t* lambda, static _running_context_t* _reference_scope_by_class(mb_interpreter_t* s, _running_context_t* p, _class_t* c); static _running_context_t* _push_scope_by_class(mb_interpreter_t* s, _running_context_t* p); static _ls_node_t* _search_identifier_in_class(mb_interpreter_t* s, _class_t* instance, const char* n, _ht_node_t** ht, _running_context_t** sp); -static _ls_node_t* _search_identifier_accessor(mb_interpreter_t* s, _running_context_t* scope, const char* n, _ht_node_t** ht, _running_context_t** sp); +static _ls_node_t* _search_identifier_accessor(mb_interpreter_t* s, _running_context_t* scope, const char* n, _ht_node_t** ht, _running_context_t** sp, bool_t unknown_for_not_found); #endif /* MB_ENABLE_CLASS */ static _running_context_t* _reference_scope_by_routine(mb_interpreter_t* s, _running_context_t* p, _routine_t* r); static _running_context_t* _push_weak_scope_by_routine(mb_interpreter_t* s, _running_context_t* p, _routine_t* r); @@ -3599,7 +3615,7 @@ static int _calc_expression(mb_interpreter_t* s, _ls_node_t** l, _object_t** val #ifdef MB_ENABLE_CLASS if(s->last_instance) { - _ls_node_t* cs = _search_identifier_in_scope_chain(s, 0, c->data.array->name, 1, 0, 0); + _ls_node_t* cs = _search_identifier_in_scope_chain(s, 0, c->data.array->name, _PATHING_NORMAL, 0, 0); if(cs) c = (_object_t*)cs->data; } @@ -3620,7 +3636,7 @@ _array: _ls_pushback(garbage, arr_elem); arr_elem->type = arr_type; arr_elem->ref = true; - _copy_bytes(arr_elem->data.bytes, arr_val.bytes); + _COPY_BYTES(arr_elem->data.bytes, arr_val.bytes); if(f) { _handle_error_on_obj(s, SE_RN_OPERATOR_EXPECTED, s->source_file, DON(ast), MB_FUNC_ERR, _error, result); } @@ -3759,7 +3775,7 @@ _routine: if(c->type == _DT_VAR) { _ls_node_t* cs = _search_identifier_in_scope_chain(s, 0, c->data.variable->name, #ifdef MB_ENABLE_CLASS - c->data.variable->pathing, + _PU(c->data.variable->pathing), #else /* MB_ENABLE_CLASS */ 0, #endif /* MB_ENABLE_CLASS */ @@ -4027,7 +4043,7 @@ static int _proc_args(mb_interpreter_t* s, _ls_node_t** l, _running_context_t* r if(proc_ref) var->data->ref = false; } else { - rnode = _search_identifier_in_scope_chain(s, running, var->name, 0, 0, 0); + rnode = _search_identifier_in_scope_chain(s, running, var->name, _PATHING_NONE, 0, 0); if(rnode) var = ((_object_t*)rnode->data)->data.variable; @@ -4832,7 +4848,7 @@ static int _create_symbol(mb_interpreter_t* s, _ls_node_t* l, char* sym, _object break; case _DT_ARRAY: - glbsyminscope = _search_identifier_in_scope_chain(s, 0, sym, 0, 0, 0); + glbsyminscope = _search_identifier_in_scope_chain(s, 0, sym, _PATHING_NONE, 0, 0); if(glbsyminscope && ((_object_t*)glbsyminscope->data)->type == _DT_ARRAY) { (*obj)->data.array = ((_object_t*)glbsyminscope->data)->data.array; (*obj)->ref = true; @@ -4854,7 +4870,7 @@ static int _create_symbol(mb_interpreter_t* s, _ls_node_t* l, char* sym, _object break; #ifdef MB_ENABLE_CLASS case _DT_CLASS: - glbsyminscope = _search_identifier_in_scope_chain(s, 0, sym, 0, 0, 0); + glbsyminscope = _search_identifier_in_scope_chain(s, 0, sym, _PATHING_NONE, 0, 0); if(glbsyminscope && ((_object_t*)glbsyminscope->data)->type == _DT_CLASS) { (*obj)->data.instance = ((_object_t*)glbsyminscope->data)->data.instance; (*obj)->ref = true; @@ -4888,7 +4904,7 @@ static int _create_symbol(mb_interpreter_t* s, _ls_node_t* l, char* sym, _object break; #endif /* MB_ENABLE_CLASS */ case _DT_ROUTINE: - glbsyminscope = _search_identifier_in_scope_chain(s, 0, sym, 0, 0, 0); + glbsyminscope = _search_identifier_in_scope_chain(s, 0, sym, _PATHING_NONE, 0, 0); if(glbsyminscope && ((_object_t*)glbsyminscope->data)->type == _DT_ROUTINE) { (*obj)->data.routine = ((_object_t*)glbsyminscope->data)->data.routine; (*obj)->ref = true; @@ -4926,7 +4942,7 @@ static int _create_symbol(mb_interpreter_t* s, _ls_node_t* l, char* sym, _object if(context->routine_params_state) glbsyminscope = _ht_find(running->var_dict, sym); else - glbsyminscope = _search_identifier_in_scope_chain(s, 0, sym, 0, 0, 0); + glbsyminscope = _search_identifier_in_scope_chain(s, 0, sym, _PATHING_NONE, 0, 0); #ifdef MB_ENABLE_CLASS is_field = context->last_symbol && _IS_FUNC(context->last_symbol, _core_var); #endif /* MB_ENABLE_CLASS */ @@ -4952,7 +4968,7 @@ static int _create_symbol(mb_interpreter_t* s, _ls_node_t* l, char* sym, _object tmp.var->data->data.integer = 0; #ifdef MB_ENABLE_CLASS if(context->class_state != _CLASS_STATE_NONE) - tmp.var->pathing = 1; + tmp.var->pathing = true; else if(!is_field) tmp.var->pathing = context->current_symbol_contains_accessor; #endif /* MB_ENABLE_CLASS */ @@ -5124,7 +5140,7 @@ _end_import: goto _exit; } /* _array_t */ - glbsyminscope = _search_identifier_in_scope_chain(s, 0, sym, 0, 0, 0); + glbsyminscope = _search_identifier_in_scope_chain(s, 0, sym, _PATHING_NONE, 0, 0); if(glbsyminscope && ((_object_t*)glbsyminscope->data)->type == _DT_ARRAY) { tmp.obj = (_object_t*)glbsyminscope->data; memcpy(*value, &(tmp.obj->data.array->type), sizeof(tmp.obj->data.array->type)); @@ -5148,7 +5164,7 @@ _end_import: /* _class_t */ #ifdef MB_ENABLE_CLASS if(context->last_symbol) { - glbsyminscope = _search_identifier_in_scope_chain(s, 0, sym, 0, 0, 0); + glbsyminscope = _search_identifier_in_scope_chain(s, 0, sym, _PATHING_NONE, 0, 0); if(glbsyminscope && ((_object_t*)glbsyminscope->data)->type == _DT_CLASS) { if(_IS_FUNC(context->last_symbol, _core_class)) { _handle_error_now(s, SE_RN_DUPLICATE_CLASS, s->source_file, MB_FUNC_ERR); @@ -5196,7 +5212,7 @@ _end_import: #endif /* MB_ENABLE_CLASS */ /* _routine_t */ if(context->last_symbol && !_is_bracket_char(sym[0])) { - glbsyminscope = _search_identifier_in_scope_chain(s, 0, sym, 0, 0, 0); + glbsyminscope = _search_identifier_in_scope_chain(s, 0, sym, _PATHING_NONE, 0, 0); if(glbsyminscope && ((_object_t*)glbsyminscope->data)->type == _DT_ROUTINE) { if(_IS_FUNC(context->last_symbol, _core_def)) { if(_begin_routine(s) != MB_FUNC_OK) @@ -5300,7 +5316,7 @@ _end_import: goto _exit; } /* _var_t */ - glbsyminscope = _search_identifier_in_scope_chain(s, 0, sym, 0, 0, 0); + glbsyminscope = _search_identifier_in_scope_chain(s, 0, sym, _PATHING_NONE, 0, 0); if(glbsyminscope) { if(((_object_t*)glbsyminscope->data)->type != _DT_LABEL) { memcpy(*value, &glbsyminscope->data, sizeof(glbsyminscope->data)); @@ -5313,7 +5329,7 @@ _end_import: /* _label_t */ if(context->current_char == ':') { if(!context->last_symbol || _IS_EOS(context->last_symbol)) { - glbsyminscope = _search_identifier_in_scope_chain(s, 0, sym, 0, 0, 0); + glbsyminscope = _search_identifier_in_scope_chain(s, 0, sym, _PATHING_NONE, 0, 0); if(glbsyminscope) memcpy(*value, &glbsyminscope->data, sizeof(glbsyminscope->data)); @@ -6568,7 +6584,7 @@ static bool_t _get_array_elem(mb_interpreter_t* s, _array_t* arr, unsigned int i val->float_point = *((real_t*)rawptr); *type = _DT_REAL; #else /* MB_SIMPLE_ARRAY */ - _copy_bytes(val->bytes, *((mb_val_bytes_t*)rawptr)); + _COPY_BYTES(val->bytes, *((mb_val_bytes_t*)rawptr)); *type = arr->types[index]; #endif /* MB_SIMPLE_ARRAY */ } else if(arr->type == _DT_STRING) { @@ -6614,7 +6630,7 @@ static int _set_array_elem(mb_interpreter_t* s, _ls_node_t* ast, _array_t* arr, break; default: - _copy_bytes(*((mb_val_bytes_t*)rawptr), val->bytes); + _COPY_BYTES(*((mb_val_bytes_t*)rawptr), val->bytes); break; } @@ -6630,7 +6646,7 @@ static int _set_array_elem(mb_interpreter_t* s, _ls_node_t* ast, _array_t* arr, break; default: - _copy_bytes(*((mb_val_bytes_t*)rawptr), val->bytes); + _COPY_BYTES(*((mb_val_bytes_t*)rawptr), val->bytes); arr->types[index] = *type; break; @@ -7406,7 +7422,7 @@ static void _init_class(mb_interpreter_t* s, _class_t* instance, char* n) { me = _create_var(&meobj, _CLASS_ME, strlen(_CLASS_ME) + 1, true); me->data->type = _DT_CLASS; me->data->data.instance = instance; - me->pathing = 1; + me->pathing = true; me->isme = true; _ht_set_or_insert(instance->scope->var_dict, me->name, meobj); } @@ -7787,7 +7803,7 @@ static _class_t* _reflect_string_to_class(mb_interpreter_t* s, const char* n, mb _ls_node_t* cs = 0; _object_t* c = 0; - cs = _search_identifier_in_scope_chain(s, 0, n, 0, 0, 0); + cs = _search_identifier_in_scope_chain(s, 0, n, _PATHING_NONE, 0, 0); if(!cs) return 0; c = (_object_t*)cs->data; @@ -8064,7 +8080,7 @@ static void _mark_upvalue(mb_interpreter_t* s, _lambda_t* lambda, _object_t* obj mb_assert(s && lambda && obj); running = s->running_context; - scp = _search_identifier_in_scope_chain(s, running, n, 1, 0, &found_in_scope); + scp = _search_identifier_in_scope_chain(s, running, n, _PATHING_NORMAL, 0, &found_in_scope); if(scp && found_in_scope) { if(!found_in_scope->refered_lambdas) found_in_scope->refered_lambdas = _ls_create(); @@ -8170,7 +8186,7 @@ static int _fill_with_upvalue(void* data, void* extra, _upvalue_scope_tuple_t* t _ls_node_t* nori = 0; #ifdef MB_ENABLE_CLASS if(tuple->instance) - nori = _search_identifier_in_scope_chain(tuple->s, tuple->scope, n, 1, 0, 0); + nori = _search_identifier_in_scope_chain(tuple->s, tuple->scope, n, _PATHING_NORMAL, 0, 0); else nori = _ht_find(tuple->scope->var_dict, (void*)n); #else /* MB_ENABLE_CLASS */ @@ -8190,7 +8206,7 @@ static int _fill_with_upvalue(void* data, void* extra, _upvalue_scope_tuple_t* t if(obj->type == _DT_VAR) var->pathing = obj->data.variable->pathing; else - var->pathing = 0; + var->pathing = false; #endif /* MB_ENABLE_CLASS */ ul = _ht_set_or_insert(tuple->outer_scope->scope->var_dict, ovar->data.variable->name, ovar); mb_assert(ul); @@ -8379,7 +8395,7 @@ static _ls_node_t* _search_identifier_in_class(mb_interpreter_t* s, _class_t* in } /* Try to search an identifier accessor in a scope */ -static _ls_node_t* _search_identifier_accessor(mb_interpreter_t* s, _running_context_t* scope, const char* n, _ht_node_t** ht, _running_context_t** sp) { +static _ls_node_t* _search_identifier_accessor(mb_interpreter_t* s, _running_context_t* scope, const char* n, _ht_node_t** ht, _running_context_t** sp, bool_t unknown_for_not_found) { _ls_node_t* result = 0; _object_t* obj = 0; char acc[_SINGLE_SYMBOL_MAX_LENGTH]; @@ -8393,10 +8409,16 @@ static _ls_node_t* _search_identifier_accessor(mb_interpreter_t* s, _running_con acc[j] = n[i]; if(_is_accessor_char(acc[j]) || acc[j] == _ZERO_CHAR) { acc[j] = _ZERO_CHAR; - if(instance) + if(instance) { result = _search_identifier_in_class(s, instance, acc, ht, sp); - else - result = _search_identifier_in_scope_chain(s, scope, acc, 0, ht, sp); + if(!result && unknown_for_not_found) { + result = (_ls_node_t*)&_LS_NODE_UNKNOWN; + + return result; + } + } else { + result = _search_identifier_in_scope_chain(s, scope, acc, _PATHING_NONE, ht, sp); + } if(!result) return 0; obj = (_object_t*)result->data; @@ -8645,7 +8667,7 @@ static _ls_node_t* _search_identifier_in_scope_chain(mb_interpreter_t* s, _runni #ifdef MB_ENABLE_CLASS if(pathing) { - result = _search_identifier_accessor(s, scope, n, &fn, &fs); + result = _search_identifier_accessor(s, scope, n, &fn, &fs, pathing == _PATHING_UNKNOWN_FOR_NOT_FOUND); if(result) goto _exit; } @@ -8701,7 +8723,7 @@ static _array_t* _search_array_in_scope_chain(mb_interpreter_t* s, _array_t* i, mb_assert(s && i); result = i; - scp = _search_identifier_in_scope_chain(s, 0, result->name, 0, 0, 0); + scp = _search_identifier_in_scope_chain(s, 0, result->name, _PATHING_NONE, 0, 0); if(scp) { obj = (_object_t*)scp->data; if(obj && obj->type == _DT_ARRAY) { @@ -8722,7 +8744,7 @@ static _var_t* _search_var_in_scope_chain(mb_interpreter_t* s, _var_t* i) { mb_assert(s && i); result = i; - scp = _search_identifier_in_scope_chain(s, 0, result->name, 1, 0, 0); + scp = _search_identifier_in_scope_chain(s, 0, result->name, _PATHING_NORMAL, 0, 0); if(scp) { obj = (_object_t*)scp->data; if(obj && obj->type == _DT_VAR) @@ -9845,7 +9867,7 @@ _retry: } } else if(s->last_instance || obj->data.variable->pathing) { /* Need to path */ - _ls_node_t* pathed = _search_identifier_in_scope_chain(s, 0, obj->data.variable->name, obj->data.variable->pathing, 0, 0); + _ls_node_t* pathed = _search_identifier_in_scope_chain(s, 0, obj->data.variable->name, _PU(obj->data.variable->pathing), 0, 0); if(pathed && pathed->data) { if(obj != (_object_t*)pathed->data) { /* Found another node */ @@ -11391,7 +11413,7 @@ int mb_begin_class(struct mb_interpreter_t* s, void** l, const char* n, mb_value _using_jump_set_of_structured(s, tmp, _exit, result); - tmp = _search_identifier_in_scope_chain(s, 0, n, 0, 0, 0); + tmp = _search_identifier_in_scope_chain(s, 0, n, _PATHING_NONE, 0, 0); if(tmp && tmp->data) { obj = (_object_t*)tmp->data; if(obj->type == _DT_VAR) @@ -11527,7 +11549,7 @@ int mb_get_value_by_name(struct mb_interpreter_t* s, void** l, const char* n, mb mb_make_nil(*val); - tmp = _search_identifier_in_scope_chain(s, 0, n, 1, 0, 0); + tmp = _search_identifier_in_scope_chain(s, 0, n, _PATHING_NORMAL, 0, 0); if(tmp && tmp->data) { obj = (_object_t*)tmp->data; _internal_object_to_public_value(obj, val); @@ -12191,7 +12213,7 @@ int mb_get_routine(struct mb_interpreter_t* s, void** l, const char* n, mb_value mb_make_nil(*val); - scp = _search_identifier_in_scope_chain(s, 0, n, 0, 0, 0); + scp = _search_identifier_in_scope_chain(s, 0, n, _PATHING_NONE, 0, 0); if(scp) { obj = (_object_t*)scp->data; if(obj) { @@ -12477,7 +12499,7 @@ int mb_debug_get(struct mb_interpreter_t* s, const char* n, mb_value_t* val) { running = s->running_context; - v = _search_identifier_in_scope_chain(s, 0, n, 0, 0, 0); + v = _search_identifier_in_scope_chain(s, 0, n, _PATHING_NONE, 0, 0); if(v) { obj = (_object_t*)v->data; mb_assert(obj->type == _DT_VAR); @@ -12507,7 +12529,7 @@ int mb_debug_set(struct mb_interpreter_t* s, const char* n, mb_value_t val) { running = s->running_context; - v = _search_identifier_in_scope_chain(s, 0, n, 0, 0, 0); + v = _search_identifier_in_scope_chain(s, 0, n, _PATHING_NONE, 0, 0); if(v) { obj = (_object_t*)v->data; mb_assert(obj->type == _DT_VAR); @@ -13492,7 +13514,7 @@ _proc_extra_var: case _DT_REAL: /* Fall through */ case _DT_STRING: /* Fall through */ case _DT_USERTYPE: - _copy_bytes(_val.bytes, val->data.bytes); + _COPY_BYTES(_val.bytes, val->data.bytes); break; default: @@ -14162,7 +14184,7 @@ _retry: obj = (_object_t*)ast->data; #ifdef MB_ENABLE_CLASS if(obj->type == _DT_VAR) { - pathed = _search_identifier_in_scope_chain(s, 0, obj->data.variable->name, obj->data.variable->pathing, 0, 0); + pathed = _search_identifier_in_scope_chain(s, 0, obj->data.variable->name, _PN(obj->data.variable->pathing), 0, 0); if(pathed && pathed->data) obj = (_object_t*)pathed->data; } @@ -14190,7 +14212,7 @@ _retry: goto _retry; } #ifdef MB_ENABLE_CLASS - pathed = _search_identifier_in_scope_chain(s, 0, obj->data.variable->name, obj->data.variable->pathing, 0, 0); + pathed = _search_identifier_in_scope_chain(s, 0, obj->data.variable->name, _PN(obj->data.variable->pathing), 0, 0); if(pathed && pathed->data) obj = (_object_t*)pathed->data; /* Fall through */ @@ -14223,7 +14245,7 @@ _retry: ) { pathed = _search_identifier_in_class(s, routine->instance, routine->name, 0, 0); } else { - pathed = _search_identifier_in_scope_chain(s, 0, routine->name, 0, 0, 0); + pathed = _search_identifier_in_scope_chain(s, 0, routine->name, _PATHING_NONE, 0, 0); } if(pathed && pathed->data) { obj = (_object_t*)pathed->data; @@ -14290,7 +14312,7 @@ static int _core_def(mb_interpreter_t* s, void** l) { while(!_IS_FUNC(obj, _core_close_bracket)) { if(obj->type == _DT_VAR) { var = obj->data.variable; - rnode = _search_identifier_in_scope_chain(s, routine->func.basic.scope, var->name, 0, 0, 0); + rnode = _search_identifier_in_scope_chain(s, routine->func.basic.scope, var->name, _PATHING_NONE, 0, 0); if(rnode) var = ((_object_t*)rnode->data)->data.variable; if(!routine->func.basic.parameters) @@ -14417,7 +14439,7 @@ static int _core_class(mb_interpreter_t* s, void** l) { ast = ast->next; obj = (_object_t*)ast->data; if(obj && obj->type == _DT_VAR) { - _ls_node_t* tmp =_search_identifier_in_scope_chain(s, _OUTTER_SCOPE(running), obj->data.variable->name, 0, 0, 0); + _ls_node_t* tmp =_search_identifier_in_scope_chain(s, _OUTTER_SCOPE(running), obj->data.variable->name, _PATHING_NONE, 0, 0); if(tmp && tmp->data) obj = (_object_t*)tmp->data; } @@ -15969,7 +15991,7 @@ static int _std_print(mb_interpreter_t* s, void** l) { } #ifdef MB_ENABLE_CLASS if(obj->data.variable->pathing) { - _ls_node_t* pathed = _search_identifier_in_scope_chain(s, 0, obj->data.variable->name, obj->data.variable->pathing, 0, 0); + _ls_node_t* pathed = _search_identifier_in_scope_chain(s, 0, obj->data.variable->name, _PU(obj->data.variable->pathing), 0, 0); if(pathed && pathed->data) { if(obj != (_object_t*)pathed->data) { obj = (_object_t*)pathed->data; diff --git a/output/my_basic.exe b/output/my_basic.exe index 9b3b6afc37d9e60026cc312cb39f6cd95cb6fe3a..a5a2bbc616ce985faf8acaa13c622ecc265aa15c 100755 GIT binary patch delta 23240 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 APyhe`