commit 2d0be3280d2ba03db08ff09167f79af75e61ca46
parent b07ef1f6c1c91fb6a4cebf15954d2dac9ca702ed
Author: erai <erai@omiltem.net>
Date: Fri, 7 Feb 2025 16:52:14 +0000
Use rb tree for the main decl tree
Diffstat:
M | bootstrap.sh | | | 2 | +- |
M | cc0.c | | | 1563 | ++++++++++++++++++++++++++++++++++++++++++++++++------------------------------- |
M | decl.om | | | 70 | ++++++++++++++-------------------------------------------------------- |
A | rb.om | | | 215 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
4 files changed, 1187 insertions(+), 663 deletions(-)
diff --git a/bootstrap.sh b/bootstrap.sh
@@ -2,7 +2,7 @@
BOOTSTRAP="cc0.c"
LIBS="bufio.om lib.om alloc.om syscall.om"
-SOURCES="cc1.om type.om parse2.om parse3.om peglib.om as.om decl.om node.om peg.om ir.om ircout.om"
+SOURCES="cc1.om type.om parse2.om parse3.om peglib.om as.om decl.om node.om peg.om ir.om ircout.om rb.om"
# Build the bootstrap compiler from c
[ cc0 -nt cc0.c ] || gcc -O1 -g -std=c99 ${BOOTSTRAP} -o cc0
diff --git a/cc0.c b/cc0.c
@@ -277,6 +277,11 @@ u my_peg_parse(u v_c, u v_sp, u v_err);
u my_peg_reset(u v_c, u v_filename, u v_src, u v_len);
u my_prototype(u v_c, u v_n);
u my_putchar(u v_c, u v_ch);
+u my_rb_first(u v_n);
+u my_rb_link(u v_tree, u v_link, u v_parent, u v_n);
+u my_rb_next(u v_n);
+u my_rb_rotate_left(u v_tree, u v_n);
+u my_rb_rotate_right(u v_tree, u v_n);
u my_read(u v_fd, u v_buf, u v_n);
u my_readall(u v_fd, u v_len, u v_a);
u my_reconstruct(u v_c, u v_pn);
@@ -3603,9 +3608,9 @@ b8: if (!(v2)) { goto b3; }
#line 391 "cc1.om"
b2: return 0UL;
#line 399 "cc1.om"
-b3: *(u *)((v_c) + (104UL)) = *(u *)((v_d) + (40UL));
+b3: *(u *)((v_c) + (104UL)) = *(u *)((v_d) + (48UL));
#line 401 "cc1.om"
- if (!(*(u *)((v_d) + (88UL)))) { goto b1; }
+ if (!(*(u *)((v_d) + (96UL)))) { goto b1; }
#line 402 "cc1.om"
b10: v3 = (u)my_mark_stmt_used;
#line 402 "cc1.om"
@@ -3613,7 +3618,7 @@ b10: v3 = (u)my_mark_stmt_used;
#line 402 "cc1.om"
v5 = v_d;
#line 402 "cc1.om"
- v6 = *(u *)((*(u *)((v_d) + (88UL))) + (16UL));
+ v6 = *(u *)((*(u *)((v_d) + (96UL))) + (16UL));
#line 402 "cc1.om"
v7 = ((u (*)())(v3))(v4, v5, v6);
#line 402 "cc1.om"
@@ -4005,7 +4010,7 @@ b69: v_d = v62;
#line 175 "cc1.om"
if (!(v_d)) { goto b74; }
#line 175 "cc1.om"
-b73: if (!(*(u *)((v_d) + (64UL)))) { goto b74; }
+b73: if (!(*(u *)((v_d) + (72UL)))) { goto b74; }
#line 175 "cc1.om"
b75: v63 = 1UL;
#line 175 "cc1.om"
@@ -4013,7 +4018,7 @@ b75: v63 = 1UL;
#line 175 "cc1.om"
b76: if (!(v63)) { goto b70; }
#line 176 "cc1.om"
-b71: *(u *)((v_c) + (88UL)) = *(u *)((v_d) + (80UL));
+b71: *(u *)((v_c) + (88UL)) = *(u *)((v_d) + (88UL));
#line 177 "cc1.om"
v64 = (u)my_mark_func_used;
#line 177 "cc1.om"
@@ -4041,7 +4046,7 @@ b78: v_d = v74;
#line 181 "cc1.om"
if (!(v_d)) { goto b83; }
#line 181 "cc1.om"
-b82: if (!(*(u *)((v_d) + (64UL)))) { goto b83; }
+b82: if (!(*(u *)((v_d) + (72UL)))) { goto b83; }
#line 181 "cc1.om"
b84: v75 = 1UL;
#line 181 "cc1.om"
@@ -4049,7 +4054,7 @@ b84: v75 = 1UL;
#line 181 "cc1.om"
b85: if (!(v75)) { goto b79; }
#line 182 "cc1.om"
-b80: *(u *)((v_c) + (96UL)) = *(u *)((v_d) + (80UL));
+b80: *(u *)((v_c) + (96UL)) = *(u *)((v_d) + (88UL));
#line 183 "cc1.om"
v76 = (u)my_mark_func_used;
#line 183 "cc1.om"
@@ -4083,7 +4088,7 @@ b88: v_d = v89;
#line 189 "cc1.om"
if (!(v_d)) { goto b93; }
#line 189 "cc1.om"
-b92: if (!(*(u *)((v_d) + (104UL)))) { goto b93; }
+b92: if (!(*(u *)((v_d) + (112UL)))) { goto b93; }
#line 189 "cc1.om"
b94: v90 = 1UL;
#line 189 "cc1.om"
@@ -4107,7 +4112,7 @@ b96: v_v = v96;
#line 191 "cc1.om"
if (!(v_v)) { goto b101; }
#line 191 "cc1.om"
-b100: if (!(*(u *)((v_v) + (64UL)))) { goto b101; }
+b100: if (!(*(u *)((v_v) + (72UL)))) { goto b101; }
#line 191 "cc1.om"
b102: v97 = 1UL;
#line 191 "cc1.om"
@@ -4141,7 +4146,7 @@ b105: v_d = v108;
#line 197 "cc1.om"
if (!(v_d)) { goto b110; }
#line 197 "cc1.om"
-b109: if (!(*(u *)((v_d) + (104UL)))) { goto b110; }
+b109: if (!(*(u *)((v_d) + (112UL)))) { goto b110; }
#line 197 "cc1.om"
b111: v109 = 1UL;
#line 197 "cc1.om"
@@ -4165,7 +4170,7 @@ b113: v_v = v115;
#line 199 "cc1.om"
if (!(v_v)) { goto b118; }
#line 199 "cc1.om"
-b117: if (!(*(u *)((v_v) + (64UL)))) { goto b118; }
+b117: if (!(*(u *)((v_v) + (72UL)))) { goto b118; }
#line 199 "cc1.om"
b119: v116 = 1UL;
#line 199 "cc1.om"
@@ -4245,11 +4250,11 @@ b175: if (!(v155)) { goto b170; }
#line 101 "cc1.om"
b169: return 0UL;
#line 241 "cc1.om"
-b170: if (!(*(u *)((v_d) + (104UL)))) { goto b180; }
+b170: if (!(*(u *)((v_d) + (112UL)))) { goto b180; }
#line 241 "cc1.om"
-b179: if (!(*(u *)((v_d) + (64UL)))) { goto b184; }
+b179: if (!(*(u *)((v_d) + (72UL)))) { goto b184; }
#line 241 "cc1.om"
-b183: if (!(*(u *)((v_d) + (88UL)))) { goto b184; }
+b183: if (!(*(u *)((v_d) + (96UL)))) { goto b184; }
#line 241 "cc1.om"
b185: v157 = 1UL;
#line 241 "cc1.om"
@@ -4295,11 +4300,11 @@ b174: v155 = 1UL;
#line 237 "cc1.om"
goto b175;
#line 227 "cc1.om"
-b148: if (!(*(u *)((v_d) + (104UL)))) { goto b158; }
+b148: if (!(*(u *)((v_d) + (112UL)))) { goto b158; }
#line 227 "cc1.om"
-b157: if (!(*(u *)((v_d) + (64UL)))) { goto b162; }
+b157: if (!(*(u *)((v_d) + (72UL)))) { goto b162; }
#line 227 "cc1.om"
-b161: if (!(*(u *)((v_d) + (88UL)))) { goto b162; }
+b161: if (!(*(u *)((v_d) + (96UL)))) { goto b162; }
#line 227 "cc1.om"
b163: v144 = 1UL;
#line 227 "cc1.om"
@@ -4315,7 +4320,7 @@ b160: if (!(v143)) { goto b154; }
#line 228 "cc1.om"
b155: v145 = (u)my_ir_optimize;
#line 228 "cc1.om"
- v146 = *(u *)((v_d) + (120UL));
+ v146 = *(u *)((v_d) + (128UL));
#line 228 "cc1.om"
v147 = ((u (*)())(v145))(v146);
#line 231 "cc1.om"
@@ -4343,11 +4348,11 @@ b152: v142 = 1UL;
#line 223 "cc1.om"
goto b153;
#line 213 "cc1.om"
-b126: if (!(*(u *)((v_d) + (104UL)))) { goto b136; }
+b126: if (!(*(u *)((v_d) + (112UL)))) { goto b136; }
#line 213 "cc1.om"
-b135: if (!(*(u *)((v_d) + (64UL)))) { goto b140; }
+b135: if (!(*(u *)((v_d) + (72UL)))) { goto b140; }
#line 213 "cc1.om"
-b139: if (!(*(u *)((v_d) + (88UL)))) { goto b140; }
+b139: if (!(*(u *)((v_d) + (96UL)))) { goto b140; }
#line 213 "cc1.om"
b141: v130 = 1UL;
#line 213 "cc1.om"
@@ -4365,11 +4370,11 @@ b133: v131 = (u)my_func_to_ir;
#line 214 "cc1.om"
v132 = v_c;
#line 214 "cc1.om"
- v133 = *(u *)((v_d) + (88UL));
+ v133 = *(u *)((v_d) + (96UL));
#line 214 "cc1.om"
v134 = ((u (*)())(v131))(v132, v133);
#line 214 "cc1.om"
-b143: *(u *)((v_d) + (120UL)) = v134;
+b143: *(u *)((v_d) + (128UL)) = v134;
#line 214 "cc1.om"
goto b132;
#line 217 "cc1.om"
@@ -4421,7 +4426,7 @@ b74: v63 = 0UL;
#line 175 "cc1.om"
goto b76;
#line 166 "cc1.om"
-b58: if (!(*(u *)((v_d) + (64UL)))) { goto b64; }
+b58: if (!(*(u *)((v_d) + (72UL)))) { goto b64; }
#line 167 "cc1.om"
b65: v49 = (u)my_typecheck_func;
#line 167 "cc1.om"
@@ -4447,7 +4452,7 @@ b62: v48 = 1UL;
#line 162 "cc1.om"
goto b63;
#line 152 "cc1.om"
-b44: if (!(*(u *)((v_d) + (128UL)))) { goto b50; }
+b44: if (!(*(u *)((v_d) + (136UL)))) { goto b50; }
#line 153 "cc1.om"
b51: v37 = (u)my_layout_struct;
#line 153 "cc1.om"
@@ -5062,7 +5067,7 @@ b3: *(u *)((v_c) + (24UL)) = *(u *)((*(u *)((v_n) + (8UL))) + (24UL));
#line 548 "cc1.om"
b9: v_d = v11;
#line 550 "cc1.om"
- if (!(*(u *)((v_d) + (200UL)))) { goto b10; }
+ if (!(*(u *)((v_d) + (208UL)))) { goto b10; }
#line 551 "cc1.om"
b11: v12 = (u)my_cdie;
#line 551 "cc1.om"
@@ -5078,11 +5083,11 @@ b15: v_i = *(u *)((*(u *)((*(u *)((v_n) + (8UL))) + (16UL))) + (48UL));
#line 555 "cc1.om"
goto b14;
#line 558 "cc1.om"
-b14: *(u *)((v_d) + (200UL)) = 1UL;
+b14: *(u *)((v_d) + (208UL)) = 1UL;
#line 559 "cc1.om"
- *(u *)((v_d) + (208UL)) = v_i;
+ *(u *)((v_d) + (216UL)) = v_i;
#line 560 "cc1.om"
- *(u *)((v_d) + (216UL)) = v_n;
+ *(u *)((v_d) + (224UL)) = v_n;
#line 562 "cc1.om"
v_i = (v_i) + (1UL);
#line 563 "cc1.om"
@@ -5145,7 +5150,7 @@ b1: v_t = v8;
#line 420 "cc1.om"
b2: v_d = v14;
#line 422 "cc1.om"
- if (!(*(u *)((v_d) + (64UL)))) { goto b3; }
+ if (!(*(u *)((v_d) + (72UL)))) { goto b3; }
#line 423 "cc1.om"
b4: v15 = (u)my_cdie;
#line 423 "cc1.om"
@@ -5155,11 +5160,11 @@ b4: v15 = (u)my_cdie;
#line 423 "cc1.om"
v18 = ((u (*)())(v15))(v16, v17);
#line 426 "cc1.om"
-b3: *(u *)((v_d) + (64UL)) = 1UL;
+b3: *(u *)((v_d) + (72UL)) = 1UL;
#line 427 "cc1.om"
- *(u *)((v_d) + (72UL)) = v_t;
+ *(u *)((v_d) + (80UL)) = v_t;
#line 428 "cc1.om"
- *(u *)((v_d) + (96UL)) = v_n;
+ *(u *)((v_d) + (104UL)) = v_n;
#line 430 "cc1.om"
return v_d;
}
@@ -5254,7 +5259,7 @@ b1: v25 = (u)my_find;
#line 495 "cc1.om"
b27: v_d = v30;
#line 497 "cc1.om"
- if (!(*(u *)((v_d) + (128UL)))) { goto b28; }
+ if (!(*(u *)((v_d) + (136UL)))) { goto b28; }
#line 498 "cc1.om"
b29: v31 = (u)my_cdie;
#line 498 "cc1.om"
@@ -5264,9 +5269,9 @@ b29: v31 = (u)my_cdie;
#line 498 "cc1.om"
v34 = ((u (*)())(v31))(v32, v33);
#line 501 "cc1.om"
-b28: *(u *)((v_d) + (128UL)) = 1UL;
+b28: *(u *)((v_d) + (136UL)) = 1UL;
#line 502 "cc1.om"
- *(u *)((v_d) + (152UL)) = v_n;
+ *(u *)((v_d) + (160UL)) = v_n;
#line 503 "cc1.om"
v35 = (u)my_prototype;
#line 503 "cc1.om"
@@ -5276,7 +5281,7 @@ b28: *(u *)((v_d) + (128UL)) = 1UL;
#line 503 "cc1.om"
v38 = ((u (*)())(v35))(v36, v37);
#line 503 "cc1.om"
-b32: *(u *)((v_d) + (160UL)) = v38;
+b32: *(u *)((v_d) + (168UL)) = v38;
#line 481 "cc1.om"
return 0UL;
#line 491 "cc1.om"
@@ -5388,7 +5393,7 @@ b0: v7 = (u)my_defextern;
#line 440 "cc1.om"
b1: v_d = v10;
#line 442 "cc1.om"
- *(u *)((v_d) + (88UL)) = v_n;
+ *(u *)((v_d) + (96UL)) = v_n;
#line 444 "cc1.om"
v_n = *(u *)((*(u *)((*(u *)((v_n) + (8UL))) + (16UL))) + (8UL));
#line 446 "cc1.om"
@@ -5410,7 +5415,7 @@ b3: v26 = (u)my_hoist_locals;
#line 476 "cc1.om"
v28 = v_d;
#line 476 "cc1.om"
- v29 = *(u *)((*(u *)((v_d) + (88UL))) + (16UL));
+ v29 = *(u *)((*(u *)((v_d) + (96UL))) + (16UL));
#line 476 "cc1.om"
v30 = 0UL;
#line 476 "cc1.om"
@@ -5418,7 +5423,7 @@ b3: v26 = (u)my_hoist_locals;
#line 476 "cc1.om"
b16: v_offset = v31;
#line 478 "cc1.om"
- *(u *)((v_d) + (112UL)) = v_offset;
+ *(u *)((v_d) + (120UL)) = v_offset;
#line 433 "cc1.om"
return 0UL;
#line 452 "cc1.om"
@@ -5448,7 +5453,7 @@ b10: v_t = v15;
#line 461 "cc1.om"
v17 = v_c;
#line 461 "cc1.om"
- v18 = *(u *)(v_d);
+ v18 = *(u *)((v_d) + (32UL));
#line 461 "cc1.om"
v19 = v_name;
#line 461 "cc1.om"
@@ -5458,7 +5463,7 @@ b10: v_t = v15;
#line 461 "cc1.om"
b11: v_v = v21;
#line 462 "cc1.om"
- if (!(*(u *)((v_v) + (224UL)))) { goto b12; }
+ if (!(*(u *)((v_v) + (232UL)))) { goto b12; }
#line 463 "cc1.om"
b13: v22 = (u)my_cdie;
#line 463 "cc1.om"
@@ -5468,13 +5473,13 @@ b13: v22 = (u)my_cdie;
#line 463 "cc1.om"
v25 = ((u (*)())(v22))(v23, v24);
#line 466 "cc1.om"
-b12: *(u *)((v_v) + (224UL)) = 1UL;
+b12: *(u *)((v_v) + (232UL)) = 1UL;
#line 467 "cc1.om"
- *(u *)((v_v) + (232UL)) = v_t;
+ *(u *)((v_v) + (240UL)) = v_t;
#line 468 "cc1.om"
- *(u *)((v_v) + (240UL)) = v_offset;
+ *(u *)((v_v) + (248UL)) = v_offset;
#line 469 "cc1.om"
- *(u *)((v_v) + (248UL)) = *(u *)((v_n) + (8UL));
+ *(u *)((v_v) + (256UL)) = *(u *)((v_n) + (8UL));
#line 471 "cc1.om"
v_offset = (v_offset) + (8UL);
#line 472 "cc1.om"
@@ -5577,7 +5582,7 @@ b1: v25 = (u)my_find;
#line 520 "cc1.om"
b27: v_d = v30;
#line 522 "cc1.om"
- if (!(*(u *)((v_d) + (128UL)))) { goto b28; }
+ if (!(*(u *)((v_d) + (136UL)))) { goto b28; }
#line 523 "cc1.om"
b29: v31 = (u)my_cdie;
#line 523 "cc1.om"
@@ -5587,9 +5592,9 @@ b29: v31 = (u)my_cdie;
#line 523 "cc1.om"
v34 = ((u (*)())(v31))(v32, v33);
#line 526 "cc1.om"
-b28: *(u *)((v_d) + (128UL)) = 1UL;
+b28: *(u *)((v_d) + (136UL)) = 1UL;
#line 527 "cc1.om"
- *(u *)((v_d) + (152UL)) = v_n;
+ *(u *)((v_d) + (160UL)) = v_n;
#line 528 "cc1.om"
v35 = (u)my_prototype;
#line 528 "cc1.om"
@@ -5599,7 +5604,7 @@ b28: *(u *)((v_d) + (128UL)) = 1UL;
#line 528 "cc1.om"
v38 = ((u (*)())(v35))(v36, v37);
#line 528 "cc1.om"
-b32: *(u *)((v_d) + (160UL)) = v38;
+b32: *(u *)((v_d) + (168UL)) = v38;
#line 506 "cc1.om"
return 0UL;
#line 516 "cc1.om"
@@ -7859,9 +7864,9 @@ b0: v2 = (u)my_find;
#line 1677 "cc1.om"
b1: v_d = v7;
#line 1678 "cc1.om"
- if (!(*(u *)((v_d) + (64UL)))) { goto b6; }
+ if (!(*(u *)((v_d) + (72UL)))) { goto b6; }
#line 1678 "cc1.om"
-b5: if (!(*(u *)((*(u *)((v_d) + (80UL))) + (16UL)))) { goto b10; }
+b5: if (!(*(u *)((*(u *)((v_d) + (88UL))) + (16UL)))) { goto b10; }
#line 1678 "cc1.om"
b9: v9 = 0UL;
#line 1678 "cc1.om"
@@ -7879,7 +7884,7 @@ b3: v10 = (u)my_fixup_label;
#line 1679 "cc1.om"
v11 = *(u *)((v_c) + (48UL));
#line 1679 "cc1.om"
- v12 = *(u *)((v_d) + (80UL));
+ v12 = *(u *)((v_d) + (88UL));
#line 1679 "cc1.om"
v13 = ((u (*)())(v10))(v11, v12);
#line 1680 "cc1.om"
@@ -7887,9 +7892,9 @@ b12: v14 = (u)my_add_symbol;
#line 1680 "cc1.om"
v15 = *(u *)((v_c) + (48UL));
#line 1680 "cc1.om"
- v16 = *(u *)(v_d);
+ v16 = *(u *)((v_d) + (32UL));
#line 1680 "cc1.om"
- v17 = *(u *)((v_d) + (80UL));
+ v17 = *(u *)((v_d) + (88UL));
#line 1680 "cc1.om"
v18 = ((u (*)())(v14))(v15, v16, v17);
#line 1681 "cc1.om"
@@ -8013,9 +8018,9 @@ b2: v72 = (u)my_find;
#line 1692 "cc1.om"
b23: v_d = v77;
#line 1693 "cc1.om"
- if (!(*(u *)((v_d) + (64UL)))) { goto b28; }
+ if (!(*(u *)((v_d) + (72UL)))) { goto b28; }
#line 1693 "cc1.om"
-b27: if (!(*(u *)((*(u *)((v_d) + (80UL))) + (16UL)))) { goto b32; }
+b27: if (!(*(u *)((*(u *)((v_d) + (88UL))) + (16UL)))) { goto b32; }
#line 1693 "cc1.om"
b31: v79 = 0UL;
#line 1693 "cc1.om"
@@ -8033,7 +8038,7 @@ b25: v80 = (u)my_fixup_label;
#line 1694 "cc1.om"
v81 = *(u *)((v_c) + (48UL));
#line 1694 "cc1.om"
- v82 = *(u *)((v_d) + (80UL));
+ v82 = *(u *)((v_d) + (88UL));
#line 1694 "cc1.om"
v83 = ((u (*)())(v80))(v81, v82);
#line 1695 "cc1.om"
@@ -8041,9 +8046,9 @@ b34: v84 = (u)my_add_symbol;
#line 1695 "cc1.om"
v85 = *(u *)((v_c) + (48UL));
#line 1695 "cc1.om"
- v86 = *(u *)(v_d);
+ v86 = *(u *)((v_d) + (32UL));
#line 1695 "cc1.om"
- v87 = *(u *)((v_d) + (80UL));
+ v87 = *(u *)((v_d) + (88UL));
#line 1695 "cc1.om"
v88 = ((u (*)())(v84))(v85, v86, v87);
#line 1696 "cc1.om"
@@ -8081,9 +8086,9 @@ b24: v99 = (u)my_find;
#line 1700 "cc1.om"
b38: v_d = v104;
#line 1701 "cc1.om"
- if (!(*(u *)((v_d) + (64UL)))) { goto b43; }
+ if (!(*(u *)((v_d) + (72UL)))) { goto b43; }
#line 1701 "cc1.om"
-b42: if (!(*(u *)((*(u *)((v_d) + (80UL))) + (16UL)))) { goto b47; }
+b42: if (!(*(u *)((*(u *)((v_d) + (88UL))) + (16UL)))) { goto b47; }
#line 1701 "cc1.om"
b46: v106 = 0UL;
#line 1701 "cc1.om"
@@ -8101,7 +8106,7 @@ b40: v107 = (u)my_fixup_label;
#line 1702 "cc1.om"
v108 = *(u *)((v_c) + (48UL));
#line 1702 "cc1.om"
- v109 = *(u *)((v_d) + (80UL));
+ v109 = *(u *)((v_d) + (88UL));
#line 1702 "cc1.om"
v110 = ((u (*)())(v107))(v108, v109);
#line 1703 "cc1.om"
@@ -8109,9 +8114,9 @@ b49: v111 = (u)my_add_symbol;
#line 1703 "cc1.om"
v112 = *(u *)((v_c) + (48UL));
#line 1703 "cc1.om"
- v113 = *(u *)(v_d);
+ v113 = *(u *)((v_d) + (32UL));
#line 1703 "cc1.om"
- v114 = *(u *)((v_d) + (80UL));
+ v114 = *(u *)((v_d) + (88UL));
#line 1703 "cc1.om"
v115 = ((u (*)())(v111))(v112, v113, v114);
#line 1704 "cc1.om"
@@ -8137,9 +8142,9 @@ b39: v120 = (u)my_find;
#line 1707 "cc1.om"
b52: v_d = v125;
#line 1708 "cc1.om"
- if (!(*(u *)((v_d) + (64UL)))) { goto b57; }
+ if (!(*(u *)((v_d) + (72UL)))) { goto b57; }
#line 1708 "cc1.om"
-b56: if (!(*(u *)((*(u *)((v_d) + (80UL))) + (16UL)))) { goto b61; }
+b56: if (!(*(u *)((*(u *)((v_d) + (88UL))) + (16UL)))) { goto b61; }
#line 1708 "cc1.om"
b60: v127 = 0UL;
#line 1708 "cc1.om"
@@ -8157,7 +8162,7 @@ b54: v128 = (u)my_fixup_label;
#line 1709 "cc1.om"
v129 = *(u *)((v_c) + (48UL));
#line 1709 "cc1.om"
- v130 = *(u *)((v_d) + (80UL));
+ v130 = *(u *)((v_d) + (88UL));
#line 1709 "cc1.om"
v131 = ((u (*)())(v128))(v129, v130);
#line 1710 "cc1.om"
@@ -8165,9 +8170,9 @@ b63: v132 = (u)my_add_symbol;
#line 1710 "cc1.om"
v133 = *(u *)((v_c) + (48UL));
#line 1710 "cc1.om"
- v134 = *(u *)(v_d);
+ v134 = *(u *)((v_d) + (32UL));
#line 1710 "cc1.om"
- v135 = *(u *)((v_d) + (80UL));
+ v135 = *(u *)((v_d) + (88UL));
#line 1710 "cc1.om"
v136 = ((u (*)())(v132))(v133, v134, v135);
#line 1711 "cc1.om"
@@ -8193,9 +8198,9 @@ b53: v141 = (u)my_find;
#line 1714 "cc1.om"
b66: v_d = v146;
#line 1715 "cc1.om"
- if (!(*(u *)((v_d) + (64UL)))) { goto b71; }
+ if (!(*(u *)((v_d) + (72UL)))) { goto b71; }
#line 1715 "cc1.om"
-b70: if (!(*(u *)((*(u *)((v_d) + (80UL))) + (16UL)))) { goto b75; }
+b70: if (!(*(u *)((*(u *)((v_d) + (88UL))) + (16UL)))) { goto b75; }
#line 1715 "cc1.om"
b74: v148 = 0UL;
#line 1715 "cc1.om"
@@ -8213,7 +8218,7 @@ b68: v149 = (u)my_fixup_label;
#line 1716 "cc1.om"
v150 = *(u *)((v_c) + (48UL));
#line 1716 "cc1.om"
- v151 = *(u *)((v_d) + (80UL));
+ v151 = *(u *)((v_d) + (88UL));
#line 1716 "cc1.om"
v152 = ((u (*)())(v149))(v150, v151);
#line 1717 "cc1.om"
@@ -8221,9 +8226,9 @@ b77: v153 = (u)my_add_symbol;
#line 1717 "cc1.om"
v154 = *(u *)((v_c) + (48UL));
#line 1717 "cc1.om"
- v155 = *(u *)(v_d);
+ v155 = *(u *)((v_d) + (32UL));
#line 1717 "cc1.om"
- v156 = *(u *)((v_d) + (80UL));
+ v156 = *(u *)((v_d) + (88UL));
#line 1717 "cc1.om"
v157 = ((u (*)())(v153))(v154, v155, v156);
#line 1718 "cc1.om"
@@ -8481,9 +8486,9 @@ b67: v278 = (u)my_find;
#line 1738 "cc1.om"
b97: v_d = v283;
#line 1739 "cc1.om"
- if (!(*(u *)((v_d) + (64UL)))) { goto b102; }
+ if (!(*(u *)((v_d) + (72UL)))) { goto b102; }
#line 1739 "cc1.om"
-b101: if (!(*(u *)((*(u *)((v_d) + (80UL))) + (16UL)))) { goto b106; }
+b101: if (!(*(u *)((*(u *)((v_d) + (88UL))) + (16UL)))) { goto b106; }
#line 1739 "cc1.om"
b105: v285 = 0UL;
#line 1739 "cc1.om"
@@ -8501,7 +8506,7 @@ b99: v286 = (u)my_fixup_label;
#line 1740 "cc1.om"
v287 = *(u *)((v_c) + (48UL));
#line 1740 "cc1.om"
- v288 = *(u *)((v_d) + (80UL));
+ v288 = *(u *)((v_d) + (88UL));
#line 1740 "cc1.om"
v289 = ((u (*)())(v286))(v287, v288);
#line 1741 "cc1.om"
@@ -8509,9 +8514,9 @@ b108: v290 = (u)my_add_symbol;
#line 1741 "cc1.om"
v291 = *(u *)((v_c) + (48UL));
#line 1741 "cc1.om"
- v292 = *(u *)(v_d);
+ v292 = *(u *)((v_d) + (32UL));
#line 1741 "cc1.om"
- v293 = *(u *)((v_d) + (80UL));
+ v293 = *(u *)((v_d) + (88UL));
#line 1741 "cc1.om"
v294 = ((u (*)())(v290))(v291, v292, v293);
#line 1742 "cc1.om"
@@ -8557,9 +8562,9 @@ b98: v309 = (u)my_find;
#line 1747 "cc1.om"
b113: v_d = v314;
#line 1748 "cc1.om"
- if (!(*(u *)((v_d) + (64UL)))) { goto b118; }
+ if (!(*(u *)((v_d) + (72UL)))) { goto b118; }
#line 1748 "cc1.om"
-b117: if (!(*(u *)((*(u *)((v_d) + (80UL))) + (16UL)))) { goto b122; }
+b117: if (!(*(u *)((*(u *)((v_d) + (88UL))) + (16UL)))) { goto b122; }
#line 1748 "cc1.om"
b121: v316 = 0UL;
#line 1748 "cc1.om"
@@ -8577,7 +8582,7 @@ b115: v317 = (u)my_fixup_label;
#line 1749 "cc1.om"
v318 = *(u *)((v_c) + (48UL));
#line 1749 "cc1.om"
- v319 = *(u *)((v_d) + (80UL));
+ v319 = *(u *)((v_d) + (88UL));
#line 1749 "cc1.om"
v320 = ((u (*)())(v317))(v318, v319);
#line 1750 "cc1.om"
@@ -8585,9 +8590,9 @@ b124: v321 = (u)my_add_symbol;
#line 1750 "cc1.om"
v322 = *(u *)((v_c) + (48UL));
#line 1750 "cc1.om"
- v323 = *(u *)(v_d);
+ v323 = *(u *)((v_d) + (32UL));
#line 1750 "cc1.om"
- v324 = *(u *)((v_d) + (80UL));
+ v324 = *(u *)((v_d) + (88UL));
#line 1750 "cc1.om"
v325 = ((u (*)())(v321))(v322, v323, v324);
#line 1751 "cc1.om"
@@ -8645,9 +8650,9 @@ b114: v346 = (u)my_find;
#line 1757 "cc1.om"
b130: v_d = v351;
#line 1758 "cc1.om"
- if (!(*(u *)((v_d) + (64UL)))) { goto b135; }
+ if (!(*(u *)((v_d) + (72UL)))) { goto b135; }
#line 1758 "cc1.om"
-b134: if (!(*(u *)((*(u *)((v_d) + (80UL))) + (16UL)))) { goto b139; }
+b134: if (!(*(u *)((*(u *)((v_d) + (88UL))) + (16UL)))) { goto b139; }
#line 1758 "cc1.om"
b138: v353 = 0UL;
#line 1758 "cc1.om"
@@ -8665,7 +8670,7 @@ b132: v354 = (u)my_fixup_label;
#line 1759 "cc1.om"
v355 = *(u *)((v_c) + (48UL));
#line 1759 "cc1.om"
- v356 = *(u *)((v_d) + (80UL));
+ v356 = *(u *)((v_d) + (88UL));
#line 1759 "cc1.om"
v357 = ((u (*)())(v354))(v355, v356);
#line 1760 "cc1.om"
@@ -8673,9 +8678,9 @@ b141: v358 = (u)my_add_symbol;
#line 1760 "cc1.om"
v359 = *(u *)((v_c) + (48UL));
#line 1760 "cc1.om"
- v360 = *(u *)(v_d);
+ v360 = *(u *)((v_d) + (32UL));
#line 1760 "cc1.om"
- v361 = *(u *)((v_d) + (80UL));
+ v361 = *(u *)((v_d) + (88UL));
#line 1760 "cc1.om"
v362 = ((u (*)())(v358))(v359, v360, v361);
#line 1761 "cc1.om"
@@ -8729,9 +8734,9 @@ b131: v381 = (u)my_find;
#line 1767 "cc1.om"
b147: v_d = v386;
#line 1768 "cc1.om"
- if (!(*(u *)((v_d) + (64UL)))) { goto b152; }
+ if (!(*(u *)((v_d) + (72UL)))) { goto b152; }
#line 1768 "cc1.om"
-b151: if (!(*(u *)((*(u *)((v_d) + (80UL))) + (16UL)))) { goto b156; }
+b151: if (!(*(u *)((*(u *)((v_d) + (88UL))) + (16UL)))) { goto b156; }
#line 1768 "cc1.om"
b155: v388 = 0UL;
#line 1768 "cc1.om"
@@ -8749,7 +8754,7 @@ b149: v389 = (u)my_fixup_label;
#line 1769 "cc1.om"
v390 = *(u *)((v_c) + (48UL));
#line 1769 "cc1.om"
- v391 = *(u *)((v_d) + (80UL));
+ v391 = *(u *)((v_d) + (88UL));
#line 1769 "cc1.om"
v392 = ((u (*)())(v389))(v390, v391);
#line 1770 "cc1.om"
@@ -8757,9 +8762,9 @@ b158: v393 = (u)my_add_symbol;
#line 1770 "cc1.om"
v394 = *(u *)((v_c) + (48UL));
#line 1770 "cc1.om"
- v395 = *(u *)(v_d);
+ v395 = *(u *)((v_d) + (32UL));
#line 1770 "cc1.om"
- v396 = *(u *)((v_d) + (80UL));
+ v396 = *(u *)((v_d) + (88UL));
#line 1770 "cc1.om"
v397 = ((u (*)())(v393))(v394, v395, v396);
#line 1771 "cc1.om"
@@ -8825,9 +8830,9 @@ b148: v422 = (u)my_find;
#line 1778 "cc1.om"
b165: v_d = v427;
#line 1779 "cc1.om"
- if (!(*(u *)((v_d) + (64UL)))) { goto b170; }
+ if (!(*(u *)((v_d) + (72UL)))) { goto b170; }
#line 1779 "cc1.om"
-b169: if (!(*(u *)((*(u *)((v_d) + (80UL))) + (16UL)))) { goto b174; }
+b169: if (!(*(u *)((*(u *)((v_d) + (88UL))) + (16UL)))) { goto b174; }
#line 1779 "cc1.om"
b173: v429 = 0UL;
#line 1779 "cc1.om"
@@ -8845,7 +8850,7 @@ b167: v430 = (u)my_fixup_label;
#line 1780 "cc1.om"
v431 = *(u *)((v_c) + (48UL));
#line 1780 "cc1.om"
- v432 = *(u *)((v_d) + (80UL));
+ v432 = *(u *)((v_d) + (88UL));
#line 1780 "cc1.om"
v433 = ((u (*)())(v430))(v431, v432);
#line 1781 "cc1.om"
@@ -8853,9 +8858,9 @@ b176: v434 = (u)my_add_symbol;
#line 1781 "cc1.om"
v435 = *(u *)((v_c) + (48UL));
#line 1781 "cc1.om"
- v436 = *(u *)(v_d);
+ v436 = *(u *)((v_d) + (32UL));
#line 1781 "cc1.om"
- v437 = *(u *)((v_d) + (80UL));
+ v437 = *(u *)((v_d) + (88UL));
#line 1781 "cc1.om"
v438 = ((u (*)())(v434))(v435, v436, v437);
#line 1782 "cc1.om"
@@ -8901,9 +8906,9 @@ b166: v453 = (u)my_find;
#line 1787 "cc1.om"
b181: v_d = v458;
#line 1788 "cc1.om"
- if (!(*(u *)((v_d) + (64UL)))) { goto b186; }
+ if (!(*(u *)((v_d) + (72UL)))) { goto b186; }
#line 1788 "cc1.om"
-b185: if (!(*(u *)((*(u *)((v_d) + (80UL))) + (16UL)))) { goto b190; }
+b185: if (!(*(u *)((*(u *)((v_d) + (88UL))) + (16UL)))) { goto b190; }
#line 1788 "cc1.om"
b189: v460 = 0UL;
#line 1788 "cc1.om"
@@ -8921,7 +8926,7 @@ b183: v461 = (u)my_fixup_label;
#line 1789 "cc1.om"
v462 = *(u *)((v_c) + (48UL));
#line 1789 "cc1.om"
- v463 = *(u *)((v_d) + (80UL));
+ v463 = *(u *)((v_d) + (88UL));
#line 1789 "cc1.om"
v464 = ((u (*)())(v461))(v462, v463);
#line 1790 "cc1.om"
@@ -8929,9 +8934,9 @@ b192: v465 = (u)my_add_symbol;
#line 1790 "cc1.om"
v466 = *(u *)((v_c) + (48UL));
#line 1790 "cc1.om"
- v467 = *(u *)(v_d);
+ v467 = *(u *)((v_d) + (32UL));
#line 1790 "cc1.om"
- v468 = *(u *)((v_d) + (80UL));
+ v468 = *(u *)((v_d) + (88UL));
#line 1790 "cc1.om"
v469 = ((u (*)())(v465))(v466, v467, v468);
#line 1791 "cc1.om"
@@ -8989,9 +8994,9 @@ b182: v490 = (u)my_find;
#line 1797 "cc1.om"
b198: v_d = v495;
#line 1798 "cc1.om"
- if (!(*(u *)((v_d) + (64UL)))) { goto b203; }
+ if (!(*(u *)((v_d) + (72UL)))) { goto b203; }
#line 1798 "cc1.om"
-b202: if (!(*(u *)((*(u *)((v_d) + (80UL))) + (16UL)))) { goto b207; }
+b202: if (!(*(u *)((*(u *)((v_d) + (88UL))) + (16UL)))) { goto b207; }
#line 1798 "cc1.om"
b206: v497 = 0UL;
#line 1798 "cc1.om"
@@ -9009,7 +9014,7 @@ b200: v498 = (u)my_fixup_label;
#line 1799 "cc1.om"
v499 = *(u *)((v_c) + (48UL));
#line 1799 "cc1.om"
- v500 = *(u *)((v_d) + (80UL));
+ v500 = *(u *)((v_d) + (88UL));
#line 1799 "cc1.om"
v501 = ((u (*)())(v498))(v499, v500);
#line 1800 "cc1.om"
@@ -9017,9 +9022,9 @@ b209: v502 = (u)my_add_symbol;
#line 1800 "cc1.om"
v503 = *(u *)((v_c) + (48UL));
#line 1800 "cc1.om"
- v504 = *(u *)(v_d);
+ v504 = *(u *)((v_d) + (32UL));
#line 1800 "cc1.om"
- v505 = *(u *)((v_d) + (80UL));
+ v505 = *(u *)((v_d) + (88UL));
#line 1800 "cc1.om"
v506 = ((u (*)())(v502))(v503, v504, v505);
#line 1801 "cc1.om"
@@ -9099,9 +9104,9 @@ b199: v538 = (u)my_find;
#line 1809 "cc1.om"
b217: v_d = v543;
#line 1810 "cc1.om"
- if (!(*(u *)((v_d) + (64UL)))) { goto b222; }
+ if (!(*(u *)((v_d) + (72UL)))) { goto b222; }
#line 1810 "cc1.om"
-b221: if (!(*(u *)((*(u *)((v_d) + (80UL))) + (16UL)))) { goto b226; }
+b221: if (!(*(u *)((*(u *)((v_d) + (88UL))) + (16UL)))) { goto b226; }
#line 1810 "cc1.om"
b225: v545 = 0UL;
#line 1810 "cc1.om"
@@ -9119,7 +9124,7 @@ b219: v546 = (u)my_fixup_label;
#line 1811 "cc1.om"
v547 = *(u *)((v_c) + (48UL));
#line 1811 "cc1.om"
- v548 = *(u *)((v_d) + (80UL));
+ v548 = *(u *)((v_d) + (88UL));
#line 1811 "cc1.om"
v549 = ((u (*)())(v546))(v547, v548);
#line 1812 "cc1.om"
@@ -9127,9 +9132,9 @@ b228: v550 = (u)my_add_symbol;
#line 1812 "cc1.om"
v551 = *(u *)((v_c) + (48UL));
#line 1812 "cc1.om"
- v552 = *(u *)(v_d);
+ v552 = *(u *)((v_d) + (32UL));
#line 1812 "cc1.om"
- v553 = *(u *)((v_d) + (80UL));
+ v553 = *(u *)((v_d) + (88UL));
#line 1812 "cc1.om"
v554 = ((u (*)())(v550))(v551, v552, v553);
#line 1813 "cc1.om"
@@ -9221,9 +9226,9 @@ b218: v592 = (u)my_find;
#line 1822 "cc1.om"
b237: v_d = v597;
#line 1823 "cc1.om"
- if (!(*(u *)((v_d) + (64UL)))) { goto b242; }
+ if (!(*(u *)((v_d) + (72UL)))) { goto b242; }
#line 1823 "cc1.om"
-b241: if (!(*(u *)((*(u *)((v_d) + (80UL))) + (16UL)))) { goto b246; }
+b241: if (!(*(u *)((*(u *)((v_d) + (88UL))) + (16UL)))) { goto b246; }
#line 1823 "cc1.om"
b245: v599 = 0UL;
#line 1823 "cc1.om"
@@ -9241,7 +9246,7 @@ b239: v600 = (u)my_fixup_label;
#line 1824 "cc1.om"
v601 = *(u *)((v_c) + (48UL));
#line 1824 "cc1.om"
- v602 = *(u *)((v_d) + (80UL));
+ v602 = *(u *)((v_d) + (88UL));
#line 1824 "cc1.om"
v603 = ((u (*)())(v600))(v601, v602);
#line 1825 "cc1.om"
@@ -9249,9 +9254,9 @@ b248: v604 = (u)my_add_symbol;
#line 1825 "cc1.om"
v605 = *(u *)((v_c) + (48UL));
#line 1825 "cc1.om"
- v606 = *(u *)(v_d);
+ v606 = *(u *)((v_d) + (32UL));
#line 1825 "cc1.om"
- v607 = *(u *)((v_d) + (80UL));
+ v607 = *(u *)((v_d) + (88UL));
#line 1825 "cc1.om"
v608 = ((u (*)())(v604))(v605, v606, v607);
#line 1826 "cc1.om"
@@ -9289,9 +9294,9 @@ b238: v619 = (u)my_find;
#line 1830 "cc1.om"
b252: v_d = v624;
#line 1831 "cc1.om"
- if (!(*(u *)((v_d) + (64UL)))) { goto b257; }
+ if (!(*(u *)((v_d) + (72UL)))) { goto b257; }
#line 1831 "cc1.om"
-b256: if (!(*(u *)((*(u *)((v_d) + (80UL))) + (16UL)))) { goto b261; }
+b256: if (!(*(u *)((*(u *)((v_d) + (88UL))) + (16UL)))) { goto b261; }
#line 1831 "cc1.om"
b260: v626 = 0UL;
#line 1831 "cc1.om"
@@ -9309,7 +9314,7 @@ b254: v627 = (u)my_fixup_label;
#line 1832 "cc1.om"
v628 = *(u *)((v_c) + (48UL));
#line 1832 "cc1.om"
- v629 = *(u *)((v_d) + (80UL));
+ v629 = *(u *)((v_d) + (88UL));
#line 1832 "cc1.om"
v630 = ((u (*)())(v627))(v628, v629);
#line 1833 "cc1.om"
@@ -9317,9 +9322,9 @@ b263: v631 = (u)my_add_symbol;
#line 1833 "cc1.om"
v632 = *(u *)((v_c) + (48UL));
#line 1833 "cc1.om"
- v633 = *(u *)(v_d);
+ v633 = *(u *)((v_d) + (32UL));
#line 1833 "cc1.om"
- v634 = *(u *)((v_d) + (80UL));
+ v634 = *(u *)((v_d) + (88UL));
#line 1833 "cc1.om"
v635 = ((u (*)())(v631))(v632, v633, v634);
#line 1834 "cc1.om"
@@ -9357,9 +9362,9 @@ b253: v646 = (u)my_find;
#line 1838 "cc1.om"
b267: v_d = v651;
#line 1839 "cc1.om"
- if (!(*(u *)((v_d) + (64UL)))) { goto b272; }
+ if (!(*(u *)((v_d) + (72UL)))) { goto b272; }
#line 1839 "cc1.om"
-b271: if (!(*(u *)((*(u *)((v_d) + (80UL))) + (16UL)))) { goto b276; }
+b271: if (!(*(u *)((*(u *)((v_d) + (88UL))) + (16UL)))) { goto b276; }
#line 1839 "cc1.om"
b275: v653 = 0UL;
#line 1839 "cc1.om"
@@ -9377,7 +9382,7 @@ b269: v654 = (u)my_fixup_label;
#line 1840 "cc1.om"
v655 = *(u *)((v_c) + (48UL));
#line 1840 "cc1.om"
- v656 = *(u *)((v_d) + (80UL));
+ v656 = *(u *)((v_d) + (88UL));
#line 1840 "cc1.om"
v657 = ((u (*)())(v654))(v655, v656);
#line 1841 "cc1.om"
@@ -9385,9 +9390,9 @@ b278: v658 = (u)my_add_symbol;
#line 1841 "cc1.om"
v659 = *(u *)((v_c) + (48UL));
#line 1841 "cc1.om"
- v660 = *(u *)(v_d);
+ v660 = *(u *)((v_d) + (32UL));
#line 1841 "cc1.om"
- v661 = *(u *)((v_d) + (80UL));
+ v661 = *(u *)((v_d) + (88UL));
#line 1841 "cc1.om"
v662 = ((u (*)())(v658))(v659, v660, v661);
#line 1842 "cc1.om"
@@ -9425,9 +9430,9 @@ b268: v673 = (u)my_find;
#line 1846 "cc1.om"
b282: v_d = v678;
#line 1847 "cc1.om"
- if (!(*(u *)((v_d) + (64UL)))) { goto b287; }
+ if (!(*(u *)((v_d) + (72UL)))) { goto b287; }
#line 1847 "cc1.om"
-b286: if (!(*(u *)((*(u *)((v_d) + (80UL))) + (16UL)))) { goto b291; }
+b286: if (!(*(u *)((*(u *)((v_d) + (88UL))) + (16UL)))) { goto b291; }
#line 1847 "cc1.om"
b290: v680 = 0UL;
#line 1847 "cc1.om"
@@ -9445,7 +9450,7 @@ b284: v681 = (u)my_fixup_label;
#line 1848 "cc1.om"
v682 = *(u *)((v_c) + (48UL));
#line 1848 "cc1.om"
- v683 = *(u *)((v_d) + (80UL));
+ v683 = *(u *)((v_d) + (88UL));
#line 1848 "cc1.om"
v684 = ((u (*)())(v681))(v682, v683);
#line 1849 "cc1.om"
@@ -9453,9 +9458,9 @@ b293: v685 = (u)my_add_symbol;
#line 1849 "cc1.om"
v686 = *(u *)((v_c) + (48UL));
#line 1849 "cc1.om"
- v687 = *(u *)(v_d);
+ v687 = *(u *)((v_d) + (32UL));
#line 1849 "cc1.om"
- v688 = *(u *)((v_d) + (80UL));
+ v688 = *(u *)((v_d) + (88UL));
#line 1849 "cc1.om"
v689 = ((u (*)())(v685))(v686, v687, v688);
#line 1850 "cc1.om"
@@ -9493,9 +9498,9 @@ b283: v700 = (u)my_find;
#line 1854 "cc1.om"
b297: v_d = v705;
#line 1855 "cc1.om"
- if (!(*(u *)((v_d) + (64UL)))) { goto b302; }
+ if (!(*(u *)((v_d) + (72UL)))) { goto b302; }
#line 1855 "cc1.om"
-b301: if (!(*(u *)((*(u *)((v_d) + (80UL))) + (16UL)))) { goto b306; }
+b301: if (!(*(u *)((*(u *)((v_d) + (88UL))) + (16UL)))) { goto b306; }
#line 1855 "cc1.om"
b305: v707 = 0UL;
#line 1855 "cc1.om"
@@ -9513,7 +9518,7 @@ b299: v708 = (u)my_fixup_label;
#line 1856 "cc1.om"
v709 = *(u *)((v_c) + (48UL));
#line 1856 "cc1.om"
- v710 = *(u *)((v_d) + (80UL));
+ v710 = *(u *)((v_d) + (88UL));
#line 1856 "cc1.om"
v711 = ((u (*)())(v708))(v709, v710);
#line 1857 "cc1.om"
@@ -9521,9 +9526,9 @@ b308: v712 = (u)my_add_symbol;
#line 1857 "cc1.om"
v713 = *(u *)((v_c) + (48UL));
#line 1857 "cc1.om"
- v714 = *(u *)(v_d);
+ v714 = *(u *)((v_d) + (32UL));
#line 1857 "cc1.om"
- v715 = *(u *)((v_d) + (80UL));
+ v715 = *(u *)((v_d) + (88UL));
#line 1857 "cc1.om"
v716 = ((u (*)())(v712))(v713, v714, v715);
#line 1858 "cc1.om"
@@ -9561,9 +9566,9 @@ b298: v727 = (u)my_find;
#line 1862 "cc1.om"
b312: v_d = v732;
#line 1863 "cc1.om"
- if (!(*(u *)((v_d) + (64UL)))) { goto b317; }
+ if (!(*(u *)((v_d) + (72UL)))) { goto b317; }
#line 1863 "cc1.om"
-b316: if (!(*(u *)((*(u *)((v_d) + (80UL))) + (16UL)))) { goto b321; }
+b316: if (!(*(u *)((*(u *)((v_d) + (88UL))) + (16UL)))) { goto b321; }
#line 1863 "cc1.om"
b320: v734 = 0UL;
#line 1863 "cc1.om"
@@ -9581,7 +9586,7 @@ b314: v735 = (u)my_fixup_label;
#line 1864 "cc1.om"
v736 = *(u *)((v_c) + (48UL));
#line 1864 "cc1.om"
- v737 = *(u *)((v_d) + (80UL));
+ v737 = *(u *)((v_d) + (88UL));
#line 1864 "cc1.om"
v738 = ((u (*)())(v735))(v736, v737);
#line 1865 "cc1.om"
@@ -9589,9 +9594,9 @@ b323: v739 = (u)my_add_symbol;
#line 1865 "cc1.om"
v740 = *(u *)((v_c) + (48UL));
#line 1865 "cc1.om"
- v741 = *(u *)(v_d);
+ v741 = *(u *)((v_d) + (32UL));
#line 1865 "cc1.om"
- v742 = *(u *)((v_d) + (80UL));
+ v742 = *(u *)((v_d) + (88UL));
#line 1865 "cc1.om"
v743 = ((u (*)())(v739))(v740, v741, v742);
#line 1866 "cc1.om"
@@ -9629,9 +9634,9 @@ b313: v754 = (u)my_find;
#line 1870 "cc1.om"
b327: v_d = v759;
#line 1871 "cc1.om"
- if (!(*(u *)((v_d) + (64UL)))) { goto b332; }
+ if (!(*(u *)((v_d) + (72UL)))) { goto b332; }
#line 1871 "cc1.om"
-b331: if (!(*(u *)((*(u *)((v_d) + (80UL))) + (16UL)))) { goto b336; }
+b331: if (!(*(u *)((*(u *)((v_d) + (88UL))) + (16UL)))) { goto b336; }
#line 1871 "cc1.om"
b335: v761 = 0UL;
#line 1871 "cc1.om"
@@ -9649,7 +9654,7 @@ b329: v762 = (u)my_fixup_label;
#line 1872 "cc1.om"
v763 = *(u *)((v_c) + (48UL));
#line 1872 "cc1.om"
- v764 = *(u *)((v_d) + (80UL));
+ v764 = *(u *)((v_d) + (88UL));
#line 1872 "cc1.om"
v765 = ((u (*)())(v762))(v763, v764);
#line 1873 "cc1.om"
@@ -9657,9 +9662,9 @@ b338: v766 = (u)my_add_symbol;
#line 1873 "cc1.om"
v767 = *(u *)((v_c) + (48UL));
#line 1873 "cc1.om"
- v768 = *(u *)(v_d);
+ v768 = *(u *)((v_d) + (32UL));
#line 1873 "cc1.om"
- v769 = *(u *)((v_d) + (80UL));
+ v769 = *(u *)((v_d) + (88UL));
#line 1873 "cc1.om"
v770 = ((u (*)())(v766))(v767, v768, v769);
#line 1874 "cc1.om"
@@ -9697,9 +9702,9 @@ b328: v781 = (u)my_find;
#line 1878 "cc1.om"
b342: v_d = v786;
#line 1879 "cc1.om"
- if (!(*(u *)((v_d) + (64UL)))) { goto b347; }
+ if (!(*(u *)((v_d) + (72UL)))) { goto b347; }
#line 1879 "cc1.om"
-b346: if (!(*(u *)((*(u *)((v_d) + (80UL))) + (16UL)))) { goto b351; }
+b346: if (!(*(u *)((*(u *)((v_d) + (88UL))) + (16UL)))) { goto b351; }
#line 1879 "cc1.om"
b350: v788 = 0UL;
#line 1879 "cc1.om"
@@ -9717,7 +9722,7 @@ b344: v789 = (u)my_fixup_label;
#line 1880 "cc1.om"
v790 = *(u *)((v_c) + (48UL));
#line 1880 "cc1.om"
- v791 = *(u *)((v_d) + (80UL));
+ v791 = *(u *)((v_d) + (88UL));
#line 1880 "cc1.om"
v792 = ((u (*)())(v789))(v790, v791);
#line 1881 "cc1.om"
@@ -9725,9 +9730,9 @@ b353: v793 = (u)my_add_symbol;
#line 1881 "cc1.om"
v794 = *(u *)((v_c) + (48UL));
#line 1881 "cc1.om"
- v795 = *(u *)(v_d);
+ v795 = *(u *)((v_d) + (32UL));
#line 1881 "cc1.om"
- v796 = *(u *)((v_d) + (80UL));
+ v796 = *(u *)((v_d) + (88UL));
#line 1881 "cc1.om"
v797 = ((u (*)())(v793))(v794, v795, v796);
#line 1882 "cc1.om"
@@ -9765,9 +9770,9 @@ b343: v808 = (u)my_find;
#line 1886 "cc1.om"
b357: v_d = v813;
#line 1887 "cc1.om"
- if (!(*(u *)((v_d) + (64UL)))) { goto b362; }
+ if (!(*(u *)((v_d) + (72UL)))) { goto b362; }
#line 1887 "cc1.om"
-b361: if (!(*(u *)((*(u *)((v_d) + (80UL))) + (16UL)))) { goto b366; }
+b361: if (!(*(u *)((*(u *)((v_d) + (88UL))) + (16UL)))) { goto b366; }
#line 1887 "cc1.om"
b365: v815 = 0UL;
#line 1887 "cc1.om"
@@ -9785,7 +9790,7 @@ b359: v816 = (u)my_fixup_label;
#line 1888 "cc1.om"
v817 = *(u *)((v_c) + (48UL));
#line 1888 "cc1.om"
- v818 = *(u *)((v_d) + (80UL));
+ v818 = *(u *)((v_d) + (88UL));
#line 1888 "cc1.om"
v819 = ((u (*)())(v816))(v817, v818);
#line 1889 "cc1.om"
@@ -9793,9 +9798,9 @@ b368: v820 = (u)my_add_symbol;
#line 1889 "cc1.om"
v821 = *(u *)((v_c) + (48UL));
#line 1889 "cc1.om"
- v822 = *(u *)(v_d);
+ v822 = *(u *)((v_d) + (32UL));
#line 1889 "cc1.om"
- v823 = *(u *)((v_d) + (80UL));
+ v823 = *(u *)((v_d) + (88UL));
#line 1889 "cc1.om"
v824 = ((u (*)())(v820))(v821, v822, v823);
#line 1890 "cc1.om"
@@ -9909,9 +9914,9 @@ b358: v873 = (u)my_find;
#line 1899 "cc1.om"
b377: v_d = v878;
#line 1900 "cc1.om"
- if (!(*(u *)((v_d) + (64UL)))) { goto b382; }
+ if (!(*(u *)((v_d) + (72UL)))) { goto b382; }
#line 1900 "cc1.om"
-b381: if (!(*(u *)((*(u *)((v_d) + (80UL))) + (16UL)))) { goto b386; }
+b381: if (!(*(u *)((*(u *)((v_d) + (88UL))) + (16UL)))) { goto b386; }
#line 1900 "cc1.om"
b385: v880 = 0UL;
#line 1900 "cc1.om"
@@ -9929,7 +9934,7 @@ b379: v881 = (u)my_fixup_label;
#line 1901 "cc1.om"
v882 = *(u *)((v_c) + (48UL));
#line 1901 "cc1.om"
- v883 = *(u *)((v_d) + (80UL));
+ v883 = *(u *)((v_d) + (88UL));
#line 1901 "cc1.om"
v884 = ((u (*)())(v881))(v882, v883);
#line 1902 "cc1.om"
@@ -9937,9 +9942,9 @@ b388: v885 = (u)my_add_symbol;
#line 1902 "cc1.om"
v886 = *(u *)((v_c) + (48UL));
#line 1902 "cc1.om"
- v887 = *(u *)(v_d);
+ v887 = *(u *)((v_d) + (32UL));
#line 1902 "cc1.om"
- v888 = *(u *)((v_d) + (80UL));
+ v888 = *(u *)((v_d) + (88UL));
#line 1902 "cc1.om"
v889 = ((u (*)())(v885))(v886, v887, v888);
#line 1903 "cc1.om"
@@ -10053,9 +10058,9 @@ b378: v938 = (u)my_find;
#line 1912 "cc1.om"
b397: v_d = v943;
#line 1913 "cc1.om"
- if (!(*(u *)((v_d) + (64UL)))) { goto b402; }
+ if (!(*(u *)((v_d) + (72UL)))) { goto b402; }
#line 1913 "cc1.om"
-b401: if (!(*(u *)((*(u *)((v_d) + (80UL))) + (16UL)))) { goto b406; }
+b401: if (!(*(u *)((*(u *)((v_d) + (88UL))) + (16UL)))) { goto b406; }
#line 1913 "cc1.om"
b405: v945 = 0UL;
#line 1913 "cc1.om"
@@ -10073,7 +10078,7 @@ b399: v946 = (u)my_fixup_label;
#line 1914 "cc1.om"
v947 = *(u *)((v_c) + (48UL));
#line 1914 "cc1.om"
- v948 = *(u *)((v_d) + (80UL));
+ v948 = *(u *)((v_d) + (88UL));
#line 1914 "cc1.om"
v949 = ((u (*)())(v946))(v947, v948);
#line 1915 "cc1.om"
@@ -10081,9 +10086,9 @@ b408: v950 = (u)my_add_symbol;
#line 1915 "cc1.om"
v951 = *(u *)((v_c) + (48UL));
#line 1915 "cc1.om"
- v952 = *(u *)(v_d);
+ v952 = *(u *)((v_d) + (32UL));
#line 1915 "cc1.om"
- v953 = *(u *)((v_d) + (80UL));
+ v953 = *(u *)((v_d) + (88UL));
#line 1915 "cc1.om"
v954 = ((u (*)())(v950))(v951, v952, v953);
#line 1916 "cc1.om"
@@ -10119,9 +10124,9 @@ b398: v964 = (u)my_find;
#line 1920 "cc1.om"
b412: v_d = v969;
#line 1921 "cc1.om"
- if (!(*(u *)((v_d) + (64UL)))) { goto b417; }
+ if (!(*(u *)((v_d) + (72UL)))) { goto b417; }
#line 1921 "cc1.om"
-b416: if (!(*(u *)((*(u *)((v_d) + (80UL))) + (16UL)))) { goto b421; }
+b416: if (!(*(u *)((*(u *)((v_d) + (88UL))) + (16UL)))) { goto b421; }
#line 1921 "cc1.om"
b420: v971 = 0UL;
#line 1921 "cc1.om"
@@ -10139,7 +10144,7 @@ b414: v972 = (u)my_fixup_label;
#line 1922 "cc1.om"
v973 = *(u *)((v_c) + (48UL));
#line 1922 "cc1.om"
- v974 = *(u *)((v_d) + (80UL));
+ v974 = *(u *)((v_d) + (88UL));
#line 1922 "cc1.om"
v975 = ((u (*)())(v972))(v973, v974);
#line 1923 "cc1.om"
@@ -10147,9 +10152,9 @@ b423: v976 = (u)my_add_symbol;
#line 1923 "cc1.om"
v977 = *(u *)((v_c) + (48UL));
#line 1923 "cc1.om"
- v978 = *(u *)(v_d);
+ v978 = *(u *)((v_d) + (32UL));
#line 1923 "cc1.om"
- v979 = *(u *)((v_d) + (80UL));
+ v979 = *(u *)((v_d) + (88UL));
#line 1923 "cc1.om"
v980 = ((u (*)())(v976))(v977, v978, v979);
#line 1924 "cc1.om"
@@ -10185,9 +10190,9 @@ b413: v990 = (u)my_find;
#line 1928 "cc1.om"
b427: v_d = v995;
#line 1929 "cc1.om"
- if (!(*(u *)((v_d) + (64UL)))) { goto b432; }
+ if (!(*(u *)((v_d) + (72UL)))) { goto b432; }
#line 1929 "cc1.om"
-b431: if (!(*(u *)((*(u *)((v_d) + (80UL))) + (16UL)))) { goto b436; }
+b431: if (!(*(u *)((*(u *)((v_d) + (88UL))) + (16UL)))) { goto b436; }
#line 1929 "cc1.om"
b435: v997 = 0UL;
#line 1929 "cc1.om"
@@ -10205,7 +10210,7 @@ b429: v998 = (u)my_fixup_label;
#line 1930 "cc1.om"
v999 = *(u *)((v_c) + (48UL));
#line 1930 "cc1.om"
- v1000 = *(u *)((v_d) + (80UL));
+ v1000 = *(u *)((v_d) + (88UL));
#line 1930 "cc1.om"
v1001 = ((u (*)())(v998))(v999, v1000);
#line 1931 "cc1.om"
@@ -10213,9 +10218,9 @@ b438: v1002 = (u)my_add_symbol;
#line 1931 "cc1.om"
v1003 = *(u *)((v_c) + (48UL));
#line 1931 "cc1.om"
- v1004 = *(u *)(v_d);
+ v1004 = *(u *)((v_d) + (32UL));
#line 1931 "cc1.om"
- v1005 = *(u *)((v_d) + (80UL));
+ v1005 = *(u *)((v_d) + (88UL));
#line 1931 "cc1.om"
v1006 = ((u (*)())(v1002))(v1003, v1004, v1005);
#line 1932 "cc1.om"
@@ -10447,9 +10452,9 @@ b428: v1114 = (u)my_find;
#line 1963 "cc1.om"
b463: v_d = v1119;
#line 1964 "cc1.om"
- if (!(*(u *)((v_d) + (64UL)))) { goto b468; }
+ if (!(*(u *)((v_d) + (72UL)))) { goto b468; }
#line 1964 "cc1.om"
-b467: if (!(*(u *)((*(u *)((v_d) + (80UL))) + (16UL)))) { goto b472; }
+b467: if (!(*(u *)((*(u *)((v_d) + (88UL))) + (16UL)))) { goto b472; }
#line 1964 "cc1.om"
b471: v1121 = 0UL;
#line 1964 "cc1.om"
@@ -10467,7 +10472,7 @@ b465: v1122 = (u)my_fixup_label;
#line 1965 "cc1.om"
v1123 = *(u *)((v_c) + (48UL));
#line 1965 "cc1.om"
- v1124 = *(u *)((v_d) + (80UL));
+ v1124 = *(u *)((v_d) + (88UL));
#line 1965 "cc1.om"
v1125 = ((u (*)())(v1122))(v1123, v1124);
#line 1966 "cc1.om"
@@ -10475,9 +10480,9 @@ b474: v1126 = (u)my_add_symbol;
#line 1966 "cc1.om"
v1127 = *(u *)((v_c) + (48UL));
#line 1966 "cc1.om"
- v1128 = *(u *)(v_d);
+ v1128 = *(u *)((v_d) + (32UL));
#line 1966 "cc1.om"
- v1129 = *(u *)((v_d) + (80UL));
+ v1129 = *(u *)((v_d) + (88UL));
#line 1966 "cc1.om"
v1130 = ((u (*)())(v1126))(v1127, v1128, v1129);
#line 1967 "cc1.om"
@@ -10511,9 +10516,9 @@ b464: v1139 = (u)my_find;
#line 1971 "cc1.om"
b478: v_d = v1144;
#line 1972 "cc1.om"
- if (!(*(u *)((v_d) + (64UL)))) { goto b483; }
+ if (!(*(u *)((v_d) + (72UL)))) { goto b483; }
#line 1972 "cc1.om"
-b482: if (!(*(u *)((*(u *)((v_d) + (80UL))) + (16UL)))) { goto b487; }
+b482: if (!(*(u *)((*(u *)((v_d) + (88UL))) + (16UL)))) { goto b487; }
#line 1972 "cc1.om"
b486: v1146 = 0UL;
#line 1972 "cc1.om"
@@ -10531,7 +10536,7 @@ b480: v1147 = (u)my_fixup_label;
#line 1973 "cc1.om"
v1148 = *(u *)((v_c) + (48UL));
#line 1973 "cc1.om"
- v1149 = *(u *)((v_d) + (80UL));
+ v1149 = *(u *)((v_d) + (88UL));
#line 1973 "cc1.om"
v1150 = ((u (*)())(v1147))(v1148, v1149);
#line 1974 "cc1.om"
@@ -10539,9 +10544,9 @@ b489: v1151 = (u)my_add_symbol;
#line 1974 "cc1.om"
v1152 = *(u *)((v_c) + (48UL));
#line 1974 "cc1.om"
- v1153 = *(u *)(v_d);
+ v1153 = *(u *)((v_d) + (32UL));
#line 1974 "cc1.om"
- v1154 = *(u *)((v_d) + (80UL));
+ v1154 = *(u *)((v_d) + (88UL));
#line 1974 "cc1.om"
v1155 = ((u (*)())(v1151))(v1152, v1153, v1154);
#line 1975 "cc1.om"
@@ -10575,9 +10580,9 @@ b479: v1164 = (u)my_find;
#line 1979 "cc1.om"
b493: v_d = v1169;
#line 1980 "cc1.om"
- if (!(*(u *)((v_d) + (64UL)))) { goto b498; }
+ if (!(*(u *)((v_d) + (72UL)))) { goto b498; }
#line 1980 "cc1.om"
-b497: if (!(*(u *)((*(u *)((v_d) + (80UL))) + (16UL)))) { goto b502; }
+b497: if (!(*(u *)((*(u *)((v_d) + (88UL))) + (16UL)))) { goto b502; }
#line 1980 "cc1.om"
b501: v1171 = 0UL;
#line 1980 "cc1.om"
@@ -10595,7 +10600,7 @@ b495: v1172 = (u)my_fixup_label;
#line 1981 "cc1.om"
v1173 = *(u *)((v_c) + (48UL));
#line 1981 "cc1.om"
- v1174 = *(u *)((v_d) + (80UL));
+ v1174 = *(u *)((v_d) + (88UL));
#line 1981 "cc1.om"
v1175 = ((u (*)())(v1172))(v1173, v1174);
#line 1982 "cc1.om"
@@ -10603,9 +10608,9 @@ b504: v1176 = (u)my_add_symbol;
#line 1982 "cc1.om"
v1177 = *(u *)((v_c) + (48UL));
#line 1982 "cc1.om"
- v1178 = *(u *)(v_d);
+ v1178 = *(u *)((v_d) + (32UL));
#line 1982 "cc1.om"
- v1179 = *(u *)((v_d) + (80UL));
+ v1179 = *(u *)((v_d) + (88UL));
#line 1982 "cc1.om"
v1180 = ((u (*)())(v1176))(v1177, v1178, v1179);
#line 1983 "cc1.om"
@@ -10639,9 +10644,9 @@ b494: v1189 = (u)my_find;
#line 1987 "cc1.om"
b508: v_d = v1194;
#line 1988 "cc1.om"
- if (!(*(u *)((v_d) + (64UL)))) { goto b513; }
+ if (!(*(u *)((v_d) + (72UL)))) { goto b513; }
#line 1988 "cc1.om"
-b512: if (!(*(u *)((*(u *)((v_d) + (80UL))) + (16UL)))) { goto b517; }
+b512: if (!(*(u *)((*(u *)((v_d) + (88UL))) + (16UL)))) { goto b517; }
#line 1988 "cc1.om"
b516: v1196 = 0UL;
#line 1988 "cc1.om"
@@ -10659,7 +10664,7 @@ b510: v1197 = (u)my_fixup_label;
#line 1989 "cc1.om"
v1198 = *(u *)((v_c) + (48UL));
#line 1989 "cc1.om"
- v1199 = *(u *)((v_d) + (80UL));
+ v1199 = *(u *)((v_d) + (88UL));
#line 1989 "cc1.om"
v1200 = ((u (*)())(v1197))(v1198, v1199);
#line 1990 "cc1.om"
@@ -10667,9 +10672,9 @@ b519: v1201 = (u)my_add_symbol;
#line 1990 "cc1.om"
v1202 = *(u *)((v_c) + (48UL));
#line 1990 "cc1.om"
- v1203 = *(u *)(v_d);
+ v1203 = *(u *)((v_d) + (32UL));
#line 1990 "cc1.om"
- v1204 = *(u *)((v_d) + (80UL));
+ v1204 = *(u *)((v_d) + (88UL));
#line 1990 "cc1.om"
v1205 = ((u (*)())(v1201))(v1202, v1203, v1204);
#line 1991 "cc1.om"
@@ -10713,9 +10718,9 @@ b509: v1219 = (u)my_find;
#line 1996 "cc1.om"
b524: v_d = v1224;
#line 1997 "cc1.om"
- if (!(*(u *)((v_d) + (64UL)))) { goto b529; }
+ if (!(*(u *)((v_d) + (72UL)))) { goto b529; }
#line 1997 "cc1.om"
-b528: if (!(*(u *)((*(u *)((v_d) + (80UL))) + (16UL)))) { goto b533; }
+b528: if (!(*(u *)((*(u *)((v_d) + (88UL))) + (16UL)))) { goto b533; }
#line 1997 "cc1.om"
b532: v1226 = 0UL;
#line 1997 "cc1.om"
@@ -10733,7 +10738,7 @@ b526: v1227 = (u)my_fixup_label;
#line 1998 "cc1.om"
v1228 = *(u *)((v_c) + (48UL));
#line 1998 "cc1.om"
- v1229 = *(u *)((v_d) + (80UL));
+ v1229 = *(u *)((v_d) + (88UL));
#line 1998 "cc1.om"
v1230 = ((u (*)())(v1227))(v1228, v1229);
#line 1999 "cc1.om"
@@ -10741,9 +10746,9 @@ b535: v1231 = (u)my_add_symbol;
#line 1999 "cc1.om"
v1232 = *(u *)((v_c) + (48UL));
#line 1999 "cc1.om"
- v1233 = *(u *)(v_d);
+ v1233 = *(u *)((v_d) + (32UL));
#line 1999 "cc1.om"
- v1234 = *(u *)((v_d) + (80UL));
+ v1234 = *(u *)((v_d) + (88UL));
#line 1999 "cc1.om"
v1235 = ((u (*)())(v1231))(v1232, v1233, v1234);
#line 2000 "cc1.om"
@@ -10787,9 +10792,9 @@ b525: v1249 = (u)my_find;
#line 2005 "cc1.om"
b540: v_d = v1254;
#line 2006 "cc1.om"
- if (!(*(u *)((v_d) + (64UL)))) { goto b545; }
+ if (!(*(u *)((v_d) + (72UL)))) { goto b545; }
#line 2006 "cc1.om"
-b544: if (!(*(u *)((*(u *)((v_d) + (80UL))) + (16UL)))) { goto b549; }
+b544: if (!(*(u *)((*(u *)((v_d) + (88UL))) + (16UL)))) { goto b549; }
#line 2006 "cc1.om"
b548: v1256 = 0UL;
#line 2006 "cc1.om"
@@ -10807,7 +10812,7 @@ b542: v1257 = (u)my_fixup_label;
#line 2007 "cc1.om"
v1258 = *(u *)((v_c) + (48UL));
#line 2007 "cc1.om"
- v1259 = *(u *)((v_d) + (80UL));
+ v1259 = *(u *)((v_d) + (88UL));
#line 2007 "cc1.om"
v1260 = ((u (*)())(v1257))(v1258, v1259);
#line 2008 "cc1.om"
@@ -10815,9 +10820,9 @@ b551: v1261 = (u)my_add_symbol;
#line 2008 "cc1.om"
v1262 = *(u *)((v_c) + (48UL));
#line 2008 "cc1.om"
- v1263 = *(u *)(v_d);
+ v1263 = *(u *)((v_d) + (32UL));
#line 2008 "cc1.om"
- v1264 = *(u *)((v_d) + (80UL));
+ v1264 = *(u *)((v_d) + (88UL));
#line 2008 "cc1.om"
v1265 = ((u (*)())(v1261))(v1262, v1263, v1264);
#line 2009 "cc1.om"
@@ -10859,9 +10864,9 @@ b541: v1278 = (u)my_find;
#line 2013 "cc1.om"
b555: v_d = v1283;
#line 2014 "cc1.om"
- if (!(*(u *)((v_d) + (64UL)))) { goto b560; }
+ if (!(*(u *)((v_d) + (72UL)))) { goto b560; }
#line 2014 "cc1.om"
-b559: if (!(*(u *)((*(u *)((v_d) + (80UL))) + (16UL)))) { goto b564; }
+b559: if (!(*(u *)((*(u *)((v_d) + (88UL))) + (16UL)))) { goto b564; }
#line 2014 "cc1.om"
b563: v1285 = 0UL;
#line 2014 "cc1.om"
@@ -10879,7 +10884,7 @@ b557: v1286 = (u)my_fixup_label;
#line 2015 "cc1.om"
v1287 = *(u *)((v_c) + (48UL));
#line 2015 "cc1.om"
- v1288 = *(u *)((v_d) + (80UL));
+ v1288 = *(u *)((v_d) + (88UL));
#line 2015 "cc1.om"
v1289 = ((u (*)())(v1286))(v1287, v1288);
#line 2016 "cc1.om"
@@ -10887,9 +10892,9 @@ b566: v1290 = (u)my_add_symbol;
#line 2016 "cc1.om"
v1291 = *(u *)((v_c) + (48UL));
#line 2016 "cc1.om"
- v1292 = *(u *)(v_d);
+ v1292 = *(u *)((v_d) + (32UL));
#line 2016 "cc1.om"
- v1293 = *(u *)((v_d) + (80UL));
+ v1293 = *(u *)((v_d) + (88UL));
#line 2016 "cc1.om"
v1294 = ((u (*)())(v1290))(v1291, v1292, v1293);
#line 2017 "cc1.om"
@@ -10931,9 +10936,9 @@ b556: v1307 = (u)my_find;
#line 2021 "cc1.om"
b570: v_d = v1312;
#line 2022 "cc1.om"
- if (!(*(u *)((v_d) + (64UL)))) { goto b575; }
+ if (!(*(u *)((v_d) + (72UL)))) { goto b575; }
#line 2022 "cc1.om"
-b574: if (!(*(u *)((*(u *)((v_d) + (80UL))) + (16UL)))) { goto b579; }
+b574: if (!(*(u *)((*(u *)((v_d) + (88UL))) + (16UL)))) { goto b579; }
#line 2022 "cc1.om"
b578: v1314 = 0UL;
#line 2022 "cc1.om"
@@ -10951,7 +10956,7 @@ b572: v1315 = (u)my_fixup_label;
#line 2023 "cc1.om"
v1316 = *(u *)((v_c) + (48UL));
#line 2023 "cc1.om"
- v1317 = *(u *)((v_d) + (80UL));
+ v1317 = *(u *)((v_d) + (88UL));
#line 2023 "cc1.om"
v1318 = ((u (*)())(v1315))(v1316, v1317);
#line 2024 "cc1.om"
@@ -10959,9 +10964,9 @@ b581: v1319 = (u)my_add_symbol;
#line 2024 "cc1.om"
v1320 = *(u *)((v_c) + (48UL));
#line 2024 "cc1.om"
- v1321 = *(u *)(v_d);
+ v1321 = *(u *)((v_d) + (32UL));
#line 2024 "cc1.om"
- v1322 = *(u *)((v_d) + (80UL));
+ v1322 = *(u *)((v_d) + (88UL));
#line 2024 "cc1.om"
v1323 = ((u (*)())(v1319))(v1320, v1321, v1322);
#line 2025 "cc1.om"
@@ -10993,9 +10998,9 @@ b571: v1331 = (u)my_find;
#line 2029 "cc1.om"
b585: v_d = v1336;
#line 2030 "cc1.om"
- if (!(*(u *)((v_d) + (64UL)))) { goto b590; }
+ if (!(*(u *)((v_d) + (72UL)))) { goto b590; }
#line 2030 "cc1.om"
-b589: if (!(*(u *)((*(u *)((v_d) + (80UL))) + (16UL)))) { goto b594; }
+b589: if (!(*(u *)((*(u *)((v_d) + (88UL))) + (16UL)))) { goto b594; }
#line 2030 "cc1.om"
b593: v1338 = 0UL;
#line 2030 "cc1.om"
@@ -11013,7 +11018,7 @@ b587: v1339 = (u)my_fixup_label;
#line 2031 "cc1.om"
v1340 = *(u *)((v_c) + (48UL));
#line 2031 "cc1.om"
- v1341 = *(u *)((v_d) + (80UL));
+ v1341 = *(u *)((v_d) + (88UL));
#line 2031 "cc1.om"
v1342 = ((u (*)())(v1339))(v1340, v1341);
#line 2032 "cc1.om"
@@ -11021,9 +11026,9 @@ b596: v1343 = (u)my_add_symbol;
#line 2032 "cc1.om"
v1344 = *(u *)((v_c) + (48UL));
#line 2032 "cc1.om"
- v1345 = *(u *)(v_d);
+ v1345 = *(u *)((v_d) + (32UL));
#line 2032 "cc1.om"
- v1346 = *(u *)((v_d) + (80UL));
+ v1346 = *(u *)((v_d) + (88UL));
#line 2032 "cc1.om"
v1347 = ((u (*)())(v1343))(v1344, v1345, v1346);
#line 2033 "cc1.om"
@@ -11055,9 +11060,9 @@ b586: v1355 = (u)my_find;
#line 2037 "cc1.om"
b600: v_d = v1360;
#line 2038 "cc1.om"
- if (!(*(u *)((v_d) + (64UL)))) { goto b605; }
+ if (!(*(u *)((v_d) + (72UL)))) { goto b605; }
#line 2038 "cc1.om"
-b604: if (!(*(u *)((*(u *)((v_d) + (80UL))) + (16UL)))) { goto b609; }
+b604: if (!(*(u *)((*(u *)((v_d) + (88UL))) + (16UL)))) { goto b609; }
#line 2038 "cc1.om"
b608: v1362 = 0UL;
#line 2038 "cc1.om"
@@ -11075,7 +11080,7 @@ b602: v1363 = (u)my_fixup_label;
#line 2039 "cc1.om"
v1364 = *(u *)((v_c) + (48UL));
#line 2039 "cc1.om"
- v1365 = *(u *)((v_d) + (80UL));
+ v1365 = *(u *)((v_d) + (88UL));
#line 2039 "cc1.om"
v1366 = ((u (*)())(v1363))(v1364, v1365);
#line 2040 "cc1.om"
@@ -11083,9 +11088,9 @@ b611: v1367 = (u)my_add_symbol;
#line 2040 "cc1.om"
v1368 = *(u *)((v_c) + (48UL));
#line 2040 "cc1.om"
- v1369 = *(u *)(v_d);
+ v1369 = *(u *)((v_d) + (32UL));
#line 2040 "cc1.om"
- v1370 = *(u *)((v_d) + (80UL));
+ v1370 = *(u *)((v_d) + (88UL));
#line 2040 "cc1.om"
v1371 = ((u (*)())(v1367))(v1368, v1369, v1370);
#line 2041 "cc1.om"
@@ -11155,9 +11160,9 @@ b601: v1398 = (u)my_find;
#line 2047 "cc1.om"
b617: v_d = v1403;
#line 2048 "cc1.om"
- if (!(*(u *)((v_d) + (64UL)))) { goto b622; }
+ if (!(*(u *)((v_d) + (72UL)))) { goto b622; }
#line 2048 "cc1.om"
-b621: if (!(*(u *)((*(u *)((v_d) + (80UL))) + (16UL)))) { goto b626; }
+b621: if (!(*(u *)((*(u *)((v_d) + (88UL))) + (16UL)))) { goto b626; }
#line 2048 "cc1.om"
b625: v1405 = 0UL;
#line 2048 "cc1.om"
@@ -11175,7 +11180,7 @@ b619: v1406 = (u)my_fixup_label;
#line 2049 "cc1.om"
v1407 = *(u *)((v_c) + (48UL));
#line 2049 "cc1.om"
- v1408 = *(u *)((v_d) + (80UL));
+ v1408 = *(u *)((v_d) + (88UL));
#line 2049 "cc1.om"
v1409 = ((u (*)())(v1406))(v1407, v1408);
#line 2050 "cc1.om"
@@ -11183,9 +11188,9 @@ b628: v1410 = (u)my_add_symbol;
#line 2050 "cc1.om"
v1411 = *(u *)((v_c) + (48UL));
#line 2050 "cc1.om"
- v1412 = *(u *)(v_d);
+ v1412 = *(u *)((v_d) + (32UL));
#line 2050 "cc1.om"
- v1413 = *(u *)((v_d) + (80UL));
+ v1413 = *(u *)((v_d) + (88UL));
#line 2050 "cc1.om"
v1414 = ((u (*)())(v1410))(v1411, v1412, v1413);
#line 2051 "cc1.om"
@@ -11233,9 +11238,9 @@ b618: v1428 = (u)my_find;
#line 2057 "cc1.om"
b632: v_d = v1433;
#line 2058 "cc1.om"
- if (!(*(u *)((v_d) + (64UL)))) { goto b637; }
+ if (!(*(u *)((v_d) + (72UL)))) { goto b637; }
#line 2058 "cc1.om"
-b636: if (!(*(u *)((*(u *)((v_d) + (80UL))) + (16UL)))) { goto b641; }
+b636: if (!(*(u *)((*(u *)((v_d) + (88UL))) + (16UL)))) { goto b641; }
#line 2058 "cc1.om"
b640: v1435 = 0UL;
#line 2058 "cc1.om"
@@ -11253,7 +11258,7 @@ b634: v1436 = (u)my_fixup_label;
#line 2059 "cc1.om"
v1437 = *(u *)((v_c) + (48UL));
#line 2059 "cc1.om"
- v1438 = *(u *)((v_d) + (80UL));
+ v1438 = *(u *)((v_d) + (88UL));
#line 2059 "cc1.om"
v1439 = ((u (*)())(v1436))(v1437, v1438);
#line 2060 "cc1.om"
@@ -11261,9 +11266,9 @@ b643: v1440 = (u)my_add_symbol;
#line 2060 "cc1.om"
v1441 = *(u *)((v_c) + (48UL));
#line 2060 "cc1.om"
- v1442 = *(u *)(v_d);
+ v1442 = *(u *)((v_d) + (32UL));
#line 2060 "cc1.om"
- v1443 = *(u *)((v_d) + (80UL));
+ v1443 = *(u *)((v_d) + (88UL));
#line 2060 "cc1.om"
v1444 = ((u (*)())(v1440))(v1441, v1442, v1443);
#line 2061 "cc1.om"
@@ -11311,9 +11316,9 @@ b633: v1458 = (u)my_find;
#line 2067 "cc1.om"
b647: v_d = v1463;
#line 2068 "cc1.om"
- if (!(*(u *)((v_d) + (64UL)))) { goto b652; }
+ if (!(*(u *)((v_d) + (72UL)))) { goto b652; }
#line 2068 "cc1.om"
-b651: if (!(*(u *)((*(u *)((v_d) + (80UL))) + (16UL)))) { goto b656; }
+b651: if (!(*(u *)((*(u *)((v_d) + (88UL))) + (16UL)))) { goto b656; }
#line 2068 "cc1.om"
b655: v1465 = 0UL;
#line 2068 "cc1.om"
@@ -11331,7 +11336,7 @@ b649: v1466 = (u)my_fixup_label;
#line 2069 "cc1.om"
v1467 = *(u *)((v_c) + (48UL));
#line 2069 "cc1.om"
- v1468 = *(u *)((v_d) + (80UL));
+ v1468 = *(u *)((v_d) + (88UL));
#line 2069 "cc1.om"
v1469 = ((u (*)())(v1466))(v1467, v1468);
#line 2070 "cc1.om"
@@ -11339,9 +11344,9 @@ b658: v1470 = (u)my_add_symbol;
#line 2070 "cc1.om"
v1471 = *(u *)((v_c) + (48UL));
#line 2070 "cc1.om"
- v1472 = *(u *)(v_d);
+ v1472 = *(u *)((v_d) + (32UL));
#line 2070 "cc1.om"
- v1473 = *(u *)((v_d) + (80UL));
+ v1473 = *(u *)((v_d) + (88UL));
#line 2070 "cc1.om"
v1474 = ((u (*)())(v1470))(v1471, v1472, v1473);
#line 2071 "cc1.om"
@@ -11401,9 +11406,9 @@ b648: v1494 = (u)my_find;
#line 2078 "cc1.om"
b663: v_d = v1499;
#line 2079 "cc1.om"
- if (!(*(u *)((v_d) + (64UL)))) { goto b668; }
+ if (!(*(u *)((v_d) + (72UL)))) { goto b668; }
#line 2079 "cc1.om"
-b667: if (!(*(u *)((*(u *)((v_d) + (80UL))) + (16UL)))) { goto b672; }
+b667: if (!(*(u *)((*(u *)((v_d) + (88UL))) + (16UL)))) { goto b672; }
#line 2079 "cc1.om"
b671: v1501 = 0UL;
#line 2079 "cc1.om"
@@ -11421,7 +11426,7 @@ b665: v1502 = (u)my_fixup_label;
#line 2080 "cc1.om"
v1503 = *(u *)((v_c) + (48UL));
#line 2080 "cc1.om"
- v1504 = *(u *)((v_d) + (80UL));
+ v1504 = *(u *)((v_d) + (88UL));
#line 2080 "cc1.om"
v1505 = ((u (*)())(v1502))(v1503, v1504);
#line 2081 "cc1.om"
@@ -11429,9 +11434,9 @@ b674: v1506 = (u)my_add_symbol;
#line 2081 "cc1.om"
v1507 = *(u *)((v_c) + (48UL));
#line 2081 "cc1.om"
- v1508 = *(u *)(v_d);
+ v1508 = *(u *)((v_d) + (32UL));
#line 2081 "cc1.om"
- v1509 = *(u *)((v_d) + (80UL));
+ v1509 = *(u *)((v_d) + (88UL));
#line 2081 "cc1.om"
v1510 = ((u (*)())(v1506))(v1507, v1508, v1509);
#line 2082 "cc1.om"
@@ -11479,9 +11484,9 @@ b664: v1524 = (u)my_find;
#line 2088 "cc1.om"
b678: v_d = v1529;
#line 2089 "cc1.om"
- if (!(*(u *)((v_d) + (64UL)))) { goto b683; }
+ if (!(*(u *)((v_d) + (72UL)))) { goto b683; }
#line 2089 "cc1.om"
-b682: if (!(*(u *)((*(u *)((v_d) + (80UL))) + (16UL)))) { goto b687; }
+b682: if (!(*(u *)((*(u *)((v_d) + (88UL))) + (16UL)))) { goto b687; }
#line 2089 "cc1.om"
b686: v1531 = 0UL;
#line 2089 "cc1.om"
@@ -11499,7 +11504,7 @@ b680: v1532 = (u)my_fixup_label;
#line 2090 "cc1.om"
v1533 = *(u *)((v_c) + (48UL));
#line 2090 "cc1.om"
- v1534 = *(u *)((v_d) + (80UL));
+ v1534 = *(u *)((v_d) + (88UL));
#line 2090 "cc1.om"
v1535 = ((u (*)())(v1532))(v1533, v1534);
#line 2091 "cc1.om"
@@ -11507,9 +11512,9 @@ b689: v1536 = (u)my_add_symbol;
#line 2091 "cc1.om"
v1537 = *(u *)((v_c) + (48UL));
#line 2091 "cc1.om"
- v1538 = *(u *)(v_d);
+ v1538 = *(u *)((v_d) + (32UL));
#line 2091 "cc1.om"
- v1539 = *(u *)((v_d) + (80UL));
+ v1539 = *(u *)((v_d) + (88UL));
#line 2091 "cc1.om"
v1540 = ((u (*)())(v1536))(v1537, v1538, v1539);
#line 2092 "cc1.om"
@@ -11545,9 +11550,9 @@ b679: v1550 = (u)my_find;
#line 2096 "cc1.om"
b693: v_d = v1555;
#line 2097 "cc1.om"
- if (!(*(u *)((v_d) + (64UL)))) { goto b698; }
+ if (!(*(u *)((v_d) + (72UL)))) { goto b698; }
#line 2097 "cc1.om"
-b697: if (!(*(u *)((*(u *)((v_d) + (80UL))) + (16UL)))) { goto b702; }
+b697: if (!(*(u *)((*(u *)((v_d) + (88UL))) + (16UL)))) { goto b702; }
#line 2097 "cc1.om"
b701: v1557 = 0UL;
#line 2097 "cc1.om"
@@ -11565,7 +11570,7 @@ b695: v1558 = (u)my_fixup_label;
#line 2098 "cc1.om"
v1559 = *(u *)((v_c) + (48UL));
#line 2098 "cc1.om"
- v1560 = *(u *)((v_d) + (80UL));
+ v1560 = *(u *)((v_d) + (88UL));
#line 2098 "cc1.om"
v1561 = ((u (*)())(v1558))(v1559, v1560);
#line 2099 "cc1.om"
@@ -11573,9 +11578,9 @@ b704: v1562 = (u)my_add_symbol;
#line 2099 "cc1.om"
v1563 = *(u *)((v_c) + (48UL));
#line 2099 "cc1.om"
- v1564 = *(u *)(v_d);
+ v1564 = *(u *)((v_d) + (32UL));
#line 2099 "cc1.om"
- v1565 = *(u *)((v_d) + (80UL));
+ v1565 = *(u *)((v_d) + (88UL));
#line 2099 "cc1.om"
v1566 = ((u (*)())(v1562))(v1563, v1564, v1565);
#line 2102 "cc1.om"
@@ -14152,9 +14157,9 @@ b107: v379 = (u)my_find;
#line 1628 "cc1.om"
b108: v_d = v384;
#line 1629 "cc1.om"
- if (!(*(u *)((v_d) + (64UL)))) { goto b113; }
+ if (!(*(u *)((v_d) + (72UL)))) { goto b113; }
#line 1629 "cc1.om"
-b112: if (!(*(u *)((*(u *)((v_d) + (80UL))) + (16UL)))) { goto b113; }
+b112: if (!(*(u *)((*(u *)((v_d) + (88UL))) + (16UL)))) { goto b113; }
#line 1629 "cc1.om"
b114: v385 = 1UL;
#line 1629 "cc1.om"
@@ -14168,7 +14173,7 @@ b110: v386 = (u)my_as_jmp;
#line 1630 "cc1.om"
v388 = 232UL;
#line 1630 "cc1.om"
- v389 = *(u *)((v_d) + (80UL));
+ v389 = *(u *)((v_d) + (88UL));
#line 1630 "cc1.om"
v390 = ((u (*)())(v386))(v387, v388, v389);
#line 1634 "cc1.om"
@@ -18927,7 +18932,7 @@ b17: v20 = (u)my_as_modra;
#line 1424 "cc1.om"
v23 = 4UL;
#line 1424 "cc1.om"
- v24 = *(u *)((v_v) + (184UL));
+ v24 = *(u *)((v_v) + (192UL));
#line 1424 "cc1.om"
v25 = ((u (*)())(v20))(v21, v22, v23, v24);
#line 1426 "cc1.om"
@@ -18983,7 +18988,7 @@ b35: v43 = (u)my_as_modra;
#line 1433 "cc1.om"
v46 = 4UL;
#line 1433 "cc1.om"
- v47 = *(u *)((v_v) + (184UL));
+ v47 = *(u *)((v_v) + (192UL));
#line 1433 "cc1.om"
v48 = ((u (*)())(v43))(v44, v45, v46, v47);
#line 1435 "cc1.om"
@@ -19037,7 +19042,7 @@ b38: v62 = (u)my_as_modrm;
#line 1441 "cc1.om"
v68 = 0UL;
#line 1441 "cc1.om"
- v69 = *(u *)((v_v) + (184UL));
+ v69 = *(u *)((v_v) + (192UL));
#line 1441 "cc1.om"
v70 = ((u (*)())(v62))(v63, v64, v65, v66, v67, v68, v69);
#line 1442 "cc1.om"
@@ -19519,7 +19524,7 @@ b95: v301 = (u)my_as_modra;
#line 1481 "cc1.om"
v304 = 0UL;
#line 1481 "cc1.om"
- v305 = *(u *)((v_v) + (184UL));
+ v305 = *(u *)((v_v) + (192UL));
#line 1481 "cc1.om"
v306 = ((u (*)())(v301))(v302, v303, v304, v305);
#line 1482 "cc1.om"
@@ -19623,9 +19628,9 @@ b103: v350 = (u)my_find;
#line 1494 "cc1.om"
b104: v_d = v355;
#line 1495 "cc1.om"
- if (!(*(u *)((v_d) + (64UL)))) { goto b109; }
+ if (!(*(u *)((v_d) + (72UL)))) { goto b109; }
#line 1495 "cc1.om"
-b108: if (!(*(u *)((*(u *)((v_d) + (80UL))) + (16UL)))) { goto b109; }
+b108: if (!(*(u *)((*(u *)((v_d) + (88UL))) + (16UL)))) { goto b109; }
#line 1495 "cc1.om"
b110: v356 = 1UL;
#line 1495 "cc1.om"
@@ -19639,7 +19644,7 @@ b106: v357 = (u)my_as_jmp;
#line 1496 "cc1.om"
v359 = 232UL;
#line 1496 "cc1.om"
- v360 = *(u *)((v_d) + (80UL));
+ v360 = *(u *)((v_d) + (88UL));
#line 1496 "cc1.om"
v361 = ((u (*)())(v357))(v358, v359, v360);
#line 1499 "cc1.om"
@@ -19979,7 +19984,7 @@ b109: v356 = 0UL;
#line 1495 "cc1.om"
goto b111;
#line 1475 "cc1.om"
-b84: if (!(*(u *)((v_v) + (168UL)))) { goto b92; }
+b84: if (!(*(u *)((v_v) + (176UL)))) { goto b92; }
#line 1475 "cc1.om"
b91: v292 = 0UL;
#line 1475 "cc1.om"
@@ -20003,7 +20008,7 @@ b88: v291 = 1UL;
#line 1475 "cc1.om"
goto b89;
#line 1436 "cc1.om"
-b42: if (!(*(u *)((v_v) + (168UL)))) { goto b50; }
+b42: if (!(*(u *)((v_v) + (176UL)))) { goto b50; }
#line 1436 "cc1.om"
b49: v57 = 0UL;
#line 1436 "cc1.om"
@@ -20027,7 +20032,7 @@ b46: v56 = 1UL;
#line 1436 "cc1.om"
goto b47;
#line 1427 "cc1.om"
-b24: if (!(*(u *)((v_v) + (168UL)))) { goto b32; }
+b24: if (!(*(u *)((v_v) + (176UL)))) { goto b32; }
#line 1427 "cc1.om"
b31: v34 = 0UL;
#line 1427 "cc1.om"
@@ -20051,7 +20056,7 @@ b28: v33 = 1UL;
#line 1427 "cc1.om"
goto b29;
#line 1418 "cc1.om"
-b6: if (!(*(u *)((v_v) + (168UL)))) { goto b14; }
+b6: if (!(*(u *)((v_v) + (176UL)))) { goto b14; }
#line 1418 "cc1.om"
b13: v11 = 0UL;
#line 1418 "cc1.om"
@@ -21002,7 +21007,7 @@ b34: v_v = v59;
#line 482 "ir.om"
if (!(v_v)) { goto b39; }
#line 482 "ir.om"
-b38: if (!(*(u *)((v_v) + (200UL)))) { goto b39; }
+b38: if (!(*(u *)((v_v) + (208UL)))) { goto b39; }
#line 482 "ir.om"
b40: v60 = 1UL;
#line 482 "ir.om"
@@ -21014,7 +21019,7 @@ b36: v61 = (u)my_mkirconst;
#line 483 "ir.om"
v62 = v_ic;
#line 483 "ir.om"
- v63 = *(u *)((v_v) + (208UL));
+ v63 = *(u *)((v_v) + (216UL));
#line 483 "ir.om"
v64 = ((u (*)())(v61))(v62, v63);
#line 483 "ir.om"
@@ -21054,7 +21059,7 @@ b47: v_o = v74;
#line 496 "ir.om"
b44: if (!(v_v)) { goto b52; }
#line 496 "ir.om"
-b51: if (!(*(u *)((v_v) + (64UL)))) { goto b52; }
+b51: if (!(*(u *)((v_v) + (72UL)))) { goto b52; }
#line 496 "ir.om"
b53: v75 = 1UL;
#line 496 "ir.om"
@@ -21110,7 +21115,7 @@ b62: v_b = v87;
#line 506 "ir.om"
v89 = *(u *)(v_ic);
#line 506 "ir.om"
- v90 = *(u *)(*(u *)((*(u *)((*(u *)((*(u *)((v_n) + (8UL))) + (64UL))) + (16UL))) + (8UL)));
+ v90 = *(u *)((*(u *)((*(u *)((*(u *)((*(u *)((v_n) + (8UL))) + (64UL))) + (16UL))) + (8UL))) + (32UL));
#line 506 "ir.om"
v91 = *(u *)((*(u *)((v_n) + (16UL))) + (56UL));
#line 506 "ir.om"
@@ -21126,7 +21131,7 @@ b59: v113 = (u)my_mkirconst;
#line 519 "ir.om"
v114 = v_ic;
#line 519 "ir.om"
- v115 = *(u *)((v_v) + (184UL));
+ v115 = *(u *)((v_v) + (192UL));
#line 519 "ir.om"
v116 = ((u (*)())(v113))(v114, v115);
#line 519 "ir.om"
@@ -21198,7 +21203,7 @@ b65: v107 = (u)my_find;
#line 517 "ir.om"
v108 = *(u *)(v_ic);
#line 517 "ir.om"
- v109 = *(u *)(*(u *)((*(u *)((*(u *)((v_n) + (8UL))) + (64UL))) + (8UL)));
+ v109 = *(u *)((*(u *)((*(u *)((*(u *)((v_n) + (8UL))) + (64UL))) + (8UL))) + (32UL));
#line 517 "ir.om"
v110 = *(u *)((*(u *)((v_n) + (16UL))) + (56UL));
#line 517 "ir.om"
@@ -22938,9 +22943,9 @@ u my_fillpos(u v_c, u v_n) {
b0: return 0UL;
}
u my_find(u v_c, u v_name, u v_member_name, u v_make) {
+ u v_link = 0;
u v_p = 0;
u v_d = 0;
- u v_link = 0;
u v_dir = 0;
u v8 = 0;
u v9 = 0;
@@ -22967,233 +22972,243 @@ u my_find(u v_c, u v_name, u v_member_name, u v_make) {
u v30 = 0;
u v31 = 0;
u v32 = 0;
-#line 51 "decl.om"
+ u v33 = 0;
+ u v34 = 0;
+ u v35 = 0;
+ u v36 = 0;
+ u v37 = 0;
+ u v38 = 0;
+#line 50 "decl.om"
b0: v_p = 0UL;
-#line 52 "decl.om"
+#line 51 "decl.om"
v_link = (v_c) + (56UL);
-#line 53 "decl.om"
+#line 52 "decl.om"
goto b1;
-#line 54 "decl.om"
+#line 53 "decl.om"
b1: v_d = *(u *)(v_link);
-#line 55 "decl.om"
+#line 54 "decl.om"
if (!(v_d)) { goto b7; }
-#line 55 "decl.om"
+#line 54 "decl.om"
b6: v8 = 0UL;
-#line 55 "decl.om"
+#line 54 "decl.om"
goto b8;
-#line 55 "decl.om"
+#line 54 "decl.om"
b8: if (!(v8)) { goto b3; }
-#line 85 "decl.om"
+#line 84 "decl.om"
b2: if (!(v_make)) { goto b46; }
-#line 85 "decl.om"
+#line 84 "decl.om"
b45: v22 = 0UL;
-#line 85 "decl.om"
+#line 84 "decl.om"
goto b47;
-#line 85 "decl.om"
+#line 84 "decl.om"
b47: if (!(v22)) { goto b42; }
-#line 86 "decl.om"
+#line 85 "decl.om"
b43: return 0UL;
-#line 89 "decl.om"
+#line 88 "decl.om"
b42: v23 = (u)my_alloc;
-#line 89 "decl.om"
+#line 88 "decl.om"
v24 = *(u *)(v_c);
-#line 89 "decl.om"
- v25 = 272UL;
-#line 89 "decl.om"
+#line 88 "decl.om"
+ v25 = 280UL;
+#line 88 "decl.om"
v26 = ((u (*)())(v23))(v24, v25);
-#line 89 "decl.om"
+#line 88 "decl.om"
b48: v_d = v26;
+#line 90 "decl.om"
+ *(u *)((v_d) + (32UL)) = v_name;
#line 91 "decl.om"
- *(u *)(v_d) = v_name;
-#line 92 "decl.om"
- *(u *)((v_d) + (8UL)) = v_member_name;
-#line 94 "decl.om"
- *(u *)((v_d) + (16UL)) = v_p;
+ *(u *)((v_d) + (40UL)) = v_member_name;
+#line 93 "decl.om"
+ v27 = (u)my_rb_link;
+#line 93 "decl.om"
+ v28 = (v_c) + (56UL);
+#line 93 "decl.om"
+ v29 = v_link;
+#line 93 "decl.om"
+ v30 = v_p;
+#line 93 "decl.om"
+ v31 = v_d;
+#line 93 "decl.om"
+ v32 = ((u (*)())(v27))(v28, v29, v30, v31);
#line 95 "decl.om"
- *(u *)((v_d) + (24UL)) = 0UL;
-#line 96 "decl.om"
- *(u *)((v_d) + (32UL)) = 0UL;
+b49: *(u *)((v_d) + (48UL)) = 0UL;
+#line 97 "decl.om"
+ *(u *)((v_d) + (72UL)) = 0UL;
#line 98 "decl.om"
- *(u *)((v_d) + (40UL)) = 0UL;
+ *(u *)((v_d) + (80UL)) = 0UL;
+#line 99 "decl.om"
+ v33 = (u)my_mklabel;
+#line 99 "decl.om"
+ v34 = *(u *)((v_c) + (48UL));
+#line 99 "decl.om"
+ v35 = ((u (*)())(v33))(v34);
+#line 99 "decl.om"
+b50: *(u *)((v_d) + (88UL)) = v35;
#line 100 "decl.om"
- *(u *)((v_d) + (64UL)) = 0UL;
+ *(u *)((v_d) + (96UL)) = 0UL;
#line 101 "decl.om"
- *(u *)((v_d) + (72UL)) = 0UL;
-#line 102 "decl.om"
- v27 = (u)my_mklabel;
-#line 102 "decl.om"
- v28 = *(u *)((v_c) + (48UL));
-#line 102 "decl.om"
- v29 = ((u (*)())(v27))(v28);
-#line 102 "decl.om"
-b49: *(u *)((v_d) + (80UL)) = v29;
+ *(u *)((v_d) + (112UL)) = 0UL;
#line 103 "decl.om"
- *(u *)((v_d) + (88UL)) = 0UL;
-#line 104 "decl.om"
- *(u *)((v_d) + (104UL)) = 0UL;
-#line 106 "decl.om"
- *(u *)((v_d) + (128UL)) = 0UL;
-#line 107 "decl.om"
*(u *)((v_d) + (136UL)) = 0UL;
-#line 108 "decl.om"
+#line 104 "decl.om"
*(u *)((v_d) + (144UL)) = 0UL;
-#line 109 "decl.om"
+#line 105 "decl.om"
*(u *)((v_d) + (152UL)) = 0UL;
-#line 111 "decl.om"
- *(u *)((v_d) + (168UL)) = 0UL;
-#line 112 "decl.om"
+#line 106 "decl.om"
+ *(u *)((v_d) + (160UL)) = 0UL;
+#line 108 "decl.om"
*(u *)((v_d) + (176UL)) = 0UL;
-#line 113 "decl.om"
+#line 109 "decl.om"
*(u *)((v_d) + (184UL)) = 0UL;
-#line 114 "decl.om"
+#line 110 "decl.om"
*(u *)((v_d) + (192UL)) = 0UL;
-#line 116 "decl.om"
+#line 111 "decl.om"
*(u *)((v_d) + (200UL)) = 0UL;
-#line 117 "decl.om"
+#line 113 "decl.om"
*(u *)((v_d) + (208UL)) = 0UL;
-#line 118 "decl.om"
+#line 114 "decl.om"
*(u *)((v_d) + (216UL)) = 0UL;
-#line 120 "decl.om"
+#line 115 "decl.om"
*(u *)((v_d) + (224UL)) = 0UL;
-#line 121 "decl.om"
+#line 117 "decl.om"
*(u *)((v_d) + (232UL)) = 0UL;
-#line 122 "decl.om"
+#line 118 "decl.om"
*(u *)((v_d) + (240UL)) = 0UL;
-#line 123 "decl.om"
+#line 119 "decl.om"
*(u *)((v_d) + (248UL)) = 0UL;
-#line 125 "decl.om"
+#line 120 "decl.om"
*(u *)((v_d) + (256UL)) = 0UL;
-#line 126 "decl.om"
- v30 = (u)my_mklabel;
-#line 126 "decl.om"
- v31 = *(u *)((v_c) + (48UL));
-#line 126 "decl.om"
- v32 = ((u (*)())(v30))(v31);
-#line 126 "decl.om"
-b50: *(u *)((v_d) + (264UL)) = v32;
-#line 128 "decl.om"
- *(u *)(v_link) = v_d;
-#line 130 "decl.om"
+#line 122 "decl.om"
+ *(u *)((v_d) + (264UL)) = 0UL;
+#line 123 "decl.om"
+ v36 = (u)my_mklabel;
+#line 123 "decl.om"
+ v37 = *(u *)((v_c) + (48UL));
+#line 123 "decl.om"
+ v38 = ((u (*)())(v36))(v37);
+#line 123 "decl.om"
+b51: *(u *)((v_d) + (272UL)) = v38;
+#line 125 "decl.om"
return v_d;
-#line 85 "decl.om"
+#line 84 "decl.om"
b46: v22 = 1UL;
-#line 85 "decl.om"
+#line 84 "decl.om"
goto b47;
-#line 59 "decl.om"
+#line 58 "decl.om"
b3: v9 = (u)my_strcmp;
-#line 59 "decl.om"
+#line 58 "decl.om"
v10 = v_name;
-#line 59 "decl.om"
- v11 = *(u *)(v_d);
-#line 59 "decl.om"
+#line 58 "decl.om"
+ v11 = *(u *)((v_d) + (32UL));
+#line 58 "decl.om"
v12 = ((u (*)())(v9))(v10, v11);
-#line 59 "decl.om"
+#line 58 "decl.om"
b9: v_dir = v12;
-#line 61 "decl.om"
+#line 60 "decl.om"
if (!((u)(((s)(v_dir)) == ((s)(0UL))))) { goto b10; }
-#line 62 "decl.om"
+#line 61 "decl.om"
b11: if (!(v_member_name)) { goto b21; }
-#line 62 "decl.om"
+#line 61 "decl.om"
b20: v14 = 0UL;
-#line 62 "decl.om"
+#line 61 "decl.om"
goto b22;
-#line 62 "decl.om"
+#line 61 "decl.om"
b22: if (!(v14)) { goto b17; }
-#line 62 "decl.om"
-b16: if (!(*(u *)((v_d) + (8UL)))) { goto b24; }
-#line 62 "decl.om"
+#line 61 "decl.om"
+b16: if (!(*(u *)((v_d) + (40UL)))) { goto b24; }
+#line 61 "decl.om"
b23: v15 = 0UL;
-#line 62 "decl.om"
+#line 61 "decl.om"
goto b25;
-#line 62 "decl.om"
+#line 61 "decl.om"
b25: if (!(v15)) { goto b17; }
-#line 62 "decl.om"
+#line 61 "decl.om"
b18: v13 = 1UL;
-#line 62 "decl.om"
+#line 61 "decl.om"
goto b19;
-#line 62 "decl.om"
+#line 61 "decl.om"
b19: if (!(v13)) { goto b15; }
-#line 63 "decl.om"
+#line 62 "decl.om"
b14: v_dir = 0UL;
-#line 63 "decl.om"
+#line 62 "decl.om"
goto b10;
-#line 73 "decl.om"
+#line 72 "decl.om"
b10: if (!((u)(((s)(v_dir)) < ((s)(0UL))))) { goto b39; }
+#line 73 "decl.om"
+b38: v_link = (v_d) + (16UL);
+#line 74 "decl.om"
+ v_p = v_d;
#line 74 "decl.om"
-b38: v_p = v_d;
-#line 75 "decl.om"
- v_link = (v_d) + (24UL);
-#line 75 "decl.om"
goto b1;
-#line 76 "decl.om"
+#line 75 "decl.om"
b39: if (!((u)(((s)(v_dir)) > ((s)(0UL))))) { goto b41; }
+#line 76 "decl.om"
+b40: v_link = (v_d) + (24UL);
+#line 77 "decl.om"
+ v_p = v_d;
#line 77 "decl.om"
-b40: v_p = v_d;
-#line 78 "decl.om"
- v_link = (v_d) + (32UL);
-#line 78 "decl.om"
goto b1;
-#line 80 "decl.om"
+#line 79 "decl.om"
b41: return v_d;
-#line 64 "decl.om"
+#line 63 "decl.om"
b15: if (!(v_member_name)) { goto b29; }
-#line 64 "decl.om"
+#line 63 "decl.om"
b28: v16 = 0UL;
-#line 64 "decl.om"
+#line 63 "decl.om"
goto b30;
-#line 64 "decl.om"
+#line 63 "decl.om"
b30: if (!(v16)) { goto b27; }
-#line 65 "decl.om"
+#line 64 "decl.om"
b26: v_dir = -1UL;
-#line 65 "decl.om"
+#line 64 "decl.om"
goto b10;
-#line 66 "decl.om"
-b27: if (!(*(u *)((v_d) + (8UL)))) { goto b34; }
-#line 66 "decl.om"
+#line 65 "decl.om"
+b27: if (!(*(u *)((v_d) + (40UL)))) { goto b34; }
+#line 65 "decl.om"
b33: v17 = 0UL;
-#line 66 "decl.om"
+#line 65 "decl.om"
goto b35;
-#line 66 "decl.om"
+#line 65 "decl.om"
b35: if (!(v17)) { goto b32; }
-#line 67 "decl.om"
+#line 66 "decl.om"
b31: v_dir = 1UL;
-#line 67 "decl.om"
+#line 66 "decl.om"
goto b10;
-#line 69 "decl.om"
+#line 68 "decl.om"
b32: v18 = (u)my_strcmp;
-#line 69 "decl.om"
+#line 68 "decl.om"
v19 = v_member_name;
-#line 69 "decl.om"
- v20 = *(u *)((v_d) + (8UL));
-#line 69 "decl.om"
+#line 68 "decl.om"
+ v20 = *(u *)((v_d) + (40UL));
+#line 68 "decl.om"
v21 = ((u (*)())(v18))(v19, v20);
-#line 69 "decl.om"
+#line 68 "decl.om"
b36: v_dir = v21;
-#line 69 "decl.om"
+#line 68 "decl.om"
goto b10;
-#line 66 "decl.om"
+#line 65 "decl.om"
b34: v17 = 1UL;
-#line 66 "decl.om"
+#line 65 "decl.om"
goto b35;
-#line 64 "decl.om"
+#line 63 "decl.om"
b29: v16 = 1UL;
-#line 64 "decl.om"
+#line 63 "decl.om"
goto b30;
-#line 62 "decl.om"
+#line 61 "decl.om"
b17: v13 = 0UL;
-#line 62 "decl.om"
+#line 61 "decl.om"
goto b19;
-#line 62 "decl.om"
+#line 61 "decl.om"
b24: v15 = 1UL;
-#line 62 "decl.om"
+#line 61 "decl.om"
goto b25;
-#line 62 "decl.om"
+#line 61 "decl.om"
b21: v14 = 1UL;
-#line 62 "decl.om"
+#line 61 "decl.om"
goto b22;
-#line 55 "decl.om"
+#line 54 "decl.om"
b7: v8 = 1UL;
-#line 55 "decl.om"
+#line 54 "decl.om"
goto b8;
}
u my_find_section(u v_c, u v_name) {
@@ -23239,42 +23254,31 @@ b7: v3 = 1UL;
goto b8;
}
u my_first_decl(u v_c) {
- u v_d = 0;
+ u v1 = 0;
u v2 = 0;
u v3 = 0;
-#line 137 "decl.om"
-b0: v_d = *(u *)((v_c) + (56UL));
-#line 138 "decl.om"
- if (!(v_d)) { goto b5; }
-#line 138 "decl.om"
-b4: v2 = 0UL;
-#line 138 "decl.om"
+ u v4 = 0;
+#line 130 "decl.om"
+b0: if (!(*(u *)((v_c) + (56UL)))) { goto b5; }
+#line 130 "decl.om"
+b4: v1 = 0UL;
+#line 130 "decl.om"
goto b6;
-#line 138 "decl.om"
-b6: if (!(v2)) { goto b7; }
-#line 139 "decl.om"
+#line 130 "decl.om"
+b6: if (!(v1)) { goto b1; }
+#line 131 "decl.om"
b2: return 0UL;
-#line 143 "decl.om"
-b7: if (!(*(u *)((v_d) + (24UL)))) { goto b13; }
-#line 143 "decl.om"
-b12: v3 = 0UL;
-#line 143 "decl.om"
- goto b14;
-#line 143 "decl.om"
-b14: if (!(v3)) { goto b9; }
-#line 144 "decl.om"
-b10: return v_d;
-#line 147 "decl.om"
-b9: v_d = *(u *)((v_d) + (24UL));
-#line 147 "decl.om"
- goto b7;
-#line 143 "decl.om"
-b13: v3 = 1UL;
-#line 143 "decl.om"
- goto b14;
-#line 138 "decl.om"
-b5: v2 = 1UL;
-#line 138 "decl.om"
+#line 133 "decl.om"
+b1: v2 = (u)my_rb_first;
+#line 133 "decl.om"
+ v3 = *(u *)((v_c) + (56UL));
+#line 133 "decl.om"
+ v4 = ((u (*)())(v2))(v3);
+#line 133 "decl.om"
+b7: return v4;
+#line 130 "decl.om"
+b5: v1 = 1UL;
+#line 130 "decl.om"
goto b6;
}
u my_fixup(u v_c, u v_here, u v_delta) {
@@ -24298,7 +24302,7 @@ b33: v_name = *(u *)((*(u *)((v_n) + (8UL))) + (56UL));
#line 1306 "cc1.om"
v30 = v_c;
#line 1306 "cc1.om"
- v31 = *(u *)(v_d);
+ v31 = *(u *)((v_d) + (32UL));
#line 1306 "cc1.om"
v32 = v_name;
#line 1306 "cc1.om"
@@ -24308,7 +24312,7 @@ b33: v_name = *(u *)((*(u *)((v_n) + (8UL))) + (56UL));
#line 1306 "cc1.om"
b35: v_v = v34;
#line 1308 "cc1.om"
- if (!(*(u *)((v_v) + (256UL)))) { goto b36; }
+ if (!(*(u *)((v_v) + (264UL)))) { goto b36; }
#line 1309 "cc1.om"
b37: v35 = (u)my_cdie;
#line 1309 "cc1.om"
@@ -24318,7 +24322,7 @@ b37: v35 = (u)my_cdie;
#line 1309 "cc1.om"
v38 = ((u (*)())(v35))(v36, v37);
#line 1311 "cc1.om"
-b36: *(u *)((v_v) + (256UL)) = 1UL;
+b36: *(u *)((v_v) + (264UL)) = 1UL;
#line 1313 "cc1.om"
return v_offset;
#line 1314 "cc1.om"
@@ -24344,7 +24348,7 @@ b42: v_t = v42;
#line 1323 "cc1.om"
v44 = v_c;
#line 1323 "cc1.om"
- v45 = *(u *)(v_d);
+ v45 = *(u *)((v_d) + (32UL));
#line 1323 "cc1.om"
v46 = v_name;
#line 1323 "cc1.om"
@@ -24354,7 +24358,7 @@ b42: v_t = v42;
#line 1323 "cc1.om"
b43: v_v = v48;
#line 1325 "cc1.om"
- if (!(*(u *)((v_v) + (224UL)))) { goto b44; }
+ if (!(*(u *)((v_v) + (232UL)))) { goto b44; }
#line 1326 "cc1.om"
b45: v49 = (u)my_cdie;
#line 1326 "cc1.om"
@@ -24364,9 +24368,9 @@ b45: v49 = (u)my_cdie;
#line 1326 "cc1.om"
v52 = ((u (*)())(v49))(v50, v51);
#line 1329 "cc1.om"
-b44: *(u *)((v_v) + (232UL)) = v_t;
+b44: *(u *)((v_v) + (240UL)) = v_t;
#line 1330 "cc1.om"
- *(u *)((v_v) + (224UL)) = 1UL;
+ *(u *)((v_v) + (232UL)) = 1UL;
#line 1332 "cc1.om"
v53 = (u)my_type_sizeof;
#line 1332 "cc1.om"
@@ -24378,7 +24382,7 @@ b44: *(u *)((v_v) + (232UL)) = v_t;
#line 1332 "cc1.om"
b48: v_offset = (v_offset) + (v56);
#line 1334 "cc1.om"
- *(u *)((v_v) + (240UL)) = -(v_offset);
+ *(u *)((v_v) + (248UL)) = -(v_offset);
#line 1336 "cc1.om"
return v_offset;
#line 1277 "cc1.om"
@@ -26859,7 +26863,7 @@ u my_ircdefine(u v_c, u v_d) {
u v81 = 0;
u v82 = 0;
#line 98 "ircout.om"
-b0: v_ic = *(u *)((v_d) + (120UL));
+b0: v_ic = *(u *)((v_d) + (128UL));
#line 99 "ircout.om"
if (!(v_ic)) { goto b5; }
#line 99 "ircout.om"
@@ -27121,7 +27125,7 @@ u my_ircforward(u v_c, u v_d) {
u v10 = 0;
u v11 = 0;
#line 81 "ircout.om"
-b0: v_ic = *(u *)((v_d) + (120UL));
+b0: v_ic = *(u *)((v_d) + (128UL));
#line 82 "ircout.om"
if (!(v_ic)) { goto b5; }
#line 82 "ircout.om"
@@ -29260,9 +29264,9 @@ b32: v72 = (u)my_fflush;
#line 1 "ircout.om"
b48: return 0UL;
#line 39 "ircout.om"
-b33: if (!(*(u *)((v_d) + (104UL)))) { goto b43; }
+b33: if (!(*(u *)((v_d) + (112UL)))) { goto b43; }
#line 39 "ircout.om"
-b42: if (!(*(u *)((v_d) + (64UL)))) { goto b43; }
+b42: if (!(*(u *)((v_d) + (72UL)))) { goto b43; }
#line 39 "ircout.om"
b44: v63 = 1UL;
#line 39 "ircout.om"
@@ -29298,9 +29302,9 @@ b37: v62 = 1UL;
#line 35 "ircout.om"
goto b38;
#line 15 "ircout.om"
-b7: if (!(*(u *)((v_d) + (104UL)))) { goto b17; }
+b7: if (!(*(u *)((v_d) + (112UL)))) { goto b17; }
#line 15 "ircout.om"
-b16: if (!(*(u *)((v_d) + (64UL)))) { goto b17; }
+b16: if (!(*(u *)((v_d) + (72UL)))) { goto b17; }
#line 15 "ircout.om"
b18: v18 = 1UL;
#line 15 "ircout.om"
@@ -31777,9 +31781,9 @@ u my_layout_struct(u v_c, u v_d) {
u v28 = 0;
u v29 = 0;
#line 574 "cc1.om"
-b0: if (!(*(u *)((v_d) + (144UL)))) { goto b1; }
+b0: if (!(*(u *)((v_d) + (152UL)))) { goto b1; }
#line 575 "cc1.om"
-b2: if (!((u)(((s)(*(u *)((v_d) + (144UL)))) == ((s)(2UL))))) { goto b4; }
+b2: if (!((u)(((s)(*(u *)((v_d) + (152UL)))) == ((s)(2UL))))) { goto b4; }
#line 576 "cc1.om"
b5: v7 = (u)my_cdie;
#line 576 "cc1.om"
@@ -31791,9 +31795,9 @@ b5: v7 = (u)my_cdie;
#line 579 "cc1.om"
b4: return 0UL;
#line 582 "cc1.om"
-b1: *(u *)((v_d) + (144UL)) = 2UL;
+b1: *(u *)((v_d) + (152UL)) = 2UL;
#line 584 "cc1.om"
- v_m = *(u *)((*(u *)((v_d) + (152UL))) + (16UL));
+ v_m = *(u *)((*(u *)((v_d) + (160UL))) + (16UL));
#line 586 "cc1.om"
v_offset = 0UL;
#line 587 "cc1.om"
@@ -31807,9 +31811,9 @@ b13: v11 = 0UL;
#line 588 "cc1.om"
b15: if (!(v11)) { goto b10; }
#line 615 "cc1.om"
-b9: *(u *)((v_d) + (136UL)) = v_offset;
+b9: *(u *)((v_d) + (144UL)) = v_offset;
#line 616 "cc1.om"
- *(u *)((v_d) + (144UL)) = 1UL;
+ *(u *)((v_d) + (152UL)) = 1UL;
#line 567 "cc1.om"
return 0UL;
#line 592 "cc1.om"
@@ -31835,7 +31839,7 @@ b16: v_t = v15;
#line 599 "cc1.om"
v17 = v_c;
#line 599 "cc1.om"
- v18 = *(u *)(v_d);
+ v18 = *(u *)((v_d) + (32UL));
#line 599 "cc1.om"
v19 = v_name;
#line 599 "cc1.om"
@@ -31845,7 +31849,7 @@ b16: v_t = v15;
#line 599 "cc1.om"
b17: v_md = v21;
#line 601 "cc1.om"
- if (!(*(u *)((v_d) + (168UL)))) { goto b18; }
+ if (!(*(u *)((v_d) + (176UL)))) { goto b18; }
#line 602 "cc1.om"
b19: v22 = (u)my_cdie;
#line 602 "cc1.om"
@@ -31855,13 +31859,13 @@ b19: v22 = (u)my_cdie;
#line 602 "cc1.om"
v25 = ((u (*)())(v22))(v23, v24);
#line 605 "cc1.om"
-b18: *(u *)((v_md) + (168UL)) = 1UL;
+b18: *(u *)((v_md) + (176UL)) = 1UL;
#line 606 "cc1.om"
- *(u *)((v_md) + (176UL)) = v_t;
+ *(u *)((v_md) + (184UL)) = v_t;
#line 607 "cc1.om"
- *(u *)((v_md) + (184UL)) = v_offset;
+ *(u *)((v_md) + (192UL)) = v_offset;
#line 608 "cc1.om"
- *(u *)((v_md) + (192UL)) = v_m;
+ *(u *)((v_md) + (200UL)) = v_m;
#line 610 "cc1.om"
v26 = (u)my_type_sizeof;
#line 610 "cc1.om"
@@ -31912,9 +31916,9 @@ u my_layout_union(u v_c, u v_d) {
u v29 = 0;
u v30 = 0;
#line 627 "cc1.om"
-b0: if (!(*(u *)((v_d) + (144UL)))) { goto b1; }
+b0: if (!(*(u *)((v_d) + (152UL)))) { goto b1; }
#line 628 "cc1.om"
-b2: if (!((u)(((s)(*(u *)((v_d) + (144UL)))) == ((s)(2UL))))) { goto b4; }
+b2: if (!((u)(((s)(*(u *)((v_d) + (152UL)))) == ((s)(2UL))))) { goto b4; }
#line 629 "cc1.om"
b5: v8 = (u)my_cdie;
#line 629 "cc1.om"
@@ -31926,9 +31930,9 @@ b5: v8 = (u)my_cdie;
#line 632 "cc1.om"
b4: return 0UL;
#line 635 "cc1.om"
-b1: *(u *)((v_d) + (144UL)) = 2UL;
+b1: *(u *)((v_d) + (152UL)) = 2UL;
#line 637 "cc1.om"
- v_m = *(u *)((*(u *)((v_d) + (152UL))) + (16UL));
+ v_m = *(u *)((*(u *)((v_d) + (160UL))) + (16UL));
#line 639 "cc1.om"
v_size = 0UL;
#line 640 "cc1.om"
@@ -31942,9 +31946,9 @@ b13: v12 = 0UL;
#line 641 "cc1.om"
b15: if (!(v12)) { goto b10; }
#line 671 "cc1.om"
-b9: *(u *)((v_d) + (136UL)) = v_size;
+b9: *(u *)((v_d) + (144UL)) = v_size;
#line 672 "cc1.om"
- *(u *)((v_d) + (144UL)) = 1UL;
+ *(u *)((v_d) + (152UL)) = 1UL;
#line 619 "cc1.om"
return 0UL;
#line 645 "cc1.om"
@@ -31970,7 +31974,7 @@ b16: v_t = v16;
#line 652 "cc1.om"
v18 = v_c;
#line 652 "cc1.om"
- v19 = *(u *)(v_d);
+ v19 = *(u *)((v_d) + (32UL));
#line 652 "cc1.om"
v20 = v_name;
#line 652 "cc1.om"
@@ -31980,7 +31984,7 @@ b16: v_t = v16;
#line 652 "cc1.om"
b17: v_md = v22;
#line 654 "cc1.om"
- if (!(*(u *)((v_d) + (168UL)))) { goto b18; }
+ if (!(*(u *)((v_d) + (176UL)))) { goto b18; }
#line 655 "cc1.om"
b19: v23 = (u)my_cdie;
#line 655 "cc1.om"
@@ -31990,13 +31994,13 @@ b19: v23 = (u)my_cdie;
#line 655 "cc1.om"
v26 = ((u (*)())(v23))(v24, v25);
#line 658 "cc1.om"
-b18: *(u *)((v_md) + (168UL)) = 1UL;
+b18: *(u *)((v_md) + (176UL)) = 1UL;
#line 659 "cc1.om"
- *(u *)((v_md) + (176UL)) = v_t;
+ *(u *)((v_md) + (184UL)) = v_t;
#line 660 "cc1.om"
- *(u *)((v_md) + (184UL)) = 0UL;
+ *(u *)((v_md) + (192UL)) = 0UL;
#line 661 "cc1.om"
- *(u *)((v_md) + (192UL)) = v_m;
+ *(u *)((v_md) + (200UL)) = v_m;
#line 663 "cc1.om"
v27 = (u)my_type_sizeof;
#line 663 "cc1.om"
@@ -33070,7 +33074,7 @@ b21: v_v = v17;
#line 302 "cc1.om"
if (!(v_v)) { goto b26; }
#line 302 "cc1.om"
-b25: if (!(*(u *)((v_v) + (200UL)))) { goto b26; }
+b25: if (!(*(u *)((v_v) + (208UL)))) { goto b26; }
#line 302 "cc1.om"
b27: v18 = 1UL;
#line 302 "cc1.om"
@@ -33084,7 +33088,7 @@ b22: v19 = (u)my_find;
#line 306 "cc1.om"
v20 = v_c;
#line 306 "cc1.om"
- v21 = *(u *)(v_d);
+ v21 = *(u *)((v_d) + (32UL));
#line 306 "cc1.om"
v22 = *(u *)((v_n) + (56UL));
#line 306 "cc1.om"
@@ -33096,7 +33100,7 @@ b29: v_v = v24;
#line 307 "cc1.om"
if (!(v_v)) { goto b34; }
#line 307 "cc1.om"
-b33: if (!(*(u *)((v_v) + (224UL)))) { goto b34; }
+b33: if (!(*(u *)((v_v) + (232UL)))) { goto b34; }
#line 307 "cc1.om"
b35: v25 = 1UL;
#line 307 "cc1.om"
@@ -33122,7 +33126,7 @@ b37: v_v = v31;
#line 312 "cc1.om"
if (!(v_v)) { goto b42; }
#line 312 "cc1.om"
-b41: if (!(*(u *)((v_v) + (64UL)))) { goto b42; }
+b41: if (!(*(u *)((v_v) + (72UL)))) { goto b42; }
#line 312 "cc1.om"
b43: v32 = 1UL;
#line 312 "cc1.om"
@@ -33755,9 +33759,9 @@ b2: v4 = (u)my_find;
#line 254 "cc1.om"
v5 = v_c;
#line 254 "cc1.om"
- v6 = *(u *)(v_d);
+ v6 = *(u *)((v_d) + (32UL));
#line 254 "cc1.om"
- v7 = *(u *)(v_v);
+ v7 = *(u *)((v_v) + (32UL));
#line 254 "cc1.om"
v8 = 1UL;
#line 254 "cc1.om"
@@ -33767,7 +33771,7 @@ b4: v_edge = v9;
#line 255 "cc1.om"
if (!(*(u *)((v_c) + (80UL)))) { goto b9; }
#line 255 "cc1.om"
-b8: if (!(*(u *)((v_edge) + (48UL)))) { goto b13; }
+b8: if (!(*(u *)((v_edge) + (56UL)))) { goto b13; }
#line 255 "cc1.om"
b12: v11 = 0UL;
#line 255 "cc1.om"
@@ -33785,7 +33789,7 @@ b6: v12 = (u)my_fputs;
#line 256 "cc1.om"
v13 = *(u *)((v_c) + (80UL));
#line 256 "cc1.om"
- v14 = *(u *)(v_d);
+ v14 = *(u *)((v_d) + (32UL));
#line 256 "cc1.om"
v15 = ((u (*)())(v12))(v13, v14);
#line 257 "cc1.om"
@@ -33801,7 +33805,7 @@ b16: v20 = (u)my_fputs;
#line 258 "cc1.om"
v21 = *(u *)((v_c) + (80UL));
#line 258 "cc1.om"
- v22 = *(u *)(v_v);
+ v22 = *(u *)((v_v) + (32UL));
#line 258 "cc1.om"
v23 = ((u (*)())(v20))(v21, v22);
#line 259 "cc1.om"
@@ -33813,15 +33817,15 @@ b17: v24 = (u)my_fputs;
#line 259 "cc1.om"
v27 = ((u (*)())(v24))(v25, v26);
#line 261 "cc1.om"
-b5: *(u *)((v_edge) + (48UL)) = 1UL;
+b5: *(u *)((v_edge) + (56UL)) = 1UL;
#line 263 "cc1.om"
v28 = (u)my_find;
#line 263 "cc1.om"
v29 = v_c;
#line 263 "cc1.om"
- v30 = *(u *)(v_v);
+ v30 = *(u *)((v_v) + (32UL));
#line 263 "cc1.om"
- v31 = *(u *)(v_d);
+ v31 = *(u *)((v_d) + (32UL));
#line 263 "cc1.om"
v32 = 1UL;
#line 263 "cc1.om"
@@ -33829,17 +33833,17 @@ b5: *(u *)((v_edge) + (48UL)) = 1UL;
#line 263 "cc1.om"
b19: v_edge = v33;
#line 264 "cc1.om"
- *(u *)((v_edge) + (56UL)) = 1UL;
+ *(u *)((v_edge) + (64UL)) = 1UL;
#line 264 "cc1.om"
goto b1;
#line 267 "cc1.om"
-b1: if (!(*(u *)((v_v) + (104UL)))) { goto b20; }
+b1: if (!(*(u *)((v_v) + (112UL)))) { goto b20; }
#line 268 "cc1.om"
b21: return 0UL;
#line 271 "cc1.om"
-b20: *(u *)((v_v) + (104UL)) = 1UL;
+b20: *(u *)((v_v) + (112UL)) = 1UL;
#line 272 "cc1.om"
- *(u *)((v_v) + (40UL)) = *(u *)((v_c) + (104UL));
+ *(u *)((v_v) + (48UL)) = *(u *)((v_c) + (104UL));
#line 273 "cc1.om"
*(u *)((v_c) + (104UL)) = v_v;
#line 249 "cc1.om"
@@ -34822,66 +34826,14 @@ u my_next_decl(u v_c, u v_d) {
u v2 = 0;
u v3 = 0;
u v4 = 0;
-#line 152 "decl.om"
-b0: if (!(v_d)) { goto b5; }
-#line 152 "decl.om"
-b4: v2 = 0UL;
-#line 152 "decl.om"
- goto b6;
-#line 152 "decl.om"
-b6: if (!(v2)) { goto b1; }
-#line 153 "decl.om"
-b2: return 0UL;
-#line 156 "decl.om"
-b1: if (!(*(u *)((v_d) + (32UL)))) { goto b18; }
-#line 157 "decl.om"
-b8: v_d = *(u *)((v_d) + (32UL));
-#line 159 "decl.om"
- goto b10;
-#line 160 "decl.om"
-b10: if (!(*(u *)((v_d) + (24UL)))) { goto b16; }
-#line 160 "decl.om"
-b15: v3 = 0UL;
-#line 160 "decl.om"
- goto b17;
-#line 160 "decl.om"
-b17: if (!(v3)) { goto b12; }
-#line 161 "decl.om"
-b13: return v_d;
-#line 164 "decl.om"
-b12: v_d = *(u *)((v_d) + (24UL));
-#line 164 "decl.om"
- goto b10;
-#line 160 "decl.om"
-b16: v3 = 1UL;
-#line 160 "decl.om"
- goto b17;
-#line 169 "decl.om"
-b18: if (!(*(u *)((v_d) + (16UL)))) { goto b24; }
-#line 169 "decl.om"
-b23: v4 = 0UL;
-#line 169 "decl.om"
- goto b25;
-#line 169 "decl.om"
-b25: if (!(v4)) { goto b20; }
-#line 170 "decl.om"
-b21: return 0UL;
-#line 173 "decl.om"
-b20: if (!((u)(((s)(*(u *)((*(u *)((v_d) + (16UL))) + (24UL)))) == ((s)(v_d))))) { goto b26; }
-#line 174 "decl.om"
-b27: return *(u *)((v_d) + (16UL));
-#line 177 "decl.om"
-b26: v_d = *(u *)((v_d) + (16UL));
-#line 177 "decl.om"
- goto b18;
-#line 169 "decl.om"
-b24: v4 = 1UL;
-#line 169 "decl.om"
- goto b25;
-#line 152 "decl.om"
-b5: v2 = 1UL;
-#line 152 "decl.om"
- goto b6;
+#line 137 "decl.om"
+b0: v2 = (u)my_rb_next;
+#line 137 "decl.om"
+ v3 = v_d;
+#line 137 "decl.om"
+ v4 = ((u (*)())(v2))(v3);
+#line 137 "decl.om"
+b1: return v4;
}
u my_node_to_str(u v_kind) {
#line 127 "node.om"
@@ -35453,23 +35405,23 @@ u my_output_ir(u v_c, u v_d) {
u v74 = 0;
u v75 = 0;
#line 1572 "ir.om"
-b0: v_ic = *(u *)((v_d) + (120UL));
+b0: v_ic = *(u *)((v_d) + (128UL));
#line 1574 "ir.om"
- *(u *)((*(u *)(v_ic)) + (24UL)) = *(u *)((*(u *)((v_d) + (88UL))) + (24UL));
+ *(u *)((*(u *)(v_ic)) + (24UL)) = *(u *)((*(u *)((v_d) + (96UL))) + (24UL));
#line 1575 "ir.om"
- *(u *)((*(u *)(v_ic)) + (32UL)) = *(u *)((*(u *)((v_d) + (88UL))) + (32UL));
+ *(u *)((*(u *)(v_ic)) + (32UL)) = *(u *)((*(u *)((v_d) + (96UL))) + (32UL));
#line 1576 "ir.om"
- *(u *)((*(u *)(v_ic)) + (40UL)) = *(u *)((*(u *)((v_d) + (88UL))) + (40UL));
+ *(u *)((*(u *)(v_ic)) + (40UL)) = *(u *)((*(u *)((v_d) + (96UL))) + (40UL));
#line 1577 "ir.om"
- *(u *)((*(u *)((v_ic) + (8UL))) + (88UL)) = *(u *)((*(u *)((v_d) + (88UL))) + (24UL));
+ *(u *)((*(u *)((v_ic) + (8UL))) + (88UL)) = *(u *)((*(u *)((v_d) + (96UL))) + (24UL));
#line 1578 "ir.om"
- *(u *)((*(u *)((v_ic) + (8UL))) + (96UL)) = *(u *)((*(u *)((v_d) + (88UL))) + (32UL));
+ *(u *)((*(u *)((v_ic) + (8UL))) + (96UL)) = *(u *)((*(u *)((v_d) + (96UL))) + (32UL));
#line 1580 "ir.om"
v3 = (u)my_fixup_label;
#line 1580 "ir.om"
v4 = *(u *)((v_c) + (48UL));
#line 1580 "ir.om"
- v5 = *(u *)((v_d) + (80UL));
+ v5 = *(u *)((v_d) + (88UL));
#line 1580 "ir.om"
v6 = ((u (*)())(v3))(v4, v5);
#line 1581 "ir.om"
@@ -35477,15 +35429,15 @@ b1: v7 = (u)my_add_symbol;
#line 1581 "ir.om"
v8 = *(u *)((v_c) + (48UL));
#line 1581 "ir.om"
- v9 = *(u *)(v_d);
+ v9 = *(u *)((v_d) + (32UL));
#line 1581 "ir.om"
- v10 = *(u *)((v_d) + (80UL));
+ v10 = *(u *)((v_d) + (88UL));
#line 1581 "ir.om"
v11 = ((u (*)())(v7))(v8, v9, v10);
#line 1583 "ir.om"
b2: v12 = (u)my_strcmp;
#line 1583 "ir.om"
- v13 = *(u *)(v_d);
+ v13 = *(u *)((v_d) + (32UL));
#line 1583 "ir.om"
v14 = (u)"_start";
#line 1583 "ir.om"
@@ -35603,7 +35555,7 @@ b19: return 0UL;
#line 1588 "ir.om"
b5: v48 = (u)my_strcmp;
#line 1588 "ir.om"
- v49 = *(u *)(v_d);
+ v49 = *(u *)((v_d) + (32UL));
#line 1588 "ir.om"
v50 = (u)"_kstart";
#line 1588 "ir.om"
@@ -38190,13 +38142,13 @@ b18: v30 = (u)my_addfixup;
#line 1930 "ir.om"
v31 = *(u *)((v_ic) + (8UL));
#line 1930 "ir.om"
- v32 = *(u *)((v_d) + (80UL));
+ v32 = *(u *)((v_d) + (88UL));
#line 1930 "ir.om"
v33 = ((u (*)())(v30))(v31, v32);
#line 1919 "ir.om"
b19: return 0UL;
#line 1924 "ir.om"
-b6: if (!(*(u *)((v_d) + (64UL)))) { goto b14; }
+b6: if (!(*(u *)((v_d) + (72UL)))) { goto b14; }
#line 1924 "ir.om"
b13: v12 = 0UL;
#line 1924 "ir.om"
@@ -56375,7 +56327,7 @@ b36: v43 = (u)my_cdie;
#line 154 "type.om"
v46 = ((u (*)())(v43))(v44, v45);
#line 157 "type.om"
-b35: if (!((u)(((s)(*(u *)(*(u *)((v_st) + (152UL))))) == ((s)(17UL))))) { goto b52; }
+b35: if (!((u)(((s)(*(u *)(*(u *)((v_st) + (160UL))))) == ((s)(17UL))))) { goto b52; }
#line 158 "type.om"
b51: v47 = (u)my_mktype_struct;
#line 158 "type.om"
@@ -56397,7 +56349,7 @@ b52: v51 = (u)my_mktype_union;
#line 160 "type.om"
b54: return v54;
#line 153 "type.om"
-b39: if (!(*(u *)((v_st) + (128UL)))) { goto b47; }
+b39: if (!(*(u *)((v_st) + (136UL)))) { goto b47; }
#line 153 "type.om"
b46: v42 = 0UL;
#line 153 "type.om"
@@ -56681,6 +56633,405 @@ b0: v2 = (u)my_fputc;
#line 280 "as.om"
b1: return 0UL;
}
+u my_rb_first(u v_n) {
+ u v1 = 0;
+ u v2 = 0;
+#line 146 "rb.om"
+b0: if (!(v_n)) { goto b5; }
+#line 146 "rb.om"
+b4: v1 = 0UL;
+#line 146 "rb.om"
+ goto b6;
+#line 146 "rb.om"
+b6: if (!(v1)) { goto b7; }
+#line 147 "rb.om"
+b2: return 0UL;
+#line 151 "rb.om"
+b7: if (!(*(u *)((v_n) + (16UL)))) { goto b13; }
+#line 151 "rb.om"
+b12: v2 = 0UL;
+#line 151 "rb.om"
+ goto b14;
+#line 151 "rb.om"
+b14: if (!(v2)) { goto b9; }
+#line 158 "rb.om"
+b8: return v_n;
+#line 155 "rb.om"
+b9: v_n = *(u *)((v_n) + (16UL));
+#line 155 "rb.om"
+ goto b7;
+#line 151 "rb.om"
+b13: v2 = 1UL;
+#line 151 "rb.om"
+ goto b14;
+#line 146 "rb.om"
+b5: v1 = 1UL;
+#line 146 "rb.om"
+ goto b6;
+}
+u my_rb_link(u v_tree, u v_link, u v_parent, u v_n) {
+ u v_l = 0;
+ u v_r = 0;
+ u v_g = 0;
+ u v_p = 0;
+ u v8 = 0;
+ u v9 = 0;
+ u v10 = 0;
+ u v11 = 0;
+ u v12 = 0;
+ u v13 = 0;
+ u v14 = 0;
+ u v15 = 0;
+ u v16 = 0;
+ u v17 = 0;
+ u v18 = 0;
+ u v19 = 0;
+ u v20 = 0;
+ u v21 = 0;
+ u v22 = 0;
+ u v23 = 0;
+ u v24 = 0;
+ u v25 = 0;
+ u v26 = 0;
+ u v27 = 0;
+ u v28 = 0;
+ u v29 = 0;
+ u v30 = 0;
+ u v31 = 0;
+ u v32 = 0;
+ u v33 = 0;
+ u v34 = 0;
+ u v35 = 0;
+ u v36 = 0;
+ u v37 = 0;
+#line 75 "rb.om"
+b0: *(u *)(v_n) = 1UL;
+#line 76 "rb.om"
+ *(u *)((v_n) + (8UL)) = v_parent;
+#line 77 "rb.om"
+ *(u *)((v_n) + (16UL)) = 0UL;
+#line 78 "rb.om"
+ *(u *)((v_n) + (24UL)) = 0UL;
+#line 79 "rb.om"
+ *(u *)(v_link) = v_n;
+#line 81 "rb.om"
+ goto b1;
+#line 82 "rb.om"
+b1: v_p = *(u *)((v_n) + (8UL));
+#line 83 "rb.om"
+ if (!(v_p)) { goto b7; }
+#line 83 "rb.om"
+b6: v8 = 0UL;
+#line 83 "rb.om"
+ goto b8;
+#line 83 "rb.om"
+b8: if (!(v8)) { goto b3; }
+#line 86 "rb.om"
+b4: *(u *)(v_n) = 0UL;
+#line 87 "rb.om"
+ return 0UL;
+#line 90 "rb.om"
+b3: if (!(*(u *)(v_p))) { goto b13; }
+#line 90 "rb.om"
+b12: v9 = 0UL;
+#line 90 "rb.om"
+ goto b14;
+#line 90 "rb.om"
+b14: if (!(v9)) { goto b9; }
+#line 93 "rb.om"
+b10: return 0UL;
+#line 96 "rb.om"
+b9: v_g = *(u *)((v_p) + (8UL));
+#line 97 "rb.om"
+ if (!(v_g)) { goto b19; }
+#line 97 "rb.om"
+b18: v10 = 0UL;
+#line 97 "rb.om"
+ goto b20;
+#line 97 "rb.om"
+b20: if (!(v10)) { goto b15; }
+#line 99 "rb.om"
+b16: *(u *)(v_p) = 0UL;
+#line 100 "rb.om"
+ return 0UL;
+#line 104 "rb.om"
+b15: v_l = *(u *)((v_g) + (16UL));
+#line 105 "rb.om"
+ v_r = *(u *)((v_g) + (24UL));
+#line 106 "rb.om"
+ if (!(v_l)) { goto b25; }
+#line 106 "rb.om"
+b24: if (!(v_r)) { goto b29; }
+#line 106 "rb.om"
+b28: if (!(*(u *)(v_l))) { goto b33; }
+#line 106 "rb.om"
+b32: if (!(*(u *)(v_r))) { goto b33; }
+#line 106 "rb.om"
+b34: v13 = 1UL;
+#line 106 "rb.om"
+ goto b35;
+#line 106 "rb.om"
+b35: if (!(v13)) { goto b29; }
+#line 106 "rb.om"
+b30: v12 = 1UL;
+#line 106 "rb.om"
+ goto b31;
+#line 106 "rb.om"
+b31: if (!(v12)) { goto b25; }
+#line 106 "rb.om"
+b26: v11 = 1UL;
+#line 106 "rb.om"
+ goto b27;
+#line 106 "rb.om"
+b27: if (!(v11)) { goto b21; }
+#line 109 "rb.om"
+b22: *(u *)(v_l) = 0UL;
+#line 110 "rb.om"
+ *(u *)(v_r) = 0UL;
+#line 111 "rb.om"
+ *(u *)(v_g) = 1UL;
+#line 112 "rb.om"
+ v_n = v_g;
+#line 113 "rb.om"
+ goto b1;
+#line 117 "rb.om"
+b21: if (!((u)(((s)(v_p)) == ((s)(*(u *)((v_g) + (16UL))))))) { goto b38; }
+#line 118 "rb.om"
+b37: if (!((u)(((s)(v_n)) == ((s)(*(u *)((v_p) + (16UL))))))) { goto b41; }
+#line 119 "rb.om"
+b40: *(u *)(v_n) = 0UL;
+#line 120 "rb.om"
+ v14 = (u)my_rb_rotate_right;
+#line 120 "rb.om"
+ v15 = v_tree;
+#line 120 "rb.om"
+ v16 = v_p;
+#line 120 "rb.om"
+ v17 = ((u (*)())(v14))(v15, v16);
+#line 121 "rb.om"
+b42: v_n = v_p;
+#line 121 "rb.om"
+ goto b1;
+#line 123 "rb.om"
+b41: *(u *)(v_p) = 0UL;
+#line 124 "rb.om"
+ v18 = (u)my_rb_rotate_left;
+#line 124 "rb.om"
+ v19 = v_tree;
+#line 124 "rb.om"
+ v20 = v_n;
+#line 124 "rb.om"
+ v21 = ((u (*)())(v18))(v19, v20);
+#line 125 "rb.om"
+b43: v22 = (u)my_rb_rotate_right;
+#line 125 "rb.om"
+ v23 = v_tree;
+#line 125 "rb.om"
+ v24 = v_n;
+#line 125 "rb.om"
+ v25 = ((u (*)())(v22))(v23, v24);
+#line 125 "rb.om"
+ goto b1;
+#line 128 "rb.om"
+b38: if (!((u)(((s)(v_n)) == ((s)(*(u *)((v_p) + (16UL))))))) { goto b47; }
+#line 129 "rb.om"
+b46: *(u *)(v_p) = 0UL;
+#line 130 "rb.om"
+ v26 = (u)my_rb_rotate_right;
+#line 130 "rb.om"
+ v27 = v_tree;
+#line 130 "rb.om"
+ v28 = v_n;
+#line 130 "rb.om"
+ v29 = ((u (*)())(v26))(v27, v28);
+#line 131 "rb.om"
+b48: v30 = (u)my_rb_rotate_left;
+#line 131 "rb.om"
+ v31 = v_tree;
+#line 131 "rb.om"
+ v32 = v_n;
+#line 131 "rb.om"
+ v33 = ((u (*)())(v30))(v31, v32);
+#line 131 "rb.om"
+ goto b1;
+#line 133 "rb.om"
+b47: *(u *)(v_n) = 0UL;
+#line 134 "rb.om"
+ v34 = (u)my_rb_rotate_left;
+#line 134 "rb.om"
+ v35 = v_tree;
+#line 134 "rb.om"
+ v36 = v_p;
+#line 134 "rb.om"
+ v37 = ((u (*)())(v34))(v35, v36);
+#line 135 "rb.om"
+b50: v_n = v_p;
+#line 135 "rb.om"
+ goto b1;
+#line 106 "rb.om"
+b25: v11 = 0UL;
+#line 106 "rb.om"
+ goto b27;
+#line 106 "rb.om"
+b29: v12 = 0UL;
+#line 106 "rb.om"
+ goto b31;
+#line 106 "rb.om"
+b33: v13 = 0UL;
+#line 106 "rb.om"
+ goto b35;
+#line 97 "rb.om"
+b19: v10 = 1UL;
+#line 97 "rb.om"
+ goto b20;
+#line 90 "rb.om"
+b13: v9 = 1UL;
+#line 90 "rb.om"
+ goto b14;
+#line 83 "rb.om"
+b7: v8 = 1UL;
+#line 83 "rb.om"
+ goto b8;
+}
+u my_rb_next(u v_n) {
+ u v1 = 0;
+ u v2 = 0;
+ u v3 = 0;
+ u v4 = 0;
+ u v5 = 0;
+#line 178 "rb.om"
+b0: if (!(v_n)) { goto b5; }
+#line 178 "rb.om"
+b4: v1 = 0UL;
+#line 178 "rb.om"
+ goto b6;
+#line 178 "rb.om"
+b6: if (!(v1)) { goto b1; }
+#line 179 "rb.om"
+b2: return 0UL;
+#line 182 "rb.om"
+b1: if (!(*(u *)((v_n) + (24UL)))) { goto b11; }
+#line 183 "rb.om"
+b8: v2 = (u)my_rb_first;
+#line 183 "rb.om"
+ v3 = *(u *)((v_n) + (24UL));
+#line 183 "rb.om"
+ v4 = ((u (*)())(v2))(v3);
+#line 183 "rb.om"
+b10: return v4;
+#line 187 "rb.om"
+b11: if (!(*(u *)((v_n) + (8UL)))) { goto b17; }
+#line 187 "rb.om"
+b16: v5 = 0UL;
+#line 187 "rb.om"
+ goto b18;
+#line 187 "rb.om"
+b18: if (!(v5)) { goto b13; }
+#line 188 "rb.om"
+b14: return 0UL;
+#line 191 "rb.om"
+b13: if (!((u)(((s)(*(u *)((*(u *)((v_n) + (8UL))) + (16UL)))) == ((s)(v_n))))) { goto b19; }
+#line 192 "rb.om"
+b20: return *(u *)((v_n) + (8UL));
+#line 195 "rb.om"
+b19: v_n = *(u *)((v_n) + (8UL));
+#line 195 "rb.om"
+ goto b11;
+#line 187 "rb.om"
+b17: v5 = 1UL;
+#line 187 "rb.om"
+ goto b18;
+#line 178 "rb.om"
+b5: v1 = 1UL;
+#line 178 "rb.om"
+ goto b6;
+}
+u my_rb_rotate_left(u v_tree, u v_n) {
+ u v_g = 0;
+ u v_p = 0;
+ u v_s = 0;
+#line 14 "rb.om"
+b0: v_s = *(u *)((v_n) + (16UL));
+#line 15 "rb.om"
+ v_p = *(u *)((v_n) + (8UL));
+#line 16 "rb.om"
+ v_g = *(u *)((v_p) + (8UL));
+#line 18 "rb.om"
+ *(u *)((v_n) + (16UL)) = v_p;
+#line 19 "rb.om"
+ *(u *)((v_p) + (8UL)) = v_n;
+#line 21 "rb.om"
+ *(u *)((v_p) + (24UL)) = v_s;
+#line 22 "rb.om"
+ if (!(v_s)) { goto b1; }
+#line 23 "rb.om"
+b2: *(u *)((v_s) + (8UL)) = v_p;
+#line 23 "rb.om"
+ goto b1;
+#line 26 "rb.om"
+b1: *(u *)((v_n) + (8UL)) = v_g;
+#line 27 "rb.om"
+ if (!(v_g)) { goto b6; }
+#line 28 "rb.om"
+b5: if (!((u)(((s)(*(u *)((v_g) + (16UL)))) == ((s)(v_p))))) { goto b9; }
+#line 29 "rb.om"
+b8: *(u *)((v_g) + (16UL)) = v_n;
+#line 29 "rb.om"
+ goto b4;
+#line 8 "rb.om"
+b4: return 0UL;
+#line 31 "rb.om"
+b9: *(u *)((v_g) + (24UL)) = v_n;
+#line 31 "rb.om"
+ goto b4;
+#line 34 "rb.om"
+b6: *(u *)(v_tree) = v_n;
+#line 34 "rb.om"
+ goto b4;
+}
+u my_rb_rotate_right(u v_tree, u v_n) {
+ u v_g = 0;
+ u v_p = 0;
+ u v_s = 0;
+#line 44 "rb.om"
+b0: v_s = *(u *)((v_n) + (24UL));
+#line 45 "rb.om"
+ v_p = *(u *)((v_n) + (8UL));
+#line 46 "rb.om"
+ v_g = *(u *)((v_p) + (8UL));
+#line 48 "rb.om"
+ *(u *)((v_n) + (24UL)) = v_p;
+#line 49 "rb.om"
+ *(u *)((v_p) + (8UL)) = v_n;
+#line 51 "rb.om"
+ *(u *)((v_p) + (16UL)) = v_s;
+#line 52 "rb.om"
+ if (!(v_s)) { goto b1; }
+#line 53 "rb.om"
+b2: *(u *)((v_s) + (8UL)) = v_p;
+#line 53 "rb.om"
+ goto b1;
+#line 56 "rb.om"
+b1: *(u *)((v_n) + (8UL)) = v_g;
+#line 57 "rb.om"
+ if (!(v_g)) { goto b6; }
+#line 58 "rb.om"
+b5: if (!((u)(((s)(*(u *)((v_g) + (16UL)))) == ((s)(v_p))))) { goto b9; }
+#line 59 "rb.om"
+b8: *(u *)((v_g) + (16UL)) = v_n;
+#line 59 "rb.om"
+ goto b4;
+#line 38 "rb.om"
+b4: return 0UL;
+#line 61 "rb.om"
+b9: *(u *)((v_g) + (24UL)) = v_n;
+#line 61 "rb.om"
+ goto b4;
+#line 64 "rb.om"
+b6: *(u *)(v_tree) = v_n;
+#line 64 "rb.om"
+ goto b4;
+}
u my_read(u v_fd, u v_buf, u v_n) {
u v3 = 0;
u v4 = 0;
@@ -64247,7 +64598,7 @@ b12: v3 = (u)my_layout_struct;
#line 35 "type.om"
v6 = ((u (*)())(v3))(v4, v5);
#line 36 "type.om"
-b14: return *(u *)((*(u *)((v_t) + (8UL))) + (136UL));
+b14: return *(u *)((*(u *)((v_t) + (8UL))) + (144UL));
#line 37 "type.om"
b13: if (!((u)(((s)(v_kind)) == ((s)(8UL))))) { goto b16; }
#line 38 "type.om"
@@ -64259,7 +64610,7 @@ b15: v7 = (u)my_layout_union;
#line 38 "type.om"
v10 = ((u (*)())(v7))(v8, v9);
#line 39 "type.om"
-b17: return *(u *)((*(u *)((v_t) + (8UL))) + (136UL));
+b17: return *(u *)((*(u *)((v_t) + (8UL))) + (144UL));
#line 41 "type.om"
b16: v11 = (u)my_cdie;
#line 41 "type.om"
@@ -65522,7 +65873,7 @@ b78: v_v = v91;
#line 735 "cc1.om"
if (!(v_v)) { goto b83; }
#line 735 "cc1.om"
-b82: if (!(*(u *)((v_v) + (200UL)))) { goto b83; }
+b82: if (!(*(u *)((v_v) + (208UL)))) { goto b83; }
#line 735 "cc1.om"
b84: v92 = 1UL;
#line 735 "cc1.om"
@@ -65542,7 +65893,7 @@ b79: v97 = (u)my_find;
#line 739 "cc1.om"
v98 = v_c;
#line 739 "cc1.om"
- v99 = *(u *)(v_d);
+ v99 = *(u *)((v_d) + (32UL));
#line 739 "cc1.om"
v100 = *(u *)((*(u *)((v_n) + (8UL))) + (56UL));
#line 739 "cc1.om"
@@ -65554,7 +65905,7 @@ b87: v_v = v102;
#line 740 "cc1.om"
if (!(v_v)) { goto b92; }
#line 740 "cc1.om"
-b91: if (!(*(u *)((v_v) + (224UL)))) { goto b92; }
+b91: if (!(*(u *)((v_v) + (232UL)))) { goto b92; }
#line 740 "cc1.om"
b93: v103 = 1UL;
#line 740 "cc1.om"
@@ -65562,7 +65913,7 @@ b93: v103 = 1UL;
#line 740 "cc1.om"
b94: if (!(v103)) { goto b90; }
#line 741 "cc1.om"
-b89: *(u *)((*(u *)((v_n) + (8UL))) + (64UL)) = *(u *)((v_v) + (232UL));
+b89: *(u *)((*(u *)((v_n) + (8UL))) + (64UL)) = *(u *)((v_v) + (240UL));
#line 741 "cc1.om"
goto b75;
#line 759 "cc1.om"
@@ -65656,11 +66007,11 @@ b103: v118 = (u)my_cdie;
#line 745 "cc1.om"
v121 = ((u (*)())(v118))(v119, v120);
#line 747 "cc1.om"
-b102: *(u *)((*(u *)((v_n) + (8UL))) + (64UL)) = *(u *)((v_v) + (72UL));
+b102: *(u *)((*(u *)((v_n) + (8UL))) + (64UL)) = *(u *)((v_v) + (80UL));
#line 747 "cc1.om"
goto b75;
#line 744 "cc1.om"
-b106: if (!(*(u *)((v_v) + (64UL)))) { goto b114; }
+b106: if (!(*(u *)((v_v) + (72UL)))) { goto b114; }
#line 744 "cc1.om"
b113: v117 = 0UL;
#line 744 "cc1.om"
@@ -65720,11 +66071,11 @@ b119: v131 = (u)my_cdie;
#line 751 "cc1.om"
v134 = ((u (*)())(v131))(v132, v133);
#line 753 "cc1.om"
-b118: *(u *)((*(u *)((v_n) + (8UL))) + (64UL)) = *(u *)((v_v) + (72UL));
+b118: *(u *)((*(u *)((v_n) + (8UL))) + (64UL)) = *(u *)((v_v) + (80UL));
#line 753 "cc1.om"
goto b75;
#line 750 "cc1.om"
-b122: if (!(*(u *)((v_v) + (64UL)))) { goto b130; }
+b122: if (!(*(u *)((v_v) + (72UL)))) { goto b130; }
#line 750 "cc1.om"
b129: v130 = 0UL;
#line 750 "cc1.om"
@@ -65816,7 +66167,7 @@ b149: v166 = (u)my_find;
#line 778 "cc1.om"
v167 = v_c;
#line 778 "cc1.om"
- v168 = *(u *)(*(u *)((*(u *)((*(u *)((*(u *)((v_n) + (8UL))) + (64UL))) + (16UL))) + (8UL)));
+ v168 = *(u *)((*(u *)((*(u *)((*(u *)((*(u *)((v_n) + (8UL))) + (64UL))) + (16UL))) + (8UL))) + (32UL));
#line 778 "cc1.om"
v169 = *(u *)((*(u *)((v_n) + (16UL))) + (56UL));
#line 778 "cc1.om"
@@ -65850,11 +66201,11 @@ b168: v186 = (u)my_cdie;
#line 788 "cc1.om"
v189 = ((u (*)())(v186))(v187, v188);
#line 791 "cc1.om"
-b167: *(u *)((v_n) + (64UL)) = *(u *)((v_v) + (176UL));
+b167: *(u *)((v_n) + (64UL)) = *(u *)((v_v) + (184UL));
#line 791 "cc1.om"
goto b1;
#line 787 "cc1.om"
-b171: if (!(*(u *)((v_v) + (168UL)))) { goto b179; }
+b171: if (!(*(u *)((v_v) + (176UL)))) { goto b179; }
#line 787 "cc1.om"
b178: v185 = 0UL;
#line 787 "cc1.om"
@@ -65904,7 +66255,7 @@ b158: v177 = (u)my_find;
#line 784 "cc1.om"
v178 = v_c;
#line 784 "cc1.om"
- v179 = *(u *)(*(u *)((*(u *)((*(u *)((v_n) + (8UL))) + (64UL))) + (8UL)));
+ v179 = *(u *)((*(u *)((*(u *)((*(u *)((v_n) + (8UL))) + (64UL))) + (8UL))) + (32UL));
#line 784 "cc1.om"
v180 = *(u *)((*(u *)((v_n) + (16UL))) + (56UL));
#line 784 "cc1.om"
@@ -65938,7 +66289,7 @@ b184: v_v = v195;
#line 794 "cc1.om"
if (!(v_v)) { goto b189; }
#line 794 "cc1.om"
-b188: if (!(*(u *)((v_v) + (200UL)))) { goto b189; }
+b188: if (!(*(u *)((v_v) + (208UL)))) { goto b189; }
#line 794 "cc1.om"
b190: v196 = 1UL;
#line 794 "cc1.om"
@@ -65962,7 +66313,7 @@ b185: v201 = (u)my_find;
#line 799 "cc1.om"
v202 = v_c;
#line 799 "cc1.om"
- v203 = *(u *)(v_d);
+ v203 = *(u *)((v_d) + (32UL));
#line 799 "cc1.om"
v204 = *(u *)((v_n) + (56UL));
#line 799 "cc1.om"
@@ -65974,7 +66325,7 @@ b193: v_v = v206;
#line 800 "cc1.om"
if (!(v_v)) { goto b198; }
#line 800 "cc1.om"
-b197: if (!(*(u *)((v_v) + (224UL)))) { goto b198; }
+b197: if (!(*(u *)((v_v) + (232UL)))) { goto b198; }
#line 800 "cc1.om"
b199: v207 = 1UL;
#line 800 "cc1.om"
@@ -65982,7 +66333,7 @@ b199: v207 = 1UL;
#line 800 "cc1.om"
b200: if (!(v207)) { goto b194; }
#line 801 "cc1.om"
-b195: *(u *)((v_n) + (64UL)) = *(u *)((v_v) + (232UL));
+b195: *(u *)((v_n) + (64UL)) = *(u *)((v_v) + (240UL));
#line 802 "cc1.om"
return 0UL;
#line 805 "cc1.om"
@@ -66002,7 +66353,7 @@ b201: v_v = v213;
#line 806 "cc1.om"
if (!(v_v)) { goto b206; }
#line 806 "cc1.om"
-b205: if (!(*(u *)((v_v) + (64UL)))) { goto b206; }
+b205: if (!(*(u *)((v_v) + (72UL)))) { goto b206; }
#line 806 "cc1.om"
b207: v214 = 1UL;
#line 806 "cc1.om"
@@ -66010,7 +66361,7 @@ b207: v214 = 1UL;
#line 806 "cc1.om"
b208: if (!(v214)) { goto b202; }
#line 807 "cc1.om"
-b203: *(u *)((v_n) + (64UL)) = *(u *)((v_v) + (72UL));
+b203: *(u *)((v_n) + (64UL)) = *(u *)((v_v) + (80UL));
#line 808 "cc1.om"
return 0UL;
#line 811 "cc1.om"
@@ -68234,7 +68585,7 @@ u my_typecheck_func(u v_c, u v_d) {
u v6 = 0;
u v7 = 0;
#line 1264 "cc1.om"
-b0: if (!(*(u *)((v_d) + (88UL)))) { goto b5; }
+b0: if (!(*(u *)((v_d) + (96UL)))) { goto b5; }
#line 1264 "cc1.om"
b4: v2 = 0UL;
#line 1264 "cc1.om"
@@ -68250,7 +68601,7 @@ b1: v3 = (u)my_typecheck_stmt;
#line 1268 "cc1.om"
v5 = v_d;
#line 1268 "cc1.om"
- v6 = *(u *)((*(u *)((v_d) + (88UL))) + (16UL));
+ v6 = *(u *)((*(u *)((v_d) + (96UL))) + (16UL));
#line 1268 "cc1.om"
v7 = ((u (*)())(v3))(v4, v5, v6);
#line 1263 "cc1.om"
@@ -68458,7 +68809,7 @@ b40: if (!((u)(((s)(v_kind)) == ((s)(29UL))))) { goto b42; }
#line 1238 "cc1.om"
b41: if (!(*(u *)((v_n) + (8UL)))) { goto b45; }
#line 1239 "cc1.om"
-b44: if (!((u)(((s)(*(u *)(*(u *)((*(u *)((v_d) + (72UL))) + (16UL))))) == ((s)(1UL))))) { goto b46; }
+b44: if (!((u)(((s)(*(u *)(*(u *)((*(u *)((v_d) + (80UL))) + (16UL))))) == ((s)(1UL))))) { goto b46; }
#line 1240 "cc1.om"
b47: v29 = (u)my_cdie;
#line 1240 "cc1.om"
@@ -68494,13 +68845,13 @@ b51: v43 = (u)my_unify;
#line 1244 "cc1.om"
v45 = *(u *)((*(u *)((v_n) + (8UL))) + (64UL));
#line 1244 "cc1.om"
- v46 = *(u *)((*(u *)((v_d) + (72UL))) + (16UL));
+ v46 = *(u *)((*(u *)((v_d) + (80UL))) + (16UL));
#line 1244 "cc1.om"
v47 = ((u (*)())(v43))(v44, v45, v46);
#line 1244 "cc1.om"
goto b7;
#line 1246 "cc1.om"
-b45: if (!((u)(((s)(*(u *)(*(u *)((*(u *)((v_d) + (72UL))) + (16UL))))) != ((s)(1UL))))) { goto b7; }
+b45: if (!((u)(((s)(*(u *)(*(u *)((*(u *)((v_d) + (80UL))) + (16UL))))) != ((s)(1UL))))) { goto b7; }
#line 1247 "cc1.om"
b54: v48 = (u)my_cdie;
#line 1247 "cc1.om"
@@ -68518,7 +68869,7 @@ b57: v52 = (u)my_find;
#line 1251 "cc1.om"
v53 = v_c;
#line 1251 "cc1.om"
- v54 = *(u *)(v_d);
+ v54 = *(u *)((v_d) + (32UL));
#line 1251 "cc1.om"
v55 = *(u *)((*(u *)((v_n) + (8UL))) + (56UL));
#line 1251 "cc1.om"
@@ -68536,7 +68887,7 @@ b60: v58 = (u)my_find;
#line 1253 "cc1.om"
v59 = v_c;
#line 1253 "cc1.om"
- v60 = *(u *)(v_d);
+ v60 = *(u *)((v_d) + (32UL));
#line 1253 "cc1.om"
v61 = *(u *)((*(u *)((v_n) + (8UL))) + (56UL));
#line 1253 "cc1.om"
@@ -68570,7 +68921,7 @@ b64: v67 = (u)my_cdie;
#line 1255 "cc1.om"
goto b7;
#line 1254 "cc1.om"
-b67: if (!(*(u *)((v_v) + (256UL)))) { goto b75; }
+b67: if (!(*(u *)((v_v) + (264UL)))) { goto b75; }
#line 1254 "cc1.om"
b74: v66 = 0UL;
#line 1254 "cc1.om"
diff --git a/decl.om b/decl.om
@@ -1,9 +1,8 @@
struct decl {
+ node: rbnode;
+
name: *byte;
member_name: *byte;
- p: *decl;
- l: *decl;
- r: *decl;
used_next: *decl;
used_forward: int;
@@ -43,15 +42,15 @@ struct decl {
}
func find(c: *compiler, name: *byte, member_name: *byte, make: int): *decl {
- var p: *decl;
+ var link: **rbnode;
+ var p: *rbnode;
var d: *decl;
- var link: **decl;
var dir: int;
p = nil;
- link = &c.decls;
+ link = (&c.decls) as **rbnode;
loop {
- d = *link;
+ d = (*link) as *decl;
if (!d) {
break;
}
@@ -71,11 +70,11 @@ func find(c: *compiler, name: *byte, member_name: *byte, make: int): *decl {
}
if (dir < 0) {
- p = d;
- link = &d.l;
+ link = &d.node.left;
+ p = &d.node;
} else if (dir > 0) {
- p = d;
- link = &d.r;
+ link = &d.node.right;
+ p = &d.node;
} else {
return d;
}
@@ -91,9 +90,7 @@ func find(c: *compiler, name: *byte, member_name: *byte, make: int): *decl {
d.name = name;
d.member_name = member_name;
- d.p = p;
- d.l = nil;
- d.r = nil;
+ rb_link((&c.decls) as **rbnode, link, p, &d.node);
d.used_next = nil;
@@ -125,56 +122,17 @@ func find(c: *compiler, name: *byte, member_name: *byte, make: int): *decl {
d.goto_defined = 0;
d.goto_label = mklabel(c.s);
- *link = d;
-
return d;
}
// Find the first declaration
func first_decl(c: *compiler): *decl {
- var d: *decl;
-
- d = c.decls;
- if (!d) {
+ if !c.decls {
return nil;
}
-
- loop {
- if (!d.l) {
- return d;
- }
-
- d = d.l;
- }
+ return rb_first(&c.decls.node) as *decl;
}
func next_decl(c: *compiler, d: *decl): *decl {
- if (!d) {
- return nil;
- }
-
- if (d.r) {
- d = d.r;
-
- loop {
- if (!d.l) {
- return d;
- }
-
- d = d.l;
- }
- }
-
- loop {
- if (!d.p) {
- return nil;
- }
-
- if (d.p.l == d) {
- return d.p;
- }
-
- d = d.p;
- }
+ return rb_next(&d.node) as *decl;
}
-
diff --git a/rb.om b/rb.om
@@ -0,0 +1,215 @@
+struct rbnode {
+ red: int;
+ parent: *rbnode;
+ left: *rbnode;
+ right: *rbnode;
+}
+
+func rb_rotate_left(tree: **rbnode, n: *rbnode) {
+ var gg: *rbnode;
+ var g: *rbnode;
+ var p: *rbnode;
+ var s: *rbnode;
+
+ s = n.left;
+ p = n.parent;
+ g = p.parent;
+
+ n.left = p;
+ p.parent = n;
+
+ p.right = s;
+ if s {
+ s.parent = p;
+ }
+
+ n.parent = g;
+ if g {
+ if g.left == p {
+ g.left = n;
+ } else {
+ g.right = n;
+ }
+ } else {
+ *tree = n;
+ }
+}
+
+func rb_rotate_right(tree: **rbnode, n: *rbnode) {
+ var gg: *rbnode;
+ var g: *rbnode;
+ var p: *rbnode;
+ var s: *rbnode;
+
+ s = n.right;
+ p = n.parent;
+ g = p.parent;
+
+ n.right = p;
+ p.parent = n;
+
+ p.left = s;
+ if s {
+ s.parent = p;
+ }
+
+ n.parent = g;
+ if g {
+ if g.left == p {
+ g.left = n;
+ } else {
+ g.right = n;
+ }
+ } else {
+ *tree = n;
+ }
+}
+
+func rb_link(tree: **rbnode, link: **rbnode, parent: *rbnode, n: *rbnode) {
+ var l: *rbnode;
+ var r: *rbnode;
+ var g: *rbnode;
+ var p: *rbnode;
+
+ // Insert a red node to not disturb the black balance.
+ n.red = 1;
+ n.parent = parent;
+ n.left = nil;
+ n.right = nil;
+ *link = n;
+
+ loop {
+ p = n.parent;
+ if !p {
+ // If we have reached the root make sure it's black.
+ // At this point no more red-red violations are possible.
+ n.red = 0;
+ return;
+ }
+
+ if !p.red {
+ // We reached a node that's black.
+ // There is no red-red violation and our transformations did not disturb balance.
+ return;
+ }
+
+ g = p.parent;
+ if !g {
+ // Parent is the root and is red, just color it black.
+ p.red = 0;
+ return;
+ }
+
+ // Now, n is red and p is red. This is a red-red violation.
+ l = g.left;
+ r = g.right;
+ if l && r && l.red && r.red {
+ // Both parent and it's sibling are red.
+ // We can bubble up to the grandparent.
+ l.red = 0;
+ r.red = 0;
+ g.red = 1;
+ n = g;
+ continue;
+ }
+
+ // Otherwise, we require rotations to resolve the violation.
+ if p == g.left {
+ if n == p.left {
+ n.red = 0;
+ rb_rotate_right(tree, p);
+ n = p;
+ } else {
+ p.red = 0;
+ rb_rotate_left(tree, n);
+ rb_rotate_right(tree, n);
+ }
+ } else {
+ if n == p.left {
+ p.red = 0;
+ rb_rotate_right(tree, n);
+ rb_rotate_left(tree, n);
+ } else {
+ n.red = 0;
+ rb_rotate_left(tree, p);
+ n = p;
+ }
+ }
+ }
+}
+
+func rb_first(n: *rbnode): *rbnode {
+ if !n {
+ return nil;
+ }
+
+ loop {
+ if !n.left {
+ break;
+ }
+
+ n = n.left;
+ }
+
+ return n;
+}
+
+func rb_last(n: *rbnode): *rbnode {
+ if !n {
+ return nil;
+ }
+
+ loop {
+ if !n.right {
+ break;
+ }
+
+ n = n.right;
+ }
+
+ return n;
+}
+
+func rb_next(n: *rbnode): *rbnode {
+ if !n {
+ return nil;
+ }
+
+ if n.right {
+ return rb_first(n.right);
+ }
+
+ loop {
+ if !n.parent {
+ return nil;
+ }
+
+ if n.parent.left == n {
+ return n.parent;
+ }
+
+ n = n.parent;
+ }
+}
+
+func rb_prev(n: *rbnode): *rbnode {
+ if !n {
+ return nil;
+ }
+
+ if n.left {
+ return rb_last(n.left);
+ }
+
+ loop {
+ if !n.parent {
+ return nil;
+ }
+
+ if n.parent.right == n {
+ return n.parent;
+ }
+
+ n = n.parent;
+ }
+}