Resolver - Refactored declare()
This commit is contained in:
parent
8d65c288a3
commit
c971df6f60
1 changed files with 20 additions and 19 deletions
|
@ -70,15 +70,17 @@ impl ResolverState {
|
||||||
/// Try to declare a symbol. If the scope already contains a declaration
|
/// Try to declare a symbol. If the scope already contains a declaration
|
||||||
/// for the same name, return an error.
|
/// for the same name, return an error.
|
||||||
fn declare(&mut self, name: &Token, kind: SymKind) -> ResolverResult {
|
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 idx = self.scopes.len() - 1;
|
||||||
let scope = &mut self.scopes[idx];
|
let scope = &mut self.scopes[idx];
|
||||||
if scope.contains_key(&name.lexeme as &str) {
|
if scope.contains_key(&name.lexeme as &str) {
|
||||||
return Err(SloxError::with_token(
|
Err(SloxError::with_token(
|
||||||
ErrorKind::Parse,
|
ErrorKind::Parse,
|
||||||
name,
|
name,
|
||||||
"already a symbol with this name in this scope".to_owned(),
|
"already a symbol with this name in this scope".to_owned(),
|
||||||
));
|
))
|
||||||
} else {
|
} else {
|
||||||
scope.insert(
|
scope.insert(
|
||||||
name.lexeme.clone(),
|
name.lexeme.clone(),
|
||||||
|
@ -87,10 +89,9 @@ impl ResolverState {
|
||||||
state: SymState::Declared,
|
state: SymState::Declared,
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
}
|
|
||||||
}
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Mark a symbol as defined. If the symbol has already been defined or
|
/// Mark a symbol as defined. If the symbol has already been defined or
|
||||||
/// used, its state isn't affected.
|
/// used, its state isn't affected.
|
||||||
|
|
Loading…
Reference in a new issue