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))
|
%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 %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()
|
||||||
br label %match.end.var96
|
br label %match.end.var96
|
||||||
match.case3.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))
|
%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)
|
return self._emit_with(stmt)
|
||||||
elif stmt["type"] == "yield":
|
elif stmt["type"] == "yield":
|
||||||
return self._emit_yield(stmt)
|
return self._emit_yield(stmt)
|
||||||
|
elif stmt["type"] == "yield_component":
|
||||||
|
return self._emit_yield_component(stmt)
|
||||||
elif stmt["type"] == "if":
|
elif stmt["type"] == "if":
|
||||||
return self._emit_if(stmt)
|
return self._emit_if(stmt)
|
||||||
elif stmt["type"] == "match":
|
elif stmt["type"] == "match":
|
||||||
@@ -269,6 +271,16 @@ class SignalLLVMIRGenerator:
|
|||||||
|
|
||||||
return None
|
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:
|
def _emit_match(self, stmt: dict[str, Any]) -> str | None:
|
||||||
"""Emit a match/case statement using LLVM switch."""
|
"""Emit a match/case statement using LLVM switch."""
|
||||||
# Generate unique labels
|
# Generate unique labels
|
||||||
|
|||||||
Reference in new issue
Block a user