Remove ast_visit

This commit is contained in:
Krzosa Karol
2023-03-28 21:14:41 +02:00
parent 90c96f1495
commit f53d5dd1f2

View File

@@ -429,147 +429,6 @@ GetTypeInfo :: (type: Type): *Type_Info
pctx->type_string = string_decl->type_val;
}
typedef void Ast_Visit_Callback(Ast *ast);
void ast_visit(uint32_t visit_id, Ast_Visit_Callback *callback, Ast *ast) {
if (!ast) return;
callback(ast);
switch(ast->kind) {
CASE(MODULE, Module) {
if (node->visit_id == visit_id) return;
node->visit_id = visit_id;
For(node->decls) ast_visit(visit_id, callback, it);
For(node->implicit_imports) ast_visit(visit_id, callback, it);
For(node->stmts) ast_visit(visit_id, callback, it);
For(node->all_loaded_files) ast_visit(visit_id, callback, it);
BREAK();
}
CASE(FILE, File) {
if (node->visit_id == visit_id) return;
node->visit_id = visit_id;
For(node->decls) ast_visit(visit_id, callback, it);
For(node->implicit_imports) ast_visit(visit_id, callback, it);
For(node->stmts) ast_visit(visit_id, callback, it);
BREAK();
}
CASE(SCOPE, Scope) {
if (node->visit_id == visit_id) return;
node->visit_id = visit_id;
For(node->decls) ast_visit(visit_id, callback, it);
For(node->implicit_imports) ast_visit(visit_id, callback, it);
For(node->stmts) ast_visit(visit_id, callback, it);
BREAK();
}
CASE(LAMBDA, Decl){
Ast_Lambda *lambda = node->lambda;
For(lambda->ret) ast_visit(visit_id, callback, it);
For(lambda->args) ast_visit(visit_id, callback, it);
ast_visit(visit_id, callback, node->typespec);
ast_visit(visit_id, callback, node->scope);
ast_visit(visit_id, callback, lambda->scope);
BREAK();
}
CASE(CONST, Decl){
ast_visit(visit_id, callback, node->expr);
ast_visit(visit_id, callback, node->typespec);
ast_visit(visit_id, callback, node->scope);
BREAK();
}
CASE(VAR, Decl){
ast_visit(visit_id, callback, node->expr);
ast_visit(visit_id, callback, node->typespec);
ast_visit(visit_id, callback, node->scope);
BREAK();
}
case AST_NAMESPACE:
CASE(ENUM, Decl){
ast_visit(visit_id, callback, node->typespec);
For(node->scope->decls) ast_visit(visit_id, callback, it);
BREAK();
}
CASE(INDEX, Index) {
ast_visit(visit_id, callback, node->expr);
ast_visit(visit_id, callback, node->index);
BREAK();
}
CASE(STRUCT, Decl) {
// @todo
BREAK();
}
CASE(ARRAY, Array) {
ast_visit(visit_id, callback, node->base);
ast_visit(visit_id, callback, node->expr);
BREAK();
}
CASE(BINARY, Binary) {
ast_visit(visit_id, callback, node->left);
ast_visit(visit_id, callback, node->right);
BREAK();
}
CASE(VAR_UNPACK, Var_Unpack) {
For(node->vars) ast_visit(visit_id, callback, it);
ast_visit(visit_id, callback, node->expr);
BREAK();
}
CASE(UNARY, Unary) {
ast_visit(visit_id, callback, node->expr);
BREAK();
}
case AST_COMPOUND:
CASE(CALL, Call){
ast_visit(visit_id, callback, node->name); // @union
For(node->exprs) ast_visit(visit_id, callback, it);
BREAK();
}
CASE(CALL_ITEM, Call_Item){
ast_visit(visit_id, callback, node->item);
ast_visit(visit_id, callback, node->name); // @union
BREAK();
}
case AST_CONSTANT_ASSERT:
CASE(RUNTIME_ASSERT, Builtin){
ast_visit(visit_id, callback, node->expr);
BREAK();
}
CASE(RETURN, Return){
For(node->expr) ast_visit(visit_id, callback, it);
BREAK();
}
CASE(FOR, For) {
ast_visit(visit_id, callback, node->init);
ast_visit(visit_id, callback, node->cond);
ast_visit(visit_id, callback, node->iter);
ast_visit(visit_id, callback, node->scope);
ast_visit(visit_id, callback, node->array_traversal_var);
BREAK();
}
CASE(IF, If) {
For(node->ifs) ast_visit(visit_id, callback, it);
BREAK();
}
CASE(IF_NODE, If_Node) {
ast_visit(visit_id, callback, node->expr);
ast_visit(visit_id, callback, node->scope);
ast_visit(visit_id, callback, node->init);
BREAK();
}
CASE(SWITCH_CASE, Switch_Case) {
For(node->labels) ast_visit(visit_id, callback, it);
ast_visit(visit_id, callback, node->scope);
BREAK();
}
CASE(SWITCH, Switch) {
ast_visit(visit_id, callback, node->value);
For(node->cases) ast_visit(visit_id, callback, it);
ast_visit(visit_id, callback, node->default_scope);
BREAK();
}
case AST_VALUE: case AST_IDENT: case AST_PASS: case AST_BREAK: break;
invalid_default_case;
}
}
CORE_Static String
compile_file_to_string(Allocator *allocator, String filename) {
F64 total_time = os_time();