1 /* Generated by Nim Compiler v1.6.2 */
2 #define NIM_INTBITS 32
3 
4 #include "nimbase.h"
5 #include <string.h>
6 #undef LANGUAGE_C
7 #undef MIPSEB
8 #undef MIPSEL
9 #undef PPC
10 #undef R3000
11 #undef R4000
12 #undef i386
13 #undef linux
14 #undef mips
15 #undef near
16 #undef far
17 #undef powerpc
18 #undef unix
19 #define nimfr_(x, y)
20 #define nimln_(x, y)
21 typedef struct tyObject_TNode__bROa11lyF5vxEN9aYNbHmhw tyObject_TNode__bROa11lyF5vxEN9aYNbHmhw;
22 typedef struct tyObject_Con__QbIMFB4loKCf0ZFA2SwcWQ tyObject_Con__QbIMFB4loKCf0ZFA2SwcWQ;
23 typedef struct tyObject_BasicBlock__BqJRpBqlD9bKSJMY28pMcmg tyObject_BasicBlock__BqJRpBqlD9bKSJMY28pMcmg;
24 typedef struct tySequence__ehmV9bTklH2Gt9cXHV9c0HLeQ tySequence__ehmV9bTklH2Gt9cXHV9c0HLeQ;
25 typedef struct tyObject_TSym__nnJKJFyjDGi5mnv8jwfTGQ tyObject_TSym__nnJKJFyjDGi5mnv8jwfTGQ;
26 typedef struct tyObject_TType__facALICuu8zUj0hjvbTLFg tyObject_TType__facALICuu8zUj0hjvbTLFg;
27 typedef struct tyObject_TLineInfo__WGx4rAexNXnczy1Avn646Q tyObject_TLineInfo__WGx4rAexNXnczy1Avn646Q;
28 typedef struct NimStringDesc NimStringDesc;
29 typedef struct TGenericSeq TGenericSeq;
30 typedef struct tyObject_TIdent__1LTsGP7bSxg45u9aHcxh6OA tyObject_TIdent__1LTsGP7bSxg45u9aHcxh6OA;
31 typedef struct tyObject_TIdObj__KUwfjfUQEwGHguQbTcXu7w tyObject_TIdObj__KUwfjfUQEwGHguQbTcXu7w;
32 typedef struct RootObj RootObj;
33 typedef struct TNimType TNimType;
34 typedef struct TNimNode TNimNode;
35 typedef struct tyObject_ItemId__ozxAxZLHTQ9c3akTzYvt67g tyObject_ItemId__ozxAxZLHTQ9c3akTzYvt67g;
36 typedef struct tyObject_TLoc__EtHNvCB0bgfu9bFjzx9cb6aA tyObject_TLoc__EtHNvCB0bgfu9bFjzx9cb6aA;
37 typedef struct tyObject_RopeObj__OFzf0kSiPTcNreUIeJgWVA tyObject_RopeObj__OFzf0kSiPTcNreUIeJgWVA;
38 typedef struct tyObject_TLib__NBMxlJ6g3utqUlplqTTHkA tyObject_TLib__NBMxlJ6g3utqUlplqTTHkA;
39 typedef struct tyObject_Cell__1zcF9cV8XIAtbN8h5HRUB8g tyObject_Cell__1zcF9cV8XIAtbN8h5HRUB8g;
40 typedef struct tyObject_CellSeq__Axo1XVm9aaQueTOldv8le5w tyObject_CellSeq__Axo1XVm9aaQueTOldv8le5w;
41 typedef struct tyObject_GcHeap__1TRH1TZMaVZTnLNcIHuNFQ tyObject_GcHeap__1TRH1TZMaVZTnLNcIHuNFQ;
42 typedef struct tyObject_GcStack__7fytPA5bBsob6See21YMRA tyObject_GcStack__7fytPA5bBsob6See21YMRA;
43 typedef struct tyObject_MemRegion__x81NhDv59b8ercDZ9bi85jyg tyObject_MemRegion__x81NhDv59b8ercDZ9bi85jyg;
44 typedef struct tyObject_SmallChunk__tXn60W2f8h3jgAYdEmy5NQ tyObject_SmallChunk__tXn60W2f8h3jgAYdEmy5NQ;
45 typedef struct tyObject_BigChunk__Rv9c70Uhp2TytkX7eH78qEg tyObject_BigChunk__Rv9c70Uhp2TytkX7eH78qEg;
46 typedef struct tyObject_LLChunk__XsENErzHIZV9bhvyJx56wGw tyObject_LLChunk__XsENErzHIZV9bhvyJx56wGw;
47 typedef struct tyObject_IntSet__EZObFrE3NC9bIb3YMkY9crZA tyObject_IntSet__EZObFrE3NC9bIb3YMkY9crZA;
48 typedef struct tyObject_Trunk__W0r8S0Y3UGke6T9bIUWnnuw tyObject_Trunk__W0r8S0Y3UGke6T9bIUWnnuw;
49 typedef struct tyObject_AvlNode__IaqjtwKhxLEpvDS9bct9blEw tyObject_AvlNode__IaqjtwKhxLEpvDS9bct9blEw;
50 typedef struct tyObject_HeapLinks__PDV1HBZ8CQSQJC9aOBFNRSg tyObject_HeapLinks__PDV1HBZ8CQSQJC9aOBFNRSg;
51 typedef struct tyTuple__ujsjpB2O9cjj3uDHsXbnSzg tyTuple__ujsjpB2O9cjj3uDHsXbnSzg;
52 typedef struct tyObject_GcStat__0RwLoVBHZPfUAcLczmfQAg tyObject_GcStat__0RwLoVBHZPfUAcLczmfQAg;
53 typedef struct tyObject_CellSet__jG87P0AI9aZtss9ccTYBIISQ tyObject_CellSet__jG87P0AI9aZtss9ccTYBIISQ;
54 typedef struct tyObject_PageDesc__fublkgIY4LG3mT51LU2WHg tyObject_PageDesc__fublkgIY4LG3mT51LU2WHg;
55 typedef struct tyObject_PackedSet__IhxwDBRi51nGrosBGFKcsA tyObject_PackedSet__IhxwDBRi51nGrosBGFKcsA;
56 typedef struct tyObject_TrunkcolonObjectType___POcWT53G7t0BSUjc31o0iA tyObject_TrunkcolonObjectType___POcWT53G7t0BSUjc31o0iA;
57 typedef struct tySequence__Bre9bNyuQOg1EJKitjSzn8w tySequence__Bre9bNyuQOg1EJKitjSzn8w;
58 typedef struct tySequence__9aZVGG5Gtti9cC9bqRpXCtA3A tySequence__9aZVGG5Gtti9cC9bqRpXCtA3A;
59 struct tyObject_Con__QbIMFB4loKCf0ZFA2SwcWQ {
60 NIM_BOOL somethingTodo;
61 NI inFinally;
62 };
63 typedef NU8 tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw;
64 struct tyObject_BasicBlock__BqJRpBqlD9bKSJMY28pMcmg {
65 tySequence__ehmV9bTklH2Gt9cXHV9c0HLeQ* wasMovedLocs;
66 tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw kind;
67 NIM_BOOL hasReturn;
68 NIM_BOOL hasBreak;
69 tyObject_TSym__nnJKJFyjDGi5mnv8jwfTGQ* label;
70 tyObject_BasicBlock__BqJRpBqlD9bKSJMY28pMcmg* parent;
71 };
72 struct tyObject_TLineInfo__WGx4rAexNXnczy1Avn646Q {
73 NU16 line;
74 NI16 col;
75 NI32 fileIndex;
76 };
77 typedef NU32 tySet_tyEnum_TNodeFlag__jyh9acXHkhZANSSvPIY7ZLg;
78 struct TGenericSeq {
79 NI len;
80 NI reserved;
81 };
82 struct NimStringDesc {
83   TGenericSeq Sup;
84 NIM_CHAR data[SEQ_DECL_SIZE];
85 };
86 struct tyObject_TNode__bROa11lyF5vxEN9aYNbHmhw {
87 tyObject_TType__facALICuu8zUj0hjvbTLFg* typ;
88 tyObject_TLineInfo__WGx4rAexNXnczy1Avn646Q info;
89 tySet_tyEnum_TNodeFlag__jyh9acXHkhZANSSvPIY7ZLg flags;
90 tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw kind;
91 union{
92 struct {NI64 intVal;
93 } _kind_1;
94 struct {NF floatVal;
95 } _kind_2;
96 struct {NimStringDesc* strVal;
97 } _kind_3;
98 struct {tyObject_TSym__nnJKJFyjDGi5mnv8jwfTGQ* sym;
99 } _kind_4;
100 struct {tyObject_TIdent__1LTsGP7bSxg45u9aHcxh6OA* ident;
101 } _kind_5;
102 struct {tySequence__ehmV9bTklH2Gt9cXHV9c0HLeQ* sons;
103 } _kind_6;
104 };
105 };
106 typedef NU8 tyEnum_TNimKind__jIBKr1ejBgsfM33Kxw4j7A;
107 typedef NU8 tySet_tyEnum_TNimTypeFlag__v8QUszD1sWlSIWZz7mC4bQ;
108 typedef N_NIMCALL_PTR(void, tyProc__ojoeKfW4VYIm36I9cpDTQIg) (void* p, NI op);
109 typedef N_NIMCALL_PTR(void*, tyProc__WSm2xU5ARYv9aAR4l0z9c9auQ) (void* p);
110 struct TNimType {
111 NI size;
112 NI align;
113 tyEnum_TNimKind__jIBKr1ejBgsfM33Kxw4j7A kind;
114 tySet_tyEnum_TNimTypeFlag__v8QUszD1sWlSIWZz7mC4bQ flags;
115 TNimType* base;
116 TNimNode* node;
117 void* finalizer;
118 tyProc__ojoeKfW4VYIm36I9cpDTQIg marker;
119 tyProc__WSm2xU5ARYv9aAR4l0z9c9auQ deepcopy;
120 };
121 struct RootObj {
122 TNimType* m_type;
123 };
124 struct tyObject_ItemId__ozxAxZLHTQ9c3akTzYvt67g {
125 NI32 module;
126 NI32 item;
127 };
128 struct tyObject_TIdObj__KUwfjfUQEwGHguQbTcXu7w {
129   RootObj Sup;
130 tyObject_ItemId__ozxAxZLHTQ9c3akTzYvt67g itemId;
131 };
132 typedef NU8 tyEnum_TSymKind__cNCW9acsSznmEccl1fgQwkw;
133 typedef NU16 tyEnum_TMagic__shZhZOdbVC5nnFvcXQAImg;
134 typedef NU64 tySet_tyEnum_TSymFlag__K9ay6LWMat9bUiT9bIbMxpDHw;
135 typedef NU32 tySet_tyEnum_TOption__WspMeQySXNP2XoTWR5MTgg;
136 typedef NU8 tyEnum_TLocKind__O7PRFZKuiBBWbku09cayVBg;
137 typedef NU8 tyEnum_TStorageLoc__JK9cKMX3XnqHaUky9b6gkGEw;
138 typedef NU16 tySet_tyEnum_TLocFlag__o2bqJgR4ceIupnUSpxiudA;
139 struct tyObject_TLoc__EtHNvCB0bgfu9bFjzx9cb6aA {
140 tyEnum_TLocKind__O7PRFZKuiBBWbku09cayVBg k;
141 tyEnum_TStorageLoc__JK9cKMX3XnqHaUky9b6gkGEw storage;
142 tySet_tyEnum_TLocFlag__o2bqJgR4ceIupnUSpxiudA flags;
143 tyObject_TNode__bROa11lyF5vxEN9aYNbHmhw* lode;
144 tyObject_RopeObj__OFzf0kSiPTcNreUIeJgWVA* r;
145 };
146 struct tyObject_TSym__nnJKJFyjDGi5mnv8jwfTGQ {
147   tyObject_TIdObj__KUwfjfUQEwGHguQbTcXu7w Sup;
148 tyEnum_TSymKind__cNCW9acsSznmEccl1fgQwkw kind;
149 union{
150 struct {tyObject_TSym__nnJKJFyjDGi5mnv8jwfTGQ* gcUnsafetyReason;
151 tyObject_TNode__bROa11lyF5vxEN9aYNbHmhw* transformedBody;
152 } _kind_1;
153 struct {tyObject_TSym__nnJKJFyjDGi5mnv8jwfTGQ* guard;
154 NI bitsize;
155 NI alignment;
156 } _kind_2;
157 };
158 tyEnum_TMagic__shZhZOdbVC5nnFvcXQAImg magic;
159 tyObject_TType__facALICuu8zUj0hjvbTLFg* typ;
160 tyObject_TIdent__1LTsGP7bSxg45u9aHcxh6OA* name;
161 tyObject_TLineInfo__WGx4rAexNXnczy1Avn646Q info;
162 tyObject_TSym__nnJKJFyjDGi5mnv8jwfTGQ* owner;
163 tySet_tyEnum_TSymFlag__K9ay6LWMat9bUiT9bIbMxpDHw flags;
164 tyObject_TNode__bROa11lyF5vxEN9aYNbHmhw* ast;
165 tySet_tyEnum_TOption__WspMeQySXNP2XoTWR5MTgg options;
166 NI position;
167 NI offset;
168 tyObject_TLoc__EtHNvCB0bgfu9bFjzx9cb6aA loc;
169 tyObject_TLib__NBMxlJ6g3utqUlplqTTHkA* annex;
170 tyObject_TNode__bROa11lyF5vxEN9aYNbHmhw* constraint;
171 };
172 typedef NU8 tyEnum_TNimNodeKind__unfNsxrcATrufDZmpBq4HQ;
173 struct TNimNode {
174 tyEnum_TNimNodeKind__unfNsxrcATrufDZmpBq4HQ kind;
175 NI offset;
176 TNimType* typ;
177 NCSTRING name;
178 NI len;
179 TNimNode** sons;
180 };
181 struct tyObject_Cell__1zcF9cV8XIAtbN8h5HRUB8g {
182 NI refcount;
183 TNimType* typ;
184 };
185 struct tyObject_GcStack__7fytPA5bBsob6See21YMRA {
186 void* bottom;
187 };
188 struct tyObject_CellSeq__Axo1XVm9aaQueTOldv8le5w {
189 NI len;
190 NI cap;
191 tyObject_Cell__1zcF9cV8XIAtbN8h5HRUB8g** d;
192 };
193 typedef tyObject_SmallChunk__tXn60W2f8h3jgAYdEmy5NQ* tyArray__SPr7N6UKfuF549bNPiUvSRw[256];
194 typedef NU32 tyArray__BHbOSqU1t9b3Gt7K2c6fQig[24];
195 typedef tyObject_BigChunk__Rv9c70Uhp2TytkX7eH78qEg* tyArray__N1u1nqOgmuJN9cSZrnMHgOQ[32];
196 typedef tyArray__N1u1nqOgmuJN9cSZrnMHgOQ tyArray__B6durA4ZCi1xjJvRtyYxMg[24];
197 typedef tyObject_Trunk__W0r8S0Y3UGke6T9bIUWnnuw* tyArray__lh2A89ahMmYg9bCmpVaplLbA[256];
198 struct tyObject_IntSet__EZObFrE3NC9bIb3YMkY9crZA {
199 tyArray__lh2A89ahMmYg9bCmpVaplLbA data;
200 };
201 typedef tyObject_AvlNode__IaqjtwKhxLEpvDS9bct9blEw* tyArray__0aOLqZchNi8nWtMTi8ND8w[2];
202 struct tyObject_AvlNode__IaqjtwKhxLEpvDS9bct9blEw {
203 tyArray__0aOLqZchNi8nWtMTi8ND8w link;
204 NI key;
205 NI upperBound;
206 NI level;
207 };
208 struct tyTuple__ujsjpB2O9cjj3uDHsXbnSzg {
209 tyObject_BigChunk__Rv9c70Uhp2TytkX7eH78qEg* Field0;
210 NI Field1;
211 };
212 typedef tyTuple__ujsjpB2O9cjj3uDHsXbnSzg tyArray__LzOv2eCDGiceMKQstCLmhw[30];
213 struct tyObject_HeapLinks__PDV1HBZ8CQSQJC9aOBFNRSg {
214 NI len;
215 tyArray__LzOv2eCDGiceMKQstCLmhw chunks;
216 tyObject_HeapLinks__PDV1HBZ8CQSQJC9aOBFNRSg* next;
217 };
218 struct tyObject_MemRegion__x81NhDv59b8ercDZ9bi85jyg {
219 NI minLargeObj;
220 NI maxLargeObj;
221 tyArray__SPr7N6UKfuF549bNPiUvSRw freeSmallChunks;
222 NU32 flBitmap;
223 tyArray__BHbOSqU1t9b3Gt7K2c6fQig slBitmap;
224 tyArray__B6durA4ZCi1xjJvRtyYxMg matrix;
225 tyObject_LLChunk__XsENErzHIZV9bhvyJx56wGw* llmem;
226 NI currMem;
227 NI maxMem;
228 NI freeMem;
229 NI occ;
230 NI lastSize;
231 tyObject_IntSet__EZObFrE3NC9bIb3YMkY9crZA chunkStarts;
232 tyObject_AvlNode__IaqjtwKhxLEpvDS9bct9blEw* root;
233 tyObject_AvlNode__IaqjtwKhxLEpvDS9bct9blEw* deleted;
234 tyObject_AvlNode__IaqjtwKhxLEpvDS9bct9blEw* last;
235 tyObject_AvlNode__IaqjtwKhxLEpvDS9bct9blEw* freeAvlNodes;
236 NIM_BOOL locked;
237 NIM_BOOL blockChunkSizeIncrease;
238 NI nextChunkSize;
239 tyObject_AvlNode__IaqjtwKhxLEpvDS9bct9blEw bottomData;
240 tyObject_HeapLinks__PDV1HBZ8CQSQJC9aOBFNRSg heapLinks;
241 };
242 struct tyObject_GcStat__0RwLoVBHZPfUAcLczmfQAg {
243 NI stackScans;
244 NI cycleCollections;
245 NI maxThreshold;
246 NI maxStackSize;
247 NI maxStackCells;
248 NI cycleTableSize;
249 NI64 maxPause;
250 };
251 struct tyObject_CellSet__jG87P0AI9aZtss9ccTYBIISQ {
252 NI counter;
253 NI max;
254 tyObject_PageDesc__fublkgIY4LG3mT51LU2WHg* head;
255 tyObject_PageDesc__fublkgIY4LG3mT51LU2WHg** data;
256 };
257 struct tyObject_GcHeap__1TRH1TZMaVZTnLNcIHuNFQ {
258 tyObject_GcStack__7fytPA5bBsob6See21YMRA stack;
259 NI cycleThreshold;
260 NI zctThreshold;
261 tyObject_CellSeq__Axo1XVm9aaQueTOldv8le5w zct;
262 tyObject_CellSeq__Axo1XVm9aaQueTOldv8le5w decStack;
263 tyObject_CellSeq__Axo1XVm9aaQueTOldv8le5w tempStack;
264 NI recGcLock;
265 tyObject_MemRegion__x81NhDv59b8ercDZ9bi85jyg region;
266 tyObject_GcStat__0RwLoVBHZPfUAcLczmfQAg stat;
267 tyObject_CellSet__jG87P0AI9aZtss9ccTYBIISQ marked;
268 tyObject_CellSeq__Axo1XVm9aaQueTOldv8le5w additionalRoots;
269 NI gcThreadId;
270 };
271 struct tyObject_TIdent__1LTsGP7bSxg45u9aHcxh6OA {
272 NI id;
273 NimStringDesc* s;
274 tyObject_TIdent__1LTsGP7bSxg45u9aHcxh6OA* next;
275 NI h;
276 };
277 typedef NU8 tyEnum_TNodeFlag__jyh9acXHkhZANSSvPIY7ZLg;
278 typedef NI tyArray__emiAJ8okywrJw7ZHLzlXbQ[34];
279 struct tyObject_PackedSet__IhxwDBRi51nGrosBGFKcsA {
280 NI elems;
281 NI counter;
282 NI max;
283 tyObject_TrunkcolonObjectType___POcWT53G7t0BSUjc31o0iA* head;
284 tySequence__Bre9bNyuQOg1EJKitjSzn8w* data;
285 tyArray__emiAJ8okywrJw7ZHLzlXbQ a;
286 };
287 typedef NU tyArray__cC4ce9cdvDKtIpar5g9cDejA[16];
288 struct tyObject_TrunkcolonObjectType___POcWT53G7t0BSUjc31o0iA {
289 tyObject_TrunkcolonObjectType___POcWT53G7t0BSUjc31o0iA* next;
290 NI key;
291 tyArray__cC4ce9cdvDKtIpar5g9cDejA bits;
292 };
293 typedef NU8 tySet_tyEnum_TTypeKind__9a3YiReNVD0IJHWFKgXRe9ag[9];
294 typedef NU8 tyEnum_TTypeKind__9a3YiReNVD0IJHWFKgXRe9ag;
295 typedef NU8 tyEnum_TCallingConvention__yjAJ8w0h1PBaSwSGJ3P7IA;
296 typedef NU64 tySet_tyEnum_TTypeFlag__x2m5g1NpbmDig4wLT3Ylhw;
297 struct tyObject_TType__facALICuu8zUj0hjvbTLFg {
298   tyObject_TIdObj__KUwfjfUQEwGHguQbTcXu7w Sup;
299 tyEnum_TTypeKind__9a3YiReNVD0IJHWFKgXRe9ag kind;
300 tyEnum_TCallingConvention__yjAJ8w0h1PBaSwSGJ3P7IA callConv;
301 tySet_tyEnum_TTypeFlag__x2m5g1NpbmDig4wLT3Ylhw flags;
302 tySequence__9aZVGG5Gtti9cC9bqRpXCtA3A* sons;
303 tyObject_TNode__bROa11lyF5vxEN9aYNbHmhw* n;
304 tyObject_TSym__nnJKJFyjDGi5mnv8jwfTGQ* owner;
305 tyObject_TSym__nnJKJFyjDGi5mnv8jwfTGQ* sym;
306 NI64 size;
307 NI16 align;
308 NI16 paddingAtEnd;
309 NI16 lockLevel;
310 tyObject_TLoc__EtHNvCB0bgfu9bFjzx9cb6aA loc;
311 tyObject_TType__facALICuu8zUj0hjvbTLFg* typeInst;
312 tyObject_ItemId__ozxAxZLHTQ9c3akTzYvt67g uniqueId;
313 };
314 struct tySequence__ehmV9bTklH2Gt9cXHV9c0HLeQ {
315   TGenericSeq Sup;
316   tyObject_TNode__bROa11lyF5vxEN9aYNbHmhw* data[SEQ_DECL_SIZE];
317 };
318 struct tySequence__Bre9bNyuQOg1EJKitjSzn8w {
319   TGenericSeq Sup;
320   tyObject_TrunkcolonObjectType___POcWT53G7t0BSUjc31o0iA* data[SEQ_DECL_SIZE];
321 };
322 struct tySequence__9aZVGG5Gtti9cC9bqRpXCtA3A {
323   TGenericSeq Sup;
324   tyObject_TType__facALICuu8zUj0hjvbTLFg* data[SEQ_DECL_SIZE];
325 };
326 static N_INLINE(void, nimZeroMem)(void* p, NI size);
327 static N_INLINE(void, nimSetMem__systemZmemory_7)(void* a, int v, NI size);
328 N_LIB_PRIVATE N_NIMCALL(void, analyse__optimizer_170)(tyObject_Con__QbIMFB4loKCf0ZFA2SwcWQ* c, tyObject_BasicBlock__BqJRpBqlD9bKSJMY28pMcmg* b, tyObject_TNode__bROa11lyF5vxEN9aYNbHmhw* n);
329 N_LIB_PRIVATE N_NIMCALL(TGenericSeq*, incrSeqV3)(TGenericSeq* s, TNimType* typ);
330 N_LIB_PRIVATE N_NIMCALL(void, unsureAsgnRef)(void** dest, void* src);
331 static N_INLINE(void, asgnRef)(void** dest, void* src);
332 static N_INLINE(void, incRef__system_5308)(tyObject_Cell__1zcF9cV8XIAtbN8h5HRUB8g* c);
333 static N_INLINE(NI, pluspercent___system_696)(NI x, NI y);
334 static N_INLINE(tyObject_Cell__1zcF9cV8XIAtbN8h5HRUB8g*, usrToCell__system_5270)(void* usr);
335 static N_INLINE(NI, minuspercent___system_716)(NI x, NI y);
336 static N_INLINE(void, decRef__system_5315)(tyObject_Cell__1zcF9cV8XIAtbN8h5HRUB8g* c);
337 static N_INLINE(NIM_BOOL, ltpercent___system_1005)(NI x, NI y);
338 static N_INLINE(void, rtlAddZCT__system_5313)(tyObject_Cell__1zcF9cV8XIAtbN8h5HRUB8g* c);
339 N_LIB_PRIVATE N_NOINLINE(void, addZCT__system_5264)(tyObject_CellSeq__Axo1XVm9aaQueTOldv8le5w* s, tyObject_Cell__1zcF9cV8XIAtbN8h5HRUB8g* c);
340 static N_INLINE(NIM_BOOL, eqStrings)(NimStringDesc* a, NimStringDesc* b);
341 static N_INLINE(NIM_BOOL, equalMem__system_1735)(void* a, void* b, NI size);
342 static N_INLINE(int, nimCmpMem)(void* a, void* b, NI size);
343 N_LIB_PRIVATE N_NIMCALL(void, wasMovedDestroyPair__optimizer_144)(tyObject_Con__QbIMFB4loKCf0ZFA2SwcWQ* c, tyObject_BasicBlock__BqJRpBqlD9bKSJMY28pMcmg* b, tyObject_TNode__bROa11lyF5vxEN9aYNbHmhw* d);
344 N_LIB_PRIVATE N_NIMCALL(NIM_BOOL, exprStructuralEquivalent__trees_56)(tyObject_TNode__bROa11lyF5vxEN9aYNbHmhw* a, tyObject_TNode__bROa11lyF5vxEN9aYNbHmhw* b, NIM_BOOL strictSymEquality);
345 static N_INLINE(tyObject_TNode__bROa11lyF5vxEN9aYNbHmhw*, skipAddr__ast_5218)(tyObject_TNode__bROa11lyF5vxEN9aYNbHmhw* n);
346 N_LIB_PRIVATE N_NIMCALL(void, del__closureiters_3571)(tySequence__ehmV9bTklH2Gt9cXHV9c0HLeQ** x, NI i);
347 static N_INLINE(NI, len__ast_3198)(tyObject_TNode__bROa11lyF5vxEN9aYNbHmhw* n);
348 N_LIB_PRIVATE N_NIMCALL(NIM_BOOL, canRaise__ast_5088)(tyObject_TNode__bROa11lyF5vxEN9aYNbHmhw* fn);
349 N_LIB_PRIVATE N_NIMCALL(void, returnStmt__optimizer_67)(tyObject_BasicBlock__BqJRpBqlD9bKSJMY28pMcmg* b);
350 N_LIB_PRIVATE N_NIMCALL(TGenericSeq*, setLengthSeqV2)(TGenericSeq* s, TNimType* typ, NI newLen);
351 N_LIB_PRIVATE N_NIMCALL(void, invalidateWasMoved__optimizer_128)(tyObject_BasicBlock__BqJRpBqlD9bKSJMY28pMcmg* c, tyObject_TNode__bROa11lyF5vxEN9aYNbHmhw* x);
352 N_LIB_PRIVATE N_NIMCALL(void, nestedBlock__optimizer_17)(tyObject_BasicBlock__BqJRpBqlD9bKSJMY28pMcmg* parent, tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw kind, tyObject_BasicBlock__BqJRpBqlD9bKSJMY28pMcmg* Result);
353 static N_INLINE(void, mergeBasicBlockInfo__optimizer_78)(tyObject_BasicBlock__BqJRpBqlD9bKSJMY28pMcmg* parent, tyObject_BasicBlock__BqJRpBqlD9bKSJMY28pMcmg this_0);
354 N_LIB_PRIVATE N_NIMCALL(void, intersect__optimizer_103)(tySequence__ehmV9bTklH2Gt9cXHV9c0HLeQ** summary, tySequence__ehmV9bTklH2Gt9cXHV9c0HLeQ* branch);
355 static N_INLINE(void, initIntSet__pureZcollectionsZintsets_238)(tyObject_PackedSet__IhxwDBRi51nGrosBGFKcsA* Result);
356 N_LIB_PRIVATE N_NIMCALL(void, initPackedSet__pureZcollectionsZintsets_16)(tyObject_PackedSet__IhxwDBRi51nGrosBGFKcsA* Result);
357 N_LIB_PRIVATE N_NIMCALL(NIM_BOOL, wasMovedTarget__optimizer_85)(tyObject_PackedSet__IhxwDBRi51nGrosBGFKcsA* matches, tySequence__ehmV9bTklH2Gt9cXHV9c0HLeQ* branch, tyObject_TNode__bROa11lyF5vxEN9aYNbHmhw* moveTarget);
358 N_LIB_PRIVATE N_NIMCALL(void, incl__pureZcollectionsZintsets_55)(tyObject_PackedSet__IhxwDBRi51nGrosBGFKcsA* s, NI key);
359 N_LIB_PRIVATE N_NIMCALL(tyObject_TType__facALICuu8zUj0hjvbTLFg*, skipTypes__ast_3735)(tyObject_TType__facALICuu8zUj0hjvbTLFg* t, tySet_tyEnum_TTypeKind__9a3YiReNVD0IJHWFKgXRe9ag kinds);
360 N_LIB_PRIVATE N_NIMCALL(void, breakStmt__optimizer_43)(tyObject_BasicBlock__BqJRpBqlD9bKSJMY28pMcmg* b, tyObject_TNode__bROa11lyF5vxEN9aYNbHmhw* n);
361 static N_INLINE(NI, safeLen__ast_3191)(tyObject_TNode__bROa11lyF5vxEN9aYNbHmhw* n);
362 N_LIB_PRIVATE N_NIMCALL(tyObject_TNode__bROa11lyF5vxEN9aYNbHmhw*, shallowCopy__ast_4413)(tyObject_TNode__bROa11lyF5vxEN9aYNbHmhw* src);
363 N_LIB_PRIVATE N_NIMCALL(void, opt__optimizer_350)(tyObject_Con__QbIMFB4loKCf0ZFA2SwcWQ c, tyObject_TNode__bROa11lyF5vxEN9aYNbHmhw* n, tyObject_TNode__bROa11lyF5vxEN9aYNbHmhw* parent, NI parentPos);
364 N_LIB_PRIVATE N_NIMCALL(tyObject_TNode__bROa11lyF5vxEN9aYNbHmhw*, newNodeI__ast_3356)(tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw kind, tyObject_TLineInfo__WGx4rAexNXnczy1Avn646Q info);
365 extern TNimType NTItnodeseq__ehmV9bTklH2Gt9cXHV9c0HLeQ_;
366 STRING_LITERAL(TM__zdBS9bxu9aeb3QPAJFgGx9cyQ_2, "=destroy", 8);
367 STRING_LITERAL(TM__zdBS9bxu9aeb3QPAJFgGx9cyQ_3, "=sink", 5);
368 static NIM_CONST tySet_tyEnum_TTypeKind__9a3YiReNVD0IJHWFKgXRe9ag TM__zdBS9bxu9aeb3QPAJFgGx9cyQ_4 = {
369 0x10, 0xa8, 0x90, 0x00, 0x00, 0x60, 0x80, 0x00,
370 0x00}
371 ;
372 extern tyObject_GcHeap__1TRH1TZMaVZTnLNcIHuNFQ gch__system_5217;
N_INLINE(void,nimSetMem__systemZmemory_7)373 static N_INLINE(void, nimSetMem__systemZmemory_7)(void* a, int v, NI size) {
374 	void* T1_;
375 	T1_ = (void*)0;
376 	T1_ = memset(a, v, ((size_t) (size)));
377 }
N_INLINE(void,nimZeroMem)378 static N_INLINE(void, nimZeroMem)(void* p, NI size) {
379 	nimSetMem__systemZmemory_7(p, ((int) 0), size);
380 }
N_INLINE(NI,pluspercent___system_696)381 static N_INLINE(NI, pluspercent___system_696)(NI x, NI y) {
382 	NI result;
383 	result = (NI)0;
384 	result = ((NI) ((NU)((NU32)(((NU) (x))) + (NU32)(((NU) (y))))));
385 	return result;
386 }
N_INLINE(void,incRef__system_5308)387 static N_INLINE(void, incRef__system_5308)(tyObject_Cell__1zcF9cV8XIAtbN8h5HRUB8g* c) {
388 	(*c).refcount = pluspercent___system_696((*c).refcount, ((NI) 8));
389 }
N_INLINE(NI,minuspercent___system_716)390 static N_INLINE(NI, minuspercent___system_716)(NI x, NI y) {
391 	NI result;
392 	result = (NI)0;
393 	result = ((NI) ((NU)((NU32)(((NU) (x))) - (NU32)(((NU) (y))))));
394 	return result;
395 }
N_INLINE(tyObject_Cell__1zcF9cV8XIAtbN8h5HRUB8g *,usrToCell__system_5270)396 static N_INLINE(tyObject_Cell__1zcF9cV8XIAtbN8h5HRUB8g*, usrToCell__system_5270)(void* usr) {
397 	tyObject_Cell__1zcF9cV8XIAtbN8h5HRUB8g* result;
398 	NI T1_;
399 	result = (tyObject_Cell__1zcF9cV8XIAtbN8h5HRUB8g*)0;
400 	T1_ = (NI)0;
401 	T1_ = minuspercent___system_716(((NI) (ptrdiff_t) (usr)), ((NI) 8));
402 	result = ((tyObject_Cell__1zcF9cV8XIAtbN8h5HRUB8g*) (T1_));
403 	return result;
404 }
N_INLINE(NIM_BOOL,ltpercent___system_1005)405 static N_INLINE(NIM_BOOL, ltpercent___system_1005)(NI x, NI y) {
406 	NIM_BOOL result;
407 	result = (NIM_BOOL)0;
408 	result = ((NU32)(((NU) (x))) < (NU32)(((NU) (y))));
409 	return result;
410 }
N_INLINE(void,rtlAddZCT__system_5313)411 static N_INLINE(void, rtlAddZCT__system_5313)(tyObject_Cell__1zcF9cV8XIAtbN8h5HRUB8g* c) {
412 	addZCT__system_5264((&gch__system_5217.zct), c);
413 }
N_INLINE(void,decRef__system_5315)414 static N_INLINE(void, decRef__system_5315)(tyObject_Cell__1zcF9cV8XIAtbN8h5HRUB8g* c) {
415 	(*c).refcount = minuspercent___system_716((*c).refcount, ((NI) 8));
416 	{
417 		NIM_BOOL T3_;
418 		T3_ = (NIM_BOOL)0;
419 		T3_ = ltpercent___system_1005((*c).refcount, ((NI) 8));
420 		if (!T3_) goto LA4_;
421 		rtlAddZCT__system_5313(c);
422 	}
423 	LA4_: ;
424 }
N_INLINE(void,asgnRef)425 static N_INLINE(void, asgnRef)(void** dest, void* src) {
426 	{
427 		tyObject_Cell__1zcF9cV8XIAtbN8h5HRUB8g* T5_;
428 		if (!!((src == NIM_NIL))) goto LA3_;
429 		T5_ = (tyObject_Cell__1zcF9cV8XIAtbN8h5HRUB8g*)0;
430 		T5_ = usrToCell__system_5270(src);
431 		incRef__system_5308(T5_);
432 	}
433 	LA3_: ;
434 	{
435 		tyObject_Cell__1zcF9cV8XIAtbN8h5HRUB8g* T10_;
436 		if (!!(((*dest) == NIM_NIL))) goto LA8_;
437 		T10_ = (tyObject_Cell__1zcF9cV8XIAtbN8h5HRUB8g*)0;
438 		T10_ = usrToCell__system_5270((*dest));
439 		decRef__system_5315(T10_);
440 	}
441 	LA8_: ;
442 	(*dest) = src;
443 }
N_INLINE(int,nimCmpMem)444 static N_INLINE(int, nimCmpMem)(void* a, void* b, NI size) {
445 	int result;
446 	result = (int)0;
447 	result = memcmp(a, b, ((size_t) (size)));
448 	return result;
449 }
N_INLINE(NIM_BOOL,equalMem__system_1735)450 static N_INLINE(NIM_BOOL, equalMem__system_1735)(void* a, void* b, NI size) {
451 	NIM_BOOL result;
452 	int T1_;
453 	result = (NIM_BOOL)0;
454 	T1_ = (int)0;
455 	T1_ = nimCmpMem(a, b, size);
456 	result = (T1_ == ((NI32) 0));
457 	return result;
458 }
N_INLINE(NIM_BOOL,eqStrings)459 static N_INLINE(NIM_BOOL, eqStrings)(NimStringDesc* a, NimStringDesc* b) {
460 	NIM_BOOL result;
461 	NI alen;
462 	NI blen;
463 {	result = (NIM_BOOL)0;
464 	alen = (a ? a->Sup.len : 0);
465 	blen = (b ? b->Sup.len : 0);
466 	{
467 		if (!(alen == blen)) goto LA3_;
468 		{
469 			if (!(alen == ((NI) 0))) goto LA7_;
470 			result = NIM_TRUE;
471 			goto BeforeRet_;
472 		}
473 		LA7_: ;
474 		result = equalMem__system_1735(((void*) ((&a->data[((NI) 0)]))), ((void*) ((&b->data[((NI) 0)]))), ((NI) (alen)));
475 		goto BeforeRet_;
476 	}
477 	LA3_: ;
478 	}BeforeRet_: ;
479 	return result;
480 }
N_INLINE(tyObject_TNode__bROa11lyF5vxEN9aYNbHmhw *,skipAddr__ast_5218)481 static N_INLINE(tyObject_TNode__bROa11lyF5vxEN9aYNbHmhw*, skipAddr__ast_5218)(tyObject_TNode__bROa11lyF5vxEN9aYNbHmhw* n) {
482 	tyObject_TNode__bROa11lyF5vxEN9aYNbHmhw* result;
483 	result = NIM_NIL;
484 	{
485 		if (!((*n).kind == ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 64))) goto LA3_;
486 		result = (*n)._kind_6.sons->data[((NI) 0)];
487 	}
488 	goto LA1_;
489 	LA3_: ;
490 	{
491 		result = n;
492 	}
493 	LA1_: ;
494 	return result;
495 }
N_NIMCALL(void,wasMovedDestroyPair__optimizer_144)496 N_LIB_PRIVATE N_NIMCALL(void, wasMovedDestroyPair__optimizer_144)(tyObject_Con__QbIMFB4loKCf0ZFA2SwcWQ* c, tyObject_BasicBlock__BqJRpBqlD9bKSJMY28pMcmg* b, tyObject_TNode__bROa11lyF5vxEN9aYNbHmhw* d) {
497 	NI i;
498 	i = ((NI) 0);
499 	{
500 		while (1) {
501 			NI T3_;
502 			T3_ = ((*b).wasMovedLocs ? (*b).wasMovedLocs->Sup.len : 0);
503 			if (!(i < T3_)) goto LA2;
504 			{
505 				tyObject_TNode__bROa11lyF5vxEN9aYNbHmhw* T6_;
506 				tyObject_TNode__bROa11lyF5vxEN9aYNbHmhw* T7_;
507 				NIM_BOOL T8_;
508 				T6_ = NIM_NIL;
509 				T6_ = skipAddr__ast_5218((*(*b).wasMovedLocs->data[i])._kind_6.sons->data[((NI) 1)]);
510 				T7_ = NIM_NIL;
511 				T7_ = skipAddr__ast_5218((*d)._kind_6.sons->data[((NI) 1)]);
512 				T8_ = (NIM_BOOL)0;
513 				T8_ = exprStructuralEquivalent__trees_56(T6_, T7_, NIM_TRUE);
514 				if (!T8_) goto LA9_;
515 				(*(*b).wasMovedLocs->data[i]).flags |= ((NU32)1)<<((((tyEnum_TNodeFlag__jyh9acXHkhZANSSvPIY7ZLg) 0)) & 31);
516 				(*c).somethingTodo = NIM_TRUE;
517 				(*d).flags |= ((NU32)1)<<((((tyEnum_TNodeFlag__jyh9acXHkhZANSSvPIY7ZLg) 0)) & 31);
518 				del__closureiters_3571((&(*b).wasMovedLocs), ((NI) (i)));
519 			}
520 			goto LA4_;
521 			LA9_: ;
522 			{
523 				i += ((NI) 1);
524 			}
525 			LA4_: ;
526 		} LA2: ;
527 	}
528 }
N_INLINE(NI,len__ast_3198)529 static N_INLINE(NI, len__ast_3198)(tyObject_TNode__bROa11lyF5vxEN9aYNbHmhw* n) {
530 	NI result;
531 	NI T1_;
532 	result = (NI)0;
533 	T1_ = ((*n)._kind_6.sons ? (*n)._kind_6.sons->Sup.len : 0);
534 	result = T1_;
535 	return result;
536 }
N_NIMCALL(void,returnStmt__optimizer_67)537 N_LIB_PRIVATE N_NIMCALL(void, returnStmt__optimizer_67)(tyObject_BasicBlock__BqJRpBqlD9bKSJMY28pMcmg* b) {
538 	tyObject_BasicBlock__BqJRpBqlD9bKSJMY28pMcmg* it;
539 	(*b).hasReturn = NIM_TRUE;
540 	it = b;
541 	{
542 		while (1) {
543 			if (!!((it == ((tyObject_BasicBlock__BqJRpBqlD9bKSJMY28pMcmg*) NIM_NIL)))) goto LA2;
544 			unsureAsgnRef((void**) (&(*it).wasMovedLocs), (tySequence__ehmV9bTklH2Gt9cXHV9c0HLeQ*) setLengthSeqV2(&((*it).wasMovedLocs)->Sup, (&NTItnodeseq__ehmV9bTklH2Gt9cXHV9c0HLeQ_), ((NI) 0)));
545 			it = (*it).parent;
546 		} LA2: ;
547 	}
548 }
N_NIMCALL(void,invalidateWasMoved__optimizer_128)549 N_LIB_PRIVATE N_NIMCALL(void, invalidateWasMoved__optimizer_128)(tyObject_BasicBlock__BqJRpBqlD9bKSJMY28pMcmg* c, tyObject_TNode__bROa11lyF5vxEN9aYNbHmhw* x) {
550 	NI i;
551 	i = ((NI) 0);
552 	{
553 		while (1) {
554 			NI T3_;
555 			T3_ = ((*c).wasMovedLocs ? (*c).wasMovedLocs->Sup.len : 0);
556 			if (!(i < T3_)) goto LA2;
557 			{
558 				tyObject_TNode__bROa11lyF5vxEN9aYNbHmhw* T6_;
559 				NIM_BOOL T7_;
560 				T6_ = NIM_NIL;
561 				T6_ = skipAddr__ast_5218((*(*c).wasMovedLocs->data[i])._kind_6.sons->data[((NI) 1)]);
562 				T7_ = (NIM_BOOL)0;
563 				T7_ = exprStructuralEquivalent__trees_56(T6_, x, NIM_TRUE);
564 				if (!T7_) goto LA8_;
565 				del__closureiters_3571((&(*c).wasMovedLocs), ((NI) (i)));
566 			}
567 			goto LA4_;
568 			LA8_: ;
569 			{
570 				i += ((NI) 1);
571 			}
572 			LA4_: ;
573 		} LA2: ;
574 	}
575 }
N_NIMCALL(void,nestedBlock__optimizer_17)576 N_LIB_PRIVATE N_NIMCALL(void, nestedBlock__optimizer_17)(tyObject_BasicBlock__BqJRpBqlD9bKSJMY28pMcmg* parent, tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw kind, tyObject_BasicBlock__BqJRpBqlD9bKSJMY28pMcmg* Result) {
577 	unsureAsgnRef((void**)&(*Result).wasMovedLocs, NIM_NIL);
578 	(*Result).kind = 0;
579 	(*Result).hasReturn = 0;
580 	(*Result).hasBreak = 0;
581 	unsureAsgnRef((void**)&(*Result).label, NIM_NIL);
582 	(*Result).parent = NIM_NIL;
583 	unsureAsgnRef((void**) (&(*Result).wasMovedLocs), NIM_NIL);
584 	(*Result).kind = kind;
585 	(*Result).hasReturn = NIM_FALSE;
586 	(*Result).hasBreak = NIM_FALSE;
587 	unsureAsgnRef((void**) (&(*Result).label), ((tyObject_TSym__nnJKJFyjDGi5mnv8jwfTGQ*) NIM_NIL));
588 	(*Result).parent = parent;
589 }
N_INLINE(void,mergeBasicBlockInfo__optimizer_78)590 static N_INLINE(void, mergeBasicBlockInfo__optimizer_78)(tyObject_BasicBlock__BqJRpBqlD9bKSJMY28pMcmg* parent, tyObject_BasicBlock__BqJRpBqlD9bKSJMY28pMcmg this_0) {
591 	{
592 		if (!this_0.hasReturn) goto LA3_;
593 		unsureAsgnRef((void**) (&(*parent).wasMovedLocs), (tySequence__ehmV9bTklH2Gt9cXHV9c0HLeQ*) setLengthSeqV2(&((*parent).wasMovedLocs)->Sup, (&NTItnodeseq__ehmV9bTklH2Gt9cXHV9c0HLeQ_), ((NI) 0)));
594 		(*parent).hasReturn = NIM_TRUE;
595 	}
596 	LA3_: ;
597 }
N_INLINE(void,initIntSet__pureZcollectionsZintsets_238)598 static N_INLINE(void, initIntSet__pureZcollectionsZintsets_238)(tyObject_PackedSet__IhxwDBRi51nGrosBGFKcsA* Result) {
599 	initPackedSet__pureZcollectionsZintsets_16(Result);
600 }
N_NIMCALL(NIM_BOOL,wasMovedTarget__optimizer_85)601 N_LIB_PRIVATE N_NIMCALL(NIM_BOOL, wasMovedTarget__optimizer_85)(tyObject_PackedSet__IhxwDBRi51nGrosBGFKcsA* matches, tySequence__ehmV9bTklH2Gt9cXHV9c0HLeQ* branch, tyObject_TNode__bROa11lyF5vxEN9aYNbHmhw* moveTarget) {
602 	NIM_BOOL result;
603 	result = (NIM_BOOL)0;
604 	result = NIM_FALSE;
605 	{
606 		NI i;
607 		NI colontmp_;
608 		NI T2_;
609 		NI i_2;
610 		i = (NI)0;
611 		colontmp_ = (NI)0;
612 		T2_ = (branch ? branch->Sup.len : 0);
613 		colontmp_ = T2_;
614 		i_2 = ((NI) 0);
615 		{
616 			while (1) {
617 				if (!(i_2 < colontmp_)) goto LA4;
618 				i = i_2;
619 				{
620 					tyObject_TNode__bROa11lyF5vxEN9aYNbHmhw* T7_;
621 					NIM_BOOL T8_;
622 					T7_ = NIM_NIL;
623 					T7_ = skipAddr__ast_5218((*branch->data[i])._kind_6.sons->data[((NI) 1)]);
624 					T8_ = (NIM_BOOL)0;
625 					T8_ = exprStructuralEquivalent__trees_56(T7_, moveTarget, NIM_TRUE);
626 					if (!T8_) goto LA9_;
627 					result = NIM_TRUE;
628 					incl__pureZcollectionsZintsets_55(matches, i);
629 				}
630 				LA9_: ;
631 				i_2 += ((NI) 1);
632 			} LA4: ;
633 		}
634 	}
635 	return result;
636 }
N_NIMCALL(void,intersect__optimizer_103)637 N_LIB_PRIVATE N_NIMCALL(void, intersect__optimizer_103)(tySequence__ehmV9bTklH2Gt9cXHV9c0HLeQ** summary, tySequence__ehmV9bTklH2Gt9cXHV9c0HLeQ* branch) {
638 	NI i;
639 	tyObject_PackedSet__IhxwDBRi51nGrosBGFKcsA matches;
640 	i = ((NI) 0);
641 	nimZeroMem((void*)(&matches), sizeof(tyObject_PackedSet__IhxwDBRi51nGrosBGFKcsA));
642 	initIntSet__pureZcollectionsZintsets_238((&matches));
643 	{
644 		while (1) {
645 			NI T3_;
646 			T3_ = ((*summary) ? (*summary)->Sup.len : 0);
647 			if (!(i < T3_)) goto LA2;
648 			{
649 				tyObject_TNode__bROa11lyF5vxEN9aYNbHmhw* T6_;
650 				NIM_BOOL T7_;
651 				T6_ = NIM_NIL;
652 				T6_ = skipAddr__ast_5218((*(*summary)->data[i])._kind_6.sons->data[((NI) 1)]);
653 				T7_ = (NIM_BOOL)0;
654 				T7_ = wasMovedTarget__optimizer_85((&matches), branch, T6_);
655 				if (!T7_) goto LA8_;
656 				i += ((NI) 1);
657 			}
658 			goto LA4_;
659 			LA8_: ;
660 			{
661 				del__closureiters_3571(summary, ((NI) (i)));
662 			}
663 			LA4_: ;
664 		} LA2: ;
665 	}
666 	{
667 		NI m;
668 		m = (NI)0;
669 		{
670 			if (!(matches.elems <= ((NI) 34))) goto LA14_;
671 			{
672 				NI i_2;
673 				NI i_3;
674 				i_2 = (NI)0;
675 				i_3 = ((NI) 0);
676 				{
677 					while (1) {
678 						NI T19_;
679 						if (!(i_3 < matches.elems)) goto LA18;
680 						i_2 = i_3;
681 						m = matches.a[(i_2)- 0];
682 						unsureAsgnRef((void**) (&(*summary)), (tySequence__ehmV9bTklH2Gt9cXHV9c0HLeQ*) incrSeqV3((TGenericSeq*)((*summary)), (&NTItnodeseq__ehmV9bTklH2Gt9cXHV9c0HLeQ_)));
683 						T19_ = (*summary)->Sup.len++;
684 						asgnRef((void**) (&(*summary)->data[T19_]), branch->data[m]);
685 						i_3 += ((NI) 1);
686 					} LA18: ;
687 				}
688 			}
689 		}
690 		goto LA12_;
691 		LA14_: ;
692 		{
693 			tyObject_TrunkcolonObjectType___POcWT53G7t0BSUjc31o0iA* r;
694 			r = matches.head;
695 			{
696 				while (1) {
697 					NI i_4;
698 					if (!!((r == ((tyObject_TrunkcolonObjectType___POcWT53G7t0BSUjc31o0iA*) NIM_NIL)))) goto LA22;
699 					i_4 = ((NI) 0);
700 					{
701 						while (1) {
702 							NU w;
703 							NI j;
704 							if (!(i_4 <= ((NI) 15))) goto LA24;
705 							w = (*r).bits[(i_4)- 0];
706 							j = ((NI) 0);
707 							{
708 								while (1) {
709 									if (!!((w == ((NU) 0)))) goto LA26;
710 									{
711 										NI T31_;
712 										NI T32_;
713 										if (!!(((NU)(w & ((NU) 1)) == ((NU) 0)))) goto LA29_;
714 										T31_ = (NI)0;
715 										T31_ = pluspercent___system_696((NI)((NU32)(i_4) << (NU32)(((NI) 5))), j);
716 										m = (NI)((NI)((NU32)((*r).key) << (NU32)(((NI) 9))) | T31_);
717 										unsureAsgnRef((void**) (&(*summary)), (tySequence__ehmV9bTklH2Gt9cXHV9c0HLeQ*) incrSeqV3((TGenericSeq*)((*summary)), (&NTItnodeseq__ehmV9bTklH2Gt9cXHV9c0HLeQ_)));
718 										T32_ = (*summary)->Sup.len++;
719 										asgnRef((void**) (&(*summary)->data[T32_]), branch->data[m]);
720 									}
721 									LA29_: ;
722 									j += ((NI) 1);
723 									w = (NU)((NU32)(w) >> (NU32)(((NI) 1)));
724 								} LA26: ;
725 							}
726 							i_4 += ((NI) 1);
727 						} LA24: ;
728 					}
729 					r = (*r).next;
730 				} LA22: ;
731 			}
732 		}
733 		LA12_: ;
734 	}
735 }
N_NIMCALL(void,breakStmt__optimizer_43)736 N_LIB_PRIVATE N_NIMCALL(void, breakStmt__optimizer_43)(tyObject_BasicBlock__BqJRpBqlD9bKSJMY28pMcmg* b, tyObject_TNode__bROa11lyF5vxEN9aYNbHmhw* n) {
737 	tyObject_BasicBlock__BqJRpBqlD9bKSJMY28pMcmg* it;
738 	it = b;
739 	{
740 		while (1) {
741 			if (!!((it == ((tyObject_BasicBlock__BqJRpBqlD9bKSJMY28pMcmg*) NIM_NIL)))) goto LA2;
742 			unsureAsgnRef((void**) (&(*it).wasMovedLocs), (tySequence__ehmV9bTklH2Gt9cXHV9c0HLeQ*) setLengthSeqV2(&((*it).wasMovedLocs)->Sup, (&NTItnodeseq__ehmV9bTklH2Gt9cXHV9c0HLeQ_), ((NI) 0)));
743 			(*it).hasBreak = NIM_TRUE;
744 			{
745 				if (!((*n).kind == ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 3))) goto LA5_;
746 				{
747 					if (!((*it).label == (*n)._kind_4.sym)) goto LA9_;
748 					goto LA1;
749 				}
750 				LA9_: ;
751 			}
752 			goto LA3_;
753 			LA5_: ;
754 			{
755 				{
756 					if (!((*it).kind == ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 96) || (*it).kind == ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 112) || (*it).kind == ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 127))) goto LA14_;
757 					goto LA1;
758 				}
759 				LA14_: ;
760 			}
761 			LA3_: ;
762 			it = (*it).parent;
763 		} LA2: ;
764 	} LA1: ;
765 }
N_INLINE(NI,safeLen__ast_3191)766 static N_INLINE(NI, safeLen__ast_3191)(tyObject_TNode__bROa11lyF5vxEN9aYNbHmhw* n) {
767 	NI result;
768 	result = (NI)0;
769 	{
770 		if (!((*n).kind >= ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 0) && (*n).kind <= ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 23))) goto LA3_;
771 		result = ((NI) 0);
772 	}
773 	goto LA1_;
774 	LA3_: ;
775 	{
776 		result = len__ast_3198(n);
777 	}
778 	LA1_: ;
779 	return result;
780 }
N_NIMCALL(void,analyse__optimizer_170)781 N_LIB_PRIVATE N_NIMCALL(void, analyse__optimizer_170)(tyObject_Con__QbIMFB4loKCf0ZFA2SwcWQ* c, tyObject_BasicBlock__BqJRpBqlD9bKSJMY28pMcmg* b, tyObject_TNode__bROa11lyF5vxEN9aYNbHmhw* n) {
782 	switch ((*n).kind) {
783 	case ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 26) ... ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 32):
784 	{
785 		NIM_BOOL special;
786 		NIM_BOOL reverse;
787 		special = NIM_FALSE;
788 		reverse = NIM_FALSE;
789 		{
790 			tyObject_TSym__nnJKJFyjDGi5mnv8jwfTGQ* s;
791 			if (!((*(*n)._kind_6.sons->data[((NI) 0)]).kind == ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 3))) goto LA4_;
792 			s = (*(*n)._kind_6.sons->data[((NI) 0)])._kind_4.sym;
793 			{
794 				NI T10_;
795 				if (!((*s).magic == ((tyEnum_TMagic__shZhZOdbVC5nnFvcXQAImg) 149))) goto LA8_;
796 				unsureAsgnRef((void**) (&(*b).wasMovedLocs), (tySequence__ehmV9bTklH2Gt9cXHV9c0HLeQ*) incrSeqV3((TGenericSeq*)((*b).wasMovedLocs), (&NTItnodeseq__ehmV9bTklH2Gt9cXHV9c0HLeQ_)));
797 				T10_ = (*b).wasMovedLocs->Sup.len++;
798 				asgnRef((void**) (&(*b).wasMovedLocs->data[T10_]), n);
799 				special = NIM_TRUE;
800 			}
801 			goto LA6_;
802 			LA8_: ;
803 			{
804 				if (!eqStrings((*(*s).name).s, ((NimStringDesc*) &TM__zdBS9bxu9aeb3QPAJFgGx9cyQ_2))) goto LA12_;
805 				{
806 					NIM_BOOL T16_;
807 					NIM_BOOL T18_;
808 					T16_ = (NIM_BOOL)0;
809 					T16_ = (((NI) 0) < (*c).inFinally);
810 					if (!(T16_)) goto LA17_;
811 					T18_ = (NIM_BOOL)0;
812 					T18_ = (*b).hasReturn;
813 					if (T18_) goto LA19_;
814 					T18_ = (*b).hasBreak;
815 					LA19_: ;
816 					T16_ = T18_;
817 					LA17_: ;
818 					if (!T16_) goto LA20_;
819 				}
820 				goto LA14_;
821 				LA20_: ;
822 				{
823 					wasMovedDestroyPair__optimizer_144(c, b, n);
824 				}
825 				LA14_: ;
826 				special = NIM_TRUE;
827 			}
828 			goto LA6_;
829 			LA12_: ;
830 			{
831 				if (!eqStrings((*(*s).name).s, ((NimStringDesc*) &TM__zdBS9bxu9aeb3QPAJFgGx9cyQ_3))) goto LA24_;
832 				reverse = NIM_TRUE;
833 			}
834 			goto LA6_;
835 			LA24_: ;
836 			LA6_: ;
837 		}
838 		LA4_: ;
839 		{
840 			if (!!(special)) goto LA28_;
841 			{
842 				if (!!(reverse)) goto LA32_;
843 				{
844 					NI i;
845 					NI colontmp_;
846 					NI i_2;
847 					i = (NI)0;
848 					colontmp_ = (NI)0;
849 					colontmp_ = len__ast_3198(n);
850 					i_2 = ((NI) 0);
851 					{
852 						while (1) {
853 							if (!(i_2 < colontmp_)) goto LA36;
854 							i = i_2;
855 							analyse__optimizer_170(c, b, (*n)._kind_6.sons->data[i]);
856 							i_2 += ((NI) 1);
857 						} LA36: ;
858 					}
859 				}
860 			}
861 			goto LA30_;
862 			LA32_: ;
863 			{
864 				{
865 					NI i_3;
866 					NI colontmp__2;
867 					NI T39_;
868 					NI res;
869 					i_3 = (NI)0;
870 					colontmp__2 = (NI)0;
871 					T39_ = (NI)0;
872 					T39_ = len__ast_3198(n);
873 					colontmp__2 = (NI)(T39_ - ((NI) 1));
874 					res = colontmp__2;
875 					{
876 						while (1) {
877 							if (!(((NI) 0) <= res)) goto LA41;
878 							i_3 = res;
879 							analyse__optimizer_170(c, b, (*n)._kind_6.sons->data[i_3]);
880 							res -= ((NI) 1);
881 						} LA41: ;
882 					}
883 				}
884 			}
885 			LA30_: ;
886 			{
887 				NIM_BOOL T44_;
888 				T44_ = (NIM_BOOL)0;
889 				T44_ = canRaise__ast_5088((*n)._kind_6.sons->data[((NI) 0)]);
890 				if (!T44_) goto LA45_;
891 				returnStmt__optimizer_67(b);
892 			}
893 			LA45_: ;
894 		}
895 		LA28_: ;
896 	}
897 	break;
898 	case ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 3):
899 	{
900 		invalidateWasMoved__optimizer_128(b, n);
901 	}
902 	break;
903 	case ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 0) ... ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 2):
904 	case ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 4) ... ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 23):
905 	case ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 98):
906 	case ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 79):
907 	case ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 81):
908 	case ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 80):
909 	case ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 84):
910 	case ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 82):
911 	case ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 83):
912 	case ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 51):
913 	case ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 52):
914 	case ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 159):
915 	case ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 101):
916 	case ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 102):
917 	case ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 121):
918 	case ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 116):
919 	case ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 118):
920 	case ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 90):
921 	case ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 125):
922 	case ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 158):
923 	case ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 132):
924 	case ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 123):
925 	case ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 122):
926 	{
927 	}
928 	break;
929 	case ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 73):
930 	case ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 74):
931 	{
932 		analyse__optimizer_170(c, b, (*n)._kind_6.sons->data[((NI) 1)]);
933 		analyse__optimizer_170(c, b, (*n)._kind_6.sons->data[((NI) 0)]);
934 	}
935 	break;
936 	case ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 92):
937 	case ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 48):
938 	{
939 		NIM_BOOL isExhaustive;
940 		NI T51_;
941 		tySequence__ehmV9bTklH2Gt9cXHV9c0HLeQ* wasMovedSet;
942 		T51_ = (NI)0;
943 		T51_ = len__ast_3198(n);
944 		isExhaustive = ((*(*n)._kind_6.sons->data[(NI)(T51_ - ((NI) 1))]).kind == ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 88) || (*(*n)._kind_6.sons->data[(NI)(T51_ - ((NI) 1))]).kind == ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 50));
945 		wasMovedSet = NIM_NIL;
946 		{
947 			NI i_4;
948 			NI colontmp__3;
949 			NI i_5;
950 			i_4 = (NI)0;
951 			colontmp__3 = (NI)0;
952 			colontmp__3 = len__ast_3198(n);
953 			i_5 = ((NI) 0);
954 			{
955 				while (1) {
956 					tyObject_BasicBlock__BqJRpBqlD9bKSJMY28pMcmg branch;
957 					if (!(i_5 < colontmp__3)) goto LA54;
958 					i_4 = i_5;
959 					nimZeroMem((void*)(&branch), sizeof(tyObject_BasicBlock__BqJRpBqlD9bKSJMY28pMcmg));
960 					nestedBlock__optimizer_17(b, (*(*n)._kind_6.sons->data[i_4]).kind, (&branch));
961 					analyse__optimizer_170(c, (&branch), (*n)._kind_6.sons->data[i_4]);
962 					mergeBasicBlockInfo__optimizer_78(b, branch);
963 					{
964 						if (!isExhaustive) goto LA57_;
965 						{
966 							if (!(i_4 == ((NI) 0))) goto LA61_;
967 							wasMovedSet = branch.wasMovedLocs;
968 							branch.wasMovedLocs = NIM_NIL;
969 						}
970 						goto LA59_;
971 						LA61_: ;
972 						{
973 							intersect__optimizer_103((&wasMovedSet), branch.wasMovedLocs);
974 						}
975 						LA59_: ;
976 					}
977 					LA57_: ;
978 					i_5 += ((NI) 1);
979 				} LA54: ;
980 			}
981 		}
982 		{
983 			NI i_6;
984 			NI colontmp__4;
985 			NI T65_;
986 			NI i_7;
987 			i_6 = (NI)0;
988 			colontmp__4 = (NI)0;
989 			T65_ = (wasMovedSet ? wasMovedSet->Sup.len : 0);
990 			colontmp__4 = T65_;
991 			i_7 = ((NI) 0);
992 			{
993 				while (1) {
994 					NI T68_;
995 					if (!(i_7 < colontmp__4)) goto LA67;
996 					i_6 = i_7;
997 					unsureAsgnRef((void**) (&(*b).wasMovedLocs), (tySequence__ehmV9bTklH2Gt9cXHV9c0HLeQ*) incrSeqV3((TGenericSeq*)((*b).wasMovedLocs), (&NTItnodeseq__ehmV9bTklH2Gt9cXHV9c0HLeQ_)));
998 					T68_ = (*b).wasMovedLocs->Sup.len++;
999 					asgnRef((void**) (&(*b).wasMovedLocs->data[T68_]), wasMovedSet->data[i_6]);
1000 					i_7 += ((NI) 1);
1001 				} LA67: ;
1002 			}
1003 		}
1004 	}
1005 	break;
1006 	case ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 97):
1007 	{
1008 		NIM_BOOL isExhaustive_2;
1009 		NIM_BOOL T70_;
1010 		tyObject_TType__facALICuu8zUj0hjvbTLFg* T71_;
1011 		NI T73_;
1012 		tySequence__ehmV9bTklH2Gt9cXHV9c0HLeQ* wasMovedSet_2;
1013 		T70_ = (NIM_BOOL)0;
1014 		T71_ = NIM_NIL;
1015 		T71_ = skipTypes__ast_3735((*(*n)._kind_6.sons->data[((NI) 0)]).typ, TM__zdBS9bxu9aeb3QPAJFgGx9cyQ_4);
1016 		T70_ = !(((*T71_).kind >= ((tyEnum_TTypeKind__9a3YiReNVD0IJHWFKgXRe9ag) 36) && (*T71_).kind <= ((tyEnum_TTypeKind__9a3YiReNVD0IJHWFKgXRe9ag) 39) || (*T71_).kind == ((tyEnum_TTypeKind__9a3YiReNVD0IJHWFKgXRe9ag) 28)));
1017 		if (T70_) goto LA72_;
1018 		T73_ = (NI)0;
1019 		T73_ = len__ast_3198(n);
1020 		T70_ = ((*(*n)._kind_6.sons->data[(NI)(T73_ - ((NI) 1))]).kind == ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 88));
1021 		LA72_: ;
1022 		isExhaustive_2 = T70_;
1023 		analyse__optimizer_170(c, b, (*n)._kind_6.sons->data[((NI) 0)]);
1024 		wasMovedSet_2 = NIM_NIL;
1025 		{
1026 			NI i_8;
1027 			NI colontmp__5;
1028 			NI i_9;
1029 			i_8 = (NI)0;
1030 			colontmp__5 = (NI)0;
1031 			colontmp__5 = len__ast_3198(n);
1032 			i_9 = ((NI) 1);
1033 			{
1034 				while (1) {
1035 					tyObject_BasicBlock__BqJRpBqlD9bKSJMY28pMcmg branch_2;
1036 					if (!(i_9 < colontmp__5)) goto LA76;
1037 					i_8 = i_9;
1038 					nimZeroMem((void*)(&branch_2), sizeof(tyObject_BasicBlock__BqJRpBqlD9bKSJMY28pMcmg));
1039 					nestedBlock__optimizer_17(b, (*(*n)._kind_6.sons->data[i_8]).kind, (&branch_2));
1040 					analyse__optimizer_170(c, (&branch_2), (*n)._kind_6.sons->data[i_8]);
1041 					mergeBasicBlockInfo__optimizer_78(b, branch_2);
1042 					{
1043 						if (!isExhaustive_2) goto LA79_;
1044 						{
1045 							if (!(i_8 == ((NI) 1))) goto LA83_;
1046 							wasMovedSet_2 = branch_2.wasMovedLocs;
1047 							branch_2.wasMovedLocs = NIM_NIL;
1048 						}
1049 						goto LA81_;
1050 						LA83_: ;
1051 						{
1052 							intersect__optimizer_103((&wasMovedSet_2), branch_2.wasMovedLocs);
1053 						}
1054 						LA81_: ;
1055 					}
1056 					LA79_: ;
1057 					i_9 += ((NI) 1);
1058 				} LA76: ;
1059 			}
1060 		}
1061 		{
1062 			NI i_10;
1063 			NI colontmp__6;
1064 			NI T87_;
1065 			NI i_11;
1066 			i_10 = (NI)0;
1067 			colontmp__6 = (NI)0;
1068 			T87_ = (wasMovedSet_2 ? wasMovedSet_2->Sup.len : 0);
1069 			colontmp__6 = T87_;
1070 			i_11 = ((NI) 0);
1071 			{
1072 				while (1) {
1073 					NI T90_;
1074 					if (!(i_11 < colontmp__6)) goto LA89;
1075 					i_10 = i_11;
1076 					unsureAsgnRef((void**) (&(*b).wasMovedLocs), (tySequence__ehmV9bTklH2Gt9cXHV9c0HLeQ*) incrSeqV3((TGenericSeq*)((*b).wasMovedLocs), (&NTItnodeseq__ehmV9bTklH2Gt9cXHV9c0HLeQ_)));
1077 					T90_ = (*b).wasMovedLocs->Sup.len++;
1078 					asgnRef((void**) (&(*b).wasMovedLocs->data[T90_]), wasMovedSet_2->data[i_10]);
1079 					i_11 += ((NI) 1);
1080 				} LA89: ;
1081 			}
1082 		}
1083 	}
1084 	break;
1085 	case ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 106):
1086 	{
1087 		{
1088 			NI i_12;
1089 			NI colontmp__7;
1090 			NI i_13;
1091 			i_12 = (NI)0;
1092 			colontmp__7 = (NI)0;
1093 			colontmp__7 = len__ast_3198(n);
1094 			i_13 = ((NI) 0);
1095 			{
1096 				while (1) {
1097 					tyObject_BasicBlock__BqJRpBqlD9bKSJMY28pMcmg tryBody;
1098 					if (!(i_13 < colontmp__7)) goto LA94;
1099 					i_12 = i_13;
1100 					nimZeroMem((void*)(&tryBody), sizeof(tyObject_BasicBlock__BqJRpBqlD9bKSJMY28pMcmg));
1101 					nestedBlock__optimizer_17(b, ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 106), (&tryBody));
1102 					analyse__optimizer_170(c, (&tryBody), (*n)._kind_6.sons->data[i_12]);
1103 					mergeBasicBlockInfo__optimizer_78(b, tryBody);
1104 					i_13 += ((NI) 1);
1105 				} LA94: ;
1106 			}
1107 		}
1108 	}
1109 	break;
1110 	case ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 96):
1111 	{
1112 		tyObject_BasicBlock__BqJRpBqlD9bKSJMY28pMcmg loopBody;
1113 		analyse__optimizer_170(c, b, (*n)._kind_6.sons->data[((NI) 0)]);
1114 		nimZeroMem((void*)(&loopBody), sizeof(tyObject_BasicBlock__BqJRpBqlD9bKSJMY28pMcmg));
1115 		nestedBlock__optimizer_17(b, ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 96), (&loopBody));
1116 		analyse__optimizer_170(c, (&loopBody), (*n)._kind_6.sons->data[((NI) 1)]);
1117 		mergeBasicBlockInfo__optimizer_78(b, loopBody);
1118 	}
1119 	break;
1120 	case ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 112):
1121 	case ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 127):
1122 	{
1123 		tyObject_BasicBlock__BqJRpBqlD9bKSJMY28pMcmg blockBody;
1124 		nimZeroMem((void*)(&blockBody), sizeof(tyObject_BasicBlock__BqJRpBqlD9bKSJMY28pMcmg));
1125 		nestedBlock__optimizer_17(b, (*n).kind, (&blockBody));
1126 		{
1127 			if (!((*(*n)._kind_6.sons->data[((NI) 0)]).kind == ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 3))) goto LA99_;
1128 			blockBody.label = (*(*n)._kind_6.sons->data[((NI) 0)])._kind_4.sym;
1129 		}
1130 		LA99_: ;
1131 		analyse__optimizer_170(c, (&blockBody), (*n)._kind_6.sons->data[((NI) 1)]);
1132 		mergeBasicBlockInfo__optimizer_78(b, blockBody);
1133 	}
1134 	break;
1135 	case ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 110):
1136 	{
1137 		breakStmt__optimizer_43(b, (*n)._kind_6.sons->data[((NI) 0)]);
1138 	}
1139 	break;
1140 	case ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 109):
1141 	case ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 108):
1142 	{
1143 		{
1144 			tyObject_TNode__bROa11lyF5vxEN9aYNbHmhw* child;
1145 			child = NIM_NIL;
1146 			{
1147 				NI i_14;
1148 				NI colontmp__8;
1149 				NI i_15;
1150 				i_14 = (NI)0;
1151 				colontmp__8 = (NI)0;
1152 				colontmp__8 = safeLen__ast_3191(n);
1153 				i_15 = ((NI) 0);
1154 				{
1155 					while (1) {
1156 						if (!(i_15 < colontmp__8)) goto LA106;
1157 						i_14 = i_15;
1158 						child = (*n)._kind_6.sons->data[i_14];
1159 						analyse__optimizer_170(c, b, child);
1160 						i_15 += ((NI) 1);
1161 					} LA106: ;
1162 				}
1163 			}
1164 		}
1165 		returnStmt__optimizer_67(b);
1166 	}
1167 	break;
1168 	case ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 107):
1169 	{
1170 		(*c).inFinally += ((NI) 1);
1171 		{
1172 			tyObject_TNode__bROa11lyF5vxEN9aYNbHmhw* child_2;
1173 			child_2 = NIM_NIL;
1174 			{
1175 				NI i_16;
1176 				NI colontmp__9;
1177 				NI i_17;
1178 				i_16 = (NI)0;
1179 				colontmp__9 = (NI)0;
1180 				colontmp__9 = safeLen__ast_3191(n);
1181 				i_17 = ((NI) 0);
1182 				{
1183 					while (1) {
1184 						if (!(i_17 < colontmp__9)) goto LA111;
1185 						i_16 = i_17;
1186 						child_2 = (*n)._kind_6.sons->data[i_16];
1187 						analyse__optimizer_170(c, b, child_2);
1188 						i_17 += ((NI) 1);
1189 					} LA111: ;
1190 				}
1191 			}
1192 		}
1193 		(*c).inFinally -= ((NI) 1);
1194 	}
1195 	break;
1196 	default:
1197 	{
1198 		{
1199 			tyObject_TNode__bROa11lyF5vxEN9aYNbHmhw* child_3;
1200 			child_3 = NIM_NIL;
1201 			{
1202 				NI i_18;
1203 				NI colontmp__10;
1204 				NI i_19;
1205 				i_18 = (NI)0;
1206 				colontmp__10 = (NI)0;
1207 				colontmp__10 = safeLen__ast_3191(n);
1208 				i_19 = ((NI) 0);
1209 				{
1210 					while (1) {
1211 						if (!(i_19 < colontmp__10)) goto LA116;
1212 						i_18 = i_19;
1213 						child_3 = (*n)._kind_6.sons->data[i_18];
1214 						analyse__optimizer_170(c, b, child_3);
1215 						i_19 += ((NI) 1);
1216 					} LA116: ;
1217 				}
1218 			}
1219 		}
1220 	}
1221 	break;
1222 	}
1223 }
N_NIMCALL(void,opt__optimizer_350)1224 N_LIB_PRIVATE N_NIMCALL(void, opt__optimizer_350)(tyObject_Con__QbIMFB4loKCf0ZFA2SwcWQ c, tyObject_TNode__bROa11lyF5vxEN9aYNbHmhw* n, tyObject_TNode__bROa11lyF5vxEN9aYNbHmhw* parent, NI parentPos) {
1225 	switch ((*n).kind) {
1226 	case ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 26) ... ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 32):
1227 	{
1228 		{
1229 			if (!(((*n).flags &((NU32)1<<((NU)(((tyEnum_TNodeFlag__jyh9acXHkhZANSSvPIY7ZLg) 0))&31U)))!=0)) goto LA4_;
1230 			asgnRef((void**) (&(*parent)._kind_6.sons->data[parentPos]), newNodeI__ast_3356(((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 1), (*n).info));
1231 		}
1232 		goto LA2_;
1233 		LA4_: ;
1234 		{
1235 			tyObject_TNode__bROa11lyF5vxEN9aYNbHmhw* xX60gensym39_;
1236 			xX60gensym39_ = shallowCopy__ast_4413(n);
1237 			{
1238 				NI iX60gensym39_;
1239 				NI colontmp_;
1240 				NI i;
1241 				iX60gensym39_ = (NI)0;
1242 				colontmp_ = (NI)0;
1243 				colontmp_ = len__ast_3198(n);
1244 				i = ((NI) 0);
1245 				{
1246 					while (1) {
1247 						if (!(i < colontmp_)) goto LA9;
1248 						iX60gensym39_ = i;
1249 						opt__optimizer_350(c, (*n)._kind_6.sons->data[iX60gensym39_], xX60gensym39_, iX60gensym39_);
1250 						i += ((NI) 1);
1251 					} LA9: ;
1252 				}
1253 			}
1254 			asgnRef((void**) (&(*parent)._kind_6.sons->data[parentPos]), xX60gensym39_);
1255 		}
1256 		LA2_: ;
1257 	}
1258 	break;
1259 	case ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 0) ... ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 23):
1260 	case ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 98):
1261 	case ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 79):
1262 	case ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 81):
1263 	case ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 80):
1264 	case ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 84):
1265 	case ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 82):
1266 	case ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 83):
1267 	case ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 51):
1268 	case ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 52):
1269 	case ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 159):
1270 	case ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 101):
1271 	case ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 102):
1272 	case ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 121):
1273 	case ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 116):
1274 	case ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 118):
1275 	case ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 90):
1276 	case ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 125):
1277 	case ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 158):
1278 	case ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 132):
1279 	case ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 123):
1280 	case ((tyEnum_TNodeKind__G4E4Gxe7oI2Cm03rkiOzQw) 122):
1281 	{
1282 		asgnRef((void**) (&(*parent)._kind_6.sons->data[parentPos]), n);
1283 	}
1284 	break;
1285 	default:
1286 	{
1287 		tyObject_TNode__bROa11lyF5vxEN9aYNbHmhw* xX60gensym43_;
1288 		xX60gensym43_ = shallowCopy__ast_4413(n);
1289 		{
1290 			NI iX60gensym43_;
1291 			NI colontmp__2;
1292 			NI i_2;
1293 			iX60gensym43_ = (NI)0;
1294 			colontmp__2 = (NI)0;
1295 			colontmp__2 = len__ast_3198(n);
1296 			i_2 = ((NI) 0);
1297 			{
1298 				while (1) {
1299 					if (!(i_2 < colontmp__2)) goto LA14;
1300 					iX60gensym43_ = i_2;
1301 					opt__optimizer_350(c, (*n)._kind_6.sons->data[iX60gensym43_], xX60gensym43_, iX60gensym43_);
1302 					i_2 += ((NI) 1);
1303 				} LA14: ;
1304 			}
1305 		}
1306 		asgnRef((void**) (&(*parent)._kind_6.sons->data[parentPos]), xX60gensym43_);
1307 	}
1308 	break;
1309 	}
1310 }
N_NIMCALL(tyObject_TNode__bROa11lyF5vxEN9aYNbHmhw *,optimize__optimizer_390)1311 N_LIB_PRIVATE N_NIMCALL(tyObject_TNode__bROa11lyF5vxEN9aYNbHmhw*, optimize__optimizer_390)(tyObject_TNode__bROa11lyF5vxEN9aYNbHmhw* n) {
1312 	tyObject_TNode__bROa11lyF5vxEN9aYNbHmhw* result;
1313 	tyObject_Con__QbIMFB4loKCf0ZFA2SwcWQ c;
1314 	tyObject_BasicBlock__BqJRpBqlD9bKSJMY28pMcmg b;
1315 	result = NIM_NIL;
1316 	nimZeroMem((void*)(&c), sizeof(tyObject_Con__QbIMFB4loKCf0ZFA2SwcWQ));
1317 	nimZeroMem((void*)(&b), sizeof(tyObject_BasicBlock__BqJRpBqlD9bKSJMY28pMcmg));
1318 	analyse__optimizer_170((&c), (&b), n);
1319 	{
1320 		if (!c.somethingTodo) goto LA3_;
1321 		result = shallowCopy__ast_4413(n);
1322 		{
1323 			NI i;
1324 			NI colontmp_;
1325 			NI i_2;
1326 			i = (NI)0;
1327 			colontmp_ = (NI)0;
1328 			colontmp_ = safeLen__ast_3191(n);
1329 			i_2 = ((NI) 0);
1330 			{
1331 				while (1) {
1332 					if (!(i_2 < colontmp_)) goto LA7;
1333 					i = i_2;
1334 					opt__optimizer_350(c, (*n)._kind_6.sons->data[i], result, i);
1335 					i_2 += ((NI) 1);
1336 				} LA7: ;
1337 			}
1338 		}
1339 	}
1340 	goto LA1_;
1341 	LA3_: ;
1342 	{
1343 		result = n;
1344 	}
1345 	LA1_: ;
1346 	return result;
1347 }
1348