From 4ada155b930cb5fb96493dff3a5af8809da3b214 Mon Sep 17 00:00:00 2001 From: Preston Pan Date: Wed, 10 Jan 2024 16:36:53 -0800 Subject: add comments in both stem and also in my c code --- src/builtins.c | 4 ++-- src/main.c | 4 ++-- src/stem.c | 19 +++++++++++++++++++ 3 files changed, 23 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/builtins.c b/src/builtins.c index 31981c3..eb4b521 100644 --- a/src/builtins.c +++ b/src/builtins.c @@ -327,7 +327,7 @@ void strquote(value_t *v) { retval->quote = init_array(10); char *s = malloc(strlen(v1->str_word->value) + 1); strcpy(s, v1->str_word->value); - parser_t *p = init_parser(s); + parser_t *p = parser_pp(s); value_t *cur; while (1) { cur = parser_get_next(p); @@ -405,7 +405,7 @@ void stemexit(value_t *v) { ht_free(WORD_TABLE, value_free); ht_free(FLIT, func_free); array_free(STACK); - free(INBUF); + free(PARSER->source); free(PARSER); array_free(EVAL_STACK); ht_free(OBJ_TABLE, func_free); diff --git a/src/main.c b/src/main.c index 7e9f5d9..3b1f53f 100644 --- a/src/main.c +++ b/src/main.c @@ -49,7 +49,7 @@ int main(int argc, char **argv) { ssize_t bytes_read = getdelim(&INBUF, &len, '\0', FP); fclose(FP); - PARSER = init_parser(INBUF); + PARSER = parser_pp(INBUF); STACK = init_array(10); WORD_TABLE = init_ht(500); EVAL_STACK = init_array(10); @@ -65,7 +65,7 @@ int main(int argc, char **argv) { eval(v); } - free(INBUF); + free(PARSER->source); ht_free(WORD_TABLE, value_free); ht_free(FLIT, func_free); ht_free(OBJ_TABLE, custom_free); diff --git a/src/stem.c b/src/stem.c index d2204f9..b9e0a16 100644 --- a/src/stem.c +++ b/src/stem.c @@ -161,6 +161,25 @@ void parser_reset(parser_t *p, char *source) { p->c = source[0]; } +parser_t *parser_pp(char *s) { + parser_t *p = init_parser(s); + string_t *rstr = init_string(NULL); + while (p->c != '\0') { + if (p->c == '#') { + while (p->c != '\n' && p->c != '\0') { + parser_move(p); + } + } else { + string_append(rstr, p->c); + parser_move(p); + } + } + free(p->source); + parser_reset(p, rstr->value); + free(rstr); + return p; +} + void parser_move(parser_t *p) { if (p->i < strlen(p->source) && p->c != '\0') { p->i++; -- cgit