diff options
| author | Nakidai <nakidai@disroot.org> | 2025-03-26 20:46:12 +0300 |
|---|---|---|
| committer | Nakidai <nakidai@disroot.org> | 2025-03-26 20:46:12 +0300 |
| commit | 7b94dd5d7f4b8604ed3af6499edde8286d9073c9 (patch) | |
| tree | e92d274315e72d9047033d535cfa71a3de2f93a3 | |
| parent | 6fa64679e24b2bef4aee49657df1b2f411b18392 (diff) | |
| download | 3cl-7b94dd5d7f4b8604ed3af6499edde8286d9073c9.tar.gz 3cl-7b94dd5d7f4b8604ed3af6499edde8286d9073c9.zip | |
Make dump more flexible for streams
| -rw-r--r-- | cccl.c | 2 | ||||
| -rw-r--r-- | cccl.h | 3 | ||||
| -rw-r--r-- | executor.c | 16 |
3 files changed, 11 insertions, 10 deletions
diff --git a/cccl.c b/cccl.c index cd952d1..c574a87 100644 --- a/cccl.c +++ b/cccl.c @@ -17,5 +17,5 @@ void cccl(struct cccl_File file) struct cccl_Variables scope = {0}; cccl_execute(parsed, &scope, 0); if (dump) - cccl_dump(); + cccl_dump(stdout); } diff --git a/cccl.h b/cccl.h index 8bf3d0c..a49ac8a 100644 --- a/cccl.h +++ b/cccl.h @@ -2,6 +2,7 @@ #define __CCCL_H__ #include <stddef.h> +#include <stdio.h> #define TOKENS_LIMIT 16384 @@ -98,7 +99,7 @@ void cccl(struct cccl_File file); size_t cccl_tokenize(const char *code, size_t size, struct cccl_Token tokens[], size_t tokens_length); struct cccl_Node *cccl_parse(struct cccl_Token tokens[], size_t tokens_length, enum cccl_NodeType type, char value); enum cccl_ExecutorStatus cccl_execute(struct cccl_Node *code, struct cccl_Variables *scope, size_t depth); -void cccl_dump(void); +void cccl_dump(FILE *f); const char *strtoken(enum cccl_TokenType type); const char *strnode(enum cccl_NodeType type); diff --git a/executor.c b/executor.c index 37cffc6..993870a 100644 --- a/executor.c +++ b/executor.c @@ -47,19 +47,19 @@ static short *get_variable(char name, struct cccl_Variables *scope) return NULL; } -void cccl_dump(void) +void cccl_dump(FILE *f) { - fputs("Globals:\n", stderr); + fputs("Globals:\n", f); for (size_t i = 0; i < 52; ++i) if (globals.used[i]) - fprintf(stderr, " %c=%d\n", getnamebyi(i), globals.buffer[i]); - fputs("Functions:\n", stderr); + fprintf(f, " %c=%d\n", getnamebyi(i), globals.buffer[i]); + fputs("Functions:\n", f); for (size_t i = 0; i < 52; ++i) if (functions[i].body) - fprintf(stderr, " %c, %lu nodes\n", getnamebyi(i), functions[i].length); - fputs("Stack:\n", stderr); + fprintf(f, " %c, %lu nodes\n", getnamebyi(i), functions[i].length); + fputs("Stack:\n", f); for (size_t i = 0; i < stack.length; ++i) - fprintf(stderr, " %d\n", stack.buffer[i]); + fprintf(f, " %d\n", stack.buffer[i]); } enum cccl_ExecutorStatus cccl_execute(struct cccl_Node *code, struct cccl_Variables *scope, size_t depth) @@ -82,7 +82,7 @@ enum cccl_ExecutorStatus cccl_execute(struct cccl_Node *code, struct cccl_Variab for (size_t i = 0; i < 52; ++i) if (scope->used[i]) fprintf(stderr, " %c=%d\n", getnamebyi(i), scope->buffer[i]); - cccl_dump(); + cccl_dump(stderr); } } switch (code->type) |