/* 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 Tsym223841 Tsym223841;
typedef struct Tnode223809 Tnode223809;
typedef struct Tidobj196015 Tidobj196015;
typedef struct TNimObject TNimObject;
typedef struct TNimType TNimType;
typedef struct TNimNode TNimNode;
typedef struct Ttypeseq223843 Ttypeseq223843;
typedef struct Tscope223835 Tscope223835;
typedef struct TY223944 TY223944;
typedef struct Tstrtable223813 Tstrtable223813;
typedef struct Tsymseq223811 Tsymseq223811;
typedef struct Ttype223847 Ttype223847;
typedef struct Tident196021 Tident196021;
typedef struct Tlineinfo188352 Tlineinfo188352;
typedef struct Tloc223823 Tloc223823;
typedef struct Ropeobj174009 Ropeobj174009;
typedef struct Tlib223827 Tlib223827;
typedef struct NimStringDesc NimStringDesc;
typedef struct TGenericSeq TGenericSeq;
typedef struct Tnodeseq223803 Tnodeseq223803;
typedef struct Intset220056 Intset220056;
typedef struct Trunk220052 Trunk220052;
typedef struct Trunkseq220054 Trunkseq220054;
typedef struct TY90959 TY90959;
typedef struct Teffects363008 Teffects363008;
typedef struct TY331608 TY331608;
typedef struct Cell48947 Cell48947;
typedef struct Cellseq48963 Cellseq48963;
typedef struct Gcheap51018 Gcheap51018;
typedef struct Gcstack51016 Gcstack51016;
typedef struct Cellset48959 Cellset48959;
typedef struct Pagedesc48955 Pagedesc48955;
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 TY257854 TY257854;
typedef struct TY257855 TY257855;
typedef struct Slice90365 Slice90365;
typedef struct Tinstantiation223831 Tinstantiation223831;
typedef struct Tlistentry139022 Tlistentry139022;
typedef struct Basechunk30840 Basechunk30840;
typedef struct Freecell30832 Freecell30832;
typedef struct TY223932 TY223932;
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  Tidobj196015  {
  TNimObject Sup;
NI id;
};
struct  Tstrtable223813  {
NI counter;
Tsymseq223811* data;
};
struct  Tlineinfo188352  {
NI16 line;
NI16 col;
NI32 fileindex;
};
struct  Tloc223823  {
NU8 k;
NU8 s;
NU16 flags;
Ttype223847* t;
Ropeobj174009* r;
Ropeobj174009* heaproot;
};
struct  Tsym223841  {
  Tidobj196015 Sup;
NU8 kind;
union{
struct {Ttypeseq223843* typeinstcache;
Tscope223835* typscope;
} S1;
struct {TY223944* procinstcache;
Tsym223841* gcunsafetyreason;
} S2;
struct {TY223944* usedgenerics;
Tstrtable223813 tab;
} S3;
struct {Tsym223841* guard;
NI bitsize;
} S4;
} kindU;
NU8 magic;
Ttype223847* typ;
Tident196021* name;
Tlineinfo188352 info;
Tsym223841* owner;
NU32 flags;
Tnode223809* ast;
NU32 options;
NI position;
NI offset;
Tloc223823 loc;
Tlib223827* annex;
Tnode223809* constraint;
};
struct  Ttype223847  {
  Tidobj196015 Sup;
NU8 kind;
NU8 callconv;
NU32 flags;
Ttypeseq223843* sons;
Tnode223809* n;
Tsym223841* owner;
Tsym223841* sym;
Tsym223841* destructor;
Tsym223841* deepcopy;
Tsym223841* assignment;
NI64 size;
NI16 align;
NI16 locklevel;
Tloc223823 loc;
};
struct  TGenericSeq  {
NI len;
NI reserved;
};
struct  NimStringDesc  {
  TGenericSeq Sup;
NIM_CHAR data[SEQ_DECL_SIZE];
};
struct  Tnode223809  {
Ttype223847* typ;
Tlineinfo188352 info;
NU16 flags;
NU8 kind;
union{
struct {NI64 intval;
} S1;
struct {NF floatval;
} S2;
struct {NimStringDesc* strval;
} S3;
struct {Tsym223841* sym;
} S4;
struct {Tident196021* ident;
} S5;
struct {Tnodeseq223803* sons;
} S6;
} kindU;
NimStringDesc* comment;
};
typedef N_NIMCALL_PTR(NIM_BOOL, TY368284) (Tnode223809* a, Tnode223809* b);
struct  Intset220056  {
NI counter;
NI max;
Trunk220052* head;
Trunkseq220054* data;
};
struct  Tident196021  {
  Tidobj196015 Sup;
NimStringDesc* s;
Tident196021* next;
NI h;
};
typedef NimStringDesc* TY191306[2];
struct TY90959 {
NimStringDesc* Field0;
NI Field1;
};
struct  Teffects363008  {
Tnode223809* exc;
Tnode223809* tags;
NI bottom;
NI intrystmt;
Tsym223841* owner;
TY331608* init;
Tnodeseq223803* guards;
Tnodeseq223803* 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  Cell48947  {
NI refcount;
TNimType* typ;
};
struct  Cellseq48963  {
NI len;
NI cap;
Cell48947** d;
};
struct  Cellset48959  {
NI counter;
NI max;
Pagedesc48955* head;
Pagedesc48955** 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;
Cellseq48963 zct;
Cellseq48963 decstack;
Cellset48959 cycleroots;
Cellseq48963 tempstack;
NI recgclock;
Memregion30890 region;
Gcstat51014 stat;
};
typedef NU8 TY481044[20];
struct TY257855 {
NI Field0;
NI Field1;
};
typedef Tnode223809* TY279106[2];
typedef NimStringDesc* TY204342[261];
struct  Slice90365  {
NI a;
NI b;
};
struct  Tscope223835  {
NI depthlevel;
Tstrtable223813 symbols;
Tnodeseq223803* usingsyms;
Tscope223835* parent;
};
struct  Ropeobj174009  {
  TNimObject Sup;
Ropeobj174009* left;
Ropeobj174009* right;
NI length;
NimStringDesc* data;
};
struct  Tlistentry139022  {
  TNimObject Sup;
Tlistentry139022* prev;
Tlistentry139022* next;
};
struct  Tlib223827  {
  Tlistentry139022 Sup;
NU8 kind;
NIM_BOOL generated;
NIM_BOOL isoverriden;
Ropeobj174009* name;
Tnode223809* path;
};
typedef NI TY30821[16];
struct  Trunk220052  {
Trunk220052* next;
NI key;
TY30821 bits;
};
struct  Gcstack51016  {
Gcstack51016* prev;
Gcstack51016* next;
void* starts;
void* pos;
NI maxstacksize;
};
struct  Pagedesc48955  {
Pagedesc48955* 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  Tinstantiation223831  {
Tsym223841* sym;
Ttypeseq223843* concretetypes;
TY223932* usedby;
NI compilesid;
};
struct  Freecell30832  {
Freecell30832* next;
NI zerofield;
};
struct Tnodeseq223803 {
  TGenericSeq Sup;
  Tnode223809* data[SEQ_DECL_SIZE];
};
struct TY331608 {
  TGenericSeq Sup;
  NI data[SEQ_DECL_SIZE];
};
struct TY257854 {
  TGenericSeq Sup;
  TY257855 data[SEQ_DECL_SIZE];
};
struct Ttypeseq223843 {
  TGenericSeq Sup;
  Ttype223847* data[SEQ_DECL_SIZE];
};
struct TY223944 {
  TGenericSeq Sup;
  Tinstantiation223831* data[SEQ_DECL_SIZE];
};
struct Tsymseq223811 {
  TGenericSeq Sup;
  Tsym223841* data[SEQ_DECL_SIZE];
};
struct Trunkseq220054 {
  TGenericSeq Sup;
  Trunk220052* data[SEQ_DECL_SIZE];
};
struct TY223932 {
  TGenericSeq Sup;
  NI32 data[SEQ_DECL_SIZE];
};
static N_INLINE(NI, len_224098)(Tnode223809* n);
N_NIMCALL(Tnode223809*, effectspec_365661)(Tnode223809* n, NU16 effecttype);
N_NIMCALL(NI, sonslen_226387)(Tnode223809* n);
N_NIMCALL(NU16, whichpragma_252687)(Tnode223809* n);
N_NIMCALL(Tnode223809*, newnodei_225351)(NU8 kind, Tlineinfo188352 info);
N_NIMCALL(void, add_224165)(Tnode223809* father, Tnode223809* son);
N_NIMCALL(void, checkraisesspec_368278)(Tnode223809* spec, Tnode223809* real, NimStringDesc* msg, NIM_BOOL hints, TY368284 effectpredicate);
N_NIMCALL(void, initintset_220927)(Intset220056* Result);
N_NOINLINE(void, chckNil)(void* p);
static N_INLINE(Tnode223809*, HEX5BHEX5D_224244)(Tnode223809* n, NI i);
N_NIMCALL(void, incl_220856)(Intset220056* s, NI key);
N_NIMCALL(void, pushinfocontext_189581)(Tlineinfo188352 info);
N_NIMCALL(void, localerror_194128)(Tlineinfo188352 info, NU16 msg, NimStringDesc* arg);
static N_INLINE(void, appendString)(NimStringDesc* dest, NimStringDesc* src);
N_NIMCALL(NimStringDesc*, typetostring_253032)(Ttype223847* typ, NU8 prefer);
N_NIMCALL(NimStringDesc*, rawNewString)(NI space);
N_NIMCALL(void, popinfocontext_189600)(void);
N_NIMCALL(NIM_BOOL, contains_220829)(Intset220056 s, NI key);
N_NIMCALL(void, message_194161)(Tlineinfo188352 info, NU16 msg, NimStringDesc* arg);
N_NIMCALL(NimStringDesc*, rendertree_245059)(Tnode223809* n, NU8 renderflags);
N_NIMCALL(NIM_BOOL, subtyperelation_368251)(Tnode223809* spec, Tnode223809* real);
N_NIMCALL(NI, safeinheritancediff_262388)(Ttype223847* a, Ttype223847* b);
N_NIMCALL(Ttype223847*, exctype_364212)(Tnode223809* n);
N_NIMCALL(Ttype223847*, getebase_364191)(void);
N_NIMCALL(Tsym223841*, getcompilerproc_272809)(NimStringDesc* name);
N_NIMCALL(Ttype223847*, systypefromname_272179)(NimStringDesc* name);
N_NIMCALL(Ttype223847*, skiptypes_227167)(Ttype223847* t, NU64 kinds);
N_NIMCALL(void, localerror_194139)(Tlineinfo188352 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_226096)(NI16 x);
N_NIMCALL(void, internalerror_194191)(NimStringDesc* errmsg);
N_NIMCALL(NimStringDesc*, HEX24_194279)(TY90959 x);
N_NIMCALL(void, initeffects_368704)(Tnode223809* effects, Tsym223841* s, Teffects363008* t);
static N_INLINE(void, nimGCunrefNoCycle)(void* p);
static N_INLINE(Cell48947*, usrtocell_52646)(void* usr);
static N_INLINE(void, rtladdzct_54204)(Cell48947* c);
N_NOINLINE(void, addzct_52617)(Cellseq48963* s, Cell48947* 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_364843)(Teffects363008* tracked, Tnode223809* n);
N_NIMCALL(void, usevar_363844)(Teffects363008* a, Tnode223809* n);
N_NIMCALL(NIM_BOOL, islocalvar_363069)(Teffects363008* a, Tsym223841* s);
static N_INLINE(NIM_BOOL, contains_363853)(NI* a, NI aLen0, NI item);
static N_INLINE(NI, find_363863)(NI* a, NI aLen0, NI item);
N_NIMCALL(TGenericSeq*, incrSeqV2)(TGenericSeq* seq, NI elemsize);
N_NIMCALL(void, guardglobal_363229)(Teffects363008* a, Tnode223809* n, Tsym223841* guard);
static N_INLINE(NIM_BOOL, isgcedmem_227235)(Ttype223847* t);
N_NIMCALL(void, markgcunsafe_363702)(Teffects363008* a, Tsym223841* reason);
N_NIMCALL(void, addeffect_364300)(Teffects363008* a, Tnode223809* e, NIM_BOOL uselineinfo);
N_NIMCALL(NIM_BOOL, sametype_258092)(Ttype223847* a, Ttype223847* b, NU8 flags);
N_NIMCALL(NIM_BOOL, HEX3DHEX3D_191255)(Tlineinfo188352 a, Tlineinfo188352 b);
N_NIMCALL(void, throws_364159)(Tnode223809* tracked, Tnode223809* n);
static N_INLINE(NI, safelen_224126)(Tnode223809* n);
N_NIMCALL(void, mergelocklevels_366211)(Teffects363008* tracked, Tnode223809* n, NI16 locklevel);
N_NIMCALL(NI16, getlocklevel_366161)(Tsym223841* s);
N_NIMCALL(void, propagateeffects_366226)(Teffects363008* tracked, Tnode223809* n, Tsym223841* s);
N_NIMCALL(void, mergeeffects_364515)(Teffects363008* a, Tnode223809* b, Tnode223809* comesfrom);
N_NIMCALL(Tnode223809*, createraise_364240)(Tnode223809* n);
N_NIMCALL(Tnode223809*, newnode_224401)(NU8 kind);
N_NIMCALL(void, mergetags_364571)(Teffects363008* a, Tnode223809* b, Tnode223809* comesfrom);
N_NIMCALL(void, addtag_364457)(Teffects363008* a, Tnode223809* e, NIM_BOOL uselineinfo);
N_NIMCALL(Tnode223809*, createtag_364259)(Tnode223809* n);
N_NIMCALL(void, warnaboutgcunsafe_363693)(Tnode223809* n);
N_NIMCALL(NIM_BOOL, isforwardedproc_365579)(Tnode223809* n);
N_NIMCALL(NIM_BOOL, isindirectcall_365513)(Tnode223809* n, Tsym223841* owner);
N_NIMCALL(void, assumetheworst_366391)(Teffects363008* tracked, Tnode223809* n, Ttype223847* op);
N_NIMCALL(NIM_BOOL, importedfromc_366130)(Tnode223809* n);
N_NIMCALL(void, markgcunsafe_363723)(Teffects363008* a, Tnode223809* reason);
N_NIMCALL(Tsym223841*, newsym_224656)(NU8 symkind, Tident196021* name, Tsym223841* owner, Tlineinfo188352 info);
N_NIMCALL(Tident196021*, getident_196463)(NimStringDesc* identifier);
N_NIMCALL(void, trackoperand_366446)(Teffects363008* tracked, Tnode223809* n, Ttype223847* paramtype);
N_NIMCALL(Tnode223809*, skipconvandclosure_231305)(Tnode223809* n);
N_NIMCALL(Tnode223809*, skipconv_262935)(Tnode223809* n);
N_NIMCALL(NIM_BOOL, isownedprocvar_366403)(Tnode223809* n, Tsym223841* owner);
N_NIMCALL(void, notnilcheck_366292)(Teffects363008* tracked, Tnode223809* n_366295, Ttype223847* paramtype);
N_NIMCALL(NIM_BOOL, containsnode_228365)(Tnode223809* n, TY481044 kinds);
N_NIMCALL(NU8, impliesnotnil_357451)(Tnodeseq223803* facts, Tnode223809* arg);
N_NIMCALL(Ttype223847*, paramtype_367443)(Ttype223847* op, NI i);
N_NIMCALL(NI, len_226369)(Ttype223847* n);
N_NIMCALL(void, initvarvianew_363646)(Teffects363008* a, Tnode223809* n);
N_NIMCALL(void, initvar_363515)(Teffects363008* a, Tnode223809* n, NIM_BOOL volatilecheck);
static N_INLINE(void, makevolatile_363468)(Teffects363008* a, Tsym223841* s);
N_NIMCALL(Tsym223841*, getmodule_231243)(Tsym223841* s);
N_NIMCALL(void, guarddotaccess_363287)(Teffects363008* a, Tnode223809* n);
N_NIMCALL(Tsym223841*, lookupinrecord_231236)(Tnode223809* n, Tident196021* field);
N_NIMCALL(Tnode223809*, newnodei_225407)(NU8 kind, Tlineinfo188352 info, NI children);
N_NIMCALL(Tnode223809*, newsymnode_225325)(Tsym223841* sym);
N_NIMCALL(NIM_BOOL, sametree_356462)(Tnode223809* a, Tnode223809* b);
N_NIMCALL(void, checkfieldaccess_359409)(Tnodeseq223803* m, Tnode223809* n);
N_NIMCALL(void, tracktrystmt_364850)(Teffects363008* tracked, Tnode223809* n);
N_NIMCALL(void, addtointersection_364082)(TY257854** inter, NI s);
N_NIMCALL(void, catchesall_364814)(Teffects363008* tracked);
N_NIMCALL(TGenericSeq*, setLengthSeq)(TGenericSeq* seq, NI elemsize, NI newlen);
N_NIMCALL(void, catches_364686)(Teffects363008* tracked, Ttype223847* e_364689);
N_NIMCALL(void, trackpragmastmt_365610)(Teffects363008* tracked, Tnode223809* n);
N_NIMCALL(void, listeffects_364627)(Teffects363008* a);
N_NIMCALL(void, invalidatefacts_356659)(Tnodeseq223803** m, Tnode223809* n);
N_NIMCALL(void, addasgnfact_359086)(Tnodeseq223803** m, Tnode223809* key, Tnode223809* value);
N_NIMCALL(Tnode223809*, lastson_226406)(Tnode223809* n);
N_NIMCALL(void, trackcase_366666)(Teffects363008* tracked, Tnode223809* n);
N_NIMCALL(NIM_BOOL, interestingcaseexpr_355283)(Tnode223809* m);
N_NIMCALL(void, addcasebranchfacts_359137)(Tnodeseq223803** m, Tnode223809* n, NI i);
N_NIMCALL(NIM_BOOL, breaksblock_366609)(Tnode223809* n);
N_NIMCALL(void, trackif_366970)(Teffects363008* tracked, Tnode223809* n);
N_NIMCALL(void, addfact_356392)(Tnodeseq223803** m, Tnode223809* nn);
N_NIMCALL(void, addfactneg_356426)(Tnodeseq223803** m, Tnode223809* n_356430);
N_NIMCALL(void, trackblock_367323)(Teffects363008* tracked, Tnode223809* n);
N_NIMCALL(NIM_BOOL, hassubnodewith_228439)(Tnode223809* n, NU8 kind);
N_NIMCALL(NIM_BOOL, istrue_367402)(Tnode223809* n);
N_NIMCALL(void, adddiscriminantfact_359059)(Tnodeseq223803** m, Tnode223809* n);
N_NIMCALL(void, locklocations_363167)(Teffects363008* a, Tnode223809* pragma);
N_NIMCALL(NI16, getlocklevel_363114)(Ttype223847* t_363116);
static N_INLINE(NIM_BOOL, isemptytype_228932)(Ttype223847* t);
N_NIMCALL(void, listgcunsafety_363832)(Tsym223841* s, NIM_BOOL onlywarning);
N_NIMCALL(void, listgcunsafety_363755)(Tsym223841* s, NIM_BOOL onlywarning, Intset220056* cyclecheck);
N_NIMCALL(NIM_BOOL, containsorincl_220898)(Intset220056* s, NI key);
N_NIMCALL(NimStringDesc*, copyString)(NimStringDesc* src);
N_NIMCALL(Tnode223809*, newnode_225607)(NU8 kind, Tlineinfo188352 info, Tnodeseq223803* sons, Ttype223847* typ);
N_NIMCALL(Tnode223809*, documenteffect_365736)(Tnode223809* n, Tnode223809* 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(Tnode223809*, newidentnode_225313)(Tident196021* ident, Tlineinfo188352 info);
N_NIMCALL(Tnode223809*, documentwriteeffect_365822)(Tnode223809* n, NU8 flag, NimStringDesc* pragmaname);
static N_INLINE(Slice90365, HEX2EHEX2E_105290)(NI a, NI b);
N_NIMCALL(Tnode223809*, documentneweffect_365931)(Tnode223809* n);
STRING_LITERAL(TMP3411, "can raise an unlisted exception: ", 33);
STRING_LITERAL(TMP3412, "Exception", 9);
STRING_LITERAL(TMP3413, "Exception", 9);
STRING_LITERAL(TMP3414, "E_Base", 6);
STRING_LITERAL(TMP3415, "can have an unlisted effect: ", 29);
STRING_LITERAL(TMP3416, "base method is GC-safe, but \'$1\' is not", 39);
STRING_LITERAL(TMP3417, "base method has lock level $1, but dispatcher has $2", 52);
STRING_LITERAL(TMP3464, "compiler/sempass2.nim", 21);
NIM_CONST TY90959 TMP3463 = {((NimStringDesc*) &TMP3464),
((NI) 870)}
;
STRING_LITERAL(TMP3465, "unguarded access: ", 18);
STRING_LITERAL(TMP3466, "expected lock level < ", 22);
STRING_LITERAL(TMP3467, " but got lock level ", 20);
STRING_LITERAL(TMP3468, "RootEffect", 10);
STRING_LITERAL(TMP3469, "RootEffect", 10);
STRING_LITERAL(TMP3470, "TEffect", 7);
STRING_LITERAL(TMP3471, "<unknown>", 9);
NIM_CONST TY90959 TMP3472 = {((NimStringDesc*) &TMP3464),
((NI) 535)}
;
static NIM_CONST TY481044 TMP3473 = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00}
;
STRING_LITERAL(TMP3483, "cannot prove \'$1\' is not nil", 28);
STRING_LITERAL(TMP3484, "\'$1\' is provably nil", 20);
STRING_LITERAL(TMP3485, "invalid guard field: ", 21);
STRING_LITERAL(TMP3486, "locks pragma without argument", 29);
STRING_LITERAL(TMP3487, "invalid lock level: ", 20);
STRING_LITERAL(TMP3488, "multi-lock requires the same static lock level for every operan"
"d", 64);
STRING_LITERAL(TMP3489, "invalid nested locking", 22);
STRING_LITERAL(TMP3490, "result", 6);
STRING_LITERAL(TMP3491, "\'$#\' is not GC-safe as it accesses \'$#\' which is a global using"
" GC\'ed memory", 76);
STRING_LITERAL(TMP3492, "\'$#\' is not GC-safe as it calls \'$#\'", 36);
NIM_CONST TY90959 TMP3493 = {((NimStringDesc*) &TMP3464),
((NI) 211)}
;
STRING_LITERAL(TMP3494, "\'$#\' is not GC-safe as it performs an indirect call here", 56);
STRING_LITERAL(TMP3495, "declared lock level is $1, but real lock level is $2", 52);
NIM_CONST TY90959 TMP3538 = {((NimStringDesc*) &TMP3464),
((NI) 841)}
;
NIM_CONST TY90959 TMP3539 = {((NimStringDesc*) &TMP3464),
((NI) 847)}
;
STRING_LITERAL(TMP5026, "ref ", 4);
extern NIM_CONST TY204342 specialwords_204338;
STRING_LITERAL(TMP5027, "writes", 6);
STRING_LITERAL(TMP5028, "new", 3);
STRING_LITERAL(TMP5029, "escapes", 7);
extern TNimType NTI223803; /* TNodeSeq */
extern Gcheap51018 gch_51059;
extern Tnode223809* emptynode_224807;
extern TNimType NTI331608; /* seq[int] */
extern NU8 gcmd_165134;
extern NU64 gnotes_189398;
extern TNimType NTI257854; /* seq[tuple[a: int, b: int]] */
extern NU32 gglobaloptions_165132;

static N_INLINE(NI, len_224098)(Tnode223809* 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(Tnode223809*, effectspec_365661)(Tnode223809* n, NU16 effecttype) {
	Tnode223809* result;
{	result = 0;
	{
		NI i_365678;
		NI HEX3Atmp_365714;
		NI LOC2;
		NI res_365717;
		i_365678 = 0;
		HEX3Atmp_365714 = 0;
		LOC2 = 0;
		LOC2 = sonslen_226387(n);
		HEX3Atmp_365714 = (NI)(LOC2 - ((NI) 1));
		res_365717 = ((NI) 0);
		{
			while (1) {
				Tnode223809* it;
				if (!(res_365717 <= HEX3Atmp_365714)) goto LA4;
				i_365678 = res_365717;
				it = (*n).kindU.S6.sons->data[i_365678];
				{
					NIM_BOOL LOC7;
					NU16 LOC9;
					LOC7 = 0;
					LOC7 = ((*it).kind == ((NU8) 34));
					if (!(LOC7)) goto LA8;
					LOC9 = 0;
					LOC9 = whichpragma_252687(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_225351(((NU8) 39), (*result).info);
						add_224165(result, (*it).kindU.S6.sons->data[((NI) 1)]);
					}
					LA14: ;
					goto BeforeRet;
				}
				LA10: ;
				res_365717 += ((NI) 1);
			} LA4: ;
		}
	}
	}BeforeRet: ;
	return result;
}

static N_INLINE(Tnode223809*, HEX5BHEX5D_224244)(Tnode223809* n, NI i) {
	Tnode223809* 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_368278)(Tnode223809* spec, Tnode223809* real, NimStringDesc* msg, NIM_BOOL hints, TY368284 effectpredicate) {
	Intset220056 used;
	memset((void*)(&used), 0, sizeof(used));
	chckNil((void*)(&used));
	memset((void*)(&used), 0, sizeof(used));
	initintset_220927((&used));
	{
		Tnode223809* r_368290;
		r_368290 = 0;
		{
			NI i_368345;
			NI HEX3Atmp_368347;
			NI LOC3;
			NI res_368349;
			i_368345 = 0;
			HEX3Atmp_368347 = 0;
			LOC3 = 0;
			LOC3 = len_224098(real);
			HEX3Atmp_368347 = (LOC3 - 1);
			res_368349 = ((NI) 0);
			{
				while (1) {
					if (!(res_368349 <= HEX3Atmp_368347)) goto LA5;
					i_368345 = res_368349;
					r_368290 = (*real).kindU.S6.sons->data[i_368345];
					{
						NimStringDesc* LOC17;
						NimStringDesc* LOC18;
						{
							NI s_368311;
							NI HEX3Atmp_368335;
							NI LOC8;
							NI res_368338;
							s_368311 = 0;
							HEX3Atmp_368335 = 0;
							LOC8 = 0;
							LOC8 = len_224098(spec);
							HEX3Atmp_368335 = (LOC8 - 1);
							res_368338 = ((NI) 0);
							{
								while (1) {
									if (!(res_368338 <= HEX3Atmp_368335)) goto LA10;
									s_368311 = res_368338;
									{
										Tnode223809* LOC13;
										NIM_BOOL LOC14;
										LOC13 = 0;
										LOC13 = HEX5BHEX5D_224244(spec, s_368311);
										LOC14 = 0;
										LOC14 = effectpredicate(LOC13, r_368290);
										if (!LOC14) goto LA15;
										incl_220856((&used), s_368311);
										goto LA6;
									}
									LA15: ;
									res_368338 += ((NI) 1);
								} LA10: ;
							}
						}
						pushinfocontext_189581((*spec).info);
						LOC17 = 0;
						LOC18 = 0;
						LOC18 = typetostring_253032((*r_368290).typ, ((NU8) 0));
						LOC17 = rawNewString(msg->Sup.len + LOC18->Sup.len + 0);
appendString(LOC17, msg);
appendString(LOC17, LOC18);
						localerror_194128((*r_368290).info, ((NU16) 4), LOC17);
						popinfocontext_189600();
					} LA6: ;
					res_368349 += ((NI) 1);
				} LA5: ;
			}
		}
	}
	{
		if (!hints) goto LA21;
		{
			NI s_368332;
			NI HEX3Atmp_368353;
			NI LOC24;
			NI res_368356;
			s_368332 = 0;
			HEX3Atmp_368353 = 0;
			LOC24 = 0;
			LOC24 = len_224098(spec);
			HEX3Atmp_368353 = (LOC24 - 1);
			res_368356 = ((NI) 0);
			{
				while (1) {
					if (!(res_368356 <= HEX3Atmp_368353)) goto LA26;
					s_368332 = res_368356;
					{
						NIM_BOOL LOC29;
						Tnode223809* LOC32;
						Tnode223809* LOC33;
						NimStringDesc* LOC34;
						LOC29 = 0;
						LOC29 = contains_220829(used, s_368332);
						if (!!(LOC29)) goto LA30;
						LOC32 = 0;
						LOC32 = HEX5BHEX5D_224244(spec, s_368332);
						LOC33 = 0;
						LOC33 = HEX5BHEX5D_224244(spec, s_368332);
						LOC34 = 0;
						LOC34 = rendertree_245059(LOC33, 0);
						message_194161((*LOC32).info, ((NU16) 271), LOC34);
					}
					LA30: ;
					res_368356 += ((NI) 1);
				} LA26: ;
			}
		}
	}
	LA21: ;
}

N_NIMCALL(Ttype223847*, getebase_364191)(void) {
	Ttype223847* result;
	result = 0;
	{
		Tsym223841* LOC3;
		LOC3 = 0;
		LOC3 = getcompilerproc_272809(((NimStringDesc*) &TMP3412));
		if (!!((LOC3 == NIM_NIL))) goto LA4;
		result = systypefromname_272179(((NimStringDesc*) &TMP3413));
	}
	goto LA1;
	LA4: ;
	{
		result = systypefromname_272179(((NimStringDesc*) &TMP3414));
	}
	LA1: ;
	return result;
}

N_NIMCALL(Ttype223847*, exctype_364212)(Tnode223809* n) {
	Ttype223847* result;
	Ttype223847* 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_364191();
	}
	goto LA1;
	LA5: ;
	{
		t = (*n).typ;
	}
	LA1: ;
	result = skiptypes_227167(t, IL64(211106247215360));
	return result;
}

N_NIMCALL(NIM_BOOL, subtyperelation_368251)(Tnode223809* spec, Tnode223809* real) {
	NIM_BOOL result;
	Ttype223847* LOC1;
	NI LOC2;
	result = 0;
	LOC1 = 0;
	LOC1 = exctype_364212(real);
	LOC2 = 0;
	LOC2 = safeinheritancediff_262388(LOC1, (*spec).typ);
	result = (LOC2 <= ((NI) 0));
	return result;
}

N_NIMCALL(void, checkmethodeffects_368399)(Tsym223841* disp, Tsym223841* branch) {
	Tnode223809* actual;
	Tnode223809* p;
	Tnode223809* raisesspec;
	Tnode223809* tagsspec;
{	actual = (*(*(*branch).typ).n).kindU.S6.sons->data[((NI) 0)];
	{
		NI LOC3;
		LOC3 = 0;
		LOC3 = len_224098(actual);
		if (!!((LOC3 == ((NI) 4)))) goto LA4;
		goto BeforeRet;
	}
	LA4: ;
	p = (*(*disp).ast).kindU.S6.sons->data[((NI) 4)];
	raisesspec = effectspec_365661(p, ((NU16) 156));
	{
		if (!!(raisesspec == 0)) goto LA8;
		checkraisesspec_368278(raisesspec, (*actual).kindU.S6.sons->data[((NI) 0)], ((NimStringDesc*) &TMP3411), NIM_FALSE, subtyperelation_368251);
	}
	LA8: ;
	tagsspec = effectspec_365661(p, ((NU16) 161));
	{
		if (!!(tagsspec == 0)) goto LA12;
		checkraisesspec_368278(tagsspec, (*actual).kindU.S6.sons->data[((NI) 3)], ((NimStringDesc*) &TMP3415), NIM_FALSE, subtyperelation_368251);
	}
	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*) &TMP3416), (*(*branch).name).s);
		localerror_194139((*branch).info, LOC20);
	}
	LA18: ;
	{
		TY191306 LOC25;
		NimStringDesc* LOC26;
		if (!((*(*disp).typ).locklevel < (*(*branch).typ).locklevel)) goto LA23;
		memset((void*)LOC25, 0, sizeof(LOC25));
		LOC25[0] = HEX24_226096((*(*branch).typ).locklevel);
		LOC25[1] = HEX24_226096((*(*disp).typ).locklevel);
		LOC26 = 0;
		LOC26 = nsuFormatOpenArray(((NimStringDesc*) &TMP3417), LOC25, 2);
		message_194161((*branch).info, ((NU16) 265), LOC26);
	}
	LA23: ;
	}BeforeRet: ;
}

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

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

static N_INLINE(void, nimGCunrefNoCycle)(void* p) {
	Cell48947* 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) {
	{
		Cell48947* c;
		if (!!((src == NIM_NIL))) goto LA3;
		c = usrtocell_52646(src);
		(*c).refcount += ((NI) 8);
	}
	LA3: ;
	{
		Cell48947* 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_368704)(Tnode223809* effects, Tsym223841* s, Teffects363008* t) {
	if ((*effects).kindU.S6.sons) nimGCunrefNoCycle((*effects).kindU.S6.sons);
	(*effects).kindU.S6.sons = (Tnodeseq223803*) newSeqRC1((&NTI223803), ((NI) 4));
	asgnRefNoCycle((void**) (&(*effects).kindU.S6.sons->data[((NI) 0)]), newnodei_225351(((NU8) 152), (*s).info));
	asgnRefNoCycle((void**) (&(*effects).kindU.S6.sons->data[((NI) 3)]), newnodei_225351(((NU8) 152), (*s).info));
	asgnRefNoCycle((void**) (&(*effects).kindU.S6.sons->data[((NI) 1)]), emptynode_224807);
	asgnRefNoCycle((void**) (&(*effects).kindU.S6.sons->data[((NI) 2)]), emptynode_224807);
	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), (TY331608*) newSeq((&NTI331608), 0));
	unsureAsgnRef((void**) (&(*t).guards), (Tnodeseq223803*) newSeq((&NTI223803), 0));
	unsureAsgnRef((void**) (&(*t).locked), (Tnodeseq223803*) newSeq((&NTI223803), 0));
}

N_NIMCALL(NIM_BOOL, islocalvar_363069)(Teffects363008* a, Tsym223841* 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_363863)(NI* a, NI aLen0, NI item) {
	NI result;
{	result = 0;
	{
		NI i_363907;
		NI i_363920;
		i_363907 = 0;
		i_363920 = ((NI) 0);
		{
			while (1) {
				if (!(i_363920 < aLen0)) goto LA3;
				i_363907 = a[i_363920];
				{
					if (!(i_363907 == item)) goto LA6;
					goto BeforeRet;
				}
				LA6: ;
				result += ((NI) 1);
				i_363920 += ((NI) 1);
			} LA3: ;
		}
	}
	result = ((NI) -1);
	}BeforeRet: ;
	return result;
}

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

N_NIMCALL(void, guardglobal_363229)(Teffects363008* a, Tnode223809* n, Tsym223841* guard) {
{	{
		Tnode223809* L_363243;
		Tnodeseq223803* HEX3Atmp_363266;
		NI i_363269;
		NI L_363271;
		L_363243 = 0;
		HEX3Atmp_363266 = 0;
		HEX3Atmp_363266 = (*a).locked;
		i_363269 = ((NI) 0);
		L_363271 = (HEX3Atmp_363266 ? HEX3Atmp_363266->Sup.len : 0);
		{
			while (1) {
				if (!(i_363269 < L_363271)) goto LA3;
				L_363243 = HEX3Atmp_363266->data[i_363269];
				{
					NIM_BOOL LOC6;
					LOC6 = 0;
					LOC6 = ((*L_363243).kind == ((NU8) 3));
					if (!(LOC6)) goto LA7;
					LOC6 = ((*L_363243).kindU.S4.sym == guard);
					LA7: ;
					if (!LOC6) goto LA8;
					goto BeforeRet;
				}
				LA8: ;
				i_363269 += ((NI) 1);
			} LA3: ;
		}
	}
	{
		NimStringDesc* LOC14;
		NimStringDesc* LOC15;
		if (!!((*a).istoplevel)) goto LA12;
		LOC14 = 0;
		LOC15 = 0;
		LOC15 = rendertree_245059(n, 0);
		LOC14 = rawNewString(LOC15->Sup.len + 18);
appendString(LOC14, ((NimStringDesc*) &TMP3465));
appendString(LOC14, LOC15);
		localerror_194128((*n).info, ((NU16) 4), LOC14);
	}
	LA12: ;
	}BeforeRet: ;
}

static N_INLINE(NIM_BOOL, isgcedmem_227235)(Ttype223847* 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_363702)(Teffects363008* a, Tsym223841* 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_363844)(Teffects363008* a, Tnode223809* n) {
	Tsym223841* s;
	s = (*n).kindU.S4.sym;
	{
		NIM_BOOL LOC3;
		LOC3 = 0;
		LOC3 = islocalvar_363069(a, s);
		if (!LOC3) goto LA4;
		{
			NIM_BOOL LOC8;
			LOC8 = 0;
			LOC8 = contains_363853((*a).init->data, (*a).init->Sup.len, (*s).Sup.id);
			if (!!(LOC8)) goto LA9;
			{
				if (!!(((196608 & (*(*s).typ).flags) == 0))) goto LA13;
				message_194161((*n).info, ((NU16) 257), (*(*s).name).s);
			}
			goto LA11;
			LA13: ;
			{
				message_194161((*n).info, ((NU16) 262), (*(*s).name).s);
			}
			LA11: ;
			(*a).init = (TY331608*) 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_363229(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_227235((*s).typ);
			LA31: ;
			LOC28 = LOC30;
			LA29: ;
			if (!LOC28) goto LA32;
			markgcunsafe_363702(a, s);
		}
		LA32: ;
	}
	LA20: ;
}

N_NIMCALL(void, throws_364159)(Tnode223809* tracked, Tnode223809* 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_224165(tracked, n);
	}
	LA5: ;
}

N_NIMCALL(void, addeffect_364300)(Teffects363008* a, Tnode223809* e, NIM_BOOL uselineinfo) {
	Tnode223809* aa;
{	aa = (*a).exc;
	{
		NI i_364421;
		NI HEX3Atmp_364434;
		NI HEX3Atmp_364435;
		NI LOC2;
		NI res_364438;
		i_364421 = 0;
		HEX3Atmp_364434 = 0;
		HEX3Atmp_364435 = 0;
		HEX3Atmp_364434 = (*a).bottom;
		LOC2 = 0;
		LOC2 = len_224098(aa);
		HEX3Atmp_364435 = (LOC2 - 1);
		res_364438 = HEX3Atmp_364434;
		{
			while (1) {
				if (!(res_364438 <= HEX3Atmp_364435)) goto LA4;
				i_364421 = res_364438;
				{
					Tnode223809* LOC7;
					Ttype223847* LOC8;
					Ttype223847* LOC9;
					NIM_BOOL LOC10;
					LOC7 = 0;
					LOC7 = HEX5BHEX5D_224244(aa, i_364421);
					LOC8 = 0;
					LOC8 = exctype_364212(LOC7);
					LOC9 = 0;
					LOC9 = exctype_364212(e);
					LOC10 = 0;
					LOC10 = sametype_258092(LOC8, LOC9, 0);
					if (!LOC10) goto LA11;
					{
						NIM_BOOL LOC15;
						LOC15 = 0;
						LOC15 = !(uselineinfo);
						if (LOC15) goto LA16;
						LOC15 = (gcmd_165134 == ((NU8) 8));
						LA16: ;
						if (!LOC15) goto LA17;
						goto BeforeRet;
					}
					goto LA13;
					LA17: ;
					{
						Tnode223809* LOC20;
						NIM_BOOL LOC21;
						LOC20 = 0;
						LOC20 = HEX5BHEX5D_224244(aa, i_364421);
						LOC21 = 0;
						LOC21 = HEX3DHEX3D_191255((*LOC20).info, (*e).info);
						if (!LOC21) goto LA22;
						goto BeforeRet;
					}
					goto LA13;
					LA22: ;
					LA13: ;
				}
				LA11: ;
				res_364438 += ((NI) 1);
			} LA4: ;
		}
	}
	throws_364159((*a).exc, e);
	}BeforeRet: ;
}

static N_INLINE(NI, safelen_224126)(Tnode223809* 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_366211)(Teffects363008* tracked, Tnode223809* 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_226096((*tracked).currlocklevel);
			LOC11 = 0;
			LOC11 = HEX24_226096(locklevel);
			LOC9 = rawNewString(LOC10->Sup.len + LOC11->Sup.len + 42);
appendString(LOC9, ((NimStringDesc*) &TMP3466));
appendString(LOC9, LOC10);
appendString(LOC9, ((NimStringDesc*) &TMP3467));
appendString(LOC9, LOC11);
			localerror_194128((*n).info, ((NU16) 4), LOC9);
		}
		LA7: ;
		(*tracked).maxlocklevel = (((*tracked).maxlocklevel >= locklevel) ? (*tracked).maxlocklevel : locklevel);
	}
	LA3: ;
}

N_NIMCALL(NI16, getlocklevel_366161)(Tsym223841* 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(Tnode223809*, createraise_364240)(Tnode223809* n) {
	Tnode223809* result;
	result = 0;
	result = newnode_224401(((NU8) 4));
	asgnRefNoCycle((void**) (&(*result).typ), getebase_364191());
	{
		if (!!(n == 0)) goto LA3;
		(*result).info = (*n).info;
	}
	LA3: ;
	return result;
}

N_NIMCALL(void, mergeeffects_364515)(Teffects363008* a, Tnode223809* b, Tnode223809* comesfrom) {
	{
		Tnode223809* LOC5;
		if (!b == 0) goto LA3;
		LOC5 = 0;
		LOC5 = createraise_364240(comesfrom);
		addeffect_364300(a, LOC5, NIM_TRUE);
	}
	goto LA1;
	LA3: ;
	{
		{
			Tnode223809* effect_364529;
			effect_364529 = 0;
			{
				NI i_364546;
				NI HEX3Atmp_364548;
				NI LOC9;
				NI res_364550;
				i_364546 = 0;
				HEX3Atmp_364548 = 0;
				LOC9 = 0;
				LOC9 = len_224098(b);
				HEX3Atmp_364548 = (LOC9 - 1);
				res_364550 = ((NI) 0);
				{
					while (1) {
						if (!(res_364550 <= HEX3Atmp_364548)) goto LA11;
						i_364546 = res_364550;
						effect_364529 = (*b).kindU.S6.sons->data[i_364546];
						addeffect_364300(a, effect_364529, !((comesfrom == NIM_NIL)));
						res_364550 += ((NI) 1);
					} LA11: ;
				}
			}
		}
	}
	LA1: ;
}

N_NIMCALL(void, addtag_364457)(Teffects363008* a, Tnode223809* e, NIM_BOOL uselineinfo) {
	Tnode223809* aa;
{	aa = (*a).tags;
	{
		NI i_364482;
		NI HEX3Atmp_364493;
		NI LOC2;
		NI res_364496;
		i_364482 = 0;
		HEX3Atmp_364493 = 0;
		LOC2 = 0;
		LOC2 = len_224098(aa);
		HEX3Atmp_364493 = (LOC2 - 1);
		res_364496 = ((NI) 0);
		{
			while (1) {
				if (!(res_364496 <= HEX3Atmp_364493)) goto LA4;
				i_364482 = res_364496;
				{
					Tnode223809* LOC7;
					Ttype223847* LOC8;
					Ttype223847* LOC9;
					NIM_BOOL LOC10;
					LOC7 = 0;
					LOC7 = HEX5BHEX5D_224244(aa, i_364482);
					LOC8 = 0;
					LOC8 = skiptypes_227167((*LOC7).typ, IL64(211106247215360));
					LOC9 = 0;
					LOC9 = skiptypes_227167((*e).typ, IL64(211106247215360));
					LOC10 = 0;
					LOC10 = sametype_258092(LOC8, LOC9, 0);
					if (!LOC10) goto LA11;
					{
						NIM_BOOL LOC15;
						LOC15 = 0;
						LOC15 = !(uselineinfo);
						if (LOC15) goto LA16;
						LOC15 = (gcmd_165134 == ((NU8) 8));
						LA16: ;
						if (!LOC15) goto LA17;
						goto BeforeRet;
					}
					goto LA13;
					LA17: ;
					{
						Tnode223809* LOC20;
						NIM_BOOL LOC21;
						LOC20 = 0;
						LOC20 = HEX5BHEX5D_224244(aa, i_364482);
						LOC21 = 0;
						LOC21 = HEX3DHEX3D_191255((*LOC20).info, (*e).info);
						if (!LOC21) goto LA22;
						goto BeforeRet;
					}
					goto LA13;
					LA22: ;
					LA13: ;
				}
				LA11: ;
				res_364496 += ((NI) 1);
			} LA4: ;
		}
	}
	throws_364159((*a).tags, e);
	}BeforeRet: ;
}

N_NIMCALL(Tnode223809*, createtag_364259)(Tnode223809* n) {
	Tnode223809* result;
	result = 0;
	result = newnode_224401(((NU8) 4));
	{
		Tsym223841* LOC3;
		LOC3 = 0;
		LOC3 = getcompilerproc_272809(((NimStringDesc*) &TMP3468));
		if (!!((LOC3 == NIM_NIL))) goto LA4;
		asgnRefNoCycle((void**) (&(*result).typ), systypefromname_272179(((NimStringDesc*) &TMP3469)));
	}
	goto LA1;
	LA4: ;
	{
		asgnRefNoCycle((void**) (&(*result).typ), systypefromname_272179(((NimStringDesc*) &TMP3470)));
	}
	LA1: ;
	{
		if (!!(n == 0)) goto LA9;
		(*result).info = (*n).info;
	}
	LA9: ;
	return result;
}

N_NIMCALL(void, mergetags_364571)(Teffects363008* a, Tnode223809* b, Tnode223809* comesfrom) {
	{
		Tnode223809* LOC5;
		if (!b == 0) goto LA3;
		LOC5 = 0;
		LOC5 = createtag_364259(comesfrom);
		addtag_364457(a, LOC5, NIM_TRUE);
	}
	goto LA1;
	LA3: ;
	{
		{
			Tnode223809* effect_364585;
			effect_364585 = 0;
			{
				NI i_364602;
				NI HEX3Atmp_364604;
				NI LOC9;
				NI res_364606;
				i_364602 = 0;
				HEX3Atmp_364604 = 0;
				LOC9 = 0;
				LOC9 = len_224098(b);
				HEX3Atmp_364604 = (LOC9 - 1);
				res_364606 = ((NI) 0);
				{
					while (1) {
						if (!(res_364606 <= HEX3Atmp_364604)) goto LA11;
						i_364602 = res_364606;
						effect_364585 = (*b).kindU.S6.sons->data[i_364602];
						addtag_364457(a, effect_364585, !((comesfrom == NIM_NIL)));
						res_364606 += ((NI) 1);
					} LA11: ;
				}
			}
		}
	}
	LA1: ;
}

N_NIMCALL(void, warnaboutgcunsafe_363693)(Tnode223809* n) {
	NimStringDesc* LOC1;
	LOC1 = 0;
	LOC1 = rendertree_245059(n, 0);
	message_194161((*n).info, ((NU16) 260), LOC1);
}

N_NIMCALL(void, propagateeffects_366226)(Teffects363008* tracked, Tnode223809* n, Tsym223841* s) {
	Tnode223809* pragma;
	Tnode223809* spec;
	Tnode223809* tagspec;
	NI16 LOC11;
	pragma = (*(*s).ast).kindU.S6.sons->data[((NI) 4)];
	spec = effectspec_365661(pragma, ((NU16) 156));
	mergeeffects_364515(tracked, spec, n);
	tagspec = effectspec_365661(pragma, ((NU16) 161));
	mergetags_364571(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_189398 &(IL64(1)<<(((((NU16) 260)- 237))&IL64(63))))!=0)) goto LA9;
			warnaboutgcunsafe_363693(n);
		}
		LA9: ;
		markgcunsafe_363702(tracked, s);
	}
	LA5: ;
	LOC11 = 0;
	LOC11 = getlocklevel_366161(s);
	mergelocklevels_366211(tracked, n, LOC11);
}

N_NIMCALL(NIM_BOOL, isforwardedproc_365579)(Tnode223809* 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_365513)(Tnode223809* n, Tsym223841* 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_366391)(Teffects363008* tracked, Tnode223809* n, Ttype223847* op) {
	Tnode223809* LOC1;
	Tnode223809* LOC2;
	NI16 locklevel;
	LOC1 = 0;
	LOC1 = createraise_364240(n);
	addeffect_364300(tracked, LOC1, NIM_TRUE);
	LOC2 = 0;
	LOC2 = createtag_364259(n);
	addtag_364457(tracked, LOC2, NIM_TRUE);
	{
		if (!((*op).locklevel == ((NI16) -1))) goto LA5;
		locklevel = ((NI16) 1001);
	}
	goto LA3;
	LA5: ;
	{
		locklevel = (*op).locklevel;
	}
	LA3: ;
	mergelocklevels_366211(tracked, n, locklevel);
}

N_NIMCALL(NIM_BOOL, importedfromc_366130)(Tnode223809* 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_363723)(Teffects363008* a, Tnode223809* 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: ;
		{
			Tident196021* LOC10;
			LOC10 = 0;
			LOC10 = getident_196463(((NimStringDesc*) &TMP3471));
			asgnRefNoCycle((void**) (&(*(*a).owner).kindU.S2.gcunsafetyreason), newsym_224656(((NU8) 0), LOC10, (*a).owner, (*reason).info));
		}
		LA5: ;
	}
	LA3: ;
}

N_NIMCALL(NIM_BOOL, isownedprocvar_366403)(Tnode223809* n, Tsym223841* 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_366292)(Teffects363008* tracked, Tnode223809* n_366295, Ttype223847* paramtype) {
	Tnode223809* n;
{	n = skipconv_262935(n_366295);
	{
		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_228365(n, TMP3473);
				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_357451((*tracked).guards, n);
		switch (LOC27) {
		case ((NU8) 0):
		{
			NimStringDesc* LOC29;
			NimStringDesc* LOC30;
			LOC29 = 0;
			LOC29 = rendertree_245059(n, 0);
			LOC30 = 0;
			LOC30 = nsuFormatSingleElem(((NimStringDesc*) &TMP3483), LOC29);
			message_194161((*n).info, ((NU16) 4), LOC30);
		}
		break;
		case ((NU8) 1):
		{
			NimStringDesc* LOC32;
			NimStringDesc* LOC33;
			LOC32 = 0;
			LOC32 = rendertree_245059(n, 0);
			LOC33 = 0;
			LOC33 = nsuFormatSingleElem(((NimStringDesc*) &TMP3484), LOC32);
			message_194161((*n).info, ((NU16) 4), LOC33);
		}
		break;
		case ((NU8) 2):
		{
		}
		break;
		}
	}
	LA9: ;
	}BeforeRet: ;
}

N_NIMCALL(void, trackoperand_366446)(Teffects363008* tracked, Tnode223809* n, Ttype223847* paramtype) {
	Tnode223809* a;
	Ttype223847* op;
	a = skipconvandclosure_231305(n);
	op = (*a).typ;
	{
		NIM_BOOL LOC3;
		NIM_BOOL LOC4;
		Tnode223809* effectlist;
		Tnode223809* 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_194279(TMP3472);
			internalerror_194191(LOC13);
		}
		LA11: ;
		effectlist = (*(*op).n).kindU.S6.sons->data[((NI) 0)];
		s = skipconv_262935(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_366226(tracked, n, (*s).kindU.S4.sym);
		}
		goto LA14;
		LA18: ;
		{
			NI LOC21;
			LOC21 = 0;
			LOC21 = len_224098(effectlist);
			if (!(LOC21 == ((NI) 0))) goto LA22;
			{
				NIM_BOOL LOC26;
				LOC26 = 0;
				LOC26 = isforwardedproc_365579(n);
				if (!LOC26) goto LA27;
				propagateeffects_366226(tracked, n, (*n).kindU.S4.sym);
			}
			goto LA24;
			LA27: ;
			{
				NIM_BOOL LOC30;
				LOC30 = 0;
				LOC30 = isownedprocvar_366403(a, (*tracked).owner);
				if (!!(LOC30)) goto LA31;
				assumetheworst_366391(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_366403(a, (*tracked).owner);
				LOC35 = !(LOC37);
				LA36: ;
				if (!LOC35) goto LA38;
				{
					if (!((gnotes_189398 &(IL64(1)<<(((((NU16) 260)- 237))&IL64(63))))!=0)) goto LA42;
					warnaboutgcunsafe_363693(n);
				}
				LA42: ;
				markgcunsafe_363723(tracked, a);
			}
			LA38: ;
		}
		goto LA14;
		LA22: ;
		{
			mergeeffects_364515(tracked, (*effectlist).kindU.S6.sons->data[((NI) 0)], n);
			mergetags_364571(tracked, (*effectlist).kindU.S6.sons->data[((NI) 3)], n);
			{
				if (!((130 & (*op).flags) == 0)) goto LA47;
				{
					if (!((gnotes_189398 &(IL64(1)<<(((((NU16) 260)- 237))&IL64(63))))!=0)) goto LA51;
					warnaboutgcunsafe_363693(n);
				}
				LA51: ;
				markgcunsafe_363723(tracked, a);
			}
			LA47: ;
		}
		LA14: ;
	}
	LA7: ;
	notnilcheck_366292(tracked, n, paramtype);
}

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

static N_INLINE(void, makevolatile_363468)(Teffects363008* a, Tsym223841* s) {
	{
		NIM_BOOL LOC3;
		NIM_BOOL LOC5;
		Tsym223841* LOC7;
		LOC3 = 0;
		LOC3 = (((NI) 0) < (*a).intrystmt);
		if (!(LOC3)) goto LA4;
		LOC5 = 0;
		LOC5 = (gcmd_165134 == ((NU8) 2));
		if (LOC5) goto LA6;
		LOC7 = 0;
		LOC7 = getmodule_231243((*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_363515)(Teffects363008* a, Tnode223809* n, NIM_BOOL volatilecheck) {
	Tsym223841* s;
{	{
		if (!!(((*n).kind == ((NU8) 3)))) goto LA3;
		goto BeforeRet;
	}
	LA3: ;
	s = (*n).kindU.S4.sym;
	{
		NIM_BOOL LOC7;
		LOC7 = 0;
		LOC7 = islocalvar_363069(a, s);
		if (!LOC7) goto LA8;
		{
			if (!volatilecheck) goto LA12;
			makevolatile_363468(a, s);
		}
		LA12: ;
		{
			NI x_363611;
			TY331608* HEX3Atmp_363625;
			NI i_363628;
			NI L_363630;
			x_363611 = 0;
			HEX3Atmp_363625 = 0;
			HEX3Atmp_363625 = (*a).init;
			i_363628 = ((NI) 0);
			L_363630 = (HEX3Atmp_363625 ? HEX3Atmp_363625->Sup.len : 0);
			{
				while (1) {
					if (!(i_363628 < L_363630)) goto LA16;
					x_363611 = HEX3Atmp_363625->data[i_363628];
					{
						if (!(x_363611 == (*s).Sup.id)) goto LA19;
						goto BeforeRet;
					}
					LA19: ;
					i_363628 += ((NI) 1);
				} LA16: ;
			}
		}
		(*a).init = (TY331608*) 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_363646)(Teffects363008* a, Tnode223809* n) {
	Tsym223841* 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_363515(a, n, NIM_TRUE);
	}
	goto LA5;
	LA7: ;
	{
		NIM_BOOL LOC10;
		LOC10 = 0;
		LOC10 = islocalvar_363069(a, s);
		if (!LOC10) goto LA11;
		makevolatile_363468(a, s);
	}
	goto LA5;
	LA11: ;
	LA5: ;
	}BeforeRet: ;
}

N_NIMCALL(void, guarddotaccess_363287)(Teffects363008* a, Tnode223809* n) {
	Tnode223809* ri;
	Tsym223841* 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: ;
	{
		Tsym223841* field;
		Ttype223847* ty;
		if (!((*g).kind == ((NU8) 0))) goto LA15;
		field = NIM_NIL;
		ty = skiptypes_227167((*(*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_231236((*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_231236((*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_227167(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*) &TMP3485));
appendString(LOC40, (*(*g).name).s);
			localerror_194128((*n).info, ((NU16) 4), LOC40);
			goto BeforeRet;
		}
		LA38: ;
		g = field;
	}
	LA15: ;
	{
		Tnode223809* dot;
		NimStringDesc* LOC53;
		NimStringDesc* LOC54;
		if (!((*g).kind == ((NU8) 19))) goto LA43;
		dot = newnodei_225407(((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_225325(g));
		asgnRefNoCycle((void**) (&(*dot).typ), (*g).typ);
		{
			Tnode223809* L_363437;
			Tnodeseq223803* HEX3Atmp_363441;
			NI i_363444;
			NI L_363446;
			L_363437 = 0;
			HEX3Atmp_363441 = 0;
			HEX3Atmp_363441 = (*a).locked;
			i_363444 = ((NI) 0);
			L_363446 = (HEX3Atmp_363441 ? HEX3Atmp_363441->Sup.len : 0);
			{
				while (1) {
					if (!(i_363444 < L_363446)) goto LA47;
					L_363437 = HEX3Atmp_363441->data[i_363444];
					{
						NIM_BOOL LOC50;
						LOC50 = 0;
						LOC50 = sametree_356462(dot, L_363437);
						if (!LOC50) goto LA51;
						goto BeforeRet;
					}
					LA51: ;
					i_363444 += ((NI) 1);
				} LA47: ;
			}
		}
		LOC53 = 0;
		LOC54 = 0;
		LOC54 = rendertree_245059(n, 0);
		LOC53 = rawNewString(LOC54->Sup.len + 18);
appendString(LOC53, ((NimStringDesc*) &TMP3465));
appendString(LOC53, LOC54);
		localerror_194128((*n).info, ((NU16) 4), LOC53);
	}
	goto LA41;
	LA43: ;
	{
		guardglobal_363229(a, n, g);
	}
	LA41: ;
	}BeforeRet: ;
}

N_NIMCALL(void, addtointersection_364082)(TY257854** inter, NI s) {
	TY257855 LOC8;
{	{
		NI j_364113;
		NI HEX3Atmp_364137;
		NI res_364140;
		j_364113 = 0;
		HEX3Atmp_364137 = 0;
		HEX3Atmp_364137 = (((*inter) ? (*inter)->Sup.len : 0) - 1);
		res_364140 = ((NI) 0);
		{
			while (1) {
				if (!(res_364140 <= HEX3Atmp_364137)) goto LA3;
				j_364113 = res_364140;
				{
					if (!(s == (*inter)->data[j_364113].Field0)) goto LA6;
					(*inter)->data[j_364113].Field1 += ((NI) 1);
					goto BeforeRet;
				}
				LA6: ;
				res_364140 += ((NI) 1);
			} LA3: ;
		}
	}
	LOC8.Field0 = s;
	LOC8.Field1 = ((NI) 1);
	(*inter) = (TY257854*) incrSeqV2(&((*inter))->Sup, sizeof(TY257855));
	(*inter)->data[(*inter)->Sup.len] = LOC8;
	++(*inter)->Sup.len;
	}BeforeRet: ;
}

N_NIMCALL(void, catchesall_364814)(Teffects363008* tracked) {
	{
		if (!!((*(*tracked).exc).kindU.S6.sons == 0)) goto LA3;
		(*(*tracked).exc).kindU.S6.sons = (Tnodeseq223803*) setLengthSeq(&((*(*tracked).exc).kindU.S6.sons)->Sup, sizeof(Tnode223809*), ((NI) ((*tracked).bottom)));
	}
	LA3: ;
}

N_NIMCALL(void, catches_364686)(Teffects363008* tracked, Ttype223847* e_364689) {
	Ttype223847* e;
	NI L;
	NI i;
	e = skiptypes_227167(e_364689, IL64(211106247215360));
	L = len_224098((*tracked).exc);
	i = (*tracked).bottom;
	{
		while (1) {
			if (!(i < L)) goto LA2;
			{
				Tnode223809* LOC5;
				Ttype223847* LOC6;
				NI LOC7;
				LOC5 = 0;
				LOC5 = HEX5BHEX5D_224244((*tracked).exc, i);
				LOC6 = 0;
				LOC6 = exctype_364212(LOC5);
				LOC7 = 0;
				LOC7 = safeinheritancediff_262388(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 = (Tnodeseq223803*) setLengthSeq(&((*(*tracked).exc).kindU.S6.sons)->Sup, sizeof(Tnode223809*), ((NI) (L)));
	}
	goto LA11;
	LA13: ;
	{
	}
	LA11: ;
}

N_NIMCALL(void, tracktrystmt_364850)(Teffects363008* tracked, Tnode223809* n) {
	NI oldbottom;
	NI oldstate;
	TY257854* inter;
	NI branches;
	NIM_BOOL hasfinally;
	oldbottom = (*tracked).bottom;
	(*tracked).bottom = len_224098((*tracked).exc);
	oldstate = ((*tracked).init ? (*tracked).init->Sup.len : 0);
	inter = (TY257854*) newSeq((&NTI257854), 0);
	(*tracked).intrystmt += ((NI) 1);
	track_364843(tracked, (*n).kindU.S6.sons->data[((NI) 0)]);
	(*tracked).intrystmt -= ((NI) 1);
	{
		NI i_364927;
		NI HEX3Atmp_365425;
		NI res_365428;
		i_364927 = 0;
		HEX3Atmp_365425 = 0;
		HEX3Atmp_365425 = (((*tracked).init ? (*tracked).init->Sup.len : 0) - 1);
		res_365428 = oldstate;
		{
			while (1) {
				if (!(res_365428 <= HEX3Atmp_365425)) goto LA3;
				i_364927 = res_365428;
				addtointersection_364082((&inter), (*tracked).init->data[i_364927]);
				res_365428 += ((NI) 1);
			} LA3: ;
		}
	}
	branches = ((NI) 1);
	hasfinally = NIM_FALSE;
	{
		NI i_364950;
		NI HEX3Atmp_365449;
		NI LOC5;
		NI res_365452;
		i_364950 = 0;
		HEX3Atmp_365449 = 0;
		LOC5 = 0;
		LOC5 = len_224098(n);
		HEX3Atmp_365449 = (LOC5 - 1);
		res_365452 = ((NI) 1);
		{
			while (1) {
				Tnode223809* b;
				NI blen;
				if (!(res_365452 <= HEX3Atmp_365449)) goto LA7;
				i_364950 = res_365452;
				b = (*n).kindU.S6.sons->data[i_364950];
				blen = sonslen_226387(b);
				{
					if (!((*b).kind == ((NU8) 87))) goto LA10;
					branches += ((NI) 1);
					{
						if (!(blen == ((NI) 1))) goto LA14;
						catchesall_364814(tracked);
					}
					goto LA12;
					LA14: ;
					{
						{
							NI j_364984;
							NI HEX3Atmp_365434;
							NI res_365437;
							j_364984 = 0;
							HEX3Atmp_365434 = 0;
							HEX3Atmp_365434 = (NI)(blen - ((NI) 2));
							res_365437 = ((NI) 0);
							{
								while (1) {
									if (!(res_365437 <= HEX3Atmp_365434)) goto LA19;
									j_364984 = res_365437;
									catches_364686(tracked, (*(*b).kindU.S6.sons->data[j_364984]).typ);
									res_365437 += ((NI) 1);
								} LA19: ;
							}
						}
					}
					LA12: ;
					(*tracked).init = (TY331608*) setLengthSeq(&((*tracked).init)->Sup, sizeof(NI), ((NI) (oldstate)));
					track_364843(tracked, (*b).kindU.S6.sons->data[(NI)(blen - ((NI) 1))]);
					{
						NI i_365039;
						NI HEX3Atmp_365442;
						NI res_365445;
						i_365039 = 0;
						HEX3Atmp_365442 = 0;
						HEX3Atmp_365442 = (((*tracked).init ? (*tracked).init->Sup.len : 0) - 1);
						res_365445 = oldstate;
						{
							while (1) {
								if (!(res_365445 <= HEX3Atmp_365442)) goto LA22;
								i_365039 = res_365445;
								addtointersection_364082((&inter), (*tracked).init->data[i_365039]);
								res_365445 += ((NI) 1);
							} LA22: ;
						}
					}
				}
				goto LA8;
				LA10: ;
				{
					(*tracked).init = (TY331608*) setLengthSeq(&((*tracked).init)->Sup, sizeof(NI), ((NI) (oldstate)));
					track_364843(tracked, (*b).kindU.S6.sons->data[(NI)(blen - ((NI) 1))]);
					hasfinally = NIM_TRUE;
				}
				LA8: ;
				res_365452 += ((NI) 1);
			} LA7: ;
		}
	}
	(*tracked).bottom = oldbottom;
	{
		if (!!(hasfinally)) goto LA26;
		(*tracked).init = (TY331608*) setLengthSeq(&((*tracked).init)->Sup, sizeof(NI), ((NI) (oldstate)));
	}
	LA26: ;
	{
		NI id_365411;
		NI count_365412;
		NI i_365459;
		NI L_365461;
		id_365411 = 0;
		count_365412 = 0;
		i_365459 = ((NI) 0);
		L_365461 = (inter ? inter->Sup.len : 0);
		{
			while (1) {
				if (!(i_365459 < L_365461)) goto LA30;
				id_365411 = inter->data[i_365459].Field0;
				count_365412 = inter->data[i_365459].Field1;
				{
					if (!(count_365412 == branches)) goto LA33;
					(*tracked).init = (TY331608*) incrSeqV2(&((*tracked).init)->Sup, sizeof(NI));
					(*tracked).init->data[(*tracked).init->Sup.len] = id_365411;
					++(*tracked).init->Sup.len;
				}
				LA33: ;
				i_365459 += ((NI) 1);
			} LA30: ;
		}
	}
}

N_NIMCALL(void, listeffects_364627)(Teffects363008* a) {
	{
		Tnode223809* e_364630;
		Tnode223809* HEX3Atmp_364633;
		e_364630 = 0;
		HEX3Atmp_364633 = 0;
		HEX3Atmp_364633 = (*a).exc;
		{
			NI i_364637;
			NI HEX3Atmp_364639;
			NI LOC3;
			NI res_364641;
			i_364637 = 0;
			HEX3Atmp_364639 = 0;
			LOC3 = 0;
			LOC3 = len_224098(HEX3Atmp_364633);
			HEX3Atmp_364639 = (LOC3 - 1);
			res_364641 = ((NI) 0);
			{
				while (1) {
					NimStringDesc* LOC6;
					if (!(res_364641 <= HEX3Atmp_364639)) goto LA5;
					i_364637 = res_364641;
					e_364630 = (*HEX3Atmp_364633).kindU.S6.sons->data[i_364637];
					LOC6 = 0;
					LOC6 = typetostring_253032((*e_364630).typ, ((NU8) 0));
					message_194161((*e_364630).info, ((NU16) 290), LOC6);
					res_364641 += ((NI) 1);
				} LA5: ;
			}
		}
	}
	{
		Tnode223809* e_364631;
		Tnode223809* HEX3Atmp_364645;
		e_364631 = 0;
		HEX3Atmp_364645 = 0;
		HEX3Atmp_364645 = (*a).tags;
		{
			NI i_364649;
			NI HEX3Atmp_364651;
			NI LOC9;
			NI res_364653;
			i_364649 = 0;
			HEX3Atmp_364651 = 0;
			LOC9 = 0;
			LOC9 = len_224098(HEX3Atmp_364645);
			HEX3Atmp_364651 = (LOC9 - 1);
			res_364653 = ((NI) 0);
			{
				while (1) {
					NimStringDesc* LOC12;
					if (!(res_364653 <= HEX3Atmp_364651)) goto LA11;
					i_364649 = res_364653;
					e_364631 = (*HEX3Atmp_364645).kindU.S6.sons->data[i_364649];
					LOC12 = 0;
					LOC12 = typetostring_253032((*e_364631).typ, ((NU8) 0));
					message_194161((*e_364631).info, ((NU16) 290), LOC12);
					res_364653 += ((NI) 1);
				} LA11: ;
			}
		}
	}
}

N_NIMCALL(void, trackpragmastmt_365610)(Teffects363008* tracked, Tnode223809* n) {
	{
		NI i_365626;
		NI HEX3Atmp_365639;
		NI LOC2;
		NI res_365642;
		i_365626 = 0;
		HEX3Atmp_365639 = 0;
		LOC2 = 0;
		LOC2 = sonslen_226387(n);
		HEX3Atmp_365639 = (NI)(LOC2 - ((NI) 1));
		res_365642 = ((NI) 0);
		{
			while (1) {
				Tnode223809* it;
				if (!(res_365642 <= HEX3Atmp_365639)) goto LA4;
				i_365626 = res_365642;
				it = (*n).kindU.S6.sons->data[i_365626];
				{
					NU16 LOC7;
					LOC7 = 0;
					LOC7 = whichpragma_252687(it);
					if (!(LOC7 == ((NU16) 160))) goto LA8;
					listeffects_364627(tracked);
				}
				LA8: ;
				res_365642 += ((NI) 1);
			} LA4: ;
		}
	}
}

N_NIMCALL(NIM_BOOL, breaksblock_366609)(Tnode223809* n) {
	NIM_BOOL result;
{	result = 0;
	switch ((*n).kind) {
	case ((NU8) 115):
	case ((NU8) 126):
	{
		{
			Tnode223809* c_366613;
			c_366613 = 0;
			{
				NI i_366641;
				NI HEX3Atmp_366643;
				NI LOC4;
				NI res_366645;
				i_366641 = 0;
				HEX3Atmp_366643 = 0;
				LOC4 = 0;
				LOC4 = len_224098(n);
				HEX3Atmp_366643 = (LOC4 - 1);
				res_366645 = ((NI) 0);
				{
					while (1) {
						if (!(res_366645 <= HEX3Atmp_366643)) goto LA6;
						i_366641 = res_366645;
						c_366613 = (*n).kindU.S6.sons->data[i_366641];
						{
							NIM_BOOL LOC9;
							LOC9 = 0;
							LOC9 = breaksblock_366609(c_366613);
							if (!LOC9) goto LA10;
							result = NIM_TRUE;
							goto BeforeRet;
						}
						LA10: ;
						res_366645 += ((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_366666)(Teffects363008* tracked, Tnode223809* n) {
	NI oldstate;
	NI oldfacts;
	NIM_BOOL stringcase;
	Ttype223847* LOC1;
	NIM_BOOL interesting;
	NIM_BOOL LOC2;
	NIM_BOOL LOC3;
	TY257854* inter;
	NI tocover;
	track_364843(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_227167((*(*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_355283((*n).kindU.S6.sons->data[((NI) 0)]);
	LA4: ;
	LOC2 = LOC3;
	if (!(LOC2)) goto LA5;
	LOC2 = ((gnotes_189398 &(IL64(1)<<(((((NU16) 258)- 237))&IL64(63))))!=0);
	LA5: ;
	interesting = LOC2;
	inter = (TY257854*) newSeq((&NTI257854), 0);
	tocover = ((NI) 0);
	{
		NI i_366764;
		NI HEX3Atmp_366915;
		NI LOC7;
		NI res_366918;
		i_366764 = 0;
		HEX3Atmp_366915 = 0;
		LOC7 = 0;
		LOC7 = len_224098(n);
		HEX3Atmp_366915 = (LOC7 - 1);
		res_366918 = ((NI) 1);
		{
			while (1) {
				Tnode223809* branch;
				if (!(res_366918 <= HEX3Atmp_366915)) goto LA9;
				i_366764 = res_366918;
				branch = (*n).kindU.S6.sons->data[i_366764];
				(*tracked).init = (TY331608*) setLengthSeq(&((*tracked).init)->Sup, sizeof(NI), ((NI) (oldstate)));
				{
					if (!interesting) goto LA12;
					(*tracked).guards = (Tnodeseq223803*) setLengthSeq(&((*tracked).guards)->Sup, sizeof(Tnode223809*), ((NI) (oldfacts)));
					addcasebranchfacts_359137((&(*tracked).guards), n, i_366764);
				}
				LA12: ;
				{
					NI i_366807;
					NI HEX3Atmp_366900;
					NI LOC15;
					NI res_366903;
					i_366807 = 0;
					HEX3Atmp_366900 = 0;
					LOC15 = 0;
					LOC15 = len_224098(branch);
					HEX3Atmp_366900 = (LOC15 - 1);
					res_366903 = ((NI) 0);
					{
						while (1) {
							if (!(res_366903 <= HEX3Atmp_366900)) goto LA17;
							i_366807 = res_366903;
							track_364843(tracked, (*branch).kindU.S6.sons->data[i_366807]);
							res_366903 += ((NI) 1);
						} LA17: ;
					}
				}
				{
					Tnode223809* LOC20;
					NIM_BOOL LOC21;
					LOC20 = 0;
					LOC20 = lastson_226406(branch);
					LOC21 = 0;
					LOC21 = breaksblock_366609(LOC20);
					if (!!(LOC21)) goto LA22;
					tocover += ((NI) 1);
				}
				LA22: ;
				{
					NI i_366845;
					NI HEX3Atmp_366908;
					NI res_366911;
					i_366845 = 0;
					HEX3Atmp_366908 = 0;
					HEX3Atmp_366908 = (((*tracked).init ? (*tracked).init->Sup.len : 0) - 1);
					res_366911 = oldstate;
					{
						while (1) {
							if (!(res_366911 <= HEX3Atmp_366908)) goto LA26;
							i_366845 = res_366911;
							addtointersection_364082((&inter), (*tracked).init->data[i_366845]);
							res_366911 += ((NI) 1);
						} LA26: ;
					}
				}
				res_366918 += ((NI) 1);
			} LA9: ;
		}
	}
	(*tracked).init = (TY331608*) setLengthSeq(&((*tracked).init)->Sup, sizeof(NI), ((NI) (oldstate)));
	{
		NIM_BOOL LOC29;
		Tnode223809* LOC31;
		LOC29 = 0;
		LOC29 = !(stringcase);
		if (LOC29) goto LA30;
		LOC31 = 0;
		LOC31 = lastson_226406(n);
		LOC29 = ((*LOC31).kind == ((NU8) 88));
		LA30: ;
		if (!LOC29) goto LA32;
		{
			NI id_366875;
			NI count_366876;
			NI i_366925;
			NI L_366927;
			id_366875 = 0;
			count_366876 = 0;
			i_366925 = ((NI) 0);
			L_366927 = (inter ? inter->Sup.len : 0);
			{
				while (1) {
					if (!(i_366925 < L_366927)) goto LA36;
					id_366875 = inter->data[i_366925].Field0;
					count_366876 = inter->data[i_366925].Field1;
					{
						if (!(tocover <= count_366876)) goto LA39;
						(*tracked).init = (TY331608*) incrSeqV2(&((*tracked).init)->Sup, sizeof(NI));
						(*tracked).init->data[(*tracked).init->Sup.len] = id_366875;
						++(*tracked).init->Sup.len;
					}
					LA39: ;
					i_366925 += ((NI) 1);
				} LA36: ;
			}
		}
	}
	LA32: ;
	(*tracked).guards = (Tnodeseq223803*) setLengthSeq(&((*tracked).guards)->Sup, sizeof(Tnode223809*), ((NI) (oldfacts)));
}

N_NIMCALL(void, trackif_366970)(Teffects363008* tracked, Tnode223809* n) {
	NI oldfacts;
	NI oldstate;
	TY257854* inter;
	NI tocover;
	track_364843(tracked, (*(*n).kindU.S6.sons->data[((NI) 0)]).kindU.S6.sons->data[((NI) 0)]);
	oldfacts = ((*tracked).guards ? (*tracked).guards->Sup.len : 0);
	addfact_356392((&(*tracked).guards), (*(*n).kindU.S6.sons->data[((NI) 0)]).kindU.S6.sons->data[((NI) 0)]);
	oldstate = ((*tracked).init ? (*tracked).init->Sup.len : 0);
	inter = (TY257854*) newSeq((&NTI257854), 0);
	tocover = ((NI) 0);
	track_364843(tracked, (*(*n).kindU.S6.sons->data[((NI) 0)]).kindU.S6.sons->data[((NI) 1)]);
	{
		NIM_BOOL LOC3;
		LOC3 = 0;
		LOC3 = breaksblock_366609((*(*n).kindU.S6.sons->data[((NI) 0)]).kindU.S6.sons->data[((NI) 1)]);
		if (!!(LOC3)) goto LA4;
		tocover += ((NI) 1);
	}
	LA4: ;
	{
		NI i_367054;
		NI HEX3Atmp_367218;
		NI res_367221;
		i_367054 = 0;
		HEX3Atmp_367218 = 0;
		HEX3Atmp_367218 = (((*tracked).init ? (*tracked).init->Sup.len : 0) - 1);
		res_367221 = oldstate;
		{
			while (1) {
				if (!(res_367221 <= HEX3Atmp_367218)) goto LA8;
				i_367054 = res_367221;
				addtointersection_364082((&inter), (*tracked).init->data[i_367054]);
				res_367221 += ((NI) 1);
			} LA8: ;
		}
	}
	{
		NI i_367075;
		NI HEX3Atmp_367250;
		NI LOC10;
		NI res_367253;
		i_367075 = 0;
		HEX3Atmp_367250 = 0;
		LOC10 = 0;
		LOC10 = len_224098(n);
		HEX3Atmp_367250 = (LOC10 - 1);
		res_367253 = ((NI) 1);
		{
			while (1) {
				Tnode223809* branch;
				if (!(res_367253 <= HEX3Atmp_367250)) goto LA12;
				i_367075 = res_367253;
				branch = (*n).kindU.S6.sons->data[i_367075];
				(*tracked).guards = (Tnodeseq223803*) setLengthSeq(&((*tracked).guards)->Sup, sizeof(Tnode223809*), ((NI) (oldfacts)));
				{
					NI j_367098;
					NI HEX3Atmp_367227;
					NI res_367230;
					j_367098 = 0;
					HEX3Atmp_367227 = 0;
					HEX3Atmp_367227 = (NI)(i_367075 - ((NI) 1));
					res_367230 = ((NI) 0);
					{
						while (1) {
							if (!(res_367230 <= HEX3Atmp_367227)) goto LA15;
							j_367098 = res_367230;
							addfactneg_356426((&(*tracked).guards), (*(*n).kindU.S6.sons->data[j_367098]).kindU.S6.sons->data[((NI) 0)]);
							res_367230 += ((NI) 1);
						} LA15: ;
					}
				}
				{
					NI LOC18;
					LOC18 = 0;
					LOC18 = len_224098(branch);
					if (!(((NI) 1) < LOC18)) goto LA19;
					addfact_356392((&(*tracked).guards), (*branch).kindU.S6.sons->data[((NI) 0)]);
				}
				LA19: ;
				(*tracked).init = (TY331608*) setLengthSeq(&((*tracked).init)->Sup, sizeof(NI), ((NI) (oldstate)));
				{
					NI i_367134;
					NI HEX3Atmp_367235;
					NI LOC22;
					NI res_367238;
					i_367134 = 0;
					HEX3Atmp_367235 = 0;
					LOC22 = 0;
					LOC22 = len_224098(branch);
					HEX3Atmp_367235 = (LOC22 - 1);
					res_367238 = ((NI) 0);
					{
						while (1) {
							if (!(res_367238 <= HEX3Atmp_367235)) goto LA24;
							i_367134 = res_367238;
							track_364843(tracked, (*branch).kindU.S6.sons->data[i_367134]);
							res_367238 += ((NI) 1);
						} LA24: ;
					}
				}
				{
					Tnode223809* LOC27;
					NIM_BOOL LOC28;
					LOC27 = 0;
					LOC27 = lastson_226406(branch);
					LOC28 = 0;
					LOC28 = breaksblock_366609(LOC27);
					if (!!(LOC28)) goto LA29;
					tocover += ((NI) 1);
				}
				LA29: ;
				{
					NI i_367172;
					NI HEX3Atmp_367243;
					NI res_367246;
					i_367172 = 0;
					HEX3Atmp_367243 = 0;
					HEX3Atmp_367243 = (((*tracked).init ? (*tracked).init->Sup.len : 0) - 1);
					res_367246 = oldstate;
					{
						while (1) {
							if (!(res_367246 <= HEX3Atmp_367243)) goto LA33;
							i_367172 = res_367246;
							addtointersection_364082((&inter), (*tracked).init->data[i_367172]);
							res_367246 += ((NI) 1);
						} LA33: ;
					}
				}
				res_367253 += ((NI) 1);
			} LA12: ;
		}
	}
	(*tracked).init = (TY331608*) setLengthSeq(&((*tracked).init)->Sup, sizeof(NI), ((NI) (oldstate)));
	{
		Tnode223809* LOC36;
		NI LOC37;
		LOC36 = 0;
		LOC36 = lastson_226406(n);
		LOC37 = 0;
		LOC37 = len_224098(LOC36);
		if (!(LOC37 == ((NI) 1))) goto LA38;
		{
			NI id_367194;
			NI count_367195;
			NI i_367260;
			NI L_367262;
			id_367194 = 0;
			count_367195 = 0;
			i_367260 = ((NI) 0);
			L_367262 = (inter ? inter->Sup.len : 0);
			{
				while (1) {
					if (!(i_367260 < L_367262)) goto LA42;
					id_367194 = inter->data[i_367260].Field0;
					count_367195 = inter->data[i_367260].Field1;
					{
						if (!(tocover <= count_367195)) goto LA45;
						(*tracked).init = (TY331608*) incrSeqV2(&((*tracked).init)->Sup, sizeof(NI));
						(*tracked).init->data[(*tracked).init->Sup.len] = id_367194;
						++(*tracked).init->Sup.len;
					}
					LA45: ;
					i_367260 += ((NI) 1);
				} LA42: ;
			}
		}
	}
	LA38: ;
	(*tracked).guards = (Tnodeseq223803*) setLengthSeq(&((*tracked).guards)->Sup, sizeof(Tnode223809*), ((NI) (oldfacts)));
}

N_NIMCALL(void, trackblock_367323)(Teffects363008* tracked, Tnode223809* n) {
	{
		NI oldstate;
		if (!((*n).kind == ((NU8) 115) || (*n).kind == ((NU8) 126))) goto LA3;
		oldstate = ((NI) -1);
		{
			NI i_367358;
			NI HEX3Atmp_367380;
			NI LOC6;
			NI res_367383;
			i_367358 = 0;
			HEX3Atmp_367380 = 0;
			LOC6 = 0;
			LOC6 = len_224098(n);
			HEX3Atmp_367380 = (LOC6 - 1);
			res_367383 = ((NI) 0);
			{
				while (1) {
					if (!(res_367383 <= HEX3Atmp_367380)) goto LA8;
					i_367358 = res_367383;
					{
						NIM_BOOL LOC11;
						LOC11 = 0;
						LOC11 = hassubnodewith_228439((*n).kindU.S6.sons->data[i_367358], ((NU8) 110));
						if (!LOC11) goto LA12;
						{
							if (!(oldstate < ((NI) 0))) goto LA16;
							oldstate = ((*tracked).init ? (*tracked).init->Sup.len : 0);
						}
						LA16: ;
					}
					LA12: ;
					track_364843(tracked, (*n).kindU.S6.sons->data[i_367358]);
					res_367383 += ((NI) 1);
				} LA8: ;
			}
		}
		{
			if (!(((NI) 0) < oldstate)) goto LA20;
			(*tracked).init = (TY331608*) setLengthSeq(&((*tracked).init)->Sup, sizeof(NI), ((NI) (oldstate)));
		}
		LA20: ;
	}
	goto LA1;
	LA3: ;
	{
		track_364843(tracked, n);
	}
	LA1: ;
}

N_NIMCALL(NIM_BOOL, istrue_367402)(Tnode223809* 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_363114)(Ttype223847* t_363116) {
	NI16 result;
	Ttype223847* t;
	result = 0;
	t = t_363116;
	{
		NIM_BOOL LOC3;
		NI LOC5;
		LOC3 = 0;
		LOC3 = ((*t).kind == ((NU8) 11));
		if (!(LOC3)) goto LA4;
		LOC5 = 0;
		LOC5 = len_226369(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_363167)(Teffects363008* a, Tnode223809* pragma) {
	NI16 firstll;
{	{
		if (!!(((*pragma).kind == ((NU8) 34)))) goto LA3;
		localerror_194128((*pragma).info, ((NU16) 4), ((NimStringDesc*) &TMP3486));
		goto BeforeRet;
	}
	LA3: ;
	firstll = ((NI16) -1);
	{
		Tnode223809* x_363181;
		Tnode223809* HEX3Atmp_363200;
		x_363181 = 0;
		HEX3Atmp_363200 = 0;
		HEX3Atmp_363200 = HEX5BHEX5D_224244(pragma, ((NI) 1));
		{
			NI i_363204;
			NI HEX3Atmp_363206;
			NI LOC7;
			NI res_363208;
			i_363204 = 0;
			HEX3Atmp_363206 = 0;
			LOC7 = 0;
			LOC7 = len_224098(HEX3Atmp_363200);
			HEX3Atmp_363206 = (LOC7 - 1);
			res_363208 = ((NI) 0);
			{
				while (1) {
					NI16 thisll;
					if (!(res_363208 <= HEX3Atmp_363206)) goto LA9;
					i_363204 = res_363208;
					x_363181 = (*HEX3Atmp_363200).kindU.S6.sons->data[i_363204];
					thisll = getlocklevel_363114((*x_363181).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_226096(thisll);
							LOC20 = rawNewString(LOC21->Sup.len + 20);
appendString(LOC20, ((NimStringDesc*) &TMP3487));
appendString(LOC20, LOC21);
							localerror_194139((*x_363181).info, LOC20);
						}
						goto LA14;
						LA18: ;
						{
							if (!(firstll < ((NI16) 0))) goto LA23;
							firstll = thisll;
						}
						goto LA14;
						LA23: ;
						{
							if (!!((firstll == thisll))) goto LA26;
							localerror_194128((*x_363181).info, ((NU16) 4), ((NimStringDesc*) &TMP3488));
						}
						goto LA14;
						LA26: ;
						LA14: ;
						(*a).maxlocklevel = (((*a).maxlocklevel >= firstll) ? (*a).maxlocklevel : firstll);
					}
					LA12: ;
					(*a).locked = (Tnodeseq223803*) incrSeqV2(&((*a).locked)->Sup, sizeof(Tnode223809*));
					asgnRefNoCycle((void**) (&(*a).locked->data[(*a).locked->Sup.len]), x_363181);
					++(*a).locked->Sup.len;
					res_363208 += ((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_194128((*pragma).info, ((NU16) 4), ((NimStringDesc*) &TMP3489));
		}
		LA38: ;
		(*a).currlocklevel = firstll;
	}
	LA32: ;
	}BeforeRet: ;
}

N_NIMCALL(void, track_364843)(Teffects363008* tracked, Tnode223809* n) {
	switch ((*n).kind) {
	case ((NU8) 3):
	{
		usevar_363844(tracked, n);
	}
	break;
	case ((NU8) 108):
	{
		(*(*n).kindU.S6.sons->data[((NI) 0)]).info = (*n).info;
		addeffect_364300(tracked, (*n).kindU.S6.sons->data[((NI) 0)], NIM_FALSE);
		{
			NI i_367531;
			NI HEX3Atmp_368070;
			NI LOC4;
			NI res_368073;
			i_367531 = 0;
			HEX3Atmp_368070 = 0;
			LOC4 = 0;
			LOC4 = safelen_224126(n);
			HEX3Atmp_368070 = (LOC4 - 1);
			res_368073 = ((NI) 0);
			{
				while (1) {
					if (!(res_368073 <= HEX3Atmp_368070)) goto LA6;
					i_367531 = res_368073;
					track_364843(tracked, (*n).kindU.S6.sons->data[i_367531]);
					res_368073 += ((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):
	{
		Tnode223809* a;
		Ttype223847* op;
		a = (*n).kindU.S6.sons->data[((NI) 0)];
		op = (*a).typ;
		{
			NIM_BOOL LOC10;
			NIM_BOOL LOC11;
			Tnode223809* 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_366161((*a).kindU.S4.sym);
				mergelocklevels_366211(tracked, n, LOC24);
			}
			goto LA16;
			LA18: ;
			{
				mergelocklevels_366211(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_366226(tracked, n, (*a).kindU.S4.sym);
			}
			goto LA26;
			LA30: ;
			{
				NI LOC33;
				LOC33 = 0;
				LOC33 = len_224098(effectlist);
				if (!(LOC33 == ((NI) 0))) goto LA34;
				{
					NIM_BOOL LOC38;
					LOC38 = 0;
					LOC38 = isforwardedproc_365579(a);
					if (!LOC38) goto LA39;
					propagateeffects_366226(tracked, n, (*a).kindU.S4.sym);
				}
				goto LA36;
				LA39: ;
				{
					NIM_BOOL LOC42;
					LOC42 = 0;
					LOC42 = isindirectcall_365513(a, (*tracked).owner);
					if (!LOC42) goto LA43;
					assumetheworst_366391(tracked, n, op);
				}
				goto LA36;
				LA43: ;
				LA36: ;
			}
			goto LA26;
			LA34: ;
			{
				mergeeffects_364515(tracked, (*effectlist).kindU.S6.sons->data[((NI) 0)], n);
				mergetags_364571(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_366130(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_363693(n);
						markgcunsafe_363723(tracked, a);
					}
					LA57: ;
				}
				LA51: ;
			}
			LA26: ;
		}
		LA14: ;
		{
			NI i_367682;
			NI HEX3Atmp_368078;
			NI LOC60;
			NI res_368081;
			i_367682 = 0;
			HEX3Atmp_368078 = 0;
			LOC60 = 0;
			LOC60 = len_224098(n);
			HEX3Atmp_368078 = (LOC60 - 1);
			res_368081 = ((NI) 1);
			{
				while (1) {
					Ttype223847* LOC63;
					if (!(res_368081 <= HEX3Atmp_368078)) goto LA62;
					i_367682 = res_368081;
					LOC63 = 0;
					LOC63 = paramtype_367443(op, i_367682);
					trackoperand_366446(tracked, (*n).kindU.S6.sons->data[i_367682], LOC63);
					res_368081 += ((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_363646(tracked, (*n).kindU.S6.sons->data[((NI) 1)]);
		}
		LA68: ;
		{
			NI i_367725;
			NI HEX3Atmp_368086;
			NI LOC71;
			NI res_368089;
			i_367725 = 0;
			HEX3Atmp_368086 = 0;
			LOC71 = 0;
			LOC71 = safelen_224126(n);
			HEX3Atmp_368086 = (LOC71 - 1);
			res_368089 = ((NI) 0);
			{
				while (1) {
					if (!(res_368089 <= HEX3Atmp_368086)) goto LA73;
					i_367725 = res_368089;
					track_364843(tracked, (*n).kindU.S6.sons->data[i_367725]);
					res_368089 += ((NI) 1);
				} LA73: ;
			}
		}
	}
	break;
	case ((NU8) 45):
	{
		guarddotaccess_363287(tracked, n);
		{
			NI i_367745;
			NI HEX3Atmp_368094;
			NI LOC76;
			NI res_368097;
			i_367745 = 0;
			HEX3Atmp_368094 = 0;
			LOC76 = 0;
			LOC76 = len_224098(n);
			HEX3Atmp_368094 = (LOC76 - 1);
			res_368097 = ((NI) 0);
			{
				while (1) {
					if (!(res_368097 <= HEX3Atmp_368094)) goto LA78;
					i_367745 = res_368097;
					track_364843(tracked, (*n).kindU.S6.sons->data[i_367745]);
					res_368097 += ((NI) 1);
				} LA78: ;
			}
		}
	}
	break;
	case ((NU8) 46):
	{
		track_364843(tracked, (*n).kindU.S6.sons->data[((NI) 0)]);
		{
			if (!((gnotes_189398 &(IL64(1)<<(((((NU16) 258)- 237))&IL64(63))))!=0)) goto LA82;
			checkfieldaccess_359409((*tracked).guards, n);
		}
		LA82: ;
	}
	break;
	case ((NU8) 106):
	{
		tracktrystmt_364850(tracked, n);
	}
	break;
	case ((NU8) 90):
	{
		trackpragmastmt_365610(tracked, n);
	}
	break;
	case ((NU8) 73):
	case ((NU8) 74):
	{
		track_364843(tracked, (*n).kindU.S6.sons->data[((NI) 1)]);
		initvar_363515(tracked, (*n).kindU.S6.sons->data[((NI) 0)], NIM_TRUE);
		invalidatefacts_356659((&(*tracked).guards), (*n).kindU.S6.sons->data[((NI) 0)]);
		track_364843(tracked, (*n).kindU.S6.sons->data[((NI) 0)]);
		addasgnfact_359086((&(*tracked).guards), (*n).kindU.S6.sons->data[((NI) 0)], (*n).kindU.S6.sons->data[((NI) 1)]);
		notnilcheck_366292(tracked, (*n).kindU.S6.sons->data[((NI) 1)], (*(*n).kindU.S6.sons->data[((NI) 0)]).typ);
	}
	break;
	case ((NU8) 99):
	case ((NU8) 100):
	{
		{
			Tnode223809* child_367801;
			child_367801 = 0;
			{
				NI i_368113;
				NI HEX3Atmp_368115;
				NI LOC90;
				NI res_368117;
				i_368113 = 0;
				HEX3Atmp_368115 = 0;
				LOC90 = 0;
				LOC90 = len_224098(n);
				HEX3Atmp_368115 = (LOC90 - 1);
				res_368117 = ((NI) 0);
				{
					while (1) {
						Tnode223809* last;
						if (!(res_368117 <= HEX3Atmp_368115)) goto LA92;
						i_368113 = res_368117;
						child_367801 = (*n).kindU.S6.sons->data[i_368113];
						last = lastson_226406(child_367801);
						{
							if (!!(((*last).kind == ((NU8) 1)))) goto LA95;
							track_364843(tracked, last);
						}
						LA95: ;
						{
							NIM_BOOL LOC99;
							LOC99 = 0;
							LOC99 = ((*child_367801).kind == ((NU8) 35));
							if (!(LOC99)) goto LA100;
							LOC99 = !(((*last).kind == ((NU8) 1)));
							LA100: ;
							if (!LOC99) goto LA101;
							{
								NI i_367841;
								NI HEX3Atmp_368103;
								NI LOC104;
								NI res_368106;
								i_367841 = 0;
								HEX3Atmp_368103 = 0;
								LOC104 = 0;
								LOC104 = len_224098(child_367801);
								HEX3Atmp_368103 = (NI)(LOC104 - ((NI) 3));
								res_368106 = ((NI) 0);
								{
									while (1) {
										if (!(res_368106 <= HEX3Atmp_368103)) goto LA106;
										i_367841 = res_368106;
										initvar_363515(tracked, (*child_367801).kindU.S6.sons->data[i_367841], NIM_FALSE);
										addasgnfact_359086((&(*tracked).guards), (*child_367801).kindU.S6.sons->data[i_367841], last);
										notnilcheck_366292(tracked, last, (*(*child_367801).kindU.S6.sons->data[i_367841]).typ);
										res_368106 += ((NI) 1);
									} LA106: ;
								}
							}
						}
						LA101: ;
						res_368117 += ((NI) 1);
					} LA92: ;
				}
			}
		}
	}
	break;
	case ((NU8) 97):
	{
		trackcase_366666(tracked, n);
	}
	break;
	case ((NU8) 93):
	case ((NU8) 92):
	case ((NU8) 48):
	{
		trackif_366970(tracked, n);
	}
	break;
	case ((NU8) 112):
	case ((NU8) 127):
	{
		trackblock_367323(tracked, (*n).kindU.S6.sons->data[((NI) 1)]);
	}
	break;
	case ((NU8) 96):
	{
		track_364843(tracked, (*n).kindU.S6.sons->data[((NI) 0)]);
		{
			NIM_BOOL LOC113;
			LOC113 = 0;
			LOC113 = istrue_367402((*n).kindU.S6.sons->data[((NI) 0)]);
			if (!LOC113) goto LA114;
			trackblock_367323(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_356392((&(*tracked).guards), (*n).kindU.S6.sons->data[((NI) 0)]);
			track_364843(tracked, (*n).kindU.S6.sons->data[((NI) 1)]);
			(*tracked).init = (TY331608*) setLengthSeq(&((*tracked).init)->Sup, sizeof(NI), ((NI) (oldstate)));
			(*tracked).guards = (Tnodeseq223803*) setLengthSeq(&((*tracked).guards)->Sup, sizeof(Tnode223809*), ((NI) (oldfacts)));
		}
		LA111: ;
	}
	break;
	case ((NU8) 94):
	case ((NU8) 95):
	{
		NI oldstate;
		oldstate = ((*tracked).init ? (*tracked).init->Sup.len : 0);
		{
			NI i_367918;
			NI HEX3Atmp_368121;
			NI LOC119;
			NI res_368124;
			i_367918 = 0;
			HEX3Atmp_368121 = 0;
			LOC119 = 0;
			LOC119 = len_224098(n);
			HEX3Atmp_368121 = (LOC119 - 1);
			res_368124 = ((NI) 0);
			{
				while (1) {
					if (!(res_368124 <= HEX3Atmp_368121)) goto LA121;
					i_367918 = res_368124;
					track_364843(tracked, (*n).kindU.S6.sons->data[i_367918]);
					res_368124 += ((NI) 1);
				} LA121: ;
			}
		}
		(*tracked).init = (TY331608*) setLengthSeq(&((*tracked).init)->Sup, sizeof(NI), ((NI) (oldstate)));
	}
	break;
	case ((NU8) 38):
	{
		NI oldfacts;
		track_364843(tracked, (*n).kindU.S6.sons->data[((NI) 0)]);
		oldfacts = ((*tracked).guards ? (*tracked).guards->Sup.len : 0);
		{
			NI i_367958;
			NI HEX3Atmp_368129;
			NI LOC124;
			NI res_368132;
			i_367958 = 0;
			HEX3Atmp_368129 = 0;
			LOC124 = 0;
			LOC124 = len_224098(n);
			HEX3Atmp_368129 = (LOC124 - 1);
			res_368132 = ((NI) 1);
			{
				while (1) {
					Tnode223809* x;
					if (!(res_368132 <= HEX3Atmp_368129)) goto LA126;
					i_367958 = res_368132;
					x = (*n).kindU.S6.sons->data[i_367958];
					track_364843(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_359059((&(*tracked).guards), x);
					}
					LA131: ;
					res_368132 += ((NI) 1);
				} LA126: ;
			}
		}
		(*tracked).guards = (Tnodeseq223803*) setLengthSeq(&((*tracked).guards)->Sup, sizeof(Tnode223809*), ((NI) (oldfacts)));
	}
	break;
	case ((NU8) 91):
	{
		Tnode223809* pragmalist;
		NI oldlocked;
		NI16 oldlocklevel;
		Tnode223809* LOC143;
		pragmalist = (*n).kindU.S6.sons->data[((NI) 0)];
		oldlocked = ((*tracked).locked ? (*tracked).locked->Sup.len : 0);
		oldlocklevel = (*tracked).currlocklevel;
		{
			NI i_368026;
			NI HEX3Atmp_368137;
			NI LOC135;
			NI res_368140;
			i_368026 = 0;
			HEX3Atmp_368137 = 0;
			LOC135 = 0;
			LOC135 = len_224098(pragmalist);
			HEX3Atmp_368137 = (LOC135 - 1);
			res_368140 = ((NI) 0);
			{
				while (1) {
					if (!(res_368140 <= HEX3Atmp_368137)) goto LA137;
					i_368026 = res_368140;
					{
						NU16 LOC140;
						LOC140 = 0;
						LOC140 = whichpragma_252687((*pragmalist).kindU.S6.sons->data[i_368026]);
						if (!(LOC140 == ((NU16) 196))) goto LA141;
						locklocations_363167(tracked, (*pragmalist).kindU.S6.sons->data[i_368026]);
					}
					LA141: ;
					res_368140 += ((NI) 1);
				} LA137: ;
			}
		}
		LOC143 = 0;
		LOC143 = lastson_226406(n);
		track_364843(tracked, LOC143);
		(*tracked).locked = (Tnodeseq223803*) setLengthSeq(&((*tracked).locked)->Sup, sizeof(Tnode223809*), ((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_368067;
			NI HEX3Atmp_368145;
			NI LOC147;
			NI res_368148;
			i_368067 = 0;
			HEX3Atmp_368145 = 0;
			LOC147 = 0;
			LOC147 = safelen_224126(n);
			HEX3Atmp_368145 = (LOC147 - 1);
			res_368148 = ((NI) 0);
			{
				while (1) {
					if (!(res_368148 <= HEX3Atmp_368145)) goto LA149;
					i_368067 = res_368148;
					track_364843(tracked, (*n).kindU.S6.sons->data[i_368067]);
					res_368148 += ((NI) 1);
				} LA149: ;
			}
		}
	}
	break;
	}
}

static N_INLINE(NIM_BOOL, isemptytype_228932)(Ttype223847* 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_363755)(Tsym223841* s, NIM_BOOL onlywarning, Intset220056* cyclecheck) {
	Tsym223841* 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_220898(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: ;
		{
			TY191306 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*) &TMP3491), LOC17, 2);
			message_194161((*s).info, msgkind, LOC18);
		}
		goto LA13;
		LA15: ;
		{
			TY191306 LOC22;
			NimStringDesc* LOC23;
			if (!((520192 &(1<<(((*u).kind)&31)))!=0)) goto LA20;
			listgcunsafety_363755(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*) &TMP3492), LOC22, 2);
			message_194161((*s).info, msgkind, LOC23);
		}
		goto LA13;
		LA20: ;
		{
			NimStringDesc* LOC30;
			{
				NimStringDesc* LOC29;
				if (!!(((*u).kind == ((NU8) 0)))) goto LA27;
				LOC29 = 0;
				LOC29 = HEX24_194279(TMP3493);
				internalerror_194191(LOC29);
			}
			LA27: ;
			LOC30 = 0;
			LOC30 = nsuFormatSingleElem(((NimStringDesc*) &TMP3494), (*(*s).name).s);
			message_194161((*u).info, msgkind, LOC30);
		}
		LA13: ;
	}
	LA6: ;
}

N_NIMCALL(void, listgcunsafety_363832)(Tsym223841* s, NIM_BOOL onlywarning) {
	Intset220056 cyclecheck;
	memset((void*)(&cyclecheck), 0, sizeof(cyclecheck));
	chckNil((void*)(&cyclecheck));
	memset((void*)(&cyclecheck), 0, sizeof(cyclecheck));
	initintset_220927((&cyclecheck));
	listgcunsafety_363755(s, onlywarning, (&cyclecheck));
}

N_NIMCALL(void, trackproc_368783)(Tsym223841* s, Tnode223809* body) {
	Tnode223809* effects;
	Teffects363008 t;
	Tnode223809* p;
	Tnode223809* raisesspec;
	Tnode223809* tagsspec;
{	effects = (*(*(*s).typ).n).kindU.S6.sons->data[((NI) 0)];
	{
		NimStringDesc* LOC5;
		if (!!(((*effects).kind == ((NU8) 152)))) goto LA3;
		LOC5 = 0;
		LOC5 = HEX24_194279(TMP3463);
		internalerror_194191(LOC5);
	}
	LA3: ;
	{
		if (!(((*s).flags &(1<<((((NU8) 4))&31)))!=0)) goto LA8;
		goto BeforeRet;
	}
	LA8: ;
	{
		NI LOC12;
		LOC12 = 0;
		LOC12 = len_224098(effects);
		if (!(LOC12 == ((NI) 4))) goto LA13;
		goto BeforeRet;
	}
	LA13: ;
	memset((void*)(&t), 0, sizeof(t));
	initeffects_368704(effects, s, (&t));
	track_364843((&t), body);
	{
		NIM_BOOL LOC17;
		NIM_BOOL LOC18;
		NIM_BOOL LOC19;
		Tsym223841* res;
		LOC17 = 0;
		LOC18 = 0;
		LOC19 = 0;
		LOC19 = isemptytype_228932((*(*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_363853(t.init->data, t.init->Sup.len, (*res).Sup.id);
			if (!!(LOC26)) goto LA27;
			message_194161((*body).info, ((NU16) 257), ((NimStringDesc*) &TMP3490));
		}
		LA27: ;
	}
	LA22: ;
	p = (*(*s).ast).kindU.S6.sons->data[((NI) 4)];
	raisesspec = effectspec_365661(p, ((NU16) 156));
	{
		if (!!(raisesspec == 0)) goto LA31;
		checkraisesspec_368278(raisesspec, t.exc, ((NimStringDesc*) &TMP3411), NIM_TRUE, subtyperelation_368251);
		asgnRefNoCycle((void**) (&(*effects).kindU.S6.sons->data[((NI) 0)]), raisesspec);
	}
	LA31: ;
	tagsspec = effectspec_365661(p, ((NU16) 161));
	{
		if (!!(tagsspec == 0)) goto LA35;
		checkraisesspec_368278(tagsspec, t.tags, ((NimStringDesc*) &TMP3415), NIM_FALSE, subtyperelation_368251);
		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_165132 &(1<<((((NU8) 22))&31)))!=0);
			if (!(LOC45)) goto LA46;
			LOC45 = ((gglobaloptions_165132 &(1<<((((NU8) 24))&31)))!=0);
			LA46: ;
			if (!LOC45) goto LA47;
			listgcunsafety_363832(s, NIM_FALSE);
		}
		goto LA43;
		LA47: ;
		{
			listgcunsafety_363832(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: ;
	{
		TY191306 LOC61;
		NimStringDesc* LOC62;
		if (!((*(*s).typ).locklevel < t.maxlocklevel)) goto LA59;
		memset((void*)LOC61, 0, sizeof(LOC61));
		LOC61[0] = HEX24_226096((*(*s).typ).locklevel);
		LOC61[1] = HEX24_226096(t.maxlocklevel);
		LOC62 = 0;
		LOC62 = nsuFormatOpenArray(((NimStringDesc*) &TMP3495), LOC61, 2);
		message_194161((*s).info, ((NU16) 265), LOC62);
	}
	goto LA54;
	LA59: ;
	LA54: ;
	}BeforeRet: ;
}

N_NIMCALL(void, seteffectsforproctype_368612)(Ttype223847* t, Tnode223809* n) {
	Tnode223809* effects;
	Tnode223809* raisesspec;
	Tnode223809* 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_194279(TMP3538);
		internalerror_194191(LOC7);
	}
	LA5: ;
	raisesspec = effectspec_365661(n, ((NU16) 156));
	tagsspec = effectspec_365661(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_224098(effects);
			if (!!((LOC16 == ((NI) 0)))) goto LA17;
			LOC19 = 0;
			LOC19 = HEX24_194279(TMP3539);
			internalerror_194191(LOC19);
		}
		LA17: ;
		if ((*effects).kindU.S6.sons) nimGCunrefNoCycle((*effects).kindU.S6.sons);
		(*effects).kindU.S6.sons = (Tnodeseq223803*) newSeqRC1((&NTI223803), ((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_369008)(Tsym223841* module, Tnode223809* n) {
	Tnode223809* effects;
	Tnodeseq223803* LOC5;
	Teffects363008 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 = (Tnodeseq223803*) newSeq((&NTI223803), 0);
	effects = newnode_225607(((NU8) 152), (*n).info, LOC5, NIM_NIL);
	memset((void*)(&t), 0, sizeof(t));
	initeffects_368704(effects, module, (&t));
	t.istoplevel = NIM_TRUE;
	track_364843((&t), n);
	}BeforeRet: ;
}

N_NIMCALL(Tnode223809*, documenteffect_365736)(Tnode223809* n, Tnode223809* x, NU16 effecttype, NI idx) {
	Tnode223809* result;
	Tnode223809* spec;
{	result = 0;
	spec = effectspec_365661(x, effecttype);
	{
		Tsym223841* s;
		Tnode223809* actual;
		Tnode223809* real;
		Tnode223809* effects;
		NI LOC10;
		Tnodeseq223803* LOC23;
		TY279106 LOC24;
		Tident196021* 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_224098(actual);
			if (!!((LOC7 == ((NI) 4)))) goto LA8;
			goto BeforeRet;
		}
		LA8: ;
		real = (*actual).kindU.S6.sons->data[idx];
		LOC10 = 0;
		LOC10 = len_224098(real);
		effects = newnodei_225407(((NU8) 41), (*n).info, LOC10);
		{
			NI i_365782;
			NI HEX3Atmp_365800;
			NI LOC12;
			NI res_365803;
			i_365782 = 0;
			HEX3Atmp_365800 = 0;
			LOC12 = 0;
			LOC12 = len_224098(real);
			HEX3Atmp_365800 = (LOC12 - 1);
			res_365803 = ((NI) 0);
			{
				while (1) {
					NimStringDesc* t;
					Tnode223809* LOC15;
					Tident196021* LOC21;
					Tnode223809* LOC22;
					if (!(res_365803 <= HEX3Atmp_365800)) goto LA14;
					i_365782 = res_365803;
					LOC15 = 0;
					LOC15 = HEX5BHEX5D_224244(real, i_365782);
					t = typetostring_253032((*LOC15).typ, ((NU8) 0));
					{
						NIM_BOOL LOC18;
						LOC18 = 0;
						LOC18 = nsuStartsWith(t, ((NimStringDesc*) &TMP5026));
						if (!LOC18) goto LA19;
						t = copyStr(t, ((NI) 4));
					}
					LA19: ;
					LOC21 = 0;
					LOC21 = getident_196463(t);
					asgnRefNoCycle((void**) (&(*effects).kindU.S6.sons->data[i_365782]), newidentnode_225313(LOC21, (*n).info));
					LOC22 = 0;
					LOC22 = HEX5BHEX5D_224244(real, i_365782);
					asgnRefNoCycle((void**) (&(*(*effects).kindU.S6.sons->data[i_365782]).typ), (*LOC22).typ);
					res_365803 += ((NI) 1);
				} LA14: ;
			}
		}
		LOC23 = 0;
		LOC23 = (Tnodeseq223803*) newSeq((&NTI223803), 2);
		memset((void*)LOC24, 0, sizeof(LOC24));
		LOC25 = 0;
		LOC25 = getident_196463(specialwords_204338[(effecttype)- 0]);
		LOC24[0] = newidentnode_225313(LOC25, (*n).info);
		LOC24[1] = effects;
		asgnRefNoCycle((void**) (&LOC23->data[0]), LOC24[0]);
		asgnRefNoCycle((void**) (&LOC23->data[1]), LOC24[1]);
		result = newnode_225607(((NU8) 34), (*n).info, LOC23, NIM_NIL);
	}
	LA3: ;
	}BeforeRet: ;
	return result;
}

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

N_NIMCALL(Tnode223809*, documentwriteeffect_365822)(Tnode223809* n, NU8 flag, NimStringDesc* pragmaname) {
	Tnode223809* result;
	Tsym223841* s;
	Tnode223809* params;
	Tnode223809* effects;
	result = 0;
	s = (*(*n).kindU.S6.sons->data[((NI) 0)]).kindU.S4.sym;
	params = (*(*s).typ).n;
	effects = newnodei_225351(((NU8) 41), (*n).info);
	{
		NI i_365861;
		Slice90365 HEX3Atmp_365899;
		NI LOC2;
		i_365861 = 0;
		memset((void*)(&HEX3Atmp_365899), 0, sizeof(HEX3Atmp_365899));
		LOC2 = 0;
		LOC2 = len_224098(params);
		HEX3Atmp_365899 = HEX2EHEX2E_105290(((NI) 1), (LOC2 - 1));
		{
			NI x_365903;
			NI HEX3Atmp_365905;
			NI HEX3Atmp_365907;
			NI res_365909;
			x_365903 = 0;
			HEX3Atmp_365905 = 0;
			HEX3Atmp_365907 = 0;
			HEX3Atmp_365905 = HEX3Atmp_365899.a;
			HEX3Atmp_365907 = HEX3Atmp_365899.b;
			res_365909 = HEX3Atmp_365905;
			{
				while (1) {
					if (!(res_365909 <= HEX3Atmp_365907)) goto LA5;
					x_365903 = res_365909;
					i_365861 = x_365903;
					{
						NIM_BOOL LOC8;
						Tnode223809* LOC9;
						Tnode223809* LOC11;
						Tnode223809* LOC14;
						LOC8 = 0;
						LOC9 = 0;
						LOC9 = HEX5BHEX5D_224244(params, i_365861);
						LOC8 = ((*LOC9).kind == ((NU8) 3));
						if (!(LOC8)) goto LA10;
						LOC11 = 0;
						LOC11 = HEX5BHEX5D_224244(params, i_365861);
						LOC8 = (((*(*LOC11).kindU.S4.sym).flags &(1<<((flag)&31)))!=0);
						LA10: ;
						if (!LOC8) goto LA12;
						LOC14 = 0;
						LOC14 = HEX5BHEX5D_224244(params, i_365861);
						add_224165(effects, LOC14);
					}
					LA12: ;
					res_365909 += ((NI) 1);
				} LA5: ;
			}
		}
	}
	{
		NI LOC17;
		Tnodeseq223803* LOC20;
		TY279106 LOC21;
		Tident196021* LOC22;
		LOC17 = 0;
		LOC17 = len_224098(effects);
		if (!(((NI) 0) < LOC17)) goto LA18;
		LOC20 = 0;
		LOC20 = (Tnodeseq223803*) newSeq((&NTI223803), 2);
		memset((void*)LOC21, 0, sizeof(LOC21));
		LOC22 = 0;
		LOC22 = getident_196463(pragmaname);
		LOC21[0] = newidentnode_225313(LOC22, (*n).info);
		LOC21[1] = effects;
		asgnRefNoCycle((void**) (&LOC20->data[0]), LOC21[0]);
		asgnRefNoCycle((void**) (&LOC20->data[1]), LOC21[1]);
		result = newnode_225607(((NU8) 34), (*n).info, LOC20, NIM_NIL);
	}
	LA18: ;
	return result;
}

N_NIMCALL(Tnode223809*, documentneweffect_365931)(Tnode223809* n) {
	Tnode223809* result;
	Tsym223841* s;
	result = 0;
	s = (*(*n).kindU.S6.sons->data[((NI) 0)]).kindU.S4.sym;
	{
		Tident196021* LOC5;
		if (!(((*(*s).typ).flags &(1<<((((NU8) 3))&31)))!=0)) goto LA3;
		LOC5 = 0;
		LOC5 = getident_196463(((NimStringDesc*) &TMP5028));
		result = newidentnode_225313(LOC5, (*n).info);
	}
	LA3: ;
	return result;
}

N_NIMCALL(void, documentraises_365955)(Tnode223809* n) {
	Tnode223809* pragmas;
	Tnode223809* p1;
	Tnode223809* p2;
	Tnode223809* p3;
	Tnode223809* p4;
	Tnode223809* 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_365736(n, pragmas, ((NU16) 156), ((NI) 0));
	p2 = documenteffect_365736(n, pragmas, ((NU16) 161), ((NI) 3));
	p3 = documentwriteeffect_365822(n, ((NU8) 26), ((NimStringDesc*) &TMP5027));
	p4 = documentneweffect_365931(n);
	p5 = documentwriteeffect_365822(n, ((NU8) 17), ((NimStringDesc*) &TMP5029));
	{
		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_225351(((NU8) 90), (*n).info));
		}
		LA19: ;
		{
			if (!!((p1 == NIM_NIL))) goto LA23;
			add_224165((*n).kindU.S6.sons->data[((NI) 4)], p1);
		}
		LA23: ;
		{
			if (!!((p2 == NIM_NIL))) goto LA27;
			add_224165((*n).kindU.S6.sons->data[((NI) 4)], p2);
		}
		LA27: ;
		{
			if (!!((p3 == NIM_NIL))) goto LA31;
			add_224165((*n).kindU.S6.sons->data[((NI) 4)], p3);
		}
		LA31: ;
		{
			if (!!((p4 == NIM_NIL))) goto LA35;
			add_224165((*n).kindU.S6.sons->data[((NI) 4)], p4);
		}
		LA35: ;
		{
			if (!!((p5 == NIM_NIL))) goto LA39;
			add_224165((*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) {
}

