summaryrefslogtreecommitdiff
path: root/scope.c
diff options
context:
space:
mode:
Diffstat (limited to 'scope.c')
-rw-r--r--scope.c22
1 files changed, 14 insertions, 8 deletions
diff --git a/scope.c b/scope.c
index 2fe62e1..251aa51 100644
--- a/scope.c
+++ b/scope.c
@@ -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) {