From fa6a3ee5b24d5e227798330cff5f9ff060d6d863 Mon Sep 17 00:00:00 2001 From: peter Date: Thu, 3 Sep 2026 19:31:52 +0000 Subject: Don't dynamically allocate external reference counted pointers, just use what the user puts on the stack. FossilOrigin-Name: 270cf0d72050bea15fc40a1e2811ba642e3ef26cbe1fa6231c5aa6f1872ccb34 --- src/lib/main.c | 44 ++++++++++++++++++++------------------------ 1 file changed, 20 insertions(+), 24 deletions(-) (limited to 'src/lib/main.c') diff --git a/src/lib/main.c b/src/lib/main.c index 3ea08e5..d2c353f 100644 --- a/src/lib/main.c +++ b/src/lib/main.c @@ -103,17 +103,16 @@ aplwc_last_error(struct aplwc *aplwc) return aplwc->last_error; } -AplwcLine -aplwc_read(struct aplwc *aplwc, const char *linestr) +void +aplwc_read(struct aplwc *aplwc, const char *linestr, AplwcLine *lineptr) { struct string *text; struct token_list *tokens; struct aplwc_line *line; - AplwcLine ret; MEMPTRS(aplwc, 2); - aplwc_clear_line(&ret); + aplwc_clear_line(lineptr); if((text = chars_to_string(aplwc, linestr, -1)) == NULL) goto end; @@ -132,50 +131,47 @@ aplwc_read(struct aplwc *aplwc, const char *linestr) line->text = text; line->tokens = tokens; - ret.ref = memory_root_new(aplwc, line); + memory_root_new(aplwc, line, &lineptr->ref); end: MEMPTRS_EXIT(aplwc); - return ret; } void -aplwc_free_line(AplwcLine line) +aplwc_free_line(AplwcLine *line) { - memory_root_free(line.ref); + memory_root_free(&line->ref); } -AplwcValue -aplwc_eval(AplwcLine line) +void +aplwc_eval(AplwcLine *line, AplwcValue *value) { - AplwcValue value; struct aplwc_line *l; struct aplwc_value *v; struct aplwc *aplwc; - aplwc = line.ref.aplwc; + aplwc = line->ref.aplwc; - aplwc_clear_value(&value); - l = memory_root_get(line.ref); + aplwc_clear_value(value); + l = memory_root_get(&line->ref); aplwc->last_error = APLWC_OK; v = eval_line(aplwc, l); if(v) - value.ref = memory_root_new(aplwc, v); - return value; + memory_root_new(aplwc, v, &value->ref); } void -aplwc_free_value(AplwcValue value) +aplwc_free_value(AplwcValue *value) { - memory_root_free(value.ref); + memory_root_free(&value->ref); } const char * -aplwc_value_string(AplwcValue value) +aplwc_value_string(AplwcValue *value) { struct aplwc_value *v; assert(aplwc_valid_value(value)); - v = memory_root_get(value.ref); + v = memory_root_get(&value->ref); switch(v->tag){ default: return "???"; @@ -221,13 +217,13 @@ aplwc_clear_line(AplwcLine *l) } int -aplwc_valid_value(AplwcValue v) +aplwc_valid_value(AplwcValue *v) { - return valid_ref(v.ref); + return valid_ref(&v->ref); } int -aplwc_valid_line(AplwcLine l) +aplwc_valid_line(AplwcLine *l) { - return valid_ref(l.ref); + return valid_ref(&l->ref); } -- cgit v1.2.3