/* Generated by Nim Compiler v0.13.0 */
/*   (c) 2015 Andreas Rumpf */
/* The generated code is subject to the original license. */
#define NIM_INTBITS 32

#include "nimbase.h"
#include <string.h>
typedef struct Tsym214822 Tsym214822;
typedef struct Tnode214790 Tnode214790;
typedef struct Tidobj189006 Tidobj189006;
typedef struct TNimObject TNimObject;
typedef struct TNimType TNimType;
typedef struct TNimNode TNimNode;
typedef struct Ttypeseq214824 Ttypeseq214824;
typedef struct Tscope214816 Tscope214816;
typedef struct TY214925 TY214925;
typedef struct Tstrtable214794 Tstrtable214794;
typedef struct Tsymseq214792 Tsymseq214792;
typedef struct Ttype214828 Ttype214828;
typedef struct Tident189012 Tident189012;
typedef struct Tlineinfo182337 Tlineinfo182337;
typedef struct Tloc214804 Tloc214804;
typedef struct Ropeobj169006 Ropeobj169006;
typedef struct Tlib214808 Tlib214808;
typedef struct NimStringDesc NimStringDesc;
typedef struct TGenericSeq TGenericSeq;
typedef struct Tnodeseq214784 Tnodeseq214784;
typedef struct Intset211035 Intset211035;
typedef struct Trunk211031 Trunk211031;
typedef struct Trunkseq211033 Trunkseq211033;
typedef struct TY88487 TY88487;
typedef struct Teffects342002 Teffects342002;
typedef struct TY314503 TY314503;
typedef struct Cell47505 Cell47505;
typedef struct Cellseq47521 Cellseq47521;
typedef struct Gcheap49818 Gcheap49818;
typedef struct Gcstack49816 Gcstack49816;
typedef struct Cellset47517 Cellset47517;
typedef struct Pagedesc47513 Pagedesc47513;
typedef struct Memregion29687 Memregion29687;
typedef struct Smallchunk29639 Smallchunk29639;
typedef struct Llchunk29681 Llchunk29681;
typedef struct Bigchunk29641 Bigchunk29641;
typedef struct Intset29614 Intset29614;
typedef struct Trunk29610 Trunk29610;
typedef struct Avlnode29685 Avlnode29685;
typedef struct Gcstat49814 Gcstat49814;
typedef struct TY244442 TY244442;
typedef struct TY244443 TY244443;
typedef struct Slice88080 Slice88080;
typedef struct Tinstantiation214812 Tinstantiation214812;
typedef struct Tlistentry135010 Tlistentry135010;
typedef struct Basechunk29637 Basechunk29637;
typedef struct Freecell29629 Freecell29629;
typedef struct TY214913 TY214913;
typedef N_NIMCALL_PTR(void, TY3489) (void* p, NI op);
typedef N_NIMCALL_PTR(void*, TY3494) (void* p);
struct  TNimType  {
NI size;
NU8 kind;
NU8 flags;
TNimType* base;
TNimNode* node;
void* finalizer;
TY3489 marker;
TY3494 deepcopy;
};
struct  TNimObject  {
TNimType* m_type;
};
struct  Tidobj189006  {
  TNimObject Sup;
NI id;
};
struct  Tstrtable214794  {
NI counter;
Tsymseq214792* data;
};
struct  Tlineinfo182337  {
NI16 line;
NI16 col;
NI32 fileindex;
};
struct  Tloc214804  {
NU8 k;
NU8 s;
NU16 flags;
Ttype214828* t;
Ropeobj169006* r;
Ropeobj169006* heaproot;
};
struct  Tsym214822  {
  Tidobj189006 Sup;
NU8 kind;
union{
struct {Ttypeseq214824* typeinstcache;
Tscope214816* typscope;
} S1;
struct {TY214925* procinstcache;
Tsym214822* gcunsafetyreason;
} S2;
struct {TY214925* usedgenerics;
Tstrtable214794 tab;
} S3;
struct {Tsym214822* guard;
NI bitsize;
} S4;
} kindU;
NU8 magic;
Ttype214828* typ;
Tident189012* name;
Tlineinfo182337 info;
Tsym214822* owner;
NU32 flags;
Tnode214790* ast;
NU32 options;
NI position;
NI offset;
Tloc214804 loc;
Tlib214808* annex;
Tnode214790* constraint;
};
struct  Ttype214828  {
  Tidobj189006 Sup;
NU8 kind;
NU8 callconv;
NU32 flags;
Ttypeseq214824* sons;
Tnode214790* n;
Tsym214822* owner;
Tsym214822* sym;
Tsym214822* destructor;
Tsym214822* deepcopy;
Tsym214822* assignment;
NI64 size;
NI16 align;
NI16 locklevel;
Tloc214804 loc;
};
struct  TGenericSeq  {
NI len;
NI reserved;
};
struct  NimStringDesc  {
  TGenericSeq Sup;
NIM_CHAR data[SEQ_DECL_SIZE];
};
struct  Tnode214790  {
Ttype214828* typ;
Tlineinfo182337 info;
NU16 flags;
NU8 kind;
union{
struct {NI64 intval;
} S1;
struct {NF floatval;
} S2;
struct {NimStringDesc* strval;
} S3;
struct {Tsym214822* sym;
} S4;
struct {Tident189012* ident;
} S5;
struct {Tnodeseq214784* sons;
} S6;
} kindU;
NimStringDesc* comment;
};
typedef N_NIMCALL_PTR(NIM_BOOL, TY346768) (Tnode214790* a, Tnode214790* b);
struct  Intset211035  {
NI counter;
NI max;
Trunk211031* head;
Trunkseq211033* data;
};
struct  Tident189012  {
  Tidobj189006 Sup;
NimStringDesc* s;
Tident189012* next;
NI h;
};
typedef NimStringDesc* TY184169[2];
struct TY88487 {
NimStringDesc* Field0;
NI Field1;
};
struct  Teffects342002  {
Tnode214790* exc;
Tnode214790* tags;
NI bottom;
NI intrystmt;
Tsym214822* owner;
TY314503* init;
Tnodeseq214784* guards;
Tnodeseq214784* locked;
NIM_BOOL gcunsafe;
NIM_BOOL isrecursive;
NIM_BOOL istoplevel;
NI16 maxlocklevel;
NI16 currlocklevel;
};
struct  TNimNode  {
NU8 kind;
NI offset;
TNimType* typ;
NCSTRING name;
NI len;
TNimNode** sons;
};
struct  Cell47505  {
NI refcount;
TNimType* typ;
};
struct  Cellseq47521  {
NI len;
NI cap;
Cell47505** d;
};
struct  Cellset47517  {
NI counter;
NI max;
Pagedesc47513* head;
Pagedesc47513** data;
};
typedef Smallchunk29639* TY29702[512];
typedef Trunk29610* Trunkbuckets29612[256];
struct  Intset29614  {
Trunkbuckets29612 data;
};
struct  Memregion29687  {
NI minlargeobj;
NI maxlargeobj;
TY29702 freesmallchunks;
Llchunk29681* llmem;
NI currmem;
NI maxmem;
NI freemem;
NI lastsize;
Bigchunk29641* freechunkslist;
Intset29614 chunkstarts;
Avlnode29685* root;
Avlnode29685* deleted;
Avlnode29685* last;
Avlnode29685* freeavlnodes;
};
struct  Gcstat49814  {
NI stackscans;
NI cyclecollections;
NI maxthreshold;
NI maxstacksize;
NI maxstackcells;
NI cycletablesize;
NI64 maxpause;
};
struct  Gcheap49818  {
Gcstack49816* stack;
void* stackbottom;
NI cyclethreshold;
Cellseq47521 zct;
Cellseq47521 decstack;
Cellset47517 cycleroots;
Cellseq47521 tempstack;
NI recgclock;
Memregion29687 region;
Gcstat49814 stat;
};
typedef NU8 TY449235[20];
struct TY244443 {
NI Field0;
NI Field1;
};
typedef Tnode214790* TY382939[2];
typedef NimStringDesc* TY196333[261];
struct  Slice88080  {
NI a;
NI b;
};
struct  Tscope214816  {
NI depthlevel;
Tstrtable214794 symbols;
Tnodeseq214784* usingsyms;
Tscope214816* parent;
};
struct  Ropeobj169006  {
  TNimObject Sup;
Ropeobj169006* left;
Ropeobj169006* right;
NI length;
NimStringDesc* data;
};
struct  Tlistentry135010  {
  TNimObject Sup;
Tlistentry135010* prev;
Tlistentry135010* next;
};
struct  Tlib214808  {
  Tlistentry135010 Sup;
NU8 kind;
NIM_BOOL generated;
NIM_BOOL isoverriden;
Ropeobj169006* name;
Tnode214790* path;
};
typedef NI TY29618[16];
struct  Trunk211031  {
Trunk211031* next;
NI key;
TY29618 bits;
};
struct  Gcstack49816  {
Gcstack49816* prev;
Gcstack49816* next;
void* starts;
void* pos;
NI maxstacksize;
};
struct  Pagedesc47513  {
Pagedesc47513* next;
NI key;
TY29618 bits;
};
struct  Basechunk29637  {
NI prevsize;
NI size;
NIM_BOOL used;
};
struct  Smallchunk29639  {
  Basechunk29637 Sup;
Smallchunk29639* next;
Smallchunk29639* prev;
Freecell29629* freelist;
NI free;
NI acc;
NF data;
};
struct  Llchunk29681  {
NI size;
NI acc;
Llchunk29681* next;
};
struct  Bigchunk29641  {
  Basechunk29637 Sup;
Bigchunk29641* next;
Bigchunk29641* prev;
NI align;
NF data;
};
struct  Trunk29610  {
Trunk29610* next;
NI key;
TY29618 bits;
};
typedef Avlnode29685* TY29692[2];
struct  Avlnode29685  {
TY29692 link;
NI key;
NI upperbound;
NI level;
};
struct  Tinstantiation214812  {
Tsym214822* sym;
Ttypeseq214824* concretetypes;
TY214913* usedby;
NI compilesid;
};
struct  Freecell29629  {
Freecell29629* next;
NI zerofield;
};
struct Tnodeseq214784 {
  TGenericSeq Sup;
  Tnode214790* data[SEQ_DECL_SIZE];
};
struct TY314503 {
  TGenericSeq Sup;
  NI data[SEQ_DECL_SIZE];
};
struct TY244442 {
  TGenericSeq Sup;
  TY244443 data[SEQ_DECL_SIZE];
};
struct Ttypeseq214824 {
  TGenericSeq Sup;
  Ttype214828* data[SEQ_DECL_SIZE];
};
struct TY214925 {
  TGenericSeq Sup;
  Tinstantiation214812* data[SEQ_DECL_SIZE];
};
struct Tsymseq214792 {
  TGenericSeq Sup;
  Tsym214822* data[SEQ_DECL_SIZE];
};
struct Trunkseq211033 {
  TGenericSeq Sup;
  Trunk211031* data[SEQ_DECL_SIZE];
};
struct TY214913 {
  TGenericSeq Sup;
  NI32 data[SEQ_DECL_SIZE];
};
static N_INLINE(NI, len_215059)(Tnode214790* n);
N_NIMCALL(Tnode214790*, effectspec_344373)(Tnode214790* n, NU16 effecttype);
N_NIMCALL(NI, sonslen_217351)(Tnode214790* n);
N_NIMCALL(NU16, whichpragma_239525)(Tnode214790* n);
N_NIMCALL(Tnode214790*, newnodei_216248)(NU8 kind, Tlineinfo182337 info);
N_NIMCALL(void, add_215114)(Tnode214790* father, Tnode214790* son);
N_NIMCALL(void, checkraisesspec_346762)(Tnode214790* spec, Tnode214790* real, NimStringDesc* msg, NIM_BOOL hints, TY346768 effectpredicate);
N_NIMCALL(void, initintset_211885)(Intset211035* Result);
N_NOINLINE(void, chckNil)(void* p);
static N_INLINE(Tnode214790*, HEX5BHEX5D_215238)(Tnode214790* n, NI i);
N_NIMCALL(void, incl_211832)(Intset211035* s, NI key);
N_NIMCALL(void, pushinfocontext_183209)(Tlineinfo182337 info);
N_NIMCALL(void, localerror_187080)(Tlineinfo182337 info, NU16 msg, NimStringDesc* arg);
static N_INLINE(void, appendString)(NimStringDesc* dest, NimStringDesc* src);
N_NIMCALL(NimStringDesc*, typetostring_240017)(Ttype214828* typ, NU8 prefer);
N_NIMCALL(NimStringDesc*, rawNewString)(NI space);
N_NIMCALL(void, popinfocontext_183222)(void);
N_NIMCALL(NIM_BOOL, contains_211811)(Intset211035 s, NI key);
N_NIMCALL(void, message_187095)(Tlineinfo182337 info, NU16 msg, NimStringDesc* arg);
N_NIMCALL(NimStringDesc*, rendertree_233044)(Tnode214790* n, NU8 renderflags);
N_NIMCALL(NIM_BOOL, subtyperelation_346747)(Tnode214790* spec, Tnode214790* real);
N_NIMCALL(NI, safeinheritancediff_248552)(Ttype214828* a, Ttype214828* b);
N_NIMCALL(Ttype214828*, exctype_343090)(Tnode214790* n);
N_NIMCALL(Ttype214828*, getebase_343075)(void);
N_NIMCALL(Tsym214822*, getcompilerproc_258746)(NimStringDesc* name);
N_NIMCALL(Ttype214828*, systypefromname_258125)(NimStringDesc* name);
N_NIMCALL(Ttype214828*, skiptypes_218113)(Ttype214828* t, NU64 kinds);
N_NIMCALL(void, localerror_187085)(Tlineinfo182337 info, NimStringDesc* arg);
N_NIMCALL(NimStringDesc*, nsuFormatSingleElem)(NimStringDesc* formatstr, NimStringDesc* a);
N_NIMCALL(NimStringDesc*, nsuFormatOpenArray)(NimStringDesc* formatstr, NimStringDesc** a, NI aLen0);
N_NIMCALL(NimStringDesc*, HEX24_217069)(NI16 x);
N_NIMCALL(void, internalerror_187113)(NimStringDesc* errmsg);
N_NIMCALL(NimStringDesc*, HEX24_187183)(TY88487 x);
N_NIMCALL(void, initeffects_347092)(Tnode214790* effects, Tsym214822* s, Teffects342002* t);
static N_INLINE(void, nimGCunrefNoCycle)(void* p);
static N_INLINE(Cell47505*, usrtocell_51440)(void* usr);
static N_INLINE(void, rtladdzct_53001)(Cell47505* c);
N_NOINLINE(void, addzct_51417)(Cellseq47521* s, Cell47505* c);
N_NIMCALL(void*, newSeqRC1)(TNimType* typ, NI len);
static N_INLINE(void, asgnRefNoCycle)(void** dest, void* src);
N_NIMCALL(void, unsureAsgnRef)(void** dest, void* src);
N_NIMCALL(void*, newSeq)(TNimType* typ, NI len);
N_NIMCALL(void, track_343625)(Teffects342002* tracked, Tnode214790* n);
N_NIMCALL(void, usevar_342784)(Teffects342002* a, Tnode214790* n);
N_NIMCALL(NIM_BOOL, islocalvar_342048)(Teffects342002* a, Tsym214822* s);
static N_INLINE(NIM_BOOL, contains_342793)(NI* a, NI aLen0, NI item);
static N_INLINE(NI, find_342803)(NI* a, NI aLen0, NI item);
N_NIMCALL(TGenericSeq*, incrSeqV2)(TGenericSeq* seq, NI elemsize);
N_NIMCALL(void, guardglobal_342178)(Teffects342002* a, Tnode214790* n, Tsym214822* guard);
static N_INLINE(NIM_BOOL, isgcedmem_218157)(Ttype214828* t);
N_NIMCALL(void, markgcunsafe_342666)(Teffects342002* a, Tsym214822* reason);
N_NIMCALL(void, addeffect_343154)(Teffects342002* a, Tnode214790* e, NIM_BOOL uselineinfo);
N_NIMCALL(NIM_BOOL, sametype_244628)(Ttype214828* a, Ttype214828* b, NU8 flags);
N_NIMCALL(NIM_BOOL, HEX3DHEX3D_184125)(Tlineinfo182337 a, Tlineinfo182337 b);
N_NIMCALL(void, throws_343049)(Tnode214790* tracked, Tnode214790* n);
static N_INLINE(NI, safelen_215081)(Tnode214790* n);
N_NIMCALL(void, mergelocklevels_344845)(Teffects342002* tracked, Tnode214790* n, NI16 locklevel);
N_NIMCALL(NI16, getlocklevel_344801)(Tsym214822* s);
N_NIMCALL(void, propagateeffects_344854)(Teffects342002* tracked, Tnode214790* n, Tsym214822* s);
N_NIMCALL(void, mergeeffects_343283)(Teffects342002* a, Tnode214790* b, Tnode214790* comesfrom);
N_NIMCALL(Tnode214790*, createraise_343112)(Tnode214790* n);
N_NIMCALL(Tnode214790*, newnode_215401)(NU8 kind);
N_NIMCALL(void, mergetags_343321)(Teffects342002* a, Tnode214790* b, Tnode214790* comesfrom);
N_NIMCALL(void, addtag_343241)(Teffects342002* a, Tnode214790* e, NIM_BOOL uselineinfo);
N_NIMCALL(Tnode214790*, createtag_343125)(Tnode214790* n);
N_NIMCALL(void, warnaboutgcunsafe_342663)(Tnode214790* n);
N_NIMCALL(NIM_BOOL, isforwardedproc_344313)(Tnode214790* n);
N_NIMCALL(NIM_BOOL, isindirectcall_344253)(Tnode214790* n, Tsym214822* owner);
N_NIMCALL(void, assumetheworst_345020)(Teffects342002* tracked, Tnode214790* n, Ttype214828* op);
N_NIMCALL(NIM_BOOL, importedfromc_344776)(Tnode214790* n);
N_NIMCALL(void, markgcunsafe_342681)(Teffects342002* a, Tnode214790* reason);
N_NIMCALL(Tsym214822*, newsym_215684)(NU8 symkind, Tident189012* name, Tsym214822* owner, Tlineinfo182337 info);
N_NIMCALL(Tident189012*, getident_189441)(NimStringDesc* identifier);
N_NIMCALL(void, trackoperand_345063)(Teffects342002* tracked, Tnode214790* n, Ttype214828* paramtype);
N_NIMCALL(Tnode214790*, skipconvandclosure_221182)(Tnode214790* n);
N_NIMCALL(Tnode214790*, skipconv_249082)(Tnode214790* n);
N_NIMCALL(NIM_BOOL, isownedprocvar_345026)(Tnode214790* n, Tsym214822* owner);
N_NIMCALL(void, notnilcheck_344914)(Teffects342002* tracked, Tnode214790* n_344917, Ttype214828* paramtype);
N_NIMCALL(NIM_BOOL, containsnode_219117)(Tnode214790* n, TY449235 kinds);
N_NIMCALL(NU8, impliesnotnil_337035)(Tnodeseq214784* facts, Tnode214790* arg);
N_NIMCALL(Ttype214828*, paramtype_345902)(Ttype214828* op, NI i);
N_NIMCALL(NI, len_217339)(Ttype214828* n);
N_NIMCALL(void, initvarvianew_342622)(Teffects342002* a, Tnode214790* n);
N_NIMCALL(void, initvar_342420)(Teffects342002* a, Tnode214790* n, NIM_BOOL volatilecheck);
static N_INLINE(void, makevolatile_342379)(Teffects342002* a, Tsym214822* s);
N_NIMCALL(Tsym214822*, getmodule_221144)(Tsym214822* s);
N_NIMCALL(Ttype214828*, lastson_217377)(Ttype214828* n);
N_NIMCALL(NimStringDesc*, HEX24_233066)(Tnode214790* n);
N_NIMCALL(void, guarddotaccess_342220)(Teffects342002* a, Tnode214790* n);
N_NIMCALL(Tsym214822*, lookupinrecord_221140)(Tnode214790* n, Tident189012* field);
N_NIMCALL(Tnode214790*, newnodei_216401)(NU8 kind, Tlineinfo182337 info, NI children);
N_NIMCALL(Tnode214790*, newsymnode_216234)(Tsym214822* sym);
N_NIMCALL(NIM_BOOL, sametree_336245)(Tnode214790* a, Tnode214790* b);
N_NIMCALL(void, checkfieldaccess_338803)(Tnodeseq214784* m, Tnode214790* n);
N_NIMCALL(void, tracktrystmt_343629)(Teffects342002* tracked, Tnode214790* n);
N_NIMCALL(void, addtointersection_342988)(TY244442** inter, NI s);
N_NIMCALL(void, catchesall_343602)(Teffects342002* tracked);
N_NIMCALL(TGenericSeq*, setLengthSeq)(TGenericSeq* seq, NI elemsize, NI newlen);
N_NIMCALL(void, catches_343388)(Teffects342002* tracked, Ttype214828* e_343391);
N_NIMCALL(void, trackpragmastmt_344338)(Teffects342002* tracked, Tnode214790* n);
N_NIMCALL(void, listeffects_343359)(Teffects342002* a);
N_NIMCALL(void, invalidatefacts_336410)(Tnodeseq214784** m, Tnode214790* n);
N_NIMCALL(void, addasgnfact_338655)(Tnodeseq214784** m, Tnode214790* key, Tnode214790* value);
N_NIMCALL(Tnode214790*, lastson_217364)(Tnode214790* n);
N_NIMCALL(void, trackcase_345259)(Teffects342002* tracked, Tnode214790* n);
N_NIMCALL(NIM_BOOL, interestingcaseexpr_335232)(Tnode214790* m);
N_NIMCALL(void, addcasebranchfacts_338694)(Tnodeseq214784** m, Tnode214790* n, NI i);
N_NIMCALL(NIM_BOOL, breaksblock_345220)(Tnode214790* n);
N_NIMCALL(void, trackif_345517)(Teffects342002* tracked, Tnode214790* n);
N_NIMCALL(void, addfact_336193)(Tnodeseq214784** m, Tnode214790* nn);
N_NIMCALL(void, addfactneg_336221)(Tnodeseq214784** m, Tnode214790* n_336225);
N_NIMCALL(void, trackblock_345804)(Teffects342002* tracked, Tnode214790* n);
N_NIMCALL(NIM_BOOL, hassubnodewith_219175)(Tnode214790* n, NU8 kind);
N_NIMCALL(NIM_BOOL, istrue_345867)(Tnode214790* n);
N_NIMCALL(void, adddiscriminantfact_338634)(Tnodeseq214784** m, Tnode214790* n);
N_NIMCALL(void, locklocations_342134)(Teffects342002* a, Tnode214790* pragma);
N_NIMCALL(NI16, getlocklevel_342087)(Ttype214828* t_342089);
static N_INLINE(NIM_BOOL, isemptytype_219513)(Ttype214828* t);
N_NIMCALL(void, listgcunsafety_342778)(Tsym214822* s, NIM_BOOL onlywarning);
N_NIMCALL(void, listgcunsafety_342707)(Tsym214822* s, NIM_BOOL onlywarning, Intset211035* cyclecheck);
N_NIMCALL(NIM_BOOL, containsorincl_211862)(Intset211035* s, NI key);
N_NIMCALL(NimStringDesc*, copyString)(NimStringDesc* src);
N_NIMCALL(Tnode214790*, newnode_216601)(NU8 kind, Tlineinfo182337 info, Tnodeseq214784* sons, Ttype214828* typ);
N_NIMCALL(Tnode214790*, documenteffect_344432)(Tnode214790* n, Tnode214790* x, NU16 effecttype, NI idx);
N_NIMCALL(NIM_BOOL, nsuStartsWith)(NimStringDesc* s, NimStringDesc* prefix);
N_NIMCALL(NimStringDesc*, copyStr)(NimStringDesc* s, NI start);
N_NIMCALL(NimStringDesc*, copyStr)(NimStringDesc* s, NI first);
N_NIMCALL(Tnode214790*, newidentnode_216228)(Tident189012* ident, Tlineinfo182337 info);
N_NIMCALL(Tnode214790*, documentwriteeffect_344502)(Tnode214790* n, NU8 flag, NimStringDesc* pragmaname);
static N_INLINE(Slice88080, HEX2EHEX2E_102424)(NI a, NI b);
N_NIMCALL(Tnode214790*, documentneweffect_344592)(Tnode214790* n);
STRING_LITERAL(TMP3443, "can raise an unlisted exception: ", 33);
STRING_LITERAL(TMP3444, "Exception", 9);
STRING_LITERAL(TMP3445, "Exception", 9);
STRING_LITERAL(TMP3446, "E_Base", 6);
STRING_LITERAL(TMP3447, "can have an unlisted effect: ", 29);
STRING_LITERAL(TMP3448, "base method is GC-safe, but \'$1\' is not", 39);
STRING_LITERAL(TMP3449, "base method has lock level $1, but dispatcher has $2", 52);
STRING_LITERAL(TMP3478, "compiler/sempass2.nim", 21);
NIM_CONST TY88487 TMP3477 = {((NimStringDesc*) &TMP3478),
((NI) 879)}
;
STRING_LITERAL(TMP3479, "unguarded access: ", 18);
STRING_LITERAL(TMP3480, "expected lock level < ", 22);
STRING_LITERAL(TMP3481, " but got lock level ", 20);
STRING_LITERAL(TMP3482, "RootEffect", 10);
STRING_LITERAL(TMP3483, "RootEffect", 10);
STRING_LITERAL(TMP3484, "TEffect", 7);
STRING_LITERAL(TMP3485, "<unknown>", 9);
NIM_CONST TY88487 TMP3486 = {((NimStringDesc*) &TMP3478),
((NI) 536)}
;
static NIM_CONST TY449235 TMP3487 = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00}
;
STRING_LITERAL(TMP3497, "cannot prove \'$1\' is not nil", 28);
STRING_LITERAL(TMP3498, "\'$1\' is provably nil", 20);
STRING_LITERAL(TMP3499, "invalid guard field: ", 21);
STRING_LITERAL(TMP3500, "locks pragma without argument", 29);
STRING_LITERAL(TMP3501, "invalid lock level: ", 20);
STRING_LITERAL(TMP3502, "multi-lock requires the same static lock level for every operan"
"d", 64);
STRING_LITERAL(TMP3503, "invalid nested locking", 22);
STRING_LITERAL(TMP3504, "result", 6);
STRING_LITERAL(TMP3505, "\'$#\' is not GC-safe as it accesses \'$#\' which is a global using"
" GC\'ed memory", 76);
STRING_LITERAL(TMP3506, "\'$#\' is not GC-safe as it calls \'$#\'", 36);
NIM_CONST TY88487 TMP3507 = {((NimStringDesc*) &TMP3478),
((NI) 211)}
;
STRING_LITERAL(TMP3508, "\'$#\' is not GC-safe as it performs an indirect call here", 56);
STRING_LITERAL(TMP3509, "declared lock level is $1, but real lock level is $2", 52);
NIM_CONST TY88487 TMP3552 = {((NimStringDesc*) &TMP3478),
((NI) 850)}
;
NIM_CONST TY88487 TMP3553 = {((NimStringDesc*) &TMP3478),
((NI) 856)}
;
STRING_LITERAL(TMP5044, "ref ", 4);
extern NIM_CONST TY196333 specialwords_196329;
STRING_LITERAL(TMP5045, "writes", 6);
STRING_LITERAL(TMP5046, "new", 3);
STRING_LITERAL(TMP5047, "escapes", 7);
extern TNimType NTI214784; /* TNodeSeq */
extern Gcheap49818 gch_49859;
extern Tnode214790* emptynode_215801;
extern TNimType NTI314503; /* seq[int] */
extern NU8 gcmd_160123;
extern NU64 gnotes_183080;
extern TNimType NTI244442; /* seq[tuple[a: int, b: int]] */
extern NU32 gglobaloptions_160121;

static N_INLINE(NI, len_215059)(Tnode214790* n) {
	NI result;
	result = 0;
	{
		if (!(*n).kindU.S6.sons == 0) goto LA3;
		result = ((NI) 0);
	}
	goto LA1;
	LA3: ;
	{
		result = ((*n).kindU.S6.sons ? (*n).kindU.S6.sons->Sup.len : 0);
	}
	LA1: ;
	return result;
}

N_NIMCALL(Tnode214790*, effectspec_344373)(Tnode214790* n, NU16 effecttype) {
	Tnode214790* result;
{	result = 0;
	{
		NI i_344389;
		NI HEX3Atmp_344425;
		NI LOC2;
		NI res_344428;
		i_344389 = 0;
		HEX3Atmp_344425 = 0;
		LOC2 = 0;
		LOC2 = sonslen_217351(n);
		HEX3Atmp_344425 = (NI)(LOC2 - ((NI) 1));
		res_344428 = ((NI) 0);
		{
			while (1) {
				Tnode214790* it;
				if (!(res_344428 <= HEX3Atmp_344425)) goto LA4;
				i_344389 = res_344428;
				it = (*n).kindU.S6.sons->data[i_344389];
				{
					NIM_BOOL LOC7;
					NU16 LOC9;
					LOC7 = 0;
					LOC7 = ((*it).kind == ((NU8) 34));
					if (!(LOC7)) goto LA8;
					LOC9 = 0;
					LOC9 = whichpragma_239525(it);
					LOC7 = (LOC9 == effecttype);
					LA8: ;
					if (!LOC7) goto LA10;
					result = (*it).kindU.S6.sons->data[((NI) 1)];
					{
						if (!!(((*result).kind == ((NU8) 39) || (*result).kind == ((NU8) 41)))) goto LA14;
						result = newnodei_216248(((NU8) 39), (*result).info);
						add_215114(result, (*it).kindU.S6.sons->data[((NI) 1)]);
					}
					LA14: ;
					goto BeforeRet;
				}
				LA10: ;
				res_344428 += ((NI) 1);
			} LA4: ;
		}
	}
	}BeforeRet: ;
	return result;
}

static N_INLINE(Tnode214790*, HEX5BHEX5D_215238)(Tnode214790* n, NI i) {
	Tnode214790* result;
	result = 0;
	result = (*n).kindU.S6.sons->data[i];
	return result;
}

static N_INLINE(void, appendString)(NimStringDesc* dest, NimStringDesc* src) {
	memcpy(((NCSTRING) ((&(*dest).data[((*dest).Sup.len)- 0]))), ((NCSTRING) ((*src).data)), (NI)((*src).Sup.len + ((NI) 1)));
	(*dest).Sup.len += (*src).Sup.len;
}

N_NIMCALL(void, checkraisesspec_346762)(Tnode214790* spec, Tnode214790* real, NimStringDesc* msg, NIM_BOOL hints, TY346768 effectpredicate) {
	Intset211035 used;
	memset((void*)(&used), 0, sizeof(used));
	chckNil((void*)(&used));
	memset((void*)(&used), 0, sizeof(used));
	initintset_211885((&used));
	{
		Tnode214790* r_346774;
		r_346774 = 0;
		{
			NI i_346827;
			NI HEX3Atmp_346829;
			NI LOC3;
			NI res_346831;
			i_346827 = 0;
			HEX3Atmp_346829 = 0;
			LOC3 = 0;
			LOC3 = len_215059(real);
			HEX3Atmp_346829 = (LOC3 - 1);
			res_346831 = ((NI) 0);
			{
				while (1) {
					if (!(res_346831 <= HEX3Atmp_346829)) goto LA5;
					i_346827 = res_346831;
					r_346774 = (*real).kindU.S6.sons->data[i_346827];
					{
						NimStringDesc* LOC17;
						NimStringDesc* LOC18;
						{
							NI s_346794;
							NI HEX3Atmp_346817;
							NI LOC8;
							NI res_346820;
							s_346794 = 0;
							HEX3Atmp_346817 = 0;
							LOC8 = 0;
							LOC8 = len_215059(spec);
							HEX3Atmp_346817 = (LOC8 - 1);
							res_346820 = ((NI) 0);
							{
								while (1) {
									if (!(res_346820 <= HEX3Atmp_346817)) goto LA10;
									s_346794 = res_346820;
									{
										Tnode214790* LOC13;
										NIM_BOOL LOC14;
										LOC13 = 0;
										LOC13 = HEX5BHEX5D_215238(spec, s_346794);
										LOC14 = 0;
										LOC14 = effectpredicate(LOC13, r_346774);
										if (!LOC14) goto LA15;
										incl_211832((&used), s_346794);
										goto LA6;
									}
									LA15: ;
									res_346820 += ((NI) 1);
								} LA10: ;
							}
						}
						pushinfocontext_183209((*spec).info);
						LOC17 = 0;
						LOC18 = 0;
						LOC18 = typetostring_240017((*r_346774).typ, ((NU8) 0));
						LOC17 = rawNewString(msg->Sup.len + LOC18->Sup.len + 0);
appendString(LOC17, msg);
appendString(LOC17, LOC18);
						localerror_187080((*r_346774).info, ((NU16) 4), LOC17);
						popinfocontext_183222();
					} LA6: ;
					res_346831 += ((NI) 1);
				} LA5: ;
			}
		}
	}
	{
		if (!hints) goto LA21;
		{
			NI s_346814;
			NI HEX3Atmp_346835;
			NI LOC24;
			NI res_346838;
			s_346814 = 0;
			HEX3Atmp_346835 = 0;
			LOC24 = 0;
			LOC24 = len_215059(spec);
			HEX3Atmp_346835 = (LOC24 - 1);
			res_346838 = ((NI) 0);
			{
				while (1) {
					if (!(res_346838 <= HEX3Atmp_346835)) goto LA26;
					s_346814 = res_346838;
					{
						NIM_BOOL LOC29;
						Tnode214790* LOC32;
						Tnode214790* LOC33;
						NimStringDesc* LOC34;
						LOC29 = 0;
						LOC29 = contains_211811(used, s_346814);
						if (!!(LOC29)) goto LA30;
						LOC32 = 0;
						LOC32 = HEX5BHEX5D_215238(spec, s_346814);
						LOC33 = 0;
						LOC33 = HEX5BHEX5D_215238(spec, s_346814);
						LOC34 = 0;
						LOC34 = rendertree_233044(LOC33, 0);
						message_187095((*LOC32).info, ((NU16) 271), LOC34);
					}
					LA30: ;
					res_346838 += ((NI) 1);
				} LA26: ;
			}
		}
	}
	LA21: ;
}

N_NIMCALL(Ttype214828*, getebase_343075)(void) {
	Ttype214828* result;
	result = 0;
	{
		Tsym214822* LOC3;
		LOC3 = 0;
		LOC3 = getcompilerproc_258746(((NimStringDesc*) &TMP3444));
		if (!!((LOC3 == NIM_NIL))) goto LA4;
		result = systypefromname_258125(((NimStringDesc*) &TMP3445));
	}
	goto LA1;
	LA4: ;
	{
		result = systypefromname_258125(((NimStringDesc*) &TMP3446));
	}
	LA1: ;
	return result;
}

N_NIMCALL(Ttype214828*, exctype_343090)(Tnode214790* n) {
	Ttype214828* result;
	Ttype214828* t;
	result = 0;
	{
		NIM_BOOL LOC3;
		LOC3 = 0;
		LOC3 = ((*n).kind == ((NU8) 1));
		if (LOC3) goto LA4;
		LOC3 = (*n).typ == 0;
		LA4: ;
		if (!LOC3) goto LA5;
		t = getebase_343075();
	}
	goto LA1;
	LA5: ;
	{
		t = (*n).typ;
	}
	LA1: ;
	result = skiptypes_218113(t, IL64(211106247215360));
	return result;
}

N_NIMCALL(NIM_BOOL, subtyperelation_346747)(Tnode214790* spec, Tnode214790* real) {
	NIM_BOOL result;
	Ttype214828* LOC1;
	NI LOC2;
	result = 0;
	LOC1 = 0;
	LOC1 = exctype_343090(real);
	LOC2 = 0;
	LOC2 = safeinheritancediff_248552(LOC1, (*spec).typ);
	result = (LOC2 <= ((NI) 0));
	return result;
}

N_NIMCALL(void, checkmethodeffects_346842)(Tsym214822* disp, Tsym214822* branch) {
	Tnode214790* actual;
	Tnode214790* p;
	Tnode214790* raisesspec;
	Tnode214790* tagsspec;
{	actual = (*(*(*branch).typ).n).kindU.S6.sons->data[((NI) 0)];
	{
		NI LOC3;
		LOC3 = 0;
		LOC3 = len_215059(actual);
		if (!!((LOC3 == ((NI) 4)))) goto LA4;
		goto BeforeRet;
	}
	LA4: ;
	p = (*(*disp).ast).kindU.S6.sons->data[((NI) 4)];
	raisesspec = effectspec_344373(p, ((NU16) 156));
	{
		if (!!(raisesspec == 0)) goto LA8;
		checkraisesspec_346762(raisesspec, (*actual).kindU.S6.sons->data[((NI) 0)], ((NimStringDesc*) &TMP3443), NIM_FALSE, subtyperelation_346747);
	}
	LA8: ;
	tagsspec = effectspec_344373(p, ((NU16) 161));
	{
		if (!!(tagsspec == 0)) goto LA12;
		checkraisesspec_346762(tagsspec, (*actual).kindU.S6.sons->data[((NI) 3)], ((NimStringDesc*) &TMP3447), NIM_FALSE, subtyperelation_346747);
	}
	LA12: ;
	{
		NIM_BOOL LOC16;
		NimStringDesc* LOC20;
		LOC16 = 0;
		LOC16 = (((*disp).flags &(1U<<((NU)(((NU8) 22))&31U)))!=0);
		if (!(LOC16)) goto LA17;
		LOC16 = ((130 & (*(*branch).typ).flags) == 0);
		LA17: ;
		if (!LOC16) goto LA18;
		LOC20 = 0;
		LOC20 = nsuFormatSingleElem(((NimStringDesc*) &TMP3448), (*(*branch).name).s);
		localerror_187085((*branch).info, LOC20);
	}
	LA18: ;
	{
		TY184169 LOC25;
		NimStringDesc* LOC26;
		if (!((*(*disp).typ).locklevel < (*(*branch).typ).locklevel)) goto LA23;
		memset((void*)LOC25, 0, sizeof(LOC25));
		LOC25[0] = HEX24_217069((*(*branch).typ).locklevel);
		LOC25[1] = HEX24_217069((*(*disp).typ).locklevel);
		LOC26 = 0;
		LOC26 = nsuFormatOpenArray(((NimStringDesc*) &TMP3449), LOC25, 2);
		message_187095((*branch).info, ((NU16) 265), LOC26);
	}
	LA23: ;
	}BeforeRet: ;
}

static N_INLINE(Cell47505*, usrtocell_51440)(void* usr) {
	Cell47505* result;
	result = 0;
	result = ((Cell47505*) ((NI)((NU32)(((NI) (usr))) - (NU32)(((NI)sizeof(Cell47505))))));
	return result;
}

static N_INLINE(void, rtladdzct_53001)(Cell47505* c) {
	addzct_51417((&gch_49859.zct), c);
}

static N_INLINE(void, nimGCunrefNoCycle)(void* p) {
	Cell47505* c;
	c = usrtocell_51440(p);
	{
		(*c).refcount -= ((NI) 8);
		if (!((NU32)((*c).refcount) < (NU32)(((NI) 8)))) goto LA3;
		rtladdzct_53001(c);
	}
	LA3: ;
}

static N_INLINE(void, asgnRefNoCycle)(void** dest, void* src) {
	{
		Cell47505* c;
		if (!!((src == NIM_NIL))) goto LA3;
		c = usrtocell_51440(src);
		(*c).refcount += ((NI) 8);
	}
	LA3: ;
	{
		Cell47505* c;
		if (!!(((*dest) == NIM_NIL))) goto LA7;
		c = usrtocell_51440((*dest));
		{
			(*c).refcount -= ((NI) 8);
			if (!((NU32)((*c).refcount) < (NU32)(((NI) 8)))) goto LA11;
			rtladdzct_53001(c);
		}
		LA11: ;
	}
	LA7: ;
	(*dest) = src;
}

N_NIMCALL(void, initeffects_347092)(Tnode214790* effects, Tsym214822* s, Teffects342002* t) {
	if ((*effects).kindU.S6.sons) nimGCunrefNoCycle((*effects).kindU.S6.sons);
	(*effects).kindU.S6.sons = (Tnodeseq214784*) newSeqRC1((&NTI214784), ((NI) 4));
	asgnRefNoCycle((void**) (&(*effects).kindU.S6.sons->data[((NI) 0)]), newnodei_216248(((NU8) 152), (*s).info));
	asgnRefNoCycle((void**) (&(*effects).kindU.S6.sons->data[((NI) 3)]), newnodei_216248(((NU8) 152), (*s).info));
	asgnRefNoCycle((void**) (&(*effects).kindU.S6.sons->data[((NI) 1)]), emptynode_215801);
	asgnRefNoCycle((void**) (&(*effects).kindU.S6.sons->data[((NI) 2)]), emptynode_215801);
	unsureAsgnRef((void**) (&(*t).exc), (*effects).kindU.S6.sons->data[((NI) 0)]);
	unsureAsgnRef((void**) (&(*t).tags), (*effects).kindU.S6.sons->data[((NI) 3)]);
	unsureAsgnRef((void**) (&(*t).owner), s);
	unsureAsgnRef((void**) (&(*t).init), (TY314503*) newSeq((&NTI314503), 0));
	unsureAsgnRef((void**) (&(*t).guards), (Tnodeseq214784*) newSeq((&NTI214784), 0));
	unsureAsgnRef((void**) (&(*t).locked), (Tnodeseq214784*) newSeq((&NTI214784), 0));
}

N_NIMCALL(NIM_BOOL, islocalvar_342048)(Teffects342002* a, Tsym214822* s) {
	NIM_BOOL result;
	NIM_BOOL LOC1;
	NIM_BOOL LOC2;
	result = 0;
	LOC1 = 0;
	LOC2 = 0;
	LOC2 = ((2304 &(1U<<((NU)((*s).kind)&31U)))!=0);
	if (!(LOC2)) goto LA3;
	LOC2 = !((((*s).flags &(1U<<((NU)(((NU8) 3))&31U)))!=0));
	LA3: ;
	LOC1 = LOC2;
	if (!(LOC1)) goto LA4;
	LOC1 = ((*s).owner == (*a).owner);
	LA4: ;
	result = LOC1;
	return result;
}

static N_INLINE(NI, find_342803)(NI* a, NI aLen0, NI item) {
	NI result;
{	result = 0;
	{
		NI i_342837;
		NI i_342850;
		i_342837 = 0;
		i_342850 = ((NI) 0);
		{
			while (1) {
				if (!(i_342850 < aLen0)) goto LA3;
				i_342837 = a[i_342850];
				{
					if (!(i_342837 == item)) goto LA6;
					goto BeforeRet;
				}
				LA6: ;
				result += ((NI) 1);
				i_342850 += ((NI) 1);
			} LA3: ;
		}
	}
	result = ((NI) -1);
	}BeforeRet: ;
	return result;
}

static N_INLINE(NIM_BOOL, contains_342793)(NI* a, NI aLen0, NI item) {
	NIM_BOOL result;
	NI LOC1;
{	result = 0;
	LOC1 = 0;
	LOC1 = find_342803(a, aLen0, item);
	result = (((NI) 0) <= LOC1);
	goto BeforeRet;
	}BeforeRet: ;
	return result;
}

N_NIMCALL(void, guardglobal_342178)(Teffects342002* a, Tnode214790* n, Tsym214822* guard) {
{	{
		Tnode214790* L_342191;
		Tnodeseq214784* HEX3Atmp_342214;
		NI i_342217;
		NI L_342219;
		L_342191 = 0;
		HEX3Atmp_342214 = 0;
		HEX3Atmp_342214 = (*a).locked;
		i_342217 = ((NI) 0);
		L_342219 = (HEX3Atmp_342214 ? HEX3Atmp_342214->Sup.len : 0);
		{
			while (1) {
				if (!(i_342217 < L_342219)) goto LA3;
				L_342191 = HEX3Atmp_342214->data[i_342217];
				{
					NIM_BOOL LOC6;
					LOC6 = 0;
					LOC6 = ((*L_342191).kind == ((NU8) 3));
					if (!(LOC6)) goto LA7;
					LOC6 = ((*L_342191).kindU.S4.sym == guard);
					LA7: ;
					if (!LOC6) goto LA8;
					goto BeforeRet;
				}
				LA8: ;
				i_342217 += ((NI) 1);
			} LA3: ;
		}
	}
	{
		NimStringDesc* LOC14;
		NimStringDesc* LOC15;
		if (!!((*a).istoplevel)) goto LA12;
		LOC14 = 0;
		LOC15 = 0;
		LOC15 = rendertree_233044(n, 0);
		LOC14 = rawNewString(LOC15->Sup.len + 18);
appendString(LOC14, ((NimStringDesc*) &TMP3479));
appendString(LOC14, LOC15);
		localerror_187080((*n).info, ((NU16) 4), LOC14);
	}
	LA12: ;
	}BeforeRet: ;
}

static N_INLINE(NIM_BOOL, isgcedmem_218157)(Ttype214828* t) {
	NIM_BOOL result;
	NIM_BOOL LOC1;
	NIM_BOOL LOC3;
	result = 0;
	LOC1 = 0;
	LOC1 = ((*t).kind == ((NU8) 28) || (*t).kind == ((NU8) 22) || (*t).kind == ((NU8) 24));
	if (LOC1) goto LA2;
	LOC3 = 0;
	LOC3 = ((*t).kind == ((NU8) 25));
	if (!(LOC3)) goto LA4;
	LOC3 = ((*t).callconv == ((NU8) 8));
	LA4: ;
	LOC1 = LOC3;
	LA2: ;
	result = LOC1;
	return result;
}

N_NIMCALL(void, markgcunsafe_342666)(Teffects342002* a, Tsym214822* reason) {
	(*a).gcunsafe = NIM_TRUE;
	{
		if (!((258048 &(1U<<((NU)((*(*a).owner).kind)&31U)))!=0)) goto LA3;
		asgnRefNoCycle((void**) (&(*(*a).owner).kindU.S2.gcunsafetyreason), reason);
	}
	LA3: ;
}

N_NIMCALL(void, usevar_342784)(Teffects342002* a, Tnode214790* n) {
	Tsym214822* s;
	s = (*n).kindU.S4.sym;
	{
		NIM_BOOL LOC3;
		LOC3 = 0;
		LOC3 = islocalvar_342048(a, s);
		if (!LOC3) goto LA4;
		{
			NIM_BOOL LOC8;
			LOC8 = 0;
			LOC8 = contains_342793((*a).init->data, (*a).init->Sup.len, (*s).Sup.id);
			if (!!(LOC8)) goto LA9;
			{
				if (!!(((196608 & (*(*s).typ).flags) == 0))) goto LA13;
				message_187095((*n).info, ((NU16) 257), (*(*s).name).s);
			}
			goto LA11;
			LA13: ;
			{
				message_187095((*n).info, ((NU16) 262), (*(*s).name).s);
			}
			LA11: ;
			(*a).init = (TY314503*) incrSeqV2(&((*a).init)->Sup, sizeof(NI));
			(*a).init->data[(*a).init->Sup.len] = (*s).Sup.id;
			++(*a).init->Sup.len;
		}
		LA9: ;
	}
	LA4: ;
	{
		NIM_BOOL LOC18;
		LOC18 = 0;
		LOC18 = !(((4194312 & (*s).flags) == 0));
		if (!(LOC18)) goto LA19;
		LOC18 = ((768 &(1U<<((NU)((*s).kind)&31U)))!=0);
		LA19: ;
		if (!LOC18) goto LA20;
		{
			if (!!(((*s).kindU.S4.guard == NIM_NIL))) goto LA24;
			guardglobal_342178(a, n, (*s).kindU.S4.guard);
		}
		LA24: ;
		{
			NIM_BOOL LOC28;
			NIM_BOOL LOC30;
			LOC28 = 0;
			LOC28 = ((4194312 & (*s).flags) == 8);
			if (!(LOC28)) goto LA29;
			LOC30 = 0;
			LOC30 = (((*(*s).typ).flags &(1U<<((NU)(((NU8) 20))&31U)))!=0);
			if (LOC30) goto LA31;
			LOC30 = isgcedmem_218157((*s).typ);
			LA31: ;
			LOC28 = LOC30;
			LA29: ;
			if (!LOC28) goto LA32;
			markgcunsafe_342666(a, s);
		}
		LA32: ;
	}
	LA20: ;
}

N_NIMCALL(void, throws_343049)(Tnode214790* tracked, Tnode214790* n) {
	{
		NIM_BOOL LOC3;
		LOC3 = 0;
		LOC3 = ((*n).typ == NIM_NIL);
		if (LOC3) goto LA4;
		LOC3 = !(((*(*n).typ).kind == ((NU8) 50)));
		LA4: ;
		if (!LOC3) goto LA5;
		add_215114(tracked, n);
	}
	LA5: ;
}

N_NIMCALL(void, addeffect_343154)(Teffects342002* a, Tnode214790* e, NIM_BOOL uselineinfo) {
	Tnode214790* aa;
{	aa = (*a).exc;
	{
		NI i_343220;
		NI HEX3Atmp_343233;
		NI HEX3Atmp_343234;
		NI LOC2;
		NI res_343237;
		i_343220 = 0;
		HEX3Atmp_343233 = 0;
		HEX3Atmp_343234 = 0;
		HEX3Atmp_343233 = (*a).bottom;
		LOC2 = 0;
		LOC2 = len_215059(aa);
		HEX3Atmp_343234 = (LOC2 - 1);
		res_343237 = HEX3Atmp_343233;
		{
			while (1) {
				if (!(res_343237 <= HEX3Atmp_343234)) goto LA4;
				i_343220 = res_343237;
				{
					Tnode214790* LOC7;
					Ttype214828* LOC8;
					Ttype214828* LOC9;
					NIM_BOOL LOC10;
					LOC7 = 0;
					LOC7 = HEX5BHEX5D_215238(aa, i_343220);
					LOC8 = 0;
					LOC8 = exctype_343090(LOC7);
					LOC9 = 0;
					LOC9 = exctype_343090(e);
					LOC10 = 0;
					LOC10 = sametype_244628(LOC8, LOC9, 0);
					if (!LOC10) goto LA11;
					{
						NIM_BOOL LOC15;
						LOC15 = 0;
						LOC15 = !(uselineinfo);
						if (LOC15) goto LA16;
						LOC15 = (gcmd_160123 == ((NU8) 8));
						LA16: ;
						if (!LOC15) goto LA17;
						goto BeforeRet;
					}
					goto LA13;
					LA17: ;
					{
						Tnode214790* LOC20;
						NIM_BOOL LOC21;
						LOC20 = 0;
						LOC20 = HEX5BHEX5D_215238(aa, i_343220);
						LOC21 = 0;
						LOC21 = HEX3DHEX3D_184125((*LOC20).info, (*e).info);
						if (!LOC21) goto LA22;
						goto BeforeRet;
					}
					goto LA13;
					LA22: ;
					LA13: ;
				}
				LA11: ;
				res_343237 += ((NI) 1);
			} LA4: ;
		}
	}
	throws_343049((*a).exc, e);
	}BeforeRet: ;
}

static N_INLINE(NI, safelen_215081)(Tnode214790* n) {
	NI result;
	result = 0;
	{
		NIM_BOOL LOC3;
		LOC3 = 0;
		LOC3 = ((*n).kind >= ((NU8) 0) && (*n).kind <= ((NU8) 23));
		if (LOC3) goto LA4;
		LOC3 = (*n).kindU.S6.sons == 0;
		LA4: ;
		if (!LOC3) goto LA5;
		result = ((NI) 0);
	}
	goto LA1;
	LA5: ;
	{
		result = ((*n).kindU.S6.sons ? (*n).kindU.S6.sons->Sup.len : 0);
	}
	LA1: ;
	return result;
}

N_NIMCALL(void, mergelocklevels_344845)(Teffects342002* tracked, Tnode214790* n, NI16 locklevel) {
	{
		if (!((*tracked).currlocklevel <= locklevel)) goto LA3;
		{
			NimStringDesc* LOC9;
			NimStringDesc* LOC10;
			NimStringDesc* LOC11;
			if (!(((NI16) 0) < (*tracked).currlocklevel)) goto LA7;
			LOC9 = 0;
			LOC10 = 0;
			LOC10 = HEX24_217069((*tracked).currlocklevel);
			LOC11 = 0;
			LOC11 = HEX24_217069(locklevel);
			LOC9 = rawNewString(LOC10->Sup.len + LOC11->Sup.len + 42);
appendString(LOC9, ((NimStringDesc*) &TMP3480));
appendString(LOC9, LOC10);
appendString(LOC9, ((NimStringDesc*) &TMP3481));
appendString(LOC9, LOC11);
			localerror_187080((*n).info, ((NU16) 4), LOC9);
		}
		LA7: ;
		(*tracked).maxlocklevel = (((*tracked).maxlocklevel >= locklevel) ? (*tracked).maxlocklevel : locklevel);
	}
	LA3: ;
}

N_NIMCALL(NI16, getlocklevel_344801)(Tsym214822* s) {
	NI16 result;
	result = 0;
	result = (*(*s).typ).locklevel;
	{
		if (!(result == ((NI16) -1))) goto LA3;
		{
			NIM_BOOL LOC7;
			LOC7 = 0;
			LOC7 = !(((1056 & (*s).flags) == 0));
			if (LOC7) goto LA8;
			LOC7 = (((*(*s).typ).flags &(1U<<((NU)(((NU8) 1))&31U)))!=0);
			LA8: ;
			if (!LOC7) goto LA9;
			result = ((NI16) 0);
		}
		goto LA5;
		LA9: ;
		{
			result = ((NI16) 1001);
		}
		LA5: ;
	}
	LA3: ;
	return result;
}

N_NIMCALL(Tnode214790*, createraise_343112)(Tnode214790* n) {
	Tnode214790* result;
	result = 0;
	result = newnode_215401(((NU8) 4));
	asgnRefNoCycle((void**) (&(*result).typ), getebase_343075());
	{
		if (!!(n == 0)) goto LA3;
		(*result).info = (*n).info;
	}
	LA3: ;
	return result;
}

N_NIMCALL(void, mergeeffects_343283)(Teffects342002* a, Tnode214790* b, Tnode214790* comesfrom) {
	{
		Tnode214790* LOC5;
		if (!b == 0) goto LA3;
		LOC5 = 0;
		LOC5 = createraise_343112(comesfrom);
		addeffect_343154(a, LOC5, NIM_TRUE);
	}
	goto LA1;
	LA3: ;
	{
		{
			Tnode214790* effect_343297;
			effect_343297 = 0;
			{
				NI i_343314;
				NI HEX3Atmp_343316;
				NI LOC9;
				NI res_343318;
				i_343314 = 0;
				HEX3Atmp_343316 = 0;
				LOC9 = 0;
				LOC9 = len_215059(b);
				HEX3Atmp_343316 = (LOC9 - 1);
				res_343318 = ((NI) 0);
				{
					while (1) {
						if (!(res_343318 <= HEX3Atmp_343316)) goto LA11;
						i_343314 = res_343318;
						effect_343297 = (*b).kindU.S6.sons->data[i_343314];
						addeffect_343154(a, effect_343297, !((comesfrom == NIM_NIL)));
						res_343318 += ((NI) 1);
					} LA11: ;
				}
			}
		}
	}
	LA1: ;
}

N_NIMCALL(void, addtag_343241)(Teffects342002* a, Tnode214790* e, NIM_BOOL uselineinfo) {
	Tnode214790* aa;
{	aa = (*a).tags;
	{
		NI i_343265;
		NI HEX3Atmp_343276;
		NI LOC2;
		NI res_343279;
		i_343265 = 0;
		HEX3Atmp_343276 = 0;
		LOC2 = 0;
		LOC2 = len_215059(aa);
		HEX3Atmp_343276 = (LOC2 - 1);
		res_343279 = ((NI) 0);
		{
			while (1) {
				if (!(res_343279 <= HEX3Atmp_343276)) goto LA4;
				i_343265 = res_343279;
				{
					Tnode214790* LOC7;
					Ttype214828* LOC8;
					Ttype214828* LOC9;
					NIM_BOOL LOC10;
					LOC7 = 0;
					LOC7 = HEX5BHEX5D_215238(aa, i_343265);
					LOC8 = 0;
					LOC8 = skiptypes_218113((*LOC7).typ, IL64(211106247215360));
					LOC9 = 0;
					LOC9 = skiptypes_218113((*e).typ, IL64(211106247215360));
					LOC10 = 0;
					LOC10 = sametype_244628(LOC8, LOC9, 0);
					if (!LOC10) goto LA11;
					{
						NIM_BOOL LOC15;
						LOC15 = 0;
						LOC15 = !(uselineinfo);
						if (LOC15) goto LA16;
						LOC15 = (gcmd_160123 == ((NU8) 8));
						LA16: ;
						if (!LOC15) goto LA17;
						goto BeforeRet;
					}
					goto LA13;
					LA17: ;
					{
						Tnode214790* LOC20;
						NIM_BOOL LOC21;
						LOC20 = 0;
						LOC20 = HEX5BHEX5D_215238(aa, i_343265);
						LOC21 = 0;
						LOC21 = HEX3DHEX3D_184125((*LOC20).info, (*e).info);
						if (!LOC21) goto LA22;
						goto BeforeRet;
					}
					goto LA13;
					LA22: ;
					LA13: ;
				}
				LA11: ;
				res_343279 += ((NI) 1);
			} LA4: ;
		}
	}
	throws_343049((*a).tags, e);
	}BeforeRet: ;
}

N_NIMCALL(Tnode214790*, createtag_343125)(Tnode214790* n) {
	Tnode214790* result;
	result = 0;
	result = newnode_215401(((NU8) 4));
	{
		Tsym214822* LOC3;
		LOC3 = 0;
		LOC3 = getcompilerproc_258746(((NimStringDesc*) &TMP3482));
		if (!!((LOC3 == NIM_NIL))) goto LA4;
		asgnRefNoCycle((void**) (&(*result).typ), systypefromname_258125(((NimStringDesc*) &TMP3483)));
	}
	goto LA1;
	LA4: ;
	{
		asgnRefNoCycle((void**) (&(*result).typ), systypefromname_258125(((NimStringDesc*) &TMP3484)));
	}
	LA1: ;
	{
		if (!!(n == 0)) goto LA9;
		(*result).info = (*n).info;
	}
	LA9: ;
	return result;
}

N_NIMCALL(void, mergetags_343321)(Teffects342002* a, Tnode214790* b, Tnode214790* comesfrom) {
	{
		Tnode214790* LOC5;
		if (!b == 0) goto LA3;
		LOC5 = 0;
		LOC5 = createtag_343125(comesfrom);
		addtag_343241(a, LOC5, NIM_TRUE);
	}
	goto LA1;
	LA3: ;
	{
		{
			Tnode214790* effect_343335;
			effect_343335 = 0;
			{
				NI i_343352;
				NI HEX3Atmp_343354;
				NI LOC9;
				NI res_343356;
				i_343352 = 0;
				HEX3Atmp_343354 = 0;
				LOC9 = 0;
				LOC9 = len_215059(b);
				HEX3Atmp_343354 = (LOC9 - 1);
				res_343356 = ((NI) 0);
				{
					while (1) {
						if (!(res_343356 <= HEX3Atmp_343354)) goto LA11;
						i_343352 = res_343356;
						effect_343335 = (*b).kindU.S6.sons->data[i_343352];
						addtag_343241(a, effect_343335, !((comesfrom == NIM_NIL)));
						res_343356 += ((NI) 1);
					} LA11: ;
				}
			}
		}
	}
	LA1: ;
}

N_NIMCALL(void, warnaboutgcunsafe_342663)(Tnode214790* n) {
	NimStringDesc* LOC1;
	LOC1 = 0;
	LOC1 = rendertree_233044(n, 0);
	message_187095((*n).info, ((NU16) 260), LOC1);
}

N_NIMCALL(void, propagateeffects_344854)(Teffects342002* tracked, Tnode214790* n, Tsym214822* s) {
	Tnode214790* pragma;
	Tnode214790* spec;
	Tnode214790* tagspec;
	NI16 LOC11;
	pragma = (*(*s).ast).kindU.S6.sons->data[((NI) 4)];
	spec = effectspec_344373(pragma, ((NU16) 156));
	mergeeffects_343283(tracked, spec, n);
	tagspec = effectspec_344373(pragma, ((NU16) 161));
	mergetags_343321(tracked, tagspec, n);
	{
		NIM_BOOL LOC3;
		LOC3 = 0;
		LOC3 = ((130 & (*(*s).typ).flags) == 0);
		if (!(LOC3)) goto LA4;
		LOC3 = !((((*s).flags &(1U<<((NU)(((NU8) 5))&31U)))!=0));
		LA4: ;
		if (!LOC3) goto LA5;
		{
			if (!((gnotes_183080 &((NU64)1<<((NU)((((NU16) 260)- 237))&63U)))!=0)) goto LA9;
			warnaboutgcunsafe_342663(n);
		}
		LA9: ;
		markgcunsafe_342666(tracked, s);
	}
	LA5: ;
	LOC11 = 0;
	LOC11 = getlocklevel_344801(s);
	mergelocklevels_344845(tracked, n, LOC11);
}

N_NIMCALL(NIM_BOOL, isforwardedproc_344313)(Tnode214790* n) {
	NIM_BOOL result;
	NIM_BOOL LOC1;
	result = 0;
	LOC1 = 0;
	LOC1 = ((*n).kind == ((NU8) 3));
	if (!(LOC1)) goto LA2;
	LOC1 = (((*(*n).kindU.S4.sym).flags &(1U<<((NU)(((NU8) 4))&31U)))!=0);
	LA2: ;
	result = LOC1;
	return result;
}

N_NIMCALL(NIM_BOOL, isindirectcall_344253)(Tnode214790* n, Tsym214822* owner) {
	NIM_BOOL result;
	result = 0;
	{
		if (!!(((*n).kind == ((NU8) 3)))) goto LA3;
		result = NIM_TRUE;
	}
	goto LA1;
	LA3: ;
	{
		NIM_BOOL LOC8;
		if (!((*(*n).kindU.S4.sym).kind == ((NU8) 3))) goto LA6;
		LOC8 = 0;
		LOC8 = !((owner == (*(*n).kindU.S4.sym).owner));
		if (LOC8) goto LA9;
		LOC8 = (owner == NIM_NIL);
		LA9: ;
		result = LOC8;
	}
	goto LA1;
	LA6: ;
	{
		if (!!(((258048 &(1U<<((NU)((*(*n).kindU.S4.sym).kind)&31U)))!=0))) goto LA11;
		result = NIM_TRUE;
	}
	goto LA1;
	LA11: ;
	LA1: ;
	return result;
}

N_NIMCALL(void, assumetheworst_345020)(Teffects342002* tracked, Tnode214790* n, Ttype214828* op) {
	Tnode214790* LOC1;
	Tnode214790* LOC2;
	NI16 locklevel;
	LOC1 = 0;
	LOC1 = createraise_343112(n);
	addeffect_343154(tracked, LOC1, NIM_TRUE);
	LOC2 = 0;
	LOC2 = createtag_343125(n);
	addtag_343241(tracked, LOC2, NIM_TRUE);
	{
		if (!((*op).locklevel == ((NI16) -1))) goto LA5;
		locklevel = ((NI16) 1001);
	}
	goto LA3;
	LA5: ;
	{
		locklevel = (*op).locklevel;
	}
	LA3: ;
	mergelocklevels_344845(tracked, n, locklevel);
}

N_NIMCALL(NIM_BOOL, importedfromc_344776)(Tnode214790* n) {
	NIM_BOOL result;
	NIM_BOOL LOC1;
	result = 0;
	LOC1 = 0;
	LOC1 = ((*n).kind == ((NU8) 3));
	if (!(LOC1)) goto LA2;
	LOC1 = (((*(*n).kindU.S4.sym).flags &(1U<<((NU)(((NU8) 5))&31U)))!=0);
	LA2: ;
	result = LOC1;
	return result;
}

N_NIMCALL(void, markgcunsafe_342681)(Teffects342002* a, Tnode214790* reason) {
	(*a).gcunsafe = NIM_TRUE;
	{
		if (!((258048 &(1U<<((NU)((*(*a).owner).kind)&31U)))!=0)) goto LA3;
		{
			if (!((*reason).kind == ((NU8) 3))) goto LA7;
			asgnRefNoCycle((void**) (&(*(*a).owner).kindU.S2.gcunsafetyreason), (*reason).kindU.S4.sym);
		}
		goto LA5;
		LA7: ;
		{
			Tident189012* LOC10;
			LOC10 = 0;
			LOC10 = getident_189441(((NimStringDesc*) &TMP3485));
			asgnRefNoCycle((void**) (&(*(*a).owner).kindU.S2.gcunsafetyreason), newsym_215684(((NU8) 0), LOC10, (*a).owner, (*reason).info));
		}
		LA5: ;
	}
	LA3: ;
}

N_NIMCALL(NIM_BOOL, isownedprocvar_345026)(Tnode214790* n, Tsym214822* owner) {
	NIM_BOOL result;
	NIM_BOOL LOC1;
	NIM_BOOL LOC2;
	result = 0;
	LOC1 = 0;
	LOC2 = 0;
	LOC2 = ((*n).kind == ((NU8) 3));
	if (!(LOC2)) goto LA3;
	LOC2 = ((*(*n).kindU.S4.sym).kind == ((NU8) 3));
	LA3: ;
	LOC1 = LOC2;
	if (!(LOC1)) goto LA4;
	LOC1 = (owner == (*(*n).kindU.S4.sym).owner);
	LA4: ;
	result = LOC1;
	return result;
}

N_NIMCALL(void, notnilcheck_344914)(Teffects342002* tracked, Tnode214790* n_344917, Ttype214828* paramtype) {
	Tnode214790* n;
{	n = skipconv_249082(n_344917);
	{
		NIM_BOOL LOC3;
		NIM_BOOL LOC4;
		NIM_BOOL LOC5;
		NU8 LOC27;
		LOC3 = 0;
		LOC4 = 0;
		LOC5 = 0;
		LOC5 = !((paramtype == NIM_NIL));
		if (!(LOC5)) goto LA6;
		LOC5 = (((*paramtype).flags &(1U<<((NU)(((NU8) 16))&31U)))!=0);
		LA6: ;
		LOC4 = LOC5;
		if (!(LOC4)) goto LA7;
		LOC4 = !(((*n).typ == NIM_NIL));
		LA7: ;
		LOC3 = LOC4;
		if (!(LOC3)) goto LA8;
		LOC3 = !((((*(*n).typ).flags &(1U<<((NU)(((NU8) 16))&31U)))!=0));
		LA8: ;
		if (!LOC3) goto LA9;
		{
			if (!((*n).kind == ((NU8) 63))) goto LA13;
			{
				NIM_BOOL LOC17;
				LOC17 = 0;
				LOC17 = containsnode_219117(n, TMP3487);
				if (!!(LOC17)) goto LA18;
				goto BeforeRet;
			}
			LA18: ;
		}
		goto LA11;
		LA13: ;
		{
			NIM_BOOL LOC21;
			NIM_BOOL LOC22;
			LOC21 = 0;
			LOC22 = 0;
			LOC22 = ((*n).kind == ((NU8) 3));
			if (!(LOC22)) goto LA23;
			LOC22 = ((258048 &(1U<<((NU)((*(*n).kindU.S4.sym).kind)&31U)))!=0);
			LA23: ;
			LOC21 = LOC22;
			if (LOC21) goto LA24;
			LOC21 = ((*n).kind == ((NU8) 38) || (*n).kind >= ((NU8) 51) && (*n).kind <= ((NU8) 52) || (*n).kind >= ((NU8) 79) && (*n).kind <= ((NU8) 81) || (*n).kind == ((NU8) 84));
			LA24: ;
			if (!LOC21) goto LA25;
			goto BeforeRet;
		}
		goto LA11;
		LA25: ;
		LA11: ;
		LOC27 = 0;
		LOC27 = impliesnotnil_337035((*tracked).guards, n);
		switch (LOC27) {
		case ((NU8) 0):
		{
			NimStringDesc* LOC29;
			NimStringDesc* LOC30;
			LOC29 = 0;
			LOC29 = rendertree_233044(n, 0);
			LOC30 = 0;
			LOC30 = nsuFormatSingleElem(((NimStringDesc*) &TMP3497), LOC29);
			message_187095((*n).info, ((NU16) 4), LOC30);
		}
		break;
		case ((NU8) 1):
		{
			NimStringDesc* LOC32;
			NimStringDesc* LOC33;
			LOC32 = 0;
			LOC32 = rendertree_233044(n, 0);
			LOC33 = 0;
			LOC33 = nsuFormatSingleElem(((NimStringDesc*) &TMP3498), LOC32);
			message_187095((*n).info, ((NU16) 4), LOC33);
		}
		break;
		case ((NU8) 2):
		{
		}
		break;
		}
	}
	LA9: ;
	}BeforeRet: ;
}

N_NIMCALL(void, trackoperand_345063)(Teffects342002* tracked, Tnode214790* n, Ttype214828* paramtype) {
	Tnode214790* a;
	Ttype214828* op;
	a = skipconvandclosure_221182(n);
	op = (*a).typ;
	{
		NIM_BOOL LOC3;
		NIM_BOOL LOC4;
		Tnode214790* effectlist;
		Tnode214790* s;
		LOC3 = 0;
		LOC4 = 0;
		LOC4 = !((op == NIM_NIL));
		if (!(LOC4)) goto LA5;
		LOC4 = ((*op).kind == ((NU8) 25));
		LA5: ;
		LOC3 = LOC4;
		if (!(LOC3)) goto LA6;
		LOC3 = !(((*n).kind == ((NU8) 23)));
		LA6: ;
		if (!LOC3) goto LA7;
		{
			NimStringDesc* LOC13;
			if (!!(((*(*(*op).n).kindU.S6.sons->data[((NI) 0)]).kind == ((NU8) 152)))) goto LA11;
			LOC13 = 0;
			LOC13 = HEX24_187183(TMP3486);
			internalerror_187113(LOC13);
		}
		LA11: ;
		effectlist = (*(*op).n).kindU.S6.sons->data[((NI) 0)];
		s = skipconv_249082(n);
		{
			NIM_BOOL LOC16;
			LOC16 = 0;
			LOC16 = ((*s).kind == ((NU8) 3));
			if (!(LOC16)) goto LA17;
			LOC16 = ((258048 &(1U<<((NU)((*(*s).kindU.S4.sym).kind)&31U)))!=0);
			LA17: ;
			if (!LOC16) goto LA18;
			propagateeffects_344854(tracked, n, (*s).kindU.S4.sym);
		}
		goto LA14;
		LA18: ;
		{
			NI LOC21;
			LOC21 = 0;
			LOC21 = len_215059(effectlist);
			if (!(LOC21 == ((NI) 0))) goto LA22;
			{
				NIM_BOOL LOC26;
				LOC26 = 0;
				LOC26 = isforwardedproc_344313(n);
				if (!LOC26) goto LA27;
				propagateeffects_344854(tracked, n, (*n).kindU.S4.sym);
			}
			goto LA24;
			LA27: ;
			{
				NIM_BOOL LOC30;
				LOC30 = 0;
				LOC30 = isownedprocvar_345026(a, (*tracked).owner);
				if (!!(LOC30)) goto LA31;
				assumetheworst_345020(tracked, n, op);
			}
			goto LA24;
			LA31: ;
			LA24: ;
			{
				NIM_BOOL LOC35;
				NIM_BOOL LOC37;
				LOC35 = 0;
				LOC35 = ((130 & (*op).flags) == 0);
				if (!(LOC35)) goto LA36;
				LOC37 = 0;
				LOC37 = isownedprocvar_345026(a, (*tracked).owner);
				LOC35 = !(LOC37);
				LA36: ;
				if (!LOC35) goto LA38;
				{
					if (!((gnotes_183080 &((NU64)1<<((NU)((((NU16) 260)- 237))&63U)))!=0)) goto LA42;
					warnaboutgcunsafe_342663(n);
				}
				LA42: ;
				markgcunsafe_342681(tracked, a);
			}
			LA38: ;
		}
		goto LA14;
		LA22: ;
		{
			mergeeffects_343283(tracked, (*effectlist).kindU.S6.sons->data[((NI) 0)], n);
			mergetags_343321(tracked, (*effectlist).kindU.S6.sons->data[((NI) 3)], n);
			{
				if (!((130 & (*op).flags) == 0)) goto LA47;
				{
					if (!((gnotes_183080 &((NU64)1<<((NU)((((NU16) 260)- 237))&63U)))!=0)) goto LA51;
					warnaboutgcunsafe_342663(n);
				}
				LA51: ;
				markgcunsafe_342681(tracked, a);
			}
			LA47: ;
		}
		LA14: ;
	}
	LA7: ;
	notnilcheck_344914(tracked, n, paramtype);
}

N_NIMCALL(Ttype214828*, paramtype_345902)(Ttype214828* op, NI i) {
	Ttype214828* result;
	result = 0;
	{
		NIM_BOOL LOC3;
		NI LOC5;
		LOC3 = 0;
		LOC3 = !((op == NIM_NIL));
		if (!(LOC3)) goto LA4;
		LOC5 = 0;
		LOC5 = len_217339(op);
		LOC3 = (i < LOC5);
		LA4: ;
		if (!LOC3) goto LA6;
		result = (*op).sons->data[i];
	}
	LA6: ;
	return result;
}

static N_INLINE(void, makevolatile_342379)(Teffects342002* a, Tsym214822* s) {
	{
		NIM_BOOL LOC3;
		NIM_BOOL LOC5;
		Tsym214822* LOC7;
		LOC3 = 0;
		LOC3 = (((NI) 0) < (*a).intrystmt);
		if (!(LOC3)) goto LA4;
		LOC5 = 0;
		LOC5 = (gcmd_160123 == ((NU8) 2));
		if (LOC5) goto LA6;
		LOC7 = 0;
		LOC7 = getmodule_221144((*a).owner);
		LOC5 = (((*LOC7).flags &(1U<<((NU)(((NU8) 27))&31U)))!=0);
		LA6: ;
		LOC3 = !(LOC5);
		LA4: ;
		if (!LOC3) goto LA8;
		(*s).flags |= ((NU32)1)<<((((NU8) 7))%(sizeof(NU32)*8));
	}
	LA8: ;
}

N_NIMCALL(void, initvar_342420)(Teffects342002* a, Tnode214790* n, NIM_BOOL volatilecheck) {
	Tsym214822* s;
{	{
		if (!!(((*n).kind == ((NU8) 3)))) goto LA3;
		goto BeforeRet;
	}
	LA3: ;
	s = (*n).kindU.S4.sym;
	{
		NIM_BOOL LOC7;
		LOC7 = 0;
		LOC7 = islocalvar_342048(a, s);
		if (!LOC7) goto LA8;
		{
			if (!volatilecheck) goto LA12;
			makevolatile_342379(a, s);
		}
		LA12: ;
		{
			NI x_342602;
			TY314503* HEX3Atmp_342616;
			NI i_342619;
			NI L_342621;
			x_342602 = 0;
			HEX3Atmp_342616 = 0;
			HEX3Atmp_342616 = (*a).init;
			i_342619 = ((NI) 0);
			L_342621 = (HEX3Atmp_342616 ? HEX3Atmp_342616->Sup.len : 0);
			{
				while (1) {
					if (!(i_342619 < L_342621)) goto LA16;
					x_342602 = HEX3Atmp_342616->data[i_342619];
					{
						if (!(x_342602 == (*s).Sup.id)) goto LA19;
						goto BeforeRet;
					}
					LA19: ;
					i_342619 += ((NI) 1);
				} LA16: ;
			}
		}
		(*a).init = (TY314503*) incrSeqV2(&((*a).init)->Sup, sizeof(NI));
		(*a).init->data[(*a).init->Sup.len] = (*s).Sup.id;
		++(*a).init->Sup.len;
	}
	LA8: ;
	}BeforeRet: ;
}

N_NIMCALL(void, initvarvianew_342622)(Teffects342002* a, Tnode214790* n) {
	Tsym214822* s;
{	{
		if (!!(((*n).kind == ((NU8) 3)))) goto LA3;
		goto BeforeRet;
	}
	LA3: ;
	s = (*n).kindU.S4.sym;
	{
		if (!(((196608 & (*(*s).typ).flags) & ~ 65536)==0)) goto LA7;
		initvar_342420(a, n, NIM_TRUE);
	}
	goto LA5;
	LA7: ;
	{
		NIM_BOOL LOC10;
		LOC10 = 0;
		LOC10 = islocalvar_342048(a, s);
		if (!LOC10) goto LA11;
		makevolatile_342379(a, s);
	}
	goto LA5;
	LA11: ;
	LA5: ;
	}BeforeRet: ;
}

N_NIMCALL(void, guarddotaccess_342220)(Teffects342002* a, Tnode214790* n) {
	Tnode214790* ri;
	Tsym214822* g;
{	ri = (*n).kindU.S6.sons->data[((NI) 1)];
	{
		NIM_BOOL LOC3;
		LOC3 = 0;
		LOC3 = !(((*ri).kind == ((NU8) 3)));
		if (LOC3) goto LA4;
		LOC3 = !(((*(*ri).kindU.S4.sym).kind == ((NU8) 18)));
		LA4: ;
		if (!LOC3) goto LA5;
		goto BeforeRet;
	}
	LA5: ;
	g = (*(*ri).kindU.S4.sym).kindU.S4.guard;
	{
		NIM_BOOL LOC9;
		LOC9 = 0;
		LOC9 = g == 0;
		if (LOC9) goto LA10;
		LOC9 = (*a).istoplevel;
		LA10: ;
		if (!LOC9) goto LA11;
		goto BeforeRet;
	}
	LA11: ;
	{
		Tsym214822* field;
		Ttype214828* ty;
		if (!((*g).kind == ((NU8) 0))) goto LA15;
		field = NIM_NIL;
		ty = skiptypes_218113((*(*n).kindU.S6.sons->data[((NI) 0)]).typ, IL64(211106247256320));
		{
			NIM_BOOL LOC19;
			LOC19 = 0;
			LOC19 = ((*ty).kind == ((NU8) 18));
			if (!(LOC19)) goto LA20;
			LOC19 = !((*ty).n == 0);
			LA20: ;
			if (!LOC19) goto LA21;
			field = lookupinrecord_221140((*ty).n, (*g).name);
		}
		goto LA17;
		LA21: ;
		{
			{
				while (1) {
					NIM_BOOL LOC26;
					LOC26 = 0;
					LOC26 = !((ty == NIM_NIL));
					if (!(LOC26)) goto LA27;
					LOC26 = ((*ty).kind == ((NU8) 17));
					LA27: ;
					if (!LOC26) goto LA25;
					field = lookupinrecord_221140((*ty).n, (*g).name);
					{
						if (!!((field == NIM_NIL))) goto LA30;
						goto LA24;
					}
					LA30: ;
					ty = (*ty).sons->data[((NI) 0)];
					{
						if (!(ty == NIM_NIL)) goto LA34;
						goto LA24;
					}
					LA34: ;
					ty = skiptypes_218113(ty, IL64(211106247256320));
				} LA25: ;
			} LA24: ;
		}
		LA17: ;
		{
			NimStringDesc* LOC40;
			if (!(field == NIM_NIL)) goto LA38;
			LOC40 = 0;
			LOC40 = rawNewString((*(*g).name).s->Sup.len + 21);
appendString(LOC40, ((NimStringDesc*) &TMP3499));
appendString(LOC40, (*(*g).name).s);
			localerror_187080((*n).info, ((NU16) 4), LOC40);
			goto BeforeRet;
		}
		LA38: ;
		g = field;
	}
	LA15: ;
	{
		Tnode214790* dot;
		NimStringDesc* LOC53;
		NimStringDesc* LOC54;
		if (!((*g).kind == ((NU8) 18))) goto LA43;
		dot = newnodei_216401(((NU8) 45), (*n).info, ((NI) 2));
		asgnRefNoCycle((void**) (&(*dot).kindU.S6.sons->data[((NI) 0)]), (*n).kindU.S6.sons->data[((NI) 0)]);
		asgnRefNoCycle((void**) (&(*dot).kindU.S6.sons->data[((NI) 1)]), newsymnode_216234(g));
		asgnRefNoCycle((void**) (&(*dot).typ), (*g).typ);
		{
			Tnode214790* L_342369;
			Tnodeseq214784* HEX3Atmp_342373;
			NI i_342376;
			NI L_342378;
			L_342369 = 0;
			HEX3Atmp_342373 = 0;
			HEX3Atmp_342373 = (*a).locked;
			i_342376 = ((NI) 0);
			L_342378 = (HEX3Atmp_342373 ? HEX3Atmp_342373->Sup.len : 0);
			{
				while (1) {
					if (!(i_342376 < L_342378)) goto LA47;
					L_342369 = HEX3Atmp_342373->data[i_342376];
					{
						NIM_BOOL LOC50;
						LOC50 = 0;
						LOC50 = sametree_336245(dot, L_342369);
						if (!LOC50) goto LA51;
						goto BeforeRet;
					}
					LA51: ;
					i_342376 += ((NI) 1);
				} LA47: ;
			}
		}
		LOC53 = 0;
		LOC54 = 0;
		LOC54 = rendertree_233044(n, 0);
		LOC53 = rawNewString(LOC54->Sup.len + 18);
appendString(LOC53, ((NimStringDesc*) &TMP3479));
appendString(LOC53, LOC54);
		localerror_187080((*n).info, ((NU16) 4), LOC53);
	}
	goto LA41;
	LA43: ;
	{
		guardglobal_342178(a, n, g);
	}
	LA41: ;
	}BeforeRet: ;
}

N_NIMCALL(void, addtointersection_342988)(TY244442** inter, NI s) {
	TY244443 LOC8;
{	{
		NI j_343018;
		NI HEX3Atmp_343042;
		NI res_343045;
		j_343018 = 0;
		HEX3Atmp_343042 = 0;
		HEX3Atmp_343042 = (((*inter) ? (*inter)->Sup.len : 0) - 1);
		res_343045 = ((NI) 0);
		{
			while (1) {
				if (!(res_343045 <= HEX3Atmp_343042)) goto LA3;
				j_343018 = res_343045;
				{
					if (!(s == (*inter)->data[j_343018].Field0)) goto LA6;
					(*inter)->data[j_343018].Field1 += ((NI) 1);
					goto BeforeRet;
				}
				LA6: ;
				res_343045 += ((NI) 1);
			} LA3: ;
		}
	}
	LOC8.Field0 = s;
	LOC8.Field1 = ((NI) 1);
	(*inter) = (TY244442*) incrSeqV2(&((*inter))->Sup, sizeof(TY244443));
	(*inter)->data[(*inter)->Sup.len] = LOC8;
	++(*inter)->Sup.len;
	}BeforeRet: ;
}

N_NIMCALL(void, catchesall_343602)(Teffects342002* tracked) {
	{
		if (!!((*(*tracked).exc).kindU.S6.sons == 0)) goto LA3;
		(*(*tracked).exc).kindU.S6.sons = (Tnodeseq214784*) setLengthSeq(&((*(*tracked).exc).kindU.S6.sons)->Sup, sizeof(Tnode214790*), ((NI) ((*tracked).bottom)));
	}
	LA3: ;
}

N_NIMCALL(void, catches_343388)(Teffects342002* tracked, Ttype214828* e_343391) {
	Ttype214828* e;
	NI L;
	NI i;
	e = skiptypes_218113(e_343391, IL64(211106247215360));
	L = len_215059((*tracked).exc);
	i = (*tracked).bottom;
	{
		while (1) {
			if (!(i < L)) goto LA2;
			{
				Tnode214790* LOC5;
				Ttype214828* LOC6;
				NI LOC7;
				LOC5 = 0;
				LOC5 = HEX5BHEX5D_215238((*tracked).exc, i);
				LOC6 = 0;
				LOC6 = exctype_343090(LOC5);
				LOC7 = 0;
				LOC7 = safeinheritancediff_248552(LOC6, e);
				if (!(LOC7 <= ((NI) 0))) goto LA8;
				asgnRefNoCycle((void**) (&(*(*tracked).exc).kindU.S6.sons->data[i]), (*(*tracked).exc).kindU.S6.sons->data[(NI)(L - ((NI) 1))]);
				L -= ((NI) 1);
			}
			goto LA3;
			LA8: ;
			{
				i += ((NI) 1);
			}
			LA3: ;
		} LA2: ;
	}
	{
		if (!!((*(*tracked).exc).kindU.S6.sons == 0)) goto LA13;
		(*(*tracked).exc).kindU.S6.sons = (Tnodeseq214784*) setLengthSeq(&((*(*tracked).exc).kindU.S6.sons)->Sup, sizeof(Tnode214790*), ((NI) (L)));
	}
	goto LA11;
	LA13: ;
	{
	}
	LA11: ;
}

N_NIMCALL(void, tracktrystmt_343629)(Teffects342002* tracked, Tnode214790* n) {
	NI oldbottom;
	NI oldstate;
	TY244442* inter;
	NI branches;
	NIM_BOOL hasfinally;
	oldbottom = (*tracked).bottom;
	(*tracked).bottom = len_215059((*tracked).exc);
	oldstate = ((*tracked).init ? (*tracked).init->Sup.len : 0);
	inter = (TY244442*) newSeq((&NTI244442), 0);
	(*tracked).intrystmt += ((NI) 1);
	track_343625(tracked, (*n).kindU.S6.sons->data[((NI) 0)]);
	(*tracked).intrystmt -= ((NI) 1);
	{
		NI i_343705;
		NI HEX3Atmp_344216;
		NI res_344219;
		i_343705 = 0;
		HEX3Atmp_344216 = 0;
		HEX3Atmp_344216 = (((*tracked).init ? (*tracked).init->Sup.len : 0) - 1);
		res_344219 = oldstate;
		{
			while (1) {
				if (!(res_344219 <= HEX3Atmp_344216)) goto LA3;
				i_343705 = res_344219;
				addtointersection_342988((&inter), (*tracked).init->data[i_343705]);
				res_344219 += ((NI) 1);
			} LA3: ;
		}
	}
	branches = ((NI) 1);
	hasfinally = NIM_FALSE;
	{
		NI i_343727;
		NI HEX3Atmp_344240;
		NI LOC5;
		NI res_344243;
		i_343727 = 0;
		HEX3Atmp_344240 = 0;
		LOC5 = 0;
		LOC5 = len_215059(n);
		HEX3Atmp_344240 = (LOC5 - 1);
		res_344243 = ((NI) 1);
		{
			while (1) {
				Tnode214790* b;
				NI blen;
				if (!(res_344243 <= HEX3Atmp_344240)) goto LA7;
				i_343727 = res_344243;
				b = (*n).kindU.S6.sons->data[i_343727];
				blen = sonslen_217351(b);
				{
					if (!((*b).kind == ((NU8) 87))) goto LA10;
					branches += ((NI) 1);
					{
						if (!(blen == ((NI) 1))) goto LA14;
						catchesall_343602(tracked);
					}
					goto LA12;
					LA14: ;
					{
						{
							NI j_343760;
							NI HEX3Atmp_344225;
							NI res_344228;
							j_343760 = 0;
							HEX3Atmp_344225 = 0;
							HEX3Atmp_344225 = (NI)(blen - ((NI) 2));
							res_344228 = ((NI) 0);
							{
								while (1) {
									if (!(res_344228 <= HEX3Atmp_344225)) goto LA19;
									j_343760 = res_344228;
									catches_343388(tracked, (*(*b).kindU.S6.sons->data[j_343760]).typ);
									res_344228 += ((NI) 1);
								} LA19: ;
							}
						}
					}
					LA12: ;
					(*tracked).init = (TY314503*) setLengthSeq(&((*tracked).init)->Sup, sizeof(NI), ((NI) (oldstate)));
					track_343625(tracked, (*b).kindU.S6.sons->data[(NI)(blen - ((NI) 1))]);
					{
						NI i_343838;
						NI HEX3Atmp_344233;
						NI res_344236;
						i_343838 = 0;
						HEX3Atmp_344233 = 0;
						HEX3Atmp_344233 = (((*tracked).init ? (*tracked).init->Sup.len : 0) - 1);
						res_344236 = oldstate;
						{
							while (1) {
								if (!(res_344236 <= HEX3Atmp_344233)) goto LA22;
								i_343838 = res_344236;
								addtointersection_342988((&inter), (*tracked).init->data[i_343838]);
								res_344236 += ((NI) 1);
							} LA22: ;
						}
					}
				}
				goto LA8;
				LA10: ;
				{
					(*tracked).init = (TY314503*) setLengthSeq(&((*tracked).init)->Sup, sizeof(NI), ((NI) (oldstate)));
					track_343625(tracked, (*b).kindU.S6.sons->data[(NI)(blen - ((NI) 1))]);
					hasfinally = NIM_TRUE;
				}
				LA8: ;
				res_344243 += ((NI) 1);
			} LA7: ;
		}
	}
	(*tracked).bottom = oldbottom;
	{
		if (!!(hasfinally)) goto LA26;
		(*tracked).init = (TY314503*) setLengthSeq(&((*tracked).init)->Sup, sizeof(NI), ((NI) (oldstate)));
	}
	LA26: ;
	{
		NI id_344202;
		NI count_344203;
		NI i_344250;
		NI L_344252;
		id_344202 = 0;
		count_344203 = 0;
		i_344250 = ((NI) 0);
		L_344252 = (inter ? inter->Sup.len : 0);
		{
			while (1) {
				if (!(i_344250 < L_344252)) goto LA30;
				id_344202 = inter->data[i_344250].Field0;
				count_344203 = inter->data[i_344250].Field1;
				{
					if (!(count_344203 == branches)) goto LA33;
					(*tracked).init = (TY314503*) incrSeqV2(&((*tracked).init)->Sup, sizeof(NI));
					(*tracked).init->data[(*tracked).init->Sup.len] = id_344202;
					++(*tracked).init->Sup.len;
				}
				LA33: ;
				i_344250 += ((NI) 1);
			} LA30: ;
		}
	}
}

N_NIMCALL(void, listeffects_343359)(Teffects342002* a) {
	{
		Tnode214790* e_343362;
		Tnode214790* HEX3Atmp_343365;
		e_343362 = 0;
		HEX3Atmp_343365 = 0;
		HEX3Atmp_343365 = (*a).exc;
		{
			NI i_343369;
			NI HEX3Atmp_343371;
			NI LOC3;
			NI res_343373;
			i_343369 = 0;
			HEX3Atmp_343371 = 0;
			LOC3 = 0;
			LOC3 = len_215059(HEX3Atmp_343365);
			HEX3Atmp_343371 = (LOC3 - 1);
			res_343373 = ((NI) 0);
			{
				while (1) {
					NimStringDesc* LOC6;
					if (!(res_343373 <= HEX3Atmp_343371)) goto LA5;
					i_343369 = res_343373;
					e_343362 = (*HEX3Atmp_343365).kindU.S6.sons->data[i_343369];
					LOC6 = 0;
					LOC6 = typetostring_240017((*e_343362).typ, ((NU8) 0));
					message_187095((*e_343362).info, ((NU16) 290), LOC6);
					res_343373 += ((NI) 1);
				} LA5: ;
			}
		}
	}
	{
		Tnode214790* e_343363;
		Tnode214790* HEX3Atmp_343377;
		e_343363 = 0;
		HEX3Atmp_343377 = 0;
		HEX3Atmp_343377 = (*a).tags;
		{
			NI i_343381;
			NI HEX3Atmp_343383;
			NI LOC9;
			NI res_343385;
			i_343381 = 0;
			HEX3Atmp_343383 = 0;
			LOC9 = 0;
			LOC9 = len_215059(HEX3Atmp_343377);
			HEX3Atmp_343383 = (LOC9 - 1);
			res_343385 = ((NI) 0);
			{
				while (1) {
					NimStringDesc* LOC12;
					if (!(res_343385 <= HEX3Atmp_343383)) goto LA11;
					i_343381 = res_343385;
					e_343363 = (*HEX3Atmp_343377).kindU.S6.sons->data[i_343381];
					LOC12 = 0;
					LOC12 = typetostring_240017((*e_343363).typ, ((NU8) 0));
					message_187095((*e_343363).info, ((NU16) 290), LOC12);
					res_343385 += ((NI) 1);
				} LA11: ;
			}
		}
	}
}

N_NIMCALL(void, trackpragmastmt_344338)(Teffects342002* tracked, Tnode214790* n) {
	{
		NI i_344353;
		NI HEX3Atmp_344366;
		NI LOC2;
		NI res_344369;
		i_344353 = 0;
		HEX3Atmp_344366 = 0;
		LOC2 = 0;
		LOC2 = sonslen_217351(n);
		HEX3Atmp_344366 = (NI)(LOC2 - ((NI) 1));
		res_344369 = ((NI) 0);
		{
			while (1) {
				Tnode214790* it;
				if (!(res_344369 <= HEX3Atmp_344366)) goto LA4;
				i_344353 = res_344369;
				it = (*n).kindU.S6.sons->data[i_344353];
				{
					NU16 LOC7;
					LOC7 = 0;
					LOC7 = whichpragma_239525(it);
					if (!(LOC7 == ((NU16) 160))) goto LA8;
					listeffects_343359(tracked);
				}
				LA8: ;
				res_344369 += ((NI) 1);
			} LA4: ;
		}
	}
}

N_NIMCALL(NIM_BOOL, breaksblock_345220)(Tnode214790* n) {
	NIM_BOOL result;
{	result = 0;
	switch ((*n).kind) {
	case ((NU8) 115):
	case ((NU8) 126):
	{
		{
			Tnode214790* c_345224;
			c_345224 = 0;
			{
				NI i_345252;
				NI HEX3Atmp_345254;
				NI LOC4;
				NI res_345256;
				i_345252 = 0;
				HEX3Atmp_345254 = 0;
				LOC4 = 0;
				LOC4 = len_215059(n);
				HEX3Atmp_345254 = (LOC4 - 1);
				res_345256 = ((NI) 0);
				{
					while (1) {
						if (!(res_345256 <= HEX3Atmp_345254)) goto LA6;
						i_345252 = res_345256;
						c_345224 = (*n).kindU.S6.sons->data[i_345252];
						{
							NIM_BOOL LOC9;
							LOC9 = 0;
							LOC9 = breaksblock_345220(c_345224);
							if (!LOC9) goto LA10;
							result = NIM_TRUE;
							goto BeforeRet;
						}
						LA10: ;
						res_345256 += ((NI) 1);
					} LA6: ;
				}
			}
		}
	}
	break;
	case ((NU8) 110):
	case ((NU8) 109):
	case ((NU8) 108):
	{
		result = NIM_TRUE;
		goto BeforeRet;
	}
	break;
	case ((NU8) 27):
	case ((NU8) 29):
	case ((NU8) 30):
	case ((NU8) 31):
	case ((NU8) 26):
	case ((NU8) 28):
	case ((NU8) 32):
	{
		{
			NIM_BOOL LOC16;
			LOC16 = 0;
			LOC16 = ((*(*n).kindU.S6.sons->data[((NI) 0)]).kind == ((NU8) 3));
			if (!(LOC16)) goto LA17;
			LOC16 = (((*(*(*n).kindU.S6.sons->data[((NI) 0)]).kindU.S4.sym).flags &(1U<<((NU)(((NU8) 14))&31U)))!=0);
			LA17: ;
			if (!LOC16) goto LA18;
			result = NIM_TRUE;
			goto BeforeRet;
		}
		LA18: ;
	}
	break;
	default:
	{
	}
	break;
	}
	}BeforeRet: ;
	return result;
}

N_NIMCALL(void, trackcase_345259)(Teffects342002* tracked, Tnode214790* n) {
	NI oldstate;
	NI oldfacts;
	NIM_BOOL stringcase;
	Ttype214828* LOC1;
	NIM_BOOL interesting;
	NIM_BOOL LOC2;
	NIM_BOOL LOC3;
	TY244442* inter;
	NI tocover;
	track_343625(tracked, (*n).kindU.S6.sons->data[((NI) 0)]);
	oldstate = ((*tracked).init ? (*tracked).init->Sup.len : 0);
	oldfacts = ((*tracked).guards ? (*tracked).guards->Sup.len : 0);
	LOC1 = 0;
	LOC1 = skiptypes_218113((*(*n).kindU.S6.sons->data[((NI) 0)]).typ, IL64(211106242013184));
	stringcase = ((*LOC1).kind >= ((NU8) 36) && (*LOC1).kind <= ((NU8) 39) || (*LOC1).kind == ((NU8) 28));
	LOC2 = 0;
	LOC3 = 0;
	LOC3 = !(stringcase);
	if (!(LOC3)) goto LA4;
	LOC3 = interestingcaseexpr_335232((*n).kindU.S6.sons->data[((NI) 0)]);
	LA4: ;
	LOC2 = LOC3;
	if (!(LOC2)) goto LA5;
	LOC2 = ((gnotes_183080 &((NU64)1<<((NU)((((NU16) 258)- 237))&63U)))!=0);
	LA5: ;
	interesting = LOC2;
	inter = (TY244442*) newSeq((&NTI244442), 0);
	tocover = ((NI) 0);
	{
		NI i_345356;
		NI HEX3Atmp_345504;
		NI LOC7;
		NI res_345507;
		i_345356 = 0;
		HEX3Atmp_345504 = 0;
		LOC7 = 0;
		LOC7 = len_215059(n);
		HEX3Atmp_345504 = (LOC7 - 1);
		res_345507 = ((NI) 1);
		{
			while (1) {
				Tnode214790* branch;
				if (!(res_345507 <= HEX3Atmp_345504)) goto LA9;
				i_345356 = res_345507;
				branch = (*n).kindU.S6.sons->data[i_345356];
				(*tracked).init = (TY314503*) setLengthSeq(&((*tracked).init)->Sup, sizeof(NI), ((NI) (oldstate)));
				{
					if (!interesting) goto LA12;
					(*tracked).guards = (Tnodeseq214784*) setLengthSeq(&((*tracked).guards)->Sup, sizeof(Tnode214790*), ((NI) (oldfacts)));
					addcasebranchfacts_338694((&(*tracked).guards), n, i_345356);
				}
				LA12: ;
				{
					NI i_345398;
					NI HEX3Atmp_345489;
					NI LOC15;
					NI res_345492;
					i_345398 = 0;
					HEX3Atmp_345489 = 0;
					LOC15 = 0;
					LOC15 = len_215059(branch);
					HEX3Atmp_345489 = (LOC15 - 1);
					res_345492 = ((NI) 0);
					{
						while (1) {
							if (!(res_345492 <= HEX3Atmp_345489)) goto LA17;
							i_345398 = res_345492;
							track_343625(tracked, (*branch).kindU.S6.sons->data[i_345398]);
							res_345492 += ((NI) 1);
						} LA17: ;
					}
				}
				{
					Tnode214790* LOC20;
					NIM_BOOL LOC21;
					LOC20 = 0;
					LOC20 = lastson_217364(branch);
					LOC21 = 0;
					LOC21 = breaksblock_345220(LOC20);
					if (!!(LOC21)) goto LA22;
					tocover += ((NI) 1);
				}
				LA22: ;
				{
					NI i_345435;
					NI HEX3Atmp_345497;
					NI res_345500;
					i_345435 = 0;
					HEX3Atmp_345497 = 0;
					HEX3Atmp_345497 = (((*tracked).init ? (*tracked).init->Sup.len : 0) - 1);
					res_345500 = oldstate;
					{
						while (1) {
							if (!(res_345500 <= HEX3Atmp_345497)) goto LA26;
							i_345435 = res_345500;
							addtointersection_342988((&inter), (*tracked).init->data[i_345435]);
							res_345500 += ((NI) 1);
						} LA26: ;
					}
				}
				res_345507 += ((NI) 1);
			} LA9: ;
		}
	}
	(*tracked).init = (TY314503*) setLengthSeq(&((*tracked).init)->Sup, sizeof(NI), ((NI) (oldstate)));
	{
		NIM_BOOL LOC29;
		Tnode214790* LOC31;
		LOC29 = 0;
		LOC29 = !(stringcase);
		if (LOC29) goto LA30;
		LOC31 = 0;
		LOC31 = lastson_217364(n);
		LOC29 = ((*LOC31).kind == ((NU8) 88));
		LA30: ;
		if (!LOC29) goto LA32;
		{
			NI id_345464;
			NI count_345465;
			NI i_345514;
			NI L_345516;
			id_345464 = 0;
			count_345465 = 0;
			i_345514 = ((NI) 0);
			L_345516 = (inter ? inter->Sup.len : 0);
			{
				while (1) {
					if (!(i_345514 < L_345516)) goto LA36;
					id_345464 = inter->data[i_345514].Field0;
					count_345465 = inter->data[i_345514].Field1;
					{
						if (!(tocover <= count_345465)) goto LA39;
						(*tracked).init = (TY314503*) incrSeqV2(&((*tracked).init)->Sup, sizeof(NI));
						(*tracked).init->data[(*tracked).init->Sup.len] = id_345464;
						++(*tracked).init->Sup.len;
					}
					LA39: ;
					i_345514 += ((NI) 1);
				} LA36: ;
			}
		}
	}
	LA32: ;
	(*tracked).guards = (Tnodeseq214784*) setLengthSeq(&((*tracked).guards)->Sup, sizeof(Tnode214790*), ((NI) (oldfacts)));
}

N_NIMCALL(void, trackif_345517)(Teffects342002* tracked, Tnode214790* n) {
	NI oldfacts;
	NI oldstate;
	TY244442* inter;
	NI tocover;
	track_343625(tracked, (*(*n).kindU.S6.sons->data[((NI) 0)]).kindU.S6.sons->data[((NI) 0)]);
	oldfacts = ((*tracked).guards ? (*tracked).guards->Sup.len : 0);
	addfact_336193((&(*tracked).guards), (*(*n).kindU.S6.sons->data[((NI) 0)]).kindU.S6.sons->data[((NI) 0)]);
	oldstate = ((*tracked).init ? (*tracked).init->Sup.len : 0);
	inter = (TY244442*) newSeq((&NTI244442), 0);
	tocover = ((NI) 0);
	track_343625(tracked, (*(*n).kindU.S6.sons->data[((NI) 0)]).kindU.S6.sons->data[((NI) 1)]);
	{
		NIM_BOOL LOC3;
		LOC3 = 0;
		LOC3 = breaksblock_345220((*(*n).kindU.S6.sons->data[((NI) 0)]).kindU.S6.sons->data[((NI) 1)]);
		if (!!(LOC3)) goto LA4;
		tocover += ((NI) 1);
	}
	LA4: ;
	{
		NI i_345600;
		NI HEX3Atmp_345759;
		NI res_345762;
		i_345600 = 0;
		HEX3Atmp_345759 = 0;
		HEX3Atmp_345759 = (((*tracked).init ? (*tracked).init->Sup.len : 0) - 1);
		res_345762 = oldstate;
		{
			while (1) {
				if (!(res_345762 <= HEX3Atmp_345759)) goto LA8;
				i_345600 = res_345762;
				addtointersection_342988((&inter), (*tracked).init->data[i_345600]);
				res_345762 += ((NI) 1);
			} LA8: ;
		}
	}
	{
		NI i_345620;
		NI HEX3Atmp_345791;
		NI LOC10;
		NI res_345794;
		i_345620 = 0;
		HEX3Atmp_345791 = 0;
		LOC10 = 0;
		LOC10 = len_215059(n);
		HEX3Atmp_345791 = (LOC10 - 1);
		res_345794 = ((NI) 1);
		{
			while (1) {
				Tnode214790* branch;
				if (!(res_345794 <= HEX3Atmp_345791)) goto LA12;
				i_345620 = res_345794;
				branch = (*n).kindU.S6.sons->data[i_345620];
				(*tracked).guards = (Tnodeseq214784*) setLengthSeq(&((*tracked).guards)->Sup, sizeof(Tnode214790*), ((NI) (oldfacts)));
				{
					NI j_345642;
					NI HEX3Atmp_345768;
					NI res_345771;
					j_345642 = 0;
					HEX3Atmp_345768 = 0;
					HEX3Atmp_345768 = (NI)(i_345620 - ((NI) 1));
					res_345771 = ((NI) 0);
					{
						while (1) {
							if (!(res_345771 <= HEX3Atmp_345768)) goto LA15;
							j_345642 = res_345771;
							addfactneg_336221((&(*tracked).guards), (*(*n).kindU.S6.sons->data[j_345642]).kindU.S6.sons->data[((NI) 0)]);
							res_345771 += ((NI) 1);
						} LA15: ;
					}
				}
				{
					NI LOC18;
					LOC18 = 0;
					LOC18 = len_215059(branch);
					if (!(((NI) 1) < LOC18)) goto LA19;
					addfact_336193((&(*tracked).guards), (*branch).kindU.S6.sons->data[((NI) 0)]);
				}
				LA19: ;
				(*tracked).init = (TY314503*) setLengthSeq(&((*tracked).init)->Sup, sizeof(NI), ((NI) (oldstate)));
				{
					NI i_345677;
					NI HEX3Atmp_345776;
					NI LOC22;
					NI res_345779;
					i_345677 = 0;
					HEX3Atmp_345776 = 0;
					LOC22 = 0;
					LOC22 = len_215059(branch);
					HEX3Atmp_345776 = (LOC22 - 1);
					res_345779 = ((NI) 0);
					{
						while (1) {
							if (!(res_345779 <= HEX3Atmp_345776)) goto LA24;
							i_345677 = res_345779;
							track_343625(tracked, (*branch).kindU.S6.sons->data[i_345677]);
							res_345779 += ((NI) 1);
						} LA24: ;
					}
				}
				{
					Tnode214790* LOC27;
					NIM_BOOL LOC28;
					LOC27 = 0;
					LOC27 = lastson_217364(branch);
					LOC28 = 0;
					LOC28 = breaksblock_345220(LOC27);
					if (!!(LOC28)) goto LA29;
					tocover += ((NI) 1);
				}
				LA29: ;
				{
					NI i_345714;
					NI HEX3Atmp_345784;
					NI res_345787;
					i_345714 = 0;
					HEX3Atmp_345784 = 0;
					HEX3Atmp_345784 = (((*tracked).init ? (*tracked).init->Sup.len : 0) - 1);
					res_345787 = oldstate;
					{
						while (1) {
							if (!(res_345787 <= HEX3Atmp_345784)) goto LA33;
							i_345714 = res_345787;
							addtointersection_342988((&inter), (*tracked).init->data[i_345714]);
							res_345787 += ((NI) 1);
						} LA33: ;
					}
				}
				res_345794 += ((NI) 1);
			} LA12: ;
		}
	}
	(*tracked).init = (TY314503*) setLengthSeq(&((*tracked).init)->Sup, sizeof(NI), ((NI) (oldstate)));
	{
		Tnode214790* LOC36;
		NI LOC37;
		LOC36 = 0;
		LOC36 = lastson_217364(n);
		LOC37 = 0;
		LOC37 = len_215059(LOC36);
		if (!(LOC37 == ((NI) 1))) goto LA38;
		{
			NI id_345735;
			NI count_345736;
			NI i_345801;
			NI L_345803;
			id_345735 = 0;
			count_345736 = 0;
			i_345801 = ((NI) 0);
			L_345803 = (inter ? inter->Sup.len : 0);
			{
				while (1) {
					if (!(i_345801 < L_345803)) goto LA42;
					id_345735 = inter->data[i_345801].Field0;
					count_345736 = inter->data[i_345801].Field1;
					{
						if (!(tocover <= count_345736)) goto LA45;
						(*tracked).init = (TY314503*) incrSeqV2(&((*tracked).init)->Sup, sizeof(NI));
						(*tracked).init->data[(*tracked).init->Sup.len] = id_345735;
						++(*tracked).init->Sup.len;
					}
					LA45: ;
					i_345801 += ((NI) 1);
				} LA42: ;
			}
		}
	}
	LA38: ;
	(*tracked).guards = (Tnodeseq214784*) setLengthSeq(&((*tracked).guards)->Sup, sizeof(Tnode214790*), ((NI) (oldfacts)));
}

N_NIMCALL(void, trackblock_345804)(Teffects342002* tracked, Tnode214790* n) {
	{
		NI oldstate;
		if (!((*n).kind == ((NU8) 115) || (*n).kind == ((NU8) 126))) goto LA3;
		oldstate = ((NI) -1);
		{
			NI i_345838;
			NI HEX3Atmp_345860;
			NI LOC6;
			NI res_345863;
			i_345838 = 0;
			HEX3Atmp_345860 = 0;
			LOC6 = 0;
			LOC6 = len_215059(n);
			HEX3Atmp_345860 = (LOC6 - 1);
			res_345863 = ((NI) 0);
			{
				while (1) {
					if (!(res_345863 <= HEX3Atmp_345860)) goto LA8;
					i_345838 = res_345863;
					{
						NIM_BOOL LOC11;
						LOC11 = 0;
						LOC11 = hassubnodewith_219175((*n).kindU.S6.sons->data[i_345838], ((NU8) 110));
						if (!LOC11) goto LA12;
						{
							if (!(oldstate < ((NI) 0))) goto LA16;
							oldstate = ((*tracked).init ? (*tracked).init->Sup.len : 0);
						}
						LA16: ;
					}
					LA12: ;
					track_343625(tracked, (*n).kindU.S6.sons->data[i_345838]);
					res_345863 += ((NI) 1);
				} LA8: ;
			}
		}
		{
			if (!(((NI) 0) < oldstate)) goto LA20;
			(*tracked).init = (TY314503*) setLengthSeq(&((*tracked).init)->Sup, sizeof(NI), ((NI) (oldstate)));
		}
		LA20: ;
	}
	goto LA1;
	LA3: ;
	{
		track_343625(tracked, n);
	}
	LA1: ;
}

N_NIMCALL(NIM_BOOL, istrue_345867)(Tnode214790* n) {
	NIM_BOOL result;
	NIM_BOOL LOC1;
	NIM_BOOL LOC2;
	NIM_BOOL LOC3;
	NIM_BOOL LOC7;
	result = 0;
	LOC1 = 0;
	LOC2 = 0;
	LOC3 = 0;
	LOC3 = ((*n).kind == ((NU8) 3));
	if (!(LOC3)) goto LA4;
	LOC3 = ((*(*n).kindU.S4.sym).kind == ((NU8) 19));
	LA4: ;
	LOC2 = LOC3;
	if (!(LOC2)) goto LA5;
	LOC2 = !(((*(*n).kindU.S4.sym).position == ((NI) 0)));
	LA5: ;
	LOC1 = LOC2;
	if (LOC1) goto LA6;
	LOC7 = 0;
	LOC7 = ((*n).kind == ((NU8) 6));
	if (!(LOC7)) goto LA8;
	LOC7 = !(((*n).kindU.S1.intval == IL64(0)));
	LA8: ;
	LOC1 = LOC7;
	LA6: ;
	result = LOC1;
	return result;
}

N_NIMCALL(NI16, getlocklevel_342087)(Ttype214828* t_342089) {
	NI16 result;
	Ttype214828* t;
	result = 0;
	t = t_342089;
	{
		NIM_BOOL LOC3;
		NI LOC5;
		LOC3 = 0;
		LOC3 = ((*t).kind == ((NU8) 11));
		if (!(LOC3)) goto LA4;
		LOC5 = 0;
		LOC5 = len_217339(t);
		LOC3 = (LOC5 == ((NI) 3));
		LA4: ;
		if (!LOC3) goto LA6;
		t = (*t).sons->data[((NI) 1)];
	}
	LA6: ;
	{
		NIM_BOOL LOC10;
		NIM_BOOL LOC11;
		LOC10 = 0;
		LOC11 = 0;
		LOC11 = ((*t).kind == ((NU8) 59));
		if (!(LOC11)) goto LA12;
		LOC11 = !(((*t).n == NIM_NIL));
		LA12: ;
		LOC10 = LOC11;
		if (!(LOC10)) goto LA13;
		LOC10 = ((*(*t).n).kind >= ((NU8) 5) && (*(*t).n).kind <= ((NU8) 10));
		LA13: ;
		if (!LOC10) goto LA14;
		result = ((NI16) ((*(*t).n).kindU.S1.intval));
	}
	LA14: ;
	return result;
}

N_NIMCALL(void, locklocations_342134)(Teffects342002* a, Tnode214790* pragma) {
	NI16 firstll;
{	{
		if (!!(((*pragma).kind == ((NU8) 34)))) goto LA3;
		localerror_187080((*pragma).info, ((NU16) 4), ((NimStringDesc*) &TMP3500));
		goto BeforeRet;
	}
	LA3: ;
	firstll = ((NI16) -1);
	{
		Tnode214790* x_342148;
		Tnode214790* HEX3Atmp_342167;
		x_342148 = 0;
		HEX3Atmp_342167 = 0;
		HEX3Atmp_342167 = HEX5BHEX5D_215238(pragma, ((NI) 1));
		{
			NI i_342171;
			NI HEX3Atmp_342173;
			NI LOC7;
			NI res_342175;
			i_342171 = 0;
			HEX3Atmp_342173 = 0;
			LOC7 = 0;
			LOC7 = len_215059(HEX3Atmp_342167);
			HEX3Atmp_342173 = (LOC7 - 1);
			res_342175 = ((NI) 0);
			{
				while (1) {
					NI16 thisll;
					if (!(res_342175 <= HEX3Atmp_342173)) goto LA9;
					i_342171 = res_342175;
					x_342148 = (*HEX3Atmp_342167).kindU.S6.sons->data[i_342171];
					thisll = getlocklevel_342087((*x_342148).typ);
					{
						if (!!((thisll == ((NI16) 0)))) goto LA12;
						{
							NIM_BOOL LOC16;
							NimStringDesc* LOC20;
							NimStringDesc* LOC21;
							LOC16 = 0;
							LOC16 = (thisll < ((NI16) 0));
							if (LOC16) goto LA17;
							LOC16 = (((NI16) 1000) < thisll);
							LA17: ;
							if (!LOC16) goto LA18;
							LOC20 = 0;
							LOC21 = 0;
							LOC21 = HEX24_217069(thisll);
							LOC20 = rawNewString(LOC21->Sup.len + 20);
appendString(LOC20, ((NimStringDesc*) &TMP3501));
appendString(LOC20, LOC21);
							localerror_187085((*x_342148).info, LOC20);
						}
						goto LA14;
						LA18: ;
						{
							if (!(firstll < ((NI16) 0))) goto LA23;
							firstll = thisll;
						}
						goto LA14;
						LA23: ;
						{
							if (!!((firstll == thisll))) goto LA26;
							localerror_187080((*x_342148).info, ((NU16) 4), ((NimStringDesc*) &TMP3502));
						}
						goto LA14;
						LA26: ;
						LA14: ;
						(*a).maxlocklevel = (((*a).maxlocklevel >= firstll) ? (*a).maxlocklevel : firstll);
					}
					LA12: ;
					(*a).locked = (Tnodeseq214784*) incrSeqV2(&((*a).locked)->Sup, sizeof(Tnode214790*));
					asgnRefNoCycle((void**) (&(*a).locked->data[(*a).locked->Sup.len]), x_342148);
					++(*a).locked->Sup.len;
					res_342175 += ((NI) 1);
				} LA9: ;
			}
		}
	}
	{
		NIM_BOOL LOC30;
		LOC30 = 0;
		LOC30 = (((NI16) 0) <= firstll);
		if (!(LOC30)) goto LA31;
		LOC30 = !((firstll == (*a).currlocklevel));
		LA31: ;
		if (!LOC30) goto LA32;
		{
			NIM_BOOL LOC36;
			LOC36 = 0;
			LOC36 = (((NI16) 0) < (*a).currlocklevel);
			if (!(LOC36)) goto LA37;
			LOC36 = ((*a).currlocklevel <= firstll);
			LA37: ;
			if (!LOC36) goto LA38;
			localerror_187080((*pragma).info, ((NU16) 4), ((NimStringDesc*) &TMP3503));
		}
		LA38: ;
		(*a).currlocklevel = firstll;
	}
	LA32: ;
	}BeforeRet: ;
}

N_NIMCALL(void, track_343625)(Teffects342002* tracked, Tnode214790* n) {
	switch ((*n).kind) {
	case ((NU8) 3):
	{
		usevar_342784(tracked, n);
	}
	break;
	case ((NU8) 108):
	{
		(*(*n).kindU.S6.sons->data[((NI) 0)]).info = (*n).info;
		addeffect_343154(tracked, (*n).kindU.S6.sons->data[((NI) 0)], NIM_FALSE);
		{
			NI i_345977;
			NI HEX3Atmp_346665;
			NI LOC4;
			NI res_346668;
			i_345977 = 0;
			HEX3Atmp_346665 = 0;
			LOC4 = 0;
			LOC4 = safelen_215081(n);
			HEX3Atmp_346665 = (LOC4 - 1);
			res_346668 = ((NI) 0);
			{
				while (1) {
					if (!(res_346668 <= HEX3Atmp_346665)) goto LA6;
					i_345977 = res_346668;
					track_343625(tracked, (*n).kindU.S6.sons->data[i_345977]);
					res_346668 += ((NI) 1);
				} LA6: ;
			}
		}
	}
	break;
	case ((NU8) 27):
	case ((NU8) 29):
	case ((NU8) 30):
	case ((NU8) 31):
	case ((NU8) 26):
	case ((NU8) 28):
	case ((NU8) 32):
	{
		Tnode214790* a;
		Ttype214828* op;
		a = (*n).kindU.S6.sons->data[((NI) 0)];
		op = (*a).typ;
		{
			NIM_BOOL LOC10;
			NIM_BOOL LOC11;
			Tnode214790* effectlist;
			LOC10 = 0;
			LOC11 = 0;
			LOC11 = !((op == NIM_NIL));
			if (!(LOC11)) goto LA12;
			LOC11 = ((*op).kind == ((NU8) 25));
			LA12: ;
			LOC10 = LOC11;
			if (!(LOC10)) goto LA13;
			LOC10 = ((*(*(*op).n).kindU.S6.sons->data[((NI) 0)]).kind == ((NU8) 152));
			LA13: ;
			if (!LOC10) goto LA14;
			{
				NI16 LOC24;
				if (!((*a).kind == ((NU8) 3))) goto LA18;
				{
					if (!((*a).kindU.S4.sym == (*tracked).owner)) goto LA22;
					(*tracked).isrecursive = NIM_TRUE;
				}
				LA22: ;
				LOC24 = 0;
				LOC24 = getlocklevel_344801((*a).kindU.S4.sym);
				mergelocklevels_344845(tracked, n, LOC24);
			}
			goto LA16;
			LA18: ;
			{
				mergelocklevels_344845(tracked, n, (*op).locklevel);
			}
			LA16: ;
			effectlist = (*(*op).n).kindU.S6.sons->data[((NI) 0)];
			{
				NIM_BOOL LOC28;
				LOC28 = 0;
				LOC28 = ((*a).kind == ((NU8) 3));
				if (!(LOC28)) goto LA29;
				LOC28 = ((*(*a).kindU.S4.sym).kind == ((NU8) 13));
				LA29: ;
				if (!LOC28) goto LA30;
				propagateeffects_344854(tracked, n, (*a).kindU.S4.sym);
			}
			goto LA26;
			LA30: ;
			{
				NI LOC33;
				LOC33 = 0;
				LOC33 = len_215059(effectlist);
				if (!(LOC33 == ((NI) 0))) goto LA34;
				{
					NIM_BOOL LOC38;
					LOC38 = 0;
					LOC38 = isforwardedproc_344313(a);
					if (!LOC38) goto LA39;
					propagateeffects_344854(tracked, n, (*a).kindU.S4.sym);
				}
				goto LA36;
				LA39: ;
				{
					NIM_BOOL LOC42;
					LOC42 = 0;
					LOC42 = isindirectcall_344253(a, (*tracked).owner);
					if (!LOC42) goto LA43;
					assumetheworst_345020(tracked, n, op);
				}
				goto LA36;
				LA43: ;
				LA36: ;
			}
			goto LA26;
			LA34: ;
			{
				mergeeffects_343283(tracked, (*effectlist).kindU.S6.sons->data[((NI) 0)], n);
				mergetags_343321(tracked, (*effectlist).kindU.S6.sons->data[((NI) 3)], n);
				{
					NIM_BOOL LOC48;
					NIM_BOOL LOC50;
					LOC48 = 0;
					LOC48 = ((130 & (*op).flags) == 0);
					if (!(LOC48)) goto LA49;
					LOC50 = 0;
					LOC50 = importedfromc_344776(a);
					LOC48 = !(LOC50);
					LA49: ;
					if (!LOC48) goto LA51;
					{
						NIM_BOOL LOC55;
						LOC55 = 0;
						LOC55 = ((*a).kind == ((NU8) 3));
						if (!(LOC55)) goto LA56;
						LOC55 = ((*a).kindU.S4.sym == (*tracked).owner);
						LA56: ;
						if (!!(LOC55)) goto LA57;
						{
							if (!((gnotes_183080 &((NU64)1<<((NU)((((NU16) 260)- 237))&63U)))!=0)) goto LA61;
							warnaboutgcunsafe_342663(n);
						}
						LA61: ;
						markgcunsafe_342681(tracked, a);
					}
					LA57: ;
				}
				LA51: ;
			}
			LA26: ;
		}
		LA14: ;
		{
			NI i_346137;
			NI HEX3Atmp_346673;
			NI LOC64;
			NI res_346676;
			i_346137 = 0;
			HEX3Atmp_346673 = 0;
			LOC64 = 0;
			LOC64 = len_215059(n);
			HEX3Atmp_346673 = (LOC64 - 1);
			res_346676 = ((NI) 1);
			{
				while (1) {
					Ttype214828* LOC67;
					if (!(res_346676 <= HEX3Atmp_346673)) goto LA66;
					i_346137 = res_346676;
					LOC67 = 0;
					LOC67 = paramtype_345902(op, i_346137);
					trackoperand_345063(tracked, (*n).kindU.S6.sons->data[i_346137], LOC67);
					res_346676 += ((NI) 1);
				} LA66: ;
			}
		}
		{
			NIM_BOOL LOC70;
			Tnode214790* arg;
			LOC70 = 0;
			LOC70 = ((*a).kind == ((NU8) 3));
			if (!(LOC70)) goto LA71;
			LOC70 = ((*(*a).kindU.S4.sym).magic == ((NU8) 29) || (*(*a).kindU.S4.sym).magic == ((NU8) 30) || (*(*a).kindU.S4.sym).magic == ((NU8) 31));
			LA71: ;
			if (!LOC70) goto LA72;
			arg = (*n).kindU.S6.sons->data[((NI) 1)];
			initvarvianew_342622(tracked, arg);
			{
				Ttype214828* LOC76;
				LOC76 = 0;
				LOC76 = lastson_217377((*arg).typ);
				if (!!(((131072 & (*LOC76).flags) == 0))) goto LA77;
				{
					NIM_BOOL LOC81;
					NIM_BOOL LOC82;
					Tnode214790* LOC84;
					Tnode214790* LOC86;
					LOC81 = 0;
					LOC82 = 0;
					LOC82 = ((*(*a).kindU.S4.sym).magic == ((NU8) 31));
					if (!(LOC82)) goto LA83;
					LOC84 = 0;
					LOC84 = HEX5BHEX5D_215238(n, ((NI) 2));
					LOC82 = ((*LOC84).kind >= ((NU8) 5) && (*LOC84).kind <= ((NU8) 15));
					LA83: ;
					LOC81 = LOC82;
					if (!(LOC81)) goto LA85;
					LOC86 = 0;
					LOC86 = HEX5BHEX5D_215238(n, ((NI) 2));
					LOC81 = ((*LOC86).kindU.S1.intval == IL64(0));
					LA85: ;
					if (!LOC81) goto LA87;
				}
				goto LA79;
				LA87: ;
				{
					NimStringDesc* LOC90;
					LOC90 = 0;
					LOC90 = HEX24_233066(arg);
					message_187095((*arg).info, ((NU16) 257), LOC90);
				}
				LA79: ;
			}
			LA77: ;
		}
		LA72: ;
		{
			NI i_346230;
			NI HEX3Atmp_346681;
			NI LOC92;
			NI res_346684;
			i_346230 = 0;
			HEX3Atmp_346681 = 0;
			LOC92 = 0;
			LOC92 = safelen_215081(n);
			HEX3Atmp_346681 = (LOC92 - 1);
			res_346684 = ((NI) 0);
			{
				while (1) {
					if (!(res_346684 <= HEX3Atmp_346681)) goto LA94;
					i_346230 = res_346684;
					track_343625(tracked, (*n).kindU.S6.sons->data[i_346230]);
					res_346684 += ((NI) 1);
				} LA94: ;
			}
		}
	}
	break;
	case ((NU8) 45):
	{
		guarddotaccess_342220(tracked, n);
		{
			NI i_346249;
			NI HEX3Atmp_346689;
			NI LOC97;
			NI res_346692;
			i_346249 = 0;
			HEX3Atmp_346689 = 0;
			LOC97 = 0;
			LOC97 = len_215059(n);
			HEX3Atmp_346689 = (LOC97 - 1);
			res_346692 = ((NI) 0);
			{
				while (1) {
					if (!(res_346692 <= HEX3Atmp_346689)) goto LA99;
					i_346249 = res_346692;
					track_343625(tracked, (*n).kindU.S6.sons->data[i_346249]);
					res_346692 += ((NI) 1);
				} LA99: ;
			}
		}
	}
	break;
	case ((NU8) 46):
	{
		track_343625(tracked, (*n).kindU.S6.sons->data[((NI) 0)]);
		{
			if (!((gnotes_183080 &((NU64)1<<((NU)((((NU16) 258)- 237))&63U)))!=0)) goto LA103;
			checkfieldaccess_338803((*tracked).guards, n);
		}
		LA103: ;
	}
	break;
	case ((NU8) 106):
	{
		tracktrystmt_343629(tracked, n);
	}
	break;
	case ((NU8) 90):
	{
		trackpragmastmt_344338(tracked, n);
	}
	break;
	case ((NU8) 73):
	case ((NU8) 74):
	{
		track_343625(tracked, (*n).kindU.S6.sons->data[((NI) 1)]);
		initvar_342420(tracked, (*n).kindU.S6.sons->data[((NI) 0)], NIM_TRUE);
		invalidatefacts_336410((&(*tracked).guards), (*n).kindU.S6.sons->data[((NI) 0)]);
		track_343625(tracked, (*n).kindU.S6.sons->data[((NI) 0)]);
		addasgnfact_338655((&(*tracked).guards), (*n).kindU.S6.sons->data[((NI) 0)], (*n).kindU.S6.sons->data[((NI) 1)]);
		notnilcheck_344914(tracked, (*n).kindU.S6.sons->data[((NI) 1)], (*(*n).kindU.S6.sons->data[((NI) 0)]).typ);
	}
	break;
	case ((NU8) 99):
	case ((NU8) 100):
	{
		{
			Tnode214790* child_346401;
			child_346401 = 0;
			{
				NI i_346708;
				NI HEX3Atmp_346710;
				NI LOC111;
				NI res_346712;
				i_346708 = 0;
				HEX3Atmp_346710 = 0;
				LOC111 = 0;
				LOC111 = len_215059(n);
				HEX3Atmp_346710 = (LOC111 - 1);
				res_346712 = ((NI) 0);
				{
					while (1) {
						Tnode214790* last;
						if (!(res_346712 <= HEX3Atmp_346710)) goto LA113;
						i_346708 = res_346712;
						child_346401 = (*n).kindU.S6.sons->data[i_346708];
						last = lastson_217364(child_346401);
						{
							if (!!(((*last).kind == ((NU8) 1)))) goto LA116;
							track_343625(tracked, last);
						}
						LA116: ;
						{
							NIM_BOOL LOC120;
							LOC120 = 0;
							LOC120 = ((*child_346401).kind == ((NU8) 35));
							if (!(LOC120)) goto LA121;
							LOC120 = !(((*last).kind == ((NU8) 1)));
							LA121: ;
							if (!LOC120) goto LA122;
							{
								NI i_346440;
								NI HEX3Atmp_346698;
								NI LOC125;
								NI res_346701;
								i_346440 = 0;
								HEX3Atmp_346698 = 0;
								LOC125 = 0;
								LOC125 = len_215059(child_346401);
								HEX3Atmp_346698 = (NI)(LOC125 - ((NI) 3));
								res_346701 = ((NI) 0);
								{
									while (1) {
										if (!(res_346701 <= HEX3Atmp_346698)) goto LA127;
										i_346440 = res_346701;
										initvar_342420(tracked, (*child_346401).kindU.S6.sons->data[i_346440], NIM_FALSE);
										addasgnfact_338655((&(*tracked).guards), (*child_346401).kindU.S6.sons->data[i_346440], last);
										notnilcheck_344914(tracked, last, (*(*child_346401).kindU.S6.sons->data[i_346440]).typ);
										res_346701 += ((NI) 1);
									} LA127: ;
								}
							}
						}
						LA122: ;
						res_346712 += ((NI) 1);
					} LA113: ;
				}
			}
		}
	}
	break;
	case ((NU8) 97):
	{
		trackcase_345259(tracked, n);
	}
	break;
	case ((NU8) 93):
	case ((NU8) 92):
	case ((NU8) 48):
	{
		trackif_345517(tracked, n);
	}
	break;
	case ((NU8) 112):
	case ((NU8) 127):
	{
		trackblock_345804(tracked, (*n).kindU.S6.sons->data[((NI) 1)]);
	}
	break;
	case ((NU8) 96):
	{
		track_343625(tracked, (*n).kindU.S6.sons->data[((NI) 0)]);
		{
			NIM_BOOL LOC134;
			LOC134 = 0;
			LOC134 = istrue_345867((*n).kindU.S6.sons->data[((NI) 0)]);
			if (!LOC134) goto LA135;
			trackblock_345804(tracked, (*n).kindU.S6.sons->data[((NI) 1)]);
		}
		goto LA132;
		LA135: ;
		{
			NI oldstate;
			NI oldfacts;
			oldstate = ((*tracked).init ? (*tracked).init->Sup.len : 0);
			oldfacts = ((*tracked).guards ? (*tracked).guards->Sup.len : 0);
			addfact_336193((&(*tracked).guards), (*n).kindU.S6.sons->data[((NI) 0)]);
			track_343625(tracked, (*n).kindU.S6.sons->data[((NI) 1)]);
			(*tracked).init = (TY314503*) setLengthSeq(&((*tracked).init)->Sup, sizeof(NI), ((NI) (oldstate)));
			(*tracked).guards = (Tnodeseq214784*) setLengthSeq(&((*tracked).guards)->Sup, sizeof(Tnode214790*), ((NI) (oldfacts)));
		}
		LA132: ;
	}
	break;
	case ((NU8) 94):
	case ((NU8) 95):
	{
		NI oldstate;
		oldstate = ((*tracked).init ? (*tracked).init->Sup.len : 0);
		{
			NI i_346516;
			NI HEX3Atmp_346716;
			NI LOC140;
			NI res_346719;
			i_346516 = 0;
			HEX3Atmp_346716 = 0;
			LOC140 = 0;
			LOC140 = len_215059(n);
			HEX3Atmp_346716 = (LOC140 - 1);
			res_346719 = ((NI) 0);
			{
				while (1) {
					if (!(res_346719 <= HEX3Atmp_346716)) goto LA142;
					i_346516 = res_346719;
					track_343625(tracked, (*n).kindU.S6.sons->data[i_346516]);
					res_346719 += ((NI) 1);
				} LA142: ;
			}
		}
		(*tracked).init = (TY314503*) setLengthSeq(&((*tracked).init)->Sup, sizeof(NI), ((NI) (oldstate)));
	}
	break;
	case ((NU8) 38):
	{
		NI oldfacts;
		track_343625(tracked, (*n).kindU.S6.sons->data[((NI) 0)]);
		oldfacts = ((*tracked).guards ? (*tracked).guards->Sup.len : 0);
		{
			NI i_346555;
			NI HEX3Atmp_346724;
			NI LOC145;
			NI res_346727;
			i_346555 = 0;
			HEX3Atmp_346724 = 0;
			LOC145 = 0;
			LOC145 = len_215059(n);
			HEX3Atmp_346724 = (LOC145 - 1);
			res_346727 = ((NI) 1);
			{
				while (1) {
					Tnode214790* x;
					if (!(res_346727 <= HEX3Atmp_346724)) goto LA147;
					i_346555 = res_346727;
					x = (*n).kindU.S6.sons->data[i_346555];
					track_343625(tracked, x);
					{
						NIM_BOOL LOC150;
						LOC150 = 0;
						LOC150 = ((*(*x).kindU.S6.sons->data[((NI) 0)]).kind == ((NU8) 3));
						if (!(LOC150)) goto LA151;
						LOC150 = (((*(*(*x).kindU.S6.sons->data[((NI) 0)]).kindU.S4.sym).flags &(1U<<((NU)(((NU8) 18))&31U)))!=0);
						LA151: ;
						if (!LOC150) goto LA152;
						adddiscriminantfact_338634((&(*tracked).guards), x);
					}
					LA152: ;
					res_346727 += ((NI) 1);
				} LA147: ;
			}
		}
		(*tracked).guards = (Tnodeseq214784*) setLengthSeq(&((*tracked).guards)->Sup, sizeof(Tnode214790*), ((NI) (oldfacts)));
	}
	break;
	case ((NU8) 91):
	{
		Tnode214790* pragmalist;
		NI oldlocked;
		NI16 oldlocklevel;
		Tnode214790* LOC164;
		pragmalist = (*n).kindU.S6.sons->data[((NI) 0)];
		oldlocked = ((*tracked).locked ? (*tracked).locked->Sup.len : 0);
		oldlocklevel = (*tracked).currlocklevel;
		{
			NI i_346622;
			NI HEX3Atmp_346732;
			NI LOC156;
			NI res_346735;
			i_346622 = 0;
			HEX3Atmp_346732 = 0;
			LOC156 = 0;
			LOC156 = len_215059(pragmalist);
			HEX3Atmp_346732 = (LOC156 - 1);
			res_346735 = ((NI) 0);
			{
				while (1) {
					if (!(res_346735 <= HEX3Atmp_346732)) goto LA158;
					i_346622 = res_346735;
					{
						NU16 LOC161;
						LOC161 = 0;
						LOC161 = whichpragma_239525((*pragmalist).kindU.S6.sons->data[i_346622]);
						if (!(LOC161 == ((NU16) 196))) goto LA162;
						locklocations_342134(tracked, (*pragmalist).kindU.S6.sons->data[i_346622]);
					}
					LA162: ;
					res_346735 += ((NI) 1);
				} LA158: ;
			}
		}
		LOC164 = 0;
		LOC164 = lastson_217364(n);
		track_343625(tracked, LOC164);
		(*tracked).locked = (Tnodeseq214784*) setLengthSeq(&((*tracked).locked)->Sup, sizeof(Tnode214790*), ((NI) (oldlocked)));
		(*tracked).currlocklevel = oldlocklevel;
	}
	break;
	case ((NU8) 98):
	case ((NU8) 79):
	case ((NU8) 81):
	case ((NU8) 80):
	case ((NU8) 84):
	case ((NU8) 82):
	case ((NU8) 83):
	case ((NU8) 51):
	case ((NU8) 52):
	{
	}
	break;
	default:
	{
		{
			NI i_346662;
			NI HEX3Atmp_346740;
			NI LOC168;
			NI res_346743;
			i_346662 = 0;
			HEX3Atmp_346740 = 0;
			LOC168 = 0;
			LOC168 = safelen_215081(n);
			HEX3Atmp_346740 = (LOC168 - 1);
			res_346743 = ((NI) 0);
			{
				while (1) {
					if (!(res_346743 <= HEX3Atmp_346740)) goto LA170;
					i_346662 = res_346743;
					track_343625(tracked, (*n).kindU.S6.sons->data[i_346662]);
					res_346743 += ((NI) 1);
				} LA170: ;
			}
		}
	}
	break;
	}
}

static N_INLINE(NIM_BOOL, isemptytype_219513)(Ttype214828* t) {
	NIM_BOOL result;
	NIM_BOOL LOC1;
	result = 0;
	LOC1 = 0;
	LOC1 = (t == NIM_NIL);
	if (LOC1) goto LA2;
	LOC1 = ((*t).kind == ((NU8) 3) || (*t).kind == ((NU8) 7));
	LA2: ;
	result = LOC1;
	return result;
}

N_NIMCALL(void, listgcunsafety_342707)(Tsym214822* s, NIM_BOOL onlywarning, Intset211035* cyclecheck) {
	Tsym214822* u;
	u = (*s).kindU.S2.gcunsafetyreason;
	{
		NIM_BOOL LOC3;
		NIM_BOOL LOC5;
		NU16 msgkind;
		LOC3 = 0;
		LOC3 = !((u == NIM_NIL));
		if (!(LOC3)) goto LA4;
		LOC5 = 0;
		LOC5 = containsorincl_211862(cyclecheck, (*u).Sup.id);
		LOC3 = !(LOC5);
		LA4: ;
		if (!LOC3) goto LA6;
		{
			if (!onlywarning) goto LA10;
			msgkind = ((NU16) 261);
		}
		goto LA8;
		LA10: ;
		{
			msgkind = ((NU16) 4);
		}
		LA8: ;
		{
			TY184169 LOC17;
			NimStringDesc* LOC18;
			if (!((768 &(1U<<((NU)((*u).kind)&31U)))!=0)) goto LA15;
			memset((void*)LOC17, 0, sizeof(LOC17));
			LOC17[0] = copyString((*(*s).name).s);
			LOC17[1] = copyString((*(*u).name).s);
			LOC18 = 0;
			LOC18 = nsuFormatOpenArray(((NimStringDesc*) &TMP3505), LOC17, 2);
			message_187095((*s).info, msgkind, LOC18);
		}
		goto LA13;
		LA15: ;
		{
			TY184169 LOC22;
			NimStringDesc* LOC23;
			if (!((258048 &(1U<<((NU)((*u).kind)&31U)))!=0)) goto LA20;
			listgcunsafety_342707(u, NIM_TRUE, cyclecheck);
			memset((void*)LOC22, 0, sizeof(LOC22));
			LOC22[0] = copyString((*(*s).name).s);
			LOC22[1] = copyString((*(*u).name).s);
			LOC23 = 0;
			LOC23 = nsuFormatOpenArray(((NimStringDesc*) &TMP3506), LOC22, 2);
			message_187095((*s).info, msgkind, LOC23);
		}
		goto LA13;
		LA20: ;
		{
			NimStringDesc* LOC30;
			{
				NimStringDesc* LOC29;
				if (!!(((*u).kind == ((NU8) 0)))) goto LA27;
				LOC29 = 0;
				LOC29 = HEX24_187183(TMP3507);
				internalerror_187113(LOC29);
			}
			LA27: ;
			LOC30 = 0;
			LOC30 = nsuFormatSingleElem(((NimStringDesc*) &TMP3508), (*(*s).name).s);
			message_187095((*u).info, msgkind, LOC30);
		}
		LA13: ;
	}
	LA6: ;
}

N_NIMCALL(void, listgcunsafety_342778)(Tsym214822* s, NIM_BOOL onlywarning) {
	Intset211035 cyclecheck;
	memset((void*)(&cyclecheck), 0, sizeof(cyclecheck));
	chckNil((void*)(&cyclecheck));
	memset((void*)(&cyclecheck), 0, sizeof(cyclecheck));
	initintset_211885((&cyclecheck));
	listgcunsafety_342707(s, onlywarning, (&cyclecheck));
}

N_NIMCALL(void, trackproc_347165)(Tsym214822* s, Tnode214790* body) {
	Tnode214790* effects;
	Teffects342002 t;
	Tnode214790* p;
	Tnode214790* raisesspec;
	Tnode214790* tagsspec;
{	effects = (*(*(*s).typ).n).kindU.S6.sons->data[((NI) 0)];
	{
		NimStringDesc* LOC5;
		if (!!(((*effects).kind == ((NU8) 152)))) goto LA3;
		LOC5 = 0;
		LOC5 = HEX24_187183(TMP3477);
		internalerror_187113(LOC5);
	}
	LA3: ;
	{
		if (!(((*s).flags &(1U<<((NU)(((NU8) 4))&31U)))!=0)) goto LA8;
		goto BeforeRet;
	}
	LA8: ;
	{
		NI LOC12;
		LOC12 = 0;
		LOC12 = len_215059(effects);
		if (!(LOC12 == ((NI) 4))) goto LA13;
		goto BeforeRet;
	}
	LA13: ;
	memset((void*)(&t), 0, sizeof(t));
	initeffects_347092(effects, s, (&t));
	track_343625((&t), body);
	{
		NIM_BOOL LOC17;
		NIM_BOOL LOC18;
		NIM_BOOL LOC19;
		Tsym214822* res;
		LOC17 = 0;
		LOC18 = 0;
		LOC19 = 0;
		LOC19 = isemptytype_219513((*(*s).typ).sons->data[((NI) 0)]);
		LOC18 = !(LOC19);
		if (!(LOC18)) goto LA20;
		LOC18 = !(((196608 & (*(*(*s).typ).sons->data[((NI) 0)]).flags) == 0));
		LA20: ;
		LOC17 = LOC18;
		if (!(LOC17)) goto LA21;
		LOC17 = ((45056 &(1U<<((NU)((*s).kind)&31U)))!=0);
		LA21: ;
		if (!LOC17) goto LA22;
		res = (*(*(*s).ast).kindU.S6.sons->data[((NI) 7)]).kindU.S4.sym;
		{
			NIM_BOOL LOC26;
			LOC26 = 0;
			LOC26 = contains_342793(t.init->data, t.init->Sup.len, (*res).Sup.id);
			if (!!(LOC26)) goto LA27;
			message_187095((*body).info, ((NU16) 257), ((NimStringDesc*) &TMP3504));
		}
		LA27: ;
	}
	LA22: ;
	p = (*(*s).ast).kindU.S6.sons->data[((NI) 4)];
	raisesspec = effectspec_344373(p, ((NU16) 156));
	{
		if (!!(raisesspec == 0)) goto LA31;
		checkraisesspec_346762(raisesspec, t.exc, ((NimStringDesc*) &TMP3443), NIM_TRUE, subtyperelation_346747);
		asgnRefNoCycle((void**) (&(*effects).kindU.S6.sons->data[((NI) 0)]), raisesspec);
	}
	LA31: ;
	tagsspec = effectspec_344373(p, ((NU16) 161));
	{
		if (!!(tagsspec == 0)) goto LA35;
		checkraisesspec_346762(tagsspec, t.tags, ((NimStringDesc*) &TMP3447), NIM_FALSE, subtyperelation_346747);
		asgnRefNoCycle((void**) (&(*effects).kindU.S6.sons->data[((NI) 3)]), tagsspec);
	}
	LA35: ;
	{
		NIM_BOOL LOC39;
		LOC39 = 0;
		LOC39 = (((*s).flags &(1U<<((NU)(((NU8) 22))&31U)))!=0);
		if (!(LOC39)) goto LA40;
		LOC39 = t.gcunsafe;
		LA40: ;
		if (!LOC39) goto LA41;
		{
			NIM_BOOL LOC45;
			LOC45 = 0;
			LOC45 = ((gglobaloptions_160121 &(1U<<((NU)(((NU8) 22))&31U)))!=0);
			if (!(LOC45)) goto LA46;
			LOC45 = ((gglobaloptions_160121 &(1U<<((NU)(((NU8) 24))&31U)))!=0);
			LA46: ;
			if (!LOC45) goto LA47;
			listgcunsafety_342778(s, NIM_FALSE);
		}
		goto LA43;
		LA47: ;
		{
			listgcunsafety_342778(s, NIM_TRUE);
		}
		LA43: ;
	}
	LA41: ;
	{
		if (!!(t.gcunsafe)) goto LA52;
		(*(*s).typ).flags |= ((NU32)1)<<((((NU8) 7))%(sizeof(NU32)*8));
	}
	LA52: ;
	{
		if (!((*(*s).typ).locklevel == ((NI16) -1))) goto LA56;
		(*(*s).typ).locklevel = t.maxlocklevel;
	}
	goto LA54;
	LA56: ;
	{
		TY184169 LOC61;
		NimStringDesc* LOC62;
		if (!((*(*s).typ).locklevel < t.maxlocklevel)) goto LA59;
		memset((void*)LOC61, 0, sizeof(LOC61));
		LOC61[0] = HEX24_217069((*(*s).typ).locklevel);
		LOC61[1] = HEX24_217069(t.maxlocklevel);
		LOC62 = 0;
		LOC62 = nsuFormatOpenArray(((NimStringDesc*) &TMP3509), LOC61, 2);
		message_187095((*s).info, ((NU16) 265), LOC62);
	}
	goto LA54;
	LA59: ;
	LA54: ;
	}BeforeRet: ;
}

N_NIMCALL(void, seteffectsforproctype_347006)(Ttype214828* t, Tnode214790* n) {
	Tnode214790* effects;
	Tnode214790* raisesspec;
	Tnode214790* tagsspec;
	effects = (*(*t).n).kindU.S6.sons->data[((NI) 0)];
	{
		NIM_BOOL LOC3;
		NimStringDesc* LOC7;
		LOC3 = 0;
		LOC3 = ((*t).kind == ((NU8) 25));
		if (!(LOC3)) goto LA4;
		LOC3 = ((*effects).kind == ((NU8) 152));
		LA4: ;
		if (!!(LOC3)) goto LA5;
		LOC7 = 0;
		LOC7 = HEX24_187183(TMP3552);
		internalerror_187113(LOC7);
	}
	LA5: ;
	raisesspec = effectspec_344373(n, ((NU16) 156));
	tagsspec = effectspec_344373(n, ((NU16) 161));
	{
		NIM_BOOL LOC10;
		LOC10 = 0;
		LOC10 = !(raisesspec == 0);
		if (LOC10) goto LA11;
		LOC10 = !(tagsspec == 0);
		LA11: ;
		if (!LOC10) goto LA12;
		{
			NI LOC16;
			NimStringDesc* LOC19;
			LOC16 = 0;
			LOC16 = len_215059(effects);
			if (!!((LOC16 == ((NI) 0)))) goto LA17;
			LOC19 = 0;
			LOC19 = HEX24_187183(TMP3553);
			internalerror_187113(LOC19);
		}
		LA17: ;
		if ((*effects).kindU.S6.sons) nimGCunrefNoCycle((*effects).kindU.S6.sons);
		(*effects).kindU.S6.sons = (Tnodeseq214784*) newSeqRC1((&NTI214784), ((NI) 4));
		{
			if (!!(raisesspec == 0)) goto LA22;
			asgnRefNoCycle((void**) (&(*effects).kindU.S6.sons->data[((NI) 0)]), raisesspec);
		}
		LA22: ;
		{
			if (!!(tagsspec == 0)) goto LA26;
			asgnRefNoCycle((void**) (&(*effects).kindU.S6.sons->data[((NI) 3)]), tagsspec);
		}
		LA26: ;
	}
	LA12: ;
}

N_NIMCALL(void, tracktoplevelstmt_347402)(Tsym214822* module, Tnode214790* n) {
	Tnode214790* effects;
	Tnodeseq214784* LOC5;
	Teffects342002 t;
{	{
		if (!((*n).kind == ((NU8) 90) || (*n).kind == ((NU8) 82) || (*n).kind == ((NU8) 83) || (*n).kind == ((NU8) 79) || (*n).kind == ((NU8) 98) || (*n).kind == ((NU8) 81) || (*n).kind == ((NU8) 80) || (*n).kind == ((NU8) 84))) goto LA3;
		goto BeforeRet;
	}
	LA3: ;
	LOC5 = 0;
	LOC5 = (Tnodeseq214784*) newSeq((&NTI214784), 0);
	effects = newnode_216601(((NU8) 152), (*n).info, LOC5, NIM_NIL);
	memset((void*)(&t), 0, sizeof(t));
	initeffects_347092(effects, module, (&t));
	t.istoplevel = NIM_TRUE;
	track_343625((&t), n);
	}BeforeRet: ;
}

N_NIMCALL(Tnode214790*, documenteffect_344432)(Tnode214790* n, Tnode214790* x, NU16 effecttype, NI idx) {
	Tnode214790* result;
	Tnode214790* spec;
{	result = 0;
	spec = effectspec_344373(x, effecttype);
	{
		Tsym214822* s;
		Tnode214790* actual;
		Tnode214790* real;
		Tnode214790* effects;
		NI LOC10;
		Tnodeseq214784* LOC23;
		TY382939 LOC24;
		Tident189012* LOC25;
		if (!spec == 0) goto LA3;
		s = (*(*n).kindU.S6.sons->data[((NI) 0)]).kindU.S4.sym;
		actual = (*(*(*s).typ).n).kindU.S6.sons->data[((NI) 0)];
		{
			NI LOC7;
			LOC7 = 0;
			LOC7 = len_215059(actual);
			if (!!((LOC7 == ((NI) 4)))) goto LA8;
			goto BeforeRet;
		}
		LA8: ;
		real = (*actual).kindU.S6.sons->data[idx];
		LOC10 = 0;
		LOC10 = len_215059(real);
		effects = newnodei_216401(((NU8) 41), (*n).info, LOC10);
		{
			NI i_344477;
			NI HEX3Atmp_344495;
			NI LOC12;
			NI res_344498;
			i_344477 = 0;
			HEX3Atmp_344495 = 0;
			LOC12 = 0;
			LOC12 = len_215059(real);
			HEX3Atmp_344495 = (LOC12 - 1);
			res_344498 = ((NI) 0);
			{
				while (1) {
					NimStringDesc* t;
					Tnode214790* LOC15;
					Tident189012* LOC21;
					Tnode214790* LOC22;
					if (!(res_344498 <= HEX3Atmp_344495)) goto LA14;
					i_344477 = res_344498;
					LOC15 = 0;
					LOC15 = HEX5BHEX5D_215238(real, i_344477);
					t = typetostring_240017((*LOC15).typ, ((NU8) 0));
					{
						NIM_BOOL LOC18;
						LOC18 = 0;
						LOC18 = nsuStartsWith(t, ((NimStringDesc*) &TMP5044));
						if (!LOC18) goto LA19;
						t = copyStr(t, ((NI) 4));
					}
					LA19: ;
					LOC21 = 0;
					LOC21 = getident_189441(t);
					asgnRefNoCycle((void**) (&(*effects).kindU.S6.sons->data[i_344477]), newidentnode_216228(LOC21, (*n).info));
					LOC22 = 0;
					LOC22 = HEX5BHEX5D_215238(real, i_344477);
					asgnRefNoCycle((void**) (&(*(*effects).kindU.S6.sons->data[i_344477]).typ), (*LOC22).typ);
					res_344498 += ((NI) 1);
				} LA14: ;
			}
		}
		LOC23 = 0;
		LOC23 = (Tnodeseq214784*) newSeq((&NTI214784), 2);
		memset((void*)LOC24, 0, sizeof(LOC24));
		LOC25 = 0;
		LOC25 = getident_189441(specialwords_196329[(effecttype)- 0]);
		LOC24[0] = newidentnode_216228(LOC25, (*n).info);
		LOC24[1] = effects;
		asgnRefNoCycle((void**) (&LOC23->data[0]), LOC24[0]);
		asgnRefNoCycle((void**) (&LOC23->data[1]), LOC24[1]);
		result = newnode_216601(((NU8) 34), (*n).info, LOC23, NIM_NIL);
	}
	LA3: ;
	}BeforeRet: ;
	return result;
}

static N_INLINE(Slice88080, HEX2EHEX2E_102424)(NI a, NI b) {
	Slice88080 result;
	memset((void*)(&result), 0, sizeof(result));
	result.a = a;
	result.b = b;
	return result;
}

N_NIMCALL(Tnode214790*, documentwriteeffect_344502)(Tnode214790* n, NU8 flag, NimStringDesc* pragmaname) {
	Tnode214790* result;
	Tsym214822* s;
	Tnode214790* params;
	Tnode214790* effects;
	result = 0;
	s = (*(*n).kindU.S6.sons->data[((NI) 0)]).kindU.S4.sym;
	params = (*(*s).typ).n;
	effects = newnodei_216248(((NU8) 41), (*n).info);
	{
		NI i_344540;
		Slice88080 HEX3Atmp_344578;
		NI LOC2;
		i_344540 = 0;
		memset((void*)(&HEX3Atmp_344578), 0, sizeof(HEX3Atmp_344578));
		LOC2 = 0;
		LOC2 = len_215059(params);
		HEX3Atmp_344578 = HEX2EHEX2E_102424(((NI) 1), (LOC2 - 1));
		{
			NI x_344582;
			NI HEX3Atmp_344584;
			NI HEX3Atmp_344586;
			NI res_344588;
			x_344582 = 0;
			HEX3Atmp_344584 = 0;
			HEX3Atmp_344586 = 0;
			HEX3Atmp_344584 = HEX3Atmp_344578.a;
			HEX3Atmp_344586 = HEX3Atmp_344578.b;
			res_344588 = HEX3Atmp_344584;
			{
				while (1) {
					if (!(res_344588 <= HEX3Atmp_344586)) goto LA5;
					x_344582 = res_344588;
					i_344540 = x_344582;
					{
						NIM_BOOL LOC8;
						Tnode214790* LOC9;
						Tnode214790* LOC11;
						Tnode214790* LOC14;
						LOC8 = 0;
						LOC9 = 0;
						LOC9 = HEX5BHEX5D_215238(params, i_344540);
						LOC8 = ((*LOC9).kind == ((NU8) 3));
						if (!(LOC8)) goto LA10;
						LOC11 = 0;
						LOC11 = HEX5BHEX5D_215238(params, i_344540);
						LOC8 = (((*(*LOC11).kindU.S4.sym).flags &(1U<<((NU)(flag)&31U)))!=0);
						LA10: ;
						if (!LOC8) goto LA12;
						LOC14 = 0;
						LOC14 = HEX5BHEX5D_215238(params, i_344540);
						add_215114(effects, LOC14);
					}
					LA12: ;
					res_344588 += ((NI) 1);
				} LA5: ;
			}
		}
	}
	{
		NI LOC17;
		Tnodeseq214784* LOC20;
		TY382939 LOC21;
		Tident189012* LOC22;
		LOC17 = 0;
		LOC17 = len_215059(effects);
		if (!(((NI) 0) < LOC17)) goto LA18;
		LOC20 = 0;
		LOC20 = (Tnodeseq214784*) newSeq((&NTI214784), 2);
		memset((void*)LOC21, 0, sizeof(LOC21));
		LOC22 = 0;
		LOC22 = getident_189441(pragmaname);
		LOC21[0] = newidentnode_216228(LOC22, (*n).info);
		LOC21[1] = effects;
		asgnRefNoCycle((void**) (&LOC20->data[0]), LOC21[0]);
		asgnRefNoCycle((void**) (&LOC20->data[1]), LOC21[1]);
		result = newnode_216601(((NU8) 34), (*n).info, LOC20, NIM_NIL);
	}
	LA18: ;
	return result;
}

N_NIMCALL(Tnode214790*, documentneweffect_344592)(Tnode214790* n) {
	Tnode214790* result;
	Tsym214822* s;
	result = 0;
	s = (*(*n).kindU.S6.sons->data[((NI) 0)]).kindU.S4.sym;
	{
		Tident189012* LOC5;
		if (!(((*(*s).typ).flags &(1U<<((NU)(((NU8) 3))&31U)))!=0)) goto LA3;
		LOC5 = 0;
		LOC5 = getident_189441(((NimStringDesc*) &TMP5046));
		result = newidentnode_216228(LOC5, (*n).info);
	}
	LA3: ;
	return result;
}

N_NIMCALL(void, documentraises_344610)(Tnode214790* n) {
	Tnode214790* pragmas;
	Tnode214790* p1;
	Tnode214790* p2;
	Tnode214790* p3;
	Tnode214790* p4;
	Tnode214790* p5;
{	{
		if (!!(((*(*n).kindU.S6.sons->data[((NI) 0)]).kind == ((NU8) 3)))) goto LA3;
		goto BeforeRet;
	}
	LA3: ;
	pragmas = (*n).kindU.S6.sons->data[((NI) 4)];
	p1 = documenteffect_344432(n, pragmas, ((NU16) 156), ((NI) 0));
	p2 = documenteffect_344432(n, pragmas, ((NU16) 161), ((NI) 3));
	p3 = documentwriteeffect_344502(n, ((NU8) 26), ((NimStringDesc*) &TMP5045));
	p4 = documentneweffect_344592(n);
	p5 = documentwriteeffect_344502(n, ((NU8) 17), ((NimStringDesc*) &TMP5047));
	{
		NIM_BOOL LOC7;
		NIM_BOOL LOC8;
		NIM_BOOL LOC9;
		NIM_BOOL LOC10;
		LOC7 = 0;
		LOC8 = 0;
		LOC9 = 0;
		LOC10 = 0;
		LOC10 = !((p1 == NIM_NIL));
		if (LOC10) goto LA11;
		LOC10 = !((p2 == NIM_NIL));
		LA11: ;
		LOC9 = LOC10;
		if (LOC9) goto LA12;
		LOC9 = !((p3 == NIM_NIL));
		LA12: ;
		LOC8 = LOC9;
		if (LOC8) goto LA13;
		LOC8 = !((p4 == NIM_NIL));
		LA13: ;
		LOC7 = LOC8;
		if (LOC7) goto LA14;
		LOC7 = !((p5 == NIM_NIL));
		LA14: ;
		if (!LOC7) goto LA15;
		{
			if (!((*pragmas).kind == ((NU8) 1))) goto LA19;
			asgnRefNoCycle((void**) (&(*n).kindU.S6.sons->data[((NI) 4)]), newnodei_216248(((NU8) 90), (*n).info));
		}
		LA19: ;
		{
			if (!!((p1 == NIM_NIL))) goto LA23;
			add_215114((*n).kindU.S6.sons->data[((NI) 4)], p1);
		}
		LA23: ;
		{
			if (!!((p2 == NIM_NIL))) goto LA27;
			add_215114((*n).kindU.S6.sons->data[((NI) 4)], p2);
		}
		LA27: ;
		{
			if (!!((p3 == NIM_NIL))) goto LA31;
			add_215114((*n).kindU.S6.sons->data[((NI) 4)], p3);
		}
		LA31: ;
		{
			if (!!((p4 == NIM_NIL))) goto LA35;
			add_215114((*n).kindU.S6.sons->data[((NI) 4)], p4);
		}
		LA35: ;
		{
			if (!!((p5 == NIM_NIL))) goto LA39;
			add_215114((*n).kindU.S6.sons->data[((NI) 4)], p5);
		}
		LA39: ;
	}
	LA15: ;
	}BeforeRet: ;
}
NIM_EXTERNC N_NOINLINE(void, compiler_sempass2Init000)(void) {
}

NIM_EXTERNC N_NOINLINE(void, compiler_sempass2DatInit000)(void) {
}

