WIP: refactor api

This commit is contained in:
2026-07-21 19:18:53 +02:00
parent 5b6c343ae3
commit 8ec82a66e0
4 changed files with 214 additions and 131 deletions
+24 -20
View File
@@ -32,7 +32,7 @@ typedef struct s_Node Node;
typedef struct s_Nodes Nodes;
typedef struct s_Scopes Scopes;
typedef Node *(*LispFunction)(Nodes *args, Scopes *scopes);
typedef int (*LispFunction)(Nodes *args, Scopes *scopes, Node *result);
struct s_Node {
NodeKind kind;
@@ -66,7 +66,7 @@ typedef struct s_Scope {
} Scope;
struct s_Scopes {
Scope *items;
Scope **items;
size_t count;
size_t capacity;
};
@@ -76,27 +76,31 @@ void node_print(Node node);
void build_scopes(Scopes *scopes);
void tokenize(Nob_String_View content, Tokens *tokens);
Node *parse(Tokens *tokens);
Node *eval(Node *node, Scopes *scopes);
int parse_one(Tokens *tokens, Node *node);
void parse(Tokens *tokens, Nodes *nodes);
int eval_one(Node input, Scopes *scopes, Node *result);
int eval(Nodes *inputs, Scopes *scopes, Nodes *results);
// builtins
Node *lisp_function_add(Nodes *args, Scopes *scopes);
Node *lisp_function_sub(Nodes *args, Scopes *scopes);
Node *lisp_function_div(Nodes *args, Scopes *scopes);
Node *lisp_function_mul(Nodes *args, Scopes *scopes);
Node *lisp_function_mod(Nodes *args, Scopes *scopes);
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);
Node *lisp_function_eq(Nodes *args, Scopes *scopes);
Node *lisp_function_lt(Nodes *args, Scopes *scopes);
Node *lisp_function_gt(Nodes *args, Scopes *scopes);
Node *lisp_function_lt_eq(Nodes *args, Scopes *scopes);
Node *lisp_function_gt_eq(Nodes *args, Scopes *scopes);
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);
Node *lisp_function_println(Nodes *args, Scopes *scopes);
Node *lisp_function_list(Nodes *args, Scopes *scopes);
Node *lisp_function_append(Nodes *args, Scopes *scopes);
Node *lisp_function_length(Nodes *args, Scopes *scopes);
Node *lisp_function_isnull(Nodes *args, Scopes *scopes);
Node *lisp_function_builtins(Nodes *args, Scopes *scopes);
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