/* Generated by Nim Compiler v0.12.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 Tsym225841 Tsym225841;
typedef struct Tnode225809 Tnode225809;
typedef struct Tidobj198015 Tidobj198015;
typedef struct TNimObject TNimObject;
typedef struct TNimType TNimType;
typedef struct TNimNode TNimNode;
typedef struct Ttypeseq225843 Ttypeseq225843;
typedef struct Tscope225835 Tscope225835;
typedef struct TY225944 TY225944;
typedef struct Tstrtable225813 Tstrtable225813;
typedef struct Tsymseq225811 Tsymseq225811;
typedef struct Ttype225847 Ttype225847;
typedef struct Tident198021 Tident198021;
typedef struct Tlineinfo190352 Tlineinfo190352;
typedef struct Tloc225823 Tloc225823;
typedef struct Ropeobj176009 Ropeobj176009;
typedef struct Tlib225827 Tlib225827;
typedef struct NimStringDesc NimStringDesc;
typedef struct TGenericSeq TGenericSeq;
typedef struct Tnodeseq225803 Tnodeseq225803;
typedef struct Intset222056 Intset222056;
typedef struct Trunk222052 Trunk222052;
typedef struct Trunkseq222054 Trunkseq222054;
typedef struct TY90959 TY90959;
typedef struct Teffects365008 Teffects365008;
typedef struct TY333608 TY333608;
typedef struct Cell48946 Cell48946;
typedef struct Cellseq48962 Cellseq48962;
typedef struct Gcheap51018 Gcheap51018;
typedef struct Gcstack51016 Gcstack51016;
typedef struct Cellset48958 Cellset48958;
typedef struct Pagedesc48954 Pagedesc48954;
typedef struct Memregion30890 Memregion30890;
typedef struct Smallchunk30842 Smallchunk30842;
typedef struct Llchunk30884 Llchunk30884;
typedef struct Bigchunk30844 Bigchunk30844;
typedef struct Intset30817 Intset30817;
typedef struct Trunk30813 Trunk30813;
typedef struct Avlnode30888 Avlnode30888;
typedef struct Gcstat51014 Gcstat51014;
typedef struct TY259854 TY259854;
typedef struct TY259855 TY259855;
typedef struct Slice90370 Slice90370;
typedef struct Tinstantiation225831 Tinstantiation225831;
typedef struct Tlistentry140022 Tlistentry140022;
typedef struct Basechunk30840 Basechunk30840;
typedef struct Freecell30832 Freecell30832;
typedef struct TY225932 TY225932;
typedef N_NIMCALL_PTR(void, TY3889) (void* p, NI op);
typedef N_NIMCALL_PTR(void*, TY3894) (void* p);
struct  TNimType  {
NI size;
NU8 kind;
NU8 flags;
TNimType* base;
TNimNode* node;
void* finalizer;
TY3889 marker;
TY3894 deepcopy;
};
struct  TNimObject  {
TNimType* m_type;
};
struct  Tidobj198015  {
  TNimObject Sup;
NI id;
};
struct  Tstrtable225813  {
NI counter;
Tsymseq225811* data;
};
struct  Tlineinfo190352  {
NI16 line;
NI16 col;
NI32 fileindex;
};
struct  Tloc225823  {
NU8 k;
NU8 s;
NU16 flags;
Ttype225847* t;
Ropeobj176009* r;
Ropeobj176009* heaproot;
};
struct  Tsym225841  {
  Tidobj198015 Sup;
NU8 kind;
union{
struct {Ttypeseq225843* typeinstcache;
Tscope225835* typscope;
} S1;
struct {TY225944* procinstcache;
Tsym225841* gcunsafetyreason;
} S2;
struct {TY225944* usedgenerics;
Tstrtable225813 tab;
} S3;
struct {Tsym225841* guard;
NI bitsize;
} S4;
} kindU;
NU8 magic;
Ttype225847* typ;
Tident198021* name;
Tlineinfo190352 info;
Tsym225841* owner;
NU32 flags;
Tnode225809* ast;
NU32 options;
NI position;
NI offset;
Tloc225823 loc;
Tlib225827* annex;
Tnode225809* constraint;
};
struct  Ttype225847  {
  Tidobj198015 Sup;
NU8 kind;
NU8 callconv;
NU32 flags;
Ttypeseq225843* sons;
Tnode225809* n;
Tsym225841* owner;
Tsym225841* sym;
Tsym225841* destructor;
Tsym225841* deepcopy;
Tsym225841* assignment;
NI64 size;
NI16 align;
NI16 locklevel;
Tloc225823 loc;
};
struct  TGenericSeq  {
NI len;
NI reserved;
};
struct  NimStringDesc  {
  TGenericSeq Sup;
NIM_CHAR data[SEQ_DECL_SIZE];
};
struct  Tnode225809  {
Ttype225847* typ;
Tlineinfo190352 info;
NU16 flags;
NU8 kind;
union{
struct {NI64 intval;
} S1;
struct {NF floatval;
} S2;
struct {NimStringDesc* strval;
} S3;
struct {Tsym225841* sym;
} S4;
struct {Tident198021* ident;
} S5;
struct {Tnodeseq225803* sons;
} S6;
} kindU;
NimStringDesc* comment;
};
typedef N_NIMCALL_PTR(NIM_BOOL, TY370284) (Tnode225809* a, Tnode225809* b);
struct  Intset222056  {
NI counter;
NI max;
Trunk222052* head;
Trunkseq222054* data;
};
struct  Tident198021  {
  Tidobj198015 Sup;
NimStringDesc* s;
Tident198021* next;
NI h;
};
typedef NimStringDesc* TY193306[2];
struct TY90959 {
NimStringDesc* Field0;
NI Field1;
};
struct  Teffects365008  {
Tnode225809* exc;
Tnode225809* tags;
NI bottom;
NI intrystmt;
Tsym225841* owner;
TY333608* init;
Tnodeseq225803* guards;
Tnodeseq225803* 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  Cell48946  {
NI refcount;
TNimType* typ;
};
struct  Cellseq48962  {
NI len;
NI cap;
Cell48946** d;
};
struct  Cellset48958  {
NI counter;
NI max;
Pagedesc48954* head;
Pagedesc48954** data;
};
typedef Smallchunk30842* TY30905[512];
typedef Trunk30813* Trunkbuckets30815[256];
struct  Intset30817  {
Trunkbuckets30815 data;
};
struct  Memregion30890  {
NI minlargeobj;
NI maxlargeobj;
TY30905 freesmallchunks;
Llchunk30884* llmem;
NI currmem;
NI maxmem;
NI freemem;
NI lastsize;
Bigchunk30844* freechunkslist;
Intset30817 chunkstarts;
Avlnode30888* root;
Avlnode30888* deleted;
Avlnode30888* last;
Avlnode30888* freeavlnodes;
};
struct  Gcstat51014  {
NI stackscans;
NI cyclecollections;
NI maxthreshold;
NI maxstacksize;
NI maxstackcells;
NI cycletablesize;
NI64 maxpause;
};
struct  Gcheap51018  {
Gcstack51016* stack;
void* stackbottom;
NI cyclethreshold;
Cellseq48962 zct;
Cellseq48962 decstack;
Cellset48958 cycleroots;
Cellseq48962 tempstack;
NI recgclock;
Memregion30890 region;
Gcstat51014 stat;
};
typedef NU8 TY483044[20];
struct TY259855 {
NI Field0;
NI Field1;
};
typedef Tnode225809* TY281106[2];
typedef NimStringDesc* TY206342[261];
struct  Slice90370  {
NI a;
NI b;
};
struct  Tscope225835  {
NI depthlevel;
Tstrtable225813 symbols;
Tnodeseq225803* usingsyms;
Tscope225835* parent;
};
struct  Ropeobj176009  {
  TNimObject Sup;
Ropeobj176009* left;
Ropeobj176009* right;
NI length;
NimStringDesc* data;
};
struct  Tlistentry140022  {
  TNimObject Sup;
Tlistentry140022* prev;
Tlistentry140022* next;
};
struct  Tlib225827  {
  Tlistentry140022 Sup;
NU8 kind;
NIM_BOOL generated;
NIM_BOOL isoverriden;
Ropeobj176009* name;
Tnode225809* path;
};
typedef NI TY30821[16];
struct  Trunk222052  {
Trunk222052* next;
NI key;
TY30821 bits;
};
struct  Gcstack51016  {
Gcstack51016* prev;
Gcstack51016* next;
void* starts;
void* pos;
NI maxstacksize;
};
struct  Pagedesc48954  {
Pagedesc48954* next;
NI key;
TY30821 bits;
};
struct  Basechunk30840  {
NI prevsize;
NI size;
NIM_BOOL used;
};
struct  Smallchunk30842  {
  Basechunk30840 Sup;
Smallchunk30842* next;
Smallchunk30842* prev;
Freecell30832* freelist;
NI free;
NI acc;
NF data;
};
struct  Llchunk30884  {
NI size;
NI acc;
Llchunk30884* next;
};
struct  Bigchunk30844  {
  Basechunk30840 Sup;
Bigchunk30844* next;
Bigchunk30844* prev;
NI align;
NF data;
};
struct  Trunk30813  {
Trunk30813* next;
NI key;
TY30821 bits;
};
typedef Avlnode30888* TY30895[2];
struct  Avlnode30888  {
TY30895 link;
NI key;
NI upperbound;
NI level;
};
struct  Tinstantiation225831  {
Tsym225841* sym;
Ttypeseq225843* concretetypes;
TY225932* usedby;
NI compilesid;
};
struct  Freecell30832  {
Freecell30832* next;
NI zerofield;
};
struct Tnodeseq225803 {
  TGenericSeq Sup;
  Tnode225809* data[SEQ_DECL_SIZE];
};
struct TY333608 {
  TGenericSeq Sup;
  NI data[SEQ_DECL_SIZE];
};
struct TY259854 {
  TGenericSeq Sup;
  TY259855 data[SEQ_DECL_SIZE];
};
struct Ttypeseq225843 {
  TGenericSeq Sup;
  Ttype225847* data[SEQ_DECL_SIZE];
};
struct TY225944 {
  TGenericSeq Sup;
  Tinstantiation225831* data[SEQ_DECL_SIZE];
};
struct Tsymseq225811 {
  TGenericSeq Sup;
  Tsym225841* data[SEQ_DECL_SIZE];
};
struct Trunkseq222054 {
  TGenericSeq Sup;
  Trunk222052* data[SEQ_DECL_SIZE];
};
struct TY225932 {
  TGenericSeq Sup;
  NI32 data[SEQ_DECL_SIZE];
};
static N_INLINE(NI, len_226098)(Tnode225809* n);
N_NIMCALL(Tnode225809*, effectspec_367661)(Tnode225809* n, NU16 effecttype);
N_NIMCALL(NI, sonslen_228387)(Tnode225809* n);
N_NIMCALL(NU16, whichpragma_254687)(Tnode225809* n);
N_NIMCALL(Tnode225809*, newnodei_227351)(NU8 kind, Tlineinfo190352 info);
N_NIMCALL(void, add_226165)(Tnode225809* father, Tnode225809* son);
N_NIMCALL(void, checkraisesspec_370278)(Tnode225809* spec, Tnode225809* real, NimStringDesc* msg, NIM_BOOL hints, TY370284 effectpredicate);
N_NIMCALL(void, initintset_222927)(Intset222056* Result);
N_NOINLINE(void, chckNil)(void* p);
static N_INLINE(Tnode225809*, HEX5BHEX5D_226244)(Tnode225809* n, NI i);
N_NIMCALL(void, incl_222856)(Intset222056* s, NI key);
N_NIMCALL(void, pushinfocontext_191581)(Tlineinfo190352 info);
N_NIMCALL(void, localerror_196128)(Tlineinfo190352 info, NU16 msg, NimStringDesc* arg);
static N_INLINE(void, appendString)(NimStringDesc* dest, NimStringDesc* src);
N_NIMCALL(NimStringDesc*, typetostring_255032)(Ttype225847* typ, NU8 prefer);
N_NIMCALL(NimStringDesc*, rawNewString)(NI space);
N_NIMCALL(void, popinfocontext_191600)(void);
N_NIMCALL(NIM_BOOL, contains_222829)(Intset222056 s, NI key);
N_NIMCALL(void, message_196161)(Tlineinfo190352 info, NU16 msg, NimStringDesc* arg);
N_NIMCALL(NimStringDesc*, rendertree_247059)(Tnode225809* n, NU8 renderflags);
N_NIMCALL(NIM_BOOL, subtyperelation_370251)(Tnode225809* spec, Tnode225809* real);
N_NIMCALL(NI, safeinheritancediff_264388)(Ttype225847* a, Ttype225847* b);
N_NIMCALL(Ttype225847*, exctype_366212)(Tnode225809* n);
N_NIMCALL(Ttype225847*, getebase_366191)(void);
N_NIMCALL(Tsym225841*, getcompilerproc_274809)(NimStringDesc* name);
N_NIMCALL(Ttype225847*, systypefromname_274179)(NimStringDesc* name);
N_NIMCALL(Ttype225847*, skiptypes_229167)(Ttype225847* t, NU64 kinds);
N_NIMCALL(void, localerror_196139)(Tlineinfo190352 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_228096)(NI16 x);
N_NIMCALL(void, internalerror_196191)(NimStringDesc* errmsg);
N_NIMCALL(NimStringDesc*, HEX24_196279)(TY90959 x);
N_NIMCALL(void, initeffects_370704)(Tnode225809* effects, Tsym225841* s, Teffects365008* t);
static N_INLINE(void, nimGCunrefNoCycle)(void* p);
static N_INLINE(Cell48946*, usrtocell_52646)(void* usr);
static N_INLINE(void, rtladdzct_54204)(Cell48946* c);
N_NOINLINE(void, addzct_52617)(Cellseq48962* s, Cell48946* 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_366843)(Teffects365008* tracked, Tnode225809* n);
N_NIMCALL(void, usevar_365844)(Teffects365008* a, Tnode225809* n);
N_NIMCALL(NIM_BOOL, islocalvar_365069)(Teffects365008* a, Tsym225841* s);
static N_INLINE(NIM_BOOL, contains_365853)(NI* a, NI aLen0, NI item);
static N_INLINE(NI, find_365863)(NI* a, NI aLen0, NI item);
N_NIMCALL(TGenericSeq*, incrSeqV2)(TGenericSeq* seq, NI elemsize);
N_NIMCALL(void, guardglobal_365229)(Teffects365008* a, Tnode225809* n, Tsym225841* guard);
static N_INLINE(NIM_BOOL, isgcedmem_229235)(Ttype225847* t);
N_NIMCALL(void, markgcunsafe_365702)(Teffects365008* a, Tsym225841* reason);
N_NIMCALL(void, addeffect_366300)(Teffects365008* a, Tnode225809* e, NIM_BOOL uselineinfo);
N_NIMCALL(NIM_BOOL, sametype_260092)(Ttype225847* a, Ttype225847* b, NU8 flags);
N_NIMCALL(NIM_BOOL, HEX3DHEX3D_193255)(Tlineinfo190352 a, Tlineinfo190352 b);
N_NIMCALL(void, throws_366159)(Tnode225809* tracked, Tnode225809* n);
static N_INLINE(NI, safelen_226126)(Tnode225809* n);
N_NIMCALL(void, mergelocklevels_368211)(Teffects365008* tracked, Tnode225809* n, NI16 locklevel);
N_NIMCALL(NI16, getlocklevel_368161)(Tsym225841* s);
N_NIMCALL(void, propagateeffects_368226)(Teffects365008* tracked, Tnode225809* n, Tsym225841* s);
N_NIMCALL(void, mergeeffects_366515)(Teffects365008* a, Tnode225809* b, Tnode225809* comesfrom);
N_NIMCALL(Tnode225809*, createraise_366240)(Tnode225809* n);
N_NIMCALL(Tnode225809*, newnode_226401)(NU8 kind);
N_NIMCALL(void, mergetags_366571)(Teffects365008* a, Tnode225809* b, Tnode225809* comesfrom);
N_NIMCALL(void, addtag_366457)(Teffects365008* a, Tnode225809* e, NIM_BOOL uselineinfo);
N_NIMCALL(Tnode225809*, createtag_366259)(Tnode225809* n);
N_NIMCALL(void, warnaboutgcunsafe_365693)(Tnode225809* n);
N_NIMCALL(NIM_BOOL, isforwardedproc_367579)(Tnode225809* n);
N_NIMCALL(NIM_BOOL, isindirectcall_367513)(Tnode225809* n, Tsym225841* owner);
N_NIMCALL(void, assumetheworst_368391)(Teffects365008* tracked, Tnode225809* n, Ttype225847* op);
N_NIMCALL(NIM_BOOL, importedfromc_368130)(Tnode225809* n);
N_NIMCALL(void, markgcunsafe_365723)(Teffects365008* a, Tnode225809* reason);
N_NIMCALL(Tsym225841*, newsym_226656)(NU8 symkind, Tident198021* name, Tsym225841* owner, Tlineinfo190352 info);
N_NIMCALL(Tident198021*, getident_198463)(NimStringDesc* identifier);
N_NIMCALL(void, trackoperand_368446)(Teffects365008* tracked, Tnode225809* n, Ttype225847* paramtype);
N_NIMCALL(Tnode225809*, skipconvandclosure_233305)(Tnode225809* n);
N_NIMCALL(Tnode225809*, skipconv_264935)(Tnode225809* n);
N_NIMCALL(NIM_BOOL, isownedprocvar_368403)(Tnode225809* n, Tsym225841* owner);
N_NIMCALL(void, notnilcheck_368292)(Teffects365008* tracked, Tnode225809* n_368295, Ttype225847* paramtype);
N_NIMCALL(NIM_BOOL, containsnode_230365)(Tnode225809* n, TY483044 kinds);
N_NIMCALL(NU8, impliesnotnil_359451)(Tnodeseq225803* facts, Tnode225809* arg);
N_NIMCALL(Ttype225847*, paramtype_369443)(Ttype225847* op, NI i);
N_NIMCALL(NI, len_228369)(Ttype225847* n);
N_NIMCALL(void, initvarvianew_365646)(Teffects365008* a, Tnode225809* n);
N_NIMCALL(void, initvar_365515)(Teffects365008* a, Tnode225809* n, NIM_BOOL volatilecheck);
static N_INLINE(void, makevolatile_365468)(Teffects365008* a, Tsym225841* s);
N_NIMCALL(Tsym225841*, getmodule_233243)(Tsym225841* s);
N_NIMCALL(void, guarddotaccess_365287)(Teffects365008* a, Tnode225809* n);
N_NIMCALL(Tsym225841*, lookupinrecord_233236)(Tnode225809* n, Tident198021* field);
N_NIMCALL(Tnode225809*, newnodei_227407)(NU8 kind, Tlineinfo190352 info, NI children);
N_NIMCALL(Tnode225809*, newsymnode_227325)(Tsym225841* sym);
N_NIMCALL(NIM_BOOL, sametree_358462)(Tnode225809* a, Tnode225809* b);
N_NIMCALL(void, checkfieldaccess_361409)(Tnodeseq225803* m, Tnode225809* n);
N_NIMCALL(void, tracktrystmt_366850)(Teffects365008* tracked, Tnode225809* n);
N_NIMCALL(void, addtointersection_366082)(TY259854** inter, NI s);
N_NIMCALL(void, catchesall_366814)(Teffects365008* tracked);
N_NIMCALL(TGenericSeq*, setLengthSeq)(TGenericSeq* seq, NI elemsize, NI newlen);
N_NIMCALL(void, catches_366686)(Teffects365008* tracked, Ttype225847* e_366689);
N_NIMCALL(void, trackpragmastmt_367610)(Teffects365008* tracked, Tnode225809* n);
N_NIMCALL(void, listeffects_366627)(Teffects365008* a);
N_NIMCALL(void, invalidatefacts_358659)(Tnodeseq225803** m, Tnode225809* n);
N_NIMCALL(void, addasgnfact_361086)(Tnodeseq225803** m, Tnode225809* key, Tnode225809* value);
N_NIMCALL(Tnode225809*, lastson_228406)(Tnode225809* n);
N_NIMCALL(void, trackcase_368666)(Teffects365008* tracked, Tnode225809* n);
N_NIMCALL(NIM_BOOL, interestingcaseexpr_357283)(Tnode225809* m);
N_NIMCALL(void, addcasebranchfacts_361137)(Tnodeseq225803** m, Tnode225809* n, NI i);
N_NIMCALL(NIM_BOOL, breaksblock_368609)(Tnode225809* n);
N_NIMCALL(void, trackif_368970)(Teffects365008* tracked, Tnode225809* n);
N_NIMCALL(void, addfact_358392)(Tnodeseq225803** m, Tnode225809* nn);
N_NIMCALL(void, addfactneg_358426)(Tnodeseq225803** m, Tnode225809* n_358430);
N_NIMCALL(void, trackblock_369323)(Teffects365008* tracked, Tnode225809* n);
N_NIMCALL(NIM_BOOL, hassubnodewith_230439)(Tnode225809* n, NU8 kind);
N_NIMCALL(NIM_BOOL, istrue_369402)(Tnode225809* n);
N_NIMCALL(void, adddiscriminantfact_361059)(Tnodeseq225803** m, Tnode225809* n);
N_NIMCALL(void, locklocations_365167)(Teffects365008* a, Tnode225809* pragma);
N_NIMCALL(NI16, getlocklevel_365114)(Ttype225847* t_365116);
static N_INLINE(NIM_BOOL, isemptytype_230932)(Ttype225847* t);
N_NIMCALL(void, listgcunsafety_365832)(Tsym225841* s, NIM_BOOL onlywarning);
N_NIMCALL(void, listgcunsafety_365755)(Tsym225841* s, NIM_BOOL onlywarning, Intset222056* cyclecheck);
N_NIMCALL(NIM_BOOL, containsorincl_222898)(Intset222056* s, NI key);
N_NIMCALL(NimStringDesc*, copyString)(NimStringDesc* src);
N_NIMCALL(Tnode225809*, newnode_227607)(NU8 kind, Tlineinfo190352 info, Tnodeseq225803* sons, Ttype225847* typ);
N_NIMCALL(Tnode225809*, documenteffect_367736)(Tnode225809* n, Tnode225809* 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(Tnode225809*, newidentnode_227313)(Tident198021* ident, Tlineinfo190352 info);
N_NIMCALL(Tnode225809*, documentwriteeffect_367822)(Tnode225809* n, NU8 flag, NimStringDesc* pragmaname);
static N_INLINE(Slice90370, HEX2EHEX2E_105290)(NI a, NI b);
N_NIMCALL(Tnode225809*, documentneweffect_367931)(Tnode225809* n);
STRING_LITERAL(TMP3413, "can raise an unlisted exception: ", 33);
STRING_LITERAL(TMP3414, "Exception", 9);
STRING_LITERAL(TMP3415, "Exception", 9);
STRING_LITERAL(TMP3416, "E_Base", 6);
STRING_LITERAL(TMP3417, "can have an unlisted effect: ", 29);
STRING_LITERAL(TMP3418, "base method is GC-safe, but \'$1\' is not", 39);
STRING_LITERAL(TMP3419, "base method has lock level $1, but dispatcher has $2", 52);
STRING_LITERAL(TMP3466, "compiler/sempass2.nim", 21);
NIM_CONST TY90959 TMP3465 = {((NimStringDesc*) &TMP3466),
((NI) 870)}
;
STRING_LITERAL(TMP3467, "unguarded access: ", 18);
STRING_LITERAL(TMP3468, "expected lock level < ", 22);
STRING_LITERAL(TMP3469, " but got lock level ", 20);
STRING_LITERAL(TMP3470, "RootEffect", 10);
STRING_LITERAL(TMP3471, "RootEffect", 10);
STRING_LITERAL(TMP3472, "TEffect", 7);
STRING_LITERAL(TMP3473, "<unknown>", 9);
NIM_CONST TY90959 TMP3474 = {((NimStringDesc*) &TMP3466),
((NI) 535)}
;
static NIM_CONST TY483044 TMP3475 = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00}
;
STRING_LITERAL(TMP3485, "cannot prove \'$1\' is not nil", 28);
STRING_LITERAL(TMP3486, "\'$1\' is provably nil", 20);
STRING_LITERAL(TMP3487, "invalid guard field: ", 21);
STRING_LITERAL(TMP3488, "locks pragma without argument", 29);
STRING_LITERAL(TMP3489, "invalid lock level: ", 20);
STRING_LITERAL(TMP3490, "multi-lock requires the same static lock level for every operan"
"d", 64);
STRING_LITERAL(TMP3491, "invalid nested locking", 22);
STRING_LITERAL(TMP3492, "result", 6);
STRING_LITERAL(TMP3493, "\'$#\' is not GC-safe as it accesses \'$#\' which is a global using"
" GC\'ed memory", 76);
STRING_LITERAL(TMP3494, "\'$#\' is not GC-safe as it calls \'$#\'", 36);
NIM_CONST TY90959 TMP3495 = {((NimStringDesc*) &TMP3466),
((NI) 211)}
;
STRING_LITERAL(TMP3496, "\'$#\' is not GC-safe as it performs an indirect call here", 56);
STRING_LITERAL(TMP3497, "declared lock level is $1, but real lock level is $2", 52);
NIM_CONST TY90959 TMP3540 = {((NimStringDesc*) &TMP3466),
((NI) 841)}
;
NIM_CONST TY90959 TMP3541 = {((NimStringDesc*) &TMP3466),
((NI) 847)}
;
STRING_LITERAL(TMP5028, "ref ", 4);
extern NIM_CONST TY206342 specialwords_206338;
STRING_LITERAL(TMP5029, "writes", 6);
STRING_LITERAL(TMP5030, "new", 3);
STRING_LITERAL(TMP5031, "escapes", 7);
extern TNimType NTI225803; /* TNodeSeq */
extern Gcheap51018 gch_51059;
extern Tnode225809* emptynode_226807;
extern TNimType NTI333608; /* seq[int] */
extern NU8 gcmd_167134;
extern NU64 gnotes_191398;
extern TNimType NTI259854; /* seq[tuple[a: int, b: int]] */
extern NU32 gglobaloptions_167132;

static N_INLINE(NI, len_226098)(Tnode225809* 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(Tnode225809*, effectspec_367661)(Tnode225809* n, NU16 effecttype) {
	Tnode225809* result;
{	result = 0;
	{
		NI i_367678;
		NI HEX3Atmp_367714;
		NI LOC2;
		NI res_367717;
		i_367678 = 0;
		HEX3Atmp_367714 = 0;
		LOC2 = 0;
		LOC2 = sonslen_228387(n);
		HEX3Atmp_367714 = (NI)(LOC2 - ((NI) 1));
		res_367717 = ((NI) 0);
		{
			while (1) {
				Tnode225809* it;
				if (!(res_367717 <= HEX3Atmp_367714)) goto LA4;
				i_367678 = res_367717;
				it = (*n).kindU.S6.sons->data[i_367678];
				{
					NIM_BOOL LOC7;
					NU16 LOC9;
					LOC7 = 0;
					LOC7 = ((*it).kind == ((NU8) 34));
					if (!(LOC7)) goto LA8;
					LOC9 = 0;
					LOC9 = whichpragma_254687(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_227351(((NU8) 39), (*result).info);
						add_226165(result, (*it).kindU.S6.sons->data[((NI) 1)]);
					}
					LA14: ;
					goto BeforeRet;
				}
				LA10: ;
				res_367717 += ((NI) 1);
			} LA4: ;
		}
	}
	}BeforeRet: ;
	return result;
}

static N_INLINE(Tnode225809*, HEX5BHEX5D_226244)(Tnode225809* n, NI i) {
	Tnode225809* 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_370278)(Tnode225809* spec, Tnode225809* real, NimStringDesc* msg, NIM_BOOL hints, TY370284 effectpredicate) {
	Intset222056 used;
	memset((void*)(&used), 0, sizeof(used));
	chckNil((void*)(&used));
	memset((void*)(&used), 0, sizeof(used));
	initintset_222927((&used));
	{
		Tnode225809* r_370290;
		r_370290 = 0;
		{
			NI i_370345;
			NI HEX3Atmp_370347;
			NI LOC3;
			NI res_370349;
			i_370345 = 0;
			HEX3Atmp_370347 = 0;
			LOC3 = 0;
			LOC3 = len_226098(real);
			HEX3Atmp_370347 = (LOC3 - 1);
			res_370349 = ((NI) 0);
			{
				while (1) {
					if (!(res_370349 <= HEX3Atmp_370347)) goto LA5;
					i_370345 = res_370349;
					r_370290 = (*real).kindU.S6.sons->data[i_370345];
					{
						NimStringDesc* LOC17;
						NimStringDesc* LOC18;
						{
							NI s_370311;
							NI HEX3Atmp_370335;
							NI LOC8;
							NI res_370338;
							s_370311 = 0;
							HEX3Atmp_370335 = 0;
							LOC8 = 0;
							LOC8 = len_226098(spec);
							HEX3Atmp_370335 = (LOC8 - 1);
							res_370338 = ((NI) 0);
							{
								while (1) {
									if (!(res_370338 <= HEX3Atmp_370335)) goto LA10;
									s_370311 = res_370338;
									{
										Tnode225809* LOC13;
										NIM_BOOL LOC14;
										LOC13 = 0;
										LOC13 = HEX5BHEX5D_226244(spec, s_370311);
										LOC14 = 0;
										LOC14 = effectpredicate(LOC13, r_370290);
										if (!LOC14) goto LA15;
										incl_222856((&used), s_370311);
										goto LA6;
									}
									LA15: ;
									res_370338 += ((NI) 1);
								} LA10: ;
							}
						}
						pushinfocontext_191581((*spec).info);
						LOC17 = 0;
						LOC18 = 0;
						LOC18 = typetostring_255032((*r_370290).typ, ((NU8) 0));
						LOC17 = rawNewString(msg->Sup.len + LOC18->Sup.len + 0);
appendString(LOC17, msg);
appendString(LOC17, LOC18);
						localerror_196128((*r_370290).info, ((NU16) 4), LOC17);
						popinfocontext_191600();
					} LA6: ;
					res_370349 += ((NI) 1);
				} LA5: ;
			}
		}
	}
	{
		if (!hints) goto LA21;
		{
			NI s_370332;
			NI HEX3Atmp_370353;
			NI LOC24;
			NI res_370356;
			s_370332 = 0;
			HEX3Atmp_370353 = 0;
			LOC24 = 0;
			LOC24 = len_226098(spec);
			HEX3Atmp_370353 = (LOC24 - 1);
			res_370356 = ((NI) 0);
			{
				while (1) {
					if (!(res_370356 <= HEX3Atmp_370353)) goto LA26;
					s_370332 = res_370356;
					{
						NIM_BOOL LOC29;
						Tnode225809* LOC32;
						Tnode225809* LOC33;
						NimStringDesc* LOC34;
						LOC29 = 0;
						LOC29 = contains_222829(used, s_370332);
						if (!!(LOC29)) goto LA30;
						LOC32 = 0;
						LOC32 = HEX5BHEX5D_226244(spec, s_370332);
						LOC33 = 0;
						LOC33 = HEX5BHEX5D_226244(spec, s_370332);
						LOC34 = 0;
						LOC34 = rendertree_247059(LOC33, 0);
						message_196161((*LOC32).info, ((NU16) 271), LOC34);
					}
					LA30: ;
					res_370356 += ((NI) 1);
				} LA26: ;
			}
		}
	}
	LA21: ;
}

N_NIMCALL(Ttype225847*, getebase_366191)(void) {
	Ttype225847* result;
	result = 0;
	{
		Tsym225841* LOC3;
		LOC3 = 0;
		LOC3 = getcompilerproc_274809(((NimStringDesc*) &TMP3414));
		if (!!((LOC3 == NIM_NIL))) goto LA4;
		result = systypefromname_274179(((NimStringDesc*) &TMP3415));
	}
	goto LA1;
	LA4: ;
	{
		result = systypefromname_274179(((NimStringDesc*) &TMP3416));
	}
	LA1: ;
	return result;
}

N_NIMCALL(Ttype225847*, exctype_366212)(Tnode225809* n) {
	Ttype225847* result;
	Ttype225847* 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_366191();
	}
	goto LA1;
	LA5: ;
	{
		t = (*n).typ;
	}
	LA1: ;
	result = skiptypes_229167(t, IL64(211106247215360));
	return result;
}

N_NIMCALL(NIM_BOOL, subtyperelation_370251)(Tnode225809* spec, Tnode225809* real) {
	NIM_BOOL result;
	Ttype225847* LOC1;
	NI LOC2;
	result = 0;
	LOC1 = 0;
	LOC1 = exctype_366212(real);
	LOC2 = 0;
	LOC2 = safeinheritancediff_264388(LOC1, (*spec).typ);
	result = (LOC2 <= ((NI) 0));
	return result;
}

N_NIMCALL(void, checkmethodeffects_370399)(Tsym225841* disp, Tsym225841* branch) {
	Tnode225809* actual;
	Tnode225809* p;
	Tnode225809* raisesspec;
	Tnode225809* tagsspec;
{	actual = (*(*(*branch).typ).n).kindU.S6.sons->data[((NI) 0)];
	{
		NI LOC3;
		LOC3 = 0;
		LOC3 = len_226098(actual);
		if (!!((LOC3 == ((NI) 4)))) goto LA4;
		goto BeforeRet;
	}
	LA4: ;
	p = (*(*disp).ast).kindU.S6.sons->data[((NI) 4)];
	raisesspec = effectspec_367661(p, ((NU16) 156));
	{
		if (!!(raisesspec == 0)) goto LA8;
		checkraisesspec_370278(raisesspec, (*actual).kindU.S6.sons->data[((NI) 0)], ((NimStringDesc*) &TMP3413), NIM_FALSE, subtyperelation_370251);
	}
	LA8: ;
	tagsspec = effectspec_367661(p, ((NU16) 161));
	{
		if (!!(tagsspec == 0)) goto LA12;
		checkraisesspec_370278(tagsspec, (*actual).kindU.S6.sons->data[((NI) 3)], ((NimStringDesc*) &TMP3417), NIM_FALSE, subtyperelation_370251);
	}
	LA12: ;
	{
		NIM_BOOL LOC16;
		NimStringDesc* LOC20;
		LOC16 = 0;
		LOC16 = (((*disp).flags &(1<<((((NU8) 22))&31)))!=0);
		if (!(LOC16)) goto LA17;
		LOC16 = ((130 & (*(*branch).typ).flags) == 0);
		LA17: ;
		if (!LOC16) goto LA18;
		LOC20 = 0;
		LOC20 = nsuFormatSingleElem(((NimStringDesc*) &TMP3418), (*(*branch).name).s);
		localerror_196139((*branch).info, LOC20);
	}
	LA18: ;
	{
		TY193306 LOC25;
		NimStringDesc* LOC26;
		if (!((*(*disp).typ).locklevel < (*(*branch).typ).locklevel)) goto LA23;
		memset((void*)LOC25, 0, sizeof(LOC25));
		LOC25[0] = HEX24_228096((*(*branch).typ).locklevel);
		LOC25[1] = HEX24_228096((*(*disp).typ).locklevel);
		LOC26 = 0;
		LOC26 = nsuFormatOpenArray(((NimStringDesc*) &TMP3419), LOC25, 2);
		message_196161((*branch).info, ((NU16) 265), LOC26);
	}
	LA23: ;
	}BeforeRet: ;
}

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

static N_INLINE(void, rtladdzct_54204)(Cell48946* c) {
	addzct_52617((&gch_51059.zct), c);
}

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

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

N_NIMCALL(void, initeffects_370704)(Tnode225809* effects, Tsym225841* s, Teffects365008* t) {
	if ((*effects).kindU.S6.sons) nimGCunrefNoCycle((*effects).kindU.S6.sons);
	(*effects).kindU.S6.sons = (Tnodeseq225803*) newSeqRC1((&NTI225803), ((NI) 4));
	asgnRefNoCycle((void**) (&(*effects).kindU.S6.sons->data[((NI) 0)]), newnodei_227351(((NU8) 152), (*s).info));
	asgnRefNoCycle((void**) (&(*effects).kindU.S6.sons->data[((NI) 3)]), newnodei_227351(((NU8) 152), (*s).info));
	asgnRefNoCycle((void**) (&(*effects).kindU.S6.sons->data[((NI) 1)]), emptynode_226807);
	asgnRefNoCycle((void**) (&(*effects).kindU.S6.sons->data[((NI) 2)]), emptynode_226807);
	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), (TY333608*) newSeq((&NTI333608), 0));
	unsureAsgnRef((void**) (&(*t).guards), (Tnodeseq225803*) newSeq((&NTI225803), 0));
	unsureAsgnRef((void**) (&(*t).locked), (Tnodeseq225803*) newSeq((&NTI225803), 0));
}

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

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

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

N_NIMCALL(void, guardglobal_365229)(Teffects365008* a, Tnode225809* n, Tsym225841* guard) {
{	{
		Tnode225809* L_365243;
		Tnodeseq225803* HEX3Atmp_365266;
		NI i_365269;
		NI L_365271;
		L_365243 = 0;
		HEX3Atmp_365266 = 0;
		HEX3Atmp_365266 = (*a).locked;
		i_365269 = ((NI) 0);
		L_365271 = (HEX3Atmp_365266 ? HEX3Atmp_365266->Sup.len : 0);
		{
			while (1) {
				if (!(i_365269 < L_365271)) goto LA3;
				L_365243 = HEX3Atmp_365266->data[i_365269];
				{
					NIM_BOOL LOC6;
					LOC6 = 0;
					LOC6 = ((*L_365243).kind == ((NU8) 3));
					if (!(LOC6)) goto LA7;
					LOC6 = ((*L_365243).kindU.S4.sym == guard);
					LA7: ;
					if (!LOC6) goto LA8;
					goto BeforeRet;
				}
				LA8: ;
				i_365269 += ((NI) 1);
			} LA3: ;
		}
	}
	{
		NimStringDesc* LOC14;
		NimStringDesc* LOC15;
		if (!!((*a).istoplevel)) goto LA12;
		LOC14 = 0;
		LOC15 = 0;
		LOC15 = rendertree_247059(n, 0);
		LOC14 = rawNewString(LOC15->Sup.len + 18);
appendString(LOC14, ((NimStringDesc*) &TMP3467));
appendString(LOC14, LOC15);
		localerror_196128((*n).info, ((NU16) 4), LOC14);
	}
	LA12: ;
	}BeforeRet: ;
}

static N_INLINE(NIM_BOOL, isgcedmem_229235)(Ttype225847* 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_365702)(Teffects365008* a, Tsym225841* reason) {
	(*a).gcunsafe = NIM_TRUE;
	{
		if (!((520192 &(1<<(((*(*a).owner).kind)&31)))!=0)) goto LA3;
		asgnRefNoCycle((void**) (&(*(*a).owner).kindU.S2.gcunsafetyreason), reason);
	}
	LA3: ;
}

N_NIMCALL(void, usevar_365844)(Teffects365008* a, Tnode225809* n) {
	Tsym225841* s;
	s = (*n).kindU.S4.sym;
	{
		NIM_BOOL LOC3;
		LOC3 = 0;
		LOC3 = islocalvar_365069(a, s);
		if (!LOC3) goto LA4;
		{
			NIM_BOOL LOC8;
			LOC8 = 0;
			LOC8 = contains_365853((*a).init->data, (*a).init->Sup.len, (*s).Sup.id);
			if (!!(LOC8)) goto LA9;
			{
				if (!!(((196608 & (*(*s).typ).flags) == 0))) goto LA13;
				message_196161((*n).info, ((NU16) 257), (*(*s).name).s);
			}
			goto LA11;
			LA13: ;
			{
				message_196161((*n).info, ((NU16) 262), (*(*s).name).s);
			}
			LA11: ;
			(*a).init = (TY333608*) 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 &(1<<(((*s).kind)&31)))!=0);
		LA19: ;
		if (!LOC18) goto LA20;
		{
			if (!!(((*s).kindU.S4.guard == NIM_NIL))) goto LA24;
			guardglobal_365229(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 &(1<<((((NU8) 20))&31)))!=0);
			if (LOC30) goto LA31;
			LOC30 = isgcedmem_229235((*s).typ);
			LA31: ;
			LOC28 = LOC30;
			LA29: ;
			if (!LOC28) goto LA32;
			markgcunsafe_365702(a, s);
		}
		LA32: ;
	}
	LA20: ;
}

N_NIMCALL(void, throws_366159)(Tnode225809* tracked, Tnode225809* 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_226165(tracked, n);
	}
	LA5: ;
}

N_NIMCALL(void, addeffect_366300)(Teffects365008* a, Tnode225809* e, NIM_BOOL uselineinfo) {
	Tnode225809* aa;
{	aa = (*a).exc;
	{
		NI i_366421;
		NI HEX3Atmp_366434;
		NI HEX3Atmp_366435;
		NI LOC2;
		NI res_366438;
		i_366421 = 0;
		HEX3Atmp_366434 = 0;
		HEX3Atmp_366435 = 0;
		HEX3Atmp_366434 = (*a).bottom;
		LOC2 = 0;
		LOC2 = len_226098(aa);
		HEX3Atmp_366435 = (LOC2 - 1);
		res_366438 = HEX3Atmp_366434;
		{
			while (1) {
				if (!(res_366438 <= HEX3Atmp_366435)) goto LA4;
				i_366421 = res_366438;
				{
					Tnode225809* LOC7;
					Ttype225847* LOC8;
					Ttype225847* LOC9;
					NIM_BOOL LOC10;
					LOC7 = 0;
					LOC7 = HEX5BHEX5D_226244(aa, i_366421);
					LOC8 = 0;
					LOC8 = exctype_366212(LOC7);
					LOC9 = 0;
					LOC9 = exctype_366212(e);
					LOC10 = 0;
					LOC10 = sametype_260092(LOC8, LOC9, 0);
					if (!LOC10) goto LA11;
					{
						NIM_BOOL LOC15;
						LOC15 = 0;
						LOC15 = !(uselineinfo);
						if (LOC15) goto LA16;
						LOC15 = (gcmd_167134 == ((NU8) 8));
						LA16: ;
						if (!LOC15) goto LA17;
						goto BeforeRet;
					}
					goto LA13;
					LA17: ;
					{
						Tnode225809* LOC20;
						NIM_BOOL LOC21;
						LOC20 = 0;
						LOC20 = HEX5BHEX5D_226244(aa, i_366421);
						LOC21 = 0;
						LOC21 = HEX3DHEX3D_193255((*LOC20).info, (*e).info);
						if (!LOC21) goto LA22;
						goto BeforeRet;
					}
					goto LA13;
					LA22: ;
					LA13: ;
				}
				LA11: ;
				res_366438 += ((NI) 1);
			} LA4: ;
		}
	}
	throws_366159((*a).exc, e);
	}BeforeRet: ;
}

static N_INLINE(NI, safelen_226126)(Tnode225809* 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_368211)(Teffects365008* tracked, Tnode225809* 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_228096((*tracked).currlocklevel);
			LOC11 = 0;
			LOC11 = HEX24_228096(locklevel);
			LOC9 = rawNewString(LOC10->Sup.len + LOC11->Sup.len + 42);
appendString(LOC9, ((NimStringDesc*) &TMP3468));
appendString(LOC9, LOC10);
appendString(LOC9, ((NimStringDesc*) &TMP3469));
appendString(LOC9, LOC11);
			localerror_196128((*n).info, ((NU16) 4), LOC9);
		}
		LA7: ;
		(*tracked).maxlocklevel = (((*tracked).maxlocklevel >= locklevel) ? (*tracked).maxlocklevel : locklevel);
	}
	LA3: ;
}

N_NIMCALL(NI16, getlocklevel_368161)(Tsym225841* 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 &(1<<((((NU8) 1))&31)))!=0);
			LA8: ;
			if (!LOC7) goto LA9;
			result = ((NI16) 0);
		}
		goto LA5;
		LA9: ;
		{
			result = ((NI16) 1001);
		}
		LA5: ;
	}
	LA3: ;
	return result;
}

N_NIMCALL(Tnode225809*, createraise_366240)(Tnode225809* n) {
	Tnode225809* result;
	result = 0;
	result = newnode_226401(((NU8) 4));
	asgnRefNoCycle((void**) (&(*result).typ), getebase_366191());
	{
		if (!!(n == 0)) goto LA3;
		(*result).info = (*n).info;
	}
	LA3: ;
	return result;
}

N_NIMCALL(void, mergeeffects_366515)(Teffects365008* a, Tnode225809* b, Tnode225809* comesfrom) {
	{
		Tnode225809* LOC5;
		if (!b == 0) goto LA3;
		LOC5 = 0;
		LOC5 = createraise_366240(comesfrom);
		addeffect_366300(a, LOC5, NIM_TRUE);
	}
	goto LA1;
	LA3: ;
	{
		{
			Tnode225809* effect_366529;
			effect_366529 = 0;
			{
				NI i_366546;
				NI HEX3Atmp_366548;
				NI LOC9;
				NI res_366550;
				i_366546 = 0;
				HEX3Atmp_366548 = 0;
				LOC9 = 0;
				LOC9 = len_226098(b);
				HEX3Atmp_366548 = (LOC9 - 1);
				res_366550 = ((NI) 0);
				{
					while (1) {
						if (!(res_366550 <= HEX3Atmp_366548)) goto LA11;
						i_366546 = res_366550;
						effect_366529 = (*b).kindU.S6.sons->data[i_366546];
						addeffect_366300(a, effect_366529, !((comesfrom == NIM_NIL)));
						res_366550 += ((NI) 1);
					} LA11: ;
				}
			}
		}
	}
	LA1: ;
}

N_NIMCALL(void, addtag_366457)(Teffects365008* a, Tnode225809* e, NIM_BOOL uselineinfo) {
	Tnode225809* aa;
{	aa = (*a).tags;
	{
		NI i_366482;
		NI HEX3Atmp_366493;
		NI LOC2;
		NI res_366496;
		i_366482 = 0;
		HEX3Atmp_366493 = 0;
		LOC2 = 0;
		LOC2 = len_226098(aa);
		HEX3Atmp_366493 = (LOC2 - 1);
		res_366496 = ((NI) 0);
		{
			while (1) {
				if (!(res_366496 <= HEX3Atmp_366493)) goto LA4;
				i_366482 = res_366496;
				{
					Tnode225809* LOC7;
					Ttype225847* LOC8;
					Ttype225847* LOC9;
					NIM_BOOL LOC10;
					LOC7 = 0;
					LOC7 = HEX5BHEX5D_226244(aa, i_366482);
					LOC8 = 0;
					LOC8 = skiptypes_229167((*LOC7).typ, IL64(211106247215360));
					LOC9 = 0;
					LOC9 = skiptypes_229167((*e).typ, IL64(211106247215360));
					LOC10 = 0;
					LOC10 = sametype_260092(LOC8, LOC9, 0);
					if (!LOC10) goto LA11;
					{
						NIM_BOOL LOC15;
						LOC15 = 0;
						LOC15 = !(uselineinfo);
						if (LOC15) goto LA16;
						LOC15 = (gcmd_167134 == ((NU8) 8));
						LA16: ;
						if (!LOC15) goto LA17;
						goto BeforeRet;
					}
					goto LA13;
					LA17: ;
					{
						Tnode225809* LOC20;
						NIM_BOOL LOC21;
						LOC20 = 0;
						LOC20 = HEX5BHEX5D_226244(aa, i_366482);
						LOC21 = 0;
						LOC21 = HEX3DHEX3D_193255((*LOC20).info, (*e).info);
						if (!LOC21) goto LA22;
						goto BeforeRet;
					}
					goto LA13;
					LA22: ;
					LA13: ;
				}
				LA11: ;
				res_366496 += ((NI) 1);
			} LA4: ;
		}
	}
	throws_366159((*a).tags, e);
	}BeforeRet: ;
}

N_NIMCALL(Tnode225809*, createtag_366259)(Tnode225809* n) {
	Tnode225809* result;
	result = 0;
	result = newnode_226401(((NU8) 4));
	{
		Tsym225841* LOC3;
		LOC3 = 0;
		LOC3 = getcompilerproc_274809(((NimStringDesc*) &TMP3470));
		if (!!((LOC3 == NIM_NIL))) goto LA4;
		asgnRefNoCycle((void**) (&(*result).typ), systypefromname_274179(((NimStringDesc*) &TMP3471)));
	}
	goto LA1;
	LA4: ;
	{
		asgnRefNoCycle((void**) (&(*result).typ), systypefromname_274179(((NimStringDesc*) &TMP3472)));
	}
	LA1: ;
	{
		if (!!(n == 0)) goto LA9;
		(*result).info = (*n).info;
	}
	LA9: ;
	return result;
}

N_NIMCALL(void, mergetags_366571)(Teffects365008* a, Tnode225809* b, Tnode225809* comesfrom) {
	{
		Tnode225809* LOC5;
		if (!b == 0) goto LA3;
		LOC5 = 0;
		LOC5 = createtag_366259(comesfrom);
		addtag_366457(a, LOC5, NIM_TRUE);
	}
	goto LA1;
	LA3: ;
	{
		{
			Tnode225809* effect_366585;
			effect_366585 = 0;
			{
				NI i_366602;
				NI HEX3Atmp_366604;
				NI LOC9;
				NI res_366606;
				i_366602 = 0;
				HEX3Atmp_366604 = 0;
				LOC9 = 0;
				LOC9 = len_226098(b);
				HEX3Atmp_366604 = (LOC9 - 1);
				res_366606 = ((NI) 0);
				{
					while (1) {
						if (!(res_366606 <= HEX3Atmp_366604)) goto LA11;
						i_366602 = res_366606;
						effect_366585 = (*b).kindU.S6.sons->data[i_366602];
						addtag_366457(a, effect_366585, !((comesfrom == NIM_NIL)));
						res_366606 += ((NI) 1);
					} LA11: ;
				}
			}
		}
	}
	LA1: ;
}

N_NIMCALL(void, warnaboutgcunsafe_365693)(Tnode225809* n) {
	NimStringDesc* LOC1;
	LOC1 = 0;
	LOC1 = rendertree_247059(n, 0);
	message_196161((*n).info, ((NU16) 260), LOC1);
}

N_NIMCALL(void, propagateeffects_368226)(Teffects365008* tracked, Tnode225809* n, Tsym225841* s) {
	Tnode225809* pragma;
	Tnode225809* spec;
	Tnode225809* tagspec;
	NI16 LOC11;
	pragma = (*(*s).ast).kindU.S6.sons->data[((NI) 4)];
	spec = effectspec_367661(pragma, ((NU16) 156));
	mergeeffects_366515(tracked, spec, n);
	tagspec = effectspec_367661(pragma, ((NU16) 161));
	mergetags_366571(tracked, tagspec, n);
	{
		NIM_BOOL LOC3;
		LOC3 = 0;
		LOC3 = ((130 & (*(*s).typ).flags) == 0);
		if (!(LOC3)) goto LA4;
		LOC3 = !((((*s).flags &(1<<((((NU8) 5))&31)))!=0));
		LA4: ;
		if (!LOC3) goto LA5;
		{
			if (!((gnotes_191398 &(IL64(1)<<(((((NU16) 260)- 237))&IL64(63))))!=0)) goto LA9;
			warnaboutgcunsafe_365693(n);
		}
		LA9: ;
		markgcunsafe_365702(tracked, s);
	}
	LA5: ;
	LOC11 = 0;
	LOC11 = getlocklevel_368161(s);
	mergelocklevels_368211(tracked, n, LOC11);
}

N_NIMCALL(NIM_BOOL, isforwardedproc_367579)(Tnode225809* 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 &(1<<((((NU8) 4))&31)))!=0);
	LA2: ;
	result = LOC1;
	return result;
}

N_NIMCALL(NIM_BOOL, isindirectcall_367513)(Tnode225809* n, Tsym225841* 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 (!!(((520192 &(1<<(((*(*n).kindU.S4.sym).kind)&31)))!=0))) goto LA11;
		result = NIM_TRUE;
	}
	goto LA1;
	LA11: ;
	LA1: ;
	return result;
}

N_NIMCALL(void, assumetheworst_368391)(Teffects365008* tracked, Tnode225809* n, Ttype225847* op) {
	Tnode225809* LOC1;
	Tnode225809* LOC2;
	NI16 locklevel;
	LOC1 = 0;
	LOC1 = createraise_366240(n);
	addeffect_366300(tracked, LOC1, NIM_TRUE);
	LOC2 = 0;
	LOC2 = createtag_366259(n);
	addtag_366457(tracked, LOC2, NIM_TRUE);
	{
		if (!((*op).locklevel == ((NI16) -1))) goto LA5;
		locklevel = ((NI16) 1001);
	}
	goto LA3;
	LA5: ;
	{
		locklevel = (*op).locklevel;
	}
	LA3: ;
	mergelocklevels_368211(tracked, n, locklevel);
}

N_NIMCALL(NIM_BOOL, importedfromc_368130)(Tnode225809* 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 &(1<<((((NU8) 5))&31)))!=0);
	LA2: ;
	result = LOC1;
	return result;
}

N_NIMCALL(void, markgcunsafe_365723)(Teffects365008* a, Tnode225809* reason) {
	(*a).gcunsafe = NIM_TRUE;
	{
		if (!((520192 &(1<<(((*(*a).owner).kind)&31)))!=0)) goto LA3;
		{
			if (!((*reason).kind == ((NU8) 3))) goto LA7;
			asgnRefNoCycle((void**) (&(*(*a).owner).kindU.S2.gcunsafetyreason), (*reason).kindU.S4.sym);
		}
		goto LA5;
		LA7: ;
		{
			Tident198021* LOC10;
			LOC10 = 0;
			LOC10 = getident_198463(((NimStringDesc*) &TMP3473));
			asgnRefNoCycle((void**) (&(*(*a).owner).kindU.S2.gcunsafetyreason), newsym_226656(((NU8) 0), LOC10, (*a).owner, (*reason).info));
		}
		LA5: ;
	}
	LA3: ;
}

N_NIMCALL(NIM_BOOL, isownedprocvar_368403)(Tnode225809* n, Tsym225841* 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_368292)(Teffects365008* tracked, Tnode225809* n_368295, Ttype225847* paramtype) {
	Tnode225809* n;
{	n = skipconv_264935(n_368295);
	{
		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 &(1<<((((NU8) 16))&31)))!=0);
		LA6: ;
		LOC4 = LOC5;
		if (!(LOC4)) goto LA7;
		LOC4 = !(((*n).typ == NIM_NIL));
		LA7: ;
		LOC3 = LOC4;
		if (!(LOC3)) goto LA8;
		LOC3 = !((((*(*n).typ).flags &(1<<((((NU8) 16))&31)))!=0));
		LA8: ;
		if (!LOC3) goto LA9;
		{
			if (!((*n).kind == ((NU8) 63))) goto LA13;
			{
				NIM_BOOL LOC17;
				LOC17 = 0;
				LOC17 = containsnode_230365(n, TMP3475);
				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 = ((520192 &(1<<(((*(*n).kindU.S4.sym).kind)&31)))!=0);
			LA23: ;
			LOC21 = LOC22;
			if (LOC21) goto LA24;
			LOC21 = ((*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_359451((*tracked).guards, n);
		switch (LOC27) {
		case ((NU8) 0):
		{
			NimStringDesc* LOC29;
			NimStringDesc* LOC30;
			LOC29 = 0;
			LOC29 = rendertree_247059(n, 0);
			LOC30 = 0;
			LOC30 = nsuFormatSingleElem(((NimStringDesc*) &TMP3485), LOC29);
			message_196161((*n).info, ((NU16) 4), LOC30);
		}
		break;
		case ((NU8) 1):
		{
			NimStringDesc* LOC32;
			NimStringDesc* LOC33;
			LOC32 = 0;
			LOC32 = rendertree_247059(n, 0);
			LOC33 = 0;
			LOC33 = nsuFormatSingleElem(((NimStringDesc*) &TMP3486), LOC32);
			message_196161((*n).info, ((NU16) 4), LOC33);
		}
		break;
		case ((NU8) 2):
		{
		}
		break;
		}
	}
	LA9: ;
	}BeforeRet: ;
}

N_NIMCALL(void, trackoperand_368446)(Teffects365008* tracked, Tnode225809* n, Ttype225847* paramtype) {
	Tnode225809* a;
	Ttype225847* op;
	a = skipconvandclosure_233305(n);
	op = (*a).typ;
	{
		NIM_BOOL LOC3;
		NIM_BOOL LOC4;
		Tnode225809* effectlist;
		Tnode225809* 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_196279(TMP3474);
			internalerror_196191(LOC13);
		}
		LA11: ;
		effectlist = (*(*op).n).kindU.S6.sons->data[((NI) 0)];
		s = skipconv_264935(n);
		{
			NIM_BOOL LOC16;
			LOC16 = 0;
			LOC16 = ((*s).kind == ((NU8) 3));
			if (!(LOC16)) goto LA17;
			LOC16 = ((520192 &(1<<(((*(*s).kindU.S4.sym).kind)&31)))!=0);
			LA17: ;
			if (!LOC16) goto LA18;
			propagateeffects_368226(tracked, n, (*s).kindU.S4.sym);
		}
		goto LA14;
		LA18: ;
		{
			NI LOC21;
			LOC21 = 0;
			LOC21 = len_226098(effectlist);
			if (!(LOC21 == ((NI) 0))) goto LA22;
			{
				NIM_BOOL LOC26;
				LOC26 = 0;
				LOC26 = isforwardedproc_367579(n);
				if (!LOC26) goto LA27;
				propagateeffects_368226(tracked, n, (*n).kindU.S4.sym);
			}
			goto LA24;
			LA27: ;
			{
				NIM_BOOL LOC30;
				LOC30 = 0;
				LOC30 = isownedprocvar_368403(a, (*tracked).owner);
				if (!!(LOC30)) goto LA31;
				assumetheworst_368391(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_368403(a, (*tracked).owner);
				LOC35 = !(LOC37);
				LA36: ;
				if (!LOC35) goto LA38;
				{
					if (!((gnotes_191398 &(IL64(1)<<(((((NU16) 260)- 237))&IL64(63))))!=0)) goto LA42;
					warnaboutgcunsafe_365693(n);
				}
				LA42: ;
				markgcunsafe_365723(tracked, a);
			}
			LA38: ;
		}
		goto LA14;
		LA22: ;
		{
			mergeeffects_366515(tracked, (*effectlist).kindU.S6.sons->data[((NI) 0)], n);
			mergetags_366571(tracked, (*effectlist).kindU.S6.sons->data[((NI) 3)], n);
			{
				if (!((130 & (*op).flags) == 0)) goto LA47;
				{
					if (!((gnotes_191398 &(IL64(1)<<(((((NU16) 260)- 237))&IL64(63))))!=0)) goto LA51;
					warnaboutgcunsafe_365693(n);
				}
				LA51: ;
				markgcunsafe_365723(tracked, a);
			}
			LA47: ;
		}
		LA14: ;
	}
	LA7: ;
	notnilcheck_368292(tracked, n, paramtype);
}

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

static N_INLINE(void, makevolatile_365468)(Teffects365008* a, Tsym225841* s) {
	{
		NIM_BOOL LOC3;
		NIM_BOOL LOC5;
		Tsym225841* LOC7;
		LOC3 = 0;
		LOC3 = (((NI) 0) < (*a).intrystmt);
		if (!(LOC3)) goto LA4;
		LOC5 = 0;
		LOC5 = (gcmd_167134 == ((NU8) 2));
		if (LOC5) goto LA6;
		LOC7 = 0;
		LOC7 = getmodule_233243((*a).owner);
		LOC5 = (((*LOC7).flags &(1<<((((NU8) 27))&31)))!=0);
		LA6: ;
		LOC3 = !(LOC5);
		LA4: ;
		if (!LOC3) goto LA8;
		(*s).flags |= ((NU32)1)<<((((NU8) 7))%(sizeof(NU32)*8));
	}
	LA8: ;
}

N_NIMCALL(void, initvar_365515)(Teffects365008* a, Tnode225809* n, NIM_BOOL volatilecheck) {
	Tsym225841* s;
{	{
		if (!!(((*n).kind == ((NU8) 3)))) goto LA3;
		goto BeforeRet;
	}
	LA3: ;
	s = (*n).kindU.S4.sym;
	{
		NIM_BOOL LOC7;
		LOC7 = 0;
		LOC7 = islocalvar_365069(a, s);
		if (!LOC7) goto LA8;
		{
			if (!volatilecheck) goto LA12;
			makevolatile_365468(a, s);
		}
		LA12: ;
		{
			NI x_365611;
			TY333608* HEX3Atmp_365625;
			NI i_365628;
			NI L_365630;
			x_365611 = 0;
			HEX3Atmp_365625 = 0;
			HEX3Atmp_365625 = (*a).init;
			i_365628 = ((NI) 0);
			L_365630 = (HEX3Atmp_365625 ? HEX3Atmp_365625->Sup.len : 0);
			{
				while (1) {
					if (!(i_365628 < L_365630)) goto LA16;
					x_365611 = HEX3Atmp_365625->data[i_365628];
					{
						if (!(x_365611 == (*s).Sup.id)) goto LA19;
						goto BeforeRet;
					}
					LA19: ;
					i_365628 += ((NI) 1);
				} LA16: ;
			}
		}
		(*a).init = (TY333608*) 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_365646)(Teffects365008* a, Tnode225809* n) {
	Tsym225841* 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_365515(a, n, NIM_TRUE);
	}
	goto LA5;
	LA7: ;
	{
		NIM_BOOL LOC10;
		LOC10 = 0;
		LOC10 = islocalvar_365069(a, s);
		if (!LOC10) goto LA11;
		makevolatile_365468(a, s);
	}
	goto LA5;
	LA11: ;
	LA5: ;
	}BeforeRet: ;
}

N_NIMCALL(void, guarddotaccess_365287)(Teffects365008* a, Tnode225809* n) {
	Tnode225809* ri;
	Tsym225841* 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) 19)));
		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: ;
	{
		Tsym225841* field;
		Ttype225847* ty;
		if (!((*g).kind == ((NU8) 0))) goto LA15;
		field = NIM_NIL;
		ty = skiptypes_229167((*(*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_233236((*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_233236((*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_229167(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*) &TMP3487));
appendString(LOC40, (*(*g).name).s);
			localerror_196128((*n).info, ((NU16) 4), LOC40);
			goto BeforeRet;
		}
		LA38: ;
		g = field;
	}
	LA15: ;
	{
		Tnode225809* dot;
		NimStringDesc* LOC53;
		NimStringDesc* LOC54;
		if (!((*g).kind == ((NU8) 19))) goto LA43;
		dot = newnodei_227407(((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_227325(g));
		asgnRefNoCycle((void**) (&(*dot).typ), (*g).typ);
		{
			Tnode225809* L_365437;
			Tnodeseq225803* HEX3Atmp_365441;
			NI i_365444;
			NI L_365446;
			L_365437 = 0;
			HEX3Atmp_365441 = 0;
			HEX3Atmp_365441 = (*a).locked;
			i_365444 = ((NI) 0);
			L_365446 = (HEX3Atmp_365441 ? HEX3Atmp_365441->Sup.len : 0);
			{
				while (1) {
					if (!(i_365444 < L_365446)) goto LA47;
					L_365437 = HEX3Atmp_365441->data[i_365444];
					{
						NIM_BOOL LOC50;
						LOC50 = 0;
						LOC50 = sametree_358462(dot, L_365437);
						if (!LOC50) goto LA51;
						goto BeforeRet;
					}
					LA51: ;
					i_365444 += ((NI) 1);
				} LA47: ;
			}
		}
		LOC53 = 0;
		LOC54 = 0;
		LOC54 = rendertree_247059(n, 0);
		LOC53 = rawNewString(LOC54->Sup.len + 18);
appendString(LOC53, ((NimStringDesc*) &TMP3467));
appendString(LOC53, LOC54);
		localerror_196128((*n).info, ((NU16) 4), LOC53);
	}
	goto LA41;
	LA43: ;
	{
		guardglobal_365229(a, n, g);
	}
	LA41: ;
	}BeforeRet: ;
}

N_NIMCALL(void, addtointersection_366082)(TY259854** inter, NI s) {
	TY259855 LOC8;
{	{
		NI j_366113;
		NI HEX3Atmp_366137;
		NI res_366140;
		j_366113 = 0;
		HEX3Atmp_366137 = 0;
		HEX3Atmp_366137 = (((*inter) ? (*inter)->Sup.len : 0) - 1);
		res_366140 = ((NI) 0);
		{
			while (1) {
				if (!(res_366140 <= HEX3Atmp_366137)) goto LA3;
				j_366113 = res_366140;
				{
					if (!(s == (*inter)->data[j_366113].Field0)) goto LA6;
					(*inter)->data[j_366113].Field1 += ((NI) 1);
					goto BeforeRet;
				}
				LA6: ;
				res_366140 += ((NI) 1);
			} LA3: ;
		}
	}
	LOC8.Field0 = s;
	LOC8.Field1 = ((NI) 1);
	(*inter) = (TY259854*) incrSeqV2(&((*inter))->Sup, sizeof(TY259855));
	(*inter)->data[(*inter)->Sup.len] = LOC8;
	++(*inter)->Sup.len;
	}BeforeRet: ;
}

N_NIMCALL(void, catchesall_366814)(Teffects365008* tracked) {
	{
		if (!!((*(*tracked).exc).kindU.S6.sons == 0)) goto LA3;
		(*(*tracked).exc).kindU.S6.sons = (Tnodeseq225803*) setLengthSeq(&((*(*tracked).exc).kindU.S6.sons)->Sup, sizeof(Tnode225809*), ((NI) ((*tracked).bottom)));
	}
	LA3: ;
}

N_NIMCALL(void, catches_366686)(Teffects365008* tracked, Ttype225847* e_366689) {
	Ttype225847* e;
	NI L;
	NI i;
	e = skiptypes_229167(e_366689, IL64(211106247215360));
	L = len_226098((*tracked).exc);
	i = (*tracked).bottom;
	{
		while (1) {
			if (!(i < L)) goto LA2;
			{
				Tnode225809* LOC5;
				Ttype225847* LOC6;
				NI LOC7;
				LOC5 = 0;
				LOC5 = HEX5BHEX5D_226244((*tracked).exc, i);
				LOC6 = 0;
				LOC6 = exctype_366212(LOC5);
				LOC7 = 0;
				LOC7 = safeinheritancediff_264388(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 = (Tnodeseq225803*) setLengthSeq(&((*(*tracked).exc).kindU.S6.sons)->Sup, sizeof(Tnode225809*), ((NI) (L)));
	}
	goto LA11;
	LA13: ;
	{
	}
	LA11: ;
}

N_NIMCALL(void, tracktrystmt_366850)(Teffects365008* tracked, Tnode225809* n) {
	NI oldbottom;
	NI oldstate;
	TY259854* inter;
	NI branches;
	NIM_BOOL hasfinally;
	oldbottom = (*tracked).bottom;
	(*tracked).bottom = len_226098((*tracked).exc);
	oldstate = ((*tracked).init ? (*tracked).init->Sup.len : 0);
	inter = (TY259854*) newSeq((&NTI259854), 0);
	(*tracked).intrystmt += ((NI) 1);
	track_366843(tracked, (*n).kindU.S6.sons->data[((NI) 0)]);
	(*tracked).intrystmt -= ((NI) 1);
	{
		NI i_366927;
		NI HEX3Atmp_367425;
		NI res_367428;
		i_366927 = 0;
		HEX3Atmp_367425 = 0;
		HEX3Atmp_367425 = (((*tracked).init ? (*tracked).init->Sup.len : 0) - 1);
		res_367428 = oldstate;
		{
			while (1) {
				if (!(res_367428 <= HEX3Atmp_367425)) goto LA3;
				i_366927 = res_367428;
				addtointersection_366082((&inter), (*tracked).init->data[i_366927]);
				res_367428 += ((NI) 1);
			} LA3: ;
		}
	}
	branches = ((NI) 1);
	hasfinally = NIM_FALSE;
	{
		NI i_366950;
		NI HEX3Atmp_367449;
		NI LOC5;
		NI res_367452;
		i_366950 = 0;
		HEX3Atmp_367449 = 0;
		LOC5 = 0;
		LOC5 = len_226098(n);
		HEX3Atmp_367449 = (LOC5 - 1);
		res_367452 = ((NI) 1);
		{
			while (1) {
				Tnode225809* b;
				NI blen;
				if (!(res_367452 <= HEX3Atmp_367449)) goto LA7;
				i_366950 = res_367452;
				b = (*n).kindU.S6.sons->data[i_366950];
				blen = sonslen_228387(b);
				{
					if (!((*b).kind == ((NU8) 87))) goto LA10;
					branches += ((NI) 1);
					{
						if (!(blen == ((NI) 1))) goto LA14;
						catchesall_366814(tracked);
					}
					goto LA12;
					LA14: ;
					{
						{
							NI j_366984;
							NI HEX3Atmp_367434;
							NI res_367437;
							j_366984 = 0;
							HEX3Atmp_367434 = 0;
							HEX3Atmp_367434 = (NI)(blen - ((NI) 2));
							res_367437 = ((NI) 0);
							{
								while (1) {
									if (!(res_367437 <= HEX3Atmp_367434)) goto LA19;
									j_366984 = res_367437;
									catches_366686(tracked, (*(*b).kindU.S6.sons->data[j_366984]).typ);
									res_367437 += ((NI) 1);
								} LA19: ;
							}
						}
					}
					LA12: ;
					(*tracked).init = (TY333608*) setLengthSeq(&((*tracked).init)->Sup, sizeof(NI), ((NI) (oldstate)));
					track_366843(tracked, (*b).kindU.S6.sons->data[(NI)(blen - ((NI) 1))]);
					{
						NI i_367039;
						NI HEX3Atmp_367442;
						NI res_367445;
						i_367039 = 0;
						HEX3Atmp_367442 = 0;
						HEX3Atmp_367442 = (((*tracked).init ? (*tracked).init->Sup.len : 0) - 1);
						res_367445 = oldstate;
						{
							while (1) {
								if (!(res_367445 <= HEX3Atmp_367442)) goto LA22;
								i_367039 = res_367445;
								addtointersection_366082((&inter), (*tracked).init->data[i_367039]);
								res_367445 += ((NI) 1);
							} LA22: ;
						}
					}
				}
				goto LA8;
				LA10: ;
				{
					(*tracked).init = (TY333608*) setLengthSeq(&((*tracked).init)->Sup, sizeof(NI), ((NI) (oldstate)));
					track_366843(tracked, (*b).kindU.S6.sons->data[(NI)(blen - ((NI) 1))]);
					hasfinally = NIM_TRUE;
				}
				LA8: ;
				res_367452 += ((NI) 1);
			} LA7: ;
		}
	}
	(*tracked).bottom = oldbottom;
	{
		if (!!(hasfinally)) goto LA26;
		(*tracked).init = (TY333608*) setLengthSeq(&((*tracked).init)->Sup, sizeof(NI), ((NI) (oldstate)));
	}
	LA26: ;
	{
		NI id_367411;
		NI count_367412;
		NI i_367459;
		NI L_367461;
		id_367411 = 0;
		count_367412 = 0;
		i_367459 = ((NI) 0);
		L_367461 = (inter ? inter->Sup.len : 0);
		{
			while (1) {
				if (!(i_367459 < L_367461)) goto LA30;
				id_367411 = inter->data[i_367459].Field0;
				count_367412 = inter->data[i_367459].Field1;
				{
					if (!(count_367412 == branches)) goto LA33;
					(*tracked).init = (TY333608*) incrSeqV2(&((*tracked).init)->Sup, sizeof(NI));
					(*tracked).init->data[(*tracked).init->Sup.len] = id_367411;
					++(*tracked).init->Sup.len;
				}
				LA33: ;
				i_367459 += ((NI) 1);
			} LA30: ;
		}
	}
}

N_NIMCALL(void, listeffects_366627)(Teffects365008* a) {
	{
		Tnode225809* e_366630;
		Tnode225809* HEX3Atmp_366633;
		e_366630 = 0;
		HEX3Atmp_366633 = 0;
		HEX3Atmp_366633 = (*a).exc;
		{
			NI i_366637;
			NI HEX3Atmp_366639;
			NI LOC3;
			NI res_366641;
			i_366637 = 0;
			HEX3Atmp_366639 = 0;
			LOC3 = 0;
			LOC3 = len_226098(HEX3Atmp_366633);
			HEX3Atmp_366639 = (LOC3 - 1);
			res_366641 = ((NI) 0);
			{
				while (1) {
					NimStringDesc* LOC6;
					if (!(res_366641 <= HEX3Atmp_366639)) goto LA5;
					i_366637 = res_366641;
					e_366630 = (*HEX3Atmp_366633).kindU.S6.sons->data[i_366637];
					LOC6 = 0;
					LOC6 = typetostring_255032((*e_366630).typ, ((NU8) 0));
					message_196161((*e_366630).info, ((NU16) 290), LOC6);
					res_366641 += ((NI) 1);
				} LA5: ;
			}
		}
	}
	{
		Tnode225809* e_366631;
		Tnode225809* HEX3Atmp_366645;
		e_366631 = 0;
		HEX3Atmp_366645 = 0;
		HEX3Atmp_366645 = (*a).tags;
		{
			NI i_366649;
			NI HEX3Atmp_366651;
			NI LOC9;
			NI res_366653;
			i_366649 = 0;
			HEX3Atmp_366651 = 0;
			LOC9 = 0;
			LOC9 = len_226098(HEX3Atmp_366645);
			HEX3Atmp_366651 = (LOC9 - 1);
			res_366653 = ((NI) 0);
			{
				while (1) {
					NimStringDesc* LOC12;
					if (!(res_366653 <= HEX3Atmp_366651)) goto LA11;
					i_366649 = res_366653;
					e_366631 = (*HEX3Atmp_366645).kindU.S6.sons->data[i_366649];
					LOC12 = 0;
					LOC12 = typetostring_255032((*e_366631).typ, ((NU8) 0));
					message_196161((*e_366631).info, ((NU16) 290), LOC12);
					res_366653 += ((NI) 1);
				} LA11: ;
			}
		}
	}
}

N_NIMCALL(void, trackpragmastmt_367610)(Teffects365008* tracked, Tnode225809* n) {
	{
		NI i_367626;
		NI HEX3Atmp_367639;
		NI LOC2;
		NI res_367642;
		i_367626 = 0;
		HEX3Atmp_367639 = 0;
		LOC2 = 0;
		LOC2 = sonslen_228387(n);
		HEX3Atmp_367639 = (NI)(LOC2 - ((NI) 1));
		res_367642 = ((NI) 0);
		{
			while (1) {
				Tnode225809* it;
				if (!(res_367642 <= HEX3Atmp_367639)) goto LA4;
				i_367626 = res_367642;
				it = (*n).kindU.S6.sons->data[i_367626];
				{
					NU16 LOC7;
					LOC7 = 0;
					LOC7 = whichpragma_254687(it);
					if (!(LOC7 == ((NU16) 160))) goto LA8;
					listeffects_366627(tracked);
				}
				LA8: ;
				res_367642 += ((NI) 1);
			} LA4: ;
		}
	}
}

N_NIMCALL(NIM_BOOL, breaksblock_368609)(Tnode225809* n) {
	NIM_BOOL result;
{	result = 0;
	switch ((*n).kind) {
	case ((NU8) 115):
	case ((NU8) 126):
	{
		{
			Tnode225809* c_368613;
			c_368613 = 0;
			{
				NI i_368641;
				NI HEX3Atmp_368643;
				NI LOC4;
				NI res_368645;
				i_368641 = 0;
				HEX3Atmp_368643 = 0;
				LOC4 = 0;
				LOC4 = len_226098(n);
				HEX3Atmp_368643 = (LOC4 - 1);
				res_368645 = ((NI) 0);
				{
					while (1) {
						if (!(res_368645 <= HEX3Atmp_368643)) goto LA6;
						i_368641 = res_368645;
						c_368613 = (*n).kindU.S6.sons->data[i_368641];
						{
							NIM_BOOL LOC9;
							LOC9 = 0;
							LOC9 = breaksblock_368609(c_368613);
							if (!LOC9) goto LA10;
							result = NIM_TRUE;
							goto BeforeRet;
						}
						LA10: ;
						res_368645 += ((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 &(1<<((((NU8) 14))&31)))!=0);
			LA17: ;
			if (!LOC16) goto LA18;
			result = NIM_TRUE;
			goto BeforeRet;
		}
		LA18: ;
	}
	break;
	default:
	{
	}
	break;
	}
	}BeforeRet: ;
	return result;
}

N_NIMCALL(void, trackcase_368666)(Teffects365008* tracked, Tnode225809* n) {
	NI oldstate;
	NI oldfacts;
	NIM_BOOL stringcase;
	Ttype225847* LOC1;
	NIM_BOOL interesting;
	NIM_BOOL LOC2;
	NIM_BOOL LOC3;
	TY259854* inter;
	NI tocover;
	track_366843(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_229167((*(*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_357283((*n).kindU.S6.sons->data[((NI) 0)]);
	LA4: ;
	LOC2 = LOC3;
	if (!(LOC2)) goto LA5;
	LOC2 = ((gnotes_191398 &(IL64(1)<<(((((NU16) 258)- 237))&IL64(63))))!=0);
	LA5: ;
	interesting = LOC2;
	inter = (TY259854*) newSeq((&NTI259854), 0);
	tocover = ((NI) 0);
	{
		NI i_368764;
		NI HEX3Atmp_368915;
		NI LOC7;
		NI res_368918;
		i_368764 = 0;
		HEX3Atmp_368915 = 0;
		LOC7 = 0;
		LOC7 = len_226098(n);
		HEX3Atmp_368915 = (LOC7 - 1);
		res_368918 = ((NI) 1);
		{
			while (1) {
				Tnode225809* branch;
				if (!(res_368918 <= HEX3Atmp_368915)) goto LA9;
				i_368764 = res_368918;
				branch = (*n).kindU.S6.sons->data[i_368764];
				(*tracked).init = (TY333608*) setLengthSeq(&((*tracked).init)->Sup, sizeof(NI), ((NI) (oldstate)));
				{
					if (!interesting) goto LA12;
					(*tracked).guards = (Tnodeseq225803*) setLengthSeq(&((*tracked).guards)->Sup, sizeof(Tnode225809*), ((NI) (oldfacts)));
					addcasebranchfacts_361137((&(*tracked).guards), n, i_368764);
				}
				LA12: ;
				{
					NI i_368807;
					NI HEX3Atmp_368900;
					NI LOC15;
					NI res_368903;
					i_368807 = 0;
					HEX3Atmp_368900 = 0;
					LOC15 = 0;
					LOC15 = len_226098(branch);
					HEX3Atmp_368900 = (LOC15 - 1);
					res_368903 = ((NI) 0);
					{
						while (1) {
							if (!(res_368903 <= HEX3Atmp_368900)) goto LA17;
							i_368807 = res_368903;
							track_366843(tracked, (*branch).kindU.S6.sons->data[i_368807]);
							res_368903 += ((NI) 1);
						} LA17: ;
					}
				}
				{
					Tnode225809* LOC20;
					NIM_BOOL LOC21;
					LOC20 = 0;
					LOC20 = lastson_228406(branch);
					LOC21 = 0;
					LOC21 = breaksblock_368609(LOC20);
					if (!!(LOC21)) goto LA22;
					tocover += ((NI) 1);
				}
				LA22: ;
				{
					NI i_368845;
					NI HEX3Atmp_368908;
					NI res_368911;
					i_368845 = 0;
					HEX3Atmp_368908 = 0;
					HEX3Atmp_368908 = (((*tracked).init ? (*tracked).init->Sup.len : 0) - 1);
					res_368911 = oldstate;
					{
						while (1) {
							if (!(res_368911 <= HEX3Atmp_368908)) goto LA26;
							i_368845 = res_368911;
							addtointersection_366082((&inter), (*tracked).init->data[i_368845]);
							res_368911 += ((NI) 1);
						} LA26: ;
					}
				}
				res_368918 += ((NI) 1);
			} LA9: ;
		}
	}
	(*tracked).init = (TY333608*) setLengthSeq(&((*tracked).init)->Sup, sizeof(NI), ((NI) (oldstate)));
	{
		NIM_BOOL LOC29;
		Tnode225809* LOC31;
		LOC29 = 0;
		LOC29 = !(stringcase);
		if (LOC29) goto LA30;
		LOC31 = 0;
		LOC31 = lastson_228406(n);
		LOC29 = ((*LOC31).kind == ((NU8) 88));
		LA30: ;
		if (!LOC29) goto LA32;
		{
			NI id_368875;
			NI count_368876;
			NI i_368925;
			NI L_368927;
			id_368875 = 0;
			count_368876 = 0;
			i_368925 = ((NI) 0);
			L_368927 = (inter ? inter->Sup.len : 0);
			{
				while (1) {
					if (!(i_368925 < L_368927)) goto LA36;
					id_368875 = inter->data[i_368925].Field0;
					count_368876 = inter->data[i_368925].Field1;
					{
						if (!(tocover <= count_368876)) goto LA39;
						(*tracked).init = (TY333608*) incrSeqV2(&((*tracked).init)->Sup, sizeof(NI));
						(*tracked).init->data[(*tracked).init->Sup.len] = id_368875;
						++(*tracked).init->Sup.len;
					}
					LA39: ;
					i_368925 += ((NI) 1);
				} LA36: ;
			}
		}
	}
	LA32: ;
	(*tracked).guards = (Tnodeseq225803*) setLengthSeq(&((*tracked).guards)->Sup, sizeof(Tnode225809*), ((NI) (oldfacts)));
}

N_NIMCALL(void, trackif_368970)(Teffects365008* tracked, Tnode225809* n) {
	NI oldfacts;
	NI oldstate;
	TY259854* inter;
	NI tocover;
	track_366843(tracked, (*(*n).kindU.S6.sons->data[((NI) 0)]).kindU.S6.sons->data[((NI) 0)]);
	oldfacts = ((*tracked).guards ? (*tracked).guards->Sup.len : 0);
	addfact_358392((&(*tracked).guards), (*(*n).kindU.S6.sons->data[((NI) 0)]).kindU.S6.sons->data[((NI) 0)]);
	oldstate = ((*tracked).init ? (*tracked).init->Sup.len : 0);
	inter = (TY259854*) newSeq((&NTI259854), 0);
	tocover = ((NI) 0);
	track_366843(tracked, (*(*n).kindU.S6.sons->data[((NI) 0)]).kindU.S6.sons->data[((NI) 1)]);
	{
		NIM_BOOL LOC3;
		LOC3 = 0;
		LOC3 = breaksblock_368609((*(*n).kindU.S6.sons->data[((NI) 0)]).kindU.S6.sons->data[((NI) 1)]);
		if (!!(LOC3)) goto LA4;
		tocover += ((NI) 1);
	}
	LA4: ;
	{
		NI i_369054;
		NI HEX3Atmp_369218;
		NI res_369221;
		i_369054 = 0;
		HEX3Atmp_369218 = 0;
		HEX3Atmp_369218 = (((*tracked).init ? (*tracked).init->Sup.len : 0) - 1);
		res_369221 = oldstate;
		{
			while (1) {
				if (!(res_369221 <= HEX3Atmp_369218)) goto LA8;
				i_369054 = res_369221;
				addtointersection_366082((&inter), (*tracked).init->data[i_369054]);
				res_369221 += ((NI) 1);
			} LA8: ;
		}
	}
	{
		NI i_369075;
		NI HEX3Atmp_369250;
		NI LOC10;
		NI res_369253;
		i_369075 = 0;
		HEX3Atmp_369250 = 0;
		LOC10 = 0;
		LOC10 = len_226098(n);
		HEX3Atmp_369250 = (LOC10 - 1);
		res_369253 = ((NI) 1);
		{
			while (1) {
				Tnode225809* branch;
				if (!(res_369253 <= HEX3Atmp_369250)) goto LA12;
				i_369075 = res_369253;
				branch = (*n).kindU.S6.sons->data[i_369075];
				(*tracked).guards = (Tnodeseq225803*) setLengthSeq(&((*tracked).guards)->Sup, sizeof(Tnode225809*), ((NI) (oldfacts)));
				{
					NI j_369098;
					NI HEX3Atmp_369227;
					NI res_369230;
					j_369098 = 0;
					HEX3Atmp_369227 = 0;
					HEX3Atmp_369227 = (NI)(i_369075 - ((NI) 1));
					res_369230 = ((NI) 0);
					{
						while (1) {
							if (!(res_369230 <= HEX3Atmp_369227)) goto LA15;
							j_369098 = res_369230;
							addfactneg_358426((&(*tracked).guards), (*(*n).kindU.S6.sons->data[j_369098]).kindU.S6.sons->data[((NI) 0)]);
							res_369230 += ((NI) 1);
						} LA15: ;
					}
				}
				{
					NI LOC18;
					LOC18 = 0;
					LOC18 = len_226098(branch);
					if (!(((NI) 1) < LOC18)) goto LA19;
					addfact_358392((&(*tracked).guards), (*branch).kindU.S6.sons->data[((NI) 0)]);
				}
				LA19: ;
				(*tracked).init = (TY333608*) setLengthSeq(&((*tracked).init)->Sup, sizeof(NI), ((NI) (oldstate)));
				{
					NI i_369134;
					NI HEX3Atmp_369235;
					NI LOC22;
					NI res_369238;
					i_369134 = 0;
					HEX3Atmp_369235 = 0;
					LOC22 = 0;
					LOC22 = len_226098(branch);
					HEX3Atmp_369235 = (LOC22 - 1);
					res_369238 = ((NI) 0);
					{
						while (1) {
							if (!(res_369238 <= HEX3Atmp_369235)) goto LA24;
							i_369134 = res_369238;
							track_366843(tracked, (*branch).kindU.S6.sons->data[i_369134]);
							res_369238 += ((NI) 1);
						} LA24: ;
					}
				}
				{
					Tnode225809* LOC27;
					NIM_BOOL LOC28;
					LOC27 = 0;
					LOC27 = lastson_228406(branch);
					LOC28 = 0;
					LOC28 = breaksblock_368609(LOC27);
					if (!!(LOC28)) goto LA29;
					tocover += ((NI) 1);
				}
				LA29: ;
				{
					NI i_369172;
					NI HEX3Atmp_369243;
					NI res_369246;
					i_369172 = 0;
					HEX3Atmp_369243 = 0;
					HEX3Atmp_369243 = (((*tracked).init ? (*tracked).init->Sup.len : 0) - 1);
					res_369246 = oldstate;
					{
						while (1) {
							if (!(res_369246 <= HEX3Atmp_369243)) goto LA33;
							i_369172 = res_369246;
							addtointersection_366082((&inter), (*tracked).init->data[i_369172]);
							res_369246 += ((NI) 1);
						} LA33: ;
					}
				}
				res_369253 += ((NI) 1);
			} LA12: ;
		}
	}
	(*tracked).init = (TY333608*) setLengthSeq(&((*tracked).init)->Sup, sizeof(NI), ((NI) (oldstate)));
	{
		Tnode225809* LOC36;
		NI LOC37;
		LOC36 = 0;
		LOC36 = lastson_228406(n);
		LOC37 = 0;
		LOC37 = len_226098(LOC36);
		if (!(LOC37 == ((NI) 1))) goto LA38;
		{
			NI id_369194;
			NI count_369195;
			NI i_369260;
			NI L_369262;
			id_369194 = 0;
			count_369195 = 0;
			i_369260 = ((NI) 0);
			L_369262 = (inter ? inter->Sup.len : 0);
			{
				while (1) {
					if (!(i_369260 < L_369262)) goto LA42;
					id_369194 = inter->data[i_369260].Field0;
					count_369195 = inter->data[i_369260].Field1;
					{
						if (!(tocover <= count_369195)) goto LA45;
						(*tracked).init = (TY333608*) incrSeqV2(&((*tracked).init)->Sup, sizeof(NI));
						(*tracked).init->data[(*tracked).init->Sup.len] = id_369194;
						++(*tracked).init->Sup.len;
					}
					LA45: ;
					i_369260 += ((NI) 1);
				} LA42: ;
			}
		}
	}
	LA38: ;
	(*tracked).guards = (Tnodeseq225803*) setLengthSeq(&((*tracked).guards)->Sup, sizeof(Tnode225809*), ((NI) (oldfacts)));
}

N_NIMCALL(void, trackblock_369323)(Teffects365008* tracked, Tnode225809* n) {
	{
		NI oldstate;
		if (!((*n).kind == ((NU8) 115) || (*n).kind == ((NU8) 126))) goto LA3;
		oldstate = ((NI) -1);
		{
			NI i_369358;
			NI HEX3Atmp_369380;
			NI LOC6;
			NI res_369383;
			i_369358 = 0;
			HEX3Atmp_369380 = 0;
			LOC6 = 0;
			LOC6 = len_226098(n);
			HEX3Atmp_369380 = (LOC6 - 1);
			res_369383 = ((NI) 0);
			{
				while (1) {
					if (!(res_369383 <= HEX3Atmp_369380)) goto LA8;
					i_369358 = res_369383;
					{
						NIM_BOOL LOC11;
						LOC11 = 0;
						LOC11 = hassubnodewith_230439((*n).kindU.S6.sons->data[i_369358], ((NU8) 110));
						if (!LOC11) goto LA12;
						{
							if (!(oldstate < ((NI) 0))) goto LA16;
							oldstate = ((*tracked).init ? (*tracked).init->Sup.len : 0);
						}
						LA16: ;
					}
					LA12: ;
					track_366843(tracked, (*n).kindU.S6.sons->data[i_369358]);
					res_369383 += ((NI) 1);
				} LA8: ;
			}
		}
		{
			if (!(((NI) 0) < oldstate)) goto LA20;
			(*tracked).init = (TY333608*) setLengthSeq(&((*tracked).init)->Sup, sizeof(NI), ((NI) (oldstate)));
		}
		LA20: ;
	}
	goto LA1;
	LA3: ;
	{
		track_366843(tracked, n);
	}
	LA1: ;
}

N_NIMCALL(NIM_BOOL, istrue_369402)(Tnode225809* 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) 20));
	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_365114)(Ttype225847* t_365116) {
	NI16 result;
	Ttype225847* t;
	result = 0;
	t = t_365116;
	{
		NIM_BOOL LOC3;
		NI LOC5;
		LOC3 = 0;
		LOC3 = ((*t).kind == ((NU8) 11));
		if (!(LOC3)) goto LA4;
		LOC5 = 0;
		LOC5 = len_228369(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_365167)(Teffects365008* a, Tnode225809* pragma) {
	NI16 firstll;
{	{
		if (!!(((*pragma).kind == ((NU8) 34)))) goto LA3;
		localerror_196128((*pragma).info, ((NU16) 4), ((NimStringDesc*) &TMP3488));
		goto BeforeRet;
	}
	LA3: ;
	firstll = ((NI16) -1);
	{
		Tnode225809* x_365181;
		Tnode225809* HEX3Atmp_365200;
		x_365181 = 0;
		HEX3Atmp_365200 = 0;
		HEX3Atmp_365200 = HEX5BHEX5D_226244(pragma, ((NI) 1));
		{
			NI i_365204;
			NI HEX3Atmp_365206;
			NI LOC7;
			NI res_365208;
			i_365204 = 0;
			HEX3Atmp_365206 = 0;
			LOC7 = 0;
			LOC7 = len_226098(HEX3Atmp_365200);
			HEX3Atmp_365206 = (LOC7 - 1);
			res_365208 = ((NI) 0);
			{
				while (1) {
					NI16 thisll;
					if (!(res_365208 <= HEX3Atmp_365206)) goto LA9;
					i_365204 = res_365208;
					x_365181 = (*HEX3Atmp_365200).kindU.S6.sons->data[i_365204];
					thisll = getlocklevel_365114((*x_365181).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_228096(thisll);
							LOC20 = rawNewString(LOC21->Sup.len + 20);
appendString(LOC20, ((NimStringDesc*) &TMP3489));
appendString(LOC20, LOC21);
							localerror_196139((*x_365181).info, LOC20);
						}
						goto LA14;
						LA18: ;
						{
							if (!(firstll < ((NI16) 0))) goto LA23;
							firstll = thisll;
						}
						goto LA14;
						LA23: ;
						{
							if (!!((firstll == thisll))) goto LA26;
							localerror_196128((*x_365181).info, ((NU16) 4), ((NimStringDesc*) &TMP3490));
						}
						goto LA14;
						LA26: ;
						LA14: ;
						(*a).maxlocklevel = (((*a).maxlocklevel >= firstll) ? (*a).maxlocklevel : firstll);
					}
					LA12: ;
					(*a).locked = (Tnodeseq225803*) incrSeqV2(&((*a).locked)->Sup, sizeof(Tnode225809*));
					asgnRefNoCycle((void**) (&(*a).locked->data[(*a).locked->Sup.len]), x_365181);
					++(*a).locked->Sup.len;
					res_365208 += ((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_196128((*pragma).info, ((NU16) 4), ((NimStringDesc*) &TMP3491));
		}
		LA38: ;
		(*a).currlocklevel = firstll;
	}
	LA32: ;
	}BeforeRet: ;
}

N_NIMCALL(void, track_366843)(Teffects365008* tracked, Tnode225809* n) {
	switch ((*n).kind) {
	case ((NU8) 3):
	{
		usevar_365844(tracked, n);
	}
	break;
	case ((NU8) 108):
	{
		(*(*n).kindU.S6.sons->data[((NI) 0)]).info = (*n).info;
		addeffect_366300(tracked, (*n).kindU.S6.sons->data[((NI) 0)], NIM_FALSE);
		{
			NI i_369531;
			NI HEX3Atmp_370070;
			NI LOC4;
			NI res_370073;
			i_369531 = 0;
			HEX3Atmp_370070 = 0;
			LOC4 = 0;
			LOC4 = safelen_226126(n);
			HEX3Atmp_370070 = (LOC4 - 1);
			res_370073 = ((NI) 0);
			{
				while (1) {
					if (!(res_370073 <= HEX3Atmp_370070)) goto LA6;
					i_369531 = res_370073;
					track_366843(tracked, (*n).kindU.S6.sons->data[i_369531]);
					res_370073 += ((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):
	{
		Tnode225809* a;
		Ttype225847* op;
		a = (*n).kindU.S6.sons->data[((NI) 0)];
		op = (*a).typ;
		{
			NIM_BOOL LOC10;
			NIM_BOOL LOC11;
			Tnode225809* 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_368161((*a).kindU.S4.sym);
				mergelocklevels_368211(tracked, n, LOC24);
			}
			goto LA16;
			LA18: ;
			{
				mergelocklevels_368211(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_368226(tracked, n, (*a).kindU.S4.sym);
			}
			goto LA26;
			LA30: ;
			{
				NI LOC33;
				LOC33 = 0;
				LOC33 = len_226098(effectlist);
				if (!(LOC33 == ((NI) 0))) goto LA34;
				{
					NIM_BOOL LOC38;
					LOC38 = 0;
					LOC38 = isforwardedproc_367579(a);
					if (!LOC38) goto LA39;
					propagateeffects_368226(tracked, n, (*a).kindU.S4.sym);
				}
				goto LA36;
				LA39: ;
				{
					NIM_BOOL LOC42;
					LOC42 = 0;
					LOC42 = isindirectcall_367513(a, (*tracked).owner);
					if (!LOC42) goto LA43;
					assumetheworst_368391(tracked, n, op);
				}
				goto LA36;
				LA43: ;
				LA36: ;
			}
			goto LA26;
			LA34: ;
			{
				mergeeffects_366515(tracked, (*effectlist).kindU.S6.sons->data[((NI) 0)], n);
				mergetags_366571(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_368130(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;
						warnaboutgcunsafe_365693(n);
						markgcunsafe_365723(tracked, a);
					}
					LA57: ;
				}
				LA51: ;
			}
			LA26: ;
		}
		LA14: ;
		{
			NI i_369682;
			NI HEX3Atmp_370078;
			NI LOC60;
			NI res_370081;
			i_369682 = 0;
			HEX3Atmp_370078 = 0;
			LOC60 = 0;
			LOC60 = len_226098(n);
			HEX3Atmp_370078 = (LOC60 - 1);
			res_370081 = ((NI) 1);
			{
				while (1) {
					Ttype225847* LOC63;
					if (!(res_370081 <= HEX3Atmp_370078)) goto LA62;
					i_369682 = res_370081;
					LOC63 = 0;
					LOC63 = paramtype_369443(op, i_369682);
					trackoperand_368446(tracked, (*n).kindU.S6.sons->data[i_369682], LOC63);
					res_370081 += ((NI) 1);
				} LA62: ;
			}
		}
		{
			NIM_BOOL LOC66;
			LOC66 = 0;
			LOC66 = ((*a).kind == ((NU8) 3));
			if (!(LOC66)) goto LA67;
			LOC66 = ((*(*a).kindU.S4.sym).magic == ((NU8) 29) || (*(*a).kindU.S4.sym).magic == ((NU8) 30) || (*(*a).kindU.S4.sym).magic == ((NU8) 31));
			LA67: ;
			if (!LOC66) goto LA68;
			initvarvianew_365646(tracked, (*n).kindU.S6.sons->data[((NI) 1)]);
		}
		LA68: ;
		{
			NI i_369725;
			NI HEX3Atmp_370086;
			NI LOC71;
			NI res_370089;
			i_369725 = 0;
			HEX3Atmp_370086 = 0;
			LOC71 = 0;
			LOC71 = safelen_226126(n);
			HEX3Atmp_370086 = (LOC71 - 1);
			res_370089 = ((NI) 0);
			{
				while (1) {
					if (!(res_370089 <= HEX3Atmp_370086)) goto LA73;
					i_369725 = res_370089;
					track_366843(tracked, (*n).kindU.S6.sons->data[i_369725]);
					res_370089 += ((NI) 1);
				} LA73: ;
			}
		}
	}
	break;
	case ((NU8) 45):
	{
		guarddotaccess_365287(tracked, n);
		{
			NI i_369745;
			NI HEX3Atmp_370094;
			NI LOC76;
			NI res_370097;
			i_369745 = 0;
			HEX3Atmp_370094 = 0;
			LOC76 = 0;
			LOC76 = len_226098(n);
			HEX3Atmp_370094 = (LOC76 - 1);
			res_370097 = ((NI) 0);
			{
				while (1) {
					if (!(res_370097 <= HEX3Atmp_370094)) goto LA78;
					i_369745 = res_370097;
					track_366843(tracked, (*n).kindU.S6.sons->data[i_369745]);
					res_370097 += ((NI) 1);
				} LA78: ;
			}
		}
	}
	break;
	case ((NU8) 46):
	{
		track_366843(tracked, (*n).kindU.S6.sons->data[((NI) 0)]);
		{
			if (!((gnotes_191398 &(IL64(1)<<(((((NU16) 258)- 237))&IL64(63))))!=0)) goto LA82;
			checkfieldaccess_361409((*tracked).guards, n);
		}
		LA82: ;
	}
	break;
	case ((NU8) 106):
	{
		tracktrystmt_366850(tracked, n);
	}
	break;
	case ((NU8) 90):
	{
		trackpragmastmt_367610(tracked, n);
	}
	break;
	case ((NU8) 73):
	case ((NU8) 74):
	{
		track_366843(tracked, (*n).kindU.S6.sons->data[((NI) 1)]);
		initvar_365515(tracked, (*n).kindU.S6.sons->data[((NI) 0)], NIM_TRUE);
		invalidatefacts_358659((&(*tracked).guards), (*n).kindU.S6.sons->data[((NI) 0)]);
		track_366843(tracked, (*n).kindU.S6.sons->data[((NI) 0)]);
		addasgnfact_361086((&(*tracked).guards), (*n).kindU.S6.sons->data[((NI) 0)], (*n).kindU.S6.sons->data[((NI) 1)]);
		notnilcheck_368292(tracked, (*n).kindU.S6.sons->data[((NI) 1)], (*(*n).kindU.S6.sons->data[((NI) 0)]).typ);
	}
	break;
	case ((NU8) 99):
	case ((NU8) 100):
	{
		{
			Tnode225809* child_369801;
			child_369801 = 0;
			{
				NI i_370113;
				NI HEX3Atmp_370115;
				NI LOC90;
				NI res_370117;
				i_370113 = 0;
				HEX3Atmp_370115 = 0;
				LOC90 = 0;
				LOC90 = len_226098(n);
				HEX3Atmp_370115 = (LOC90 - 1);
				res_370117 = ((NI) 0);
				{
					while (1) {
						Tnode225809* last;
						if (!(res_370117 <= HEX3Atmp_370115)) goto LA92;
						i_370113 = res_370117;
						child_369801 = (*n).kindU.S6.sons->data[i_370113];
						last = lastson_228406(child_369801);
						{
							if (!!(((*last).kind == ((NU8) 1)))) goto LA95;
							track_366843(tracked, last);
						}
						LA95: ;
						{
							NIM_BOOL LOC99;
							LOC99 = 0;
							LOC99 = ((*child_369801).kind == ((NU8) 35));
							if (!(LOC99)) goto LA100;
							LOC99 = !(((*last).kind == ((NU8) 1)));
							LA100: ;
							if (!LOC99) goto LA101;
							{
								NI i_369841;
								NI HEX3Atmp_370103;
								NI LOC104;
								NI res_370106;
								i_369841 = 0;
								HEX3Atmp_370103 = 0;
								LOC104 = 0;
								LOC104 = len_226098(child_369801);
								HEX3Atmp_370103 = (NI)(LOC104 - ((NI) 3));
								res_370106 = ((NI) 0);
								{
									while (1) {
										if (!(res_370106 <= HEX3Atmp_370103)) goto LA106;
										i_369841 = res_370106;
										initvar_365515(tracked, (*child_369801).kindU.S6.sons->data[i_369841], NIM_FALSE);
										addasgnfact_361086((&(*tracked).guards), (*child_369801).kindU.S6.sons->data[i_369841], last);
										notnilcheck_368292(tracked, last, (*(*child_369801).kindU.S6.sons->data[i_369841]).typ);
										res_370106 += ((NI) 1);
									} LA106: ;
								}
							}
						}
						LA101: ;
						res_370117 += ((NI) 1);
					} LA92: ;
				}
			}
		}
	}
	break;
	case ((NU8) 97):
	{
		trackcase_368666(tracked, n);
	}
	break;
	case ((NU8) 93):
	case ((NU8) 92):
	case ((NU8) 48):
	{
		trackif_368970(tracked, n);
	}
	break;
	case ((NU8) 112):
	case ((NU8) 127):
	{
		trackblock_369323(tracked, (*n).kindU.S6.sons->data[((NI) 1)]);
	}
	break;
	case ((NU8) 96):
	{
		track_366843(tracked, (*n).kindU.S6.sons->data[((NI) 0)]);
		{
			NIM_BOOL LOC113;
			LOC113 = 0;
			LOC113 = istrue_369402((*n).kindU.S6.sons->data[((NI) 0)]);
			if (!LOC113) goto LA114;
			trackblock_369323(tracked, (*n).kindU.S6.sons->data[((NI) 1)]);
		}
		goto LA111;
		LA114: ;
		{
			NI oldstate;
			NI oldfacts;
			oldstate = ((*tracked).init ? (*tracked).init->Sup.len : 0);
			oldfacts = ((*tracked).guards ? (*tracked).guards->Sup.len : 0);
			addfact_358392((&(*tracked).guards), (*n).kindU.S6.sons->data[((NI) 0)]);
			track_366843(tracked, (*n).kindU.S6.sons->data[((NI) 1)]);
			(*tracked).init = (TY333608*) setLengthSeq(&((*tracked).init)->Sup, sizeof(NI), ((NI) (oldstate)));
			(*tracked).guards = (Tnodeseq225803*) setLengthSeq(&((*tracked).guards)->Sup, sizeof(Tnode225809*), ((NI) (oldfacts)));
		}
		LA111: ;
	}
	break;
	case ((NU8) 94):
	case ((NU8) 95):
	{
		NI oldstate;
		oldstate = ((*tracked).init ? (*tracked).init->Sup.len : 0);
		{
			NI i_369918;
			NI HEX3Atmp_370121;
			NI LOC119;
			NI res_370124;
			i_369918 = 0;
			HEX3Atmp_370121 = 0;
			LOC119 = 0;
			LOC119 = len_226098(n);
			HEX3Atmp_370121 = (LOC119 - 1);
			res_370124 = ((NI) 0);
			{
				while (1) {
					if (!(res_370124 <= HEX3Atmp_370121)) goto LA121;
					i_369918 = res_370124;
					track_366843(tracked, (*n).kindU.S6.sons->data[i_369918]);
					res_370124 += ((NI) 1);
				} LA121: ;
			}
		}
		(*tracked).init = (TY333608*) setLengthSeq(&((*tracked).init)->Sup, sizeof(NI), ((NI) (oldstate)));
	}
	break;
	case ((NU8) 38):
	{
		NI oldfacts;
		track_366843(tracked, (*n).kindU.S6.sons->data[((NI) 0)]);
		oldfacts = ((*tracked).guards ? (*tracked).guards->Sup.len : 0);
		{
			NI i_369958;
			NI HEX3Atmp_370129;
			NI LOC124;
			NI res_370132;
			i_369958 = 0;
			HEX3Atmp_370129 = 0;
			LOC124 = 0;
			LOC124 = len_226098(n);
			HEX3Atmp_370129 = (LOC124 - 1);
			res_370132 = ((NI) 1);
			{
				while (1) {
					Tnode225809* x;
					if (!(res_370132 <= HEX3Atmp_370129)) goto LA126;
					i_369958 = res_370132;
					x = (*n).kindU.S6.sons->data[i_369958];
					track_366843(tracked, x);
					{
						NIM_BOOL LOC129;
						LOC129 = 0;
						LOC129 = ((*(*x).kindU.S6.sons->data[((NI) 0)]).kind == ((NU8) 3));
						if (!(LOC129)) goto LA130;
						LOC129 = (((*(*(*x).kindU.S6.sons->data[((NI) 0)]).kindU.S4.sym).flags &(1<<((((NU8) 18))&31)))!=0);
						LA130: ;
						if (!LOC129) goto LA131;
						adddiscriminantfact_361059((&(*tracked).guards), x);
					}
					LA131: ;
					res_370132 += ((NI) 1);
				} LA126: ;
			}
		}
		(*tracked).guards = (Tnodeseq225803*) setLengthSeq(&((*tracked).guards)->Sup, sizeof(Tnode225809*), ((NI) (oldfacts)));
	}
	break;
	case ((NU8) 91):
	{
		Tnode225809* pragmalist;
		NI oldlocked;
		NI16 oldlocklevel;
		Tnode225809* LOC143;
		pragmalist = (*n).kindU.S6.sons->data[((NI) 0)];
		oldlocked = ((*tracked).locked ? (*tracked).locked->Sup.len : 0);
		oldlocklevel = (*tracked).currlocklevel;
		{
			NI i_370026;
			NI HEX3Atmp_370137;
			NI LOC135;
			NI res_370140;
			i_370026 = 0;
			HEX3Atmp_370137 = 0;
			LOC135 = 0;
			LOC135 = len_226098(pragmalist);
			HEX3Atmp_370137 = (LOC135 - 1);
			res_370140 = ((NI) 0);
			{
				while (1) {
					if (!(res_370140 <= HEX3Atmp_370137)) goto LA137;
					i_370026 = res_370140;
					{
						NU16 LOC140;
						LOC140 = 0;
						LOC140 = whichpragma_254687((*pragmalist).kindU.S6.sons->data[i_370026]);
						if (!(LOC140 == ((NU16) 196))) goto LA141;
						locklocations_365167(tracked, (*pragmalist).kindU.S6.sons->data[i_370026]);
					}
					LA141: ;
					res_370140 += ((NI) 1);
				} LA137: ;
			}
		}
		LOC143 = 0;
		LOC143 = lastson_228406(n);
		track_366843(tracked, LOC143);
		(*tracked).locked = (Tnodeseq225803*) setLengthSeq(&((*tracked).locked)->Sup, sizeof(Tnode225809*), ((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_370067;
			NI HEX3Atmp_370145;
			NI LOC147;
			NI res_370148;
			i_370067 = 0;
			HEX3Atmp_370145 = 0;
			LOC147 = 0;
			LOC147 = safelen_226126(n);
			HEX3Atmp_370145 = (LOC147 - 1);
			res_370148 = ((NI) 0);
			{
				while (1) {
					if (!(res_370148 <= HEX3Atmp_370145)) goto LA149;
					i_370067 = res_370148;
					track_366843(tracked, (*n).kindU.S6.sons->data[i_370067]);
					res_370148 += ((NI) 1);
				} LA149: ;
			}
		}
	}
	break;
	}
}

static N_INLINE(NIM_BOOL, isemptytype_230932)(Ttype225847* 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_365755)(Tsym225841* s, NIM_BOOL onlywarning, Intset222056* cyclecheck) {
	Tsym225841* 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_222898(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: ;
		{
			TY193306 LOC17;
			NimStringDesc* LOC18;
			if (!((768 &(1<<(((*u).kind)&31)))!=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*) &TMP3493), LOC17, 2);
			message_196161((*s).info, msgkind, LOC18);
		}
		goto LA13;
		LA15: ;
		{
			TY193306 LOC22;
			NimStringDesc* LOC23;
			if (!((520192 &(1<<(((*u).kind)&31)))!=0)) goto LA20;
			listgcunsafety_365755(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*) &TMP3494), LOC22, 2);
			message_196161((*s).info, msgkind, LOC23);
		}
		goto LA13;
		LA20: ;
		{
			NimStringDesc* LOC30;
			{
				NimStringDesc* LOC29;
				if (!!(((*u).kind == ((NU8) 0)))) goto LA27;
				LOC29 = 0;
				LOC29 = HEX24_196279(TMP3495);
				internalerror_196191(LOC29);
			}
			LA27: ;
			LOC30 = 0;
			LOC30 = nsuFormatSingleElem(((NimStringDesc*) &TMP3496), (*(*s).name).s);
			message_196161((*u).info, msgkind, LOC30);
		}
		LA13: ;
	}
	LA6: ;
}

N_NIMCALL(void, listgcunsafety_365832)(Tsym225841* s, NIM_BOOL onlywarning) {
	Intset222056 cyclecheck;
	memset((void*)(&cyclecheck), 0, sizeof(cyclecheck));
	chckNil((void*)(&cyclecheck));
	memset((void*)(&cyclecheck), 0, sizeof(cyclecheck));
	initintset_222927((&cyclecheck));
	listgcunsafety_365755(s, onlywarning, (&cyclecheck));
}

N_NIMCALL(void, trackproc_370783)(Tsym225841* s, Tnode225809* body) {
	Tnode225809* effects;
	Teffects365008 t;
	Tnode225809* p;
	Tnode225809* raisesspec;
	Tnode225809* tagsspec;
{	effects = (*(*(*s).typ).n).kindU.S6.sons->data[((NI) 0)];
	{
		NimStringDesc* LOC5;
		if (!!(((*effects).kind == ((NU8) 152)))) goto LA3;
		LOC5 = 0;
		LOC5 = HEX24_196279(TMP3465);
		internalerror_196191(LOC5);
	}
	LA3: ;
	{
		if (!(((*s).flags &(1<<((((NU8) 4))&31)))!=0)) goto LA8;
		goto BeforeRet;
	}
	LA8: ;
	{
		NI LOC12;
		LOC12 = 0;
		LOC12 = len_226098(effects);
		if (!(LOC12 == ((NI) 4))) goto LA13;
		goto BeforeRet;
	}
	LA13: ;
	memset((void*)(&t), 0, sizeof(t));
	initeffects_370704(effects, s, (&t));
	track_366843((&t), body);
	{
		NIM_BOOL LOC17;
		NIM_BOOL LOC18;
		NIM_BOOL LOC19;
		Tsym225841* res;
		LOC17 = 0;
		LOC18 = 0;
		LOC19 = 0;
		LOC19 = isemptytype_230932((*(*s).typ).sons->data[((NI) 0)]);
		LOC18 = !(LOC19);
		if (!(LOC18)) goto LA20;
		LOC18 = (((*(*(*s).typ).sons->data[((NI) 0)]).flags &(1<<((((NU8) 17))&31)))!=0);
		LA20: ;
		LOC17 = LOC18;
		if (!(LOC17)) goto LA21;
		LOC17 = ((77824 &(1<<(((*s).kind)&31)))!=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_365853(t.init->data, t.init->Sup.len, (*res).Sup.id);
			if (!!(LOC26)) goto LA27;
			message_196161((*body).info, ((NU16) 257), ((NimStringDesc*) &TMP3492));
		}
		LA27: ;
	}
	LA22: ;
	p = (*(*s).ast).kindU.S6.sons->data[((NI) 4)];
	raisesspec = effectspec_367661(p, ((NU16) 156));
	{
		if (!!(raisesspec == 0)) goto LA31;
		checkraisesspec_370278(raisesspec, t.exc, ((NimStringDesc*) &TMP3413), NIM_TRUE, subtyperelation_370251);
		asgnRefNoCycle((void**) (&(*effects).kindU.S6.sons->data[((NI) 0)]), raisesspec);
	}
	LA31: ;
	tagsspec = effectspec_367661(p, ((NU16) 161));
	{
		if (!!(tagsspec == 0)) goto LA35;
		checkraisesspec_370278(tagsspec, t.tags, ((NimStringDesc*) &TMP3417), NIM_FALSE, subtyperelation_370251);
		asgnRefNoCycle((void**) (&(*effects).kindU.S6.sons->data[((NI) 3)]), tagsspec);
	}
	LA35: ;
	{
		NIM_BOOL LOC39;
		LOC39 = 0;
		LOC39 = (((*s).flags &(1<<((((NU8) 22))&31)))!=0);
		if (!(LOC39)) goto LA40;
		LOC39 = t.gcunsafe;
		LA40: ;
		if (!LOC39) goto LA41;
		{
			NIM_BOOL LOC45;
			LOC45 = 0;
			LOC45 = ((gglobaloptions_167132 &(1<<((((NU8) 22))&31)))!=0);
			if (!(LOC45)) goto LA46;
			LOC45 = ((gglobaloptions_167132 &(1<<((((NU8) 24))&31)))!=0);
			LA46: ;
			if (!LOC45) goto LA47;
			listgcunsafety_365832(s, NIM_FALSE);
		}
		goto LA43;
		LA47: ;
		{
			listgcunsafety_365832(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: ;
	{
		TY193306 LOC61;
		NimStringDesc* LOC62;
		if (!((*(*s).typ).locklevel < t.maxlocklevel)) goto LA59;
		memset((void*)LOC61, 0, sizeof(LOC61));
		LOC61[0] = HEX24_228096((*(*s).typ).locklevel);
		LOC61[1] = HEX24_228096(t.maxlocklevel);
		LOC62 = 0;
		LOC62 = nsuFormatOpenArray(((NimStringDesc*) &TMP3497), LOC61, 2);
		message_196161((*s).info, ((NU16) 265), LOC62);
	}
	goto LA54;
	LA59: ;
	LA54: ;
	}BeforeRet: ;
}

N_NIMCALL(void, seteffectsforproctype_370612)(Ttype225847* t, Tnode225809* n) {
	Tnode225809* effects;
	Tnode225809* raisesspec;
	Tnode225809* 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_196279(TMP3540);
		internalerror_196191(LOC7);
	}
	LA5: ;
	raisesspec = effectspec_367661(n, ((NU16) 156));
	tagsspec = effectspec_367661(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_226098(effects);
			if (!!((LOC16 == ((NI) 0)))) goto LA17;
			LOC19 = 0;
			LOC19 = HEX24_196279(TMP3541);
			internalerror_196191(LOC19);
		}
		LA17: ;
		if ((*effects).kindU.S6.sons) nimGCunrefNoCycle((*effects).kindU.S6.sons);
		(*effects).kindU.S6.sons = (Tnodeseq225803*) newSeqRC1((&NTI225803), ((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_371008)(Tsym225841* module, Tnode225809* n) {
	Tnode225809* effects;
	Tnodeseq225803* LOC5;
	Teffects365008 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 = (Tnodeseq225803*) newSeq((&NTI225803), 0);
	effects = newnode_227607(((NU8) 152), (*n).info, LOC5, NIM_NIL);
	memset((void*)(&t), 0, sizeof(t));
	initeffects_370704(effects, module, (&t));
	t.istoplevel = NIM_TRUE;
	track_366843((&t), n);
	}BeforeRet: ;
}

N_NIMCALL(Tnode225809*, documenteffect_367736)(Tnode225809* n, Tnode225809* x, NU16 effecttype, NI idx) {
	Tnode225809* result;
	Tnode225809* spec;
{	result = 0;
	spec = effectspec_367661(x, effecttype);
	{
		Tsym225841* s;
		Tnode225809* actual;
		Tnode225809* real;
		Tnode225809* effects;
		NI LOC10;
		Tnodeseq225803* LOC23;
		TY281106 LOC24;
		Tident198021* 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_226098(actual);
			if (!!((LOC7 == ((NI) 4)))) goto LA8;
			goto BeforeRet;
		}
		LA8: ;
		real = (*actual).kindU.S6.sons->data[idx];
		LOC10 = 0;
		LOC10 = len_226098(real);
		effects = newnodei_227407(((NU8) 41), (*n).info, LOC10);
		{
			NI i_367782;
			NI HEX3Atmp_367800;
			NI LOC12;
			NI res_367803;
			i_367782 = 0;
			HEX3Atmp_367800 = 0;
			LOC12 = 0;
			LOC12 = len_226098(real);
			HEX3Atmp_367800 = (LOC12 - 1);
			res_367803 = ((NI) 0);
			{
				while (1) {
					NimStringDesc* t;
					Tnode225809* LOC15;
					Tident198021* LOC21;
					Tnode225809* LOC22;
					if (!(res_367803 <= HEX3Atmp_367800)) goto LA14;
					i_367782 = res_367803;
					LOC15 = 0;
					LOC15 = HEX5BHEX5D_226244(real, i_367782);
					t = typetostring_255032((*LOC15).typ, ((NU8) 0));
					{
						NIM_BOOL LOC18;
						LOC18 = 0;
						LOC18 = nsuStartsWith(t, ((NimStringDesc*) &TMP5028));
						if (!LOC18) goto LA19;
						t = copyStr(t, ((NI) 4));
					}
					LA19: ;
					LOC21 = 0;
					LOC21 = getident_198463(t);
					asgnRefNoCycle((void**) (&(*effects).kindU.S6.sons->data[i_367782]), newidentnode_227313(LOC21, (*n).info));
					LOC22 = 0;
					LOC22 = HEX5BHEX5D_226244(real, i_367782);
					asgnRefNoCycle((void**) (&(*(*effects).kindU.S6.sons->data[i_367782]).typ), (*LOC22).typ);
					res_367803 += ((NI) 1);
				} LA14: ;
			}
		}
		LOC23 = 0;
		LOC23 = (Tnodeseq225803*) newSeq((&NTI225803), 2);
		memset((void*)LOC24, 0, sizeof(LOC24));
		LOC25 = 0;
		LOC25 = getident_198463(specialwords_206338[(effecttype)- 0]);
		LOC24[0] = newidentnode_227313(LOC25, (*n).info);
		LOC24[1] = effects;
		asgnRefNoCycle((void**) (&LOC23->data[0]), LOC24[0]);
		asgnRefNoCycle((void**) (&LOC23->data[1]), LOC24[1]);
		result = newnode_227607(((NU8) 34), (*n).info, LOC23, NIM_NIL);
	}
	LA3: ;
	}BeforeRet: ;
	return result;
}

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

N_NIMCALL(Tnode225809*, documentwriteeffect_367822)(Tnode225809* n, NU8 flag, NimStringDesc* pragmaname) {
	Tnode225809* result;
	Tsym225841* s;
	Tnode225809* params;
	Tnode225809* effects;
	result = 0;
	s = (*(*n).kindU.S6.sons->data[((NI) 0)]).kindU.S4.sym;
	params = (*(*s).typ).n;
	effects = newnodei_227351(((NU8) 41), (*n).info);
	{
		NI i_367861;
		Slice90370 HEX3Atmp_367899;
		NI LOC2;
		i_367861 = 0;
		memset((void*)(&HEX3Atmp_367899), 0, sizeof(HEX3Atmp_367899));
		LOC2 = 0;
		LOC2 = len_226098(params);
		HEX3Atmp_367899 = HEX2EHEX2E_105290(((NI) 1), (LOC2 - 1));
		{
			NI x_367903;
			NI HEX3Atmp_367905;
			NI HEX3Atmp_367907;
			NI res_367909;
			x_367903 = 0;
			HEX3Atmp_367905 = 0;
			HEX3Atmp_367907 = 0;
			HEX3Atmp_367905 = HEX3Atmp_367899.a;
			HEX3Atmp_367907 = HEX3Atmp_367899.b;
			res_367909 = HEX3Atmp_367905;
			{
				while (1) {
					if (!(res_367909 <= HEX3Atmp_367907)) goto LA5;
					x_367903 = res_367909;
					i_367861 = x_367903;
					{
						NIM_BOOL LOC8;
						Tnode225809* LOC9;
						Tnode225809* LOC11;
						Tnode225809* LOC14;
						LOC8 = 0;
						LOC9 = 0;
						LOC9 = HEX5BHEX5D_226244(params, i_367861);
						LOC8 = ((*LOC9).kind == ((NU8) 3));
						if (!(LOC8)) goto LA10;
						LOC11 = 0;
						LOC11 = HEX5BHEX5D_226244(params, i_367861);
						LOC8 = (((*(*LOC11).kindU.S4.sym).flags &(1<<((flag)&31)))!=0);
						LA10: ;
						if (!LOC8) goto LA12;
						LOC14 = 0;
						LOC14 = HEX5BHEX5D_226244(params, i_367861);
						add_226165(effects, LOC14);
					}
					LA12: ;
					res_367909 += ((NI) 1);
				} LA5: ;
			}
		}
	}
	{
		NI LOC17;
		Tnodeseq225803* LOC20;
		TY281106 LOC21;
		Tident198021* LOC22;
		LOC17 = 0;
		LOC17 = len_226098(effects);
		if (!(((NI) 0) < LOC17)) goto LA18;
		LOC20 = 0;
		LOC20 = (Tnodeseq225803*) newSeq((&NTI225803), 2);
		memset((void*)LOC21, 0, sizeof(LOC21));
		LOC22 = 0;
		LOC22 = getident_198463(pragmaname);
		LOC21[0] = newidentnode_227313(LOC22, (*n).info);
		LOC21[1] = effects;
		asgnRefNoCycle((void**) (&LOC20->data[0]), LOC21[0]);
		asgnRefNoCycle((void**) (&LOC20->data[1]), LOC21[1]);
		result = newnode_227607(((NU8) 34), (*n).info, LOC20, NIM_NIL);
	}
	LA18: ;
	return result;
}

N_NIMCALL(Tnode225809*, documentneweffect_367931)(Tnode225809* n) {
	Tnode225809* result;
	Tsym225841* s;
	result = 0;
	s = (*(*n).kindU.S6.sons->data[((NI) 0)]).kindU.S4.sym;
	{
		Tident198021* LOC5;
		if (!(((*(*s).typ).flags &(1<<((((NU8) 3))&31)))!=0)) goto LA3;
		LOC5 = 0;
		LOC5 = getident_198463(((NimStringDesc*) &TMP5030));
		result = newidentnode_227313(LOC5, (*n).info);
	}
	LA3: ;
	return result;
}

N_NIMCALL(void, documentraises_367955)(Tnode225809* n) {
	Tnode225809* pragmas;
	Tnode225809* p1;
	Tnode225809* p2;
	Tnode225809* p3;
	Tnode225809* p4;
	Tnode225809* 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_367736(n, pragmas, ((NU16) 156), ((NI) 0));
	p2 = documenteffect_367736(n, pragmas, ((NU16) 161), ((NI) 3));
	p3 = documentwriteeffect_367822(n, ((NU8) 26), ((NimStringDesc*) &TMP5029));
	p4 = documentneweffect_367931(n);
	p5 = documentwriteeffect_367822(n, ((NU8) 17), ((NimStringDesc*) &TMP5031));
	{
		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_227351(((NU8) 90), (*n).info));
		}
		LA19: ;
		{
			if (!!((p1 == NIM_NIL))) goto LA23;
			add_226165((*n).kindU.S6.sons->data[((NI) 4)], p1);
		}
		LA23: ;
		{
			if (!!((p2 == NIM_NIL))) goto LA27;
			add_226165((*n).kindU.S6.sons->data[((NI) 4)], p2);
		}
		LA27: ;
		{
			if (!!((p3 == NIM_NIL))) goto LA31;
			add_226165((*n).kindU.S6.sons->data[((NI) 4)], p3);
		}
		LA31: ;
		{
			if (!!((p4 == NIM_NIL))) goto LA35;
			add_226165((*n).kindU.S6.sons->data[((NI) 4)], p4);
		}
		LA35: ;
		{
			if (!!((p5 == NIM_NIL))) goto LA39;
			add_226165((*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) {
}

