summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorpeter <peter@pmikkelsen.com>2026-09-22 19:20:39 +0000
committerpeter <peter@pmikkelsen.com>2026-09-22 19:20:39 +0000
commit1e88f84ab887be0330585fdb7b8eeb22280cc9d6 (patch)
treedd0b7a9855532881dcb7b526e9fe5874770c8c4c /src/lib
parent83bdc0e59232434fc30f94e2fc3a22e81989e4dd (diff)
parent949896e24ef16d703ee07fb3e489f2a986050d5b (diff)
Switch to using autoconf/automake instead of cmake
FossilOrigin-Name: a2ebdf11ce7ef258d626a19c68be57e4facb6cfdf4653584eb32c70eca90b6ae
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/Makefile.am13
-rw-r--r--src/lib/aplwc_internal.h4
-rw-r--r--src/lib/memory.c46
-rw-r--r--src/lib/module.c1
-rw-r--r--src/lib/syntax.c1
5 files changed, 42 insertions, 23 deletions
diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am
new file mode 100644
index 0000000..c95fe1c
--- /dev/null
+++ b/src/lib/Makefile.am
@@ -0,0 +1,13 @@
+lib_LIBRARIES += libaplwc.a
+
+libaplwc_a_SOURCES = \
+ src/lib/aplwc_internal.h \
+ src/lib/eval.c \
+ src/lib/main.c \
+ src/lib/memory.c \
+ src/lib/module.c \
+ src/lib/string.c \
+ src/lib/symtab.c \
+ src/lib/syntax.c
+
+EXTRA_DIST += src/lib/boot.aplwc
diff --git a/src/lib/aplwc_internal.h b/src/lib/aplwc_internal.h
index 328b5de..8c13dfe 100644
--- a/src/lib/aplwc_internal.h
+++ b/src/lib/aplwc_internal.h
@@ -67,7 +67,7 @@ struct aplwc_line {
struct string {
size_t bytes;
size_t chars;
- uint8_t utf8[1];
+ uint8_t utf8[FLEXIBLE_ARRAY_MEMBER];
};
enum token_tag {
@@ -100,7 +100,7 @@ struct token {
struct token_list {
struct string *text;
size_t length;
- struct token tokens[1];
+ struct token tokens[FLEXIBLE_ARRAY_MEMBER];
};
enum value_tag {
diff --git a/src/lib/memory.c b/src/lib/memory.c
index 051acba..a8317c7 100644
--- a/src/lib/memory.c
+++ b/src/lib/memory.c
@@ -41,7 +41,9 @@ struct chunk {
unsigned int last:1;
};
+#if APLWC_BUILD_TYPE_DEBUG
static void debug_check_mem(struct aplwc *);
+#endif /* APLWC_BUILD_TYPE_DEBUG */
void
memory_init(struct aplwc *aplwc)
@@ -436,27 +438,6 @@ compact(struct aplwc *aplwc)
}
}
-static void
-debug_check_mem(struct aplwc *aplwc)
-{
- uint64_t size;
- struct chunk *c, *prev;
-
- size = 0;
- prev = NULL;
- for(c = (struct chunk *)aplwc->data; c; prev = c, c = next(c)){
- assert(((uint8_t*)c) < (aplwc->data+aplwc->size));
- assert((c->size % ALIGNMENT) == 0);
- assert(c->stack == NULL);
- size += c->size;
- assert((c->last == 0) != (size == aplwc->size));
- if(c->tag == CHUNK_TAG_FREE)
- assert((prev == NULL) || (prev->tag != CHUNK_TAG_FREE));
- }
-
- assert(size == aplwc->size);
-}
-
static void *
alloc(struct aplwc *aplwc, size_t size, enum chunk_tag tag)
{
@@ -653,3 +634,26 @@ valid_ref(struct aplwc_ref *ref)
{
return (ref->aplwc != NULL) && (ref->ptr != NULL);
}
+
+#if APLWC_BUILD_TYPE_DEBUG
+static void
+debug_check_mem(struct aplwc *aplwc)
+{
+ uint64_t size;
+ struct chunk *c, *prev;
+
+ size = 0;
+ prev = NULL;
+ for(c = (struct chunk *)aplwc->data; c; prev = c, c = next(c)){
+ assert(((uint8_t*)c) < (aplwc->data+aplwc->size));
+ assert((c->size % ALIGNMENT) == 0);
+ assert(c->stack == NULL);
+ size += c->size;
+ assert((c->last == 0) != (size == aplwc->size));
+ if(c->tag == CHUNK_TAG_FREE)
+ assert((prev == NULL) || (prev->tag != CHUNK_TAG_FREE));
+ }
+
+ assert(size == aplwc->size);
+}
+#endif /* APLWC_BUILD_TYPE_DEBUG */
diff --git a/src/lib/module.c b/src/lib/module.c
index 2ef5ba3..aaa9634 100644
--- a/src/lib/module.c
+++ b/src/lib/module.c
@@ -67,6 +67,7 @@ read_keyword_decl(struct aplwc *aplwc, struct aplwc_module *module, size_t offse
max = module->tokens->length - offset - 1;
+ len = -1;
assert(t(0).tag == TOKEN_TAG_KEYWORD);
switch(t(0).data.keyword){
case KW_MODULE:
diff --git a/src/lib/syntax.c b/src/lib/syntax.c
index 4850b1a..1740a4e 100644
--- a/src/lib/syntax.c
+++ b/src/lib/syntax.c
@@ -425,6 +425,7 @@ scan_string(struct aplwc *aplwc, struct string *text, int oneline)
MEMPTR(0, text);
tokens = NULL;
+ n = 0;
if((rc = check(aplwc, text, &n)) != APLWC_OK)
goto end;