fix/refactor: Modified evaluate and changed it to evaluate_tree

So i did what the last commit said, also fixed parse_expr because it was
still using malloc for allocating new nodes so i made it use arena_alloc
like it should, did the very first tests so it's all good, i think is
readdy to merge.
This commit is contained in:
2026-04-13 08:44:30 -06:00
parent e4ec102cb9
commit 7ad4eba123
7 changed files with 52 additions and 36 deletions

View File

@@ -17,8 +17,7 @@ static void test_basic_evaluation(void** state) {
tokenize(expr, &context);
ParseResult result = parse(&context);
AST tree = result.tree;
uint64_t value = evaluate(tree.head);
int64_t value = evaluate(result);
assert_int_equal(value, 82);
}

View File

@@ -19,58 +19,57 @@ static void test_parsing_basic_expression(void **state) {
assert_int_equal(tokens.len, 7);
ParseResult result = parse(&tokens);
AST tree = result.tree;
// Assert head is +
assert_int_equal(tree.head->type, NODE_BINARY_OP);
assert_int_equal(tree.head->data.binary.op, OP_ADD);
assert_int_equal(result.tree->type, NODE_BINARY_OP);
assert_int_equal(result.tree->data.binary.op, OP_ADD);
assert_int_equal(tree.head->data.binary.left->type, NODE_INTEGER);
assert_int_equal(tree.head->data.binary.left->data.integer, 2);
assert_int_equal(result.tree->data.binary.left->type, NODE_INTEGER);
assert_int_equal(result.tree->data.binary.left->data.integer, 2);
assert_int_equal(
tree.head->data.binary.right->type,
result.tree->data.binary.right->type,
NODE_BINARY_OP
);
assert_int_equal(
tree.head->data.binary.right->data.binary.op,
result.tree->data.binary.right->data.binary.op,
OP_MUL
);
assert_int_equal(
tree.head->data.binary.right->data.binary.right->type,
result.tree->data.binary.right->data.binary.right->type,
NODE_INTEGER);
assert_int_equal(
tree.head->data.binary.right->data.binary.right->data.integer,
result.tree->data.binary.right->data.binary.right->data.integer,
789);
assert_int_equal(
tree.head->data.binary.right->data.binary.left->type,
result.tree->data.binary.right->data.binary.left->type,
NODE_BINARY_OP
);
assert_int_equal(
tree.head->data.binary.right->data.binary.left->data.binary.op,
result.tree->data.binary.right->data.binary.left->data.binary.op,
OP_DIV
);
assert_int_equal(
tree.head->data.binary.right->data.binary.left->data.binary.right->type,
result.tree->data.binary.right->data.binary.left->data.binary.right->type,
NODE_INTEGER
);
assert_int_equal(
tree.head->data.binary.right->data.binary.left->data.binary.right->data.integer,
result.tree->data.binary.right->data.binary.left->data.binary.right->data.integer,
66
);
assert_int_equal(
tree.head->data.binary.right->data.binary.left->data.binary.left->type,
result.tree->data.binary.right->data.binary.left->data.binary.left->type,
NODE_INTEGER
);
assert_int_equal(
tree.head->data.binary.right->data.binary.left->data.binary.left->data.integer,
result.tree->data.binary.right->data.binary.left->data.binary.left->data.integer,
3
);
arena_destroy(result.arena);
arena_destroy(&result.arena);
}
int main(void) {