diff options
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/Makefile.am | 13 | ||||
| -rw-r--r-- | src/lib/aplwc_internal.h | 4 | ||||
| -rw-r--r-- | src/lib/memory.c | 46 | ||||
| -rw-r--r-- | src/lib/module.c | 1 | ||||
| -rw-r--r-- | src/lib/syntax.c | 1 |
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; |