Fix mixin expansion in conditionals and include resolution in extends

- mixin.zig: expandNode and expandNodeWithArgs now recurse into
  node.consequent and node.alternate for Conditional nodes
- view_engine.zig: process includes and collect mixins from child
  template before extracting blocks in processExtends

This fixes mixin calls inside if/else blocks not being rendered
in compiled templates.
This commit is contained in:
2026-01-30 22:24:27 +05:30
parent e337a28202
commit 5ce319b335
4 changed files with 29 additions and 2 deletions

View File

@@ -130,6 +130,8 @@ fn expandNode(
const new_node = allocator.create(Node) catch return error.OutOfMemory;
new_node.* = node.*;
new_node.nodes = .{};
new_node.consequent = null;
new_node.alternate = null;
// Clone and expand children
for (node.nodes.items) |child| {
@@ -137,6 +139,14 @@ fn expandNode(
new_node.nodes.append(allocator, expanded_child) catch return error.OutOfMemory;
}
// Handle Conditional nodes which store children in consequent/alternate
if (node.consequent) |cons| {
new_node.consequent = try expandNode(allocator, cons, registry, caller_block);
}
if (node.alternate) |alt| {
new_node.alternate = try expandNode(allocator, alt, registry, caller_block);
}
return new_node;
}
@@ -239,6 +249,8 @@ fn expandNodeWithArgs(
new_node.* = node.*;
new_node.nodes = .{};
new_node.attrs = .{};
new_node.consequent = null;
new_node.alternate = null;
// Substitute argument references in text/val
if (node.val) |val| {
@@ -260,6 +272,14 @@ fn expandNodeWithArgs(
new_node.nodes.append(allocator, expanded) catch return error.OutOfMemory;
}
// Handle Conditional nodes which store children in consequent/alternate
if (node.consequent) |cons| {
new_node.consequent = try expandNodeWithArgs(allocator, cons, registry, caller_block, arg_bindings);
}
if (node.alternate) |alt| {
new_node.alternate = try expandNodeWithArgs(allocator, alt, registry, caller_block, arg_bindings);
}
return new_node;
}