From 9c17d982fff3458d6ff4c6d807bff84431383a54 Mon Sep 17 00:00:00 2001 From: Adam Kelly Date: Sat, 31 Aug 2019 16:39:27 +0100 Subject: [PATCH 1/2] Be extremely conservative about guessing scopes when we don't know. --- src/symboltable.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/symboltable.rs b/src/symboltable.rs index 3c70d4f..ab931ac 100644 --- a/src/symboltable.rs +++ b/src/symboltable.rs @@ -252,8 +252,8 @@ impl SymbolTableAnalyzer { // Symbol is in some outer scope. symbol.is_free = true; } else { - // Well, it must be a global then :) - symbol.scope = SymbolScope::Global; + // Don't make assumptions when we don't know. + symbol.scope = SymbolScope::Unknown; } } } From f3ecba02b121e1e9df089a19335080fd67893f38 Mon Sep 17 00:00:00 2001 From: Adam Kelly Date: Sat, 31 Aug 2019 18:15:56 +0100 Subject: [PATCH 2/2] Be somewhat less conservative about declaring things global. --- src/symboltable.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/symboltable.rs b/src/symboltable.rs index ab931ac..c07b5ae 100644 --- a/src/symboltable.rs +++ b/src/symboltable.rs @@ -251,9 +251,12 @@ impl SymbolTableAnalyzer { if found_in_outer_scope { // Symbol is in some outer scope. symbol.is_free = true; - } else { + } else if self.tables.is_empty() { // Don't make assumptions when we don't know. symbol.scope = SymbolScope::Unknown; + } else { + // If there are scopes above we can assume global. + symbol.scope = SymbolScope::Global; } } }