Remove ast_visit
This commit is contained in:
@@ -429,147 +429,6 @@ GetTypeInfo :: (type: Type): *Type_Info
|
|||||||
pctx->type_string = string_decl->type_val;
|
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
|
CORE_Static String
|
||||||
compile_file_to_string(Allocator *allocator, String filename) {
|
compile_file_to_string(Allocator *allocator, String filename) {
|
||||||
F64 total_time = os_time();
|
F64 total_time = os_time();
|
||||||
|
|||||||
Reference in New Issue
Block a user