mirror of
https://github.com/RustPython/Parser.git
synced 2025-09-02 00:28:39 +00:00
parent
a251109090
commit
de7396347f
1 changed files with 28 additions and 5 deletions
|
@ -954,10 +954,10 @@ impl SymbolTableBuilder {
|
|||
// Some checks:
|
||||
let containing = table.symbols.contains_key(name);
|
||||
if containing {
|
||||
let symbol = table.symbols.get(name).unwrap();
|
||||
// Role already set..
|
||||
match role {
|
||||
SymbolUsage::Global => {
|
||||
let symbol = table.symbols.get(name).unwrap();
|
||||
if let SymbolScope::Global = symbol.scope {
|
||||
// Ok
|
||||
} else {
|
||||
|
@ -968,10 +968,33 @@ impl SymbolTableBuilder {
|
|||
}
|
||||
}
|
||||
SymbolUsage::Nonlocal => {
|
||||
return Err(SymbolTableError {
|
||||
error: format!("name '{}' is used prior to nonlocal declaration", name),
|
||||
location,
|
||||
})
|
||||
if symbol.is_parameter {
|
||||
return Err(SymbolTableError {
|
||||
error: format!("name '{}' is parameter and nonlocal", name),
|
||||
location,
|
||||
});
|
||||
}
|
||||
if symbol.is_referenced {
|
||||
return Err(SymbolTableError {
|
||||
error: format!("name '{}' is used prior to nonlocal declaration", name),
|
||||
location,
|
||||
});
|
||||
}
|
||||
if symbol.is_annotated {
|
||||
return Err(SymbolTableError {
|
||||
error: format!("annotated name '{}' can't be nonlocal", name),
|
||||
location,
|
||||
});
|
||||
}
|
||||
if symbol.is_assigned {
|
||||
return Err(SymbolTableError {
|
||||
error: format!(
|
||||
"name '{}' is assigned to before nonlocal declaration",
|
||||
name
|
||||
),
|
||||
location,
|
||||
});
|
||||
}
|
||||
}
|
||||
_ => {
|
||||
// Ok?
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue