~starkingdoms/starkingdoms

a5b0bc04ebeb700900b9e11dc5550edb67271cba — ghostly_zsh 1 year, 3 months ago 7d1a546
fixed variable shadowing
1 files changed, 6 insertions(+), 5 deletions(-)

M kabel/src/name_resolution.rs
M kabel/src/name_resolution.rs => kabel/src/name_resolution.rs +6 -5
@@ 165,7 165,8 @@ impl Resolver {
            Decl(name, expr) => {
                let expr = self.visit(*expr);
                self.locals.last_mut().expect("locals last in decl push").push(self.scope);
                if self.resolve_var(&name.name).0 {
                let resolution = self.resolve_var(&name.name);
                if resolution.0 && resolution.2 == self.scope {
                    self.errors.push(out_of_scope_var!(self,
                            ErrorKind::VariableAlreadyDeclaredVariable, ast,
                            "Variable \"{}\" already declared", name ;


@@ 304,13 305,13 @@ impl Resolver {
        self.visit(left);
        self.visit(right);
    }*/
    fn resolve_var(&self, name: &String) -> (bool, usize) {
        for scope in self.symbol_table.iter().rev() {
    fn resolve_var(&self, name: &String) -> (bool, usize, usize) {
        for (scope_num, scope) in self.symbol_table.iter().enumerate().rev() {
            if let Some((Symbol::Var, place)) | Some((Symbol::Function(_), place)) = scope.get(name) {
                return (true, *place);
                return (true, *place, scope_num);
            }
        }
        (false, 0)
        (false, 0, 0)
    }
    fn resolve_function(&mut self, name: &String, arity: usize) -> Result<usize, (ErrorKind, Option<usize>, Option<usize>)>{
        for scope in self.symbol_table.iter().rev() {