feat: abstract I/O and strings for freestanding compilation

Co-authored-by: aider (openrouter/moonshotai/kimi-k2.6) <aider@aider.chat>
This commit is contained in:
2026-05-04 10:17:43 +03:00
parent 19c8608c76
commit dbf4eb5d0e
8 changed files with 216 additions and 42 deletions
+4 -4
View File
@@ -5,10 +5,10 @@ Word* add_primitive(const char* name, void (*code)(Word*), uint8_t flags) {
w->prev = dict_head;
dict_head = w;
size_t len = strlen(name);
size_t len = forth_strlen(name);
if (len > MAX_NAME_LEN) len = MAX_NAME_LEN;
w->flags = flags | (uint8_t)len;
memcpy(w->name, name, len);
forth_memcpy(w->name, name, len);
w->name[len] = '\0';
w->code = code;
w->body = NULL;
@@ -18,14 +18,14 @@ Word* add_primitive(const char* name, void (*code)(Word*), uint8_t flags) {
Word* lookup_word(const char* name) {
for (Word* w = dict_head; w != NULL; w = w->prev) {
if (w->flags & (1 << 6)) continue;
if (strcmp(w->name, name) == 0) return w;
if (forth_strcmp(w->name, name) == 0) return w;
}
return NULL;
}
Word* lookup_word_internal(const char* name) {
for (Word* w = dict_head; w != NULL; w = w->prev) {
if (strcmp(w->name, name) == 0) return w;
if (forth_strcmp(w->name, name) == 0) return w;
}
return NULL;
}