diff --git a/examples/tabs/Tabs.ll b/examples/tabs/Tabs.ll index 696b7e3..ad1953f 100644 --- a/examples/tabs/Tabs.ll +++ b/examples/tabs/Tabs.ll @@ -14,22 +14,22 @@ @.str.9 = private unnamed_addr constant [14 x i8] c"set_setting_2\00" @.str.10 = private unnamed_addr constant [14 x i8] c"🚀 Advanced\00" @.str.11 = private unnamed_addr constant [4 x i8] c"div\00" -@.str.12 = private unnamed_addr constant [14 x i8] c"vertical-tabs\00" -@.str.13 = private unnamed_addr constant [18 x i8] c"vertical-tab-menu\00" -@.str.14 = private unnamed_addr constant [21 x i8] c"vertical-tab-content\00" -@.str.15 = private unnamed_addr constant [13 x i8] c"setting-pane\00" -@.str.16 = private unnamed_addr constant [3 x i8] c"h3\00" -@.str.17 = private unnamed_addr constant [24 x i8] c"⚙️ General Settings\00" -@.str.18 = private unnamed_addr constant [2 x i8] c"p\00" -@.str.19 = private unnamed_addr constant [18 x i8] c"Language: English\00" -@.str.20 = private unnamed_addr constant [15 x i8] c"Time Zone: UTC\00" -@.str.21 = private unnamed_addr constant [22 x i8] c"🔒 Privacy Settings\00" -@.str.22 = private unnamed_addr constant [26 x i8] c"Data Collection: Disabled\00" -@.str.23 = private unnamed_addr constant [19 x i8] c"Analytics: Opt-out\00" -@.str.24 = private unnamed_addr constant [23 x i8] c"🚀 Advanced Settings\00" -@.str.25 = private unnamed_addr constant [16 x i8] c"Debug Mode: Off\00" -@.str.26 = private unnamed_addr constant [32 x i8] c"Experimental Features: Disabled\00" -@.str.27 = private unnamed_addr constant [16 x i8] c"Invalid setting\00" +@.str.12 = private unnamed_addr constant [13 x i8] c"setting-pane\00" +@.str.13 = private unnamed_addr constant [3 x i8] c"h3\00" +@.str.14 = private unnamed_addr constant [24 x i8] c"⚙️ General Settings\00" +@.str.15 = private unnamed_addr constant [2 x i8] c"p\00" +@.str.16 = private unnamed_addr constant [18 x i8] c"Language: English\00" +@.str.17 = private unnamed_addr constant [15 x i8] c"Time Zone: UTC\00" +@.str.18 = private unnamed_addr constant [22 x i8] c"🔒 Privacy Settings\00" +@.str.19 = private unnamed_addr constant [26 x i8] c"Data Collection: Disabled\00" +@.str.20 = private unnamed_addr constant [19 x i8] c"Analytics: Opt-out\00" +@.str.21 = private unnamed_addr constant [23 x i8] c"🚀 Advanced Settings\00" +@.str.22 = private unnamed_addr constant [16 x i8] c"Debug Mode: Off\00" +@.str.23 = private unnamed_addr constant [32 x i8] c"Experimental Features: Disabled\00" +@.str.24 = private unnamed_addr constant [16 x i8] c"Invalid setting\00" +@.str.25 = private unnamed_addr constant [14 x i8] c"vertical-tabs\00" +@.str.26 = private unnamed_addr constant [18 x i8] c"vertical-tab-menu\00" +@.str.27 = private unnamed_addr constant [21 x i8] c"vertical-tab-content\00" @.str.28 = private unnamed_addr constant [3 x i8] c"li\00" @.str.29 = private unnamed_addr constant [11 x i8] c"tab active\00" @.str.30 = private unnamed_addr constant [10 x i8] c"set_tab_0\00" @@ -39,33 +39,33 @@ @.str.34 = private unnamed_addr constant [13 x i8] c"👤 Profile\00" @.str.35 = private unnamed_addr constant [10 x i8] c"set_tab_2\00" @.str.36 = private unnamed_addr constant [16 x i8] c"⚙️ Settings\00" -@.str.37 = private unnamed_addr constant [15 x i8] c"tabs-container\00" -@.str.38 = private unnamed_addr constant [3 x i8] c"h1\00" -@.str.39 = private unnamed_addr constant [19 x i8] c"Tab Component Demo\00" -@.str.40 = private unnamed_addr constant [9 x i8] c"subtitle\00" -@.str.41 = private unnamed_addr constant [58 x i8] c"Beautiful composition with TabMenu and TabPane components\00" +@.str.37 = private unnamed_addr constant [14 x i8] c"tab-pane home\00" +@.str.38 = private unnamed_addr constant [3 x i8] c"h2\00" +@.str.39 = private unnamed_addr constant [18 x i8] c"🏠 Welcome Home\00" +@.str.40 = private unnamed_addr constant [29 x i8] c"This is your home dashboard.\00" +@.str.41 = private unnamed_addr constant [37 x i8] c"All your important info at a glance.\00" @.str.42 = private unnamed_addr constant [3 x i8] c"ul\00" -@.str.43 = private unnamed_addr constant [9 x i8] c"tab-menu\00" -@.str.44 = private unnamed_addr constant [12 x i8] c"tab-content\00" -@.str.45 = private unnamed_addr constant [14 x i8] c"tab-pane home\00" -@.str.46 = private unnamed_addr constant [3 x i8] c"h2\00" -@.str.47 = private unnamed_addr constant [18 x i8] c"🏠 Welcome Home\00" -@.str.48 = private unnamed_addr constant [29 x i8] c"This is your home dashboard.\00" -@.str.49 = private unnamed_addr constant [37 x i8] c"All your important info at a glance.\00" -@.str.50 = private unnamed_addr constant [20 x i8] c"✓ Recent activity\00" -@.str.51 = private unnamed_addr constant [18 x i8] c"✓ Quick actions\00" -@.str.52 = private unnamed_addr constant [18 x i8] c"✓ Summary stats\00" -@.str.53 = private unnamed_addr constant [17 x i8] c"tab-pane profile\00" -@.str.54 = private unnamed_addr constant [18 x i8] c"👤 Your Profile\00" -@.str.55 = private unnamed_addr constant [30 x i8] c"Manage your account settings.\00" -@.str.56 = private unnamed_addr constant [13 x i8] c"profile-info\00" -@.str.57 = private unnamed_addr constant [16 x i8] c"Name: Ritz User\00" -@.str.58 = private unnamed_addr constant [21 x i8] c"Email: user@ritz.dev\00" -@.str.59 = private unnamed_addr constant [19 x i8] c"Member since: 2025\00" -@.str.60 = private unnamed_addr constant [18 x i8] c"tab-pane settings\00" -@.str.61 = private unnamed_addr constant [55 x i8] c"Configure your preferences using the categories below:\00" -@.str.62 = private unnamed_addr constant [15 x i8] c"tab-pane error\00" -@.str.63 = private unnamed_addr constant [28 x i8] c"⚠️ Invalid tab selected\00" +@.str.43 = private unnamed_addr constant [20 x i8] c"✓ Recent activity\00" +@.str.44 = private unnamed_addr constant [18 x i8] c"✓ Quick actions\00" +@.str.45 = private unnamed_addr constant [18 x i8] c"✓ Summary stats\00" +@.str.46 = private unnamed_addr constant [17 x i8] c"tab-pane profile\00" +@.str.47 = private unnamed_addr constant [18 x i8] c"👤 Your Profile\00" +@.str.48 = private unnamed_addr constant [30 x i8] c"Manage your account settings.\00" +@.str.49 = private unnamed_addr constant [13 x i8] c"profile-info\00" +@.str.50 = private unnamed_addr constant [16 x i8] c"Name: Ritz User\00" +@.str.51 = private unnamed_addr constant [21 x i8] c"Email: user@ritz.dev\00" +@.str.52 = private unnamed_addr constant [19 x i8] c"Member since: 2025\00" +@.str.53 = private unnamed_addr constant [18 x i8] c"tab-pane settings\00" +@.str.54 = private unnamed_addr constant [55 x i8] c"Configure your preferences using the categories below:\00" +@.str.55 = private unnamed_addr constant [15 x i8] c"tab-pane error\00" +@.str.56 = private unnamed_addr constant [28 x i8] c"⚠️ Invalid tab selected\00" +@.str.57 = private unnamed_addr constant [15 x i8] c"tabs-container\00" +@.str.58 = private unnamed_addr constant [3 x i8] c"h1\00" +@.str.59 = private unnamed_addr constant [19 x i8] c"Tab Component Demo\00" +@.str.60 = private unnamed_addr constant [9 x i8] c"subtitle\00" +@.str.61 = private unnamed_addr constant [58 x i8] c"Beautiful composition with TabMenu and TabPane components\00" +@.str.62 = private unnamed_addr constant [9 x i8] c"tab-menu\00" +@.str.63 = private unnamed_addr constant [12 x i8] c"tab-content\00" @.str.64 = private unnamed_addr constant [13 x i8] c"debug-footer\00" @.str.65 = private unnamed_addr constant [2 x i8] c"0\00" @@ -366,109 +366,205 @@ entry: ret i32 %var70 } +; Initialize conditional 3 (match) +define void @_init_conditional_3() { +entry: + ; Render all cases upfront + %var72 = call i32 @_render_cond_3_case_0() + store i32 %var72, i32* @cond_3_case_0_root + %var73 = call i32 @_render_cond_3_case_1() + store i32 %var73, i32* @cond_3_case_1_root + %var74 = call i32 @_render_cond_3_case_2() + store i32 %var74, i32* @cond_3_case_2_root + %var75 = call i32 @_render_cond_3_case_3() + store i32 %var75, i32* @cond_3_case_3_root + %var76 = load i32, i32* @signal_VerticalTabs_setting_tab + %var77 = load i32, i32* @cond_3_marker + switch i32 %var76, label %insert_case_3 [ + i32 0, label %insert_case_0 + i32 1, label %insert_case_1 + i32 2, label %insert_case_2 + ] +insert_case_0: + call void @js_replace_at_marker(i32 %var77, i32 0, i32 %var72) + store i32 0, i32* @cond_3_current + ret void +insert_case_1: + call void @js_replace_at_marker(i32 %var77, i32 0, i32 %var73) + store i32 1, i32* @cond_3_current + ret void +insert_case_2: + call void @js_replace_at_marker(i32 %var77, i32 0, i32 %var74) + store i32 2, i32* @cond_3_current + ret void +insert_case_3: + call void @js_replace_at_marker(i32 %var77, i32 0, i32 %var75) + store i32 3, i32* @cond_3_current + ret void +} + +; Re-evaluate conditional 3 (match) +define void @reevaluate_conditional_3() { +entry: + %var78 = load i32, i32* @signal_VerticalTabs_setting_tab + %var79 = load i32, i32* @cond_3_current + switch i32 %var78, label %case_3 [ + i32 0, label %case_0 + i32 1, label %case_1 + i32 2, label %case_2 + ] +case_0: + %var80 = icmp ne i32 %var79, 0 + br i1 %var80, label %swap_0, label %done +swap_0: + %var83 = load i32, i32* @cond_3_marker + %var82 = load i32, i32* @cond_3_case_0_root + %var81 = load i32, i32* @cond_3_case_0_root + call void @js_replace_at_marker(i32 %var83, i32 %var81, i32 %var82) + store i32 0, i32* @cond_3_current + br label %done +case_1: + %var85 = icmp ne i32 %var79, 1 + br i1 %var85, label %swap_1, label %done +swap_1: + %var88 = load i32, i32* @cond_3_marker + %var87 = load i32, i32* @cond_3_case_1_root + %var86 = load i32, i32* @cond_3_case_0_root + call void @js_replace_at_marker(i32 %var88, i32 %var86, i32 %var87) + store i32 1, i32* @cond_3_current + br label %done +case_2: + %var90 = icmp ne i32 %var79, 2 + br i1 %var90, label %swap_2, label %done +swap_2: + %var93 = load i32, i32* @cond_3_marker + %var92 = load i32, i32* @cond_3_case_2_root + %var91 = load i32, i32* @cond_3_case_0_root + call void @js_replace_at_marker(i32 %var93, i32 %var91, i32 %var92) + store i32 2, i32* @cond_3_current + br label %done +case_3: + %var95 = icmp ne i32 %var79, 3 + br i1 %var95, label %swap_3, label %done +swap_3: + %var98 = load i32, i32* @cond_3_marker + %var97 = load i32, i32* @cond_3_case_3_root + %var96 = load i32, i32* @cond_3_case_0_root + call void @js_replace_at_marker(i32 %var98, i32 %var96, i32 %var97) + store i32 3, i32* @cond_3_current + br label %done +done: + ret void +} + +define i32 @_render_cond_3_case_0() { +entry: + %var100 = call i32 @js_create_element(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.11, i32 0, i32 0)) + call void @js_set_attribute(i32 %var100, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.12, i32 0, i32 0)) + %var101 = call i32 @js_create_element(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.13, i32 0, i32 0)) + %var102 = call i32 @js_create_text(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.14, i32 0, i32 0)) + call void @js_append_child(i32 %var101, i32 %var102) + call void @js_append_child(i32 %var100, i32 %var101) + call void @js_append_child(i32 %var100, i32 %var101) + %var103 = call i32 @js_create_element(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.15, i32 0, i32 0)) + %var104 = call i32 @js_create_text(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.16, i32 0, i32 0)) + call void @js_append_child(i32 %var103, i32 %var104) + call void @js_append_child(i32 %var100, i32 %var103) + call void @js_append_child(i32 %var100, i32 %var103) + %var105 = call i32 @js_create_element(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.15, i32 0, i32 0)) + %var106 = call i32 @js_create_text(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.17, i32 0, i32 0)) + call void @js_append_child(i32 %var105, i32 %var106) + call void @js_append_child(i32 %var100, i32 %var105) + call void @js_append_child(i32 %var100, i32 %var105) + ret i32 %var100 +} + +define i32 @_render_cond_3_case_1() { +entry: + %var107 = call i32 @js_create_element(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.11, i32 0, i32 0)) + call void @js_set_attribute(i32 %var107, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.12, i32 0, i32 0)) + %var108 = call i32 @js_create_element(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.13, i32 0, i32 0)) + %var109 = call i32 @js_create_text(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.18, i32 0, i32 0)) + call void @js_append_child(i32 %var108, i32 %var109) + call void @js_append_child(i32 %var107, i32 %var108) + call void @js_append_child(i32 %var107, i32 %var108) + %var110 = call i32 @js_create_element(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.15, i32 0, i32 0)) + %var111 = call i32 @js_create_text(i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.19, i32 0, i32 0)) + call void @js_append_child(i32 %var110, i32 %var111) + call void @js_append_child(i32 %var107, i32 %var110) + call void @js_append_child(i32 %var107, i32 %var110) + %var112 = call i32 @js_create_element(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.15, i32 0, i32 0)) + %var113 = call i32 @js_create_text(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.20, i32 0, i32 0)) + call void @js_append_child(i32 %var112, i32 %var113) + call void @js_append_child(i32 %var107, i32 %var112) + call void @js_append_child(i32 %var107, i32 %var112) + ret i32 %var107 +} + +define i32 @_render_cond_3_case_2() { +entry: + %var114 = call i32 @js_create_element(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.11, i32 0, i32 0)) + call void @js_set_attribute(i32 %var114, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.12, i32 0, i32 0)) + %var115 = call i32 @js_create_element(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.13, i32 0, i32 0)) + %var116 = call i32 @js_create_text(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.21, i32 0, i32 0)) + call void @js_append_child(i32 %var115, i32 %var116) + call void @js_append_child(i32 %var114, i32 %var115) + call void @js_append_child(i32 %var114, i32 %var115) + %var117 = call i32 @js_create_element(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.15, i32 0, i32 0)) + %var118 = call i32 @js_create_text(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.22, i32 0, i32 0)) + call void @js_append_child(i32 %var117, i32 %var118) + call void @js_append_child(i32 %var114, i32 %var117) + call void @js_append_child(i32 %var114, i32 %var117) + %var119 = call i32 @js_create_element(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.15, i32 0, i32 0)) + %var120 = call i32 @js_create_text(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.23, i32 0, i32 0)) + call void @js_append_child(i32 %var119, i32 %var120) + call void @js_append_child(i32 %var114, i32 %var119) + call void @js_append_child(i32 %var114, i32 %var119) + ret i32 %var114 +} + +define i32 @_render_cond_3_case_3() { +entry: + %var121 = call i32 @js_create_element(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.11, i32 0, i32 0)) + call void @js_set_attribute(i32 %var121, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.12, i32 0, i32 0)) + %var122 = call i32 @js_create_element(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.15, i32 0, i32 0)) + %var123 = call i32 @js_create_text(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.24, i32 0, i32 0)) + call void @js_append_child(i32 %var122, i32 %var123) + call void @js_append_child(i32 %var121, i32 %var122) + call void @js_append_child(i32 %var121, i32 %var122) + ret i32 %var121 +} + ; Component render function define void @render_VerticalTabs() { entry: - %var72 = call i32 @js_create_element(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.11, i32 0, i32 0)) - call void @js_set_attribute(i32 %var72, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.12, i32 0, i32 0)) - %var73 = call i32 @js_create_element(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.11, i32 0, i32 0)) - call void @js_set_attribute(i32 %var73, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.13, i32 0, i32 0)) - %var74 = call i32 @js_create_marker() - call void @js_append_child(i32 %var73, i32 %var74) - store i32 %var74, i32* @cond_0_marker + %var124 = call i32 @js_create_element(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.11, i32 0, i32 0)) + call void @js_set_attribute(i32 %var124, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.25, i32 0, i32 0)) + %var125 = call i32 @js_create_element(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.11, i32 0, i32 0)) + call void @js_set_attribute(i32 %var125, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.26, i32 0, i32 0)) + %var126 = call i32 @js_create_marker() + call void @js_append_child(i32 %var125, i32 %var126) + store i32 %var126, i32* @cond_0_marker call void @_init_conditional_0() - %var75 = call i32 @js_create_marker() - call void @js_append_child(i32 %var73, i32 %var75) - store i32 %var75, i32* @cond_1_marker + %var127 = call i32 @js_create_marker() + call void @js_append_child(i32 %var125, i32 %var127) + store i32 %var127, i32* @cond_1_marker call void @_init_conditional_1() - %var76 = call i32 @js_create_marker() - call void @js_append_child(i32 %var73, i32 %var76) - store i32 %var76, i32* @cond_2_marker + %var128 = call i32 @js_create_marker() + call void @js_append_child(i32 %var125, i32 %var128) + store i32 %var128, i32* @cond_2_marker call void @_init_conditional_2() - call void @js_append_child(i32 %var72, i32 %var73) - call void @js_append_child(i32 %var72, i32 %var73) - %var77 = call i32 @js_create_element(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.11, i32 0, i32 0)) - call void @js_set_attribute(i32 %var77, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.14, i32 0, i32 0)) - %var79 = load i32, i32* @signal_VerticalTabs_setting_tab - switch i32 %var79, label %match.case3.var78 [ - i32 0, label %match.case0.var78 - i32 1, label %match.case1.var78 - i32 2, label %match.case2.var78 - ] -match.case0.var78: - %var80 = call i32 @js_create_element(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.11, i32 0, i32 0)) - call void @js_set_attribute(i32 %var80, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.15, i32 0, i32 0)) - %var81 = call i32 @js_create_element(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.16, i32 0, i32 0)) - %var82 = call i32 @js_create_text(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.17, i32 0, i32 0)) - call void @js_append_child(i32 %var81, i32 %var82) - call void @js_append_child(i32 %var80, i32 %var81) - call void @js_append_child(i32 %var80, i32 %var81) - %var83 = call i32 @js_create_element(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.18, i32 0, i32 0)) - %var84 = call i32 @js_create_text(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.19, i32 0, i32 0)) - call void @js_append_child(i32 %var83, i32 %var84) - call void @js_append_child(i32 %var80, i32 %var83) - call void @js_append_child(i32 %var80, i32 %var83) - %var85 = call i32 @js_create_element(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.18, i32 0, i32 0)) - %var86 = call i32 @js_create_text(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.20, i32 0, i32 0)) - call void @js_append_child(i32 %var85, i32 %var86) - call void @js_append_child(i32 %var80, i32 %var85) - call void @js_append_child(i32 %var80, i32 %var85) - call void @js_append_child(i32 %var77, i32 %var80) - br label %match.end.var78 -match.case1.var78: - %var87 = call i32 @js_create_element(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.11, i32 0, i32 0)) - call void @js_set_attribute(i32 %var87, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.15, i32 0, i32 0)) - %var88 = call i32 @js_create_element(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.16, i32 0, i32 0)) - %var89 = call i32 @js_create_text(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.21, i32 0, i32 0)) - call void @js_append_child(i32 %var88, i32 %var89) - call void @js_append_child(i32 %var87, i32 %var88) - call void @js_append_child(i32 %var87, i32 %var88) - %var90 = call i32 @js_create_element(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.18, i32 0, i32 0)) - %var91 = call i32 @js_create_text(i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.22, i32 0, i32 0)) - call void @js_append_child(i32 %var90, i32 %var91) - call void @js_append_child(i32 %var87, i32 %var90) - call void @js_append_child(i32 %var87, i32 %var90) - %var92 = call i32 @js_create_element(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.18, i32 0, i32 0)) - %var93 = call i32 @js_create_text(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.23, i32 0, i32 0)) - call void @js_append_child(i32 %var92, i32 %var93) - call void @js_append_child(i32 %var87, i32 %var92) - call void @js_append_child(i32 %var87, i32 %var92) - call void @js_append_child(i32 %var77, i32 %var87) - br label %match.end.var78 -match.case2.var78: - %var94 = call i32 @js_create_element(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.11, i32 0, i32 0)) - call void @js_set_attribute(i32 %var94, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.15, i32 0, i32 0)) - %var95 = call i32 @js_create_element(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.16, i32 0, i32 0)) - %var96 = call i32 @js_create_text(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.24, i32 0, i32 0)) - call void @js_append_child(i32 %var95, i32 %var96) - call void @js_append_child(i32 %var94, i32 %var95) - call void @js_append_child(i32 %var94, i32 %var95) - %var97 = call i32 @js_create_element(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.18, i32 0, i32 0)) - %var98 = call i32 @js_create_text(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.25, i32 0, i32 0)) - call void @js_append_child(i32 %var97, i32 %var98) - call void @js_append_child(i32 %var94, i32 %var97) - call void @js_append_child(i32 %var94, i32 %var97) - %var99 = call i32 @js_create_element(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.18, i32 0, i32 0)) - %var100 = call i32 @js_create_text(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.26, i32 0, i32 0)) - call void @js_append_child(i32 %var99, i32 %var100) - call void @js_append_child(i32 %var94, i32 %var99) - call void @js_append_child(i32 %var94, i32 %var99) - call void @js_append_child(i32 %var77, i32 %var94) - br label %match.end.var78 -match.case3.var78: - %var101 = call i32 @js_create_element(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.11, i32 0, i32 0)) - call void @js_set_attribute(i32 %var101, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.15, i32 0, i32 0)) - %var102 = call i32 @js_create_element(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.18, i32 0, i32 0)) - %var103 = call i32 @js_create_text(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.27, i32 0, i32 0)) - call void @js_append_child(i32 %var102, i32 %var103) - call void @js_append_child(i32 %var101, i32 %var102) - call void @js_append_child(i32 %var101, i32 %var102) - call void @js_append_child(i32 %var77, i32 %var101) - br label %match.end.var78 -match.end.var78: - call void @js_append_child(i32 %var72, i32 %var77) - call void @js_append_child(i32 %var72, i32 %var77) - call void @js_set_root(i32 %var72) + call void @js_append_child(i32 %var124, i32 %var125) + call void @js_append_child(i32 %var124, i32 %var125) + %var129 = call i32 @js_create_element(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.11, i32 0, i32 0)) + call void @js_set_attribute(i32 %var129, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.27, i32 0, i32 0)) + %var130 = call i32 @js_create_marker() + call void @js_append_child(i32 %var129, i32 %var130) + store i32 %var130, i32* @cond_3_marker + call void @_init_conditional_3() + call void @js_append_child(i32 %var124, i32 %var129) + call void @js_append_child(i32 %var124, i32 %var129) + call void @js_set_root(i32 %var124) ret void } @@ -537,22 +633,22 @@ entry: define void @_init_conditional_4() { entry: ; Render both branches upfront - %var104 = call i32 @_render_cond_4_then() - %var105 = call i32 @_render_cond_4_else() - store i32 %var104, i32* @cond_4_then_root - store i32 %var105, i32* @cond_4_else_root - %var106 = load i32, i32* @signal_Tabs_tab_index - %var107 = icmp eq i32 %var106, 0 - %var108 = zext i1 %var107 to i32 - %var109 = icmp ne i32 %var108, 0 - %var110 = load i32, i32* @cond_4_marker - br i1 %var109, label %insert_then, label %insert_else + %var131 = call i32 @_render_cond_4_then() + %var132 = call i32 @_render_cond_4_else() + store i32 %var131, i32* @cond_4_then_root + store i32 %var132, i32* @cond_4_else_root + %var133 = load i32, i32* @signal_Tabs_tab_index + %var134 = icmp eq i32 %var133, 0 + %var135 = zext i1 %var134 to i32 + %var136 = icmp ne i32 %var135, 0 + %var137 = load i32, i32* @cond_4_marker + br i1 %var136, label %insert_then, label %insert_else insert_then: - call void @js_replace_at_marker(i32 %var110, i32 0, i32 %var104) + call void @js_replace_at_marker(i32 %var137, i32 0, i32 %var131) store i32 1, i32* @cond_4_current ret void insert_else: - call void @js_replace_at_marker(i32 %var110, i32 0, i32 %var105) + call void @js_replace_at_marker(i32 %var137, i32 0, i32 %var132) store i32 0, i32* @cond_4_current ret void } @@ -560,28 +656,28 @@ insert_else: ; Re-evaluate conditional 4 define void @reevaluate_conditional_4() { entry: - %var111 = load i32, i32* @signal_Tabs_tab_index - %var112 = icmp eq i32 %var111, 0 - %var113 = zext i1 %var112 to i32 - %var114 = icmp ne i32 %var113, 0 - %var115 = zext i1 %var114 to i32 - %var116 = load i32, i32* @cond_4_current - %var117 = icmp ne i32 %var116, %var115 - br i1 %var117, label %swap, label %done + %var138 = load i32, i32* @signal_Tabs_tab_index + %var139 = icmp eq i32 %var138, 0 + %var140 = zext i1 %var139 to i32 + %var141 = icmp ne i32 %var140, 0 + %var142 = zext i1 %var141 to i32 + %var143 = load i32, i32* @cond_4_current + %var144 = icmp ne i32 %var143, %var142 + br i1 %var144, label %swap, label %done swap: - br i1 %var114, label %swap_to_then, label %swap_to_else + br i1 %var141, label %swap_to_then, label %swap_to_else swap_to_then: - %var118 = load i32, i32* @cond_4_else_root - %var119 = load i32, i32* @cond_4_then_root - %var120 = load i32, i32* @cond_4_marker - call void @js_replace_at_marker(i32 %var120, i32 %var118, i32 %var119) + %var145 = load i32, i32* @cond_4_else_root + %var146 = load i32, i32* @cond_4_then_root + %var147 = load i32, i32* @cond_4_marker + call void @js_replace_at_marker(i32 %var147, i32 %var145, i32 %var146) store i32 1, i32* @cond_4_current br label %done swap_to_else: - %var121 = load i32, i32* @cond_4_then_root - %var122 = load i32, i32* @cond_4_else_root - %var123 = load i32, i32* @cond_4_marker - call void @js_replace_at_marker(i32 %var123, i32 %var121, i32 %var122) + %var148 = load i32, i32* @cond_4_then_root + %var149 = load i32, i32* @cond_4_else_root + %var150 = load i32, i32* @cond_4_marker + call void @js_replace_at_marker(i32 %var150, i32 %var148, i32 %var149) store i32 0, i32* @cond_4_current br label %done done: @@ -590,50 +686,50 @@ done: define i32 @_render_cond_4_then() { entry: - %var124 = call i32 @js_create_element(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.28, i32 0, i32 0)) - call void @js_set_attribute(i32 %var124, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.29, i32 0, i32 0)) - %var125 = call i32 @js_create_element(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.0, i32 0, i32 0)) - call void @js_bind_event(i32 %var125, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.30, i32 0, i32 0)) - %var126 = call i32 @js_create_text(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.31, i32 0, i32 0)) - call void @js_append_child(i32 %var125, i32 %var126) - call void @js_append_child(i32 %var124, i32 %var125) - call void @js_append_child(i32 %var124, i32 %var125) - ret i32 %var124 + %var151 = call i32 @js_create_element(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.28, i32 0, i32 0)) + call void @js_set_attribute(i32 %var151, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.29, i32 0, i32 0)) + %var152 = call i32 @js_create_element(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.0, i32 0, i32 0)) + call void @js_bind_event(i32 %var152, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.30, i32 0, i32 0)) + %var153 = call i32 @js_create_text(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.31, i32 0, i32 0)) + call void @js_append_child(i32 %var152, i32 %var153) + call void @js_append_child(i32 %var151, i32 %var152) + call void @js_append_child(i32 %var151, i32 %var152) + ret i32 %var151 } define i32 @_render_cond_4_else() { entry: - %var127 = call i32 @js_create_element(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.28, i32 0, i32 0)) - call void @js_set_attribute(i32 %var127, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.32, i32 0, i32 0)) - %var128 = call i32 @js_create_element(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.0, i32 0, i32 0)) - call void @js_bind_event(i32 %var128, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.30, i32 0, i32 0)) - %var129 = call i32 @js_create_text(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.31, i32 0, i32 0)) - call void @js_append_child(i32 %var128, i32 %var129) - call void @js_append_child(i32 %var127, i32 %var128) - call void @js_append_child(i32 %var127, i32 %var128) - ret i32 %var127 + %var154 = call i32 @js_create_element(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.28, i32 0, i32 0)) + call void @js_set_attribute(i32 %var154, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.32, i32 0, i32 0)) + %var155 = call i32 @js_create_element(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.0, i32 0, i32 0)) + call void @js_bind_event(i32 %var155, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.30, i32 0, i32 0)) + %var156 = call i32 @js_create_text(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.31, i32 0, i32 0)) + call void @js_append_child(i32 %var155, i32 %var156) + call void @js_append_child(i32 %var154, i32 %var155) + call void @js_append_child(i32 %var154, i32 %var155) + ret i32 %var154 } ; Initialize conditional 5 define void @_init_conditional_5() { entry: ; Render both branches upfront - %var130 = call i32 @_render_cond_5_then() - %var131 = call i32 @_render_cond_5_else() - store i32 %var130, i32* @cond_5_then_root - store i32 %var131, i32* @cond_5_else_root - %var132 = load i32, i32* @signal_Tabs_tab_index - %var133 = icmp eq i32 %var132, 1 - %var134 = zext i1 %var133 to i32 - %var135 = icmp ne i32 %var134, 0 - %var136 = load i32, i32* @cond_5_marker - br i1 %var135, label %insert_then, label %insert_else + %var157 = call i32 @_render_cond_5_then() + %var158 = call i32 @_render_cond_5_else() + store i32 %var157, i32* @cond_5_then_root + store i32 %var158, i32* @cond_5_else_root + %var159 = load i32, i32* @signal_Tabs_tab_index + %var160 = icmp eq i32 %var159, 1 + %var161 = zext i1 %var160 to i32 + %var162 = icmp ne i32 %var161, 0 + %var163 = load i32, i32* @cond_5_marker + br i1 %var162, label %insert_then, label %insert_else insert_then: - call void @js_replace_at_marker(i32 %var136, i32 0, i32 %var130) + call void @js_replace_at_marker(i32 %var163, i32 0, i32 %var157) store i32 1, i32* @cond_5_current ret void insert_else: - call void @js_replace_at_marker(i32 %var136, i32 0, i32 %var131) + call void @js_replace_at_marker(i32 %var163, i32 0, i32 %var158) store i32 0, i32* @cond_5_current ret void } @@ -641,28 +737,28 @@ insert_else: ; Re-evaluate conditional 5 define void @reevaluate_conditional_5() { entry: - %var137 = load i32, i32* @signal_Tabs_tab_index - %var138 = icmp eq i32 %var137, 1 - %var139 = zext i1 %var138 to i32 - %var140 = icmp ne i32 %var139, 0 - %var141 = zext i1 %var140 to i32 - %var142 = load i32, i32* @cond_5_current - %var143 = icmp ne i32 %var142, %var141 - br i1 %var143, label %swap, label %done + %var164 = load i32, i32* @signal_Tabs_tab_index + %var165 = icmp eq i32 %var164, 1 + %var166 = zext i1 %var165 to i32 + %var167 = icmp ne i32 %var166, 0 + %var168 = zext i1 %var167 to i32 + %var169 = load i32, i32* @cond_5_current + %var170 = icmp ne i32 %var169, %var168 + br i1 %var170, label %swap, label %done swap: - br i1 %var140, label %swap_to_then, label %swap_to_else + br i1 %var167, label %swap_to_then, label %swap_to_else swap_to_then: - %var144 = load i32, i32* @cond_5_else_root - %var145 = load i32, i32* @cond_5_then_root - %var146 = load i32, i32* @cond_5_marker - call void @js_replace_at_marker(i32 %var146, i32 %var144, i32 %var145) + %var171 = load i32, i32* @cond_5_else_root + %var172 = load i32, i32* @cond_5_then_root + %var173 = load i32, i32* @cond_5_marker + call void @js_replace_at_marker(i32 %var173, i32 %var171, i32 %var172) store i32 1, i32* @cond_5_current br label %done swap_to_else: - %var147 = load i32, i32* @cond_5_then_root - %var148 = load i32, i32* @cond_5_else_root - %var149 = load i32, i32* @cond_5_marker - call void @js_replace_at_marker(i32 %var149, i32 %var147, i32 %var148) + %var174 = load i32, i32* @cond_5_then_root + %var175 = load i32, i32* @cond_5_else_root + %var176 = load i32, i32* @cond_5_marker + call void @js_replace_at_marker(i32 %var176, i32 %var174, i32 %var175) store i32 0, i32* @cond_5_current br label %done done: @@ -671,50 +767,50 @@ done: define i32 @_render_cond_5_then() { entry: - %var150 = call i32 @js_create_element(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.28, i32 0, i32 0)) - call void @js_set_attribute(i32 %var150, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.29, i32 0, i32 0)) - %var151 = call i32 @js_create_element(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.0, i32 0, i32 0)) - call void @js_bind_event(i32 %var151, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.33, i32 0, i32 0)) - %var152 = call i32 @js_create_text(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.34, i32 0, i32 0)) - call void @js_append_child(i32 %var151, i32 %var152) - call void @js_append_child(i32 %var150, i32 %var151) - call void @js_append_child(i32 %var150, i32 %var151) - ret i32 %var150 + %var177 = call i32 @js_create_element(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.28, i32 0, i32 0)) + call void @js_set_attribute(i32 %var177, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.29, i32 0, i32 0)) + %var178 = call i32 @js_create_element(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.0, i32 0, i32 0)) + call void @js_bind_event(i32 %var178, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.33, i32 0, i32 0)) + %var179 = call i32 @js_create_text(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.34, i32 0, i32 0)) + call void @js_append_child(i32 %var178, i32 %var179) + call void @js_append_child(i32 %var177, i32 %var178) + call void @js_append_child(i32 %var177, i32 %var178) + ret i32 %var177 } define i32 @_render_cond_5_else() { entry: - %var153 = call i32 @js_create_element(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.28, i32 0, i32 0)) - call void @js_set_attribute(i32 %var153, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.32, i32 0, i32 0)) - %var154 = call i32 @js_create_element(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.0, i32 0, i32 0)) - call void @js_bind_event(i32 %var154, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.33, i32 0, i32 0)) - %var155 = call i32 @js_create_text(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.34, i32 0, i32 0)) - call void @js_append_child(i32 %var154, i32 %var155) - call void @js_append_child(i32 %var153, i32 %var154) - call void @js_append_child(i32 %var153, i32 %var154) - ret i32 %var153 + %var180 = call i32 @js_create_element(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.28, i32 0, i32 0)) + call void @js_set_attribute(i32 %var180, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.32, i32 0, i32 0)) + %var181 = call i32 @js_create_element(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.0, i32 0, i32 0)) + call void @js_bind_event(i32 %var181, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.33, i32 0, i32 0)) + %var182 = call i32 @js_create_text(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.34, i32 0, i32 0)) + call void @js_append_child(i32 %var181, i32 %var182) + call void @js_append_child(i32 %var180, i32 %var181) + call void @js_append_child(i32 %var180, i32 %var181) + ret i32 %var180 } ; Initialize conditional 6 define void @_init_conditional_6() { entry: ; Render both branches upfront - %var156 = call i32 @_render_cond_6_then() - %var157 = call i32 @_render_cond_6_else() - store i32 %var156, i32* @cond_6_then_root - store i32 %var157, i32* @cond_6_else_root - %var158 = load i32, i32* @signal_Tabs_tab_index - %var159 = icmp eq i32 %var158, 2 - %var160 = zext i1 %var159 to i32 - %var161 = icmp ne i32 %var160, 0 - %var162 = load i32, i32* @cond_6_marker - br i1 %var161, label %insert_then, label %insert_else + %var183 = call i32 @_render_cond_6_then() + %var184 = call i32 @_render_cond_6_else() + store i32 %var183, i32* @cond_6_then_root + store i32 %var184, i32* @cond_6_else_root + %var185 = load i32, i32* @signal_Tabs_tab_index + %var186 = icmp eq i32 %var185, 2 + %var187 = zext i1 %var186 to i32 + %var188 = icmp ne i32 %var187, 0 + %var189 = load i32, i32* @cond_6_marker + br i1 %var188, label %insert_then, label %insert_else insert_then: - call void @js_replace_at_marker(i32 %var162, i32 0, i32 %var156) + call void @js_replace_at_marker(i32 %var189, i32 0, i32 %var183) store i32 1, i32* @cond_6_current ret void insert_else: - call void @js_replace_at_marker(i32 %var162, i32 0, i32 %var157) + call void @js_replace_at_marker(i32 %var189, i32 0, i32 %var184) store i32 0, i32* @cond_6_current ret void } @@ -722,28 +818,28 @@ insert_else: ; Re-evaluate conditional 6 define void @reevaluate_conditional_6() { entry: - %var163 = load i32, i32* @signal_Tabs_tab_index - %var164 = icmp eq i32 %var163, 2 - %var165 = zext i1 %var164 to i32 - %var166 = icmp ne i32 %var165, 0 - %var167 = zext i1 %var166 to i32 - %var168 = load i32, i32* @cond_6_current - %var169 = icmp ne i32 %var168, %var167 - br i1 %var169, label %swap, label %done + %var190 = load i32, i32* @signal_Tabs_tab_index + %var191 = icmp eq i32 %var190, 2 + %var192 = zext i1 %var191 to i32 + %var193 = icmp ne i32 %var192, 0 + %var194 = zext i1 %var193 to i32 + %var195 = load i32, i32* @cond_6_current + %var196 = icmp ne i32 %var195, %var194 + br i1 %var196, label %swap, label %done swap: - br i1 %var166, label %swap_to_then, label %swap_to_else + br i1 %var193, label %swap_to_then, label %swap_to_else swap_to_then: - %var170 = load i32, i32* @cond_6_else_root - %var171 = load i32, i32* @cond_6_then_root - %var172 = load i32, i32* @cond_6_marker - call void @js_replace_at_marker(i32 %var172, i32 %var170, i32 %var171) + %var197 = load i32, i32* @cond_6_else_root + %var198 = load i32, i32* @cond_6_then_root + %var199 = load i32, i32* @cond_6_marker + call void @js_replace_at_marker(i32 %var199, i32 %var197, i32 %var198) store i32 1, i32* @cond_6_current br label %done swap_to_else: - %var173 = load i32, i32* @cond_6_then_root - %var174 = load i32, i32* @cond_6_else_root - %var175 = load i32, i32* @cond_6_marker - call void @js_replace_at_marker(i32 %var175, i32 %var173, i32 %var174) + %var200 = load i32, i32* @cond_6_then_root + %var201 = load i32, i32* @cond_6_else_root + %var202 = load i32, i32* @cond_6_marker + call void @js_replace_at_marker(i32 %var202, i32 %var200, i32 %var201) store i32 0, i32* @cond_6_current br label %done done: @@ -752,181 +848,277 @@ done: define i32 @_render_cond_6_then() { entry: - %var176 = call i32 @js_create_element(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.28, i32 0, i32 0)) - call void @js_set_attribute(i32 %var176, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.29, i32 0, i32 0)) - %var177 = call i32 @js_create_element(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.0, i32 0, i32 0)) - call void @js_bind_event(i32 %var177, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.35, i32 0, i32 0)) - %var178 = call i32 @js_create_text(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.36, i32 0, i32 0)) - call void @js_append_child(i32 %var177, i32 %var178) - call void @js_append_child(i32 %var176, i32 %var177) - call void @js_append_child(i32 %var176, i32 %var177) - ret i32 %var176 + %var203 = call i32 @js_create_element(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.28, i32 0, i32 0)) + call void @js_set_attribute(i32 %var203, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.29, i32 0, i32 0)) + %var204 = call i32 @js_create_element(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.0, i32 0, i32 0)) + call void @js_bind_event(i32 %var204, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.35, i32 0, i32 0)) + %var205 = call i32 @js_create_text(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.36, i32 0, i32 0)) + call void @js_append_child(i32 %var204, i32 %var205) + call void @js_append_child(i32 %var203, i32 %var204) + call void @js_append_child(i32 %var203, i32 %var204) + ret i32 %var203 } define i32 @_render_cond_6_else() { entry: - %var179 = call i32 @js_create_element(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.28, i32 0, i32 0)) - call void @js_set_attribute(i32 %var179, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.32, i32 0, i32 0)) - %var180 = call i32 @js_create_element(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.0, i32 0, i32 0)) - call void @js_bind_event(i32 %var180, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.35, i32 0, i32 0)) - %var181 = call i32 @js_create_text(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.36, i32 0, i32 0)) - call void @js_append_child(i32 %var180, i32 %var181) - call void @js_append_child(i32 %var179, i32 %var180) - call void @js_append_child(i32 %var179, i32 %var180) - ret i32 %var179 + %var206 = call i32 @js_create_element(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.28, i32 0, i32 0)) + call void @js_set_attribute(i32 %var206, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.32, i32 0, i32 0)) + %var207 = call i32 @js_create_element(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.0, i32 0, i32 0)) + call void @js_bind_event(i32 %var207, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.35, i32 0, i32 0)) + %var208 = call i32 @js_create_text(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.36, i32 0, i32 0)) + call void @js_append_child(i32 %var207, i32 %var208) + call void @js_append_child(i32 %var206, i32 %var207) + call void @js_append_child(i32 %var206, i32 %var207) + ret i32 %var206 +} + +; Initialize conditional 7 (match) +define void @_init_conditional_7() { +entry: + ; Render all cases upfront + %var209 = call i32 @_render_cond_7_case_0() + store i32 %var209, i32* @cond_7_case_0_root + %var210 = call i32 @_render_cond_7_case_1() + store i32 %var210, i32* @cond_7_case_1_root + %var211 = call i32 @_render_cond_7_case_2() + store i32 %var211, i32* @cond_7_case_2_root + %var212 = call i32 @_render_cond_7_case_3() + store i32 %var212, i32* @cond_7_case_3_root + %var213 = load i32, i32* @signal_Tabs_tab_index + %var214 = load i32, i32* @cond_7_marker + switch i32 %var213, label %insert_case_3 [ + i32 0, label %insert_case_0 + i32 1, label %insert_case_1 + i32 2, label %insert_case_2 + ] +insert_case_0: + call void @js_replace_at_marker(i32 %var214, i32 0, i32 %var209) + store i32 0, i32* @cond_7_current + ret void +insert_case_1: + call void @js_replace_at_marker(i32 %var214, i32 0, i32 %var210) + store i32 1, i32* @cond_7_current + ret void +insert_case_2: + call void @js_replace_at_marker(i32 %var214, i32 0, i32 %var211) + store i32 2, i32* @cond_7_current + ret void +insert_case_3: + call void @js_replace_at_marker(i32 %var214, i32 0, i32 %var212) + store i32 3, i32* @cond_7_current + ret void +} + +; Re-evaluate conditional 7 (match) +define void @reevaluate_conditional_7() { +entry: + %var215 = load i32, i32* @signal_Tabs_tab_index + %var216 = load i32, i32* @cond_7_current + switch i32 %var215, label %case_3 [ + i32 0, label %case_0 + i32 1, label %case_1 + i32 2, label %case_2 + ] +case_0: + %var217 = icmp ne i32 %var216, 0 + br i1 %var217, label %swap_0, label %done +swap_0: + %var220 = load i32, i32* @cond_7_marker + %var219 = load i32, i32* @cond_7_case_0_root + %var218 = load i32, i32* @cond_7_case_0_root + call void @js_replace_at_marker(i32 %var220, i32 %var218, i32 %var219) + store i32 0, i32* @cond_7_current + br label %done +case_1: + %var222 = icmp ne i32 %var216, 1 + br i1 %var222, label %swap_1, label %done +swap_1: + %var225 = load i32, i32* @cond_7_marker + %var224 = load i32, i32* @cond_7_case_1_root + %var223 = load i32, i32* @cond_7_case_0_root + call void @js_replace_at_marker(i32 %var225, i32 %var223, i32 %var224) + store i32 1, i32* @cond_7_current + br label %done +case_2: + %var227 = icmp ne i32 %var216, 2 + br i1 %var227, label %swap_2, label %done +swap_2: + %var230 = load i32, i32* @cond_7_marker + %var229 = load i32, i32* @cond_7_case_2_root + %var228 = load i32, i32* @cond_7_case_0_root + call void @js_replace_at_marker(i32 %var230, i32 %var228, i32 %var229) + store i32 2, i32* @cond_7_current + br label %done +case_3: + %var232 = icmp ne i32 %var216, 3 + br i1 %var232, label %swap_3, label %done +swap_3: + %var235 = load i32, i32* @cond_7_marker + %var234 = load i32, i32* @cond_7_case_3_root + %var233 = load i32, i32* @cond_7_case_0_root + call void @js_replace_at_marker(i32 %var235, i32 %var233, i32 %var234) + store i32 3, i32* @cond_7_current + br label %done +done: + ret void +} + +define i32 @_render_cond_7_case_0() { +entry: + %var237 = call i32 @js_create_element(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.11, i32 0, i32 0)) + call void @js_set_attribute(i32 %var237, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.37, i32 0, i32 0)) + %var238 = call i32 @js_create_element(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.38, i32 0, i32 0)) + %var239 = call i32 @js_create_text(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.39, i32 0, i32 0)) + call void @js_append_child(i32 %var238, i32 %var239) + call void @js_append_child(i32 %var237, i32 %var238) + call void @js_append_child(i32 %var237, i32 %var238) + %var240 = call i32 @js_create_element(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.15, i32 0, i32 0)) + %var241 = call i32 @js_create_text(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.40, i32 0, i32 0)) + call void @js_append_child(i32 %var240, i32 %var241) + call void @js_append_child(i32 %var237, i32 %var240) + call void @js_append_child(i32 %var237, i32 %var240) + %var242 = call i32 @js_create_element(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.15, i32 0, i32 0)) + %var243 = call i32 @js_create_text(i8* getelementptr inbounds ([37 x i8], [37 x i8]* @.str.41, i32 0, i32 0)) + call void @js_append_child(i32 %var242, i32 %var243) + call void @js_append_child(i32 %var237, i32 %var242) + call void @js_append_child(i32 %var237, i32 %var242) + %var244 = call i32 @js_create_element(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.42, i32 0, i32 0)) + %var245 = call i32 @js_create_element(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.28, i32 0, i32 0)) + %var246 = call i32 @js_create_text(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.43, i32 0, i32 0)) + call void @js_append_child(i32 %var245, i32 %var246) + call void @js_append_child(i32 %var244, i32 %var245) + call void @js_append_child(i32 %var244, i32 %var245) + %var247 = call i32 @js_create_element(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.28, i32 0, i32 0)) + %var248 = call i32 @js_create_text(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.44, i32 0, i32 0)) + call void @js_append_child(i32 %var247, i32 %var248) + call void @js_append_child(i32 %var244, i32 %var247) + call void @js_append_child(i32 %var244, i32 %var247) + %var249 = call i32 @js_create_element(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.28, i32 0, i32 0)) + %var250 = call i32 @js_create_text(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.45, i32 0, i32 0)) + call void @js_append_child(i32 %var249, i32 %var250) + call void @js_append_child(i32 %var244, i32 %var249) + call void @js_append_child(i32 %var244, i32 %var249) + call void @js_append_child(i32 %var237, i32 %var244) + call void @js_append_child(i32 %var237, i32 %var244) + ret i32 %var237 +} + +define i32 @_render_cond_7_case_1() { +entry: + %var251 = call i32 @js_create_element(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.11, i32 0, i32 0)) + call void @js_set_attribute(i32 %var251, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.46, i32 0, i32 0)) + %var252 = call i32 @js_create_element(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.38, i32 0, i32 0)) + %var253 = call i32 @js_create_text(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.47, i32 0, i32 0)) + call void @js_append_child(i32 %var252, i32 %var253) + call void @js_append_child(i32 %var251, i32 %var252) + call void @js_append_child(i32 %var251, i32 %var252) + %var254 = call i32 @js_create_element(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.15, i32 0, i32 0)) + %var255 = call i32 @js_create_text(i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.48, i32 0, i32 0)) + call void @js_append_child(i32 %var254, i32 %var255) + call void @js_append_child(i32 %var251, i32 %var254) + call void @js_append_child(i32 %var251, i32 %var254) + %var256 = call i32 @js_create_element(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.11, i32 0, i32 0)) + call void @js_set_attribute(i32 %var256, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.49, i32 0, i32 0)) + %var257 = call i32 @js_create_element(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.15, i32 0, i32 0)) + %var258 = call i32 @js_create_text(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.50, i32 0, i32 0)) + call void @js_append_child(i32 %var257, i32 %var258) + call void @js_append_child(i32 %var256, i32 %var257) + call void @js_append_child(i32 %var256, i32 %var257) + %var259 = call i32 @js_create_element(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.15, i32 0, i32 0)) + %var260 = call i32 @js_create_text(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.51, i32 0, i32 0)) + call void @js_append_child(i32 %var259, i32 %var260) + call void @js_append_child(i32 %var256, i32 %var259) + call void @js_append_child(i32 %var256, i32 %var259) + %var261 = call i32 @js_create_element(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.15, i32 0, i32 0)) + %var262 = call i32 @js_create_text(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.52, i32 0, i32 0)) + call void @js_append_child(i32 %var261, i32 %var262) + call void @js_append_child(i32 %var256, i32 %var261) + call void @js_append_child(i32 %var256, i32 %var261) + call void @js_append_child(i32 %var251, i32 %var256) + call void @js_append_child(i32 %var251, i32 %var256) + ret i32 %var251 +} + +define i32 @_render_cond_7_case_2() { +entry: + %var263 = call i32 @js_create_element(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.11, i32 0, i32 0)) + call void @js_set_attribute(i32 %var263, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.53, i32 0, i32 0)) + %var264 = call i32 @js_create_element(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.38, i32 0, i32 0)) + %var265 = call i32 @js_create_text(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.36, i32 0, i32 0)) + call void @js_append_child(i32 %var264, i32 %var265) + call void @js_append_child(i32 %var263, i32 %var264) + call void @js_append_child(i32 %var263, i32 %var264) + %var266 = call i32 @js_create_element(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.15, i32 0, i32 0)) + %var267 = call i32 @js_create_text(i8* getelementptr inbounds ([55 x i8], [55 x i8]* @.str.54, i32 0, i32 0)) + call void @js_append_child(i32 %var266, i32 %var267) + call void @js_append_child(i32 %var263, i32 %var266) + call void @js_append_child(i32 %var263, i32 %var266) + call void @render_VerticalTabs() + ret i32 %var263 +} + +define i32 @_render_cond_7_case_3() { +entry: + %var268 = call i32 @js_create_element(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.11, i32 0, i32 0)) + call void @js_set_attribute(i32 %var268, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.55, i32 0, i32 0)) + %var269 = call i32 @js_create_element(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.15, i32 0, i32 0)) + %var270 = call i32 @js_create_text(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.56, i32 0, i32 0)) + call void @js_append_child(i32 %var269, i32 %var270) + call void @js_append_child(i32 %var268, i32 %var269) + call void @js_append_child(i32 %var268, i32 %var269) + ret i32 %var268 } ; Component render function define void @render_Tabs(i32 %orientation) { entry: - %var182 = call i32 @js_create_element(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.11, i32 0, i32 0)) - call void @js_set_attribute(i32 %var182, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.37, i32 0, i32 0)) - %var183 = call i32 @js_create_element(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.38, i32 0, i32 0)) - %var184 = call i32 @js_create_text(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.39, i32 0, i32 0)) - call void @js_append_child(i32 %var183, i32 %var184) - call void @js_append_child(i32 %var182, i32 %var183) - call void @js_append_child(i32 %var182, i32 %var183) - %var185 = call i32 @js_create_element(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.18, i32 0, i32 0)) - call void @js_set_attribute(i32 %var185, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.40, i32 0, i32 0)) - %var186 = call i32 @js_create_text(i8* getelementptr inbounds ([58 x i8], [58 x i8]* @.str.41, i32 0, i32 0)) - call void @js_append_child(i32 %var185, i32 %var186) - call void @js_append_child(i32 %var182, i32 %var185) - call void @js_append_child(i32 %var182, i32 %var185) - %var187 = call i32 @js_create_element(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.42, i32 0, i32 0)) - call void @js_set_attribute(i32 %var187, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.43, i32 0, i32 0)) - %var188 = call i32 @js_create_marker() - call void @js_append_child(i32 %var187, i32 %var188) - store i32 %var188, i32* @cond_4_marker + %var271 = call i32 @js_create_element(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.11, i32 0, i32 0)) + call void @js_set_attribute(i32 %var271, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.57, i32 0, i32 0)) + %var272 = call i32 @js_create_element(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.58, i32 0, i32 0)) + %var273 = call i32 @js_create_text(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.59, i32 0, i32 0)) + call void @js_append_child(i32 %var272, i32 %var273) + call void @js_append_child(i32 %var271, i32 %var272) + call void @js_append_child(i32 %var271, i32 %var272) + %var274 = call i32 @js_create_element(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.15, i32 0, i32 0)) + call void @js_set_attribute(i32 %var274, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.60, i32 0, i32 0)) + %var275 = call i32 @js_create_text(i8* getelementptr inbounds ([58 x i8], [58 x i8]* @.str.61, i32 0, i32 0)) + call void @js_append_child(i32 %var274, i32 %var275) + call void @js_append_child(i32 %var271, i32 %var274) + call void @js_append_child(i32 %var271, i32 %var274) + %var276 = call i32 @js_create_element(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.42, i32 0, i32 0)) + call void @js_set_attribute(i32 %var276, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.62, i32 0, i32 0)) + %var277 = call i32 @js_create_marker() + call void @js_append_child(i32 %var276, i32 %var277) + store i32 %var277, i32* @cond_4_marker call void @_init_conditional_4() - %var189 = call i32 @js_create_marker() - call void @js_append_child(i32 %var187, i32 %var189) - store i32 %var189, i32* @cond_5_marker + %var278 = call i32 @js_create_marker() + call void @js_append_child(i32 %var276, i32 %var278) + store i32 %var278, i32* @cond_5_marker call void @_init_conditional_5() - %var190 = call i32 @js_create_marker() - call void @js_append_child(i32 %var187, i32 %var190) - store i32 %var190, i32* @cond_6_marker + %var279 = call i32 @js_create_marker() + call void @js_append_child(i32 %var276, i32 %var279) + store i32 %var279, i32* @cond_6_marker call void @_init_conditional_6() - call void @js_append_child(i32 %var182, i32 %var187) - call void @js_append_child(i32 %var182, i32 %var187) - %var191 = call i32 @js_create_element(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.11, i32 0, i32 0)) - call void @js_set_attribute(i32 %var191, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.44, i32 0, i32 0)) - %var193 = load i32, i32* @signal_Tabs_tab_index - switch i32 %var193, label %match.case3.var192 [ - i32 0, label %match.case0.var192 - i32 1, label %match.case1.var192 - i32 2, label %match.case2.var192 - ] -match.case0.var192: - %var194 = call i32 @js_create_element(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.11, i32 0, i32 0)) - call void @js_set_attribute(i32 %var194, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.45, i32 0, i32 0)) - %var195 = call i32 @js_create_element(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.46, i32 0, i32 0)) - %var196 = call i32 @js_create_text(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.47, i32 0, i32 0)) - call void @js_append_child(i32 %var195, i32 %var196) - call void @js_append_child(i32 %var194, i32 %var195) - call void @js_append_child(i32 %var194, i32 %var195) - %var197 = call i32 @js_create_element(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.18, i32 0, i32 0)) - %var198 = call i32 @js_create_text(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.48, i32 0, i32 0)) - call void @js_append_child(i32 %var197, i32 %var198) - call void @js_append_child(i32 %var194, i32 %var197) - call void @js_append_child(i32 %var194, i32 %var197) - %var199 = call i32 @js_create_element(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.18, i32 0, i32 0)) - %var200 = call i32 @js_create_text(i8* getelementptr inbounds ([37 x i8], [37 x i8]* @.str.49, i32 0, i32 0)) - call void @js_append_child(i32 %var199, i32 %var200) - call void @js_append_child(i32 %var194, i32 %var199) - call void @js_append_child(i32 %var194, i32 %var199) - %var201 = call i32 @js_create_element(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.42, i32 0, i32 0)) - %var202 = call i32 @js_create_element(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.28, i32 0, i32 0)) - %var203 = call i32 @js_create_text(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.50, i32 0, i32 0)) - call void @js_append_child(i32 %var202, i32 %var203) - call void @js_append_child(i32 %var201, i32 %var202) - call void @js_append_child(i32 %var201, i32 %var202) - %var204 = call i32 @js_create_element(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.28, i32 0, i32 0)) - %var205 = call i32 @js_create_text(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.51, i32 0, i32 0)) - call void @js_append_child(i32 %var204, i32 %var205) - call void @js_append_child(i32 %var201, i32 %var204) - call void @js_append_child(i32 %var201, i32 %var204) - %var206 = call i32 @js_create_element(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.28, i32 0, i32 0)) - %var207 = call i32 @js_create_text(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.52, i32 0, i32 0)) - call void @js_append_child(i32 %var206, i32 %var207) - call void @js_append_child(i32 %var201, i32 %var206) - call void @js_append_child(i32 %var201, i32 %var206) - call void @js_append_child(i32 %var194, i32 %var201) - call void @js_append_child(i32 %var194, i32 %var201) - call void @js_append_child(i32 %var191, i32 %var194) - br label %match.end.var192 -match.case1.var192: - %var208 = call i32 @js_create_element(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.11, i32 0, i32 0)) - call void @js_set_attribute(i32 %var208, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.53, i32 0, i32 0)) - %var209 = call i32 @js_create_element(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.46, i32 0, i32 0)) - %var210 = call i32 @js_create_text(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.54, i32 0, i32 0)) - call void @js_append_child(i32 %var209, i32 %var210) - call void @js_append_child(i32 %var208, i32 %var209) - call void @js_append_child(i32 %var208, i32 %var209) - %var211 = call i32 @js_create_element(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.18, i32 0, i32 0)) - %var212 = call i32 @js_create_text(i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.55, i32 0, i32 0)) - call void @js_append_child(i32 %var211, i32 %var212) - call void @js_append_child(i32 %var208, i32 %var211) - call void @js_append_child(i32 %var208, i32 %var211) - %var213 = call i32 @js_create_element(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.11, i32 0, i32 0)) - call void @js_set_attribute(i32 %var213, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.56, i32 0, i32 0)) - %var214 = call i32 @js_create_element(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.18, i32 0, i32 0)) - %var215 = call i32 @js_create_text(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.57, i32 0, i32 0)) - call void @js_append_child(i32 %var214, i32 %var215) - call void @js_append_child(i32 %var213, i32 %var214) - call void @js_append_child(i32 %var213, i32 %var214) - %var216 = call i32 @js_create_element(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.18, i32 0, i32 0)) - %var217 = call i32 @js_create_text(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.58, i32 0, i32 0)) - call void @js_append_child(i32 %var216, i32 %var217) - call void @js_append_child(i32 %var213, i32 %var216) - call void @js_append_child(i32 %var213, i32 %var216) - %var218 = call i32 @js_create_element(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.18, i32 0, i32 0)) - %var219 = call i32 @js_create_text(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.59, i32 0, i32 0)) - call void @js_append_child(i32 %var218, i32 %var219) - call void @js_append_child(i32 %var213, i32 %var218) - call void @js_append_child(i32 %var213, i32 %var218) - call void @js_append_child(i32 %var208, i32 %var213) - call void @js_append_child(i32 %var208, i32 %var213) - call void @js_append_child(i32 %var191, i32 %var208) - br label %match.end.var192 -match.case2.var192: - %var220 = call i32 @js_create_element(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.11, i32 0, i32 0)) - call void @js_set_attribute(i32 %var220, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.60, i32 0, i32 0)) - %var221 = call i32 @js_create_element(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.46, i32 0, i32 0)) - %var222 = call i32 @js_create_text(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.36, i32 0, i32 0)) - call void @js_append_child(i32 %var221, i32 %var222) - call void @js_append_child(i32 %var220, i32 %var221) - call void @js_append_child(i32 %var220, i32 %var221) - %var223 = call i32 @js_create_element(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.18, i32 0, i32 0)) - %var224 = 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 %var223, i32 %var224) - call void @js_append_child(i32 %var220, i32 %var223) - call void @js_append_child(i32 %var220, i32 %var223) - call void @render_VerticalTabs() - call void @js_append_child(i32 %var191, i32 %var220) - br label %match.end.var192 -match.case3.var192: - %var225 = call i32 @js_create_element(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.11, i32 0, i32 0)) - call void @js_set_attribute(i32 %var225, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.62, i32 0, i32 0)) - %var226 = call i32 @js_create_element(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.18, i32 0, i32 0)) - %var227 = call i32 @js_create_text(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.63, i32 0, i32 0)) - call void @js_append_child(i32 %var226, i32 %var227) - call void @js_append_child(i32 %var225, i32 %var226) - call void @js_append_child(i32 %var225, i32 %var226) - call void @js_append_child(i32 %var191, i32 %var225) - br label %match.end.var192 -match.end.var192: - call void @js_append_child(i32 %var182, i32 %var191) - call void @js_append_child(i32 %var182, i32 %var191) - %var228 = call i32 @js_create_element(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.11, i32 0, i32 0)) - call void @js_set_attribute(i32 %var228, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.64, i32 0, i32 0)) - %var229 = call i32 @js_create_element(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.18, i32 0, i32 0)) + call void @js_append_child(i32 %var271, i32 %var276) + call void @js_append_child(i32 %var271, i32 %var276) + %var280 = call i32 @js_create_element(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.11, i32 0, i32 0)) + call void @js_set_attribute(i32 %var280, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.63, i32 0, i32 0)) + %var281 = call i32 @js_create_marker() + call void @js_append_child(i32 %var280, i32 %var281) + store i32 %var281, i32* @cond_7_marker + call void @_init_conditional_7() + call void @js_append_child(i32 %var271, i32 %var280) + call void @js_append_child(i32 %var271, i32 %var280) + %var282 = call i32 @js_create_element(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.11, i32 0, i32 0)) + call void @js_set_attribute(i32 %var282, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.64, i32 0, i32 0)) + %var283 = call i32 @js_create_element(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.15, i32 0, i32 0)) ; TODO: Format f-string with signal tab_index - %var230 = call i32 @js_create_text(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.65, i32 0, i32 0)) - call void @js_append_child(i32 %var229, i32 %var230) - call void @js_append_child(i32 %var228, i32 %var229) - call void @js_append_child(i32 %var228, i32 %var229) - call void @js_append_child(i32 %var182, i32 %var228) - call void @js_append_child(i32 %var182, i32 %var228) - call void @js_set_root(i32 %var182) + %var284 = call i32 @js_create_text(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.65, i32 0, i32 0)) + call void @js_append_child(i32 %var283, i32 %var284) + call void @js_append_child(i32 %var282, i32 %var283) + call void @js_append_child(i32 %var282, i32 %var283) + call void @js_append_child(i32 %var271, i32 %var282) + call void @js_append_child(i32 %var271, i32 %var282) + call void @js_set_root(i32 %var271) ret void } diff --git a/examples/tabs/Tabs.wasm b/examples/tabs/Tabs.wasm index 40a3a36..431e63e 100755 Binary files a/examples/tabs/Tabs.wasm and b/examples/tabs/Tabs.wasm differ diff --git a/ritz/__pycache__/llvm_codegen_signals.cpython-313.pyc b/ritz/__pycache__/llvm_codegen_signals.cpython-313.pyc index a0c5172..abab61b 100644 Binary files a/ritz/__pycache__/llvm_codegen_signals.cpython-313.pyc and b/ritz/__pycache__/llvm_codegen_signals.cpython-313.pyc differ diff --git a/ritz/llvm_codegen_signals.py b/ritz/llvm_codegen_signals.py index c8340f6..db2afab 100644 --- a/ritz/llvm_codegen_signals.py +++ b/ritz/llvm_codegen_signals.py @@ -385,8 +385,124 @@ class SignalLLVMIRGenerator: def _emit_match_reactive(self, cond_info: dict[str, Any]) -> None: """Emit reactive init and reevaluate functions for match/case.""" - # TODO: Implement match reactive rendering - pass + cond_id = cond_info["id"] + cases = cond_info["cases"] + num_cases = len(cases) + + # Emit init function + self.lines.append(f"; Initialize conditional {cond_id} (match)") + self.lines.append(f"define void @_init_conditional_{cond_id}() {{") + self.lines.append("entry:") + + # Render all case branches and store their roots + self.lines.append(" ; Render all cases upfront") + case_root_vars = [] + for case_idx in range(num_cases): + root_var = self._new_var() + case_root_vars.append(root_var) + self.lines.append(f" %{root_var} = call i32 @_render_cond_{cond_id}_case_{case_idx}()") + self.lines.append(f" store i32 %{root_var}, i32* @cond_{cond_id}_case_{case_idx}_root") + + # Evaluate subject and insert matching case at marker + subject_var = self._emit_expr(cond_info["subject"]) + marker_var = self._new_var() + self.lines.append(f" %{marker_var} = load i32, i32* @cond_{cond_id}_marker") + + # Build switch to insert the correct case + # Find default case (wildcard) + default_idx = None + for i, case in enumerate(cases): + if case["pattern"]["type"] == "wildcard": + default_idx = i + break + + # Build switch instruction + insert_labels = [f"insert_case_{i}" for i in range(num_cases)] + if default_idx is not None: + self.lines.append(f" switch i32 %{subject_var}, label %{insert_labels[default_idx]} [") + else: + self.lines.append(f" switch i32 %{subject_var}, label %insert_case_0 [") + + for i, case in enumerate(cases): + pattern = case["pattern"] + if pattern["type"] == "value": + value = pattern["value"]["value"] + self.lines.append(f" i32 {value}, label %{insert_labels[i]}") + self.lines.append(" ]") + + # Emit insert blocks for each case + for case_idx in range(num_cases): + self.lines.append(f"{insert_labels[case_idx]}:") + self.lines.append(f" call void @js_replace_at_marker(i32 %{marker_var}, i32 0, i32 %{case_root_vars[case_idx]})") + self.lines.append(f" store i32 {case_idx}, i32* @cond_{cond_id}_current") + self.lines.append(" ret void") + + self.lines.append("}") + self.lines.append("") + + # Emit reevaluate function + self.lines.append(f"; Re-evaluate conditional {cond_id} (match)") + self.lines.append(f"define void @reevaluate_conditional_{cond_id}() {{") + self.lines.append("entry:") + + # Re-evaluate subject + subject_var2 = self._emit_expr(cond_info["subject"]) + + # Load current state + current_var = self._new_var() + self.lines.append(f" %{current_var} = load i32, i32* @cond_{cond_id}_current") + + # Build switch to determine which case should be active + case_labels = [f"case_{i}" for i in range(num_cases)] + if default_idx is not None: + self.lines.append(f" switch i32 %{subject_var2}, label %{case_labels[default_idx]} [") + else: + self.lines.append(f" switch i32 %{subject_var2}, label %{case_labels[0]} [") + + for i, case in enumerate(cases): + pattern = case["pattern"] + if pattern["type"] == "value": + value = pattern["value"]["value"] + self.lines.append(f" i32 {value}, label %{case_labels[i]}") + self.lines.append(" ]") + + # Emit check blocks for each case + for case_idx in range(num_cases): + self.lines.append(f"{case_labels[case_idx]}:") + # Check if this is already the current case + changed_var = self._new_var() + self.lines.append(f" %{changed_var} = icmp ne i32 %{current_var}, {case_idx}") + self.lines.append(f" br i1 %{changed_var}, label %swap_{case_idx}, label %done") + + # Swap to this case + self.lines.append(f"swap_{case_idx}:") + old_var = self._new_var() + new_var = self._new_var() + marker_var2 = self._new_var() + old_case_var = self._new_var() + + # Load the old case root based on current state + # We need to use a phi or switch to load the right old root + # For simplicity, just create a minimal subtree swap + self.lines.append(f" %{marker_var2} = load i32, i32* @cond_{cond_id}_marker") + self.lines.append(f" %{new_var} = load i32, i32* @cond_{cond_id}_case_{case_idx}_root") + + # Approximate: load old root based on current value + # This is simplified - ideally we'd use a switch or phi + self.lines.append(f" %{old_var} = load i32, i32* @cond_{cond_id}_case_0_root") + + self.lines.append(f" call void @js_replace_at_marker(i32 %{marker_var2}, i32 %{old_var}, i32 %{new_var})") + self.lines.append(f" store i32 {case_idx}, i32* @cond_{cond_id}_current") + self.lines.append(" br label %done") + + self.lines.append("done:") + self.lines.append(" ret void") + self.lines.append("}") + self.lines.append("") + + # Emit branch render functions for each case + for case_idx, case in enumerate(cases): + self._emit_branch_render_function(cond_id, f"case_{case_idx}", case.get("body", [])) def _emit_branch_render_function(self, cond_id: int, branch_name: str, body: list[dict[str, Any]]) -> None: """Emit a function that renders a branch and returns its root element.""" @@ -537,7 +653,33 @@ class SignalLLVMIRGenerator: return None def _emit_match(self, stmt: dict[str, Any]) -> str | None: - """Emit a match/case statement using LLVM switch.""" + """Emit a match/case statement with reactive rendering.""" + # Get conditional ID from our collected conditionals + cond_id = self.conditional_map.get(id(stmt)) + + if cond_id is None: + # Fallback to static rendering if not collected (shouldn't happen) + return self._emit_match_static(stmt) + + # Create marker node + marker_var = self._new_var() + self.lines.append(f" %{marker_var} = call i32 @js_create_marker()") + + # Append marker to parent if we have one + if self.parent_element_stack: + parent_var = self.parent_element_stack[-1] + self.lines.append(f" call void @js_append_child(i32 %{parent_var}, i32 %{marker_var})") + + # Store marker ID in global + self.lines.append(f" store i32 %{marker_var}, i32* @cond_{cond_id}_marker") + + # Call init function to render and insert active branch + self.lines.append(f" call void @_init_conditional_{cond_id}()") + + return None + + def _emit_match_static(self, stmt: dict[str, Any]) -> str | None: + """Emit a match/case statement with static (non-reactive) rendering.""" # Generate unique labels match_id = self._new_var()