From 4a516d8edbaa0d3a02ab3c53e5389cadaee425ff Mon Sep 17 00:00:00 2001 From: Jacob Signorovitch Date: Wed, 7 May 2025 08:16:05 -0400 Subject: [PATCH] Updated builtin functions for scope. --- src/ast.c | 2 +- src/builtin.c | 22 +++++++++++----------- src/include/ast.h | 2 +- src/include/builtin.h | 10 +++++----- src/include/scope.h | 2 +- test/Unity | 2 +- 6 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/ast.c b/src/ast.c index d8c0fb7..360cecd 100644 --- a/src/ast.c +++ b/src/ast.c @@ -123,7 +123,7 @@ void ast_exc_print(ASTExcData* data, int i) { INDENT_END; } -ASTBIFData* ast_bif_data_init(AST* fn(size_t, AST**)) { +ASTBIFData* ast_bif_data_init(AST* fn(size_t, AST**, Scope*)) { return (ASTBIFData*)fn; } diff --git a/src/builtin.c b/src/builtin.c index 2ad2358..c8dca1f 100644 --- a/src/builtin.c +++ b/src/builtin.c @@ -5,11 +5,11 @@ #include #include -AST* builtin_sum(size_t argc, AST** argv) { +AST* builtin_sum(size_t argc, AST** argv, Scope* parent) { ASTNumData total = 0; for (int i = 0; i < argc; i++) { - AST* arg = exec_exp(argv[i]); + AST* arg = exec_exp(argv[i], parent); if (arg->type == AST_TYPE_EXC) return ast_init( AST_TYPE_EXC, @@ -27,9 +27,9 @@ AST* builtin_sum(size_t argc, AST** argv) { return ast_init(AST_TYPE_NUM, ast_num_data_init(total)); } -AST* builtin_sub(size_t argc, AST** argv) { +AST* builtin_sub(size_t argc, AST** argv, Scope* parent) { log_dbg("Got here"); - AST* first = exec_exp(*argv); + AST* first = exec_exp(*argv, parent); if (first->type == AST_TYPE_EXC) return ast_init( AST_TYPE_EXC, @@ -44,7 +44,7 @@ AST* builtin_sub(size_t argc, AST** argv) { ASTNumData total = *(ASTNumData*)first->data; for (int i = 1; i < argc; i++) { - AST* arg = exec_exp(argv[i]); + AST* arg = exec_exp(argv[i], parent); if (arg->type == AST_TYPE_EXC) return ast_init( AST_TYPE_EXC, @@ -62,9 +62,9 @@ AST* builtin_sub(size_t argc, AST** argv) { return ast_init(AST_TYPE_NUM, ast_num_data_init(total)); } -AST* builtin_mul(size_t argc, AST** argv) { +AST* builtin_mul(size_t argc, AST** argv, Scope* parent) { log_dbg("Got here"); - AST* first = exec_exp(*argv); + AST* first = exec_exp(*argv, parent); if (first->type == AST_TYPE_EXC) return ast_init( AST_TYPE_EXC, @@ -79,7 +79,7 @@ AST* builtin_mul(size_t argc, AST** argv) { ASTNumData total = *(ASTNumData*)first->data; for (int i = 1; i < argc; i++) { - AST* arg = exec_exp(argv[i]); + AST* arg = exec_exp(argv[i], parent); if (arg->type == AST_TYPE_EXC) return ast_init( AST_TYPE_EXC, @@ -97,9 +97,9 @@ AST* builtin_mul(size_t argc, AST** argv) { return ast_init(AST_TYPE_NUM, ast_num_data_init(total)); } -AST* builtin_div(size_t argc, AST** argv) { +AST* builtin_div(size_t argc, AST** argv, Scope* parent) { log_dbg("Got here"); - AST* first = exec_exp(*argv); + AST* first = exec_exp(*argv, parent); if (first->type == AST_TYPE_EXC) return ast_init( AST_TYPE_EXC, @@ -114,7 +114,7 @@ AST* builtin_div(size_t argc, AST** argv) { ASTNumData total = *(ASTNumData*)first->data; for (int i = 1; i < argc; i++) { - AST* arg = exec_exp(argv[i]); + AST* arg = exec_exp(argv[i], parent); if (arg->type == AST_TYPE_EXC) return ast_init( AST_TYPE_EXC, diff --git a/src/include/ast.h b/src/include/ast.h index 366e6a3..9d59ca0 100644 --- a/src/include/ast.h +++ b/src/include/ast.h @@ -72,7 +72,7 @@ void ast_exc_print(ASTExcData*, int i); typedef AST* (*ASTBIFData)(size_t argc, AST** argv); // Create a built-in function. -ASTBIFData* ast_bif_data_init(AST* fn(size_t, AST**)); +ASTBIFData* ast_bif_data_init(AST* fn(size_t, AST**, Scope*)); // There is no `ASTBIFData` destroy function, as function pointers are immortal. diff --git a/src/include/builtin.h b/src/include/builtin.h index 6b2c90a..de2034b 100644 --- a/src/include/builtin.h +++ b/src/include/builtin.h @@ -4,20 +4,20 @@ #include "ast.h" // Sum some nums. -AST* builtin_sum(size_t argc, AST** argv); +AST* builtin_sum(size_t argc, AST** argv, Scope* parent); // Subtract nums. -AST* builtin_sub(size_t argc, AST** argv); +AST* builtin_sub(size_t argc, AST** argv, Scope* parent); // Multiply nums. -AST* builtin_mul(size_t argc, AST** argv); +AST* builtin_mul(size_t argc, AST** argv, Scope* parent); // Divide nums. -AST* builtin_div(size_t argc, AST** argv); +AST* builtin_div(size_t argc, AST** argv, Scope* parent); struct builtin_data { char* name; - AST* (*fn)(size_t argc, AST** argv); + AST* (*fn)(size_t argc, AST** argv, Scope* parent); }; static struct builtin_data BUILTIN_FNS[] = { diff --git a/src/include/scope.h b/src/include/scope.h index 467735e..9df1a9f 100644 --- a/src/include/scope.h +++ b/src/include/scope.h @@ -16,6 +16,6 @@ void scope_destroy(Scope* scope); // Destroy the current `Scope` only. void scope_destroy_psv(Scope *scope); // Insert a key/val pair into the `HTab` of a `Scope`. -inline void scope_add(Scope* scope, char* key, void* val); +void scope_add(Scope* scope, char* key, void* val); #endif diff --git a/test/Unity b/test/Unity index 73237c5..cdf1d02 160000 --- a/test/Unity +++ b/test/Unity @@ -1 +1 @@ -Subproject commit 73237c5d224169c7b4d2ec8321f9ac92e8071708 +Subproject commit cdf1d0297effc2736ee847e557b4275b4f02310b