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:
1 parent
0b77c2ff3c
commit
7efa7786cf
4 files changed
+12
-1
No files matched your search
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user