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))
|
%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 %var99, i32 %var101)
|
||||||
call void @js_append_child(i32 %var89, i32 %var99)
|
call void @js_append_child(i32 %var89, i32 %var99)
|
||||||
|
call void @js_append_child(i32 %var87, i32 %var89)
|
||||||
ret i32 %var87
|
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))
|
%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 %var114, i32 %var116)
|
||||||
call void @js_append_child(i32 %var104, i32 %var114)
|
call void @js_append_child(i32 %var104, i32 %var114)
|
||||||
|
call void @js_append_child(i32 %var102, i32 %var104)
|
||||||
ret i32 %var102
|
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))
|
%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 %var129, i32 %var131)
|
||||||
call void @js_append_child(i32 %var119, i32 %var129)
|
call void @js_append_child(i32 %var119, i32 %var129)
|
||||||
|
call void @js_append_child(i32 %var117, i32 %var119)
|
||||||
ret i32 %var117
|
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))
|
%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 %var138, i32 %var140)
|
||||||
call void @js_append_child(i32 %var134, i32 %var138)
|
call void @js_append_child(i32 %var134, i32 %var138)
|
||||||
|
call void @js_append_child(i32 %var132, i32 %var134)
|
||||||
ret i32 %var132
|
ret i32 %var132
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -860,6 +864,7 @@ entry:
|
|||||||
call void @js_append_child(i32 %var286, i32 %var288)
|
call void @js_append_child(i32 %var286, i32 %var288)
|
||||||
call void @js_append_child(i32 %var278, i32 %var286)
|
call void @js_append_child(i32 %var278, i32 %var286)
|
||||||
call void @js_append_child(i32 %var265, i32 %var278)
|
call void @js_append_child(i32 %var265, i32 %var278)
|
||||||
|
call void @js_append_child(i32 %var263, i32 %var265)
|
||||||
ret i32 %var263
|
ret i32 %var263
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -903,6 +908,7 @@ entry:
|
|||||||
call void @js_append_child(i32 %var311, i32 %var313)
|
call void @js_append_child(i32 %var311, i32 %var313)
|
||||||
call void @js_append_child(i32 %var301, i32 %var311)
|
call void @js_append_child(i32 %var301, i32 %var311)
|
||||||
call void @js_append_child(i32 %var291, i32 %var301)
|
call void @js_append_child(i32 %var291, i32 %var301)
|
||||||
|
call void @js_append_child(i32 %var289, i32 %var291)
|
||||||
ret i32 %var289
|
ret i32 %var289
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -927,6 +933,7 @@ entry:
|
|||||||
call void @js_append_child(i32 %var316, i32 %var323)
|
call void @js_append_child(i32 %var316, i32 %var323)
|
||||||
%var326 = call i32 @render_VerticalTabs()
|
%var326 = call i32 @render_VerticalTabs()
|
||||||
call void @js_append_child(i32 %var316, i32 %var326)
|
call void @js_append_child(i32 %var316, i32 %var326)
|
||||||
|
call void @js_append_child(i32 %var314, i32 %var316)
|
||||||
ret i32 %var314
|
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))
|
%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 %var333, i32 %var335)
|
||||||
call void @js_append_child(i32 %var329, i32 %var333)
|
call void @js_append_child(i32 %var329, i32 %var333)
|
||||||
|
call void @js_append_child(i32 %var327, i32 %var329)
|
||||||
ret i32 %var327
|
ret i32 %var327
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
@@ -920,7 +920,10 @@ class SignalLLVMIRGenerator:
|
|||||||
|
|
||||||
# Render all statements in the branch body
|
# Render all statements in the branch body
|
||||||
for stmt in body:
|
for stmt in body:
|
||||||
self._emit_statement(stmt)
|
child_var = self._emit_statement(stmt)
|
||||||
|
# Append top-level elements to wrapper
|
||||||
|
if child_var:
|
||||||
|
self.lines.append(f" call void @js_append_child(i32 %{wrapper_var}, i32 %{child_var})")
|
||||||
|
|
||||||
# Pop wrapper from parent stack
|
# Pop wrapper from parent stack
|
||||||
self.parent_element_stack.pop()
|
self.parent_element_stack.pop()
|
||||||
|
|||||||
Reference in new issue
Block a user