/* 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 Tsym224841 Tsym224841;
typedef struct Tnode224809 Tnode224809;
typedef struct Tidobj197015 Tidobj197015;
typedef struct TNimObject TNimObject;
typedef struct TNimType TNimType;
typedef struct TNimNode TNimNode;
typedef struct Ttypeseq224843 Ttypeseq224843;
typedef struct Tscope224835 Tscope224835;
typedef struct TY224944 TY224944;
typedef struct Tstrtable224813 Tstrtable224813;
typedef struct Tsymseq224811 Tsymseq224811;
typedef struct Ttype224847 Ttype224847;
typedef struct Tident197021 Tident197021;
typedef struct Tlineinfo189352 Tlineinfo189352;
typedef struct Tloc224823 Tloc224823;
typedef struct Ropeobj175009 Ropeobj175009;
typedef struct Tlib224827 Tlib224827;
typedef struct NimStringDesc NimStringDesc;
typedef struct TGenericSeq TGenericSeq;
typedef struct Tnodeseq224803 Tnodeseq224803;
typedef struct Intset221056 Intset221056;
typedef struct Trunk221052 Trunk221052;
typedef struct Trunkseq221054 Trunkseq221054;
typedef struct TY90959 TY90959;
typedef struct Teffects364008 Teffects364008;
typedef struct TY332608 TY332608;
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 TY258854 TY258854;
typedef struct TY258855 TY258855;
typedef struct Slice90365 Slice90365;
typedef struct Tinstantiation224831 Tinstantiation224831;
typedef struct Tlistentry140022 Tlistentry140022;
typedef struct Basechunk30840 Basechunk30840;
typedef struct Freecell30832 Freecell30832;
typedef struct TY224932 TY224932;
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  Tidobj197015  {
  TNimObject Sup;
NI id;
};
struct  Tstrtable224813  {
NI counter;
Tsymseq224811* data;
};
struct  Tlineinfo189352  {
NI16 line;
NI16 col;
NI32 fileindex;
};
struct  Tloc224823  {
NU8 k;
NU8 s;
NU16 flags;
Ttype224847* t;
Ropeobj175009* r;
Ropeobj175009* heaproot;
};
struct  Tsym224841  {
  Tidobj197015 Sup;
NU8 kind;
union{
struct {Ttypeseq224843* typeinstcache;
Tscope224835* typscope;
} S1;
struct {TY224944* procinstcache;
Tsym224841* gcunsafetyreason;
} S2;
struct {TY224944* usedgenerics;
Tstrtable224813 tab;
} S3;
struct {Tsym224841* guard;
NI bitsize;
} S4;
} kindU;
NU8 magic;
Ttype224847* typ;
Tident197021* name;
Tlineinfo189352 info;
Tsym224841* owner;
NU32 flags;
Tnode224809* ast;
NU32 options;
NI position;
NI offset;
Tloc224823 loc;
Tlib224827* annex;
Tnode224809* constraint;
};
struct  Ttype224847  {
  Tidobj197015 Sup;
NU8 kind;
NU8 callconv;
NU32 flags;
Ttypeseq224843* sons;
Tnode224809* n;
Tsym224841* owner;
Tsym224841* sym;
Tsym224841* destructor;
Tsym224841* deepcopy;
Tsym224841* assignment;
NI64 size;
NI16 align;
NI16 locklevel;
Tloc224823 loc;
};
struct  TGenericSeq  {
NI len;
NI reserved;
};
struct  NimStringDesc  {
  TGenericSeq Sup;
NIM_CHAR data[SEQ_DECL_SIZE];
};
struct  Tnode224809  {
Ttype224847* typ;
Tlineinfo189352 info;
NU16 flags;
NU8 kind;
union{
struct {NI64 intval;
} S1;
struct {NF floatval;
} S2;
struct {NimStringDesc* strval;
} S3;
struct {Tsym224841* sym;
} S4;
struct {Tident197021* ident;
} S5;
struct {Tnodeseq224803* sons;
} S6;
} kindU;
NimStringDesc* comment;
};
typedef N_NIMCALL_PTR(NIM_BOOL, TY369284) (Tnode224809* a, Tnode224809* b);
struct  Intset221056  {
NI counter;
NI max;
Trunk221052* head;
Trunkseq221054* data;
};
struct  Tident197021  {
  Tidobj197015 Sup;
NimStringDesc* s;
Tident197021* next;
NI h;
};
typedef NimStringDesc* TY192306[2];
struct TY90959 {
NimStringDesc* Field0;
NI Field1;
};
struct  Teffects364008  {
Tnode224809* exc;
Tnode224809* tags;
NI bottom;
NI intrystmt;
Tsym224841* owner;
TY332608* init;
Tnodeseq224803* guards;
Tnodeseq224803* 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 TY482044[20];
struct TY258855 {
NI Field0;
NI Field1;
};
typedef Tnode224809* TY280106[2];
typedef NimStringDesc* TY205342[261];
struct  Slice90365  {
NI a;
NI b;
};
struct  Tscope224835  {
NI depthlevel;
Tstrtable224813 symbols;
Tnodeseq224803* usingsyms;
Tscope224835* parent;
};
struct  Ropeobj175009  {
  TNimObject Sup;
Ropeobj175009* left;
Ropeobj175009* right;
NI length;
NimStringDesc* data;
};
struct  Tlistentry140022  {
  TNimObject Sup;
Tlistentry140022* prev;
Tlistentry140022* next;
};
struct  Tlib224827  {
  Tlistentry140022 Sup;
NU8 kind;
NIM_BOOL generated;
NIM_BOOL isoverriden;
Ropeobj175009* name;
Tnode224809* path;
};
typedef NI TY30821[16];
struct  Trunk221052  {
Trunk221052* 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  Tinstantiation224831  {
Tsym224841* sym;
Ttypeseq224843* concretetypes;
TY224932* usedby;
NI compilesid;
};
struct  Freecell30832  {
Freecell30832* next;
NI zerofield;
};
struct Tnodeseq224803 {
  TGenericSeq Sup;
  Tnode224809* data[SEQ_DECL_SIZE];
};
struct TY332608 {
  TGenericSeq Sup;
  NI data[SEQ_DECL_SIZE];
};
struct TY258854 {
  TGenericSeq Sup;
  TY258855 data[SEQ_DECL_SIZE];
};
struct Ttypeseq224843 {
  TGenericSeq Sup;
  Ttype224847* data[SEQ_DECL_SIZE];
};
struct TY224944 {
  TGenericSeq Sup;
  Tinstantiation224831* data[SEQ_DECL_SIZE];
};
struct Tsymseq224811 {
  TGenericSeq Sup;
  Tsym224841* data[SEQ_DECL_SIZE];
};
struct Trunkseq221054 {
  TGenericSeq Sup;
  Trunk221052* data[SEQ_DECL_SIZE];
};
struct TY224932 {
  TGenericSeq Sup;
  NI32 data[SEQ_DECL_SIZE];
};
static N_INLINE(NI, len_225098)(Tnode224809* n);
N_NIMCALL(Tnode224809*, effectspec_366661)(Tnode224809* n, NU16 effecttype);
N_NIMCALL(NI, sonslen_227387)(Tnode224809* n);
N_NIMCALL(NU16, whichpragma_253687)(Tnode224809* n);
N_NIMCALL(Tnode224809*, newnodei_226351)(NU8 kind, Tlineinfo189352 info);
N_NIMCALL(void, add_225165)(Tnode224809* father, Tnode224809* son);
N_NIMCALL(void, checkraisesspec_369278)(Tnode224809* spec, Tnode224809* real, NimStringDesc* msg, NIM_BOOL hints, TY369284 effectpredicate);
N_NIMCALL(void, initintset_221927)(Intset221056* Result);
N_NOINLINE(void, chckNil)(void* p);
static N_INLINE(Tnode224809*, HEX5BHEX5D_225244)(Tnode224809* n, NI i);
N_NIMCALL(void, incl_221856)(Intset221056* s, NI key);
N_NIMCALL(void, pushinfocontext_190581)(Tlineinfo189352 info);
N_NIMCALL(void, localerror_195128)(Tlineinfo189352 info, NU16 msg, NimStringDesc* arg);
static N_INLINE(void, appendString)(NimStringDesc* dest, NimStringDesc* src);
N_NIMCALL(NimStringDesc*, typetostring_254032)(Ttype224847* typ, NU8 prefer);
N_NIMCALL(NimStringDesc*, rawNewString)(NI space);
N_NIMCALL(void, popinfocontext_190600)(void);
N_NIMCALL(NIM_BOOL, contains_221829)(Intset221056 s, NI key);
N_NIMCALL(void, message_195161)(Tlineinfo189352 info, NU16 msg, NimStringDesc* arg);
N_NIMCALL(NimStringDesc*, rendertree_246059)(Tnode224809* n, NU8 renderflags);
N_NIMCALL(NIM_BOOL, subtyperelation_369251)(Tnode224809* spec, Tnode224809* real);
N_NIMCALL(NI, safeinheritancediff_263388)(Ttype224847* a, Ttype224847* b);
N_NIMCALL(Ttype224847*, exctype_365212)(Tnode224809* n);
N_NIMCALL(Ttype224847*, getebase_365191)(void);
N_NIMCALL(Tsym224841*, getcompilerproc_273809)(NimStringDesc* name);
N_NIMCALL(Ttype224847*, systypefromname_273179)(NimStringDesc* name);
N_NIMCALL(Ttype224847*, skiptypes_228167)(Ttype224847* t, NU64 kinds);
N_NIMCALL(void, localerror_195139)(Tlineinfo189352 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_227096)(NI16 x);
N_NIMCALL(void, internalerror_195191)(NimStringDesc* errmsg);
N_NIMCALL(NimStringDesc*, HEX24_195279)(TY90959 x);
N_NIMCALL(void, initeffects_369704)(Tnode224809* effects, Tsym224841* s, Teffects364008* 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_365843)(Teffects364008* tracked, Tnode224809* n);
N_NIMCALL(void, usevar_364844)(Teffects364008* a, Tnode224809* n);
N_NIMCALL(NIM_BOOL, islocalvar_364069)(Teffects364008* a, Tsym224841* s);
static N_INLINE(NIM_BOOL, contains_364853)(NI* a, NI aLen0, NI item);
static N_INLINE(NI, find_364863)(NI* a, NI aLen0, NI item);
N_NIMCALL(TGenericSeq*, incrSeqV2)(TGenericSeq* seq, NI elemsize);
N_NIMCALL(void, guardglobal_364229)(Teffects364008* a, Tnode224809* n, Tsym224841* guard);
static N_INLINE(NIM_BOOL, isgcedmem_228235)(Ttype224847* t);
N_NIMCALL(void, markgcunsafe_364702)(Teffects364008* a, Tsym224841* reason);
N_NIMCALL(void, addeffect_365300)(Teffects364008* a, Tnode224809* e, NIM_BOOL uselineinfo);
N_NIMCALL(NIM_BOOL, sametype_259092)(Ttype224847* a, Ttype224847* b, NU8 flags);
N_NIMCALL(NIM_BOOL, HEX3DHEX3D_192255)(Tlineinfo189352 a, Tlineinfo189352 b);
N_NIMCALL(void, throws_365159)(Tnode224809* tracked, Tnode224809* n);
static N_INLINE(NI, safelen_225126)(Tnode224809* n);
N_NIMCALL(void, mergelocklevels_367211)(Teffects364008* tracked, Tnode224809* n, NI16 locklevel);
N_NIMCALL(NI16, getlocklevel_367161)(Tsym224841* s);
N_NIMCALL(void, propagateeffects_367226)(Teffects364008* tracked, Tnode224809* n, Tsym224841* s);
N_NIMCALL(void, mergeeffects_365515)(Teffects364008* a, Tnode224809* b, Tnode224809* comesfrom);
N_NIMCALL(Tnode224809*, createraise_365240)(Tnode224809* n);
N_NIMCALL(Tnode224809*, newnode_225401)(NU8 kind);
N_NIMCALL(void, mergetags_365571)(Teffects364008* a, Tnode224809* b, Tnode224809* comesfrom);
N_NIMCALL(void, addtag_365457)(Teffects364008* a, Tnode224809* e, NIM_BOOL uselineinfo);
N_NIMCALL(Tnode224809*, createtag_365259)(Tnode224809* n);
N_NIMCALL(void, warnaboutgcunsafe_364693)(Tnode224809* n);
N_NIMCALL(NIM_BOOL, isforwardedproc_366579)(Tnode224809* n);
N_NIMCALL(NIM_BOOL, isindirectcall_366513)(Tnode224809* n, Tsym224841* owner);
N_NIMCALL(void, assumetheworst_367391)(Teffects364008* tracked, Tnode224809* n, Ttype224847* op);
N_NIMCALL(NIM_BOOL, importedfromc_367130)(Tnode224809* n);
N_NIMCALL(void, markgcunsafe_364723)(Teffects364008* a, Tnode224809* reason);
N_NIMCALL(Tsym224841*, newsym_225656)(NU8 symkind, Tident197021* name, Tsym224841* owner, Tlineinfo189352 info);
N_NIMCALL(Tident197021*, getident_197463)(NimStringDesc* identifier);
N_NIMCALL(void, trackoperand_367446)(Teffects364008* tracked, Tnode224809* n, Ttype224847* paramtype);
N_NIMCALL(Tnode224809*, skipconvandclosure_232305)(Tnode224809* n);
N_NIMCALL(Tnode224809*, skipconv_263935)(Tnode224809* n);
N_NIMCALL(NIM_BOOL, isownedprocvar_367403)(Tnode224809* n, Tsym224841* owner);
N_NIMCALL(void, notnilcheck_367292)(Teffects364008* tracked, Tnode224809* n_367295, Ttype224847* paramtype);
N_NIMCALL(NIM_BOOL, containsnode_229365)(Tnode224809* n, TY482044 kinds);
N_NIMCALL(NU8, impliesnotnil_358451)(Tnodeseq224803* facts, Tnode224809* arg);
N_NIMCALL(Ttype224847*, paramtype_368443)(Ttype224847* op, NI i);
N_NIMCALL(NI, len_227369)(Ttype224847* n);
N_NIMCALL(void, initvarvianew_364646)(Teffects364008* a, Tnode224809* n);
N_NIMCALL(void, initvar_364515)(Teffects364008* a, Tnode224809* n, NIM_BOOL volatilecheck);
static N_INLINE(void, makevolatile_364468)(Teffects364008* a, Tsym224841* s);
N_NIMCALL(Tsym224841*, getmodule_232243)(Tsym224841* s);
N_NIMCALL(void, guarddotaccess_364287)(Teffects364008* a, Tnode224809* n);
N_NIMCALL(Tsym224841*, lookupinrecord_232236)(Tnode224809* n, Tident197021* field);
N_NIMCALL(Tnode224809*, newnodei_226407)(NU8 kind, Tlineinfo189352 info, NI children);
N_NIMCALL(Tnode224809*, newsymnode_226325)(Tsym224841* sym);
N_NIMCALL(NIM_BOOL, sametree_357462)(Tnode224809* a, Tnode224809* b);
N_NIMCALL(void, checkfieldaccess_360409)(Tnodeseq224803* m, Tnode224809* n);
N_NIMCALL(void, tracktrystmt_365850)(Teffects364008* tracked, Tnode224809* n);
N_NIMCALL(void, addtointersection_365082)(TY258854** inter, NI s);
N_NIMCALL(void, catchesall_365814)(Teffects364008* tracked);
N_NIMCALL(TGenericSeq*, setLengthSeq)(TGenericSeq* seq, NI elemsize, NI newlen);
N_NIMCALL(void, catches_365686)(Teffects364008* tracked, Ttype224847* e_365689);
N_NIMCALL(void, trackpragmastmt_366610)(Teffects364008* tracked, Tnode224809* n);
N_NIMCALL(void, listeffects_365627)(Teffects364008* a);
N_NIMCALL(void, invalidatefacts_357659)(Tnodeseq224803** m, Tnode224809* n);
N_NIMCALL(void, addasgnfact_360086)(Tnodeseq224803** m, Tnode224809* key, Tnode224809* value);
N_NIMCALL(Tnode224809*, lastson_227406)(Tnode224809* n);
N_NIMCALL(void, trackcase_367666)(Teffects364008* tracked, Tnode224809* n);
N_NIMCALL(NIM_BOOL, interestingcaseexpr_356283)(Tnode224809* m);
N_NIMCALL(void, addcasebranchfacts_360137)(Tnodeseq224803** m, Tnode224809* n, NI i);
N_NIMCALL(NIM_BOOL, breaksblock_367609)(Tnode224809* n);
N_NIMCALL(void, trackif_367970)(Teffects364008* tracked, Tnode224809* n);
N_NIMCALL(void, addfact_357392)(Tnodeseq224803** m, Tnode224809* nn);
N_NIMCALL(void, addfactneg_357426)(Tnodeseq224803** m, Tnode224809* n_357430);
N_NIMCALL(void, trackblock_368323)(Teffects364008* tracked, Tnode224809* n);
N_NIMCALL(NIM_BOOL, hassubnodewith_229439)(Tnode224809* n, NU8 kind);
N_NIMCALL(NIM_BOOL, istrue_368402)(Tnode224809* n);
N_NIMCALL(void, adddiscriminantfact_360059)(Tnodeseq224803** m, Tnode224809* n);
N_NIMCALL(void, locklocations_364167)(Teffects364008* a, Tnode224809* pragma);
N_NIMCALL(NI16, getlocklevel_364114)(Ttype224847* t_364116);
static N_INLINE(NIM_BOOL, isemptytype_229932)(Ttype224847* t);
N_NIMCALL(void, listgcunsafety_364832)(Tsym224841* s, NIM_BOOL onlywarning);
N_NIMCALL(void, listgcunsafety_364755)(Tsym224841* s, NIM_BOOL onlywarning, Intset221056* cyclecheck);
N_NIMCALL(NIM_BOOL, containsorincl_221898)(Intset221056* s, NI key);
N_NIMCALL(NimStringDesc*, copyString)(NimStringDesc* src);
N_NIMCALL(Tnode224809*, newnode_226607)(NU8 kind, Tlineinfo189352 info, Tnodeseq224803* sons, Ttype224847* typ);
N_NIMCALL(Tnode224809*, documenteffect_366736)(Tnode224809* n, Tnode224809* 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(Tnode224809*, newidentnode_226313)(Tident197021* ident, Tlineinfo189352 info);
N_NIMCALL(Tnode224809*, documentwriteeffect_366822)(Tnode224809* n, NU8 flag, NimStringDesc* pragmaname);
static N_INLINE(Slice90365, HEX2EHEX2E_105290)(NI a, NI b);
N_NIMCALL(Tnode224809*, documentneweffect_366931)(Tnode224809* 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 TY482044 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 TY205342 specialwords_205338;
STRING_LITERAL(TMP5027, "writes", 6);
STRING_LITERAL(TMP5028, "new", 3);
STRING_LITERAL(TMP5029, "escapes", 7);
extern TNimType NTI224803; /* TNodeSeq */
extern Gcheap51018 gch_51059;
extern Tnode224809* emptynode_225807;
extern TNimType NTI332608; /* seq[int] */
extern NU8 gcmd_166134;
extern NU64 gnotes_190398;
extern TNimType NTI258854; /* seq[tuple[a: int, b: int]] */
extern NU32 gglobaloptions_166132;

static N_INLINE(NI, len_225098)(Tnode224809* 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(Tnode224809*, effectspec_366661)(Tnode224809* n, NU16 effecttype) {
	Tnode224809* result;
{	result = 0;
	{
		NI i_366678;
		NI HEX3Atmp_366714;
		NI LOC2;
		NI res_366717;
		i_366678 = 0;
		HEX3Atmp_366714 = 0;
		LOC2 = 0;
		LOC2 = sonslen_227387(n);
		HEX3Atmp_366714 = (NI)(LOC2 - ((NI) 1));
		res_366717 = ((NI) 0);
		{
			while (1) {
				Tnode224809* it;
				if (!(res_366717 <= HEX3Atmp_366714)) goto LA4;
				i_366678 = res_366717;
				it = (*n).kindU.S6.sons->data[i_366678];
				{
					NIM_BOOL LOC7;
					NU16 LOC9;
					LOC7 = 0;
					LOC7 = ((*it).kind == ((NU8) 34));
					if (!(LOC7)) goto LA8;
					LOC9 = 0;
					LOC9 = whichpragma_253687(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_226351(((NU8) 39), (*result).info);
						add_225165(result, (*it).kindU.S6.sons->data[((NI) 1)]);
					}
					LA14: ;
					goto BeforeRet;
				}
				LA10: ;
				res_366717 += ((NI) 1);
			} LA4: ;
		}
	}
	}BeforeRet: ;
	return result;
}

static N_INLINE(Tnode224809*, HEX5BHEX5D_225244)(Tnode224809* n, NI i) {
	Tnode224809* 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_369278)(Tnode224809* spec, Tnode224809* real, NimStringDesc* msg, NIM_BOOL hints, TY369284 effectpredicate) {
	Intset221056 used;
	memset((void*)(&used), 0, sizeof(used));
	chckNil((void*)(&used));
	memset((void*)(&used), 0, sizeof(used));
	initintset_221927((&used));
	{
		Tnode224809* r_369290;
		r_369290 = 0;
		{
			NI i_369345;
			NI HEX3Atmp_369347;
			NI LOC3;
			NI res_369349;
			i_369345 = 0;
			HEX3Atmp_369347 = 0;
			LOC3 = 0;
			LOC3 = len_225098(real);
			HEX3Atmp_369347 = (LOC3 - 1);
			res_369349 = ((NI) 0);
			{
				while (1) {
					if (!(res_369349 <= HEX3Atmp_369347)) goto LA5;
					i_369345 = res_369349;
					r_369290 = (*real).kindU.S6.sons->data[i_369345];
					{
						NimStringDesc* LOC17;
						NimStringDesc* LOC18;
						{
							NI s_369311;
							NI HEX3Atmp_369335;
							NI LOC8;
							NI res_369338;
							s_369311 = 0;
							HEX3Atmp_369335 = 0;
							LOC8 = 0;
							LOC8 = len_225098(spec);
							HEX3Atmp_369335 = (LOC8 - 1);
							res_369338 = ((NI) 0);
							{
								while (1) {
									if (!(res_369338 <= HEX3Atmp_369335)) goto LA10;
									s_369311 = res_369338;
									{
										Tnode224809* LOC13;
										NIM_BOOL LOC14;
										LOC13 = 0;
										LOC13 = HEX5BHEX5D_225244(spec, s_369311);
										LOC14 = 0;
										LOC14 = effectpredicate(LOC13, r_369290);
										if (!LOC14) goto LA15;
										incl_221856((&used), s_369311);
										goto LA6;
									}
									LA15: ;
									res_369338 += ((NI) 1);
								} LA10: ;
							}
						}
						pushinfocontext_190581((*spec).info);
						LOC17 = 0;
						LOC18 = 0;
						LOC18 = typetostring_254032((*r_369290).typ, ((NU8) 0));
						LOC17 = rawNewString(msg->Sup.len + LOC18->Sup.len + 0);
appendString(LOC17, msg);
appendString(LOC17, LOC18);
						localerror_195128((*r_369290).info, ((NU16) 4), LOC17);
						popinfocontext_190600();
					} LA6: ;
					res_369349 += ((NI) 1);
				} LA5: ;
			}
		}
	}
	{
		if (!hints) goto LA21;
		{
			NI s_369332;
			NI HEX3Atmp_369353;
			NI LOC24;
			NI res_369356;
			s_369332 = 0;
			HEX3Atmp_369353 = 0;
			LOC24 = 0;
			LOC24 = len_225098(spec);
			HEX3Atmp_369353 = (LOC24 - 1);
			res_369356 = ((NI) 0);
			{
				while (1) {
					if (!(res_369356 <= HEX3Atmp_369353)) goto LA26;
					s_369332 = res_369356;
					{
						NIM_BOOL LOC29;
						Tnode224809* LOC32;
						Tnode224809* LOC33;
						NimStringDesc* LOC34;
						LOC29 = 0;
						LOC29 = contains_221829(used, s_369332);
						if (!!(LOC29)) goto LA30;
						LOC32 = 0;
						LOC32 = HEX5BHEX5D_225244(spec, s_369332);
						LOC33 = 0;
						LOC33 = HEX5BHEX5D_225244(spec, s_369332);
						LOC34 = 0;
						LOC34 = rendertree_246059(LOC33, 0);
						message_195161((*LOC32).info, ((NU16) 271), LOC34);
					}
					LA30: ;
					res_369356 += ((NI) 1);
				} LA26: ;
			}
		}
	}
	LA21: ;
}

N_NIMCALL(Ttype224847*, getebase_365191)(void) {
	Ttype224847* result;
	result = 0;
	{
		Tsym224841* LOC3;
		LOC3 = 0;
		LOC3 = getcompilerproc_273809(((NimStringDesc*) &TMP3412));
		if (!!((LOC3 == NIM_NIL))) goto LA4;
		result = systypefromname_273179(((NimStringDesc*) &TMP3413));
	}
	goto LA1;
	LA4: ;
	{
		result = systypefromname_273179(((NimStringDesc*) &TMP3414));
	}
	LA1: ;
	return result;
}

N_NIMCALL(Ttype224847*, exctype_365212)(Tnode224809* n) {
	Ttype224847* result;
	Ttype224847* 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_365191();
	}
	goto LA1;
	LA5: ;
	{
		t = (*n).typ;
	}
	LA1: ;
	result = skiptypes_228167(t, IL64(211106247215360));
	return result;
}

N_NIMCALL(NIM_BOOL, subtyperelation_369251)(Tnode224809* spec, Tnode224809* real) {
	NIM_BOOL result;
	Ttype224847* LOC1;
	NI LOC2;
	result = 0;
	LOC1 = 0;
	LOC1 = exctype_365212(real);
	LOC2 = 0;
	LOC2 = safeinheritancediff_263388(LOC1, (*spec).typ);
	result = (LOC2 <= ((NI) 0));
	return result;
}

N_NIMCALL(void, checkmethodeffects_369399)(Tsym224841* disp, Tsym224841* branch) {
	Tnode224809* actual;
	Tnode224809* p;
	Tnode224809* raisesspec;
	Tnode224809* tagsspec;
{	actual = (*(*(*branch).typ).n).kindU.S6.sons->data[((NI) 0)];
	{
		NI LOC3;
		LOC3 = 0;
		LOC3 = len_225098(actual);
		if (!!((LOC3 == ((NI) 4)))) goto LA4;
		goto BeforeRet;
	}
	LA4: ;
	p = (*(*disp).ast).kindU.S6.sons->data[((NI) 4)];
	raisesspec = effectspec_366661(p, ((NU16) 156));
	{
		if (!!(raisesspec == 0)) goto LA8;
		checkraisesspec_369278(raisesspec, (*actual).kindU.S6.sons->data[((NI) 0)], ((NimStringDesc*) &TMP3411), NIM_FALSE, subtyperelation_369251);
	}
	LA8: ;
	tagsspec = effectspec_366661(p, ((NU16) 161));
	{
		if (!!(tagsspec == 0)) goto LA12;
		checkraisesspec_369278(tagsspec, (*actual).kindU.S6.sons->data[((NI) 3)], ((NimStringDesc*) &TMP3415), NIM_FALSE, subtyperelation_369251);
	}
	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_195139((*branch).info, LOC20);
	}
	LA18: ;
	{
		TY192306 LOC25;
		NimStringDesc* LOC26;
		if (!((*(*disp).typ).locklevel < (*(*branch).typ).locklevel)) goto LA23;
		memset((void*)LOC25, 0, sizeof(LOC25));
		LOC25[0] = HEX24_227096((*(*branch).typ).locklevel);
		LOC25[1] = HEX24_227096((*(*disp).typ).locklevel);
		LOC26 = 0;
		LOC26 = nsuFormatOpenArray(((NimStringDesc*) &TMP3417), LOC25, 2);
		message_195161((*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_369704)(Tnode224809* effects, Tsym224841* s, Teffects364008* t) {
	if ((*effects).kindU.S6.sons) nimGCunrefNoCycle((*effects).kindU.S6.sons);
	(*effects).kindU.S6.sons = (Tnodeseq224803*) newSeqRC1((&NTI224803), ((NI) 4));
	asgnRefNoCycle((void**) (&(*effects).kindU.S6.sons->data[((NI) 0)]), newnodei_226351(((NU8) 152), (*s).info));
	asgnRefNoCycle((void**) (&(*effects).kindU.S6.sons->data[((NI) 3)]), newnodei_226351(((NU8) 152), (*s).info));
	asgnRefNoCycle((void**) (&(*effects).kindU.S6.sons->data[((NI) 1)]), emptynode_225807);
	asgnRefNoCycle((void**) (&(*effects).kindU.S6.sons->data[((NI) 2)]), emptynode_225807);
	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), (TY332608*) newSeq((&NTI332608), 0));
	unsureAsgnRef((void**) (&(*t).guards), (Tnodeseq224803*) newSeq((&NTI224803), 0));
	unsureAsgnRef((void**) (&(*t).locked), (Tnodeseq224803*) newSeq((&NTI224803), 0));
}

N_NIMCALL(NIM_BOOL, islocalvar_364069)(Teffects364008* a, Tsym224841* 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_364863)(NI* a, NI aLen0, NI item) {
	NI result;
{	result = 0;
	{
		NI i_364907;
		NI i_364920;
		i_364907 = 0;
		i_364920 = ((NI) 0);
		{
			while (1) {
				if (!(i_364920 < aLen0)) goto LA3;
				i_364907 = a[i_364920];
				{
					if (!(i_364907 == item)) goto LA6;
					goto BeforeRet;
				}
				LA6: ;
				result += ((NI) 1);
				i_364920 += ((NI) 1);
			} LA3: ;
		}
	}
	result = ((NI) -1);
	}BeforeRet: ;
	return result;
}

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

N_NIMCALL(void, guardglobal_364229)(Teffects364008* a, Tnode224809* n, Tsym224841* guard) {
{	{
		Tnode224809* L_364243;
		Tnodeseq224803* HEX3Atmp_364266;
		NI i_364269;
		NI L_364271;
		L_364243 = 0;
		HEX3Atmp_364266 = 0;
		HEX3Atmp_364266 = (*a).locked;
		i_364269 = ((NI) 0);
		L_364271 = (HEX3Atmp_364266 ? HEX3Atmp_364266->Sup.len : 0);
		{
			while (1) {
				if (!(i_364269 < L_364271)) goto LA3;
				L_364243 = HEX3Atmp_364266->data[i_364269];
				{
					NIM_BOOL LOC6;
					LOC6 = 0;
					LOC6 = ((*L_364243).kind == ((NU8) 3));
					if (!(LOC6)) goto LA7;
					LOC6 = ((*L_364243).kindU.S4.sym == guard);
					LA7: ;
					if (!LOC6) goto LA8;
					goto BeforeRet;
				}
				LA8: ;
				i_364269 += ((NI) 1);
			} LA3: ;
		}
	}
	{
		NimStringDesc* LOC14;
		NimStringDesc* LOC15;
		if (!!((*a).istoplevel)) goto LA12;
		LOC14 = 0;
		LOC15 = 0;
		LOC15 = rendertree_246059(n, 0);
		LOC14 = rawNewString(LOC15->Sup.len + 18);
appendString(LOC14, ((NimStringDesc*) &TMP3465));
appendString(LOC14, LOC15);
		localerror_195128((*n).info, ((NU16) 4), LOC14);
	}
	LA12: ;
	}BeforeRet: ;
}

static N_INLINE(NIM_BOOL, isgcedmem_228235)(Ttype224847* 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_364702)(Teffects364008* a, Tsym224841* 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_364844)(Teffects364008* a, Tnode224809* n) {
	Tsym224841* s;
	s = (*n).kindU.S4.sym;
	{
		NIM_BOOL LOC3;
		LOC3 = 0;
		LOC3 = islocalvar_364069(a, s);
		if (!LOC3) goto LA4;
		{
			NIM_BOOL LOC8;
			LOC8 = 0;
			LOC8 = contains_364853((*a).init->data, (*a).init->Sup.len, (*s).Sup.id);
			if (!!(LOC8)) goto LA9;
			{
				if (!!(((196608 & (*(*s).typ).flags) == 0))) goto LA13;
				message_195161((*n).info, ((NU16) 257), (*(*s).name).s);
			}
			goto LA11;
			LA13: ;
			{
				message_195161((*n).info, ((NU16) 262), (*(*s).name).s);
			}
			LA11: ;
			(*a).init = (TY332608*) 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_364229(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_228235((*s).typ);
			LA31: ;
			LOC28 = LOC30;
			LA29: ;
			if (!LOC28) goto LA32;
			markgcunsafe_364702(a, s);
		}
		LA32: ;
	}
	LA20: ;
}

N_NIMCALL(void, throws_365159)(Tnode224809* tracked, Tnode224809* 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_225165(tracked, n);
	}
	LA5: ;
}

N_NIMCALL(void, addeffect_365300)(Teffects364008* a, Tnode224809* e, NIM_BOOL uselineinfo) {
	Tnode224809* aa;
{	aa = (*a).exc;
	{
		NI i_365421;
		NI HEX3Atmp_365434;
		NI HEX3Atmp_365435;
		NI LOC2;
		NI res_365438;
		i_365421 = 0;
		HEX3Atmp_365434 = 0;
		HEX3Atmp_365435 = 0;
		HEX3Atmp_365434 = (*a).bottom;
		LOC2 = 0;
		LOC2 = len_225098(aa);
		HEX3Atmp_365435 = (LOC2 - 1);
		res_365438 = HEX3Atmp_365434;
		{
			while (1) {
				if (!(res_365438 <= HEX3Atmp_365435)) goto LA4;
				i_365421 = res_365438;
				{
					Tnode224809* LOC7;
					Ttype224847* LOC8;
					Ttype224847* LOC9;
					NIM_BOOL LOC10;
					LOC7 = 0;
					LOC7 = HEX5BHEX5D_225244(aa, i_365421);
					LOC8 = 0;
					LOC8 = exctype_365212(LOC7);
					LOC9 = 0;
					LOC9 = exctype_365212(e);
					LOC10 = 0;
					LOC10 = sametype_259092(LOC8, LOC9, 0);
					if (!LOC10) goto LA11;
					{
						NIM_BOOL LOC15;
						LOC15 = 0;
						LOC15 = !(uselineinfo);
						if (LOC15) goto LA16;
						LOC15 = (gcmd_166134 == ((NU8) 8));
						LA16: ;
						if (!LOC15) goto LA17;
						goto BeforeRet;
					}
					goto LA13;
					LA17: ;
					{
						Tnode224809* LOC20;
						NIM_BOOL LOC21;
						LOC20 = 0;
						LOC20 = HEX5BHEX5D_225244(aa, i_365421);
						LOC21 = 0;
						LOC21 = HEX3DHEX3D_192255((*LOC20).info, (*e).info);
						if (!LOC21) goto LA22;
						goto BeforeRet;
					}
					goto LA13;
					LA22: ;
					LA13: ;
				}
				LA11: ;
				res_365438 += ((NI) 1);
			} LA4: ;
		}
	}
	throws_365159((*a).exc, e);
	}BeforeRet: ;
}

static N_INLINE(NI, safelen_225126)(Tnode224809* 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_367211)(Teffects364008* tracked, Tnode224809* 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_227096((*tracked).currlocklevel);
			LOC11 = 0;
			LOC11 = HEX24_227096(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_195128((*n).info, ((NU16) 4), LOC9);
		}
		LA7: ;
		(*tracked).maxlocklevel = (((*tracked).maxlocklevel >= locklevel) ? (*tracked).maxlocklevel : locklevel);
	}
	LA3: ;
}

N_NIMCALL(NI16, getlocklevel_367161)(Tsym224841* 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(Tnode224809*, createraise_365240)(Tnode224809* n) {
	Tnode224809* result;
	result = 0;
	result = newnode_225401(((NU8) 4));
	asgnRefNoCycle((void**) (&(*result).typ), getebase_365191());
	{
		if (!!(n == 0)) goto LA3;
		(*result).info = (*n).info;
	}
	LA3: ;
	return result;
}

N_NIMCALL(void, mergeeffects_365515)(Teffects364008* a, Tnode224809* b, Tnode224809* comesfrom) {
	{
		Tnode224809* LOC5;
		if (!b == 0) goto LA3;
		LOC5 = 0;
		LOC5 = createraise_365240(comesfrom);
		addeffect_365300(a, LOC5, NIM_TRUE);
	}
	goto LA1;
	LA3: ;
	{
		{
			Tnode224809* effect_365529;
			effect_365529 = 0;
			{
				NI i_365546;
				NI HEX3Atmp_365548;
				NI LOC9;
				NI res_365550;
				i_365546 = 0;
				HEX3Atmp_365548 = 0;
				LOC9 = 0;
				LOC9 = len_225098(b);
				HEX3Atmp_365548 = (LOC9 - 1);
				res_365550 = ((NI) 0);
				{
					while (1) {
						if (!(res_365550 <= HEX3Atmp_365548)) goto LA11;
						i_365546 = res_365550;
						effect_365529 = (*b).kindU.S6.sons->data[i_365546];
						addeffect_365300(a, effect_365529, !((comesfrom == NIM_NIL)));
						res_365550 += ((NI) 1);
					} LA11: ;
				}
			}
		}
	}
	LA1: ;
}

N_NIMCALL(void, addtag_365457)(Teffects364008* a, Tnode224809* e, NIM_BOOL uselineinfo) {
	Tnode224809* aa;
{	aa = (*a).tags;
	{
		NI i_365482;
		NI HEX3Atmp_365493;
		NI LOC2;
		NI res_365496;
		i_365482 = 0;
		HEX3Atmp_365493 = 0;
		LOC2 = 0;
		LOC2 = len_225098(aa);
		HEX3Atmp_365493 = (LOC2 - 1);
		res_365496 = ((NI) 0);
		{
			while (1) {
				if (!(res_365496 <= HEX3Atmp_365493)) goto LA4;
				i_365482 = res_365496;
				{
					Tnode224809* LOC7;
					Ttype224847* LOC8;
					Ttype224847* LOC9;
					NIM_BOOL LOC10;
					LOC7 = 0;
					LOC7 = HEX5BHEX5D_225244(aa, i_365482);
					LOC8 = 0;
					LOC8 = skiptypes_228167((*LOC7).typ, IL64(211106247215360));
					LOC9 = 0;
					LOC9 = skiptypes_228167((*e).typ, IL64(211106247215360));
					LOC10 = 0;
					LOC10 = sametype_259092(LOC8, LOC9, 0);
					if (!LOC10) goto LA11;
					{
						NIM_BOOL LOC15;
						LOC15 = 0;
						LOC15 = !(uselineinfo);
						if (LOC15) goto LA16;
						LOC15 = (gcmd_166134 == ((NU8) 8));
						LA16: ;
						if (!LOC15) goto LA17;
						goto BeforeRet;
					}
					goto LA13;
					LA17: ;
					{
						Tnode224809* LOC20;
						NIM_BOOL LOC21;
						LOC20 = 0;
						LOC20 = HEX5BHEX5D_225244(aa, i_365482);
						LOC21 = 0;
						LOC21 = HEX3DHEX3D_192255((*LOC20).info, (*e).info);
						if (!LOC21) goto LA22;
						goto BeforeRet;
					}
					goto LA13;
					LA22: ;
					LA13: ;
				}
				LA11: ;
				res_365496 += ((NI) 1);
			} LA4: ;
		}
	}
	throws_365159((*a).tags, e);
	}BeforeRet: ;
}

N_NIMCALL(Tnode224809*, createtag_365259)(Tnode224809* n) {
	Tnode224809* result;
	result = 0;
	result = newnode_225401(((NU8) 4));
	{
		Tsym224841* LOC3;
		LOC3 = 0;
		LOC3 = getcompilerproc_273809(((NimStringDesc*) &TMP3468));
		if (!!((LOC3 == NIM_NIL))) goto LA4;
		asgnRefNoCycle((void**) (&(*result).typ), systypefromname_273179(((NimStringDesc*) &TMP3469)));
	}
	goto LA1;
	LA4: ;
	{
		asgnRefNoCycle((void**) (&(*result).typ), systypefromname_273179(((NimStringDesc*) &TMP3470)));
	}
	LA1: ;
	{
		if (!!(n == 0)) goto LA9;
		(*result).info = (*n).info;
	}
	LA9: ;
	return result;
}

N_NIMCALL(void, mergetags_365571)(Teffects364008* a, Tnode224809* b, Tnode224809* comesfrom) {
	{
		Tnode224809* LOC5;
		if (!b == 0) goto LA3;
		LOC5 = 0;
		LOC5 = createtag_365259(comesfrom);
		addtag_365457(a, LOC5, NIM_TRUE);
	}
	goto LA1;
	LA3: ;
	{
		{
			Tnode224809* effect_365585;
			effect_365585 = 0;
			{
				NI i_365602;
				NI HEX3Atmp_365604;
				NI LOC9;
				NI res_365606;
				i_365602 = 0;
				HEX3Atmp_365604 = 0;
				LOC9 = 0;
				LOC9 = len_225098(b);
				HEX3Atmp_365604 = (LOC9 - 1);
				res_365606 = ((NI) 0);
				{
					while (1) {
						if (!(res_365606 <= HEX3Atmp_365604)) goto LA11;
						i_365602 = res_365606;
						effect_365585 = (*b).kindU.S6.sons->data[i_365602];
						addtag_365457(a, effect_365585, !((comesfrom == NIM_NIL)));
						res_365606 += ((NI) 1);
					} LA11: ;
				}
			}
		}
	}
	LA1: ;
}

N_NIMCALL(void, warnaboutgcunsafe_364693)(Tnode224809* n) {
	NimStringDesc* LOC1;
	LOC1 = 0;
	LOC1 = rendertree_246059(n, 0);
	message_195161((*n).info, ((NU16) 260), LOC1);
}

N_NIMCALL(void, propagateeffects_367226)(Teffects364008* tracked, Tnode224809* n, Tsym224841* s) {
	Tnode224809* pragma;
	Tnode224809* spec;
	Tnode224809* tagspec;
	NI16 LOC11;
	pragma = (*(*s).ast).kindU.S6.sons->data[((NI) 4)];
	spec = effectspec_366661(pragma, ((NU16) 156));
	mergeeffects_365515(tracked, spec, n);
	tagspec = effectspec_366661(pragma, ((NU16) 161));
	mergetags_365571(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_190398 &(IL64(1)<<(((((NU16) 260)- 237))&IL64(63))))!=0)) goto LA9;
			warnaboutgcunsafe_364693(n);
		}
		LA9: ;
		markgcunsafe_364702(tracked, s);
	}
	LA5: ;
	LOC11 = 0;
	LOC11 = getlocklevel_367161(s);
	mergelocklevels_367211(tracked, n, LOC11);
}

N_NIMCALL(NIM_BOOL, isforwardedproc_366579)(Tnode224809* 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_366513)(Tnode224809* n, Tsym224841* 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_367391)(Teffects364008* tracked, Tnode224809* n, Ttype224847* op) {
	Tnode224809* LOC1;
	Tnode224809* LOC2;
	NI16 locklevel;
	LOC1 = 0;
	LOC1 = createraise_365240(n);
	addeffect_365300(tracked, LOC1, NIM_TRUE);
	LOC2 = 0;
	LOC2 = createtag_365259(n);
	addtag_365457(tracked, LOC2, NIM_TRUE);
	{
		if (!((*op).locklevel == ((NI16) -1))) goto LA5;
		locklevel = ((NI16) 1001);
	}
	goto LA3;
	LA5: ;
	{
		locklevel = (*op).locklevel;
	}
	LA3: ;
	mergelocklevels_367211(tracked, n, locklevel);
}

N_NIMCALL(NIM_BOOL, importedfromc_367130)(Tnode224809* 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_364723)(Teffects364008* a, Tnode224809* 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: ;
		{
			Tident197021* LOC10;
			LOC10 = 0;
			LOC10 = getident_197463(((NimStringDesc*) &TMP3471));
			asgnRefNoCycle((void**) (&(*(*a).owner).kindU.S2.gcunsafetyreason), newsym_225656(((NU8) 0), LOC10, (*a).owner, (*reason).info));
		}
		LA5: ;
	}
	LA3: ;
}

N_NIMCALL(NIM_BOOL, isownedprocvar_367403)(Tnode224809* n, Tsym224841* 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_367292)(Teffects364008* tracked, Tnode224809* n_367295, Ttype224847* paramtype) {
	Tnode224809* n;
{	n = skipconv_263935(n_367295);
	{
		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_229365(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_358451((*tracked).guards, n);
		switch (LOC27) {
		case ((NU8) 0):
		{
			NimStringDesc* LOC29;
			NimStringDesc* LOC30;
			LOC29 = 0;
			LOC29 = rendertree_246059(n, 0);
			LOC30 = 0;
			LOC30 = nsuFormatSingleElem(((NimStringDesc*) &TMP3483), LOC29);
			message_195161((*n).info, ((NU16) 4), LOC30);
		}
		break;
		case ((NU8) 1):
		{
			NimStringDesc* LOC32;
			NimStringDesc* LOC33;
			LOC32 = 0;
			LOC32 = rendertree_246059(n, 0);
			LOC33 = 0;
			LOC33 = nsuFormatSingleElem(((NimStringDesc*) &TMP3484), LOC32);
			message_195161((*n).info, ((NU16) 4), LOC33);
		}
		break;
		case ((NU8) 2):
		{
		}
		break;
		}
	}
	LA9: ;
	}BeforeRet: ;
}

N_NIMCALL(void, trackoperand_367446)(Teffects364008* tracked, Tnode224809* n, Ttype224847* paramtype) {
	Tnode224809* a;
	Ttype224847* op;
	a = skipconvandclosure_232305(n);
	op = (*a).typ;
	{
		NIM_BOOL LOC3;
		NIM_BOOL LOC4;
		Tnode224809* effectlist;
		Tnode224809* 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_195279(TMP3472);
			internalerror_195191(LOC13);
		}
		LA11: ;
		effectlist = (*(*op).n).kindU.S6.sons->data[((NI) 0)];
		s = skipconv_263935(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_367226(tracked, n, (*s).kindU.S4.sym);
		}
		goto LA14;
		LA18: ;
		{
			NI LOC21;
			LOC21 = 0;
			LOC21 = len_225098(effectlist);
			if (!(LOC21 == ((NI) 0))) goto LA22;
			{
				NIM_BOOL LOC26;
				LOC26 = 0;
				LOC26 = isforwardedproc_366579(n);
				if (!LOC26) goto LA27;
				propagateeffects_367226(tracked, n, (*n).kindU.S4.sym);
			}
			goto LA24;
			LA27: ;
			{
				NIM_BOOL LOC30;
				LOC30 = 0;
				LOC30 = isownedprocvar_367403(a, (*tracked).owner);
				if (!!(LOC30)) goto LA31;
				assumetheworst_367391(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_367403(a, (*tracked).owner);
				LOC35 = !(LOC37);
				LA36: ;
				if (!LOC35) goto LA38;
				{
					if (!((gnotes_190398 &(IL64(1)<<(((((NU16) 260)- 237))&IL64(63))))!=0)) goto LA42;
					warnaboutgcunsafe_364693(n);
				}
				LA42: ;
				markgcunsafe_364723(tracked, a);
			}
			LA38: ;
		}
		goto LA14;
		LA22: ;
		{
			mergeeffects_365515(tracked, (*effectlist).kindU.S6.sons->data[((NI) 0)], n);
			mergetags_365571(tracked, (*effectlist).kindU.S6.sons->data[((NI) 3)], n);
			{
				if (!((130 & (*op).flags) == 0)) goto LA47;
				{
					if (!((gnotes_190398 &(IL64(1)<<(((((NU16) 260)- 237))&IL64(63))))!=0)) goto LA51;
					warnaboutgcunsafe_364693(n);
				}
				LA51: ;
				markgcunsafe_364723(tracked, a);
			}
			LA47: ;
		}
		LA14: ;
	}
	LA7: ;
	notnilcheck_367292(tracked, n, paramtype);
}

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

static N_INLINE(void, makevolatile_364468)(Teffects364008* a, Tsym224841* s) {
	{
		NIM_BOOL LOC3;
		NIM_BOOL LOC5;
		Tsym224841* LOC7;
		LOC3 = 0;
		LOC3 = (((NI) 0) < (*a).intrystmt);
		if (!(LOC3)) goto LA4;
		LOC5 = 0;
		LOC5 = (gcmd_166134 == ((NU8) 2));
		if (LOC5) goto LA6;
		LOC7 = 0;
		LOC7 = getmodule_232243((*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_364515)(Teffects364008* a, Tnode224809* n, NIM_BOOL volatilecheck) {
	Tsym224841* s;
{	{
		if (!!(((*n).kind == ((NU8) 3)))) goto LA3;
		goto BeforeRet;
	}
	LA3: ;
	s = (*n).kindU.S4.sym;
	{
		NIM_BOOL LOC7;
		LOC7 = 0;
		LOC7 = islocalvar_364069(a, s);
		if (!LOC7) goto LA8;
		{
			if (!volatilecheck) goto LA12;
			makevolatile_364468(a, s);
		}
		LA12: ;
		{
			NI x_364611;
			TY332608* HEX3Atmp_364625;
			NI i_364628;
			NI L_364630;
			x_364611 = 0;
			HEX3Atmp_364625 = 0;
			HEX3Atmp_364625 = (*a).init;
			i_364628 = ((NI) 0);
			L_364630 = (HEX3Atmp_364625 ? HEX3Atmp_364625->Sup.len : 0);
			{
				while (1) {
					if (!(i_364628 < L_364630)) goto LA16;
					x_364611 = HEX3Atmp_364625->data[i_364628];
					{
						if (!(x_364611 == (*s).Sup.id)) goto LA19;
						goto BeforeRet;
					}
					LA19: ;
					i_364628 += ((NI) 1);
				} LA16: ;
			}
		}
		(*a).init = (TY332608*) 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_364646)(Teffects364008* a, Tnode224809* n) {
	Tsym224841* 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_364515(a, n, NIM_TRUE);
	}
	goto LA5;
	LA7: ;
	{
		NIM_BOOL LOC10;
		LOC10 = 0;
		LOC10 = islocalvar_364069(a, s);
		if (!LOC10) goto LA11;
		makevolatile_364468(a, s);
	}
	goto LA5;
	LA11: ;
	LA5: ;
	}BeforeRet: ;
}

N_NIMCALL(void, guarddotaccess_364287)(Teffects364008* a, Tnode224809* n) {
	Tnode224809* ri;
	Tsym224841* 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: ;
	{
		Tsym224841* field;
		Ttype224847* ty;
		if (!((*g).kind == ((NU8) 0))) goto LA15;
		field = NIM_NIL;
		ty = skiptypes_228167((*(*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_232236((*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_232236((*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_228167(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_195128((*n).info, ((NU16) 4), LOC40);
			goto BeforeRet;
		}
		LA38: ;
		g = field;
	}
	LA15: ;
	{
		Tnode224809* dot;
		NimStringDesc* LOC53;
		NimStringDesc* LOC54;
		if (!((*g).kind == ((NU8) 19))) goto LA43;
		dot = newnodei_226407(((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_226325(g));
		asgnRefNoCycle((void**) (&(*dot).typ), (*g).typ);
		{
			Tnode224809* L_364437;
			Tnodeseq224803* HEX3Atmp_364441;
			NI i_364444;
			NI L_364446;
			L_364437 = 0;
			HEX3Atmp_364441 = 0;
			HEX3Atmp_364441 = (*a).locked;
			i_364444 = ((NI) 0);
			L_364446 = (HEX3Atmp_364441 ? HEX3Atmp_364441->Sup.len : 0);
			{
				while (1) {
					if (!(i_364444 < L_364446)) goto LA47;
					L_364437 = HEX3Atmp_364441->data[i_364444];
					{
						NIM_BOOL LOC50;
						LOC50 = 0;
						LOC50 = sametree_357462(dot, L_364437);
						if (!LOC50) goto LA51;
						goto BeforeRet;
					}
					LA51: ;
					i_364444 += ((NI) 1);
				} LA47: ;
			}
		}
		LOC53 = 0;
		LOC54 = 0;
		LOC54 = rendertree_246059(n, 0);
		LOC53 = rawNewString(LOC54->Sup.len + 18);
appendString(LOC53, ((NimStringDesc*) &TMP3465));
appendString(LOC53, LOC54);
		localerror_195128((*n).info, ((NU16) 4), LOC53);
	}
	goto LA41;
	LA43: ;
	{
		guardglobal_364229(a, n, g);
	}
	LA41: ;
	}BeforeRet: ;
}

N_NIMCALL(void, addtointersection_365082)(TY258854** inter, NI s) {
	TY258855 LOC8;
{	{
		NI j_365113;
		NI HEX3Atmp_365137;
		NI res_365140;
		j_365113 = 0;
		HEX3Atmp_365137 = 0;
		HEX3Atmp_365137 = (((*inter) ? (*inter)->Sup.len : 0) - 1);
		res_365140 = ((NI) 0);
		{
			while (1) {
				if (!(res_365140 <= HEX3Atmp_365137)) goto LA3;
				j_365113 = res_365140;
				{
					if (!(s == (*inter)->data[j_365113].Field0)) goto LA6;
					(*inter)->data[j_365113].Field1 += ((NI) 1);
					goto BeforeRet;
				}
				LA6: ;
				res_365140 += ((NI) 1);
			} LA3: ;
		}
	}
	LOC8.Field0 = s;
	LOC8.Field1 = ((NI) 1);
	(*inter) = (TY258854*) incrSeqV2(&((*inter))->Sup, sizeof(TY258855));
	(*inter)->data[(*inter)->Sup.len] = LOC8;
	++(*inter)->Sup.len;
	}BeforeRet: ;
}

N_NIMCALL(void, catchesall_365814)(Teffects364008* tracked) {
	{
		if (!!((*(*tracked).exc).kindU.S6.sons == 0)) goto LA3;
		(*(*tracked).exc).kindU.S6.sons = (Tnodeseq224803*) setLengthSeq(&((*(*tracked).exc).kindU.S6.sons)->Sup, sizeof(Tnode224809*), ((NI) ((*tracked).bottom)));
	}
	LA3: ;
}

N_NIMCALL(void, catches_365686)(Teffects364008* tracked, Ttype224847* e_365689) {
	Ttype224847* e;
	NI L;
	NI i;
	e = skiptypes_228167(e_365689, IL64(211106247215360));
	L = len_225098((*tracked).exc);
	i = (*tracked).bottom;
	{
		while (1) {
			if (!(i < L)) goto LA2;
			{
				Tnode224809* LOC5;
				Ttype224847* LOC6;
				NI LOC7;
				LOC5 = 0;
				LOC5 = HEX5BHEX5D_225244((*tracked).exc, i);
				LOC6 = 0;
				LOC6 = exctype_365212(LOC5);
				LOC7 = 0;
				LOC7 = safeinheritancediff_263388(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 = (Tnodeseq224803*) setLengthSeq(&((*(*tracked).exc).kindU.S6.sons)->Sup, sizeof(Tnode224809*), ((NI) (L)));
	}
	goto LA11;
	LA13: ;
	{
	}
	LA11: ;
}

N_NIMCALL(void, tracktrystmt_365850)(Teffects364008* tracked, Tnode224809* n) {
	NI oldbottom;
	NI oldstate;
	TY258854* inter;
	NI branches;
	NIM_BOOL hasfinally;
	oldbottom = (*tracked).bottom;
	(*tracked).bottom = len_225098((*tracked).exc);
	oldstate = ((*tracked).init ? (*tracked).init->Sup.len : 0);
	inter = (TY258854*) newSeq((&NTI258854), 0);
	(*tracked).intrystmt += ((NI) 1);
	track_365843(tracked, (*n).kindU.S6.sons->data[((NI) 0)]);
	(*tracked).intrystmt -= ((NI) 1);
	{
		NI i_365927;
		NI HEX3Atmp_366425;
		NI res_366428;
		i_365927 = 0;
		HEX3Atmp_366425 = 0;
		HEX3Atmp_366425 = (((*tracked).init ? (*tracked).init->Sup.len : 0) - 1);
		res_366428 = oldstate;
		{
			while (1) {
				if (!(res_366428 <= HEX3Atmp_366425)) goto LA3;
				i_365927 = res_366428;
				addtointersection_365082((&inter), (*tracked).init->data[i_365927]);
				res_366428 += ((NI) 1);
			} LA3: ;
		}
	}
	branches = ((NI) 1);
	hasfinally = NIM_FALSE;
	{
		NI i_365950;
		NI HEX3Atmp_366449;
		NI LOC5;
		NI res_366452;
		i_365950 = 0;
		HEX3Atmp_366449 = 0;
		LOC5 = 0;
		LOC5 = len_225098(n);
		HEX3Atmp_366449 = (LOC5 - 1);
		res_366452 = ((NI) 1);
		{
			while (1) {
				Tnode224809* b;
				NI blen;
				if (!(res_366452 <= HEX3Atmp_366449)) goto LA7;
				i_365950 = res_366452;
				b = (*n).kindU.S6.sons->data[i_365950];
				blen = sonslen_227387(b);
				{
					if (!((*b).kind == ((NU8) 87))) goto LA10;
					branches += ((NI) 1);
					{
						if (!(blen == ((NI) 1))) goto LA14;
						catchesall_365814(tracked);
					}
					goto LA12;
					LA14: ;
					{
						{
							NI j_365984;
							NI HEX3Atmp_366434;
							NI res_366437;
							j_365984 = 0;
							HEX3Atmp_366434 = 0;
							HEX3Atmp_366434 = (NI)(blen - ((NI) 2));
							res_366437 = ((NI) 0);
							{
								while (1) {
									if (!(res_366437 <= HEX3Atmp_366434)) goto LA19;
									j_365984 = res_366437;
									catches_365686(tracked, (*(*b).kindU.S6.sons->data[j_365984]).typ);
									res_366437 += ((NI) 1);
								} LA19: ;
							}
						}
					}
					LA12: ;
					(*tracked).init = (TY332608*) setLengthSeq(&((*tracked).init)->Sup, sizeof(NI), ((NI) (oldstate)));
					track_365843(tracked, (*b).kindU.S6.sons->data[(NI)(blen - ((NI) 1))]);
					{
						NI i_366039;
						NI HEX3Atmp_366442;
						NI res_366445;
						i_366039 = 0;
						HEX3Atmp_366442 = 0;
						HEX3Atmp_366442 = (((*tracked).init ? (*tracked).init->Sup.len : 0) - 1);
						res_366445 = oldstate;
						{
							while (1) {
								if (!(res_366445 <= HEX3Atmp_366442)) goto LA22;
								i_366039 = res_366445;
								addtointersection_365082((&inter), (*tracked).init->data[i_366039]);
								res_366445 += ((NI) 1);
							} LA22: ;
						}
					}
				}
				goto LA8;
				LA10: ;
				{
					(*tracked).init = (TY332608*) setLengthSeq(&((*tracked).init)->Sup, sizeof(NI), ((NI) (oldstate)));
					track_365843(tracked, (*b).kindU.S6.sons->data[(NI)(blen - ((NI) 1))]);
					hasfinally = NIM_TRUE;
				}
				LA8: ;
				res_366452 += ((NI) 1);
			} LA7: ;
		}
	}
	(*tracked).bottom = oldbottom;
	{
		if (!!(hasfinally)) goto LA26;
		(*tracked).init = (TY332608*) setLengthSeq(&((*tracked).init)->Sup, sizeof(NI), ((NI) (oldstate)));
	}
	LA26: ;
	{
		NI id_366411;
		NI count_366412;
		NI i_366459;
		NI L_366461;
		id_366411 = 0;
		count_366412 = 0;
		i_366459 = ((NI) 0);
		L_366461 = (inter ? inter->Sup.len : 0);
		{
			while (1) {
				if (!(i_366459 < L_366461)) goto LA30;
				id_366411 = inter->data[i_366459].Field0;
				count_366412 = inter->data[i_366459].Field1;
				{
					if (!(count_366412 == branches)) goto LA33;
					(*tracked).init = (TY332608*) incrSeqV2(&((*tracked).init)->Sup, sizeof(NI));
					(*tracked).init->data[(*tracked).init->Sup.len] = id_366411;
					++(*tracked).init->Sup.len;
				}
				LA33: ;
				i_366459 += ((NI) 1);
			} LA30: ;
		}
	}
}

N_NIMCALL(void, listeffects_365627)(Teffects364008* a) {
	{
		Tnode224809* e_365630;
		Tnode224809* HEX3Atmp_365633;
		e_365630 = 0;
		HEX3Atmp_365633 = 0;
		HEX3Atmp_365633 = (*a).exc;
		{
			NI i_365637;
			NI HEX3Atmp_365639;
			NI LOC3;
			NI res_365641;
			i_365637 = 0;
			HEX3Atmp_365639 = 0;
			LOC3 = 0;
			LOC3 = len_225098(HEX3Atmp_365633);
			HEX3Atmp_365639 = (LOC3 - 1);
			res_365641 = ((NI) 0);
			{
				while (1) {
					NimStringDesc* LOC6;
					if (!(res_365641 <= HEX3Atmp_365639)) goto LA5;
					i_365637 = res_365641;
					e_365630 = (*HEX3Atmp_365633).kindU.S6.sons->data[i_365637];
					LOC6 = 0;
					LOC6 = typetostring_254032((*e_365630).typ, ((NU8) 0));
					message_195161((*e_365630).info, ((NU16) 290), LOC6);
					res_365641 += ((NI) 1);
				} LA5: ;
			}
		}
	}
	{
		Tnode224809* e_365631;
		Tnode224809* HEX3Atmp_365645;
		e_365631 = 0;
		HEX3Atmp_365645 = 0;
		HEX3Atmp_365645 = (*a).tags;
		{
			NI i_365649;
			NI HEX3Atmp_365651;
			NI LOC9;
			NI res_365653;
			i_365649 = 0;
			HEX3Atmp_365651 = 0;
			LOC9 = 0;
			LOC9 = len_225098(HEX3Atmp_365645);
			HEX3Atmp_365651 = (LOC9 - 1);
			res_365653 = ((NI) 0);
			{
				while (1) {
					NimStringDesc* LOC12;
					if (!(res_365653 <= HEX3Atmp_365651)) goto LA11;
					i_365649 = res_365653;
					e_365631 = (*HEX3Atmp_365645).kindU.S6.sons->data[i_365649];
					LOC12 = 0;
					LOC12 = typetostring_254032((*e_365631).typ, ((NU8) 0));
					message_195161((*e_365631).info, ((NU16) 290), LOC12);
					res_365653 += ((NI) 1);
				} LA11: ;
			}
		}
	}
}

N_NIMCALL(void, trackpragmastmt_366610)(Teffects364008* tracked, Tnode224809* n) {
	{
		NI i_366626;
		NI HEX3Atmp_366639;
		NI LOC2;
		NI res_366642;
		i_366626 = 0;
		HEX3Atmp_366639 = 0;
		LOC2 = 0;
		LOC2 = sonslen_227387(n);
		HEX3Atmp_366639 = (NI)(LOC2 - ((NI) 1));
		res_366642 = ((NI) 0);
		{
			while (1) {
				Tnode224809* it;
				if (!(res_366642 <= HEX3Atmp_366639)) goto LA4;
				i_366626 = res_366642;
				it = (*n).kindU.S6.sons->data[i_366626];
				{
					NU16 LOC7;
					LOC7 = 0;
					LOC7 = whichpragma_253687(it);
					if (!(LOC7 == ((NU16) 160))) goto LA8;
					listeffects_365627(tracked);
				}
				LA8: ;
				res_366642 += ((NI) 1);
			} LA4: ;
		}
	}
}

N_NIMCALL(NIM_BOOL, breaksblock_367609)(Tnode224809* n) {
	NIM_BOOL result;
{	result = 0;
	switch ((*n).kind) {
	case ((NU8) 115):
	case ((NU8) 126):
	{
		{
			Tnode224809* c_367613;
			c_367613 = 0;
			{
				NI i_367641;
				NI HEX3Atmp_367643;
				NI LOC4;
				NI res_367645;
				i_367641 = 0;
				HEX3Atmp_367643 = 0;
				LOC4 = 0;
				LOC4 = len_225098(n);
				HEX3Atmp_367643 = (LOC4 - 1);
				res_367645 = ((NI) 0);
				{
					while (1) {
						if (!(res_367645 <= HEX3Atmp_367643)) goto LA6;
						i_367641 = res_367645;
						c_367613 = (*n).kindU.S6.sons->data[i_367641];
						{
							NIM_BOOL LOC9;
							LOC9 = 0;
							LOC9 = breaksblock_367609(c_367613);
							if (!LOC9) goto LA10;
							result = NIM_TRUE;
							goto BeforeRet;
						}
						LA10: ;
						res_367645 += ((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_367666)(Teffects364008* tracked, Tnode224809* n) {
	NI oldstate;
	NI oldfacts;
	NIM_BOOL stringcase;
	Ttype224847* LOC1;
	NIM_BOOL interesting;
	NIM_BOOL LOC2;
	NIM_BOOL LOC3;
	TY258854* inter;
	NI tocover;
	track_365843(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_228167((*(*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_356283((*n).kindU.S6.sons->data[((NI) 0)]);
	LA4: ;
	LOC2 = LOC3;
	if (!(LOC2)) goto LA5;
	LOC2 = ((gnotes_190398 &(IL64(1)<<(((((NU16) 258)- 237))&IL64(63))))!=0);
	LA5: ;
	interesting = LOC2;
	inter = (TY258854*) newSeq((&NTI258854), 0);
	tocover = ((NI) 0);
	{
		NI i_367764;
		NI HEX3Atmp_367915;
		NI LOC7;
		NI res_367918;
		i_367764 = 0;
		HEX3Atmp_367915 = 0;
		LOC7 = 0;
		LOC7 = len_225098(n);
		HEX3Atmp_367915 = (LOC7 - 1);
		res_367918 = ((NI) 1);
		{
			while (1) {
				Tnode224809* branch;
				if (!(res_367918 <= HEX3Atmp_367915)) goto LA9;
				i_367764 = res_367918;
				branch = (*n).kindU.S6.sons->data[i_367764];
				(*tracked).init = (TY332608*) setLengthSeq(&((*tracked).init)->Sup, sizeof(NI), ((NI) (oldstate)));
				{
					if (!interesting) goto LA12;
					(*tracked).guards = (Tnodeseq224803*) setLengthSeq(&((*tracked).guards)->Sup, sizeof(Tnode224809*), ((NI) (oldfacts)));
					addcasebranchfacts_360137((&(*tracked).guards), n, i_367764);
				}
				LA12: ;
				{
					NI i_367807;
					NI HEX3Atmp_367900;
					NI LOC15;
					NI res_367903;
					i_367807 = 0;
					HEX3Atmp_367900 = 0;
					LOC15 = 0;
					LOC15 = len_225098(branch);
					HEX3Atmp_367900 = (LOC15 - 1);
					res_367903 = ((NI) 0);
					{
						while (1) {
							if (!(res_367903 <= HEX3Atmp_367900)) goto LA17;
							i_367807 = res_367903;
							track_365843(tracked, (*branch).kindU.S6.sons->data[i_367807]);
							res_367903 += ((NI) 1);
						} LA17: ;
					}
				}
				{
					Tnode224809* LOC20;
					NIM_BOOL LOC21;
					LOC20 = 0;
					LOC20 = lastson_227406(branch);
					LOC21 = 0;
					LOC21 = breaksblock_367609(LOC20);
					if (!!(LOC21)) goto LA22;
					tocover += ((NI) 1);
				}
				LA22: ;
				{
					NI i_367845;
					NI HEX3Atmp_367908;
					NI res_367911;
					i_367845 = 0;
					HEX3Atmp_367908 = 0;
					HEX3Atmp_367908 = (((*tracked).init ? (*tracked).init->Sup.len : 0) - 1);
					res_367911 = oldstate;
					{
						while (1) {
							if (!(res_367911 <= HEX3Atmp_367908)) goto LA26;
							i_367845 = res_367911;
							addtointersection_365082((&inter), (*tracked).init->data[i_367845]);
							res_367911 += ((NI) 1);
						} LA26: ;
					}
				}
				res_367918 += ((NI) 1);
			} LA9: ;
		}
	}
	(*tracked).init = (TY332608*) setLengthSeq(&((*tracked).init)->Sup, sizeof(NI), ((NI) (oldstate)));
	{
		NIM_BOOL LOC29;
		Tnode224809* LOC31;
		LOC29 = 0;
		LOC29 = !(stringcase);
		if (LOC29) goto LA30;
		LOC31 = 0;
		LOC31 = lastson_227406(n);
		LOC29 = ((*LOC31).kind == ((NU8) 88));
		LA30: ;
		if (!LOC29) goto LA32;
		{
			NI id_367875;
			NI count_367876;
			NI i_367925;
			NI L_367927;
			id_367875 = 0;
			count_367876 = 0;
			i_367925 = ((NI) 0);
			L_367927 = (inter ? inter->Sup.len : 0);
			{
				while (1) {
					if (!(i_367925 < L_367927)) goto LA36;
					id_367875 = inter->data[i_367925].Field0;
					count_367876 = inter->data[i_367925].Field1;
					{
						if (!(tocover <= count_367876)) goto LA39;
						(*tracked).init = (TY332608*) incrSeqV2(&((*tracked).init)->Sup, sizeof(NI));
						(*tracked).init->data[(*tracked).init->Sup.len] = id_367875;
						++(*tracked).init->Sup.len;
					}
					LA39: ;
					i_367925 += ((NI) 1);
				} LA36: ;
			}
		}
	}
	LA32: ;
	(*tracked).guards = (Tnodeseq224803*) setLengthSeq(&((*tracked).guards)->Sup, sizeof(Tnode224809*), ((NI) (oldfacts)));
}

N_NIMCALL(void, trackif_367970)(Teffects364008* tracked, Tnode224809* n) {
	NI oldfacts;
	NI oldstate;
	TY258854* inter;
	NI tocover;
	track_365843(tracked, (*(*n).kindU.S6.sons->data[((NI) 0)]).kindU.S6.sons->data[((NI) 0)]);
	oldfacts = ((*tracked).guards ? (*tracked).guards->Sup.len : 0);
	addfact_357392((&(*tracked).guards), (*(*n).kindU.S6.sons->data[((NI) 0)]).kindU.S6.sons->data[((NI) 0)]);
	oldstate = ((*tracked).init ? (*tracked).init->Sup.len : 0);
	inter = (TY258854*) newSeq((&NTI258854), 0);
	tocover = ((NI) 0);
	track_365843(tracked, (*(*n).kindU.S6.sons->data[((NI) 0)]).kindU.S6.sons->data[((NI) 1)]);
	{
		NIM_BOOL LOC3;
		LOC3 = 0;
		LOC3 = breaksblock_367609((*(*n).kindU.S6.sons->data[((NI) 0)]).kindU.S6.sons->data[((NI) 1)]);
		if (!!(LOC3)) goto LA4;
		tocover += ((NI) 1);
	}
	LA4: ;
	{
		NI i_368054;
		NI HEX3Atmp_368218;
		NI res_368221;
		i_368054 = 0;
		HEX3Atmp_368218 = 0;
		HEX3Atmp_368218 = (((*tracked).init ? (*tracked).init->Sup.len : 0) - 1);
		res_368221 = oldstate;
		{
			while (1) {
				if (!(res_368221 <= HEX3Atmp_368218)) goto LA8;
				i_368054 = res_368221;
				addtointersection_365082((&inter), (*tracked).init->data[i_368054]);
				res_368221 += ((NI) 1);
			} LA8: ;
		}
	}
	{
		NI i_368075;
		NI HEX3Atmp_368250;
		NI LOC10;
		NI res_368253;
		i_368075 = 0;
		HEX3Atmp_368250 = 0;
		LOC10 = 0;
		LOC10 = len_225098(n);
		HEX3Atmp_368250 = (LOC10 - 1);
		res_368253 = ((NI) 1);
		{
			while (1) {
				Tnode224809* branch;
				if (!(res_368253 <= HEX3Atmp_368250)) goto LA12;
				i_368075 = res_368253;
				branch = (*n).kindU.S6.sons->data[i_368075];
				(*tracked).guards = (Tnodeseq224803*) setLengthSeq(&((*tracked).guards)->Sup, sizeof(Tnode224809*), ((NI) (oldfacts)));
				{
					NI j_368098;
					NI HEX3Atmp_368227;
					NI res_368230;
					j_368098 = 0;
					HEX3Atmp_368227 = 0;
					HEX3Atmp_368227 = (NI)(i_368075 - ((NI) 1));
					res_368230 = ((NI) 0);
					{
						while (1) {
							if (!(res_368230 <= HEX3Atmp_368227)) goto LA15;
							j_368098 = res_368230;
							addfactneg_357426((&(*tracked).guards), (*(*n).kindU.S6.sons->data[j_368098]).kindU.S6.sons->data[((NI) 0)]);
							res_368230 += ((NI) 1);
						} LA15: ;
					}
				}
				{
					NI LOC18;
					LOC18 = 0;
					LOC18 = len_225098(branch);
					if (!(((NI) 1) < LOC18)) goto LA19;
					addfact_357392((&(*tracked).guards), (*branch).kindU.S6.sons->data[((NI) 0)]);
				}
				LA19: ;
				(*tracked).init = (TY332608*) setLengthSeq(&((*tracked).init)->Sup, sizeof(NI), ((NI) (oldstate)));
				{
					NI i_368134;
					NI HEX3Atmp_368235;
					NI LOC22;
					NI res_368238;
					i_368134 = 0;
					HEX3Atmp_368235 = 0;
					LOC22 = 0;
					LOC22 = len_225098(branch);
					HEX3Atmp_368235 = (LOC22 - 1);
					res_368238 = ((NI) 0);
					{
						while (1) {
							if (!(res_368238 <= HEX3Atmp_368235)) goto LA24;
							i_368134 = res_368238;
							track_365843(tracked, (*branch).kindU.S6.sons->data[i_368134]);
							res_368238 += ((NI) 1);
						} LA24: ;
					}
				}
				{
					Tnode224809* LOC27;
					NIM_BOOL LOC28;
					LOC27 = 0;
					LOC27 = lastson_227406(branch);
					LOC28 = 0;
					LOC28 = breaksblock_367609(LOC27);
					if (!!(LOC28)) goto LA29;
					tocover += ((NI) 1);
				}
				LA29: ;
				{
					NI i_368172;
					NI HEX3Atmp_368243;
					NI res_368246;
					i_368172 = 0;
					HEX3Atmp_368243 = 0;
					HEX3Atmp_368243 = (((*tracked).init ? (*tracked).init->Sup.len : 0) - 1);
					res_368246 = oldstate;
					{
						while (1) {
							if (!(res_368246 <= HEX3Atmp_368243)) goto LA33;
							i_368172 = res_368246;
							addtointersection_365082((&inter), (*tracked).init->data[i_368172]);
							res_368246 += ((NI) 1);
						} LA33: ;
					}
				}
				res_368253 += ((NI) 1);
			} LA12: ;
		}
	}
	(*tracked).init = (TY332608*) setLengthSeq(&((*tracked).init)->Sup, sizeof(NI), ((NI) (oldstate)));
	{
		Tnode224809* LOC36;
		NI LOC37;
		LOC36 = 0;
		LOC36 = lastson_227406(n);
		LOC37 = 0;
		LOC37 = len_225098(LOC36);
		if (!(LOC37 == ((NI) 1))) goto LA38;
		{
			NI id_368194;
			NI count_368195;
			NI i_368260;
			NI L_368262;
			id_368194 = 0;
			count_368195 = 0;
			i_368260 = ((NI) 0);
			L_368262 = (inter ? inter->Sup.len : 0);
			{
				while (1) {
					if (!(i_368260 < L_368262)) goto LA42;
					id_368194 = inter->data[i_368260].Field0;
					count_368195 = inter->data[i_368260].Field1;
					{
						if (!(tocover <= count_368195)) goto LA45;
						(*tracked).init = (TY332608*) incrSeqV2(&((*tracked).init)->Sup, sizeof(NI));
						(*tracked).init->data[(*tracked).init->Sup.len] = id_368194;
						++(*tracked).init->Sup.len;
					}
					LA45: ;
					i_368260 += ((NI) 1);
				} LA42: ;
			}
		}
	}
	LA38: ;
	(*tracked).guards = (Tnodeseq224803*) setLengthSeq(&((*tracked).guards)->Sup, sizeof(Tnode224809*), ((NI) (oldfacts)));
}

N_NIMCALL(void, trackblock_368323)(Teffects364008* tracked, Tnode224809* n) {
	{
		NI oldstate;
		if (!((*n).kind == ((NU8) 115) || (*n).kind == ((NU8) 126))) goto LA3;
		oldstate = ((NI) -1);
		{
			NI i_368358;
			NI HEX3Atmp_368380;
			NI LOC6;
			NI res_368383;
			i_368358 = 0;
			HEX3Atmp_368380 = 0;
			LOC6 = 0;
			LOC6 = len_225098(n);
			HEX3Atmp_368380 = (LOC6 - 1);
			res_368383 = ((NI) 0);
			{
				while (1) {
					if (!(res_368383 <= HEX3Atmp_368380)) goto LA8;
					i_368358 = res_368383;
					{
						NIM_BOOL LOC11;
						LOC11 = 0;
						LOC11 = hassubnodewith_229439((*n).kindU.S6.sons->data[i_368358], ((NU8) 110));
						if (!LOC11) goto LA12;
						{
							if (!(oldstate < ((NI) 0))) goto LA16;
							oldstate = ((*tracked).init ? (*tracked).init->Sup.len : 0);
						}
						LA16: ;
					}
					LA12: ;
					track_365843(tracked, (*n).kindU.S6.sons->data[i_368358]);
					res_368383 += ((NI) 1);
				} LA8: ;
			}
		}
		{
			if (!(((NI) 0) < oldstate)) goto LA20;
			(*tracked).init = (TY332608*) setLengthSeq(&((*tracked).init)->Sup, sizeof(NI), ((NI) (oldstate)));
		}
		LA20: ;
	}
	goto LA1;
	LA3: ;
	{
		track_365843(tracked, n);
	}
	LA1: ;
}

N_NIMCALL(NIM_BOOL, istrue_368402)(Tnode224809* 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_364114)(Ttype224847* t_364116) {
	NI16 result;
	Ttype224847* t;
	result = 0;
	t = t_364116;
	{
		NIM_BOOL LOC3;
		NI LOC5;
		LOC3 = 0;
		LOC3 = ((*t).kind == ((NU8) 11));
		if (!(LOC3)) goto LA4;
		LOC5 = 0;
		LOC5 = len_227369(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_364167)(Teffects364008* a, Tnode224809* pragma) {
	NI16 firstll;
{	{
		if (!!(((*pragma).kind == ((NU8) 34)))) goto LA3;
		localerror_195128((*pragma).info, ((NU16) 4), ((NimStringDesc*) &TMP3486));
		goto BeforeRet;
	}
	LA3: ;
	firstll = ((NI16) -1);
	{
		Tnode224809* x_364181;
		Tnode224809* HEX3Atmp_364200;
		x_364181 = 0;
		HEX3Atmp_364200 = 0;
		HEX3Atmp_364200 = HEX5BHEX5D_225244(pragma, ((NI) 1));
		{
			NI i_364204;
			NI HEX3Atmp_364206;
			NI LOC7;
			NI res_364208;
			i_364204 = 0;
			HEX3Atmp_364206 = 0;
			LOC7 = 0;
			LOC7 = len_225098(HEX3Atmp_364200);
			HEX3Atmp_364206 = (LOC7 - 1);
			res_364208 = ((NI) 0);
			{
				while (1) {
					NI16 thisll;
					if (!(res_364208 <= HEX3Atmp_364206)) goto LA9;
					i_364204 = res_364208;
					x_364181 = (*HEX3Atmp_364200).kindU.S6.sons->data[i_364204];
					thisll = getlocklevel_364114((*x_364181).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_227096(thisll);
							LOC20 = rawNewString(LOC21->Sup.len + 20);
appendString(LOC20, ((NimStringDesc*) &TMP3487));
appendString(LOC20, LOC21);
							localerror_195139((*x_364181).info, LOC20);
						}
						goto LA14;
						LA18: ;
						{
							if (!(firstll < ((NI16) 0))) goto LA23;
							firstll = thisll;
						}
						goto LA14;
						LA23: ;
						{
							if (!!((firstll == thisll))) goto LA26;
							localerror_195128((*x_364181).info, ((NU16) 4), ((NimStringDesc*) &TMP3488));
						}
						goto LA14;
						LA26: ;
						LA14: ;
						(*a).maxlocklevel = (((*a).maxlocklevel >= firstll) ? (*a).maxlocklevel : firstll);
					}
					LA12: ;
					(*a).locked = (Tnodeseq224803*) incrSeqV2(&((*a).locked)->Sup, sizeof(Tnode224809*));
					asgnRefNoCycle((void**) (&(*a).locked->data[(*a).locked->Sup.len]), x_364181);
					++(*a).locked->Sup.len;
					res_364208 += ((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_195128((*pragma).info, ((NU16) 4), ((NimStringDesc*) &TMP3489));
		}
		LA38: ;
		(*a).currlocklevel = firstll;
	}
	LA32: ;
	}BeforeRet: ;
}

N_NIMCALL(void, track_365843)(Teffects364008* tracked, Tnode224809* n) {
	switch ((*n).kind) {
	case ((NU8) 3):
	{
		usevar_364844(tracked, n);
	}
	break;
	case ((NU8) 108):
	{
		(*(*n).kindU.S6.sons->data[((NI) 0)]).info = (*n).info;
		addeffect_365300(tracked, (*n).kindU.S6.sons->data[((NI) 0)], NIM_FALSE);
		{
			NI i_368531;
			NI HEX3Atmp_369070;
			NI LOC4;
			NI res_369073;
			i_368531 = 0;
			HEX3Atmp_369070 = 0;
			LOC4 = 0;
			LOC4 = safelen_225126(n);
			HEX3Atmp_369070 = (LOC4 - 1);
			res_369073 = ((NI) 0);
			{
				while (1) {
					if (!(res_369073 <= HEX3Atmp_369070)) goto LA6;
					i_368531 = res_369073;
					track_365843(tracked, (*n).kindU.S6.sons->data[i_368531]);
					res_369073 += ((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):
	{
		Tnode224809* a;
		Ttype224847* op;
		a = (*n).kindU.S6.sons->data[((NI) 0)];
		op = (*a).typ;
		{
			NIM_BOOL LOC10;
			NIM_BOOL LOC11;
			Tnode224809* 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_367161((*a).kindU.S4.sym);
				mergelocklevels_367211(tracked, n, LOC24);
			}
			goto LA16;
			LA18: ;
			{
				mergelocklevels_367211(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_367226(tracked, n, (*a).kindU.S4.sym);
			}
			goto LA26;
			LA30: ;
			{
				NI LOC33;
				LOC33 = 0;
				LOC33 = len_225098(effectlist);
				if (!(LOC33 == ((NI) 0))) goto LA34;
				{
					NIM_BOOL LOC38;
					LOC38 = 0;
					LOC38 = isforwardedproc_366579(a);
					if (!LOC38) goto LA39;
					propagateeffects_367226(tracked, n, (*a).kindU.S4.sym);
				}
				goto LA36;
				LA39: ;
				{
					NIM_BOOL LOC42;
					LOC42 = 0;
					LOC42 = isindirectcall_366513(a, (*tracked).owner);
					if (!LOC42) goto LA43;
					assumetheworst_367391(tracked, n, op);
				}
				goto LA36;
				LA43: ;
				LA36: ;
			}
			goto LA26;
			LA34: ;
			{
				mergeeffects_365515(tracked, (*effectlist).kindU.S6.sons->data[((NI) 0)], n);
				mergetags_365571(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_367130(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_364693(n);
						markgcunsafe_364723(tracked, a);
					}
					LA57: ;
				}
				LA51: ;
			}
			LA26: ;
		}
		LA14: ;
		{
			NI i_368682;
			NI HEX3Atmp_369078;
			NI LOC60;
			NI res_369081;
			i_368682 = 0;
			HEX3Atmp_369078 = 0;
			LOC60 = 0;
			LOC60 = len_225098(n);
			HEX3Atmp_369078 = (LOC60 - 1);
			res_369081 = ((NI) 1);
			{
				while (1) {
					Ttype224847* LOC63;
					if (!(res_369081 <= HEX3Atmp_369078)) goto LA62;
					i_368682 = res_369081;
					LOC63 = 0;
					LOC63 = paramtype_368443(op, i_368682);
					trackoperand_367446(tracked, (*n).kindU.S6.sons->data[i_368682], LOC63);
					res_369081 += ((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_364646(tracked, (*n).kindU.S6.sons->data[((NI) 1)]);
		}
		LA68: ;
		{
			NI i_368725;
			NI HEX3Atmp_369086;
			NI LOC71;
			NI res_369089;
			i_368725 = 0;
			HEX3Atmp_369086 = 0;
			LOC71 = 0;
			LOC71 = safelen_225126(n);
			HEX3Atmp_369086 = (LOC71 - 1);
			res_369089 = ((NI) 0);
			{
				while (1) {
					if (!(res_369089 <= HEX3Atmp_369086)) goto LA73;
					i_368725 = res_369089;
					track_365843(tracked, (*n).kindU.S6.sons->data[i_368725]);
					res_369089 += ((NI) 1);
				} LA73: ;
			}
		}
	}
	break;
	case ((NU8) 45):
	{
		guarddotaccess_364287(tracked, n);
		{
			NI i_368745;
			NI HEX3Atmp_369094;
			NI LOC76;
			NI res_369097;
			i_368745 = 0;
			HEX3Atmp_369094 = 0;
			LOC76 = 0;
			LOC76 = len_225098(n);
			HEX3Atmp_369094 = (LOC76 - 1);
			res_369097 = ((NI) 0);
			{
				while (1) {
					if (!(res_369097 <= HEX3Atmp_369094)) goto LA78;
					i_368745 = res_369097;
					track_365843(tracked, (*n).kindU.S6.sons->data[i_368745]);
					res_369097 += ((NI) 1);
				} LA78: ;
			}
		}
	}
	break;
	case ((NU8) 46):
	{
		track_365843(tracked, (*n).kindU.S6.sons->data[((NI) 0)]);
		{
			if (!((gnotes_190398 &(IL64(1)<<(((((NU16) 258)- 237))&IL64(63))))!=0)) goto LA82;
			checkfieldaccess_360409((*tracked).guards, n);
		}
		LA82: ;
	}
	break;
	case ((NU8) 106):
	{
		tracktrystmt_365850(tracked, n);
	}
	break;
	case ((NU8) 90):
	{
		trackpragmastmt_366610(tracked, n);
	}
	break;
	case ((NU8) 73):
	case ((NU8) 74):
	{
		track_365843(tracked, (*n).kindU.S6.sons->data[((NI) 1)]);
		initvar_364515(tracked, (*n).kindU.S6.sons->data[((NI) 0)], NIM_TRUE);
		invalidatefacts_357659((&(*tracked).guards), (*n).kindU.S6.sons->data[((NI) 0)]);
		track_365843(tracked, (*n).kindU.S6.sons->data[((NI) 0)]);
		addasgnfact_360086((&(*tracked).guards), (*n).kindU.S6.sons->data[((NI) 0)], (*n).kindU.S6.sons->data[((NI) 1)]);
		notnilcheck_367292(tracked, (*n).kindU.S6.sons->data[((NI) 1)], (*(*n).kindU.S6.sons->data[((NI) 0)]).typ);
	}
	break;
	case ((NU8) 99):
	case ((NU8) 100):
	{
		{
			Tnode224809* child_368801;
			child_368801 = 0;
			{
				NI i_369113;
				NI HEX3Atmp_369115;
				NI LOC90;
				NI res_369117;
				i_369113 = 0;
				HEX3Atmp_369115 = 0;
				LOC90 = 0;
				LOC90 = len_225098(n);
				HEX3Atmp_369115 = (LOC90 - 1);
				res_369117 = ((NI) 0);
				{
					while (1) {
						Tnode224809* last;
						if (!(res_369117 <= HEX3Atmp_369115)) goto LA92;
						i_369113 = res_369117;
						child_368801 = (*n).kindU.S6.sons->data[i_369113];
						last = lastson_227406(child_368801);
						{
							if (!!(((*last).kind == ((NU8) 1)))) goto LA95;
							track_365843(tracked, last);
						}
						LA95: ;
						{
							NIM_BOOL LOC99;
							LOC99 = 0;
							LOC99 = ((*child_368801).kind == ((NU8) 35));
							if (!(LOC99)) goto LA100;
							LOC99 = !(((*last).kind == ((NU8) 1)));
							LA100: ;
							if (!LOC99) goto LA101;
							{
								NI i_368841;
								NI HEX3Atmp_369103;
								NI LOC104;
								NI res_369106;
								i_368841 = 0;
								HEX3Atmp_369103 = 0;
								LOC104 = 0;
								LOC104 = len_225098(child_368801);
								HEX3Atmp_369103 = (NI)(LOC104 - ((NI) 3));
								res_369106 = ((NI) 0);
								{
									while (1) {
										if (!(res_369106 <= HEX3Atmp_369103)) goto LA106;
										i_368841 = res_369106;
										initvar_364515(tracked, (*child_368801).kindU.S6.sons->data[i_368841], NIM_FALSE);
										addasgnfact_360086((&(*tracked).guards), (*child_368801).kindU.S6.sons->data[i_368841], last);
										notnilcheck_367292(tracked, last, (*(*child_368801).kindU.S6.sons->data[i_368841]).typ);
										res_369106 += ((NI) 1);
									} LA106: ;
								}
							}
						}
						LA101: ;
						res_369117 += ((NI) 1);
					} LA92: ;
				}
			}
		}
	}
	break;
	case ((NU8) 97):
	{
		trackcase_367666(tracked, n);
	}
	break;
	case ((NU8) 93):
	case ((NU8) 92):
	case ((NU8) 48):
	{
		trackif_367970(tracked, n);
	}
	break;
	case ((NU8) 112):
	case ((NU8) 127):
	{
		trackblock_368323(tracked, (*n).kindU.S6.sons->data[((NI) 1)]);
	}
	break;
	case ((NU8) 96):
	{
		track_365843(tracked, (*n).kindU.S6.sons->data[((NI) 0)]);
		{
			NIM_BOOL LOC113;
			LOC113 = 0;
			LOC113 = istrue_368402((*n).kindU.S6.sons->data[((NI) 0)]);
			if (!LOC113) goto LA114;
			trackblock_368323(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_357392((&(*tracked).guards), (*n).kindU.S6.sons->data[((NI) 0)]);
			track_365843(tracked, (*n).kindU.S6.sons->data[((NI) 1)]);
			(*tracked).init = (TY332608*) setLengthSeq(&((*tracked).init)->Sup, sizeof(NI), ((NI) (oldstate)));
			(*tracked).guards = (Tnodeseq224803*) setLengthSeq(&((*tracked).guards)->Sup, sizeof(Tnode224809*), ((NI) (oldfacts)));
		}
		LA111: ;
	}
	break;
	case ((NU8) 94):
	case ((NU8) 95):
	{
		NI oldstate;
		oldstate = ((*tracked).init ? (*tracked).init->Sup.len : 0);
		{
			NI i_368918;
			NI HEX3Atmp_369121;
			NI LOC119;
			NI res_369124;
			i_368918 = 0;
			HEX3Atmp_369121 = 0;
			LOC119 = 0;
			LOC119 = len_225098(n);
			HEX3Atmp_369121 = (LOC119 - 1);
			res_369124 = ((NI) 0);
			{
				while (1) {
					if (!(res_369124 <= HEX3Atmp_369121)) goto LA121;
					i_368918 = res_369124;
					track_365843(tracked, (*n).kindU.S6.sons->data[i_368918]);
					res_369124 += ((NI) 1);
				} LA121: ;
			}
		}
		(*tracked).init = (TY332608*) setLengthSeq(&((*tracked).init)->Sup, sizeof(NI), ((NI) (oldstate)));
	}
	break;
	case ((NU8) 38):
	{
		NI oldfacts;
		track_365843(tracked, (*n).kindU.S6.sons->data[((NI) 0)]);
		oldfacts = ((*tracked).guards ? (*tracked).guards->Sup.len : 0);
		{
			NI i_368958;
			NI HEX3Atmp_369129;
			NI LOC124;
			NI res_369132;
			i_368958 = 0;
			HEX3Atmp_369129 = 0;
			LOC124 = 0;
			LOC124 = len_225098(n);
			HEX3Atmp_369129 = (LOC124 - 1);
			res_369132 = ((NI) 1);
			{
				while (1) {
					Tnode224809* x;
					if (!(res_369132 <= HEX3Atmp_369129)) goto LA126;
					i_368958 = res_369132;
					x = (*n).kindU.S6.sons->data[i_368958];
					track_365843(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_360059((&(*tracked).guards), x);
					}
					LA131: ;
					res_369132 += ((NI) 1);
				} LA126: ;
			}
		}
		(*tracked).guards = (Tnodeseq224803*) setLengthSeq(&((*tracked).guards)->Sup, sizeof(Tnode224809*), ((NI) (oldfacts)));
	}
	break;
	case ((NU8) 91):
	{
		Tnode224809* pragmalist;
		NI oldlocked;
		NI16 oldlocklevel;
		Tnode224809* LOC143;
		pragmalist = (*n).kindU.S6.sons->data[((NI) 0)];
		oldlocked = ((*tracked).locked ? (*tracked).locked->Sup.len : 0);
		oldlocklevel = (*tracked).currlocklevel;
		{
			NI i_369026;
			NI HEX3Atmp_369137;
			NI LOC135;
			NI res_369140;
			i_369026 = 0;
			HEX3Atmp_369137 = 0;
			LOC135 = 0;
			LOC135 = len_225098(pragmalist);
			HEX3Atmp_369137 = (LOC135 - 1);
			res_369140 = ((NI) 0);
			{
				while (1) {
					if (!(res_369140 <= HEX3Atmp_369137)) goto LA137;
					i_369026 = res_369140;
					{
						NU16 LOC140;
						LOC140 = 0;
						LOC140 = whichpragma_253687((*pragmalist).kindU.S6.sons->data[i_369026]);
						if (!(LOC140 == ((NU16) 196))) goto LA141;
						locklocations_364167(tracked, (*pragmalist).kindU.S6.sons->data[i_369026]);
					}
					LA141: ;
					res_369140 += ((NI) 1);
				} LA137: ;
			}
		}
		LOC143 = 0;
		LOC143 = lastson_227406(n);
		track_365843(tracked, LOC143);
		(*tracked).locked = (Tnodeseq224803*) setLengthSeq(&((*tracked).locked)->Sup, sizeof(Tnode224809*), ((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_369067;
			NI HEX3Atmp_369145;
			NI LOC147;
			NI res_369148;
			i_369067 = 0;
			HEX3Atmp_369145 = 0;
			LOC147 = 0;
			LOC147 = safelen_225126(n);
			HEX3Atmp_369145 = (LOC147 - 1);
			res_369148 = ((NI) 0);
			{
				while (1) {
					if (!(res_369148 <= HEX3Atmp_369145)) goto LA149;
					i_369067 = res_369148;
					track_365843(tracked, (*n).kindU.S6.sons->data[i_369067]);
					res_369148 += ((NI) 1);
				} LA149: ;
			}
		}
	}
	break;
	}
}

static N_INLINE(NIM_BOOL, isemptytype_229932)(Ttype224847* 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_364755)(Tsym224841* s, NIM_BOOL onlywarning, Intset221056* cyclecheck) {
	Tsym224841* 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_221898(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: ;
		{
			TY192306 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_195161((*s).info, msgkind, LOC18);
		}
		goto LA13;
		LA15: ;
		{
			TY192306 LOC22;
			NimStringDesc* LOC23;
			if (!((520192 &(1<<(((*u).kind)&31)))!=0)) goto LA20;
			listgcunsafety_364755(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_195161((*s).info, msgkind, LOC23);
		}
		goto LA13;
		LA20: ;
		{
			NimStringDesc* LOC30;
			{
				NimStringDesc* LOC29;
				if (!!(((*u).kind == ((NU8) 0)))) goto LA27;
				LOC29 = 0;
				LOC29 = HEX24_195279(TMP3493);
				internalerror_195191(LOC29);
			}
			LA27: ;
			LOC30 = 0;
			LOC30 = nsuFormatSingleElem(((NimStringDesc*) &TMP3494), (*(*s).name).s);
			message_195161((*u).info, msgkind, LOC30);
		}
		LA13: ;
	}
	LA6: ;
}

N_NIMCALL(void, listgcunsafety_364832)(Tsym224841* s, NIM_BOOL onlywarning) {
	Intset221056 cyclecheck;
	memset((void*)(&cyclecheck), 0, sizeof(cyclecheck));
	chckNil((void*)(&cyclecheck));
	memset((void*)(&cyclecheck), 0, sizeof(cyclecheck));
	initintset_221927((&cyclecheck));
	listgcunsafety_364755(s, onlywarning, (&cyclecheck));
}

N_NIMCALL(void, trackproc_369783)(Tsym224841* s, Tnode224809* body) {
	Tnode224809* effects;
	Teffects364008 t;
	Tnode224809* p;
	Tnode224809* raisesspec;
	Tnode224809* tagsspec;
{	effects = (*(*(*s).typ).n).kindU.S6.sons->data[((NI) 0)];
	{
		NimStringDesc* LOC5;
		if (!!(((*effects).kind == ((NU8) 152)))) goto LA3;
		LOC5 = 0;
		LOC5 = HEX24_195279(TMP3463);
		internalerror_195191(LOC5);
	}
	LA3: ;
	{
		if (!(((*s).flags &(1<<((((NU8) 4))&31)))!=0)) goto LA8;
		goto BeforeRet;
	}
	LA8: ;
	{
		NI LOC12;
		LOC12 = 0;
		LOC12 = len_225098(effects);
		if (!(LOC12 == ((NI) 4))) goto LA13;
		goto BeforeRet;
	}
	LA13: ;
	memset((void*)(&t), 0, sizeof(t));
	initeffects_369704(effects, s, (&t));
	track_365843((&t), body);
	{
		NIM_BOOL LOC17;
		NIM_BOOL LOC18;
		NIM_BOOL LOC19;
		Tsym224841* res;
		LOC17 = 0;
		LOC18 = 0;
		LOC19 = 0;
		LOC19 = isemptytype_229932((*(*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_364853(t.init->data, t.init->Sup.len, (*res).Sup.id);
			if (!!(LOC26)) goto LA27;
			message_195161((*body).info, ((NU16) 257), ((NimStringDesc*) &TMP3490));
		}
		LA27: ;
	}
	LA22: ;
	p = (*(*s).ast).kindU.S6.sons->data[((NI) 4)];
	raisesspec = effectspec_366661(p, ((NU16) 156));
	{
		if (!!(raisesspec == 0)) goto LA31;
		checkraisesspec_369278(raisesspec, t.exc, ((NimStringDesc*) &TMP3411), NIM_TRUE, subtyperelation_369251);
		asgnRefNoCycle((void**) (&(*effects).kindU.S6.sons->data[((NI) 0)]), raisesspec);
	}
	LA31: ;
	tagsspec = effectspec_366661(p, ((NU16) 161));
	{
		if (!!(tagsspec == 0)) goto LA35;
		checkraisesspec_369278(tagsspec, t.tags, ((NimStringDesc*) &TMP3415), NIM_FALSE, subtyperelation_369251);
		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_166132 &(1<<((((NU8) 22))&31)))!=0);
			if (!(LOC45)) goto LA46;
			LOC45 = ((gglobaloptions_166132 &(1<<((((NU8) 24))&31)))!=0);
			LA46: ;
			if (!LOC45) goto LA47;
			listgcunsafety_364832(s, NIM_FALSE);
		}
		goto LA43;
		LA47: ;
		{
			listgcunsafety_364832(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: ;
	{
		TY192306 LOC61;
		NimStringDesc* LOC62;
		if (!((*(*s).typ).locklevel < t.maxlocklevel)) goto LA59;
		memset((void*)LOC61, 0, sizeof(LOC61));
		LOC61[0] = HEX24_227096((*(*s).typ).locklevel);
		LOC61[1] = HEX24_227096(t.maxlocklevel);
		LOC62 = 0;
		LOC62 = nsuFormatOpenArray(((NimStringDesc*) &TMP3495), LOC61, 2);
		message_195161((*s).info, ((NU16) 265), LOC62);
	}
	goto LA54;
	LA59: ;
	LA54: ;
	}BeforeRet: ;
}

N_NIMCALL(void, seteffectsforproctype_369612)(Ttype224847* t, Tnode224809* n) {
	Tnode224809* effects;
	Tnode224809* raisesspec;
	Tnode224809* 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_195279(TMP3538);
		internalerror_195191(LOC7);
	}
	LA5: ;
	raisesspec = effectspec_366661(n, ((NU16) 156));
	tagsspec = effectspec_366661(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_225098(effects);
			if (!!((LOC16 == ((NI) 0)))) goto LA17;
			LOC19 = 0;
			LOC19 = HEX24_195279(TMP3539);
			internalerror_195191(LOC19);
		}
		LA17: ;
		if ((*effects).kindU.S6.sons) nimGCunrefNoCycle((*effects).kindU.S6.sons);
		(*effects).kindU.S6.sons = (Tnodeseq224803*) newSeqRC1((&NTI224803), ((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_370008)(Tsym224841* module, Tnode224809* n) {
	Tnode224809* effects;
	Tnodeseq224803* LOC5;
	Teffects364008 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 = (Tnodeseq224803*) newSeq((&NTI224803), 0);
	effects = newnode_226607(((NU8) 152), (*n).info, LOC5, NIM_NIL);
	memset((void*)(&t), 0, sizeof(t));
	initeffects_369704(effects, module, (&t));
	t.istoplevel = NIM_TRUE;
	track_365843((&t), n);
	}BeforeRet: ;
}

N_NIMCALL(Tnode224809*, documenteffect_366736)(Tnode224809* n, Tnode224809* x, NU16 effecttype, NI idx) {
	Tnode224809* result;
	Tnode224809* spec;
{	result = 0;
	spec = effectspec_366661(x, effecttype);
	{
		Tsym224841* s;
		Tnode224809* actual;
		Tnode224809* real;
		Tnode224809* effects;
		NI LOC10;
		Tnodeseq224803* LOC23;
		TY280106 LOC24;
		Tident197021* 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_225098(actual);
			if (!!((LOC7 == ((NI) 4)))) goto LA8;
			goto BeforeRet;
		}
		LA8: ;
		real = (*actual).kindU.S6.sons->data[idx];
		LOC10 = 0;
		LOC10 = len_225098(real);
		effects = newnodei_226407(((NU8) 41), (*n).info, LOC10);
		{
			NI i_366782;
			NI HEX3Atmp_366800;
			NI LOC12;
			NI res_366803;
			i_366782 = 0;
			HEX3Atmp_366800 = 0;
			LOC12 = 0;
			LOC12 = len_225098(real);
			HEX3Atmp_366800 = (LOC12 - 1);
			res_366803 = ((NI) 0);
			{
				while (1) {
					NimStringDesc* t;
					Tnode224809* LOC15;
					Tident197021* LOC21;
					Tnode224809* LOC22;
					if (!(res_366803 <= HEX3Atmp_366800)) goto LA14;
					i_366782 = res_366803;
					LOC15 = 0;
					LOC15 = HEX5BHEX5D_225244(real, i_366782);
					t = typetostring_254032((*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_197463(t);
					asgnRefNoCycle((void**) (&(*effects).kindU.S6.sons->data[i_366782]), newidentnode_226313(LOC21, (*n).info));
					LOC22 = 0;
					LOC22 = HEX5BHEX5D_225244(real, i_366782);
					asgnRefNoCycle((void**) (&(*(*effects).kindU.S6.sons->data[i_366782]).typ), (*LOC22).typ);
					res_366803 += ((NI) 1);
				} LA14: ;
			}
		}
		LOC23 = 0;
		LOC23 = (Tnodeseq224803*) newSeq((&NTI224803), 2);
		memset((void*)LOC24, 0, sizeof(LOC24));
		LOC25 = 0;
		LOC25 = getident_197463(specialwords_205338[(effecttype)- 0]);
		LOC24[0] = newidentnode_226313(LOC25, (*n).info);
		LOC24[1] = effects;
		asgnRefNoCycle((void**) (&LOC23->data[0]), LOC24[0]);
		asgnRefNoCycle((void**) (&LOC23->data[1]), LOC24[1]);
		result = newnode_226607(((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(Tnode224809*, documentwriteeffect_366822)(Tnode224809* n, NU8 flag, NimStringDesc* pragmaname) {
	Tnode224809* result;
	Tsym224841* s;
	Tnode224809* params;
	Tnode224809* effects;
	result = 0;
	s = (*(*n).kindU.S6.sons->data[((NI) 0)]).kindU.S4.sym;
	params = (*(*s).typ).n;
	effects = newnodei_226351(((NU8) 41), (*n).info);
	{
		NI i_366861;
		Slice90365 HEX3Atmp_366899;
		NI LOC2;
		i_366861 = 0;
		memset((void*)(&HEX3Atmp_366899), 0, sizeof(HEX3Atmp_366899));
		LOC2 = 0;
		LOC2 = len_225098(params);
		HEX3Atmp_366899 = HEX2EHEX2E_105290(((NI) 1), (LOC2 - 1));
		{
			NI x_366903;
			NI HEX3Atmp_366905;
			NI HEX3Atmp_366907;
			NI res_366909;
			x_366903 = 0;
			HEX3Atmp_366905 = 0;
			HEX3Atmp_366907 = 0;
			HEX3Atmp_366905 = HEX3Atmp_366899.a;
			HEX3Atmp_366907 = HEX3Atmp_366899.b;
			res_366909 = HEX3Atmp_366905;
			{
				while (1) {
					if (!(res_366909 <= HEX3Atmp_366907)) goto LA5;
					x_366903 = res_366909;
					i_366861 = x_366903;
					{
						NIM_BOOL LOC8;
						Tnode224809* LOC9;
						Tnode224809* LOC11;
						Tnode224809* LOC14;
						LOC8 = 0;
						LOC9 = 0;
						LOC9 = HEX5BHEX5D_225244(params, i_366861);
						LOC8 = ((*LOC9).kind == ((NU8) 3));
						if (!(LOC8)) goto LA10;
						LOC11 = 0;
						LOC11 = HEX5BHEX5D_225244(params, i_366861);
						LOC8 = (((*(*LOC11).kindU.S4.sym).flags &(1<<((flag)&31)))!=0);
						LA10: ;
						if (!LOC8) goto LA12;
						LOC14 = 0;
						LOC14 = HEX5BHEX5D_225244(params, i_366861);
						add_225165(effects, LOC14);
					}
					LA12: ;
					res_366909 += ((NI) 1);
				} LA5: ;
			}
		}
	}
	{
		NI LOC17;
		Tnodeseq224803* LOC20;
		TY280106 LOC21;
		Tident197021* LOC22;
		LOC17 = 0;
		LOC17 = len_225098(effects);
		if (!(((NI) 0) < LOC17)) goto LA18;
		LOC20 = 0;
		LOC20 = (Tnodeseq224803*) newSeq((&NTI224803), 2);
		memset((void*)LOC21, 0, sizeof(LOC21));
		LOC22 = 0;
		LOC22 = getident_197463(pragmaname);
		LOC21[0] = newidentnode_226313(LOC22, (*n).info);
		LOC21[1] = effects;
		asgnRefNoCycle((void**) (&LOC20->data[0]), LOC21[0]);
		asgnRefNoCycle((void**) (&LOC20->data[1]), LOC21[1]);
		result = newnode_226607(((NU8) 34), (*n).info, LOC20, NIM_NIL);
	}
	LA18: ;
	return result;
}

N_NIMCALL(Tnode224809*, documentneweffect_366931)(Tnode224809* n) {
	Tnode224809* result;
	Tsym224841* s;
	result = 0;
	s = (*(*n).kindU.S6.sons->data[((NI) 0)]).kindU.S4.sym;
	{
		Tident197021* LOC5;
		if (!(((*(*s).typ).flags &(1<<((((NU8) 3))&31)))!=0)) goto LA3;
		LOC5 = 0;
		LOC5 = getident_197463(((NimStringDesc*) &TMP5028));
		result = newidentnode_226313(LOC5, (*n).info);
	}
	LA3: ;
	return result;
}

N_NIMCALL(void, documentraises_366955)(Tnode224809* n) {
	Tnode224809* pragmas;
	Tnode224809* p1;
	Tnode224809* p2;
	Tnode224809* p3;
	Tnode224809* p4;
	Tnode224809* 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_366736(n, pragmas, ((NU16) 156), ((NI) 0));
	p2 = documenteffect_366736(n, pragmas, ((NU16) 161), ((NI) 3));
	p3 = documentwriteeffect_366822(n, ((NU8) 26), ((NimStringDesc*) &TMP5027));
	p4 = documentneweffect_366931(n);
	p5 = documentwriteeffect_366822(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_226351(((NU8) 90), (*n).info));
		}
		LA19: ;
		{
			if (!!((p1 == NIM_NIL))) goto LA23;
			add_225165((*n).kindU.S6.sons->data[((NI) 4)], p1);
		}
		LA23: ;
		{
			if (!!((p2 == NIM_NIL))) goto LA27;
			add_225165((*n).kindU.S6.sons->data[((NI) 4)], p2);
		}
		LA27: ;
		{
			if (!!((p3 == NIM_NIL))) goto LA31;
			add_225165((*n).kindU.S6.sons->data[((NI) 4)], p3);
		}
		LA31: ;
		{
			if (!!((p4 == NIM_NIL))) goto LA35;
			add_225165((*n).kindU.S6.sons->data[((NI) 4)], p4);
		}
		LA35: ;
		{
			if (!!((p5 == NIM_NIL))) goto LA39;
			add_225165((*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) {
}

