diff options
author | kdx <kdx.42@42l.fr> | 2023-03-17 05:36:27 +0000 |
---|---|---|
committer | kdx <kdx.42@42l.fr> | 2023-03-17 05:37:36 +0000 |
commit | 3ca9bd11165cc86bc38334cac5a0b30fe0e946b9 (patch) | |
tree | a48df33cafc1478bb2958305cbd57d4441aaac10 | |
parent | 2bc0161433869d21a8c99779f39ce2f932389ea0 (diff) | |
download | golem-3ca9bd11165cc86bc38334cac5a0b30fe0e946b9.tar.gz |
note string_ptr in token
-rw-r--r-- | memory.c | 14 | ||||
-rw-r--r-- | onlymain.golem | 1 | ||||
-rw-r--r-- | token.c | 9 | ||||
-rw-r--r-- | token.h | 1 |
4 files changed, 16 insertions, 9 deletions
@@ -16,17 +16,17 @@ strings_len(Token *list) } static int -strings_cat(char *mem, Token *list) +strings_cat(char *mem, Token *list, int off) { - int len = 0; for (Token *e = list; e != NULL; e = e->next) if (e->type == TOK_GROUP) - len += strings_cat(mem + len, e->group.tokens); + off = strings_cat(mem, e->group.tokens, off); else if (e->type == TOK_STRING) { - slice_cpy(mem + len, e->slice); - len += slice_len(e->slice) + 1; + slice_cpy(mem + off, e->slice); + e->string_ptr = off; + off += slice_len(e->slice) + 1; } - return len; + return off; } int @@ -38,7 +38,7 @@ memory_create(Memory *memory, Token *list) perror("memory_create:malloc"); return 1; } - const int cated = strings_cat(memory->strings, list); + const int cated = strings_cat(memory->strings, list, 0); if (cated != len) { fprintf(stderr, "strings_cat wrote %d bytes instead of %d", cated, len); diff --git a/onlymain.golem b/onlymain.golem index 43556bb..e34c1c0 100644 --- a/onlymain.golem +++ b/onlymain.golem @@ -1,4 +1,5 @@ main argc argv { (print [argv (sub argc 1)]); + (print "hello world"); return (less argc 2); } @@ -14,6 +14,7 @@ token_create(Slice slice, unsigned int type) } token->slice = slice; token->type = type; + token->string_ptr = 0; token->prev = NULL; token->next = NULL; return token; @@ -120,8 +121,12 @@ token_print(Token *token, int recurse, int depth) token_print(token->group.scope, 1, depth); token_print(token->group.tokens, 1, depth + 1); } else { - printf("type: %c slice: ", token->type); - slice_print(token->slice); + printf("type: %c slice: \"", token->type); + slice_write(token->slice); + printf("\""); + if (token->type == TOK_STRING) + printf(" string_ptr: %ld", token->string_ptr); + printf("\n"); } if (!recurse) return tok; @@ -27,6 +27,7 @@ enum { typedef struct Token Token; struct Token { unsigned char type; + unsigned long string_ptr; union { Slice slice; Group group; |