Resolver - Refactored declare()

This commit is contained in:
Emmanuel BENOîT 2023-01-07 10:53:05 +01:00
parent 8d65c288a3
commit c971df6f60

View file

@ -70,15 +70,17 @@ impl ResolverState {
/// Try to declare a symbol. If the scope already contains a declaration
/// for the same name, return an error.
fn declare(&mut self, name: &Token, kind: SymKind) -> ResolverResult {
if !self.scopes.is_empty() {
if self.scopes.is_empty() {
return Ok(());
}
let idx = self.scopes.len() - 1;
let scope = &mut self.scopes[idx];
if scope.contains_key(&name.lexeme as &str) {
return Err(SloxError::with_token(
Err(SloxError::with_token(
ErrorKind::Parse,
name,
"already a symbol with this name in this scope".to_owned(),
));
))
} else {
scope.insert(
name.lexeme.clone(),
@ -87,10 +89,9 @@ impl ResolverState {
state: SymState::Declared,
},
);
}
}
Ok(())
}
}
/// Mark a symbol as defined. If the symbol has already been defined or
/// used, its state isn't affected.