more refactoring and error checking

This commit is contained in:
2026-07-21 20:45:06 +02:00
parent 09b552ed8c
commit 3f04adcd6b
3 changed files with 75 additions and 57 deletions
+19 -17
View File
@@ -32,7 +32,9 @@ typedef struct s_Node Node;
typedef struct s_Nodes Nodes;
typedef struct s_Scopes Scopes;
typedef int (*LispFunction)(Nodes *args, Scopes *scopes, Node *result);
// args is specifically not a pointer,
// functions shouldn't be able to mess with their arguments
typedef int (*LispFunction)(Nodes args, Scopes *scopes, Node *result);
struct s_Node {
NodeKind kind;
@@ -84,23 +86,23 @@ int eval_one(Node input, Scopes *scopes, Node *result);
int eval(Nodes inputs, Scopes *scopes, Nodes *results);
// builtins
int lisp_function_add(Nodes *args, Scopes *scopes, Node *result);
int lisp_function_sub(Nodes *args, Scopes *scope, Node *result);
int lisp_function_div(Nodes *args, Scopes *scope, Node *result);
int lisp_function_mul(Nodes *args, Scopes *scope, Node *result);
int lisp_function_mod(Nodes *args, Scopes *scope, Node *result);
int lisp_function_add(Nodes args, Scopes *scopes, Node *result);
int lisp_function_sub(Nodes args, Scopes *scope, Node *result);
int lisp_function_div(Nodes args, Scopes *scope, Node *result);
int lisp_function_mul(Nodes args, Scopes *scope, Node *result);
int lisp_function_mod(Nodes args, Scopes *scope, Node *result);
int lisp_function_eq(Nodes *args, Scopes *scope, Node *result);
int lisp_function_lt(Nodes *args, Scopes *scope, Node *result);
int lisp_function_gt(Nodes *args, Scopes *scope, Node *result);
int lisp_function_lt_eq(Nodes *args, Scopes *scope, Node *result);
int lisp_function_gt_eq(Nodes *args, Scopes *scope, Node *result);
int lisp_function_eq(Nodes args, Scopes *scope, Node *result);
int lisp_function_lt(Nodes args, Scopes *scope, Node *result);
int lisp_function_gt(Nodes args, Scopes *scope, Node *result);
int lisp_function_lt_eq(Nodes args, Scopes *scope, Node *result);
int lisp_function_gt_eq(Nodes args, Scopes *scope, Node *result);
int lisp_function_println(Nodes *args, Scopes *scopes, Node *result);
int lisp_function_list(Nodes *args, Scopes *scopes, Node *result);
int lisp_function_append(Nodes *args, Scopes *scope, Node *result);
int lisp_function_length(Nodes *args, Scopes *scope, Node *result);
int lisp_function_isnull(Nodes *args, Scopes *scope, Node *result);
int lisp_function_builtins(Nodes *args, Scopes *scopes, Node *result);
int lisp_function_println(Nodes args, Scopes *scopes, Node *result);
int lisp_function_list(Nodes args, Scopes *scopes, Node *result);
int lisp_function_append(Nodes args, Scopes *scope, Node *result);
int lisp_function_length(Nodes args, Scopes *scope, Node *result);
int lisp_function_isnull(Nodes args, Scopes *scope, Node *result);
int lisp_function_builtins(Nodes args, Scopes *scopes, Node *result);
#endif // LISP_H