Fix conditional branch rendering: append children to wrapper

**Bug:** Conditional branches (match/case) rendered empty content.
- Tabs would switch but show no content in each tab
- Wrapper div was created but children never appended to it

**Root Cause:**
In `_emit_conditional_branch_function`, statements were rendered but
their return values were discarded:
```python
for stmt in body:
    self._emit_statement(stmt)  # ← return value ignored!
```

**Fix:**
Append returned elements to wrapper, just like `_emit_with` does:
```python
for stmt in body:
    child_var = self._emit_statement(stmt)
    if child_var:
        self.lines.append(f"call void @js_append_child(i32 %{wrapper_var}, i32 %{child_var})")
```

**LLVM Before:**
```llvm
%var87 = call i32 @js_create_element(...)  ; wrapper
%var89 = call i32 @js_create_element(...)  ; content
; ... build var89's children ...
ret i32 %var87  ; ← var89 never appended!
```

**LLVM After:**
```llvm
%var87 = call i32 @js_create_element(...)  ; wrapper
%var89 = call i32 @js_create_element(...)  ; content
; ... build var89's children ...
call void @js_append_child(i32 %var87, i32 %var89)  ; ← FIX!
ret i32 %var87
```

**Result:**
✅ Tabs example now shows content in each tab
✅ Vertical tabs (nested conditionals) also work

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Aaron SinclairandClaude committed 2025-11-15 15:05:10 -08:00
1 parent 0b77c2ff3c
commit 7efa7786cf
4 files changed
+12 -1

No files matched your search

+8
View File
@@ -400,6 +400,7 @@ entry:
%var101 = call i32 @js_create_text(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.15, i32 0, i32 0))
call void @js_append_child(i32 %var99, i32 %var101)
call void @js_append_child(i32 %var89, i32 %var99)
call void @js_append_child(i32 %var87, i32 %var89)
ret i32 %var87
}
@@ -427,6 +428,7 @@ entry:
%var116 = call i32 @js_create_text(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.18, i32 0, i32 0))
call void @js_append_child(i32 %var114, i32 %var116)
call void @js_append_child(i32 %var104, i32 %var114)
call void @js_append_child(i32 %var102, i32 %var104)
ret i32 %var102
}
@@ -454,6 +456,7 @@ entry:
%var131 = call i32 @js_create_text(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.21, i32 0, i32 0))
call void @js_append_child(i32 %var129, i32 %var131)
call void @js_append_child(i32 %var119, i32 %var129)
call void @js_append_child(i32 %var117, i32 %var119)
ret i32 %var117
}
@@ -471,6 +474,7 @@ entry:
%var140 = call i32 @js_create_text(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.22, i32 0, i32 0))
call void @js_append_child(i32 %var138, i32 %var140)
call void @js_append_child(i32 %var134, i32 %var138)
call void @js_append_child(i32 %var132, i32 %var134)
ret i32 %var132
}
@@ -860,6 +864,7 @@ entry:
call void @js_append_child(i32 %var286, i32 %var288)
call void @js_append_child(i32 %var278, i32 %var286)
call void @js_append_child(i32 %var265, i32 %var278)
call void @js_append_child(i32 %var263, i32 %var265)
ret i32 %var263
}
@@ -903,6 +908,7 @@ entry:
call void @js_append_child(i32 %var311, i32 %var313)
call void @js_append_child(i32 %var301, i32 %var311)
call void @js_append_child(i32 %var291, i32 %var301)
call void @js_append_child(i32 %var289, i32 %var291)
ret i32 %var289
}
@@ -927,6 +933,7 @@ entry:
call void @js_append_child(i32 %var316, i32 %var323)
%var326 = call i32 @render_VerticalTabs()
call void @js_append_child(i32 %var316, i32 %var326)
call void @js_append_child(i32 %var314, i32 %var316)
ret i32 %var314
}
@@ -944,6 +951,7 @@ entry:
%var335 = call i32 @js_create_text(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.53, i32 0, i32 0))
call void @js_append_child(i32 %var333, i32 %var335)
call void @js_append_child(i32 %var329, i32 %var333)
call void @js_append_child(i32 %var327, i32 %var329)
ret i32 %var327
}
Binary file not shown.