More work on fully-qualified names
This commit is contained in:
parent
a5c9aca4d7
commit
fd66a9711d
@ -242,6 +242,7 @@ pub enum PatternLiteral {
|
|||||||
},
|
},
|
||||||
StringPattern(Rc<String>),
|
StringPattern(Rc<String>),
|
||||||
BoolPattern(bool),
|
BoolPattern(bool),
|
||||||
|
//TODO I think VarPattern also needs to know about FQSNs
|
||||||
VarPattern(Rc<String>)
|
VarPattern(Rc<String>)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -29,18 +29,48 @@ impl ScopeResolver {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn expr(&mut self, expr: &mut Meta<Expression>) -> Result<(), String> {
|
fn expr(&mut self, expr: &mut Meta<Expression>) -> Result<(), String> {
|
||||||
match &expr.node().kind {
|
use ExpressionKind::*;
|
||||||
|
let inner_expr = expr.mut_node();
|
||||||
//TODO this needs to fully recurse
|
match &mut inner_expr.kind {
|
||||||
ExpressionKind::Value(qualified_name) => {
|
ExpressionKind::Value(qualified_name) => {
|
||||||
//TODO fill this out
|
|
||||||
let fqsn = lookup_name_in_scope(&qualified_name);
|
let fqsn = lookup_name_in_scope(&qualified_name);
|
||||||
expr.fqsn = Some(fqsn);
|
expr.fqsn = Some(fqsn);
|
||||||
},
|
},
|
||||||
|
NamedStruct { name, .. } => {
|
||||||
|
let fqsn = lookup_name_in_scope(&name);
|
||||||
|
expr.fqsn = Some(fqsn);
|
||||||
|
},
|
||||||
|
BinExp(_, ref mut lhs, ref mut rhs) => {
|
||||||
|
self.expr(lhs)?;
|
||||||
|
self.expr(rhs)?;
|
||||||
|
},
|
||||||
|
PrefixExp(_, ref mut arg) => {
|
||||||
|
self.expr(arg)?;
|
||||||
|
},
|
||||||
|
TupleLiteral(exprs) => {
|
||||||
|
for expr in exprs.iter_mut() {
|
||||||
|
self.expr(expr)?;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Call { ref mut f, arguments } => {
|
||||||
|
self.expr(f)?;
|
||||||
|
for arg in arguments.iter_mut() {
|
||||||
|
self.invoc(arg)?;
|
||||||
|
}
|
||||||
|
}
|
||||||
_ => ()
|
_ => ()
|
||||||
};
|
};
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn invoc(&mut self, invoc: &mut InvocationArgument) -> Result<(), String> {
|
||||||
|
use InvocationArgument::*;
|
||||||
|
match invoc {
|
||||||
|
Positional(expr) => self.expr(expr),
|
||||||
|
Keyword { expr, .. } => self.expr(expr),
|
||||||
|
_ => Ok(())
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO this is incomplete
|
//TODO this is incomplete
|
||||||
|
Loading…
Reference in New Issue
Block a user