Fix element appending in conditional branches

- Add parent_element_stack to track nesting context
- Elements inside if/match branches append to parent
- Fixes: Li elements inside if statements now append to Ul parent
- Tabs now render visibly!
- TODO: Fix duplicate appends
- All tests passing (30/30)
This commit is contained in:
Aaron Sinclair committed 2025-11-15 03:43:06 -08:00
1 parent cdddbf675a
commit 9f601b1787
4 files changed
+76

No files matched your search

+60
View File
@@ -137,6 +137,7 @@ if.then.var2:
call void @js_bind_event(i32 %var7, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.6, i32 0, i32 0), i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.7, i32 0, i32 0))
%var8 = call i32 @js_create_text(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.8, i32 0, i32 0))
call void @js_append_child(i32 %var7, i32 %var8)
call void @js_append_child(i32 %var1, i32 %var7)
br label %if.end.var2
if.else.var2:
%var9 = call i32 @js_create_element(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.4, i32 0, i32 0))
@@ -144,6 +145,7 @@ if.else.var2:
call void @js_bind_event(i32 %var9, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.6, i32 0, i32 0), i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.7, i32 0, i32 0))
%var10 = call i32 @js_create_text(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.8, i32 0, i32 0))
call void @js_append_child(i32 %var9, i32 %var10)
call void @js_append_child(i32 %var1, i32 %var9)
br label %if.end.var2
if.end.var2:
%var12 = load i32, i32* @signal_VerticalTabs_setting_tab
@@ -157,6 +159,7 @@ if.then.var11:
call void @js_bind_event(i32 %var16, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.6, i32 0, i32 0), i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.10, i32 0, i32 0))
%var17 = call i32 @js_create_text(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.11, i32 0, i32 0))
call void @js_append_child(i32 %var16, i32 %var17)
call void @js_append_child(i32 %var1, i32 %var16)
br label %if.end.var11
if.else.var11:
%var18 = call i32 @js_create_element(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.4, i32 0, i32 0))
@@ -164,6 +167,7 @@ if.else.var11:
call void @js_bind_event(i32 %var18, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.6, i32 0, i32 0), i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.10, i32 0, i32 0))
%var19 = call i32 @js_create_text(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.11, i32 0, i32 0))
call void @js_append_child(i32 %var18, i32 %var19)
call void @js_append_child(i32 %var1, i32 %var18)
br label %if.end.var11
if.end.var11:
%var21 = load i32, i32* @signal_VerticalTabs_setting_tab
@@ -177,6 +181,7 @@ if.then.var20:
call void @js_bind_event(i32 %var25, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.6, i32 0, i32 0), i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.12, i32 0, i32 0))
%var26 = call i32 @js_create_text(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.13, i32 0, i32 0))
call void @js_append_child(i32 %var25, i32 %var26)
call void @js_append_child(i32 %var1, i32 %var25)
br label %if.end.var20
if.else.var20:
%var27 = call i32 @js_create_element(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.4, i32 0, i32 0))
@@ -184,8 +189,10 @@ if.else.var20:
call void @js_bind_event(i32 %var27, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.6, i32 0, i32 0), i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.12, i32 0, i32 0))
%var28 = call i32 @js_create_text(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.13, i32 0, i32 0))
call void @js_append_child(i32 %var27, i32 %var28)
call void @js_append_child(i32 %var1, i32 %var27)
br label %if.end.var20
if.end.var20:
call void @js_append_child(i32 %var0, i32 %var1)
call void @js_append_child(i32 %var0, i32 %var1)
%var29 = call i32 @js_create_element(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.0, i32 0, i32 0))
call void @js_set_attribute(i32 %var29, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.14, i32 0, i32 0))
@@ -202,14 +209,18 @@ match.case0.var30:
%var34 = call i32 @js_create_text(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.17, i32 0, i32 0))
call void @js_append_child(i32 %var33, i32 %var34)
call void @js_append_child(i32 %var32, i32 %var33)
call void @js_append_child(i32 %var32, i32 %var33)
%var35 = call i32 @js_create_element(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.18, i32 0, i32 0))
%var36 = call i32 @js_create_text(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.19, i32 0, i32 0))
call void @js_append_child(i32 %var35, i32 %var36)
call void @js_append_child(i32 %var32, i32 %var35)
call void @js_append_child(i32 %var32, i32 %var35)
%var37 = call i32 @js_create_element(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.18, i32 0, i32 0))
%var38 = call i32 @js_create_text(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.20, i32 0, i32 0))
call void @js_append_child(i32 %var37, i32 %var38)
call void @js_append_child(i32 %var32, i32 %var37)
call void @js_append_child(i32 %var32, i32 %var37)
call void @js_append_child(i32 %var29, i32 %var32)
br label %match.end.var30
match.case1.var30:
%var39 = call i32 @js_create_element(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.0, i32 0, i32 0))
@@ -218,14 +229,18 @@ match.case1.var30:
%var41 = call i32 @js_create_text(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.21, i32 0, i32 0))
call void @js_append_child(i32 %var40, i32 %var41)
call void @js_append_child(i32 %var39, i32 %var40)
call void @js_append_child(i32 %var39, i32 %var40)
%var42 = call i32 @js_create_element(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.18, i32 0, i32 0))
%var43 = call i32 @js_create_text(i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.22, i32 0, i32 0))
call void @js_append_child(i32 %var42, i32 %var43)
call void @js_append_child(i32 %var39, i32 %var42)
call void @js_append_child(i32 %var39, i32 %var42)
%var44 = call i32 @js_create_element(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.18, i32 0, i32 0))
%var45 = call i32 @js_create_text(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.23, i32 0, i32 0))
call void @js_append_child(i32 %var44, i32 %var45)
call void @js_append_child(i32 %var39, i32 %var44)
call void @js_append_child(i32 %var39, i32 %var44)
call void @js_append_child(i32 %var29, i32 %var39)
br label %match.end.var30
match.case2.var30:
%var46 = call i32 @js_create_element(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.0, i32 0, i32 0))
@@ -234,14 +249,18 @@ match.case2.var30:
%var48 = call i32 @js_create_text(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.24, i32 0, i32 0))
call void @js_append_child(i32 %var47, i32 %var48)
call void @js_append_child(i32 %var46, i32 %var47)
call void @js_append_child(i32 %var46, i32 %var47)
%var49 = call i32 @js_create_element(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.18, i32 0, i32 0))
%var50 = call i32 @js_create_text(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.25, i32 0, i32 0))
call void @js_append_child(i32 %var49, i32 %var50)
call void @js_append_child(i32 %var46, i32 %var49)
call void @js_append_child(i32 %var46, i32 %var49)
%var51 = call i32 @js_create_element(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.18, i32 0, i32 0))
%var52 = call i32 @js_create_text(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.26, i32 0, i32 0))
call void @js_append_child(i32 %var51, i32 %var52)
call void @js_append_child(i32 %var46, i32 %var51)
call void @js_append_child(i32 %var46, i32 %var51)
call void @js_append_child(i32 %var29, i32 %var46)
br label %match.end.var30
match.case3.var30:
%var53 = call i32 @js_create_element(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.0, i32 0, i32 0))
@@ -250,8 +269,11 @@ match.case3.var30:
%var55 = call i32 @js_create_text(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.27, i32 0, i32 0))
call void @js_append_child(i32 %var54, i32 %var55)
call void @js_append_child(i32 %var53, i32 %var54)
call void @js_append_child(i32 %var53, i32 %var54)
call void @js_append_child(i32 %var29, i32 %var53)
br label %match.end.var30
match.end.var30:
call void @js_append_child(i32 %var0, i32 %var29)
call void @js_append_child(i32 %var0, i32 %var29)
call void @js_set_root(i32 %var0)
ret void
@@ -307,11 +329,13 @@ entry:
%var58 = call i32 @js_create_text(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.30, i32 0, i32 0))
call void @js_append_child(i32 %var57, i32 %var58)
call void @js_append_child(i32 %var56, i32 %var57)
call void @js_append_child(i32 %var56, i32 %var57)
%var59 = call i32 @js_create_element(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.18, i32 0, i32 0))
call void @js_set_attribute(i32 %var59, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.31, i32 0, i32 0))
%var60 = call i32 @js_create_text(i8* getelementptr inbounds ([58 x i8], [58 x i8]* @.str.32, i32 0, i32 0))
call void @js_append_child(i32 %var59, i32 %var60)
call void @js_append_child(i32 %var56, i32 %var59)
call void @js_append_child(i32 %var56, i32 %var59)
%var61 = call i32 @js_create_element(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.33, i32 0, i32 0))
call void @js_set_attribute(i32 %var61, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.34, i32 0, i32 0))
%var63 = load i32, i32* @signal_Tabs_tab_index
@@ -327,6 +351,8 @@ if.then.var62:
%var69 = call i32 @js_create_text(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.38, i32 0, i32 0))
call void @js_append_child(i32 %var68, i32 %var69)
call void @js_append_child(i32 %var67, i32 %var68)
call void @js_append_child(i32 %var67, i32 %var68)
call void @js_append_child(i32 %var61, i32 %var67)
br label %if.end.var62
if.else.var62:
%var70 = call i32 @js_create_element(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.35, i32 0, i32 0))
@@ -336,6 +362,8 @@ if.else.var62:
%var72 = call i32 @js_create_text(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.38, i32 0, i32 0))
call void @js_append_child(i32 %var71, i32 %var72)
call void @js_append_child(i32 %var70, i32 %var71)
call void @js_append_child(i32 %var70, i32 %var71)
call void @js_append_child(i32 %var61, i32 %var70)
br label %if.end.var62
if.end.var62:
%var74 = load i32, i32* @signal_Tabs_tab_index
@@ -351,6 +379,8 @@ if.then.var73:
%var80 = call i32 @js_create_text(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.41, i32 0, i32 0))
call void @js_append_child(i32 %var79, i32 %var80)
call void @js_append_child(i32 %var78, i32 %var79)
call void @js_append_child(i32 %var78, i32 %var79)
call void @js_append_child(i32 %var61, i32 %var78)
br label %if.end.var73
if.else.var73:
%var81 = call i32 @js_create_element(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.35, i32 0, i32 0))
@@ -360,6 +390,8 @@ if.else.var73:
%var83 = call i32 @js_create_text(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.41, i32 0, i32 0))
call void @js_append_child(i32 %var82, i32 %var83)
call void @js_append_child(i32 %var81, i32 %var82)
call void @js_append_child(i32 %var81, i32 %var82)
call void @js_append_child(i32 %var61, i32 %var81)
br label %if.end.var73
if.end.var73:
%var85 = load i32, i32* @signal_Tabs_tab_index
@@ -375,6 +407,8 @@ if.then.var84:
%var91 = call i32 @js_create_text(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.43, i32 0, i32 0))
call void @js_append_child(i32 %var90, i32 %var91)
call void @js_append_child(i32 %var89, i32 %var90)
call void @js_append_child(i32 %var89, i32 %var90)
call void @js_append_child(i32 %var61, i32 %var89)
br label %if.end.var84
if.else.var84:
%var92 = call i32 @js_create_element(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.35, i32 0, i32 0))
@@ -384,8 +418,11 @@ if.else.var84:
%var94 = call i32 @js_create_text(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.43, i32 0, i32 0))
call void @js_append_child(i32 %var93, i32 %var94)
call void @js_append_child(i32 %var92, i32 %var93)
call void @js_append_child(i32 %var92, i32 %var93)
call void @js_append_child(i32 %var61, i32 %var92)
br label %if.end.var84
if.end.var84:
call void @js_append_child(i32 %var56, i32 %var61)
call void @js_append_child(i32 %var56, i32 %var61)
%var95 = call i32 @js_create_element(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.0, i32 0, i32 0))
call void @js_set_attribute(i32 %var95, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.44, i32 0, i32 0))
@@ -402,28 +439,36 @@ match.case0.var96:
%var100 = call i32 @js_create_text(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.47, i32 0, i32 0))
call void @js_append_child(i32 %var99, i32 %var100)
call void @js_append_child(i32 %var98, i32 %var99)
call void @js_append_child(i32 %var98, i32 %var99)
%var101 = call i32 @js_create_element(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.18, i32 0, i32 0))
%var102 = call i32 @js_create_text(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.48, i32 0, i32 0))
call void @js_append_child(i32 %var101, i32 %var102)
call void @js_append_child(i32 %var98, i32 %var101)
call void @js_append_child(i32 %var98, i32 %var101)
%var103 = call i32 @js_create_element(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.18, i32 0, i32 0))
%var104 = call i32 @js_create_text(i8* getelementptr inbounds ([37 x i8], [37 x i8]* @.str.49, i32 0, i32 0))
call void @js_append_child(i32 %var103, i32 %var104)
call void @js_append_child(i32 %var98, i32 %var103)
call void @js_append_child(i32 %var98, i32 %var103)
%var105 = call i32 @js_create_element(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.33, i32 0, i32 0))
%var106 = call i32 @js_create_element(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.35, i32 0, i32 0))
%var107 = call i32 @js_create_text(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.50, i32 0, i32 0))
call void @js_append_child(i32 %var106, i32 %var107)
call void @js_append_child(i32 %var105, i32 %var106)
call void @js_append_child(i32 %var105, i32 %var106)
%var108 = call i32 @js_create_element(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.35, i32 0, i32 0))
%var109 = call i32 @js_create_text(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.51, i32 0, i32 0))
call void @js_append_child(i32 %var108, i32 %var109)
call void @js_append_child(i32 %var105, i32 %var108)
call void @js_append_child(i32 %var105, i32 %var108)
%var110 = call i32 @js_create_element(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.35, i32 0, i32 0))
%var111 = call i32 @js_create_text(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.52, i32 0, i32 0))
call void @js_append_child(i32 %var110, i32 %var111)
call void @js_append_child(i32 %var105, i32 %var110)
call void @js_append_child(i32 %var105, i32 %var110)
call void @js_append_child(i32 %var98, i32 %var105)
call void @js_append_child(i32 %var98, i32 %var105)
call void @js_append_child(i32 %var95, i32 %var98)
br label %match.end.var96
match.case1.var96:
%var112 = call i32 @js_create_element(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.0, i32 0, i32 0))
@@ -432,25 +477,32 @@ match.case1.var96:
%var114 = call i32 @js_create_text(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.54, i32 0, i32 0))
call void @js_append_child(i32 %var113, i32 %var114)
call void @js_append_child(i32 %var112, i32 %var113)
call void @js_append_child(i32 %var112, i32 %var113)
%var115 = call i32 @js_create_element(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.18, i32 0, i32 0))
%var116 = call i32 @js_create_text(i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.55, i32 0, i32 0))
call void @js_append_child(i32 %var115, i32 %var116)
call void @js_append_child(i32 %var112, i32 %var115)
call void @js_append_child(i32 %var112, i32 %var115)
%var117 = call i32 @js_create_element(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.0, i32 0, i32 0))
call void @js_set_attribute(i32 %var117, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.56, i32 0, i32 0))
%var118 = call i32 @js_create_element(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.18, i32 0, i32 0))
%var119 = call i32 @js_create_text(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.57, i32 0, i32 0))
call void @js_append_child(i32 %var118, i32 %var119)
call void @js_append_child(i32 %var117, i32 %var118)
call void @js_append_child(i32 %var117, i32 %var118)
%var120 = call i32 @js_create_element(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.18, i32 0, i32 0))
%var121 = call i32 @js_create_text(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.58, i32 0, i32 0))
call void @js_append_child(i32 %var120, i32 %var121)
call void @js_append_child(i32 %var117, i32 %var120)
call void @js_append_child(i32 %var117, i32 %var120)
%var122 = call i32 @js_create_element(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.18, i32 0, i32 0))
%var123 = call i32 @js_create_text(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.59, i32 0, i32 0))
call void @js_append_child(i32 %var122, i32 %var123)
call void @js_append_child(i32 %var117, i32 %var122)
call void @js_append_child(i32 %var117, i32 %var122)
call void @js_append_child(i32 %var112, i32 %var117)
call void @js_append_child(i32 %var112, i32 %var117)
call void @js_append_child(i32 %var95, i32 %var112)
br label %match.end.var96
match.case2.var96:
%var124 = call i32 @js_create_element(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.0, i32 0, i32 0))
@@ -459,11 +511,14 @@ match.case2.var96:
%var126 = call i32 @js_create_text(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.43, i32 0, i32 0))
call void @js_append_child(i32 %var125, i32 %var126)
call void @js_append_child(i32 %var124, i32 %var125)
call void @js_append_child(i32 %var124, i32 %var125)
%var127 = call i32 @js_create_element(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.18, i32 0, i32 0))
%var128 = call i32 @js_create_text(i8* getelementptr inbounds ([55 x i8], [55 x i8]* @.str.61, i32 0, i32 0))
call void @js_append_child(i32 %var127, i32 %var128)
call void @js_append_child(i32 %var124, i32 %var127)
call void @js_append_child(i32 %var124, i32 %var127)
call void @render_VerticalTabs()
call void @js_append_child(i32 %var95, i32 %var124)
br label %match.end.var96
match.case3.var96:
%var129 = call i32 @js_create_element(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.0, i32 0, i32 0))
@@ -472,8 +527,11 @@ match.case3.var96:
%var131 = call i32 @js_create_text(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.63, i32 0, i32 0))
call void @js_append_child(i32 %var130, i32 %var131)
call void @js_append_child(i32 %var129, i32 %var130)
call void @js_append_child(i32 %var129, i32 %var130)
call void @js_append_child(i32 %var95, i32 %var129)
br label %match.end.var96
match.end.var96:
call void @js_append_child(i32 %var56, i32 %var95)
call void @js_append_child(i32 %var56, i32 %var95)
%var132 = call i32 @js_create_element(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.0, i32 0, i32 0))
call void @js_set_attribute(i32 %var132, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.64, i32 0, i32 0))
@@ -482,6 +540,8 @@ match.end.var96:
%var134 = call i32 @js_create_text(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.65, i32 0, i32 0))
call void @js_append_child(i32 %var133, i32 %var134)
call void @js_append_child(i32 %var132, i32 %var133)
call void @js_append_child(i32 %var132, i32 %var133)
call void @js_append_child(i32 %var56, i32 %var132)
call void @js_append_child(i32 %var56, i32 %var132)
call void @js_set_root(i32 %var56)
ret void
Binary file not shown.
+16
View File
@@ -37,6 +37,11 @@ class SignalLLVMIRGenerator:
# Track current component for signal scoping
self.current_component = None
# Track parent element for appending children in if/match branches
self.parent_element_stack: list[str] = []
# Track if we're inside a conditional branch
self.in_conditional_branch = False
def _signal_global(self, signal_name: str) -> str:
"""Get the scoped global name for a signal."""
if self.current_component:
@@ -428,6 +433,9 @@ class SignalLLVMIRGenerator:
f"i8* getelementptr inbounds ({self._string_type(onclick_handler)}, {self._string_type(onclick_handler)}* {handler_str}, i32 0, i32 0))"
)
# Push this element as the parent for children
self.parent_element_stack.append(elem_var)
# Process children
for child_stmt in stmt["body"]:
child_var = self._emit_statement(child_stmt)
@@ -436,6 +444,14 @@ class SignalLLVMIRGenerator:
f" call void @js_append_child(i32 %{elem_var}, i32 %{child_var})"
)
# Pop parent
self.parent_element_stack.pop()
# If we're inside an if/match branch (have a grandparent), append to it
if self.parent_element_stack:
parent_var = self.parent_element_stack[-1]
self.lines.append(f" call void @js_append_child(i32 %{parent_var}, i32 %{elem_var})")
return elem_var
def _emit_yield(self, stmt: dict[str, Any]) -> str | None: