Add basic component composition support
- Handle yield_component statement type - Call child component render function - Enables: yield VerticalTabs() - All tests passing (30/30) - Tabs.wasm size: 3185 → 3205 bytes
This commit is contained in:
1 parent
cd89f75c1c
commit
41474aceda
4 files changed
+13
No files matched your search
@@ -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))
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -223,6 +223,8 @@ class SignalLLVMIRGenerator:
|
||||
return self._emit_with(stmt)
|
||||
elif stmt["type"] == "yield":
|
||||
return self._emit_yield(stmt)
|
||||
elif stmt["type"] == "yield_component":
|
||||
return self._emit_yield_component(stmt)
|
||||
elif stmt["type"] == "if":
|
||||
return self._emit_if(stmt)
|
||||
elif stmt["type"] == "match":
|
||||
@@ -269,6 +271,16 @@ class SignalLLVMIRGenerator:
|
||||
|
||||
return None
|
||||
|
||||
def _emit_yield_component(self, stmt: dict[str, Any]) -> 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
|
||||
|
||||
Reference in new issue
Block a user