From 41474aceda8df3b75c6069d84fc213a5a40194f4 Mon Sep 17 00:00:00 2001 From: Aaron Sinclair Date: Sat, 15 Nov 2025 03:36:38 -0800 Subject: [PATCH] Add basic component composition support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Handle yield_component statement type - Call child component render function - Enables: yield VerticalTabs() - All tests passing (30/30) - Tabs.wasm size: 3185 → 3205 bytes --- examples/tabs/Tabs.ll | 1 + examples/tabs/Tabs.wasm | Bin 3185 -> 3205 bytes .../llvm_codegen_signals.cpython-313.pyc | Bin 25424 -> 25957 bytes ritz/llvm_codegen_signals.py | 12 ++++++++++++ 4 files changed, 13 insertions(+) diff --git a/examples/tabs/Tabs.ll b/examples/tabs/Tabs.ll index f664683..cf6bd75 100644 --- a/examples/tabs/Tabs.ll +++ b/examples/tabs/Tabs.ll @@ -463,6 +463,7 @@ match.case2.var96: %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 @render_VerticalTabs() 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)) diff --git a/examples/tabs/Tabs.wasm b/examples/tabs/Tabs.wasm index 2253726bc15a1120bdeca600593b169306841e56..9ee906c988b07267a0b2e5d81ea83d91e9feb9f7 100755 GIT binary patch delta 294 zcmew;(JHxNF%#qZ%}bb0GuA(5Wn`^)?Bx((P-1pm#^LylLx9oo2^Wyd;P`-7fLVY= zfmwk;fW@(u6D$T)(#9pgsKDUZz=tF|8zjpDGGHRefGa{8Obm()j+;Tkj3D97T#nZ` z6&R#}l2afit>tv=<(~YGg+~Nv8qfk%J(KxZwXjS0uxbf`bpRd40@Md~JImw_*3B#m z3<`{sE!mnNjGb(T93T+^76G2guh^uyAslXyzR3dY;$ke0Q@O!@U;r5e@uvdwW?Oa> FRsfL+H2DAk delta 293 zcmZpb{3x+uF%#qL%}bb0GuEGHWn`^)?Bx((P-1ah#^LylLx9oo2^Wyd;P`-7fLVY= zfklBqfW@(u6D$T)(#9pgsKDUZz=tF|8zjpJGGHRefGa{8Obm()j+;Tk%pl>-T#nZ` z6&R#}l2afit>tv=<(~YGg-3)LYyqmC$$YF@*d=^ewS>SrfDU5>It=V~=E)tbnh$04%LvDiH2lfo3<5X_27hnp3-c(@O9LR3M3IN?| BH=+Ol diff --git a/ritz/__pycache__/llvm_codegen_signals.cpython-313.pyc b/ritz/__pycache__/llvm_codegen_signals.cpython-313.pyc index 5927d8adc950c8906ff9fb8a88da8308419f2dd4..4d12edbab21c1e7129a3ab7d455cd87c68befaa0 100644 GIT binary patch delta 1411 zcmZ8hUrbY17{90Oy_A-Ju4SdAz~x`00tH6d1Uknk5Sfe#7s8(@<*vQd3T?@05h%;l zEhbyCWDDQS+{@I=#JU$T*9Uxx2g%G}}1`w;6A8fA{zO zJ>U7hFE@D){ko2FcCxb#9C?*3R3_yz zmM4|L$J(nP>ui}8rm;u`(50&}xO9?@DXcKAD}1kzahqg6CP>0Dfmn-}rtk$#G1J(Y zT_cq+spz>RGO1W9#U%lQqg-9r=}qXGx@j>Q^7}~1xSv8Jg#ikZx>Nc+kA~E5_xI?8 zJr77%9}=EhT{VkHqerk-yS3=d%oJLNIZockaf=leIPNs+0vQfHTyhTf=FSI|DZkej z2~9`BN;sC%1Se8_NRIhV^g8&I!K;LVG4E_Jb|Pim<18SR|AO#;G!)j=qe=L(rW8VT zISAmxx(-XS$hn#Ayl=8>n`$>qwF&>GsWF+=sNSmMb;t{M8ixcwy^{~@t^yL>jwnS!is#=RR5_hahr@~MNt(D>6n*m4lz1u< z^owm+3Huf7jcckLy||ay9a?NBAKXg7in|F$X^o;NV!CU1mO!c+`s(bSmpc6lDKzRN z<}=&_Yte&RuQ zD4{R`7uye@0IauHARqkMUWxkDe9y2zh9B;Zqbu-R_x;?HEHuSWMP?O@{g8a8O}I&; zC*jp2#ljDi-iDSV*U=0~QOeVmTu}3Rz7d2g)aHfj{T|^Cr7Q5He+YdCN2M_vOL3QK zU#ff+)+86&hG&u+X5D21o6eFd4@9*B^(RAX&|BcIAv1cU3d2@}&Vo4d8d`;S^Xw2A zF`_?UVdNePLHlSe@{@fnM~~I7Mmw~|ReBt2&v|%sydM1m=CKBJ0lLPHq9^LtWA7s* z!j88S-Gt`x)`LUToh|~Nq%cQ;t_`L$+3V{JWv3{xtFQz7aCN)|J%oqjnikMT1Ktcm3B!C@nX3<`f!$f7{^Jf(MsBL0~v)o_^4oyO4qQ KKjtVhuYUmjMvpB3 delta 1030 zcmYk5T}V`E7{|{ubIv8SxUdO`P zEhvI+0_nMmZMTA8WpCU#H*=(f9ll0Js zI#1;FA9pnD58hZ~rfuFRO}u2NW(vd3_4JBK(nggPLFTFB!S zT~n`qC-;)eSwbB_$C*$wjN(FQH6(E<)C4^S>)Fe!p<_D^!8tT{JSvqn;q?N*_(1LRY^q*nu9Gyk+{NQ$Wh2#SMHMj?U#BD>- zYLVhsvWg{qT5AC>4+Y^K{yVgl<*jqmN7ur{U0pPGhbQff!pwDem$~uL@Je`Kyc(_o zID+MojZnZ`nHS>`7c5~mauc%HuC-dLNNA1lhjBs+* str | None: + """Emit a component instantiation (yield SomeComponent(...)).""" + component_name = stmt["component"] + + # For now, just call the render function + # TODO: Pass arguments when component parameters are supported + self.lines.append(f" call void @render_{component_name}()") + + return None + def _emit_match(self, stmt: dict[str, Any]) -> str | None: """Emit a match/case statement using LLVM switch.""" # Generate unique labels