mirror of
https://github.com/RustPython/Parser.git
synced 2025-07-23 04:55:25 +00:00
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:
parent
0383dede81
commit
416e2da7f6
1 changed files with 31 additions and 26 deletions
|
@ -1120,32 +1120,37 @@ impl SymbolTableBuilder {
|
|||
// Role already set..
|
||||
match role {
|
||||
SymbolUsage::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,
|
||||
});
|
||||
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 => {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue