From 7efa7786cfe1cf3fe8eae44417b20f2913bd378c Mon Sep 17 00:00:00 2001 From: Aaron Sinclair Date: Sat, 15 Nov 2025 15:05:10 -0800 Subject: [PATCH] Fix conditional branch rendering: append children to wrapper MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit **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 --- examples/tabs/Tabs.ll | 8 ++++++++ examples/tabs/Tabs.wasm | Bin 6290 -> 6350 bytes .../llvm_codegen_signals.cpython-313.pyc | Bin 69073 -> 69220 bytes ritz/llvm_codegen_signals.py | 5 ++++- 4 files changed, 12 insertions(+), 1 deletion(-) diff --git a/examples/tabs/Tabs.ll b/examples/tabs/Tabs.ll index 229e9bc..c37a969 100644 --- a/examples/tabs/Tabs.ll +++ b/examples/tabs/Tabs.ll @@ -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 } diff --git a/examples/tabs/Tabs.wasm b/examples/tabs/Tabs.wasm index 979afd8cf7e47992445ab5089669d5cc21952a65..5e82ef93b8efe928da3dbf4867b05dfb7d91fcb1 100755 GIT binary patch delta 573 zcmaKoF-rq66vy+D>v?TzoA#&$K}dq2n{?@_Z*+4J7x4r5C9Z>@gN4KBBti#K2Zv&H zb8ze=egrA#>>@6LCh4J96*;(<_doLP{eB0n`&R!tgyG;O9MPl)5GJ@6i-v|aCAc4p z86CJ&8jGebxKlS0L{VQf!Lta{k^sCa3ZfZ46-6MJB$C-Tl|(Q+j3ssVI`JYUiqVzv zgYR|QYf@p10Oc}JP@cE7U@LHBib$$}ONK;(DBw;ki5&HTCFq_r6B+u~{eRFi`zc_9)j*A~0r>>vm_y^-M!#D>B z5}fuj*;po+k7_dkFU{*D_)zg{Ok^+lY-qJBf+J_2Vy~KQO|ADVyZa-1%w^IKm(1H_ j9F9#Yjv{F%NXFO9LTxp28(Gm#Wy9>&W}VKH+H3d;+1*-H delta 482 zcma)&u}T9$5Qb-VFGsu$$)1afg|NG6#3rUmVda!s*~Qk^usI70krTw#Mi3N4QdopU z8?mqvti%@(JkihTcW)|$4c{@?WjcthOyPjqpxXSTWoR;$b=3IG`!TjpdfBg za|1#%0u8c8yGo;;&wv! zWtzdSG?#h(?=;tCnhV4rDX%TWGP>iXZ#v}gx@r)QO5uP diff --git a/ritz/__pycache__/llvm_codegen_signals.cpython-313.pyc b/ritz/__pycache__/llvm_codegen_signals.cpython-313.pyc index 6623e45e5a9bae1d2628293824c70c1f3fe09e30..95f823390bebd8ebc968b2c3a6610cc585bd18fc 100644 GIT binary patch delta 747 zcmX|;T}YE*6vyB5Ztp&Gn`Sw6nu|M5ot05@ z@*G!^#9_^a%tURu(!iDJ%GH#beZm3wcO``@Da6rH7ryQk@Pp?de)+7$e0x6Le6)h% zL^@t3#h^i%WJfP(9d%-Zv#PB|a+waf}O$ha#@9Z#wl00WLK@c{oIVH?yHvD5+5;;^|9j$7$!xJ z6O~YfuJO#cYC5A$CuLDBNy*@65OH{11VUn-<|&{WPXseyhIoQuo|h`|Zpeaz6IXc& zFdUPB14}BUSi7jeyyom2?4p!cN*I%t_yC)QTETWeZH#|FuHm8#@h0AX7q+9w6< zm@>jn;+@hf^lfwsDVHg;_DRr=P&VcONWhoEIRUv2Dv#)DaORQvwRZ~W zCI#!Q09S~ABZh}-{ui(d!0-DGupe#(Y&`r{z(ByJ0w16CS5RWA9SkiDY%{5c;U`;k znW2e=&4CpS*m+};kUVlU!ciA=Q0FVrLwppCeDZ***hv~L`vw25~4 E11Q1vZ~y=R delta 666 zcmXAlT}YEr7{}k|{n+O_HJgfxwGlJ7oEAly5na?p7PT&_o4{AmX$zhDIzI*xi!Q8- zuAX8R1AYYE<}7+!x(0Ejy)H@hvyv5`TzgV*I{w?v6%PE zVli>FeoLjk`P_Kk!3e&ZG{QN2>aQgOkzD{*gyr(ETLPor#$71pI5WQ9D8ta~Zj6Ks zcxu8e7_W%95J4~I+9M^?FD zUbfB3wo&UxxiTYgMWvd7#A4?Kct&8dT!cofNK}_7z;RBKT0>2$B14R!9h(w9h>%p` zgup9+qY0a-H_#mLc6$ARIdW)voyR5OMAyt1-wn84Scck5o#1QxLNYUlB~Z|j3c>)6 zq+GB`QYnXs`56hbZ>nJ*vA;D7<^a`I>zP&`9!pn<{d7iUrUbjvRYikz=#}WDjg`t) zsP^FVbS2c2x%8R@H*xxtld7yzhOlU%M|YP#S**hGv>jh8=;1PnEtn*@N0OgidU$}V z-`>MROn$!uW8}<_qyhR+(i$8rz1l?KwEkbgRVuY8dpmZ5Dn5T(mpYBT+Ms#S*mB+1 z(W>+}tEg#vp%V)-4%i?^Gb0A@Q*U-%(C6)Fts`5x4+7jGb6Wv`A#!%Rkca#6YXAoT zqTwMPjzBm*#lyA$PvTQL2=g^NF1neO0fsJy9tIXl-DK(47&_VLkKZ=JB|g7Q+7mgg nakM2{XbZ2Hq0~aBcQ^c5cB<9IbuxJP{H9{q|C3`>W%|oMr_<