Add direct signal assignment in event handlers

- Handle 'assign' type statements in _emit_handler_statement()
- Evaluate value expression and store to signal global
- Enables patterns like: setting_tab = 0
- All tests passing (30/30)
This commit is contained in:
Aaron Sinclair committed 2025-11-15 03:33:45 -08:00
1 parent 74ff1e7e9f
commit e18baf3106
4 files changed
+271 -606

No files matched your search

+13 -1
View File
@@ -161,7 +161,19 @@ class SignalLLVMIRGenerator:
def _emit_handler_statement(self, stmt: dict[str, Any]) -> None:
"""Emit a statement inside an event handler."""
if stmt["type"] == "augassign":
if stmt["type"] == "assign":
# Handle direct signal assignment (x = 5)
signal_name = stmt["target"]
if signal_name in self.signals:
# Evaluate the value expression
value_var = self._emit_expr(stmt["value"])
# Store the value
self.lines.append(f" store i32 {value_var}, i32* {self._signal_global(signal_name)}")
# TODO: Trigger DOM updates
self.lines.append(f" ; TODO: Update DOM nodes bound to {signal_name}")
elif stmt["type"] == "augassign":
# Handle signal updates (count += 1)
signal_name = stmt["target"]
if signal_name in self.signals: