From c852c5d2721fd017fb2a61528618f3b8e060f6d5 Mon Sep 17 00:00:00 2001 From: HyeockJinKim Date: Thu, 12 Sep 2019 01:01:04 +0900 Subject: [PATCH] nonlocal generate syntax error If the scope depth is less than 2, a syntax error occurs in nonlocal. Fixes #1360 --- src/symboltable.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/symboltable.rs b/src/symboltable.rs index 1578f47..f1cc1a8 100644 --- a/src/symboltable.rs +++ b/src/symboltable.rs @@ -211,7 +211,8 @@ impl<'a> SymbolTableAnalyzer<'a> { // symbol.table.borrow().parent.clone(); if let Some((symbols, _)) = parent_symbol_table { - if !symbols.contains_key(&symbol.name) { + let scope_depth = self.tables.len(); + if !symbols.contains_key(&symbol.name) || scope_depth < 2 { return Err(SymbolTableError { error: format!("no binding for nonlocal '{}' found", symbol.name), location: Default::default(),