Ignore memory leak of word names

This commit is contained in:
Dominic Grimm 2023-08-05 12:34:04 +02:00
parent cd77044bf5
commit bdfc36ea3f

View file

@ -38,6 +38,8 @@ struct hf__result words__char(struct hf__interpreter *const interpreter,
struct hf__result words__word(struct hf__interpreter *const interpreter, struct hf__result words__word(struct hf__interpreter *const interpreter,
const struct hf__node *const node) { const struct hf__node *const node) {
// printf("word = \"%s\"\n", node->value.word.value);
const struct hf__interpreter__word *const *const word = const struct hf__interpreter__word *const *const word =
(const struct hf__interpreter__word *const *const)hf__hashmap__get( (const struct hf__interpreter__word *const *const)hf__hashmap__get(
&interpreter->words, node->value.word.hash); &interpreter->words, node->value.word.hash);
@ -54,7 +56,15 @@ struct hf__result words__word(struct hf__interpreter *const interpreter,
&interpreter->call_stack_size, (*word)->body[i]); &interpreter->call_stack_size, (*word)->body[i]);
} }
free(node->value.word.value); /* FIXME: Word name points to copy of pointer of original name,
when cleared here all other references loose access to the pointer's value
=> SIGSEV!
For now I am going to ignore the memory leak.
Copying the word name may be a better option but is pretty memory
inefficient.
*/
// free(node->value.word.value);
return HF__OK; return HF__OK;
} }
@ -353,12 +363,15 @@ hf__interpreter__run(struct hf__interpreter *const interpreter) {
const struct hf__node *const top = const struct hf__node *const top =
interpreter->call_stack + --interpreter->call_stack_len; interpreter->call_stack + --interpreter->call_stack_len;
SET_8_VALUE_COLOUR(TXT_RED);
printf("--- type = %u ---\n", top->type);
if (top->type == HF__NODE_TYPE__WORD) {
printf("--- word name = \"%s\"\n", top->value.word.value);
}
SET_8_VALUE_COLOUR(TXT_DEFAULT);
const hf__interpreter__word_func_t func = const hf__interpreter__word_func_t func =
HF__INTERPRETER__WORD_FUNCTION[top->type]; HF__INTERPRETER__WORD_FUNCTION[top->type];
if (func) { return func ? func(interpreter, top) : HF__OK;
return func(interpreter, top);
} else {
return HF__OK;
}
} }