diff options
Diffstat (limited to 'scope.c')
| -rw-r--r-- | scope.c | 22 |
1 files changed, 14 insertions, 8 deletions
@@ -84,10 +84,13 @@ bool scope_get_type( struct type_def* p_entry, const char* name ) { - struct type_def* type_def = *type_cell(scope, name); - if (type_def == NULL) return false; - *p_entry = *type_def; - return true; + for (; scope != NULL; scope = scope->next_out) { + struct type_def* type_def = *type_cell(scope, name); + if (type_def == NULL) continue; + *p_entry = *type_def; + return true; + } + return false; } void scope_define_type(struct scope* scope, struct type_def type) { @@ -109,10 +112,13 @@ bool scope_get_var( struct var_def* p_entry, const char* name ) { - struct var_def* var_def = *var_cell(scope, name); - if (var_def == NULL) return false; - *p_entry = *var_def; - return true; + for (; scope != NULL; scope = scope->next_out) { + struct var_def* var_def = *var_cell(scope, name); + if (var_def == NULL) continue; + *p_entry = *var_def; + return true; + } + return false; } void scope_define_var(struct scope* scope, struct var_def var) { |
