diff --git a/src/symboltable.rs b/src/symboltable.rs index 10c13ba..8dc120e 100644 --- a/src/symboltable.rs +++ b/src/symboltable.rs @@ -1120,12 +1120,33 @@ impl SymbolTableBuilder { // Role already set.. match role { SymbolUsage::Global => { - if !symbol.is_global() { + if symbol.is_parameter { + return Err(SymbolTableError { + error: format!("name '{}' is parameter and global", name), + location, + }); + } + if symbol.is_referenced { return Err(SymbolTableError { error: format!("name '{}' is used prior to global declaration", name), location, }); } + if symbol.is_annotated { + return Err(SymbolTableError { + error: format!("annotated name '{}' can't be global", name), + location, + }); + } + if symbol.is_assigned { + return Err(SymbolTableError { + error: format!( + "name '{}' is assigned to before global declaration", + name + ), + location, + }); + } } SymbolUsage::Nonlocal => { if symbol.is_parameter {