Added basic for i loops. Missing some breaking tests and more tests. Also want to add for each at some point and it_index.
This commit is contained in:
@@ -1485,6 +1485,33 @@ check_node :: (checker : *Semantic_Checker, node : *AST_Node) -> Type_Variable_H
|
||||
case .Return; {
|
||||
return check_node(checker, node.children[0]);
|
||||
}
|
||||
case .For; {
|
||||
loop_iterator := node.token;
|
||||
|
||||
symbol : Defined_Symbol;
|
||||
symbol.name = loop_iterator.ident_value;
|
||||
symbol.source_node = node;
|
||||
variable, handle := new_type_variable(checker);
|
||||
variable.name = symbol.name;
|
||||
typename : string;
|
||||
variable.type = .Int;
|
||||
symbol.type_variable = handle;
|
||||
add_symbol_to_scope(checker.state, *checker.result.scope_stack, checker.current_scope, symbol.name, symbol);
|
||||
|
||||
begin_iter := check_node(checker, node.children[0]);
|
||||
begin_var := from_handle(checker, begin_iter);
|
||||
if begin_var.type != .Int {
|
||||
|
||||
}
|
||||
|
||||
end_iter := check_node(checker, node.children[1]);
|
||||
end_var := from_handle(checker, end_iter);
|
||||
if end_var.type != .Int {
|
||||
|
||||
}
|
||||
|
||||
check_block(checker, node.children[2]);
|
||||
}
|
||||
case .If; {
|
||||
cond_var := check_node(checker, node.children[0]);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user