summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpeter <peter@pmikkelsen.com>2026-08-30 14:25:56 +0000
committerpeter <peter@pmikkelsen.com>2026-08-30 14:25:56 +0000
commit2261ffa04ddf30a7c8eae6e64129b293fc8bffd9 (patch)
tree1c81cb85450ceb66e7e4f56d46ec374ccfaca0e5
parent8521b6a69deab8cdabe1c87b09ecdc93d75af98e (diff)
Let the memory allocation code set the last_error to APLWC_OUT_OF_MEMORY, instead of the callers
FossilOrigin-Name: 46c74e207a84e861636dbfebc4ba8bb9e7b17401dfd2c4fb9bdeae0fa98fd530
-rw-r--r--src/lib/eval.c9
-rw-r--r--src/lib/main.c6
-rw-r--r--src/lib/memory.c4
-rw-r--r--src/lib/module.c4
-rw-r--r--src/lib/string.c3
-rw-r--r--src/lib/syntax.c4
6 files changed, 12 insertions, 18 deletions
diff --git a/src/lib/eval.c b/src/lib/eval.c
index 649914d..21fb223 100644
--- a/src/lib/eval.c
+++ b/src/lib/eval.c
@@ -10,10 +10,9 @@ eval_line(struct aplwc_line *line)
assert(aplwc->last_error == APLWC_OK);
value = memory_alloc_aplwc_value(aplwc);
- if(value == NULL)
- aplwc->last_error = APLWC_OUT_OF_MEMORY;
- value->aplwc = aplwc;
- value->tag = VALUE_NULL;
-
+ if(value != NULL){
+ value->aplwc = aplwc;
+ value->tag = VALUE_NULL;
+ }
return value;
}
diff --git a/src/lib/main.c b/src/lib/main.c
index fa7e547..2bd374b 100644
--- a/src/lib/main.c
+++ b/src/lib/main.c
@@ -10,7 +10,7 @@ aplwc_new(struct aplwc **p, uint8_t *data, size_t size)
*p = memory_alloc_aplwc(&tmp_aplwc);
if(*p == NULL)
- return APLWC_OUT_OF_MEMORY;
+ return tmp_aplwc.last_error;
memcpy(*p, &tmp_aplwc, sizeof(tmp_aplwc));
return aplwc_load_module(*p, "Boot", (const char *)boot_src, boot_src_len);
@@ -84,10 +84,8 @@ aplwc_read(struct aplwc *aplwc, const char *line)
return NULL;
ret = memory_alloc_aplwc_line(aplwc);
- if(ret == NULL){
- aplwc->last_error = APLWC_OUT_OF_MEMORY;
+ if(ret == NULL)
return NULL;
- }
ret->aplwc = aplwc;
ret->text = text;
diff --git a/src/lib/memory.c b/src/lib/memory.c
index 24d3d68..ca4babf 100644
--- a/src/lib/memory.c
+++ b/src/lib/memory.c
@@ -30,8 +30,10 @@ alloc(struct aplwc *aplwc, size_t size, size_t align)
assert((((uintptr_t)p) % align) == 0);
aplwc->offset += alloc_size;
memset(p, 0, size);
- }else
+ }else{
p = NULL;
+ aplwc->last_error = APLWC_OUT_OF_MEMORY;
+ }
return p;
}
diff --git a/src/lib/module.c b/src/lib/module.c
index 4c96f64..db5dc78 100644
--- a/src/lib/module.c
+++ b/src/lib/module.c
@@ -59,10 +59,8 @@ load_module(struct aplwc *aplwc, struct string *name, struct token_list *tokens)
struct aplwc_module *module;
module = memory_alloc_aplwc_module(aplwc);
- if(module == NULL){
- aplwc->last_error = APLWC_OUT_OF_MEMORY;
+ if(module == NULL)
return aplwc->last_error;
- }
module->aplwc = aplwc;
module->name = name;
module->tokens = tokens;
diff --git a/src/lib/string.c b/src/lib/string.c
index d10fb1f..cc6c6cb 100644
--- a/src/lib/string.c
+++ b/src/lib/string.c
@@ -74,8 +74,7 @@ invalid:
string->bytes = bytecount;
string->chars = charcount;
memcpy(string->utf8, utf8, bytecount);
- }else
- aplwc->last_error = APLWC_OUT_OF_MEMORY;
+ }
return string;
}
diff --git a/src/lib/syntax.c b/src/lib/syntax.c
index 9888bef..16d0363 100644
--- a/src/lib/syntax.c
+++ b/src/lib/syntax.c
@@ -247,10 +247,8 @@ scan_string(struct aplwc *aplwc, struct string *text, int oneline)
}
tokens = memory_alloc_token_list(aplwc, n);
- if(tokens == NULL){
- aplwc->last_error = APLWC_OUT_OF_MEMORY;
+ if(tokens == NULL)
return NULL;
- }
tokens->text = text;
tokens->length = n;
scan(text, tokens);