diff --git a/src/ast.c b/src/ast.c index 97bce46..32f78de 100644 --- a/src/ast.c +++ b/src/ast.c @@ -2,7 +2,7 @@ #include "include/ast.h" #include "include/dstr.h" -#include "include/htab.h" +#include "include/scope.h" #include "include/util.h" extern AST* root; @@ -28,7 +28,7 @@ AST* ast_init(ASTType type, void* data) { return ast; } -AST* ast_init_scope(ASTType type, void* data, HTab* scope) { +AST* ast_init_scope(ASTType type, void* data, Scope* scope) { AST* ast = malloc(sizeof(AST)); ast->type = type; @@ -53,8 +53,8 @@ void ast_destroy(AST* ast) { log_dbgf("Unknown ast type %d (max: %d)", ast->type, AST_TYPE_MAX); } + scope_destroy_psv(ast->scope); free(ast); - htab_destroy(ast->scope); } void ast_print(AST* ast) { ast_print_i(ast, 0); } diff --git a/src/exec.c b/src/exec.c index cf8a568..276c662 100644 --- a/src/exec.c +++ b/src/exec.c @@ -9,12 +9,11 @@ #include "include/stack.h" #include "include/util.h" -extern AST* root; - AST* exec_find(char* name); AST* exec_start(AST* ast) { log_dbg("Started execution."); + Stack* scope = stack_init(); HTab* global = htab_init(); @@ -47,13 +46,13 @@ AST* exec_block(AST* ast) { ASTBlockData* block = (ASTBlockData*)ast->data; HTab* local = htab_init(); - //stack_push(scope, local); + // stack_push(scope, local); // Loop through all but last ast. for (int i = 0; i < block->ln - 1; i++) exec_exp(block->inside[i]); AST* last = exec_exp(block->inside[block->ln - 1]); - //stack_pop(scope); + // stack_pop(scope); htab_destroy(local); return last; @@ -88,7 +87,7 @@ AST* exec_cf(AST* ast, size_t argc, AST** argv) { for (int i = 0; i < argc; i++) { char* key = ((ASTArgData*)fdef->argv[i]->data)->name; AST* val = argv[i]; - //htab_ins(scope->buf[scope->ln - 1], key, val); + // htab_ins(scope->buf[scope->ln - 1], key, val); } return exec_exp(fdef->body); @@ -111,7 +110,7 @@ AST* exec_vdef(AST* ast) { ASTVDefData* data = (ASTVDefData*)ast->data; AST* val = data->val; char* key = data->name; - //htab_ins(scope->buf[scope->ln - 1], key, val); + // htab_ins(scope->buf[scope->ln - 1], key, val); return exec_exp(val); } @@ -138,7 +137,7 @@ AST* exec_fdef(AST* ast) { ASTFDefData* fdef = (ASTFDefData*)ast->data; AST* val = fdef->body; char* key = fdef->name; - //htab_ins(scope->buf[scope->ln - 1], key, val); + // htab_ins(scope->buf[scope->ln - 1], key, val); return val; // Function definitions return function body. } diff --git a/src/include/ast.h b/src/include/ast.h index 00da251..e384673 100644 --- a/src/include/ast.h +++ b/src/include/ast.h @@ -2,6 +2,7 @@ #define AST_H #include "htab.h" +#include "scope.h" #include // The type of an `AST`. @@ -32,13 +33,13 @@ typedef enum { typedef struct { ASTType type; // The type of the `AST`. void* data; // The data of the `AST`. - HTab* scope; // The scope of the `AST`. + Scope* scope; // The scope of the `AST`. } AST; // Create a new `AST`. AST* ast_init(ASTType type, void* data); // Create a new `AST` with a specified scope. -AST* ast_init_scope(ASTType type, void* data, HTab* scope); +AST* ast_init_scope(ASTType type, void* data, Scope* scope); // Destroy an `AST`, recursively. void ast_destroy(AST* ast); // Print an `AST`, recursively. diff --git a/test/Unity b/test/Unity index cdf1d02..73237c5 160000 --- a/test/Unity +++ b/test/Unity @@ -1 +1 @@ -Subproject commit cdf1d0297effc2736ee847e557b4275b4f02310b +Subproject commit 73237c5d224169c7b4d2ec8321f9ac92e8071708