compiler: add is_global() check at top of errors

add `!symbol.is_global()` condition check before entrying global symbol
errors

This change will decrease hot path cost.

Signed-off-by: snowapril <sinjihng@gmail.com>
This commit is contained in:
snowapril 2021-08-18 00:35:14 +09:00
parent 0383dede81
commit 416e2da7f6

View file

@ -1120,32 +1120,37 @@ impl SymbolTableBuilder {
// Role already set.. // Role already set..
match role { match role {
SymbolUsage::Global => { SymbolUsage::Global => {
if symbol.is_parameter { if !symbol.is_global() {
return Err(SymbolTableError { if symbol.is_parameter {
error: format!("name '{}' is parameter and global", name), return Err(SymbolTableError {
location, error: format!("name '{}' is parameter and global", name),
}); location,
} });
if symbol.is_referenced { }
return Err(SymbolTableError { if symbol.is_referenced {
error: format!("name '{}' is used prior to global declaration", name), return Err(SymbolTableError {
location, error: format!(
}); "name '{}' is used prior to global declaration",
} name
if symbol.is_annotated { ),
return Err(SymbolTableError { location,
error: format!("annotated name '{}' can't be global", name), });
location, }
}); if symbol.is_annotated {
} return Err(SymbolTableError {
if symbol.is_assigned { error: format!("annotated name '{}' can't be global", name),
return Err(SymbolTableError { location,
error: format!( });
"name '{}' is assigned to before global declaration", }
name if symbol.is_assigned {
), return Err(SymbolTableError {
location, error: format!(
}); "name '{}' is assigned to before global declaration",
name
),
location,
});
}
} }
} }
SymbolUsage::Nonlocal => { SymbolUsage::Nonlocal => {