summaryrefslogtreecommitdiff
path: root/src/lib/main.c
diff options
context:
space:
mode:
authorpeter <peter@pmikkelsen.com>2026-08-21 10:55:30 +0000
committerpeter <peter@pmikkelsen.com>2026-08-21 10:55:30 +0000
commit8af7b7fc0a8dbe3502a7cd43c6a10fdcc6013677 (patch)
tree68f2456a9f31044ca088a26a2c3306c98e6cce2b /src/lib/main.c
parent86feda786f115cb4468957f00b8968b986ed7c54 (diff)
Start working on the scanner.
For now, all that is implemented is some functionality which imports UTF-8 into the memory managed by aplwc, after checking that the data is in fact valid UTF-8. FossilOrigin-Name: c861e88777d8180cb7b37c11fc7016a900f9d5821a7e3c8e8aab54118d2fca94
Diffstat (limited to 'src/lib/main.c')
-rw-r--r--src/lib/main.c52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/lib/main.c b/src/lib/main.c
index f7cbe7d..cca1e68 100644
--- a/src/lib/main.c
+++ b/src/lib/main.c
@@ -30,6 +30,10 @@ aplwc_errstr_rc(enum aplwc_rc rc)
return "";
case APLWC_OUT_OF_MEMORY:
return "Out of memory";
+ case APLWC_NOT_YET_IMPLEMENTED:
+ return "Not yet implemented";
+ case APLWC_INVALID_UTF8:
+ return "Invalid UTF-8";
default:
return "(unable to produce error string)";
}
@@ -50,3 +54,51 @@ aplwc_errstr(struct aplwc *aplwc)
return err;
}
+
+enum aplwc_rc
+aplwc_last_error(struct aplwc *aplwc)
+{
+ return aplwc->last_error;
+}
+
+struct aplwc_line *
+aplwc_read(struct aplwc *aplwc, const char *line)
+{
+ struct string *text;
+ struct token_list *tokens;
+ struct aplwc_line *ret;
+
+ text = chars_to_string(aplwc, line);
+ if(text == NULL)
+ return NULL;
+
+ tokens = scan_line(aplwc, text);
+ if(tokens == NULL)
+ return NULL;
+
+ ret = memory_alloc_aplwc_line(&aplwc->memory);
+ if(ret == NULL)
+ return NULL;
+
+ ret->aplwc = aplwc;
+ ret->text = text;
+ ret->tokens = tokens;
+
+ return ret;
+}
+
+void
+aplwc_free_line(struct aplwc_line *line)
+{
+ if(line == NULL)
+ return;
+ memory_free_aplwc_line(&line->aplwc->memory, line);
+}
+
+enum aplwc_rc
+aplwc_eval(struct aplwc_line *line)
+{
+ line->aplwc->last_error = APLWC_OK;
+ eval_line(line);
+ return line->aplwc->last_error;
+}