summaryrefslogtreecommitdiff
path: root/src/lib/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/main.c')
-rw-r--r--src/lib/main.c44
1 files changed, 20 insertions, 24 deletions
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);
}