@@ -103,22 +103,21 @@ class UILoweringPass:
103103 def __init__ (self ) -> None :
104104 self ._result = UILoweringResult ()
105105 self ._signal_names : set [str ] = set ()
106- self ._render_roots : list [ str ] = []
106+ self ._has_render_root = False
107107 self ._canvas_names : list [str ] = []
108108 self ._functions : list [str ] = []
109109 self ._ui_function_names : set [str ] = set ()
110110 self ._render_function = ""
111- self ._preamble = ""
112111
113112 def lower (self , program : IRProgram ) -> UILoweringResult :
114113 """Lower an IRProgram to UI output."""
115- self ._emit_preamble ()
114+ preamble = self ._emit_preamble ()
116115 for node in program .body :
117116 self ._lower_node (node )
118117
119118 self ._wire_render_updates ()
120119
121- js_parts = [self . _preamble ]
120+ js_parts = [preamble ]
122121 js_parts .extend (self ._result .js_signals )
123122 js_parts .extend (self ._functions )
124123 js_parts .extend (self ._result .js_handlers )
@@ -156,8 +155,8 @@ def _lower_node(self, node: IRNode) -> None:
156155 for child in node .body :
157156 self ._lower_node (child )
158157
159- def _emit_preamble (self ) -> None :
160- self . _preamble = """// Generated by Multilingual UI lowering
158+ def _emit_preamble (self ) -> str :
159+ return """// Generated by Multilingual UI lowering
161160class ReactiveSignal {
162161 constructor(value) {
163162 this._value = value;
@@ -300,7 +299,7 @@ def _lower_function(self, node: IRFunction) -> None:
300299 self ._functions .append (f"{ keyword } { node .name } ({ params } ) {{\n { body } \n }}" )
301300
302301 def _lower_render_block (self , node : IRRenderBlock ) -> None :
303- self ._render_roots . append ( "__ml_root" )
302+ self ._has_render_root = True
304303 lines = [
305304 "function __ml_render() {" ,
306305 " const __root = document.getElementById('__ml_root');" ,
@@ -327,8 +326,12 @@ def _emit_html(self) -> str:
327326 f' <div id="{ name } " class="ml-canvas"></div>'
328327 for name in self ._canvas_names
329328 )
330- root_html = ' <div id="__ml_root"></div>' if self ._render_roots else ""
331- title = "Memory Game - Multilingual" if self ._render_roots else "Multilingual UI Preview"
329+ root_html = ' <div id="__ml_root"></div>' if self ._has_render_root else ""
330+ title = (
331+ "Memory Game - Multilingual"
332+ if self ._has_render_root
333+ else "Multilingual UI Preview"
334+ )
332335 return f"""<!DOCTYPE html>
333336<html lang="en">
334337<head>
0 commit comments