Working type checker with functions
This commit is contained in:
+2
-14
@@ -11,27 +11,15 @@ pub fn walk_ast(top_scope: Arc<Scope>, tl: &mut Vec<parser::ast::TopLevel>) {
|
||||
match tl {
|
||||
parser::ast::TopLevel::Import(_) => unimplemented!(),
|
||||
|
||||
parser::ast::TopLevel::FunctionDecl {
|
||||
export,
|
||||
name,
|
||||
params,
|
||||
return_type,
|
||||
body,
|
||||
} => {
|
||||
parser::ast::TopLevel::FunctionDecl { params, body, .. } => {
|
||||
let scope = LocalScope::new(top_scope.clone());
|
||||
|
||||
scope.with_params(params);
|
||||
|
||||
scope.with_block(body);
|
||||
|
||||
println!("{:?}", scope);
|
||||
}
|
||||
|
||||
parser::ast::TopLevel::StructDecl {
|
||||
export,
|
||||
name,
|
||||
fields,
|
||||
} => {}
|
||||
parser::ast::TopLevel::StructDecl { .. } => {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -92,6 +92,13 @@ impl LocalScope {
|
||||
}
|
||||
_ => unimplemented!(),
|
||||
},
|
||||
Postfix::Call(_args) => match &*current_type {
|
||||
TypeRef::Function(s) => {
|
||||
// TODO: arg checking
|
||||
current_type = s.return_type.clone()?;
|
||||
}
|
||||
_ => unimplemented!(),
|
||||
},
|
||||
_ => unimplemented!(),
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -3,7 +3,7 @@ struct Test {
|
||||
}
|
||||
|
||||
function add() {
|
||||
let output = test().x;
|
||||
let output = test();
|
||||
}
|
||||
|
||||
function test(): Test { }
|
||||
function test(): int { }
|
||||
Reference in New Issue
Block a user