OnyxTypeInfo *return_type;
OnyxAstNode *next;
OnyxAstNode *body;
- OnyxAstNodeScope *scope; // NOTE: Only set on blocks belonging to functions
+ OnyxAstNodeScope *scope;
};
struct OnyxAstNodeIf {
print :: foreign "host" "print" proc (value i32) ---
-foo :: proc -> i32 {
- a := 2 + 4;
- a = 5;
- bar(a + 1);
- print(bar(a));
- return a;
-}
+diff_square :: proc (a i32, b i32) -> i32 {
+ // Typechecked
+ c := a - b; // Mutable
+ d :: a + b; // Constant
+
+ {
+ c : i32 = a * 2;
+ d : i32 = (c + a) * 2;
+ }
-bar :: proc (val i32) -> i32 {
- return val + 1;
+ return c * d;
}
case ONYX_AST_NODE_KIND_IF: symres_if(state, &stmt->as_if); return 0;
case ONYX_AST_NODE_KIND_CALL: symres_call(state, stmt); return 0;
case ONYX_AST_NODE_KIND_ARGUMENT: symres_expression(state, (OnyxAstNode **) &stmt->left); return 0;
+ case ONYX_AST_NODE_KIND_BLOCK: symres_block(state, &stmt->as_block); return 0;
default: return 0;
}
walker->next = NULL;
walker = tmp;
} else {
- trailer = &walker;
+ trailer = &walker->next;
walker = walker->next;
}
}
walker = walker->next;
}
- bh_printf("\n\n");
- bh_table_each_start(SemPassSymbol*, state->symbols) {
- bh_printf("%s -> %l\n", key, (u64) value);
- } bh_table_each_end;
-
// NOTE: First, resolve all symbols
walker = root_node;
while (walker) {