#include "prepass.h" #include "node.h" void prepass_init(prepass_t* prepass, sym_t* sym, tysolver_t* tysolver, err_t* err) { assert(prepass); assert(sym); assert(tysolver); assert(err); prepass->sym = sym; prepass->tysolver = tysolver; prepass->err = err; } void prepass_free(prepass_t* prepass) { assert(prepass); } void prepass_run(prepass_t* prepass, node_t* node) { assert(prepass); assert(node); switch (node->type) { case NODE_VARDECL: { char* name = ((node_t*) node->children.data[0])->value.data; prepass_run(prepass, (node_t*) node->children.data[1]); type_t* type = tysolver_try_solve_node(prepass->tysolver, (node_t*) node->children.data[1]); sym_declare(prepass->sym, name, type); } break; default: { for (size_t i=0; ichildren.size; i++) { prepass_run(prepass, (node_t*) node->children.data[i]); } } break; } }