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

#include "nimbase.h"
#include <string.h>
typedef struct Tnode213790 Tnode213790;
typedef struct Ttype213828 Ttype213828;
typedef struct Tlineinfo181337 Tlineinfo181337;
typedef struct NimStringDesc NimStringDesc;
typedef struct TGenericSeq TGenericSeq;
typedef struct Tsym213822 Tsym213822;
typedef struct Tident188012 Tident188012;
typedef struct Tnodeseq213784 Tnodeseq213784;
typedef struct Tidobj188006 Tidobj188006;
typedef struct TNimObject TNimObject;
typedef struct TNimType TNimType;
typedef struct TNimNode TNimNode;
typedef struct Ttypeseq213824 Ttypeseq213824;
typedef struct Tloc213804 Tloc213804;
typedef struct Ropeobj168006 Ropeobj168006;
typedef struct Tscope213816 Tscope213816;
typedef struct TY213925 TY213925;
typedef struct Tstrtable213794 Tstrtable213794;
typedef struct Tsymseq213792 Tsymseq213792;
typedef struct Tlib213808 Tlib213808;
typedef struct TY88887 TY88887;
typedef struct Tsametypeclosure243429 Tsametypeclosure243429;
typedef struct TY243442 TY243442;
typedef struct TY243443 TY243443;
typedef struct Intset210035 Intset210035;
typedef struct Trunk210031 Trunk210031;
typedef struct Trunkseq210033 Trunkseq210033;
typedef struct Cell47705 Cell47705;
typedef struct Cellseq47721 Cellseq47721;
typedef struct Gcheap50018 Gcheap50018;
typedef struct Gcstack50016 Gcstack50016;
typedef struct Cellset47717 Cellset47717;
typedef struct Pagedesc47713 Pagedesc47713;
typedef struct Memregion29888 Memregion29888;
typedef struct Smallchunk29840 Smallchunk29840;
typedef struct Llchunk29882 Llchunk29882;
typedef struct Bigchunk29842 Bigchunk29842;
typedef struct Intset29814 Intset29814;
typedef struct Trunk29810 Trunk29810;
typedef struct Avlnode29886 Avlnode29886;
typedef struct Gcstat50014 Gcstat50014;
typedef struct Tinstantiation213812 Tinstantiation213812;
typedef struct Tlistentry135010 Tlistentry135010;
typedef struct Basechunk29838 Basechunk29838;
typedef struct Freecell29830 Freecell29830;
typedef struct TY213913 TY213913;
struct  Tlineinfo181337  {
NI16 line;
NI16 col;
NI32 fileindex;
};
struct  TGenericSeq  {
NI len;
NI reserved;
};
struct  NimStringDesc  {
  TGenericSeq Sup;
NIM_CHAR data[SEQ_DECL_SIZE];
};
struct  Tnode213790  {
Ttype213828* typ;
Tlineinfo181337 info;
NU16 flags;
NU8 kind;
union{
struct {NI64 intval;
} S1;
struct {NF floatval;
} S2;
struct {NimStringDesc* strval;
} S3;
struct {Tsym213822* sym;
} S4;
struct {Tident188012* ident;
} S5;
struct {Tnodeseq213784* sons;
} S6;
} kindU;
NimStringDesc* comment;
};
typedef N_NIMCALL_PTR(void, TY3489) (void* p, NI op);
typedef N_NIMCALL_PTR(void*, TY3494) (void* p);
struct  TNimType  {
NI size;
NU8 kind;
NU8 flags;
TNimType* base;
TNimNode* node;
void* finalizer;
TY3489 marker;
TY3494 deepcopy;
};
struct  TNimObject  {
TNimType* m_type;
};
struct  Tidobj188006  {
  TNimObject Sup;
NI id;
};
struct  Tloc213804  {
NU8 k;
NU8 s;
NU16 flags;
Ttype213828* t;
Ropeobj168006* r;
Ropeobj168006* heaproot;
};
struct  Ttype213828  {
  Tidobj188006 Sup;
NU8 kind;
NU8 callconv;
NU32 flags;
Ttypeseq213824* sons;
Tnode213790* n;
Tsym213822* owner;
Tsym213822* sym;
Tsym213822* destructor;
Tsym213822* deepcopy;
Tsym213822* assignment;
NI64 size;
NI16 align;
NI16 locklevel;
Tloc213804 loc;
};
struct  Tstrtable213794  {
NI counter;
Tsymseq213792* data;
};
struct  Tsym213822  {
  Tidobj188006 Sup;
NU8 kind;
union{
struct {Ttypeseq213824* typeinstcache;
Tscope213816* typscope;
} S1;
struct {TY213925* procinstcache;
Tsym213822* gcunsafetyreason;
} S2;
struct {TY213925* usedgenerics;
Tstrtable213794 tab;
} S3;
struct {Tsym213822* guard;
NI bitsize;
} S4;
} kindU;
NU8 magic;
Ttype213828* typ;
Tident188012* name;
Tlineinfo181337 info;
Tsym213822* owner;
NU32 flags;
Tnode213790* ast;
NU32 options;
NI position;
NI offset;
Tloc213804 loc;
Tlib213808* annex;
Tnode213790* constraint;
};
struct  Tident188012  {
  Tidobj188006 Sup;
NimStringDesc* s;
Tident188012* next;
NI h;
};
typedef NimStringDesc* TY241206[62];
struct TY88887 {
NimStringDesc* Field0;
NI Field1;
};
typedef NimStringDesc* TY213016[10];
struct  Tsametypeclosure243429  {
NU8 cmp;
NI reccheck;
NU8 flags;
TY243442* s;
};
struct TY243443 {
NI Field0;
NI Field1;
};
struct  TNimNode  {
NU8 kind;
NI offset;
TNimType* typ;
NCSTRING name;
NI len;
TNimNode** sons;
};
typedef N_NIMCALL_PTR(NIM_BOOL, Ttypeiter239025) (Ttype213828* t, TNimObject* closure);
struct  Intset210035  {
NI counter;
NI max;
Trunk210031* head;
Trunkseq210033* data;
};
struct  Cell47705  {
NI refcount;
TNimType* typ;
};
struct  Cellseq47721  {
NI len;
NI cap;
Cell47705** d;
};
struct  Cellset47717  {
NI counter;
NI max;
Pagedesc47713* head;
Pagedesc47713** data;
};
typedef Smallchunk29840* TY29903[512];
typedef Trunk29810* Trunkbuckets29812[256];
struct  Intset29814  {
Trunkbuckets29812 data;
};
struct  Memregion29888  {
NI minlargeobj;
NI maxlargeobj;
TY29903 freesmallchunks;
Llchunk29882* llmem;
NI currmem;
NI maxmem;
NI freemem;
NI lastsize;
Bigchunk29842* freechunkslist;
Intset29814 chunkstarts;
Avlnode29886* root;
Avlnode29886* deleted;
Avlnode29886* last;
Avlnode29886* freeavlnodes;
};
struct  Gcstat50014  {
NI stackscans;
NI cyclecollections;
NI maxthreshold;
NI maxstacksize;
NI maxstackcells;
NI cycletablesize;
NI64 maxpause;
};
struct  Gcheap50018  {
Gcstack50016* stack;
void* stackbottom;
NI cyclethreshold;
Cellseq47721 zct;
Cellseq47721 decstack;
Cellset47717 cycleroots;
Cellseq47721 tempstack;
NI recgclock;
Memregion29888 region;
Gcstat50014 stat;
};
typedef N_NIMCALL_PTR(NIM_BOOL, Ttypepredicate239029) (Ttype213828* t);
struct  Ropeobj168006  {
  TNimObject Sup;
Ropeobj168006* left;
Ropeobj168006* right;
NI length;
NimStringDesc* data;
};
struct  Tscope213816  {
NI depthlevel;
Tstrtable213794 symbols;
Tnodeseq213784* usingsyms;
Tscope213816* parent;
};
struct  Tlistentry135010  {
  TNimObject Sup;
Tlistentry135010* prev;
Tlistentry135010* next;
};
struct  Tlib213808  {
  Tlistentry135010 Sup;
NU8 kind;
NIM_BOOL generated;
NIM_BOOL isoverriden;
Ropeobj168006* name;
Tnode213790* path;
};
typedef NI TY29819[8];
struct  Trunk210031  {
Trunk210031* next;
NI key;
TY29819 bits;
};
struct  Gcstack50016  {
Gcstack50016* prev;
Gcstack50016* next;
void* starts;
void* pos;
NI maxstacksize;
};
struct  Pagedesc47713  {
Pagedesc47713* next;
NI key;
TY29819 bits;
};
struct  Basechunk29838  {
NI prevsize;
NI size;
NIM_BOOL used;
};
struct  Smallchunk29840  {
  Basechunk29838 Sup;
Smallchunk29840* next;
Smallchunk29840* prev;
Freecell29830* freelist;
NI free;
NI acc;
NF data;
};
struct  Llchunk29882  {
NI size;
NI acc;
Llchunk29882* next;
};
struct  Bigchunk29842  {
  Basechunk29838 Sup;
Bigchunk29842* next;
Bigchunk29842* prev;
NI align;
NF data;
};
struct  Trunk29810  {
Trunk29810* next;
NI key;
TY29819 bits;
};
typedef Avlnode29886* TY29893[2];
struct  Avlnode29886  {
TY29893 link;
NI key;
NI upperbound;
NI level;
};
struct  Tinstantiation213812  {
Tsym213822* sym;
Ttypeseq213824* concretetypes;
TY213913* usedby;
NI compilesid;
};
struct  Freecell29830  {
Freecell29830* next;
NI zerofield;
};
struct TY243442 {
  TGenericSeq Sup;
  TY243443 data[SEQ_DECL_SIZE];
};
struct Ttypeseq213824 {
  TGenericSeq Sup;
  Ttype213828* data[SEQ_DECL_SIZE];
};
struct Tnodeseq213784 {
  TGenericSeq Sup;
  Tnode213790* data[SEQ_DECL_SIZE];
};
struct TY213925 {
  TGenericSeq Sup;
  Tinstantiation213812* data[SEQ_DECL_SIZE];
};
struct Tsymseq213792 {
  TGenericSeq Sup;
  Tsym213822* data[SEQ_DECL_SIZE];
};
struct Trunkseq210033 {
  TGenericSeq Sup;
  Trunk210031* data[SEQ_DECL_SIZE];
};
struct TY213913 {
  TGenericSeq Sup;
  NI32 data[SEQ_DECL_SIZE];
};
N_NIMCALL(NU8, classify_248066)(Ttype213828* t);
N_NIMCALL(Ttype213828*, skiptypes_217113)(Ttype213828* t, NU64 kinds);
N_NIMCALL(NimStringDesc*, copyString)(NimStringDesc* src);
static N_INLINE(NIM_BOOL, isintlit_239222)(Ttype213828* t);
static N_INLINE(void, appendString)(NimStringDesc* dest, NimStringDesc* src);
N_NIMCALL(NimStringDesc*, nimInt64ToStr)(NI64 x);
N_NIMCALL(NimStringDesc*, rawNewString)(NI space);
static N_INLINE(void, appendChar)(NimStringDesc* dest, NIM_CHAR c);
static N_INLINE(void, addtypeflags_241211)(NimStringDesc** name, Ttype213828* typ);
N_NIMCALL(void, unsureAsgnRef)(void** dest, void* src);
N_NIMCALL(NimStringDesc*, resizeString)(NimStringDesc* dest, NI addlen);
N_NIMCALL(NimStringDesc*, typetostring_239017)(Ttype213828* typ, NU8 prefer);
N_NIMCALL(NI, sonslen_216327)(Ttype213828* n);
N_NIMCALL(NimStringDesc*, addChar)(NimStringDesc* s, NIM_CHAR c);
N_NIMCALL(Ttype213828*, base_239021)(Ttype213828* t);
N_NIMCALL(NI, len_216339)(Ttype213828* n);
N_NIMCALL(void, internalerror_186113)(NimStringDesc* errmsg);
N_NIMCALL(NimStringDesc*, HEX24_186183)(TY88887 x);
N_NIMCALL(NimStringDesc*, rendertree_232044)(Tnode213790* n, NU8 renderflags);
N_NIMCALL(NimStringDesc*, rangetostr_241024)(Tnode213790* n);
N_NIMCALL(NimStringDesc*, valuetostring_241017)(Tnode213790* a);
N_NIMCALL(NimStringDesc*, nimFloatToStr)(NF f);
N_NIMCALL(NI, sonslen_216351)(Tnode213790* n);
N_NIMCALL(NimStringDesc*, setLengthStr)(NimStringDesc* s, NI newlen);
static N_INLINE(NI, len_214059)(Tnode213790* n);
static N_INLINE(Tnode213790*, HEX5BHEX5D_214238)(Tnode213790* n, NI i);
static N_INLINE(void, addsep_100319)(NimStringDesc** dest, NimStringDesc* sep, NI startlen);
N_NIMCALL(NimStringDesc*, HEX24_216069)(NI16 x);
N_NIMCALL(NimStringDesc*, nsuFormatSingleElem)(NimStringDesc* formatstr, NimStringDesc* a);
N_NIMCALL(Ttype213828*, elemtype_239383)(Ttype213828* t);
N_NIMCALL(Ttype213828*, lastson_216377)(Ttype213828* n);
N_NIMCALL(void, initsametypeclosure_243448)(Tsametypeclosure243429* Result);
N_NOINLINE(void, chckNil)(void* p);
N_NIMCALL(NIM_BOOL, sametypeaux_243580)(Ttype213828* x, Ttype213828* y, Tsametypeclosure243429* c);
N_NIMCALL(Ttype213828*, skipgenericalias_244606)(Ttype213828* t);
N_NIMCALL(NIM_BOOL, isgenericalias_244584)(Ttype213828* t);
static N_INLINE(NIM_BOOL, sameflags_244622)(Ttype213828* a, Ttype213828* b);
N_NIMCALL(NIM_BOOL, exprstructuralequivalent_238099)(Tnode213790* a, Tnode213790* b, NIM_BOOL strictsymequality);
N_NIMCALL(NIM_BOOL, containsorincl_243451)(Tsametypeclosure243429* c, Ttype213828* a, Ttype213828* b);
static N_INLINE(NIM_BOOL, contains_243469)(TY243443* a, NI aLen0, TY243443 item);
static N_INLINE(NI, find_243479)(TY243443* a, NI aLen0, TY243443 item);
N_NIMCALL(NIM_BOOL, HEX3DHEX3D_243515)(TY243443 x, TY243443 y);
N_NIMCALL(void, TMP2779)(void* p, NI op);
N_NIMCALL(void*, newSeq)(TNimType* typ, NI len);
N_NIMCALL(TGenericSeq*, incrSeqV2)(TGenericSeq* seq, NI elemsize);
N_NIMCALL(NIM_BOOL, sameobjectstructures_244530)(Ttype213828* a, Ttype213828* b, Tsametypeclosure243429* c);
N_NIMCALL(NIM_BOOL, sametypeornilaux_243586)(Ttype213828* a, Ttype213828* b, Tsametypeclosure243429* c);
N_NIMCALL(NIM_BOOL, sameobjecttree_244407)(Tnode213790* a, Tnode213790* b, Tsametypeclosure243429* c);
static N_INLINE(NIM_BOOL, eqStrings)(NimStringDesc* a, NimStringDesc* b);
N_NIMCALL(NIM_BOOL, sametuple_244210)(Ttype213828* a, Ttype213828* b, Tsametypeclosure243429* c);
N_NIMCALL(void, internalerror_186100)(Tlineinfo181337 info, NimStringDesc* errmsg);
N_NIMCALL(NIM_BOOL, samechildrenaux_244557)(Ttype213828* a, Ttype213828* b, Tsametypeclosure243429* c);
N_NIMCALL(NIM_BOOL, sameconstraints_243758)(Tnode213790* a, Tnode213790* b);
N_NIMCALL(NIM_BOOL, samevalue_220189)(Tnode213790* a, Tnode213790* b);
N_NIMCALL(NIM_BOOL, iterovertype_239038)(Ttype213828* t, Ttypeiter239025 iter, TNimObject* closure);
N_NIMCALL(void, initintset_210885)(Intset210035* Result);
N_NIMCALL(NIM_BOOL, iterovertypeaux_239859)(Intset210035* marker, Ttype213828* t, Ttypeiter239025 iter, TNimObject* closure);
N_NIMCALL(NIM_BOOL, containsorincl_210862)(Intset210035* s, NI key);
N_NIMCALL(NIM_BOOL, iterovernode_239866)(Intset210035* marker, Tnode213790* n, Ttypeiter239025 iter, TNimObject* closure);
N_NIMCALL(NIM_BOOL, containsgenerictypeiter_247413)(Ttype213828* t, TNimObject* closure);
N_NIMCALL(NI64, firstord_239001)(Ttype213828* t);
N_NIMCALL(NI64, getordvalue_239118)(Tnode213790* n);
N_NIMCALL(void, localerror_186080)(Tlineinfo181337 info, NU16 msg, NimStringDesc* arg);
N_NIMCALL(NimStringDesc*, reprEnum)(NI e_85209, TNimType* typ);
N_NIMCALL(NI64, lastord_239004)(Ttype213828* t);
N_NIMCALL(NI64, lengthord_239007)(Ttype213828* t);
N_NIMCALL(NIM_BOOL, isordinaltype_239057)(Ttype213828* t);
N_NIMCALL(NIM_BOOL, compatibleeffectsaux_247575)(Tnode213790* se, Tnode213790* re);
N_NIMCALL(NI, safeinheritancediff_247552)(Ttype213828* a, Ttype213828* b);
N_NIMCALL(NI, inheritancediff_245442)(Ttype213828* a, Ttype213828* b);
N_NIMCALL(NIM_BOOL, sameobjecttypes_244344)(Ttype213828* a, Ttype213828* b);
N_NIMCALL(NIM_BOOL, isemptycontainer_248113)(Ttype213828* t);
N_NIMCALL(NI64, computesize_239121)(Ttype213828* typ);
N_NIMCALL(NI64, computesizeaux_247057)(Ttype213828* typ, NI64* a);
N_NIMCALL(NI64, align_247049)(NI64 address, NI64 alignment);
N_NIMCALL(NIM_BOOL, isobjectwithtypefieldpredicate_240297)(Ttype213828* t);
N_NIMCALL(NI64, computerecsizeaux_247062)(Tnode213790* n, NI64* a, NI64* curroffset);
N_NIMCALL(Tnode213790*, lastson_216364)(Tnode213790* n);
N_NIMCALL(NIM_BOOL, sametype_243628)(Ttype213828* a, Ttype213828* b, NU8 flags);
N_NIMCALL(NU8, equalparam_243681)(Tsym213822* a, Tsym213822* b);
N_NIMCALL(NIM_BOOL, sametypeornil_243638)(Ttype213828* a, Ttype213828* b, NU8 flags);
N_NIMCALL(Ttype213828*, typeallowedaux_246237)(Intset210035* marker, Ttype213828* typ, NU8 kind, NU8 flags_246245);
N_NIMCALL(Ttype213828*, typeallowednode_246246)(Intset210035* marker, Tnode213790* n, NU8 kind, NU8 flags);
N_NIMCALL(Ttype213828*, copytype_216470)(Ttype213828* t, Tsym213822* owner, NIM_BOOL keepid);
static N_INLINE(void, asgnRefNoCycle)(void** dest, void* src);
static N_INLINE(Cell47705*, usrtocell_51640)(void* usr);
static N_INLINE(void, rtladdzct_53201)(Cell47705* c);
N_NOINLINE(void, addzct_51617)(Cellseq47721* s, Cell47705* c);
N_NIMCALL(Ttype213828*, taketype_248135)(Ttype213828* formal, Ttype213828* arg);
N_NIMCALL(Tnode213790*, copytree_217822)(Tnode213790* src);
N_NIMCALL(Tnode213790*, skipconv_248082)(Tnode213790* n);
N_NIMCALL(NIM_BOOL, searchtypefor_240273)(Ttype213828* t, Ttypepredicate239029 predicate);
N_NIMCALL(NIM_BOOL, searchtypeforaux_239967)(Ttype213828* t, Ttypepredicate239029 predicate, Intset210035* marker);
N_NIMCALL(NIM_BOOL, searchtypenodeforaux_239973)(Tnode213790* n, Ttypepredicate239029 p, Intset210035* marker);
N_NIMCALL(NIM_BOOL, isgcref_240486)(Ttype213828* t);
N_NIMCALL(void, incl_210832)(Intset210035* s, NI key);
N_NIMCALL(NIM_BOOL, contains_210811)(Intset210035* s, NI key);
N_NIMCALL(NIM_BOOL, canformacycleaux_240576)(Intset210035* marker, Ttype213828* typ, NI startid);
N_NIMCALL(NIM_BOOL, canformacyclenode_240582)(Intset210035* marker, Tnode213790* n, NI startid);
N_NIMCALL(NU8, analyseobjectwithtypefieldaux_240372)(Ttype213828* t, Intset210035* marker);
N_NIMCALL(NIM_BOOL, ishiddenpointer_240557)(Ttype213828* t);
static N_INLINE(NIM_BOOL, iscompiletimeonly_247906)(Ttype213828* t);
N_NIMCALL(NIM_BOOL, HEX3DHEX3D_247927)(Ttypeseq213824* x, Ttypeseq213824* y);
STRING_LITERAL(TMP2116, "", 0);
STRING_LITERAL(TMP2117, " literal(", 9);
STRING_LITERAL(TMP2118, ")", 1);
STRING_LITERAL(TMP2119, "shared ", 7);
STRING_LITERAL(TMP2120, " not nil", 8);
STRING_LITERAL(TMP2121, "None", 4);
STRING_LITERAL(TMP2122, "bool", 4);
STRING_LITERAL(TMP2123, "Char", 4);
STRING_LITERAL(TMP2124, "empty", 5);
STRING_LITERAL(TMP2125, "Array Constructor [$1]", 22);
STRING_LITERAL(TMP2126, "nil", 3);
STRING_LITERAL(TMP2127, "untyped", 7);
STRING_LITERAL(TMP2128, "typed", 5);
STRING_LITERAL(TMP2129, "typeDesc", 8);
STRING_LITERAL(TMP2130, "GenericInvocation", 17);
STRING_LITERAL(TMP2131, "GenericBody", 11);
STRING_LITERAL(TMP2132, "GenericInst", 11);
STRING_LITERAL(TMP2133, "GenericParam", 12);
STRING_LITERAL(TMP2134, "distinct $1", 11);
STRING_LITERAL(TMP2135, "enum", 4);
STRING_LITERAL(TMP2136, "ordinal[$1]", 11);
STRING_LITERAL(TMP2137, "array[$1, $2]", 13);
STRING_LITERAL(TMP2138, "object", 6);
STRING_LITERAL(TMP2139, "tuple", 5);
STRING_LITERAL(TMP2140, "set[$1]", 7);
STRING_LITERAL(TMP2141, "range[$1]", 9);
STRING_LITERAL(TMP2142, "ptr ", 4);
STRING_LITERAL(TMP2143, "ref ", 4);
STRING_LITERAL(TMP2144, "var ", 4);
STRING_LITERAL(TMP2145, "seq[$1]", 7);
STRING_LITERAL(TMP2146, "proc", 4);
STRING_LITERAL(TMP2147, "pointer", 7);
STRING_LITERAL(TMP2148, "OpenArray[$1]", 13);
STRING_LITERAL(TMP2149, "string", 6);
STRING_LITERAL(TMP2150, "CString", 7);
STRING_LITERAL(TMP2151, "Forward", 7);
STRING_LITERAL(TMP2152, "int", 3);
STRING_LITERAL(TMP2153, "int8", 4);
STRING_LITERAL(TMP2154, "int16", 5);
STRING_LITERAL(TMP2155, "int32", 5);
STRING_LITERAL(TMP2156, "int64", 5);
STRING_LITERAL(TMP2157, "float", 5);
STRING_LITERAL(TMP2158, "float32", 7);
STRING_LITERAL(TMP2159, "float64", 7);
STRING_LITERAL(TMP2160, "float128", 8);
STRING_LITERAL(TMP2161, "uint", 4);
STRING_LITERAL(TMP2162, "uint8", 5);
STRING_LITERAL(TMP2163, "uint16", 6);
STRING_LITERAL(TMP2164, "uint32", 6);
STRING_LITERAL(TMP2165, "uint64", 6);
STRING_LITERAL(TMP2166, "bignum", 6);
STRING_LITERAL(TMP2167, "const ", 6);
STRING_LITERAL(TMP2168, "!", 1);
STRING_LITERAL(TMP2169, "varargs[$1]", 11);
STRING_LITERAL(TMP2170, "iter[$1]", 8);
STRING_LITERAL(TMP2171, "Error Type", 10);
STRING_LITERAL(TMP2172, "BuiltInTypeClass", 16);
STRING_LITERAL(TMP2173, "UserTypeClass", 13);
STRING_LITERAL(TMP2174, "UserTypeClassInst", 17);
STRING_LITERAL(TMP2175, "CompositeTypeClass", 18);
STRING_LITERAL(TMP2176, "and", 3);
STRING_LITERAL(TMP2177, "or", 2);
STRING_LITERAL(TMP2178, "not", 3);
STRING_LITERAL(TMP2179, "any", 3);
STRING_LITERAL(TMP2180, "static", 6);
STRING_LITERAL(TMP2181, "TypeFromExpr", 12);
STRING_LITERAL(TMP2182, "FieldAccessor", 13);
NIM_CONST TY241206 typetostr_241203 = {((NimStringDesc*) &TMP2121),
((NimStringDesc*) &TMP2122),
((NimStringDesc*) &TMP2123),
((NimStringDesc*) &TMP2124),
((NimStringDesc*) &TMP2125),
((NimStringDesc*) &TMP2126),
((NimStringDesc*) &TMP2127),
((NimStringDesc*) &TMP2128),
((NimStringDesc*) &TMP2129),
((NimStringDesc*) &TMP2130),
((NimStringDesc*) &TMP2131),
((NimStringDesc*) &TMP2132),
((NimStringDesc*) &TMP2133),
((NimStringDesc*) &TMP2134),
((NimStringDesc*) &TMP2135),
((NimStringDesc*) &TMP2136),
((NimStringDesc*) &TMP2137),
((NimStringDesc*) &TMP2138),
((NimStringDesc*) &TMP2139),
((NimStringDesc*) &TMP2140),
((NimStringDesc*) &TMP2141),
((NimStringDesc*) &TMP2142),
((NimStringDesc*) &TMP2143),
((NimStringDesc*) &TMP2144),
((NimStringDesc*) &TMP2145),
((NimStringDesc*) &TMP2146),
((NimStringDesc*) &TMP2147),
((NimStringDesc*) &TMP2148),
((NimStringDesc*) &TMP2149),
((NimStringDesc*) &TMP2150),
((NimStringDesc*) &TMP2151),
((NimStringDesc*) &TMP2152),
((NimStringDesc*) &TMP2153),
((NimStringDesc*) &TMP2154),
((NimStringDesc*) &TMP2155),
((NimStringDesc*) &TMP2156),
((NimStringDesc*) &TMP2157),
((NimStringDesc*) &TMP2158),
((NimStringDesc*) &TMP2159),
((NimStringDesc*) &TMP2160),
((NimStringDesc*) &TMP2161),
((NimStringDesc*) &TMP2162),
((NimStringDesc*) &TMP2163),
((NimStringDesc*) &TMP2164),
((NimStringDesc*) &TMP2165),
((NimStringDesc*) &TMP2166),
((NimStringDesc*) &TMP2167),
((NimStringDesc*) &TMP2168),
((NimStringDesc*) &TMP2169),
((NimStringDesc*) &TMP2170),
((NimStringDesc*) &TMP2171),
((NimStringDesc*) &TMP2172),
((NimStringDesc*) &TMP2173),
((NimStringDesc*) &TMP2174),
((NimStringDesc*) &TMP2175),
((NimStringDesc*) &TMP2176),
((NimStringDesc*) &TMP2177),
((NimStringDesc*) &TMP2178),
((NimStringDesc*) &TMP2179),
((NimStringDesc*) &TMP2180),
((NimStringDesc*) &TMP2181),
((NimStringDesc*) &TMP2182)}
;
STRING_LITERAL(TMP2183, "int literal(", 12);
STRING_LITERAL(TMP2184, ", ", 2);
STRING_LITERAL(TMP2185, "typedesc", 8);
STRING_LITERAL(TMP2186, "typedesc[", 9);
STRING_LITERAL(TMP2187, "]", 1);
STRING_LITERAL(TMP2189, "compiler/types.nim", 18);
NIM_CONST TY88887 TMP2188 = {((NimStringDesc*) &TMP2189),
((NI) 451)}
;
STRING_LITERAL(TMP2190, "static[", 7);
STRING_LITERAL(TMP2191, "(", 1);
NIM_CONST TY88887 TMP2192 = {((NimStringDesc*) &TMP2189),
((NI) 458)}
;
STRING_LITERAL(TMP2193, "var", 3);
STRING_LITERAL(TMP2194, "ref", 3);
STRING_LITERAL(TMP2195, "ptr", 3);
STRING_LITERAL(TMP2196, "seq", 3);
STRING_LITERAL(TMP2197, "array", 5);
STRING_LITERAL(TMP2198, "set", 3);
STRING_LITERAL(TMP2199, "range", 5);
STRING_LITERAL(TMP2200, "distinct", 8);
STRING_LITERAL(TMP2201, "openarray", 9);
STRING_LITERAL(TMP2202, "[", 1);
STRING_LITERAL(TMP2203, " and ", 5);
STRING_LITERAL(TMP2204, " or ", 4);
STRING_LITERAL(TMP2205, "not ", 4);
NIM_CONST TY88887 TMP2206 = {((NimStringDesc*) &TMP2189),
((NI) 489)}
;
STRING_LITERAL(TMP2207, "array[", 6);
STRING_LITERAL(TMP2208, "<invalid value>", 15);
STRING_LITERAL(TMP2209, "..", 2);
STRING_LITERAL(TMP2210, "Array constructor[", 18);
STRING_LITERAL(TMP2211, "seq[", 4);
STRING_LITERAL(TMP2212, "ordinal[", 8);
STRING_LITERAL(TMP2213, "set[", 4);
STRING_LITERAL(TMP2214, "openarray[", 10);
STRING_LITERAL(TMP2215, "distinct ", 9);
STRING_LITERAL(TMP2216, "tuple[", 6);
STRING_LITERAL(TMP2217, ": ", 2);
STRING_LITERAL(TMP2218, "tuple[]", 7);
STRING_LITERAL(TMP2219, "range ", 6);
STRING_LITERAL(TMP2220, "iterator (", 10);
STRING_LITERAL(TMP2221, "proc (", 6);
extern NIM_CONST TY213016 Callingconvtostr_213013;
STRING_LITERAL(TMP2232, "noSideEffect", 12);
STRING_LITERAL(TMP2233, "gcsafe", 6);
STRING_LITERAL(TMP2234, "locks: ", 7);
STRING_LITERAL(TMP2237, "{.", 2);
STRING_LITERAL(TMP2238, ".}", 2);
STRING_LITERAL(TMP2780, "sameTuple", 9);
NIM_CONST TY88887 TMP2781 = {((NimStringDesc*) &TMP2189),
((NI) 731)}
;
STRING_LITERAL(TMP2791, "invalid kind for first(", 23);
STRING_LITERAL(TMP2792, "invalid kind for last(", 22);
NIM_CONST TY88887 TMP2795 = {((NimStringDesc*) &TMP2189),
((NI) 1387)}
;
NIM_CONST TY88887 TMP2796 = {((NimStringDesc*) &TMP2189),
((NI) 1388)}
;
STRING_LITERAL(TMP2804, "getProcHeader", 13);
STRING_LITERAL(TMP2965, "computeRecSizeAux(record case branch)", 37);
STRING_LITERAL(TMP2966, "getSize: ", 9);
NIM_CONST TY88887 TMP3507 = {((NimStringDesc*) &TMP2189),
((NI) 1364)}
;
STRING_LITERAL(TMP3576, "searchTypeNodeForAux(record case branch)", 40);
STRING_LITERAL(TMP3577, "searchTypeNodeForAux()", 22);
TNimType NTI243443; /* tuple[a: int, b: int] */
extern TNimType NTI104; /* int */
TNimType NTI243442; /* seq[tuple[a: int, b: int]] */
extern NI intsize_166615;
extern TNimType NTI213241; /* TTypeKind */
extern NI floatsize_166616;
extern NI ptrsize_166617;
extern Gcheap50018 gch_50059;

N_NIMCALL(NU8, classify_248066)(Ttype213828* t) {
	NU8 result;
	result = 0;
	{
		if (!(t == NIM_NIL)) goto LA3;
		result = ((NU8) 0);
	}
	goto LA1;
	LA3: ;
	{
		Ttype213828* LOC6;
		LOC6 = 0;
		LOC6 = skiptypes_217113(t, IL64(211106242013440));
		switch ((*LOC6).kind) {
		case ((NU8) 36) ... ((NU8) 39):
		{
			result = ((NU8) 2);
		}
		break;
		case ((NU8) 31) ... ((NU8) 35):
		case ((NU8) 40) ... ((NU8) 44):
		case ((NU8) 1):
		case ((NU8) 2):
		case ((NU8) 14):
		{
			result = ((NU8) 1);
		}
		break;
		default:
		{
			result = ((NU8) 0);
		}
		break;
		}
	}
	LA1: ;
	return result;
}

N_NIMCALL(Tnode213790*, skipconv_248082)(Tnode213790* n) {
	Tnode213790* result;
	result = 0;
	result = n;
	switch ((*n).kind) {
	case ((NU8) 67):
	case ((NU8) 66):
	case ((NU8) 70):
	case ((NU8) 68):
	case ((NU8) 69):
	{
		{
			NU8 LOC4;
			NU8 LOC5;
			LOC4 = 0;
			LOC4 = classify_248066((*(*n).kindU.S6.sons->data[((NI) 0)]).typ);
			LOC5 = 0;
			LOC5 = classify_248066((*n).typ);
			if (!(LOC4 == LOC5)) goto LA6;
			result = (*n).kindU.S6.sons->data[((NI) 0)];
		}
		LA6: ;
	}
	break;
	case ((NU8) 58):
	case ((NU8) 59):
	case ((NU8) 60):
	{
		{
			NU8 LOC11;
			NU8 LOC12;
			LOC11 = 0;
			LOC11 = classify_248066((*(*n).kindU.S6.sons->data[((NI) 1)]).typ);
			LOC12 = 0;
			LOC12 = classify_248066((*n).typ);
			if (!(LOC11 == LOC12)) goto LA13;
			result = (*n).kindU.S6.sons->data[((NI) 1)];
		}
		LA13: ;
	}
	break;
	default:
	{
	}
	break;
	}
	return result;
}

static N_INLINE(NIM_BOOL, isintlit_239222)(Ttype213828* t) {
	NIM_BOOL result;
	NIM_BOOL LOC1;
	NIM_BOOL LOC2;
	result = 0;
	LOC1 = 0;
	LOC2 = 0;
	LOC2 = ((*t).kind == ((NU8) 31));
	if (!(LOC2)) goto LA3;
	LOC2 = !(((*t).n == NIM_NIL));
	LA3: ;
	LOC1 = LOC2;
	if (!(LOC1)) goto LA4;
	LOC1 = ((*(*t).n).kind == ((NU8) 6));
	LA4: ;
	result = LOC1;
	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;
}

static N_INLINE(void, appendChar)(NimStringDesc* dest, NIM_CHAR c) {
	(*dest).data[((*dest).Sup.len)- 0] = c;
	(*dest).data[((NI)((*dest).Sup.len + ((NI) 1)))- 0] = 0;
	(*dest).Sup.len += ((NI) 1);
}

static N_INLINE(void, addtypeflags_241211)(NimStringDesc** name, Ttype213828* typ) {
	{
		NimStringDesc* LOC5;
		if (!(((*typ).flags &(1U<<((NU)(((NU8) 15))&31U)))!=0)) goto LA3;
		LOC5 = 0;
		LOC5 = rawNewString((*name)->Sup.len + 7);
appendString(LOC5, ((NimStringDesc*) &TMP2119));
appendString(LOC5, (*name));
		unsureAsgnRef((void**) (&(*name)), LOC5);
	}
	LA3: ;
	{
		if (!(((*typ).flags &(1U<<((NU)(((NU8) 16))&31U)))!=0)) goto LA8;
		(*name) = resizeString((*name), 8);
appendString((*name), ((NimStringDesc*) &TMP2120));
	}
	LA8: ;
}

N_NIMCALL(Ttype213828*, base_239021)(Ttype213828* t) {
	Ttype213828* result;
	result = 0;
	result = (*t).sons->data[((NI) 0)];
	return result;
}

N_NIMCALL(NimStringDesc*, valuetostring_241017)(Tnode213790* a) {
	NimStringDesc* result;
	result = 0;
	switch ((*a).kind) {
	case ((NU8) 5) ... ((NU8) 15):
	{
		result = nimInt64ToStr((*a).kindU.S1.intval);
	}
	break;
	case ((NU8) 16) ... ((NU8) 19):
	{
		result = nimFloatToStr((*a).kindU.S2.floatval);
	}
	break;
	case ((NU8) 20) ... ((NU8) 22):
	{
		result = copyString((*a).kindU.S3.strval);
	}
	break;
	default:
	{
		result = copyString(((NimStringDesc*) &TMP2208));
	}
	break;
	}
	return result;
}

N_NIMCALL(NimStringDesc*, rangetostr_241024)(Tnode213790* n) {
	NimStringDesc* result;
	NimStringDesc* LOC1;
	NimStringDesc* LOC2;
	NimStringDesc* LOC3;
	result = 0;
	LOC1 = 0;
	LOC2 = 0;
	LOC2 = valuetostring_241017((*n).kindU.S6.sons->data[((NI) 0)]);
	LOC3 = 0;
	LOC3 = valuetostring_241017((*n).kindU.S6.sons->data[((NI) 1)]);
	LOC1 = rawNewString(LOC2->Sup.len + LOC3->Sup.len + 2);
appendString(LOC1, LOC2);
appendString(LOC1, ((NimStringDesc*) &TMP2209));
appendString(LOC1, LOC3);
	result = LOC1;
	return result;
}

static N_INLINE(NI, len_214059)(Tnode213790* 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;
}

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

static N_INLINE(void, addsep_100319)(NimStringDesc** dest, NimStringDesc* sep, NI startlen) {
	{
		if (!(((NI) (startlen)) < ((*dest) ? (*dest)->Sup.len : 0))) goto LA3;
		(*dest) = resizeString((*dest), sep->Sup.len + 0);
appendString((*dest), sep);
	}
	LA3: ;
}

N_NIMCALL(NimStringDesc*, typetostring_239017)(Ttype213828* typ, NU8 prefer) {
	NimStringDesc* result;
	Ttype213828* t;
{	result = 0;
	t = typ;
	result = copyString(((NimStringDesc*) &TMP2116));
	{
		if (!(t == NIM_NIL)) goto LA3;
		goto BeforeRet;
	}
	LA3: ;
	{
		NIM_BOOL LOC7;
		NIM_BOOL LOC8;
		LOC7 = 0;
		LOC8 = 0;
		LOC8 = ((25 &(1U<<((NU)(prefer)&7U)))!=0);
		if (!(LOC8)) goto LA9;
		LOC8 = !(((*t).sym == NIM_NIL));
		LA9: ;
		LOC7 = LOC8;
		if (!(LOC7)) goto LA10;
		LOC7 = !((((*(*t).sym).flags &(1U<<((NU)(((NU8) 29))&31U)))!=0));
		LA10: ;
		if (!LOC7) goto LA11;
		{
			NIM_BOOL LOC15;
			NimStringDesc* LOC19;
			NimStringDesc* LOC20;
			LOC15 = 0;
			LOC15 = ((*t).kind == ((NU8) 31));
			if (!(LOC15)) goto LA16;
			LOC15 = isintlit_239222(t);
			LA16: ;
			if (!LOC15) goto LA17;
			LOC19 = 0;
			LOC20 = 0;
			LOC20 = nimInt64ToStr((*(*t).n).kindU.S1.intval);
			LOC19 = rawNewString((*(*(*t).sym).name).s->Sup.len + LOC20->Sup.len + 10);
appendString(LOC19, (*(*(*t).sym).name).s);
appendString(LOC19, ((NimStringDesc*) &TMP2117));
appendString(LOC19, LOC20);
appendString(LOC19, ((NimStringDesc*) &TMP2118));
			result = LOC19;
		}
		goto LA13;
		LA17: ;
		{
			NIM_BOOL LOC22;
			LOC22 = 0;
			LOC22 = (prefer == ((NU8) 0));
			if (LOC22) goto LA23;
			LOC22 = (*(*t).sym).owner == 0;
			LA23: ;
			if (!LOC22) goto LA24;
			result = copyString((*(*(*t).sym).name).s);
		}
		goto LA13;
		LA24: ;
		{
			NimStringDesc* LOC27;
			LOC27 = 0;
			LOC27 = rawNewString((*(*(*(*t).sym).owner).name).s->Sup.len + (*(*(*t).sym).name).s->Sup.len + 1);
appendString(LOC27, (*(*(*(*t).sym).owner).name).s);
appendChar(LOC27, 46);
appendString(LOC27, (*(*(*t).sym).name).s);
			result = LOC27;
		}
		LA13: ;
		addtypeflags_241211((&result), t);
		goto BeforeRet;
	}
	LA11: ;
	switch ((*t).kind) {
	case ((NU8) 31):
	{
		{
			NIM_BOOL LOC31;
			NIM_BOOL LOC32;
			LOC31 = 0;
			LOC32 = 0;
			LOC32 = isintlit_239222(t);
			LOC31 = !(LOC32);
			if (LOC31) goto LA33;
			LOC31 = (prefer == ((NU8) 2));
			LA33: ;
			if (!LOC31) goto LA34;
			result = copyString(typetostr_241203[((*t).kind)- 0]);
		}
		goto LA29;
		LA34: ;
		{
			{
				if (!(prefer == ((NU8) 4))) goto LA39;
				result = nimInt64ToStr((*(*t).n).kindU.S1.intval);
			}
			goto LA37;
			LA39: ;
			{
				NimStringDesc* LOC42;
				NimStringDesc* LOC43;
				LOC42 = 0;
				LOC43 = 0;
				LOC43 = nimInt64ToStr((*(*t).n).kindU.S1.intval);
				LOC42 = rawNewString(LOC43->Sup.len + 13);
appendString(LOC42, ((NimStringDesc*) &TMP2183));
appendString(LOC42, LOC43);
appendString(LOC42, ((NimStringDesc*) &TMP2118));
				result = LOC42;
			}
			LA37: ;
		}
		LA29: ;
	}
	break;
	case ((NU8) 10):
	case ((NU8) 11):
	case ((NU8) 9):
	{
		NimStringDesc* LOC45;
		NimStringDesc* LOC46;
		LOC45 = 0;
		LOC46 = 0;
		LOC46 = typetostring_239017((*t).sons->data[((NI) 0)], ((NU8) 0));
		LOC45 = rawNewString(LOC46->Sup.len + 1);
appendString(LOC45, LOC46);
appendChar(LOC45, 91);
		result = LOC45;
		{
			NI i_241370;
			NI HEX3Atmp_241946;
			NI LOC48;
			NI res_241949;
			i_241370 = 0;
			HEX3Atmp_241946 = 0;
			LOC48 = 0;
			LOC48 = sonslen_216327(t);
			HEX3Atmp_241946 = (NI)((NI)(LOC48 - ((NI) 1)) - ((NI) (!(((*t).kind == ((NU8) 9))))));
			res_241949 = ((NI) 1);
			{
				while (1) {
					NimStringDesc* LOC55;
					if (!(res_241949 <= HEX3Atmp_241946)) goto LA50;
					i_241370 = res_241949;
					{
						if (!(((NI) 1) < i_241370)) goto LA53;
						result = resizeString(result, 2);
appendString(result, ((NimStringDesc*) &TMP2184));
					}
					LA53: ;
					LOC55 = 0;
					LOC55 = typetostring_239017((*t).sons->data[i_241370], ((NU8) 4));
					result = resizeString(result, LOC55->Sup.len + 0);
appendString(result, LOC55);
					res_241949 += ((NI) 1);
				} LA50: ;
			}
		}
		result = addChar(result, 93);
	}
	break;
	case ((NU8) 8):
	{
		{
			Ttype213828* LOC59;
			LOC59 = 0;
			LOC59 = base_239021(t);
			if (!((*LOC59).kind == ((NU8) 0))) goto LA60;
			result = copyString(((NimStringDesc*) &TMP2185));
		}
		goto LA57;
		LA60: ;
		{
			NimStringDesc* LOC63;
			Ttype213828* LOC64;
			NimStringDesc* LOC65;
			LOC63 = 0;
			LOC64 = 0;
			LOC64 = base_239021(t);
			LOC65 = 0;
			LOC65 = typetostring_239017(LOC64, ((NU8) 0));
			LOC63 = rawNewString(LOC65->Sup.len + 10);
appendString(LOC63, ((NimStringDesc*) &TMP2186));
appendString(LOC63, LOC65);
appendString(LOC63, ((NimStringDesc*) &TMP2187));
			result = LOC63;
		}
		LA57: ;
	}
	break;
	case ((NU8) 59):
	{
		{
			NI LOC69;
			NimStringDesc* LOC72;
			LOC69 = 0;
			LOC69 = len_216339(t);
			if (!!((((NI) 0) < LOC69))) goto LA70;
			LOC72 = 0;
			LOC72 = HEX24_186183(TMP2188);
			internalerror_186113(LOC72);
		}
		LA70: ;
		{
			NIM_BOOL LOC75;
			LOC75 = 0;
			LOC75 = (prefer == ((NU8) 4));
			if (!(LOC75)) goto LA76;
			LOC75 = !(((*t).n == NIM_NIL));
			LA76: ;
			if (!LOC75) goto LA77;
			result = rendertree_232044((*t).n, 0);
		}
		goto LA73;
		LA77: ;
		{
			NimStringDesc* LOC80;
			NimStringDesc* LOC81;
			LOC80 = 0;
			LOC81 = 0;
			LOC81 = typetostring_239017((*t).sons->data[((NI) 0)], ((NU8) 0));
			LOC80 = rawNewString(LOC81->Sup.len + 8);
appendString(LOC80, ((NimStringDesc*) &TMP2190));
appendString(LOC80, LOC81);
appendString(LOC80, ((NimStringDesc*) &TMP2187));
			result = LOC80;
			{
				NimStringDesc* LOC86;
				NimStringDesc* LOC87;
				if (!!(((*t).n == NIM_NIL))) goto LA84;
				LOC86 = 0;
				LOC87 = 0;
				LOC87 = rendertree_232044((*t).n, 0);
				LOC86 = rawNewString(LOC87->Sup.len + 2);
appendString(LOC86, ((NimStringDesc*) &TMP2191));
appendString(LOC86, LOC87);
appendString(LOC86, ((NimStringDesc*) &TMP2118));
				result = resizeString(result, LOC86->Sup.len + 0);
appendString(result, LOC86);
			}
			LA84: ;
		}
		LA73: ;
	}
	break;
	case ((NU8) 52):
	{
		{
			NIM_BOOL LOC91;
			NimStringDesc* LOC95;
			LOC91 = 0;
			LOC91 = !(((*t).sym == NIM_NIL));
			if (!(LOC91)) goto LA92;
			LOC91 = !(((*(*t).sym).owner == NIM_NIL));
			LA92: ;
			if (!!(LOC91)) goto LA93;
			LOC95 = 0;
			LOC95 = HEX24_186183(TMP2192);
			internalerror_186113(LOC95);
		}
		LA93: ;
		result = copyString((*(*(*(*t).sym).owner).name).s);
		goto BeforeRet;
	}
	break;
	case ((NU8) 51):
	{
		Ttype213828* LOC97;
		LOC97 = 0;
		LOC97 = base_239021(t);
		switch ((*LOC97).kind) {
		case ((NU8) 23):
		{
			result = copyString(((NimStringDesc*) &TMP2193));
		}
		break;
		case ((NU8) 22):
		{
			result = copyString(((NimStringDesc*) &TMP2194));
		}
		break;
		case ((NU8) 21):
		{
			result = copyString(((NimStringDesc*) &TMP2195));
		}
		break;
		case ((NU8) 24):
		{
			result = copyString(((NimStringDesc*) &TMP2196));
		}
		break;
		case ((NU8) 16):
		{
			result = copyString(((NimStringDesc*) &TMP2197));
		}
		break;
		case ((NU8) 19):
		{
			result = copyString(((NimStringDesc*) &TMP2198));
		}
		break;
		case ((NU8) 20):
		{
			result = copyString(((NimStringDesc*) &TMP2199));
		}
		break;
		case ((NU8) 13):
		{
			result = copyString(((NimStringDesc*) &TMP2200));
		}
		break;
		case ((NU8) 25):
		{
			result = copyString(((NimStringDesc*) &TMP2146));
		}
		break;
		case ((NU8) 17):
		{
			result = copyString(((NimStringDesc*) &TMP2138));
		}
		break;
		case ((NU8) 18):
		{
			result = copyString(((NimStringDesc*) &TMP2139));
		}
		break;
		case ((NU8) 27):
		{
			result = copyString(((NimStringDesc*) &TMP2201));
		}
		break;
		default:
		{
			Ttype213828* LOC111;
			LOC111 = 0;
			LOC111 = base_239021(t);
			result = copyString(typetostr_241203[((*LOC111).kind)- 0]);
		}
		break;
		}
	}
	break;
	case ((NU8) 53):
	{
		Ttype213828* body;
		NimStringDesc* LOC113;
		body = base_239021(t);
		LOC113 = 0;
		LOC113 = rawNewString((*(*(*body).sym).name).s->Sup.len + 1);
appendString(LOC113, (*(*(*body).sym).name).s);
appendString(LOC113, ((NimStringDesc*) &TMP2202));
		result = LOC113;
		{
			NI i_241468;
			NI HEX3Atmp_241954;
			NI LOC115;
			NI res_241957;
			i_241468 = 0;
			HEX3Atmp_241954 = 0;
			LOC115 = 0;
			LOC115 = sonslen_216327(t);
			HEX3Atmp_241954 = (NI)(LOC115 - ((NI) 2));
			res_241957 = ((NI) 1);
			{
				while (1) {
					NimStringDesc* LOC122;
					if (!(res_241957 <= HEX3Atmp_241954)) goto LA117;
					i_241468 = res_241957;
					{
						if (!(((NI) 1) < i_241468)) goto LA120;
						result = resizeString(result, 2);
appendString(result, ((NimStringDesc*) &TMP2184));
					}
					LA120: ;
					LOC122 = 0;
					LOC122 = typetostring_239017((*t).sons->data[i_241468], ((NU8) 0));
					result = resizeString(result, LOC122->Sup.len + 0);
appendString(result, LOC122);
					res_241957 += ((NI) 1);
				} LA117: ;
			}
		}
		result = resizeString(result, 1);
appendString(result, ((NimStringDesc*) &TMP2187));
	}
	break;
	case ((NU8) 55):
	{
		NimStringDesc* LOC124;
		NimStringDesc* LOC125;
		NimStringDesc* LOC126;
		LOC124 = 0;
		LOC125 = 0;
		LOC125 = typetostring_239017((*t).sons->data[((NI) 0)], ((NU8) 0));
		LOC126 = 0;
		LOC126 = typetostring_239017((*t).sons->data[((NI) 1)], ((NU8) 0));
		LOC124 = rawNewString(LOC125->Sup.len + LOC126->Sup.len + 5);
appendString(LOC124, LOC125);
appendString(LOC124, ((NimStringDesc*) &TMP2203));
appendString(LOC124, LOC126);
		result = LOC124;
	}
	break;
	case ((NU8) 56):
	{
		NimStringDesc* LOC128;
		NimStringDesc* LOC129;
		NimStringDesc* LOC130;
		LOC128 = 0;
		LOC129 = 0;
		LOC129 = typetostring_239017((*t).sons->data[((NI) 0)], ((NU8) 0));
		LOC130 = 0;
		LOC130 = typetostring_239017((*t).sons->data[((NI) 1)], ((NU8) 0));
		LOC128 = rawNewString(LOC129->Sup.len + LOC130->Sup.len + 4);
appendString(LOC128, LOC129);
appendString(LOC128, ((NimStringDesc*) &TMP2204));
appendString(LOC128, LOC130);
		result = LOC128;
	}
	break;
	case ((NU8) 57):
	{
		NimStringDesc* LOC132;
		NimStringDesc* LOC133;
		LOC132 = 0;
		LOC133 = 0;
		LOC133 = typetostring_239017((*t).sons->data[((NI) 0)], ((NU8) 0));
		LOC132 = rawNewString(LOC133->Sup.len + 4);
appendString(LOC132, ((NimStringDesc*) &TMP2205));
appendString(LOC132, LOC133);
		result = LOC132;
	}
	break;
	case ((NU8) 6):
	{
		{
			NI LOC137;
			NimStringDesc* LOC140;
			LOC137 = 0;
			LOC137 = len_216339(t);
			if (!!((LOC137 == ((NI) 0)))) goto LA138;
			LOC140 = 0;
			LOC140 = HEX24_186183(TMP2206);
			internalerror_186113(LOC140);
		}
		LA138: ;
		result = copyString(((NimStringDesc*) &TMP2127));
	}
	break;
	case ((NU8) 60):
	case ((NU8) 61):
	{
		result = rendertree_232044((*t).n, 0);
	}
	break;
	case ((NU8) 16):
	{
		{
			NimStringDesc* LOC147;
			NimStringDesc* LOC148;
			NimStringDesc* LOC149;
			if (!((*(*t).sons->data[((NI) 0)]).kind == ((NU8) 20))) goto LA145;
			LOC147 = 0;
			LOC148 = 0;
			LOC148 = rangetostr_241024((*(*t).sons->data[((NI) 0)]).n);
			LOC149 = 0;
			LOC149 = typetostring_239017((*t).sons->data[((NI) 1)], ((NU8) 0));
			LOC147 = rawNewString(LOC148->Sup.len + LOC149->Sup.len + 9);
appendString(LOC147, ((NimStringDesc*) &TMP2207));
appendString(LOC147, LOC148);
appendString(LOC147, ((NimStringDesc*) &TMP2184));
appendString(LOC147, LOC149);
appendChar(LOC147, 93);
			result = LOC147;
		}
		goto LA143;
		LA145: ;
		{
			NimStringDesc* LOC151;
			NimStringDesc* LOC152;
			NimStringDesc* LOC153;
			LOC151 = 0;
			LOC152 = 0;
			LOC152 = typetostring_239017((*t).sons->data[((NI) 0)], ((NU8) 0));
			LOC153 = 0;
			LOC153 = typetostring_239017((*t).sons->data[((NI) 1)], ((NU8) 0));
			LOC151 = rawNewString(LOC152->Sup.len + LOC153->Sup.len + 9);
appendString(LOC151, ((NimStringDesc*) &TMP2207));
appendString(LOC151, LOC152);
appendString(LOC151, ((NimStringDesc*) &TMP2184));
appendString(LOC151, LOC153);
appendChar(LOC151, 93);
			result = LOC151;
		}
		LA143: ;
	}
	break;
	case ((NU8) 4):
	{
		NimStringDesc* LOC155;
		NimStringDesc* LOC156;
		NimStringDesc* LOC157;
		LOC155 = 0;
		LOC156 = 0;
		LOC156 = rangetostr_241024((*(*t).sons->data[((NI) 0)]).n);
		LOC157 = 0;
		LOC157 = typetostring_239017((*t).sons->data[((NI) 1)], ((NU8) 0));
		LOC155 = rawNewString(LOC156->Sup.len + LOC157->Sup.len + 21);
appendString(LOC155, ((NimStringDesc*) &TMP2210));
appendString(LOC155, LOC156);
appendString(LOC155, ((NimStringDesc*) &TMP2184));
appendString(LOC155, LOC157);
appendChar(LOC155, 93);
		result = LOC155;
	}
	break;
	case ((NU8) 24):
	{
		NimStringDesc* LOC159;
		NimStringDesc* LOC160;
		LOC159 = 0;
		LOC160 = 0;
		LOC160 = typetostring_239017((*t).sons->data[((NI) 0)], ((NU8) 0));
		LOC159 = rawNewString(LOC160->Sup.len + 5);
appendString(LOC159, ((NimStringDesc*) &TMP2211));
appendString(LOC159, LOC160);
appendChar(LOC159, 93);
		result = LOC159;
	}
	break;
	case ((NU8) 15):
	{
		NimStringDesc* LOC162;
		NimStringDesc* LOC163;
		LOC162 = 0;
		LOC163 = 0;
		LOC163 = typetostring_239017((*t).sons->data[((NI) 0)], ((NU8) 0));
		LOC162 = rawNewString(LOC163->Sup.len + 9);
appendString(LOC162, ((NimStringDesc*) &TMP2212));
appendString(LOC162, LOC163);
appendChar(LOC162, 93);
		result = LOC162;
	}
	break;
	case ((NU8) 19):
	{
		NimStringDesc* LOC165;
		NimStringDesc* LOC166;
		LOC165 = 0;
		LOC166 = 0;
		LOC166 = typetostring_239017((*t).sons->data[((NI) 0)], ((NU8) 0));
		LOC165 = rawNewString(LOC166->Sup.len + 5);
appendString(LOC165, ((NimStringDesc*) &TMP2213));
appendString(LOC165, LOC166);
appendChar(LOC165, 93);
		result = LOC165;
	}
	break;
	case ((NU8) 27):
	{
		NimStringDesc* LOC168;
		NimStringDesc* LOC169;
		LOC168 = 0;
		LOC169 = 0;
		LOC169 = typetostring_239017((*t).sons->data[((NI) 0)], ((NU8) 0));
		LOC168 = rawNewString(LOC169->Sup.len + 11);
appendString(LOC168, ((NimStringDesc*) &TMP2214));
appendString(LOC168, LOC169);
appendChar(LOC168, 93);
		result = LOC168;
	}
	break;
	case ((NU8) 13):
	{
		NimStringDesc* LOC171;
		NU8 LOC172;
		NimStringDesc* LOC178;
		LOC171 = 0;
		LOC172 = 0;
		{
			if (!(prefer == ((NU8) 3))) goto LA175;
			LOC172 = ((NU8) 3);
		}
		goto LA173;
		LA175: ;
		{
			LOC172 = ((NU8) 0);
		}
		LA173: ;
		LOC178 = 0;
		LOC178 = typetostring_239017((*t).sons->data[((NI) 0)], LOC172);
		LOC171 = rawNewString(LOC178->Sup.len + 9);
appendString(LOC171, ((NimStringDesc*) &TMP2215));
appendString(LOC171, LOC178);
		result = LOC171;
	}
	break;
	case ((NU8) 18):
	{
		{
			if (!!(((*t).n == NIM_NIL))) goto LA182;
			result = copyString(((NimStringDesc*) &TMP2216));
			{
				NI i_241612;
				NI HEX3Atmp_241962;
				NI LOC185;
				NI res_241965;
				i_241612 = 0;
				HEX3Atmp_241962 = 0;
				LOC185 = 0;
				LOC185 = sonslen_216351((*t).n);
				HEX3Atmp_241962 = (NI)(LOC185 - ((NI) 1));
				res_241965 = ((NI) 0);
				{
					while (1) {
						NimStringDesc* LOC188;
						NimStringDesc* LOC189;
						if (!(res_241965 <= HEX3Atmp_241962)) goto LA187;
						i_241612 = res_241965;
						LOC188 = 0;
						LOC189 = 0;
						LOC189 = typetostring_239017((*t).sons->data[i_241612], ((NU8) 0));
						LOC188 = rawNewString((*(*(*(*(*t).n).kindU.S6.sons->data[i_241612]).kindU.S4.sym).name).s->Sup.len + LOC189->Sup.len + 2);
appendString(LOC188, (*(*(*(*(*t).n).kindU.S6.sons->data[i_241612]).kindU.S4.sym).name).s);
appendString(LOC188, ((NimStringDesc*) &TMP2217));
appendString(LOC188, LOC189);
						result = resizeString(result, LOC188->Sup.len + 0);
appendString(result, LOC188);
						{
							NI LOC192;
							LOC192 = 0;
							LOC192 = sonslen_216351((*t).n);
							if (!(i_241612 < (NI)(LOC192 - ((NI) 1)))) goto LA193;
							result = resizeString(result, 2);
appendString(result, ((NimStringDesc*) &TMP2184));
						}
						LA193: ;
						res_241965 += ((NI) 1);
					} LA187: ;
				}
			}
			result = addChar(result, 93);
		}
		goto LA180;
		LA182: ;
		{
			NI LOC196;
			LOC196 = 0;
			LOC196 = sonslen_216327(t);
			if (!(LOC196 == ((NI) 0))) goto LA197;
			result = copyString(((NimStringDesc*) &TMP2218));
		}
		goto LA180;
		LA197: ;
		{
			result = copyString(((NimStringDesc*) &TMP2191));
			{
				NI i_241815;
				NI HEX3Atmp_241970;
				NI LOC201;
				NI res_241973;
				i_241815 = 0;
				HEX3Atmp_241970 = 0;
				LOC201 = 0;
				LOC201 = sonslen_216327(t);
				HEX3Atmp_241970 = (NI)(LOC201 - ((NI) 1));
				res_241973 = ((NI) 0);
				{
					while (1) {
						NimStringDesc* LOC204;
						if (!(res_241973 <= HEX3Atmp_241970)) goto LA203;
						i_241815 = res_241973;
						LOC204 = 0;
						LOC204 = typetostring_239017((*t).sons->data[i_241815], ((NU8) 0));
						result = resizeString(result, LOC204->Sup.len + 0);
appendString(result, LOC204);
						{
							NI LOC207;
							LOC207 = 0;
							LOC207 = sonslen_216327(t);
							if (!(i_241815 < (NI)(LOC207 - ((NI) 1)))) goto LA208;
							result = resizeString(result, 2);
appendString(result, ((NimStringDesc*) &TMP2184));
						}
						LA208: ;
						res_241973 += ((NI) 1);
					} LA203: ;
				}
			}
			result = addChar(result, 41);
		}
		LA180: ;
	}
	break;
	case ((NU8) 21):
	case ((NU8) 22):
	case ((NU8) 23):
	case ((NU8) 47):
	case ((NU8) 46):
	{
		result = copyString(typetostr_241203[((*t).kind)- 0]);
		{
			NI LOC213;
			LOC213 = 0;
			LOC213 = len_216339(t);
			if (!(((NI) 2) <= LOC213)) goto LA214;
			result = setLengthStr(result, ((NI) ((NI)((result ? result->Sup.len : 0) - ((NI) 1)))));
			result = addChar(result, 91);
			{
				NI i_241827;
				NI HEX3Atmp_241978;
				NI LOC217;
				NI res_241981;
				i_241827 = 0;
				HEX3Atmp_241978 = 0;
				LOC217 = 0;
				LOC217 = sonslen_216327(t);
				HEX3Atmp_241978 = (NI)(LOC217 - ((NI) 1));
				res_241981 = ((NI) 0);
				{
					while (1) {
						NimStringDesc* LOC220;
						if (!(res_241981 <= HEX3Atmp_241978)) goto LA219;
						i_241827 = res_241981;
						LOC220 = 0;
						LOC220 = typetostring_239017((*t).sons->data[i_241827], ((NU8) 0));
						result = resizeString(result, LOC220->Sup.len + 0);
appendString(result, LOC220);
						{
							NI LOC223;
							LOC223 = 0;
							LOC223 = sonslen_216327(t);
							if (!(i_241827 < (NI)(LOC223 - ((NI) 1)))) goto LA224;
							result = resizeString(result, 2);
appendString(result, ((NimStringDesc*) &TMP2184));
						}
						LA224: ;
						res_241981 += ((NI) 1);
					} LA219: ;
				}
			}
			result = addChar(result, 93);
		}
		goto LA211;
		LA214: ;
		{
			NimStringDesc* LOC227;
			LOC227 = 0;
			LOC227 = typetostring_239017((*t).sons->data[((NI) 0)], ((NU8) 0));
			result = resizeString(result, LOC227->Sup.len + 0);
appendString(result, LOC227);
		}
		LA211: ;
	}
	break;
	case ((NU8) 20):
	{
		NimStringDesc* LOC229;
		NimStringDesc* LOC230;
		LOC229 = 0;
		LOC230 = 0;
		LOC230 = rangetostr_241024((*t).n);
		LOC229 = rawNewString(LOC230->Sup.len + 6);
appendString(LOC229, ((NimStringDesc*) &TMP2219));
appendString(LOC229, LOC230);
		result = LOC229;
		{
			NimStringDesc* LOC235;
			NimStringDesc* LOC236;
			if (!!((prefer == ((NU8) 2)))) goto LA233;
			LOC235 = 0;
			LOC236 = 0;
			LOC236 = typetostring_239017((*t).sons->data[((NI) 0)], ((NU8) 0));
			LOC235 = rawNewString(LOC236->Sup.len + 2);
appendString(LOC235, ((NimStringDesc*) &TMP2191));
appendString(LOC235, LOC236);
appendString(LOC235, ((NimStringDesc*) &TMP2118));
			result = resizeString(result, LOC235->Sup.len + 0);
appendString(result, LOC235);
		}
		LA233: ;
	}
	break;
	case ((NU8) 25):
	{
		NimStringDesc* prag;
		{
			if (!(((*t).flags &(1U<<((NU)(((NU8) 14))&31U)))!=0)) goto LA240;
			result = copyString(((NimStringDesc*) &TMP2220));
		}
		goto LA238;
		LA240: ;
		{
			result = copyString(((NimStringDesc*) &TMP2221));
		}
		LA238: ;
		{
			NI i_241858;
			NI HEX3Atmp_241986;
			NI LOC244;
			NI res_241989;
			i_241858 = 0;
			HEX3Atmp_241986 = 0;
			LOC244 = 0;
			LOC244 = sonslen_216327(t);
			HEX3Atmp_241986 = (NI)(LOC244 - ((NI) 1));
			res_241989 = ((NI) 1);
			{
				while (1) {
					NimStringDesc* LOC258;
					if (!(res_241989 <= HEX3Atmp_241986)) goto LA246;
					i_241858 = res_241989;
					{
						NIM_BOOL LOC249;
						NIM_BOOL LOC250;
						NI LOC252;
						Tnode213790* LOC254;
						Tnode213790* LOC257;
						LOC249 = 0;
						LOC250 = 0;
						LOC250 = !(((*t).n == NIM_NIL));
						if (!(LOC250)) goto LA251;
						LOC252 = 0;
						LOC252 = len_214059((*t).n);
						LOC250 = (i_241858 < LOC252);
						LA251: ;
						LOC249 = LOC250;
						if (!(LOC249)) goto LA253;
						LOC254 = 0;
						LOC254 = HEX5BHEX5D_214238((*t).n, i_241858);
						LOC249 = ((*LOC254).kind == ((NU8) 3));
						LA253: ;
						if (!LOC249) goto LA255;
						LOC257 = 0;
						LOC257 = HEX5BHEX5D_214238((*t).n, i_241858);
						result = resizeString(result, (*(*(*LOC257).kindU.S4.sym).name).s->Sup.len + 0);
appendString(result, (*(*(*LOC257).kindU.S4.sym).name).s);
						result = resizeString(result, 2);
appendString(result, ((NimStringDesc*) &TMP2217));
					}
					LA255: ;
					LOC258 = 0;
					LOC258 = typetostring_239017((*t).sons->data[i_241858], ((NU8) 0));
					result = resizeString(result, LOC258->Sup.len + 0);
appendString(result, LOC258);
					{
						NI LOC261;
						LOC261 = 0;
						LOC261 = sonslen_216327(t);
						if (!(i_241858 < (NI)(LOC261 - ((NI) 1)))) goto LA262;
						result = resizeString(result, 2);
appendString(result, ((NimStringDesc*) &TMP2184));
					}
					LA262: ;
					res_241989 += ((NI) 1);
				} LA246: ;
			}
		}
		result = addChar(result, 41);
		{
			NimStringDesc* LOC268;
			NimStringDesc* LOC269;
			if (!!(((*t).sons->data[((NI) 0)] == NIM_NIL))) goto LA266;
			LOC268 = 0;
			LOC269 = 0;
			LOC269 = typetostring_239017((*t).sons->data[((NI) 0)], ((NU8) 0));
			LOC268 = rawNewString(LOC269->Sup.len + 2);
appendString(LOC268, ((NimStringDesc*) &TMP2217));
appendString(LOC268, LOC269);
			result = resizeString(result, LOC268->Sup.len + 0);
appendString(result, LOC268);
		}
		LA266: ;
		{
			if (!((*t).callconv == ((NU8) 0))) goto LA272;
			prag = copyString(((NimStringDesc*) &TMP2116));
		}
		goto LA270;
		LA272: ;
		{
			prag = copyString(Callingconvtostr_213013[((*t).callconv)- 0]);
		}
		LA270: ;
		{
			if (!(((*t).flags &(1U<<((NU)(((NU8) 1))&31U)))!=0)) goto LA277;
			addsep_100319((&prag), ((NimStringDesc*) &TMP2184), ((NI) 0));
			prag = resizeString(prag, 12);
appendString(prag, ((NimStringDesc*) &TMP2232));
		}
		LA277: ;
		{
			if (!(((*t).flags &(1U<<((NU)(((NU8) 7))&31U)))!=0)) goto LA281;
			addsep_100319((&prag), ((NimStringDesc*) &TMP2184), ((NI) 0));
			prag = resizeString(prag, 6);
appendString(prag, ((NimStringDesc*) &TMP2233));
		}
		LA281: ;
		{
			NimStringDesc* LOC287;
			NimStringDesc* LOC288;
			if (!!((((NI) ((*t).locklevel)) == ((NI) -1)))) goto LA285;
			addsep_100319((&prag), ((NimStringDesc*) &TMP2184), ((NI) 0));
			LOC287 = 0;
			LOC288 = 0;
			LOC288 = HEX24_216069((*t).locklevel);
			LOC287 = rawNewString(LOC288->Sup.len + 7);
appendString(LOC287, ((NimStringDesc*) &TMP2234));
appendString(LOC287, LOC288);
			prag = resizeString(prag, LOC287->Sup.len + 0);
appendString(prag, LOC287);
		}
		LA285: ;
		{
			NimStringDesc* LOC293;
			if (!!(((prag ? prag->Sup.len : 0) == ((NI) 0)))) goto LA291;
			LOC293 = 0;
			LOC293 = rawNewString(prag->Sup.len + 4);
appendString(LOC293, ((NimStringDesc*) &TMP2237));
appendString(LOC293, prag);
appendString(LOC293, ((NimStringDesc*) &TMP2238));
			result = resizeString(result, LOC293->Sup.len + 0);
appendString(result, LOC293);
		}
		LA291: ;
	}
	break;
	case ((NU8) 48):
	case ((NU8) 49):
	{
		NimStringDesc* LOC295;
		LOC295 = 0;
		LOC295 = typetostring_239017((*t).sons->data[((NI) 0)], ((NU8) 0));
		result = nsuFormatSingleElem(typetostr_241203[((*t).kind)- 0], LOC295);
	}
	break;
	default:
	{
		result = copyString(typetostr_241203[((*t).kind)- 0]);
	}
	break;
	}
	addtypeflags_241211((&result), t);
	}BeforeRet: ;
	return result;
}

N_NIMCALL(Ttype213828*, elemtype_239383)(Ttype213828* t) {
	Ttype213828* result;
	result = 0;
	switch ((*t).kind) {
	case ((NU8) 11):
	case ((NU8) 13):
	{
		Ttype213828* LOC2;
		LOC2 = 0;
		LOC2 = lastson_216377(t);
		result = elemtype_239383(LOC2);
	}
	break;
	case ((NU8) 16):
	case ((NU8) 4):
	{
		result = (*t).sons->data[((NI) 1)];
	}
	break;
	default:
	{
		result = lastson_216377(t);
	}
	break;
	}
	return result;
}

N_NIMCALL(void, initsametypeclosure_243448)(Tsametypeclosure243429* Result) {
}

N_NIMCALL(NIM_BOOL, isgenericalias_244584)(Ttype213828* t) {
	NIM_BOOL result;
	NIM_BOOL LOC1;
	Ttype213828* LOC3;
{	result = 0;
	LOC1 = 0;
	LOC1 = ((*t).kind == ((NU8) 11));
	if (!(LOC1)) goto LA2;
	LOC3 = 0;
	LOC3 = lastson_216377(t);
	LOC1 = ((*LOC3).kind == ((NU8) 11));
	LA2: ;
	result = LOC1;
	goto BeforeRet;
	}BeforeRet: ;
	return result;
}

N_NIMCALL(Ttype213828*, skipgenericalias_244606)(Ttype213828* t) {
	Ttype213828* result;
{	result = 0;
	{
		NIM_BOOL LOC3;
		LOC3 = 0;
		LOC3 = isgenericalias_244584(t);
		if (!LOC3) goto LA4;
		result = lastson_216377(t);
	}
	goto LA1;
	LA4: ;
	{
		result = t;
	}
	LA1: ;
	goto BeforeRet;
	}BeforeRet: ;
	return result;
}

static N_INLINE(NIM_BOOL, sameflags_244622)(Ttype213828* a, Ttype213828* b) {
	NIM_BOOL result;
	result = 0;
	result = ((376832 & (*a).flags) == (376832 & (*b).flags));
	return result;
}

static N_INLINE(NI, find_243479)(TY243443* a, NI aLen0, TY243443 item) {
	NI result;
{	result = 0;
	{
		TY243443 i_243513;
		NI i_243544;
		memset((void*)(&i_243513), 0, sizeof(i_243513));
		i_243544 = ((NI) 0);
		{
			while (1) {
				if (!(i_243544 < aLen0)) goto LA3;
				i_243513 = a[i_243544];
				{
					NIM_BOOL LOC6;
					LOC6 = 0;
					LOC6 = HEX3DHEX3D_243515(i_243513, item);
					if (!LOC6) goto LA7;
					goto BeforeRet;
				}
				LA7: ;
				result += ((NI) 1);
				i_243544 += ((NI) 1);
			} LA3: ;
		}
	}
	result = ((NI) -1);
	}BeforeRet: ;
	return result;
}

static N_INLINE(NIM_BOOL, contains_243469)(TY243443* a, NI aLen0, TY243443 item) {
	NIM_BOOL result;
	NI LOC1;
{	result = 0;
	LOC1 = 0;
	LOC1 = find_243479(a, aLen0, item);
	result = (((NI) 0) <= LOC1);
	goto BeforeRet;
	}BeforeRet: ;
	return result;
}
N_NIMCALL(void, TMP2779)(void* p, NI op) {
	TY243442* a;
	NI LOC1;
	a = (TY243442*)p;
	LOC1 = 0;
	for (LOC1 = 0; LOC1 < a->Sup.len; LOC1++) {
	}
}

N_NIMCALL(NIM_BOOL, containsorincl_243451)(Tsametypeclosure243429* c, Ttype213828* a, Ttype213828* b) {
	NIM_BOOL result;
	NIM_BOOL LOC1;
	TY243443 LOC3;
	result = 0;
	LOC1 = 0;
	LOC1 = !((*c).s == 0);
	if (!(LOC1)) goto LA2;
	LOC3.Field0 = (*a).Sup.id;
	LOC3.Field1 = (*b).Sup.id;
	LOC1 = contains_243469((*c).s->data, (*c).s->Sup.len, LOC3);
	LA2: ;
	result = LOC1;
	{
		TY243443 LOC12;
		if (!!(result)) goto LA6;
		{
			if (!(*c).s == 0) goto LA10;
			unsureAsgnRef((void**) (&(*c).s), (TY243442*) newSeq((&NTI243442), 0));
		}
		LA10: ;
		LOC12.Field0 = (*a).Sup.id;
		LOC12.Field1 = (*b).Sup.id;
		(*c).s = (TY243442*) incrSeqV2(&((*c).s)->Sup, sizeof(TY243443));
		(*c).s->data[(*c).s->Sup.len] = LOC12;
		++(*c).s->Sup.len;
	}
	LA6: ;
	return result;
}

N_NIMCALL(NIM_BOOL, sametypeornilaux_243586)(Ttype213828* a, Ttype213828* b, Tsametypeclosure243429* c) {
	NIM_BOOL result;
	result = 0;
	{
		if (!(a == b)) goto LA3;
		result = NIM_TRUE;
	}
	goto LA1;
	LA3: ;
	{
		{
			NIM_BOOL LOC8;
			LOC8 = 0;
			LOC8 = (a == NIM_NIL);
			if (LOC8) goto LA9;
			LOC8 = (b == NIM_NIL);
			LA9: ;
			if (!LOC8) goto LA10;
			result = NIM_FALSE;
		}
		goto LA6;
		LA10: ;
		{
			result = sametypeaux_243580(a, b, c);
		}
		LA6: ;
	}
	LA1: ;
	return result;
}

static N_INLINE(NIM_BOOL, eqStrings)(NimStringDesc* a, NimStringDesc* b) {
	NIM_BOOL result;
	NIM_BOOL LOC11;
	int LOC13;
{	result = 0;
	{
		if (!(a == b)) goto LA3;
		result = NIM_TRUE;
		goto BeforeRet;
	}
	LA3: ;
	{
		NIM_BOOL LOC7;
		LOC7 = 0;
		LOC7 = (a == NIM_NIL);
		if (LOC7) goto LA8;
		LOC7 = (b == NIM_NIL);
		LA8: ;
		if (!LOC7) goto LA9;
		result = NIM_FALSE;
		goto BeforeRet;
	}
	LA9: ;
	LOC11 = 0;
	LOC11 = ((*a).Sup.len == (*b).Sup.len);
	if (!(LOC11)) goto LA12;
	LOC13 = 0;
	LOC13 = memcmp(((NCSTRING) ((*a).data)), ((NCSTRING) ((*b).data)), (*a).Sup.len);
	LOC11 = (LOC13 == ((NI32) 0));
	LA12: ;
	result = LOC11;
	goto BeforeRet;
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NIM_BOOL, sameobjecttree_244407)(Tnode213790* a, Tnode213790* b, Tsametypeclosure243429* c) {
	NIM_BOOL result;
{	result = 0;
	{
		if (!(a == b)) goto LA3;
		result = NIM_TRUE;
	}
	goto LA1;
	LA3: ;
	{
		NIM_BOOL LOC6;
		NIM_BOOL LOC7;
		Ttype213828* x;
		Ttype213828* y;
		LOC6 = 0;
		LOC7 = 0;
		LOC7 = !((a == NIM_NIL));
		if (!(LOC7)) goto LA8;
		LOC7 = !((b == NIM_NIL));
		LA8: ;
		LOC6 = LOC7;
		if (!(LOC6)) goto LA9;
		LOC6 = ((*a).kind == (*b).kind);
		LA9: ;
		if (!LOC6) goto LA10;
		x = (*a).typ;
		y = (*b).typ;
		{
			if (!(((*c).flags &(1U<<((NU)(((NU8) 0))&7U)))!=0)) goto LA14;
			{
				if (!!((x == NIM_NIL))) goto LA18;
				x = skiptypes_217113(x, 1050624);
			}
			LA18: ;
			{
				if (!!((y == NIM_NIL))) goto LA22;
				y = skiptypes_217113(y, 1050624);
			}
			LA22: ;
		}
		LA14: ;
		{
			NIM_BOOL LOC26;
			LOC26 = 0;
			LOC26 = sametypeornilaux_243586(x, y, c);
			if (!LOC26) goto LA27;
			switch ((*a).kind) {
			case ((NU8) 3):
			{
				result = ((*(*(*a).kindU.S4.sym).name).Sup.id == (*(*(*b).kindU.S4.sym).name).Sup.id);
			}
			break;
			case ((NU8) 2):
			{
				result = ((*(*a).kindU.S5.ident).Sup.id == (*(*b).kindU.S5.ident).Sup.id);
			}
			break;
			case ((NU8) 5) ... ((NU8) 10):
			{
				result = ((*a).kindU.S1.intval == (*b).kindU.S1.intval);
			}
			break;
			case ((NU8) 16) ... ((NU8) 18):
			{
				result = ((*a).kindU.S2.floatval == (*b).kindU.S2.floatval);
			}
			break;
			case ((NU8) 20) ... ((NU8) 22):
			{
				result = eqStrings((*a).kindU.S3.strval, (*b).kindU.S3.strval);
			}
			break;
			case ((NU8) 1):
			case ((NU8) 23):
			case ((NU8) 4):
			{
				result = NIM_TRUE;
			}
			break;
			default:
			{
				{
					NI LOC38;
					NI LOC39;
					LOC38 = 0;
					LOC38 = sonslen_216351(a);
					LOC39 = 0;
					LOC39 = sonslen_216351(b);
					if (!(LOC38 == LOC39)) goto LA40;
					{
						NI i_244519;
						NI HEX3Atmp_244523;
						NI LOC43;
						NI res_244526;
						i_244519 = 0;
						HEX3Atmp_244523 = 0;
						LOC43 = 0;
						LOC43 = sonslen_216351(a);
						HEX3Atmp_244523 = (NI)(LOC43 - ((NI) 1));
						res_244526 = ((NI) 0);
						{
							while (1) {
								if (!(res_244526 <= HEX3Atmp_244523)) goto LA45;
								i_244519 = res_244526;
								{
									NIM_BOOL LOC48;
									LOC48 = 0;
									LOC48 = sameobjecttree_244407((*a).kindU.S6.sons->data[i_244519], (*b).kindU.S6.sons->data[i_244519], c);
									if (!!(LOC48)) goto LA49;
									goto BeforeRet;
								}
								LA49: ;
								res_244526 += ((NI) 1);
							} LA45: ;
						}
					}
					result = NIM_TRUE;
				}
				LA40: ;
			}
			break;
			}
		}
		LA27: ;
	}
	goto LA1;
	LA10: ;
	LA1: ;
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NIM_BOOL, sameobjectstructures_244530)(Ttype213828* a, Ttype213828* b, Tsametypeclosure243429* c) {
	NIM_BOOL result;
{	result = 0;
	{
		NI LOC3;
		NI LOC4;
		LOC3 = 0;
		LOC3 = sonslen_216327(a);
		LOC4 = 0;
		LOC4 = sonslen_216327(b);
		if (!!((LOC3 == LOC4))) goto LA5;
		goto BeforeRet;
	}
	LA5: ;
	{
		NI i_244548;
		NI HEX3Atmp_244550;
		NI LOC8;
		NI res_244553;
		i_244548 = 0;
		HEX3Atmp_244550 = 0;
		LOC8 = 0;
		LOC8 = sonslen_216327(a);
		HEX3Atmp_244550 = (NI)(LOC8 - ((NI) 1));
		res_244553 = ((NI) 0);
		{
			while (1) {
				if (!(res_244553 <= HEX3Atmp_244550)) goto LA10;
				i_244548 = res_244553;
				{
					NIM_BOOL LOC13;
					LOC13 = 0;
					LOC13 = sametypeornilaux_243586((*a).sons->data[i_244548], (*b).sons->data[i_244548], c);
					if (!!(LOC13)) goto LA14;
					goto BeforeRet;
				}
				LA14: ;
				res_244553 += ((NI) 1);
			} LA10: ;
		}
	}
	{
		NIM_BOOL LOC18;
		LOC18 = 0;
		LOC18 = sameobjecttree_244407((*a).n, (*b).n, c);
		if (!!(LOC18)) goto LA19;
		goto BeforeRet;
	}
	LA19: ;
	result = NIM_TRUE;
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NIM_BOOL, sametuple_244210)(Ttype213828* a, Ttype213828* b, Tsametypeclosure243429* c) {
	NIM_BOOL result;
{	result = 0;
	{
		NI LOC3;
		NI LOC4;
		LOC3 = 0;
		LOC3 = sonslen_216327(a);
		LOC4 = 0;
		LOC4 = sonslen_216327(b);
		if (!(LOC3 == LOC4)) goto LA5;
		result = NIM_TRUE;
		{
			NI i_244228;
			NI HEX3Atmp_244318;
			NI LOC8;
			NI res_244321;
			i_244228 = 0;
			HEX3Atmp_244318 = 0;
			LOC8 = 0;
			LOC8 = sonslen_216327(a);
			HEX3Atmp_244318 = (NI)(LOC8 - ((NI) 1));
			res_244321 = ((NI) 0);
			{
				while (1) {
					Ttype213828* x;
					Ttype213828* y;
					if (!(res_244321 <= HEX3Atmp_244318)) goto LA10;
					i_244228 = res_244321;
					x = (*a).sons->data[i_244228];
					y = (*b).sons->data[i_244228];
					{
						if (!(((*c).flags &(1U<<((NU)(((NU8) 0))&7U)))!=0)) goto LA13;
						x = skiptypes_217113(x, 1050624);
						y = skiptypes_217113(y, 1050624);
					}
					LA13: ;
					result = sametypeaux_243580(x, y, c);
					{
						if (!!(result)) goto LA17;
						goto BeforeRet;
					}
					LA17: ;
					res_244321 += ((NI) 1);
				} LA10: ;
			}
		}
		{
			NIM_BOOL LOC21;
			NIM_BOOL LOC22;
			LOC21 = 0;
			LOC22 = 0;
			LOC22 = !(((*a).n == NIM_NIL));
			if (!(LOC22)) goto LA23;
			LOC22 = !(((*b).n == NIM_NIL));
			LA23: ;
			LOC21 = LOC22;
			if (!(LOC21)) goto LA24;
			LOC21 = !((((*c).flags &(1U<<((NU)(((NU8) 0))&7U)))!=0));
			LA24: ;
			if (!LOC21) goto LA25;
			{
				NI i_244288;
				NI HEX3Atmp_244326;
				NI LOC28;
				NI res_244329;
				i_244288 = 0;
				HEX3Atmp_244326 = 0;
				LOC28 = 0;
				LOC28 = sonslen_216351((*a).n);
				HEX3Atmp_244326 = (NI)(LOC28 - ((NI) 1));
				res_244329 = ((NI) 0);
				{
					while (1) {
						if (!(res_244329 <= HEX3Atmp_244326)) goto LA30;
						i_244288 = res_244329;
						{
							NIM_BOOL LOC33;
							Tsym213822* x;
							Tsym213822* y;
							LOC33 = 0;
							LOC33 = ((*(*(*a).n).kindU.S6.sons->data[i_244288]).kind == ((NU8) 3));
							if (!(LOC33)) goto LA34;
							LOC33 = ((*(*(*b).n).kindU.S6.sons->data[i_244288]).kind == ((NU8) 3));
							LA34: ;
							if (!LOC33) goto LA35;
							x = (*(*(*a).n).kindU.S6.sons->data[i_244288]).kindU.S4.sym;
							y = (*(*(*b).n).kindU.S6.sons->data[i_244288]).kindU.S4.sym;
							result = ((*(*x).name).Sup.id == (*(*y).name).Sup.id);
							{
								if (!!(result)) goto LA39;
								goto LA27;
							}
							LA39: ;
						}
						goto LA31;
						LA35: ;
						{
							internalerror_186100((*(*a).n).info, ((NimStringDesc*) &TMP2780));
						}
						LA31: ;
						res_244329 += ((NI) 1);
					} LA30: ;
				}
			} LA27: ;
		}
		LA25: ;
	}
	LA5: ;
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NIM_BOOL, samechildrenaux_244557)(Ttype213828* a, Ttype213828* b, Tsametypeclosure243429* c) {
	NIM_BOOL result;
{	result = 0;
	{
		NI LOC3;
		NI LOC4;
		LOC3 = 0;
		LOC3 = sonslen_216327(a);
		LOC4 = 0;
		LOC4 = sonslen_216327(b);
		if (!!((LOC3 == LOC4))) goto LA5;
		result = NIM_FALSE;
		goto BeforeRet;
	}
	LA5: ;
	result = NIM_TRUE;
	{
		NI i_244575;
		NI HEX3Atmp_244577;
		NI LOC8;
		NI res_244580;
		i_244575 = 0;
		HEX3Atmp_244577 = 0;
		LOC8 = 0;
		LOC8 = sonslen_216327(a);
		HEX3Atmp_244577 = (NI)(LOC8 - ((NI) 1));
		res_244580 = ((NI) 0);
		{
			while (1) {
				if (!(res_244580 <= HEX3Atmp_244577)) goto LA10;
				i_244575 = res_244580;
				result = sametypeornilaux_243586((*a).sons->data[i_244575], (*b).sons->data[i_244575], c);
				{
					if (!!(result)) goto LA13;
					goto BeforeRet;
				}
				LA13: ;
				res_244580 += ((NI) 1);
			} LA10: ;
		}
	}
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NIM_BOOL, sameconstraints_243758)(Tnode213790* a, Tnode213790* b) {
	NIM_BOOL result;
{	result = 0;
	{
		NI LOC3;
		NI LOC4;
		NimStringDesc* LOC7;
		LOC3 = 0;
		LOC3 = len_214059(a);
		LOC4 = 0;
		LOC4 = len_214059(b);
		if (!!((LOC3 == LOC4))) goto LA5;
		LOC7 = 0;
		LOC7 = HEX24_186183(TMP2781);
		internalerror_186113(LOC7);
	}
	LA5: ;
	{
		NI i_243790;
		NI HEX3Atmp_243796;
		NI LOC9;
		NI res_243799;
		i_243790 = 0;
		HEX3Atmp_243796 = 0;
		LOC9 = 0;
		LOC9 = len_214059(a);
		HEX3Atmp_243796 = (LOC9 - 1);
		res_243799 = ((NI) 1);
		{
			while (1) {
				if (!(res_243799 <= HEX3Atmp_243796)) goto LA11;
				i_243790 = res_243799;
				{
					Tnode213790* LOC14;
					Tnode213790* LOC15;
					NIM_BOOL LOC16;
					LOC14 = 0;
					LOC14 = HEX5BHEX5D_214238(a, i_243790);
					LOC15 = 0;
					LOC15 = HEX5BHEX5D_214238(b, i_243790);
					LOC16 = 0;
					LOC16 = exprstructuralequivalent_238099((*(*LOC14).kindU.S4.sym).constraint, (*(*LOC15).kindU.S4.sym).constraint, NIM_FALSE);
					if (!!(LOC16)) goto LA17;
					result = NIM_FALSE;
					goto BeforeRet;
				}
				LA17: ;
				res_243799 += ((NI) 1);
			} LA11: ;
		}
	}
	result = NIM_TRUE;
	goto BeforeRet;
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NIM_BOOL, sametypeaux_243580)(Ttype213828* x, Ttype213828* y, Tsametypeclosure243429* c) {
	NIM_BOOL result;
	Ttype213828* a;
	Ttype213828* b;
{	result = 0;
	{
		if (!(x == y)) goto LA3;
		result = NIM_TRUE;
		goto BeforeRet;
	}
	LA3: ;
	a = skiptypes_217113(x, 2048);
	b = skiptypes_217113(y, 2048);
	{
		if (!!(((*a).kind == (*b).kind))) goto LA7;
		switch ((*c).cmp) {
		case ((NU8) 0):
		{
			result = NIM_FALSE;
			goto BeforeRet;
		}
		break;
		case ((NU8) 1):
		{
			{
				while (1) {
					if (!((*a).kind == ((NU8) 13))) goto LA12;
					a = (*a).sons->data[((NI) 0)];
				} LA12: ;
			}
			{
				while (1) {
					if (!((*b).kind == ((NU8) 13))) goto LA14;
					b = (*b).sons->data[((NI) 0)];
				} LA14: ;
			}
			{
				if (!!(((*a).kind == (*b).kind))) goto LA17;
				result = NIM_FALSE;
				goto BeforeRet;
			}
			LA17: ;
		}
		break;
		case ((NU8) 2):
		{
			{
				while (1) {
					if (!((*a).kind == ((NU8) 13))) goto LA21;
					a = (*a).sons->data[((NI) 0)];
				} LA21: ;
			}
			{
				if (!!(((*a).kind == (*b).kind))) goto LA24;
				result = NIM_FALSE;
				goto BeforeRet;
			}
			LA24: ;
		}
		break;
		}
	}
	LA7: ;
	{
		Ttype213828* lhs;
		Ttype213828* rhs;
		if (!((*x).kind == ((NU8) 11))) goto LA28;
		lhs = skipgenericalias_244606(x);
		rhs = skipgenericalias_244606(y);
		{
			NIM_BOOL LOC32;
			Ttype213828* LOC34;
			Ttype213828* LOC35;
			LOC32 = 0;
			LOC32 = !(((*rhs).kind == ((NU8) 11)));
			if (LOC32) goto LA33;
			LOC34 = 0;
			LOC34 = base_239021(lhs);
			LOC35 = 0;
			LOC35 = base_239021(rhs);
			LOC32 = !((LOC34 == LOC35));
			LA33: ;
			if (!LOC32) goto LA36;
			result = NIM_FALSE;
			goto BeforeRet;
		}
		LA36: ;
		{
			NI i_245095;
			NI HEX3Atmp_245380;
			NI LOC39;
			NI res_245383;
			i_245095 = 0;
			HEX3Atmp_245380 = 0;
			LOC39 = 0;
			LOC39 = len_216339(lhs);
			HEX3Atmp_245380 = (NI)(LOC39 - ((NI) 2));
			res_245383 = ((NI) 1);
			{
				while (1) {
					Ttype213828* ff;
					Ttype213828* aa;
					if (!(res_245383 <= HEX3Atmp_245380)) goto LA41;
					i_245095 = res_245383;
					ff = (*rhs).sons->data[i_245095];
					aa = (*lhs).sons->data[i_245095];
					{
						NIM_BOOL LOC44;
						LOC44 = 0;
						LOC44 = sametypeaux_243580(ff, aa, c);
						if (!!(LOC44)) goto LA45;
						result = NIM_FALSE;
						goto BeforeRet;
					}
					LA45: ;
					res_245383 += ((NI) 1);
				} LA41: ;
			}
		}
		result = NIM_TRUE;
		goto BeforeRet;
	}
	LA28: ;
	switch ((*a).kind) {
	case ((NU8) 3):
	case ((NU8) 2):
	case ((NU8) 1):
	case ((NU8) 5):
	case ((NU8) 26):
	case ((NU8) 28):
	case ((NU8) 29):
	case ((NU8) 31) ... ((NU8) 45):
	case ((NU8) 7):
	case ((NU8) 6):
	{
		result = sameflags_244622(a, b);
	}
	break;
	case ((NU8) 59):
	case ((NU8) 60):
	{
		NIM_BOOL LOC49;
		LOC49 = 0;
		LOC49 = exprstructuralequivalent_238099((*a).n, (*b).n, NIM_FALSE);
		if (!(LOC49)) goto LA50;
		LOC49 = sameflags_244622(a, b);
		LA50: ;
		result = LOC49;
		{
			NIM_BOOL LOC53;
			NIM_BOOL LOC54;
			NI LOC56;
			NI LOC57;
			NI LOC59;
			LOC53 = 0;
			LOC54 = 0;
			LOC54 = result;
			if (!(LOC54)) goto LA55;
			LOC56 = 0;
			LOC56 = len_216339(a);
			LOC57 = 0;
			LOC57 = len_216339(b);
			LOC54 = (LOC56 == LOC57);
			LA55: ;
			LOC53 = LOC54;
			if (!(LOC53)) goto LA58;
			LOC59 = 0;
			LOC59 = len_216339(a);
			LOC53 = (LOC59 == ((NI) 1));
			LA58: ;
			if (!LOC53) goto LA60;
			{
				if (!((*c).reccheck < ((NI) 3))) goto LA64;
				(*c).reccheck += ((NI) 1);
			}
			goto LA62;
			LA64: ;
			{
				{
					NIM_BOOL LOC69;
					LOC69 = 0;
					LOC69 = containsorincl_243451(c, a, b);
					if (!LOC69) goto LA70;
					result = NIM_TRUE;
					goto BeforeRet;
				}
				LA70: ;
			}
			LA62: ;
			result = sametypeaux_243580((*a).sons->data[((NI) 0)], (*b).sons->data[((NI) 0)], c);
		}
		LA60: ;
	}
	break;
	case ((NU8) 17):
	{
		{
			if (!!(((((*a).flags | (*b).flags) &(1U<<((NU)(((NU8) 8))&31U)))!=0))) goto LA75;
			result = ((*a).Sup.id == (*b).Sup.id);
		}
		goto LA73;
		LA75: ;
		{
			{
				NIM_BOOL LOC80;
				NIM_BOOL LOC94;
				LOC80 = 0;
				LOC80 = ((((*a).flags & (*b).flags) &(1U<<((NU)(((NU8) 8))&31U)))!=0);
				if (!(LOC80)) goto LA81;
				LOC80 = ((*(*a).sym).Sup.id == (*(*b).sym).Sup.id);
				LA81: ;
				if (!LOC80) goto LA82;
				{
					if (!((*c).reccheck < ((NI) 3))) goto LA86;
					(*c).reccheck += ((NI) 1);
				}
				goto LA84;
				LA86: ;
				{
					{
						NIM_BOOL LOC91;
						LOC91 = 0;
						LOC91 = containsorincl_243451(c, a, b);
						if (!LOC91) goto LA92;
						result = NIM_TRUE;
						goto BeforeRet;
					}
					LA92: ;
				}
				LA84: ;
				LOC94 = 0;
				LOC94 = sameobjectstructures_244530(a, b, c);
				if (!(LOC94)) goto LA95;
				LOC94 = sameflags_244622(a, b);
				LA95: ;
				result = LOC94;
			}
			LA82: ;
		}
		LA73: ;
	}
	break;
	case ((NU8) 13):
	{
		{
			if (!((*c).reccheck < ((NI) 3))) goto LA99;
			(*c).reccheck += ((NI) 1);
		}
		goto LA97;
		LA99: ;
		{
			{
				NIM_BOOL LOC104;
				LOC104 = 0;
				LOC104 = containsorincl_243451(c, a, b);
				if (!LOC104) goto LA105;
				result = NIM_TRUE;
				goto BeforeRet;
			}
			LA105: ;
		}
		LA97: ;
		{
			if (!((*c).cmp == ((NU8) 0))) goto LA109;
			{
				NIM_BOOL LOC113;
				LOC113 = 0;
				LOC113 = sameflags_244622(a, b);
				if (!LOC113) goto LA114;
				{
					if (!!(((((*a).flags | (*b).flags) &(1U<<((NU)(((NU8) 8))&31U)))!=0))) goto LA118;
					result = ((*a).Sup.id == (*b).Sup.id);
				}
				goto LA116;
				LA118: ;
				{
					{
						NIM_BOOL LOC123;
						LOC123 = 0;
						LOC123 = ((((*a).flags & (*b).flags) &(1U<<((NU)(((NU8) 8))&31U)))!=0);
						if (!(LOC123)) goto LA124;
						LOC123 = ((*(*a).sym).Sup.id == (*(*b).sym).Sup.id);
						LA124: ;
						if (!LOC123) goto LA125;
						result = sametypeaux_243580((*a).sons->data[((NI) 0)], (*b).sons->data[((NI) 0)], c);
					}
					LA125: ;
				}
				LA116: ;
			}
			LA114: ;
		}
		goto LA107;
		LA109: ;
		{
			NIM_BOOL LOC128;
			LOC128 = 0;
			LOC128 = sametypeaux_243580((*a).sons->data[((NI) 0)], (*b).sons->data[((NI) 0)], c);
			if (!(LOC128)) goto LA129;
			LOC128 = sameflags_244622(a, b);
			LA129: ;
			result = LOC128;
		}
		LA107: ;
	}
	break;
	case ((NU8) 14):
	case ((NU8) 30):
	{
		NIM_BOOL LOC131;
		LOC131 = 0;
		LOC131 = ((*a).Sup.id == (*b).Sup.id);
		if (!(LOC131)) goto LA132;
		LOC131 = sameflags_244622(a, b);
		LA132: ;
		result = LOC131;
	}
	break;
	case ((NU8) 50):
	{
		result = ((*b).kind == ((NU8) 50));
	}
	break;
	case ((NU8) 18):
	{
		NIM_BOOL LOC145;
		{
			if (!((*c).reccheck < ((NI) 3))) goto LA137;
			(*c).reccheck += ((NI) 1);
		}
		goto LA135;
		LA137: ;
		{
			{
				NIM_BOOL LOC142;
				LOC142 = 0;
				LOC142 = containsorincl_243451(c, a, b);
				if (!LOC142) goto LA143;
				result = NIM_TRUE;
				goto BeforeRet;
			}
			LA143: ;
		}
		LA135: ;
		LOC145 = 0;
		LOC145 = sametuple_244210(a, b, c);
		if (!(LOC145)) goto LA146;
		LOC145 = sameflags_244622(a, b);
		LA146: ;
		result = LOC145;
	}
	break;
	case ((NU8) 8):
	{
		{
			if (!((*c).cmp == ((NU8) 1))) goto LA150;
			result = NIM_FALSE;
		}
		goto LA148;
		LA150: ;
		{
			NIM_BOOL LOC165;
			if (!(((*c).flags &(1U<<((NU)(((NU8) 2))&7U)))!=0)) goto LA153;
			{
				if (!((*c).reccheck < ((NI) 3))) goto LA157;
				(*c).reccheck += ((NI) 1);
			}
			goto LA155;
			LA157: ;
			{
				{
					NIM_BOOL LOC162;
					LOC162 = 0;
					LOC162 = containsorincl_243451(c, a, b);
					if (!LOC162) goto LA163;
					result = NIM_TRUE;
					goto BeforeRet;
				}
				LA163: ;
			}
			LA155: ;
			LOC165 = 0;
			LOC165 = samechildrenaux_244557(x, y, c);
			if (!(LOC165)) goto LA166;
			LOC165 = sameflags_244622(a, b);
			LA166: ;
			result = LOC165;
		}
		goto LA148;
		LA153: ;
		{
			result = sameflags_244622(a, b);
		}
		LA148: ;
	}
	break;
	case ((NU8) 12):
	{
		NIM_BOOL LOC169;
		LOC169 = 0;
		LOC169 = samechildrenaux_244557(a, b, c);
		if (!(LOC169)) goto LA170;
		LOC169 = sameflags_244622(a, b);
		LA170: ;
		result = LOC169;
		{
			NIM_BOOL LOC173;
			LOC173 = 0;
			LOC173 = result;
			if (!(LOC173)) goto LA174;
			LOC173 = (((*c).flags &(1U<<((NU)(((NU8) 3))&7U)))!=0);
			LA174: ;
			if (!LOC173) goto LA175;
			result = ((*(*a).sym).position == (*(*b).sym).position);
		}
		LA175: ;
	}
	break;
	case ((NU8) 9):
	case ((NU8) 10):
	case ((NU8) 24):
	case ((NU8) 27):
	case ((NU8) 19):
	case ((NU8) 22):
	case ((NU8) 21):
	case ((NU8) 23):
	case ((NU8) 4):
	case ((NU8) 16):
	case ((NU8) 25):
	case ((NU8) 46):
	case ((NU8) 47):
	case ((NU8) 48):
	case ((NU8) 49):
	case ((NU8) 15):
	case ((NU8) 51):
	case ((NU8) 61):
	case ((NU8) 54):
	case ((NU8) 52):
	case ((NU8) 53):
	case ((NU8) 55):
	case ((NU8) 56):
	case ((NU8) 57):
	case ((NU8) 58):
	{
		NIM_BOOL LOC194;
		{
			if (!((*c).reccheck < ((NI) 3))) goto LA180;
			(*c).reccheck += ((NI) 1);
		}
		goto LA178;
		LA180: ;
		{
			{
				NIM_BOOL LOC185;
				LOC185 = 0;
				LOC185 = containsorincl_243451(c, a, b);
				if (!LOC185) goto LA186;
				result = NIM_TRUE;
				goto BeforeRet;
			}
			LA186: ;
		}
		LA178: ;
		{
			NIM_BOOL LOC190;
			LOC190 = 0;
			LOC190 = ((*a).kind == ((NU8) 52));
			if (!(LOC190)) goto LA191;
			LOC190 = !(((*a).n == NIM_NIL));
			LA191: ;
			if (!LOC190) goto LA192;
			result = ((*a).n == (*b).n);
			goto BeforeRet;
		}
		LA192: ;
		LOC194 = 0;
		LOC194 = samechildrenaux_244557(a, b, c);
		if (!(LOC194)) goto LA195;
		LOC194 = sameflags_244622(a, b);
		LA195: ;
		result = LOC194;
		{
			NIM_BOOL LOC198;
			NIM_BOOL LOC202;
			NIM_BOOL LOC203;
			NIM_BOOL LOC206;
			LOC198 = 0;
			LOC198 = result;
			if (!(LOC198)) goto LA199;
			LOC198 = ((*a).kind == ((NU8) 25));
			LA199: ;
			if (!LOC198) goto LA200;
			LOC202 = 0;
			LOC203 = 0;
			LOC203 = (((*c).flags &(1U<<((NU)(((NU8) 1))&7U)))!=0);
			if (LOC203) goto LA204;
			LOC203 = ((*a).callconv == (*b).callconv);
			LA204: ;
			LOC202 = LOC203;
			if (!(LOC202)) goto LA205;
			LOC206 = 0;
			LOC206 = !((((*c).flags &(1U<<((NU)(((NU8) 4))&7U)))!=0));
			if (LOC206) goto LA207;
			LOC206 = sameconstraints_243758((*a).n, (*b).n);
			LA207: ;
			LOC202 = LOC206;
			LA205: ;
			result = LOC202;
		}
		LA200: ;
	}
	break;
	case ((NU8) 20):
	{
		NIM_BOOL LOC219;
		NIM_BOOL LOC220;
		{
			if (!((*c).reccheck < ((NI) 3))) goto LA211;
			(*c).reccheck += ((NI) 1);
		}
		goto LA209;
		LA211: ;
		{
			{
				NIM_BOOL LOC216;
				LOC216 = 0;
				LOC216 = containsorincl_243451(c, a, b);
				if (!LOC216) goto LA217;
				result = NIM_TRUE;
				goto BeforeRet;
			}
			LA217: ;
		}
		LA209: ;
		LOC219 = 0;
		LOC220 = 0;
		LOC220 = sametypeornilaux_243586((*a).sons->data[((NI) 0)], (*b).sons->data[((NI) 0)], c);
		if (!(LOC220)) goto LA221;
		LOC220 = samevalue_220189((*(*a).n).kindU.S6.sons->data[((NI) 0)], (*(*b).n).kindU.S6.sons->data[((NI) 0)]);
		LA221: ;
		LOC219 = LOC220;
		if (!(LOC219)) goto LA222;
		LOC219 = samevalue_220189((*(*a).n).kindU.S6.sons->data[((NI) 1)], (*(*b).n).kindU.S6.sons->data[((NI) 1)]);
		LA222: ;
		result = LOC219;
	}
	break;
	case ((NU8) 11):
	{
	}
	break;
	case ((NU8) 0):
	{
		result = NIM_FALSE;
	}
	break;
	}
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NIM_BOOL, comparetypes_245404)(Ttype213828* x, Ttype213828* y, NU8 cmp, NU8 flags) {
	NIM_BOOL result;
	Tsametypeclosure243429 c;
	result = 0;
	memset((void*)(&c), 0, sizeof(c));
	chckNil((void*)(&c));
	memset((void*)(&c), 0, sizeof(c));
	initsametypeclosure_243448((&c));
	c.cmp = cmp;
	c.flags = flags;
	{
		if (!(x == y)) goto LA3;
		result = NIM_TRUE;
	}
	goto LA1;
	LA3: ;
	{
		NIM_BOOL LOC6;
		LOC6 = 0;
		LOC6 = x == 0;
		if (LOC6) goto LA7;
		LOC6 = y == 0;
		LA7: ;
		if (!LOC6) goto LA8;
		result = NIM_FALSE;
	}
	goto LA1;
	LA8: ;
	{
		result = sametypeaux_243580(x, y, (&c));
	}
	LA1: ;
	return result;
}

N_NIMCALL(NIM_BOOL, iterovernode_239866)(Intset210035* marker, Tnode213790* n, Ttypeiter239025 iter, TNimObject* closure) {
	NIM_BOOL result;
{	result = 0;
	{
		if (!!((n == NIM_NIL))) goto LA3;
		switch ((*n).kind) {
		case ((NU8) 0) ... ((NU8) 23):
		{
			result = iterovertypeaux_239859(marker, (*n).typ, iter, closure);
		}
		break;
		default:
		{
			{
				NI i_239897;
				NI HEX3Atmp_239900;
				NI LOC8;
				NI res_239903;
				i_239897 = 0;
				HEX3Atmp_239900 = 0;
				LOC8 = 0;
				LOC8 = sonslen_216351(n);
				HEX3Atmp_239900 = (NI)(LOC8 - ((NI) 1));
				res_239903 = ((NI) 0);
				{
					while (1) {
						if (!(res_239903 <= HEX3Atmp_239900)) goto LA10;
						i_239897 = res_239903;
						result = iterovernode_239866(marker, (*n).kindU.S6.sons->data[i_239897], iter, closure);
						{
							if (!result) goto LA13;
							goto BeforeRet;
						}
						LA13: ;
						res_239903 += ((NI) 1);
					} LA10: ;
				}
			}
		}
		break;
		}
	}
	LA3: ;
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NIM_BOOL, iterovertypeaux_239859)(Intset210035* marker, Ttype213828* t, Ttypeiter239025 iter, TNimObject* closure) {
	NIM_BOOL result;
{	result = 0;
	result = NIM_FALSE;
	{
		if (!(t == NIM_NIL)) goto LA3;
		goto BeforeRet;
	}
	LA3: ;
	result = iter(t, closure);
	{
		if (!result) goto LA7;
		goto BeforeRet;
	}
	LA7: ;
	{
		NIM_BOOL LOC11;
		LOC11 = 0;
		LOC11 = containsorincl_210862(marker, (*t).Sup.id);
		if (!!(LOC11)) goto LA12;
		switch ((*t).kind) {
		case ((NU8) 11):
		case ((NU8) 10):
		{
			Ttype213828* LOC15;
			LOC15 = 0;
			LOC15 = lastson_216377(t);
			result = iterovertypeaux_239859(marker, LOC15, iter, closure);
		}
		break;
		default:
		{
			{
				NI i_239938;
				NI HEX3Atmp_239952;
				NI LOC18;
				NI res_239955;
				i_239938 = 0;
				HEX3Atmp_239952 = 0;
				LOC18 = 0;
				LOC18 = sonslen_216327(t);
				HEX3Atmp_239952 = (NI)(LOC18 - ((NI) 1));
				res_239955 = ((NI) 0);
				{
					while (1) {
						if (!(res_239955 <= HEX3Atmp_239952)) goto LA20;
						i_239938 = res_239955;
						result = iterovertypeaux_239859(marker, (*t).sons->data[i_239938], iter, closure);
						{
							if (!result) goto LA23;
							goto BeforeRet;
						}
						LA23: ;
						res_239955 += ((NI) 1);
					} LA20: ;
				}
			}
			{
				if (!!(((*t).n == NIM_NIL))) goto LA27;
				result = iterovernode_239866(marker, (*t).n, iter, closure);
			}
			LA27: ;
		}
		break;
		}
	}
	LA12: ;
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NIM_BOOL, iterovertype_239038)(Ttype213828* t, Ttypeiter239025 iter, TNimObject* closure) {
	NIM_BOOL result;
	Intset210035 marker;
	result = 0;
	memset((void*)(&marker), 0, sizeof(marker));
	chckNil((void*)(&marker));
	memset((void*)(&marker), 0, sizeof(marker));
	initintset_210885((&marker));
	result = iterovertypeaux_239859((&marker), t, iter, closure);
	return result;
}

N_NIMCALL(NIM_BOOL, containsgenerictypeiter_247413)(Ttype213828* t, TNimObject* closure) {
	NIM_BOOL result;
{	result = 0;
	{
		if (!((*t).kind == ((NU8) 59))) goto LA3;
		result = ((*t).n == NIM_NIL);
		goto BeforeRet;
	}
	LA3: ;
	{
		if (!((*t).kind == ((NU8) 8))) goto LA7;
		{
			Ttype213828* LOC11;
			LOC11 = 0;
			LOC11 = base_239021(t);
			if (!((*LOC11).kind == ((NU8) 0))) goto LA12;
			result = NIM_TRUE;
			goto BeforeRet;
		}
		LA12: ;
		{
			Ttype213828* LOC16;
			NIM_BOOL LOC17;
			LOC16 = 0;
			LOC16 = base_239021(t);
			LOC17 = 0;
			LOC17 = containsgenerictypeiter_247413(LOC16, closure);
			if (!LOC17) goto LA18;
			result = NIM_TRUE;
			goto BeforeRet;
		}
		LA18: ;
		result = NIM_FALSE;
		goto BeforeRet;
	}
	LA7: ;
	{
		if (!((IL64(1727130457096590848) &((NU64)1<<((NU)((*t).kind)&63U)))!=0)) goto LA22;
		result = NIM_TRUE;
		goto BeforeRet;
	}
	LA22: ;
	result = NIM_FALSE;
	goto BeforeRet;
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NIM_BOOL, containsgenerictype_247492)(Ttype213828* t) {
	NIM_BOOL result;
	result = 0;
	result = iterovertype_239038(t, containsgenerictypeiter_247413, NIM_NIL);
	return result;
}

N_NIMCALL(NI64, getordvalue_239118)(Tnode213790* n) {
	NI64 result;
	result = 0;
	switch ((*n).kind) {
	case ((NU8) 5) ... ((NU8) 15):
	{
		result = (*n).kindU.S1.intval;
	}
	break;
	case ((NU8) 23):
	{
		result = IL64(0);
	}
	break;
	case ((NU8) 58):
	{
		result = getordvalue_239118((*n).kindU.S6.sons->data[((NI) 1)]);
	}
	break;
	default:
	{
		localerror_186080((*n).info, ((NU16) 78), ((NimStringDesc*) &TMP2116));
		result = IL64(0);
	}
	break;
	}
	return result;
}

N_NIMCALL(NI64, firstord_239001)(Ttype213828* t) {
	NI64 result;
	result = 0;
	switch ((*t).kind) {
	case ((NU8) 1):
	case ((NU8) 2):
	case ((NU8) 24):
	case ((NU8) 27):
	case ((NU8) 28):
	case ((NU8) 48):
	case ((NU8) 50):
	{
		result = IL64(0);
	}
	break;
	case ((NU8) 19):
	case ((NU8) 23):
	{
		result = firstord_239001((*t).sons->data[((NI) 0)]);
	}
	break;
	case ((NU8) 16):
	case ((NU8) 4):
	{
		result = firstord_239001((*t).sons->data[((NI) 0)]);
	}
	break;
	case ((NU8) 20):
	{
		result = getordvalue_239118((*(*t).n).kindU.S6.sons->data[((NI) 0)]);
	}
	break;
	case ((NU8) 31):
	{
		{
			if (!(intsize_166615 == ((NI) 4))) goto LA8;
			result = IL64(-2147483648);
		}
		goto LA6;
		LA8: ;
		{
			result = (IL64(-9223372036854775807) - IL64(1));
		}
		LA6: ;
	}
	break;
	case ((NU8) 32):
	{
		result = IL64(-128);
	}
	break;
	case ((NU8) 33):
	{
		result = IL64(-32768);
	}
	break;
	case ((NU8) 34):
	{
		result = IL64(-2147483648);
	}
	break;
	case ((NU8) 35):
	{
		result = (IL64(-9223372036854775807) - IL64(1));
	}
	break;
	case ((NU8) 40) ... ((NU8) 44):
	{
		result = IL64(0);
	}
	break;
	case ((NU8) 14):
	{
		{
			NIM_BOOL LOC19;
			NI LOC20;
			LOC19 = 0;
			LOC20 = 0;
			LOC20 = sonslen_216327(t);
			LOC19 = (((NI) 0) < LOC20);
			if (!(LOC19)) goto LA21;
			LOC19 = !(((*t).sons->data[((NI) 0)] == NIM_NIL));
			LA21: ;
			if (!LOC19) goto LA22;
			result = firstord_239001((*t).sons->data[((NI) 0)]);
		}
		goto LA17;
		LA22: ;
		{
			result = ((NI64) ((*(*(*(*t).n).kindU.S6.sons->data[((NI) 0)]).kindU.S4.sym).position));
		}
		LA17: ;
	}
	break;
	case ((NU8) 11):
	case ((NU8) 13):
	case ((NU8) 46):
	case ((NU8) 47):
	case ((NU8) 8):
	case ((NU8) 61):
	{
		Ttype213828* LOC26;
		LOC26 = 0;
		LOC26 = lastson_216377(t);
		result = firstord_239001(LOC26);
	}
	break;
	case ((NU8) 15):
	{
		{
			NI LOC30;
			Ttype213828* LOC33;
			LOC30 = 0;
			LOC30 = len_216339(t);
			if (!(((NI) 0) < LOC30)) goto LA31;
			LOC33 = 0;
			LOC33 = lastson_216377(t);
			result = firstord_239001(LOC33);
		}
		goto LA28;
		LA31: ;
		{
			NimStringDesc* LOC35;
			LOC35 = 0;
			LOC35 = rawNewString(reprEnum((*t).kind, (&NTI213241))->Sup.len + 24);
appendString(LOC35, ((NimStringDesc*) &TMP2791));
appendString(LOC35, reprEnum((*t).kind, (&NTI213241)));
appendChar(LOC35, 41);
			internalerror_186113(LOC35);
		}
		LA28: ;
	}
	break;
	default:
	{
		NimStringDesc* LOC37;
		LOC37 = 0;
		LOC37 = rawNewString(reprEnum((*t).kind, (&NTI213241))->Sup.len + 24);
appendString(LOC37, ((NimStringDesc*) &TMP2791));
appendString(LOC37, reprEnum((*t).kind, (&NTI213241)));
appendChar(LOC37, 41);
		internalerror_186113(LOC37);
		result = IL64(0);
	}
	break;
	}
	return result;
}

N_NIMCALL(NI64, lastord_239004)(Ttype213828* t) {
	NI64 result;
	result = 0;
	switch ((*t).kind) {
	case ((NU8) 1):
	{
		result = IL64(1);
	}
	break;
	case ((NU8) 2):
	{
		result = IL64(255);
	}
	break;
	case ((NU8) 19):
	case ((NU8) 23):
	{
		result = lastord_239004((*t).sons->data[((NI) 0)]);
	}
	break;
	case ((NU8) 16):
	case ((NU8) 4):
	{
		result = lastord_239004((*t).sons->data[((NI) 0)]);
	}
	break;
	case ((NU8) 20):
	{
		result = getordvalue_239118((*(*t).n).kindU.S6.sons->data[((NI) 1)]);
	}
	break;
	case ((NU8) 31):
	{
		{
			if (!(intsize_166615 == ((NI) 4))) goto LA9;
			result = IL64(2147483647);
		}
		goto LA7;
		LA9: ;
		{
			result = IL64(9223372036854775807);
		}
		LA7: ;
	}
	break;
	case ((NU8) 32):
	{
		result = IL64(127);
	}
	break;
	case ((NU8) 33):
	{
		result = IL64(32767);
	}
	break;
	case ((NU8) 34):
	{
		result = IL64(2147483647);
	}
	break;
	case ((NU8) 35):
	{
		result = IL64(9223372036854775807);
	}
	break;
	case ((NU8) 40):
	{
		{
			if (!(intsize_166615 == ((NI) 4))) goto LA19;
			result = IL64(4294967295);
		}
		goto LA17;
		LA19: ;
		{
			result = IL64(9223372036854775807);
		}
		LA17: ;
	}
	break;
	case ((NU8) 41):
	{
		result = IL64(255);
	}
	break;
	case ((NU8) 42):
	{
		result = IL64(65535);
	}
	break;
	case ((NU8) 43):
	{
		result = IL64(4294967295);
	}
	break;
	case ((NU8) 44):
	{
		result = IL64(9223372036854775807);
	}
	break;
	case ((NU8) 14):
	{
		NI LOC27;
		LOC27 = 0;
		LOC27 = sonslen_216351((*t).n);
		result = ((NI64) ((*(*(*(*t).n).kindU.S6.sons->data[(NI)(LOC27 - ((NI) 1))]).kindU.S4.sym).position));
	}
	break;
	case ((NU8) 11):
	case ((NU8) 13):
	case ((NU8) 46):
	case ((NU8) 47):
	case ((NU8) 8):
	case ((NU8) 61):
	{
		Ttype213828* LOC29;
		LOC29 = 0;
		LOC29 = lastson_216377(t);
		result = lastord_239004(LOC29);
	}
	break;
	case ((NU8) 50):
	{
		result = IL64(0);
	}
	break;
	case ((NU8) 15):
	{
		{
			NI LOC34;
			Ttype213828* LOC37;
			LOC34 = 0;
			LOC34 = len_216339(t);
			if (!(((NI) 0) < LOC34)) goto LA35;
			LOC37 = 0;
			LOC37 = lastson_216377(t);
			result = lastord_239004(LOC37);
		}
		goto LA32;
		LA35: ;
		{
			NimStringDesc* LOC39;
			LOC39 = 0;
			LOC39 = rawNewString(reprEnum((*t).kind, (&NTI213241))->Sup.len + 23);
appendString(LOC39, ((NimStringDesc*) &TMP2792));
appendString(LOC39, reprEnum((*t).kind, (&NTI213241)));
appendChar(LOC39, 41);
			internalerror_186113(LOC39);
		}
		LA32: ;
	}
	break;
	default:
	{
		NimStringDesc* LOC41;
		LOC41 = 0;
		LOC41 = rawNewString(reprEnum((*t).kind, (&NTI213241))->Sup.len + 23);
appendString(LOC41, ((NimStringDesc*) &TMP2792));
appendString(LOC41, reprEnum((*t).kind, (&NTI213241)));
appendChar(LOC41, 41);
		internalerror_186113(LOC41);
		result = IL64(0);
	}
	break;
	}
	return result;
}

N_NIMCALL(NI64, lengthord_239007)(Ttype213828* t) {
	NI64 result;
	result = 0;
	switch ((*t).kind) {
	case ((NU8) 35):
	case ((NU8) 34):
	case ((NU8) 31):
	{
		result = lastord_239004(t);
	}
	break;
	case ((NU8) 13):
	case ((NU8) 46):
	case ((NU8) 47):
	{
		result = lengthord_239007((*t).sons->data[((NI) 0)]);
	}
	break;
	default:
	{
		NI64 LOC4;
		NI64 LOC5;
		LOC4 = 0;
		LOC4 = lastord_239004(t);
		LOC5 = 0;
		LOC5 = firstord_239001(t);
		result = (NI64)((NI64)(LOC4 - LOC5) + IL64(1));
	}
	break;
	}
	return result;
}

N_NIMCALL(NIM_BOOL, isordinaltype_239057)(Ttype213828* t) {
	NIM_BOOL result;
	NIM_BOOL LOC1;
	NIM_BOOL LOC3;
	result = 0;
	LOC1 = 0;
	LOC1 = ((IL64(15459734798342) &((NU64)1<<((NU)((*t).kind)&63U)))!=0);
	if (LOC1) goto LA2;
	LOC3 = 0;
	LOC3 = ((IL64(211106233616384) &((NU64)1<<((NU)((*t).kind)&63U)))!=0);
	if (!(LOC3)) goto LA4;
	LOC3 = isordinaltype_239057((*t).sons->data[((NI) 0)]);
	LA4: ;
	LOC1 = LOC3;
	LA2: ;
	result = LOC1;
	return result;
}

N_NIMCALL(NIM_BOOL, sametype_243628)(Ttype213828* a, Ttype213828* b, NU8 flags) {
	NIM_BOOL result;
	Tsametypeclosure243429 c;
	result = 0;
	memset((void*)(&c), 0, sizeof(c));
	chckNil((void*)(&c));
	memset((void*)(&c), 0, sizeof(c));
	initsametypeclosure_243448((&c));
	c.flags = flags;
	result = sametypeaux_243580(a, b, (&c));
	return result;
}

N_NIMCALL(NIM_BOOL, sameobjecttypes_244344)(Ttype213828* a, Ttype213828* b) {
	NIM_BOOL result;
	result = 0;
	{
		if (!!(((((*a).flags | (*b).flags) &(1U<<((NU)(((NU8) 8))&31U)))!=0))) goto LA3;
		result = ((*a).Sup.id == (*b).Sup.id);
	}
	goto LA1;
	LA3: ;
	{
		{
			NIM_BOOL LOC8;
			Tsametypeclosure243429 c;
			LOC8 = 0;
			LOC8 = ((((*a).flags & (*b).flags) &(1U<<((NU)(((NU8) 8))&31U)))!=0);
			if (!(LOC8)) goto LA9;
			LOC8 = ((*(*a).sym).Sup.id == (*(*b).sym).Sup.id);
			LA9: ;
			if (!LOC8) goto LA10;
			memset((void*)(&c), 0, sizeof(c));
			chckNil((void*)(&c));
			memset((void*)(&c), 0, sizeof(c));
			initsametypeclosure_243448((&c));
			result = sametypeaux_243580(a, b, (&c));
		}
		LA10: ;
	}
	LA1: ;
	return result;
}

N_NIMCALL(NI, inheritancediff_245442)(Ttype213828* a, Ttype213828* b) {
	NI result;
	Ttype213828* x;
	Ttype213828* y;
{	result = 0;
	{
		NIM_BOOL LOC3;
		NIM_BOOL LOC4;
		LOC3 = 0;
		LOC4 = 0;
		LOC4 = (a == b);
		if (LOC4) goto LA5;
		LOC4 = ((*a).kind == ((NU8) 50));
		LA5: ;
		LOC3 = LOC4;
		if (LOC3) goto LA6;
		LOC3 = ((*b).kind == ((NU8) 50));
		LA6: ;
		if (!LOC3) goto LA7;
		result = ((NI) 0);
		goto BeforeRet;
	}
	LA7: ;
	x = a;
	result = ((NI) 0);
	{
		while (1) {
			if (!!((x == NIM_NIL))) goto LA10;
			x = skiptypes_217113(x, IL64(211106247215360));
			{
				NIM_BOOL LOC13;
				LOC13 = 0;
				LOC13 = sameobjecttypes_244344(x, b);
				if (!LOC13) goto LA14;
				goto BeforeRet;
			}
			LA14: ;
			x = (*x).sons->data[((NI) 0)];
			result -= ((NI) 1);
		} LA10: ;
	}
	y = b;
	result = ((NI) 0);
	{
		while (1) {
			if (!!((y == NIM_NIL))) goto LA17;
			y = skiptypes_217113(y, IL64(211106247215360));
			{
				NIM_BOOL LOC20;
				LOC20 = 0;
				LOC20 = sameobjecttypes_244344(y, a);
				if (!LOC20) goto LA21;
				goto BeforeRet;
			}
			LA21: ;
			y = (*y).sons->data[((NI) 0)];
			result += ((NI) 1);
		} LA17: ;
	}
	result = ((NI) IL64(9223372036854775807));
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NI, safeinheritancediff_247552)(Ttype213828* a, Ttype213828* b) {
	NI result;
	result = 0;
	{
		NIM_BOOL LOC3;
		LOC3 = 0;
		LOC3 = ((*a).kind == ((NU8) 50));
		if (LOC3) goto LA4;
		LOC3 = ((*b).kind == ((NU8) 50));
		LA4: ;
		if (!LOC3) goto LA5;
		result = ((NI) -1);
	}
	goto LA1;
	LA5: ;
	{
		result = inheritancediff_245442(a, b);
	}
	LA1: ;
	return result;
}

N_NIMCALL(NIM_BOOL, compatibleeffectsaux_247575)(Tnode213790* se, Tnode213790* re) {
	NIM_BOOL result;
{	result = 0;
	{
		if (!re == 0) goto LA3;
		result = NIM_FALSE;
		goto BeforeRet;
	}
	LA3: ;
	{
		Tnode213790* r_247589;
		r_247589 = 0;
		{
			NI i_247607;
			NI HEX3Atmp_247609;
			NI LOC7;
			NI res_247611;
			i_247607 = 0;
			HEX3Atmp_247609 = 0;
			LOC7 = 0;
			LOC7 = len_214059(re);
			HEX3Atmp_247609 = (LOC7 - 1);
			res_247611 = ((NI) 0);
			{
				while (1) {
					if (!(res_247611 <= HEX3Atmp_247609)) goto LA9;
					i_247607 = res_247611;
					r_247589 = (*re).kindU.S6.sons->data[i_247607];
					{
						{
							Tnode213790* s_247591;
							s_247591 = 0;
							{
								NI i_247597;
								NI HEX3Atmp_247599;
								NI LOC13;
								NI res_247601;
								i_247597 = 0;
								HEX3Atmp_247599 = 0;
								LOC13 = 0;
								LOC13 = len_214059(se);
								HEX3Atmp_247599 = (LOC13 - 1);
								res_247601 = ((NI) 0);
								{
									while (1) {
										if (!(res_247601 <= HEX3Atmp_247599)) goto LA15;
										i_247597 = res_247601;
										s_247591 = (*se).kindU.S6.sons->data[i_247597];
										{
											NI LOC18;
											LOC18 = 0;
											LOC18 = safeinheritancediff_247552((*r_247589).typ, (*s_247591).typ);
											if (!(LOC18 <= ((NI) 0))) goto LA19;
											goto LA10;
										}
										LA19: ;
										res_247601 += ((NI) 1);
									} LA15: ;
								}
							}
						}
						result = NIM_FALSE;
						goto BeforeRet;
					} LA10: ;
					res_247611 += ((NI) 1);
				} LA9: ;
			}
		}
	}
	result = NIM_TRUE;
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NIM_BOOL, compatibleeffects_247614)(Ttype213828* formal, Ttype213828* actual) {
	NIM_BOOL result;
	Tnode213790* spec;
	NIM_BOOL LOC46;
{	result = 0;
	{
		NimStringDesc* LOC5;
		if (!!(((*(*(*formal).n).kindU.S6.sons->data[((NI) 0)]).kind == ((NU8) 152)))) goto LA3;
		LOC5 = 0;
		LOC5 = HEX24_186183(TMP2795);
		internalerror_186113(LOC5);
	}
	LA3: ;
	{
		NimStringDesc* LOC10;
		if (!!(((*(*(*actual).n).kindU.S6.sons->data[((NI) 0)]).kind == ((NU8) 152)))) goto LA8;
		LOC10 = 0;
		LOC10 = HEX24_186183(TMP2796);
		internalerror_186113(LOC10);
	}
	LA8: ;
	spec = (*(*formal).n).kindU.S6.sons->data[((NI) 0)];
	{
		NI LOC13;
		Tnode213790* real;
		Tnode213790* se;
		Tnode213790* st;
		LOC13 = 0;
		LOC13 = len_214059(spec);
		if (!!((LOC13 == ((NI) 0)))) goto LA14;
		real = (*(*actual).n).kindU.S6.sons->data[((NI) 0)];
		se = (*spec).kindU.S6.sons->data[((NI) 0)];
		{
			NIM_BOOL LOC18;
			LOC18 = 0;
			LOC18 = !(se == 0);
			if (!(LOC18)) goto LA19;
			LOC18 = !(((*se).kind == ((NU8) 152)));
			LA19: ;
			if (!LOC18) goto LA20;
			{
				NI LOC24;
				LOC24 = 0;
				LOC24 = len_214059(real);
				if (!(LOC24 == ((NI) 0))) goto LA25;
				result = NIM_FALSE;
				goto BeforeRet;
			}
			LA25: ;
			result = compatibleeffectsaux_247575(se, (*real).kindU.S6.sons->data[((NI) 0)]);
			{
				if (!!(result)) goto LA29;
				goto BeforeRet;
			}
			LA29: ;
		}
		LA20: ;
		st = (*spec).kindU.S6.sons->data[((NI) 3)];
		{
			NIM_BOOL LOC33;
			LOC33 = 0;
			LOC33 = !(st == 0);
			if (!(LOC33)) goto LA34;
			LOC33 = !(((*st).kind == ((NU8) 152)));
			LA34: ;
			if (!LOC33) goto LA35;
			{
				NI LOC39;
				LOC39 = 0;
				LOC39 = len_214059(real);
				if (!(LOC39 == ((NI) 0))) goto LA40;
				result = NIM_FALSE;
				goto BeforeRet;
			}
			LA40: ;
			result = compatibleeffectsaux_247575(st, (*real).kindU.S6.sons->data[((NI) 3)]);
			{
				if (!!(result)) goto LA44;
				goto BeforeRet;
			}
			LA44: ;
		}
		LA35: ;
	}
	LA14: ;
	LOC46 = 0;
	LOC46 = (((NI) ((*formal).locklevel)) < ((NI) 0));
	if (LOC46) goto LA47;
	LOC46 = (((NI) ((*actual).locklevel)) <= ((NI) ((*formal).locklevel)));
	LA47: ;
	result = LOC46;
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NimStringDesc*, getprocheader_239324)(Tsym213822* sym, NU8 prefer) {
	NimStringDesc* result;
	NimStringDesc* LOC1;
	Tnode213790* n;
	result = 0;
	LOC1 = 0;
	LOC1 = rawNewString((*(*(*sym).owner).name).s->Sup.len + (*(*sym).name).s->Sup.len + 2);
appendString(LOC1, (*(*(*sym).owner).name).s);
appendChar(LOC1, 46);
appendString(LOC1, (*(*sym).name).s);
appendChar(LOC1, 40);
	result = LOC1;
	n = (*(*sym).typ).n;
	{
		NI i_239345;
		NI HEX3Atmp_239376;
		NI LOC3;
		NI res_239379;
		i_239345 = 0;
		HEX3Atmp_239376 = 0;
		LOC3 = 0;
		LOC3 = sonslen_216351(n);
		HEX3Atmp_239376 = (NI)(LOC3 - ((NI) 1));
		res_239379 = ((NI) 1);
		{
			while (1) {
				Tnode213790* p;
				if (!(res_239379 <= HEX3Atmp_239376)) goto LA5;
				i_239345 = res_239379;
				p = (*n).kindU.S6.sons->data[i_239345];
				{
					NimStringDesc* LOC10;
					if (!((*p).kind == ((NU8) 3))) goto LA8;
					result = resizeString(result, (*(*(*p).kindU.S4.sym).name).s->Sup.len + 0);
appendString(result, (*(*(*p).kindU.S4.sym).name).s);
					result = resizeString(result, 2);
appendString(result, ((NimStringDesc*) &TMP2217));
					LOC10 = 0;
					LOC10 = typetostring_239017((*(*p).kindU.S4.sym).typ, prefer);
					result = resizeString(result, LOC10->Sup.len + 0);
appendString(result, LOC10);
					{
						NI LOC13;
						LOC13 = 0;
						LOC13 = sonslen_216351(n);
						if (!!((i_239345 == (NI)(LOC13 - ((NI) 1))))) goto LA14;
						result = resizeString(result, 2);
appendString(result, ((NimStringDesc*) &TMP2184));
					}
					LA14: ;
				}
				goto LA6;
				LA8: ;
				{
					internalerror_186113(((NimStringDesc*) &TMP2804));
				}
				LA6: ;
				res_239379 += ((NI) 1);
			} LA5: ;
		}
	}
	result = addChar(result, 41);
	{
		NimStringDesc* LOC21;
		NimStringDesc* LOC22;
		if (!!(((*(*n).kindU.S6.sons->data[((NI) 0)]).typ == NIM_NIL))) goto LA19;
		LOC21 = 0;
		LOC22 = 0;
		LOC22 = typetostring_239017((*(*n).kindU.S6.sons->data[((NI) 0)]).typ, prefer);
		LOC21 = rawNewString(LOC22->Sup.len + 2);
appendString(LOC21, ((NimStringDesc*) &TMP2217));
appendString(LOC21, LOC22);
		result = resizeString(result, LOC21->Sup.len + 0);
appendString(result, LOC21);
	}
	LA19: ;
	return result;
}

N_NIMCALL(NIM_BOOL, isemptycontainer_248113)(Ttype213828* t) {
	NIM_BOOL result;
	result = 0;
	switch ((*t).kind) {
	case ((NU8) 6):
	case ((NU8) 5):
	{
		result = NIM_TRUE;
	}
	break;
	case ((NU8) 16):
	case ((NU8) 4):
	{
		result = ((*(*t).sons->data[((NI) 1)]).kind == ((NU8) 3));
	}
	break;
	case ((NU8) 19):
	case ((NU8) 24):
	case ((NU8) 27):
	case ((NU8) 48):
	{
		result = ((*(*t).sons->data[((NI) 0)]).kind == ((NU8) 3));
	}
	break;
	case ((NU8) 11):
	{
		Ttype213828* LOC5;
		LOC5 = 0;
		LOC5 = lastson_216377(t);
		result = isemptycontainer_248113(LOC5);
	}
	break;
	default:
	{
		result = NIM_FALSE;
	}
	break;
	}
	return result;
}

N_NIMCALL(NI64, align_247049)(NI64 address, NI64 alignment) {
	NI64 result;
	result = 0;
	result = (NI64)((NI64)(address + (NI64)(alignment - IL64(1))) & (NI64)((NU64) ~((NI64)(alignment - IL64(1)))));
	return result;
}

N_NIMCALL(NIM_BOOL, isobjectwithtypefieldpredicate_240297)(Ttype213828* t) {
	NIM_BOOL result;
	NIM_BOOL LOC1;
	NIM_BOOL LOC2;
	NIM_BOOL LOC3;
	NIM_BOOL LOC6;
	result = 0;
	LOC1 = 0;
	LOC2 = 0;
	LOC3 = 0;
	LOC3 = ((*t).kind == ((NU8) 17));
	if (!(LOC3)) goto LA4;
	LOC3 = ((*t).sons->data[((NI) 0)] == NIM_NIL);
	LA4: ;
	LOC2 = LOC3;
	if (!(LOC2)) goto LA5;
	LOC6 = 0;
	LOC6 = !(((*t).sym == NIM_NIL));
	if (!(LOC6)) goto LA7;
	LOC6 = !(((134218240 & (*(*t).sym).flags) == 0));
	LA7: ;
	LOC2 = !(LOC6);
	LA5: ;
	LOC1 = LOC2;
	if (!(LOC1)) goto LA8;
	LOC1 = !((((*t).flags &(1U<<((NU)(((NU8) 2))&31U)))!=0));
	LA8: ;
	result = LOC1;
	return result;
}

N_NIMCALL(NI64, computerecsizeaux_247062)(Tnode213790* n, NI64* a, NI64* curroffset) {
	NI64 result;
	NI64 maxalign;
	NI64 maxsize;
	NI64 b;
	NI64 res;
{	result = 0;
	maxalign = 0;
	maxsize = 0;
	b = 0;
	res = 0;
	switch ((*n).kind) {
	case ((NU8) 139):
	{
		NI64 LOC13;
		NI64 LOC14;
		result = computerecsizeaux_247062((*n).kindU.S6.sons->data[((NI) 0)], a, curroffset);
		maxsize = IL64(0);
		maxalign = IL64(1);
		{
			NI i_247213;
			NI HEX3Atmp_247248;
			NI LOC3;
			NI res_247251;
			i_247213 = 0;
			HEX3Atmp_247248 = 0;
			LOC3 = 0;
			LOC3 = sonslen_216351(n);
			HEX3Atmp_247248 = (NI)(LOC3 - ((NI) 1));
			res_247251 = ((NI) 1);
			{
				while (1) {
					if (!(res_247251 <= HEX3Atmp_247248)) goto LA5;
					i_247213 = res_247251;
					switch ((*(*n).kindU.S6.sons->data[i_247213]).kind) {
					case ((NU8) 85):
					case ((NU8) 88):
					{
						Tnode213790* LOC7;
						LOC7 = 0;
						LOC7 = lastson_216364((*n).kindU.S6.sons->data[i_247213]);
						res = computerecsizeaux_247062(LOC7, (&b), curroffset);
						{
							if (!(res < IL64(0))) goto LA10;
							result = res;
							goto BeforeRet;
						}
						LA10: ;
						maxsize = ((maxsize >= res) ? maxsize : res);
						maxalign = ((maxalign >= b) ? maxalign : b);
					}
					break;
					default:
					{
						internalerror_186113(((NimStringDesc*) &TMP2965));
					}
					break;
					}
					res_247251 += ((NI) 1);
				} LA5: ;
			}
		}
		LOC13 = 0;
		LOC13 = align_247049((*curroffset), maxalign);
		(*curroffset) = (NI64)(LOC13 + maxsize);
		LOC14 = 0;
		LOC14 = align_247049(result, maxalign);
		result = (NI64)(LOC14 + maxsize);
		(*a) = maxalign;
	}
	break;
	case ((NU8) 138):
	{
		result = IL64(0);
		maxalign = IL64(1);
		{
			NI i_247236;
			NI HEX3Atmp_247256;
			NI LOC17;
			NI res_247259;
			i_247236 = 0;
			HEX3Atmp_247256 = 0;
			LOC17 = 0;
			LOC17 = sonslen_216351(n);
			HEX3Atmp_247256 = (NI)(LOC17 - ((NI) 1));
			res_247259 = ((NI) 0);
			{
				while (1) {
					NI64 LOC24;
					NI64 LOC25;
					if (!(res_247259 <= HEX3Atmp_247256)) goto LA19;
					i_247236 = res_247259;
					res = computerecsizeaux_247062((*n).kindU.S6.sons->data[i_247236], (&b), curroffset);
					{
						if (!(res < IL64(0))) goto LA22;
						result = res;
						goto BeforeRet;
					}
					LA22: ;
					LOC24 = 0;
					LOC24 = align_247049((*curroffset), b);
					(*curroffset) = (NI64)(LOC24 + res);
					LOC25 = 0;
					LOC25 = align_247049(result, b);
					result = (NI64)(LOC25 + res);
					{
						if (!(maxalign < b)) goto LA28;
						maxalign = b;
					}
					LA28: ;
					res_247259 += ((NI) 1);
				} LA19: ;
			}
		}
		(*a) = maxalign;
	}
	break;
	case ((NU8) 3):
	{
		result = computesizeaux_247057((*(*n).kindU.S4.sym).typ, a);
		(*(*n).kindU.S4.sym).offset = ((NI) ((*curroffset)));
	}
	break;
	default:
	{
		(*a) = IL64(1);
		result = IL64(-3);
	}
	break;
	}
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NI64, computesizeaux_247057)(Ttype213828* typ, NI64* a) {
	NI64 result;
	NI64 res;
	NI64 maxalign;
	NI64 length;
	NI64 curroffset;
{	result = 0;
	res = 0;
	maxalign = 0;
	length = 0;
	curroffset = 0;
	{
		if (!((*typ).size == IL64(-2))) goto LA3;
		result = IL64(-2);
		goto BeforeRet;
	}
	LA3: ;
	{
		if (!(IL64(0) <= (*typ).size)) goto LA7;
		result = (*typ).size;
		(*a) = ((NI64) ((*typ).align));
		goto BeforeRet;
	}
	LA7: ;
	(*typ).size = IL64(-2);
	switch ((*typ).kind) {
	case ((NU8) 31):
	case ((NU8) 40):
	{
		result = ((NI64) (intsize_166615));
		(*a) = result;
	}
	break;
	case ((NU8) 32):
	case ((NU8) 41):
	case ((NU8) 1):
	case ((NU8) 2):
	{
		result = IL64(1);
		(*a) = result;
	}
	break;
	case ((NU8) 33):
	case ((NU8) 42):
	{
		result = IL64(2);
		(*a) = result;
	}
	break;
	case ((NU8) 34):
	case ((NU8) 43):
	case ((NU8) 37):
	{
		result = IL64(4);
		(*a) = result;
	}
	break;
	case ((NU8) 35):
	case ((NU8) 44):
	case ((NU8) 38):
	{
		result = IL64(8);
		(*a) = result;
	}
	break;
	case ((NU8) 39):
	{
		result = IL64(16);
		(*a) = result;
	}
	break;
	case ((NU8) 36):
	{
		result = ((NI64) (floatsize_166616));
		(*a) = result;
	}
	break;
	case ((NU8) 25):
	{
		{
			if (!((*typ).callconv == ((NU8) 8))) goto LA19;
			result = ((NI64) ((NI)(((NI) 2) * ptrsize_166617)));
		}
		goto LA17;
		LA19: ;
		{
			result = ((NI64) (ptrsize_166617));
		}
		LA17: ;
		(*a) = ((NI64) (ptrsize_166617));
	}
	break;
	case ((NU8) 5):
	case ((NU8) 29):
	case ((NU8) 28):
	case ((NU8) 24):
	case ((NU8) 21):
	case ((NU8) 22):
	case ((NU8) 23):
	case ((NU8) 27):
	case ((NU8) 45):
	{
		Ttype213828* base;
		base = lastson_216377(typ);
		{
			NIM_BOOL LOC25;
			NIM_BOOL LOC27;
			LOC25 = 0;
			LOC25 = (base == typ);
			if (LOC25) goto LA26;
			LOC27 = 0;
			LOC27 = ((*base).kind == ((NU8) 18));
			if (!(LOC27)) goto LA28;
			LOC27 = ((*base).size == IL64(-2));
			LA28: ;
			LOC25 = LOC27;
			LA26: ;
			if (!LOC25) goto LA29;
			result = IL64(-2);
		}
		goto LA23;
		LA29: ;
		{
			result = ((NI64) (ptrsize_166617));
		}
		LA23: ;
		(*a) = result;
	}
	break;
	case ((NU8) 16):
	case ((NU8) 4):
	{
		NI64 elemsize;
		NI64 LOC37;
		elemsize = computesizeaux_247057((*typ).sons->data[((NI) 1)], a);
		{
			if (!(elemsize < IL64(0))) goto LA35;
			result = elemsize;
			goto BeforeRet;
		}
		LA35: ;
		LOC37 = 0;
		LOC37 = lengthord_239007((*typ).sons->data[((NI) 0)]);
		result = (NI64)(LOC37 * elemsize);
	}
	break;
	case ((NU8) 14):
	{
		{
			NI64 LOC41;
			LOC41 = 0;
			LOC41 = firstord_239001(typ);
			if (!(LOC41 < IL64(0))) goto LA42;
			result = IL64(4);
		}
		goto LA39;
		LA42: ;
		{
			length = lastord_239004(typ);
			{
				if (!((NI64)(length + IL64(1)) < IL64(256))) goto LA47;
				result = IL64(1);
			}
			goto LA45;
			LA47: ;
			{
				if (!((NI64)(length + IL64(1)) < IL64(65536))) goto LA50;
				result = IL64(2);
			}
			goto LA45;
			LA50: ;
			{
				if (!((NI64)(length + IL64(1)) < IL64(4294967296))) goto LA53;
				result = IL64(4);
			}
			goto LA45;
			LA53: ;
			{
				result = IL64(8);
			}
			LA45: ;
		}
		LA39: ;
		(*a) = result;
	}
	break;
	case ((NU8) 19):
	{
		{
			if (!((*(*typ).sons->data[((NI) 0)]).kind == ((NU8) 12))) goto LA59;
			result = IL64(-1);
		}
		goto LA57;
		LA59: ;
		{
			length = lengthord_239007((*typ).sons->data[((NI) 0)]);
			{
				if (!(length <= IL64(8))) goto LA64;
				result = IL64(1);
			}
			goto LA62;
			LA64: ;
			{
				if (!(length <= IL64(16))) goto LA67;
				result = IL64(2);
			}
			goto LA62;
			LA67: ;
			{
				if (!(length <= IL64(32))) goto LA70;
				result = IL64(4);
			}
			goto LA62;
			LA70: ;
			{
				if (!(length <= IL64(64))) goto LA73;
				result = IL64(8);
			}
			goto LA62;
			LA73: ;
			{
				NI64 LOC76;
				NI64 LOC79;
				LOC76 = 0;
				LOC76 = align_247049(length, IL64(8));
				if (!(((NI) ((NI64)(LOC76 % IL64(8)))) == ((NI) 0))) goto LA77;
				LOC79 = 0;
				LOC79 = align_247049(length, IL64(8));
				result = (NI64)(LOC79 / IL64(8));
			}
			goto LA62;
			LA77: ;
			{
				NI64 LOC81;
				LOC81 = 0;
				LOC81 = align_247049(length, IL64(8));
				result = (NI64)((NI64)(LOC81 / IL64(8)) + IL64(1));
			}
			LA62: ;
		}
		LA57: ;
		(*a) = result;
	}
	break;
	case ((NU8) 20):
	{
		result = computesizeaux_247057((*typ).sons->data[((NI) 0)], a);
	}
	break;
	case ((NU8) 18):
	{
		result = IL64(0);
		maxalign = IL64(1);
		{
			NI i_247328;
			NI HEX3Atmp_247351;
			NI LOC85;
			NI res_247354;
			i_247328 = 0;
			HEX3Atmp_247351 = 0;
			LOC85 = 0;
			LOC85 = sonslen_216327(typ);
			HEX3Atmp_247351 = (NI)(LOC85 - ((NI) 1));
			res_247354 = ((NI) 0);
			{
				while (1) {
					NI64 LOC92;
					if (!(res_247354 <= HEX3Atmp_247351)) goto LA87;
					i_247328 = res_247354;
					res = computesizeaux_247057((*typ).sons->data[i_247328], a);
					{
						if (!(res < IL64(0))) goto LA90;
						result = res;
						goto BeforeRet;
					}
					LA90: ;
					maxalign = ((maxalign >= (*a)) ? maxalign : (*a));
					LOC92 = 0;
					LOC92 = align_247049(result, (*a));
					result = (NI64)(LOC92 + res);
					res_247354 += ((NI) 1);
				} LA87: ;
			}
		}
		result = align_247049(result, maxalign);
		(*a) = maxalign;
	}
	break;
	case ((NU8) 17):
	{
		{
			if (!!(((*typ).sons->data[((NI) 0)] == NIM_NIL))) goto LA96;
			result = computesizeaux_247057((*typ).sons->data[((NI) 0)], a);
			{
				if (!(result < IL64(0))) goto LA100;
				goto BeforeRet;
			}
			LA100: ;
			maxalign = (*a);
		}
		goto LA94;
		LA96: ;
		{
			NIM_BOOL LOC103;
			LOC103 = 0;
			LOC103 = isobjectwithtypefieldpredicate_240297(typ);
			if (!LOC103) goto LA104;
			result = ((NI64) (intsize_166615));
			maxalign = result;
		}
		goto LA94;
		LA104: ;
		{
			result = IL64(0);
			maxalign = IL64(1);
		}
		LA94: ;
		curroffset = result;
		result = computerecsizeaux_247062((*typ).n, a, (&curroffset));
		{
			if (!(result < IL64(0))) goto LA109;
			goto BeforeRet;
		}
		LA109: ;
		{
			if (!((*a) < maxalign)) goto LA113;
			(*a) = maxalign;
		}
		LA113: ;
		result = align_247049(result, (*a));
	}
	break;
	case ((NU8) 11):
	case ((NU8) 13):
	case ((NU8) 10):
	case ((NU8) 47):
	case ((NU8) 46):
	case ((NU8) 49):
	{
		Ttype213828* LOC116;
		LOC116 = 0;
		LOC116 = lastson_216377(typ);
		result = computesizeaux_247057(LOC116, a);
	}
	break;
	case ((NU8) 8):
	{
		Ttype213828* LOC118;
		LOC118 = 0;
		LOC118 = base_239021(typ);
		result = computesizeaux_247057(LOC118, a);
	}
	break;
	case ((NU8) 30):
	{
		result = IL64(-2);
		goto BeforeRet;
	}
	break;
	default:
	{
		result = IL64(-1);
	}
	break;
	}
	(*typ).size = result;
	(*typ).align = ((NI16) ((*a)));
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NI64, computesize_239121)(Ttype213828* typ) {
	NI64 result;
	NI64 a;
	result = 0;
	a = IL64(1);
	result = computesizeaux_247057(typ, (&a));
	return result;
}

N_NIMCALL(NI64, getsize_239124)(Ttype213828* typ) {
	NI64 result;
	result = 0;
	result = computesize_239121(typ);
	{
		NimStringDesc* LOC5;
		if (!(result < IL64(0))) goto LA3;
		LOC5 = 0;
		LOC5 = rawNewString(reprEnum((*typ).kind, (&NTI213241))->Sup.len + 9);
appendString(LOC5, ((NimStringDesc*) &TMP2966));
appendString(LOC5, reprEnum((*typ).kind, (&NTI213241)));
		internalerror_186113(LOC5);
	}
	LA3: ;
	return result;
}

N_NIMCALL(NIM_BOOL, sametypeornil_243638)(Ttype213828* a, Ttype213828* b, NU8 flags) {
	NIM_BOOL result;
	result = 0;
	{
		if (!(a == b)) goto LA3;
		result = NIM_TRUE;
	}
	goto LA1;
	LA3: ;
	{
		{
			NIM_BOOL LOC8;
			LOC8 = 0;
			LOC8 = (a == NIM_NIL);
			if (LOC8) goto LA9;
			LOC8 = (b == NIM_NIL);
			LA9: ;
			if (!LOC8) goto LA10;
			result = NIM_FALSE;
		}
		goto LA6;
		LA10: ;
		{
			result = sametype_243628(a, b, flags);
		}
		LA6: ;
	}
	LA1: ;
	return result;
}

N_NIMCALL(NIM_BOOL, enumhasholes_239060)(Ttype213828* t) {
	NIM_BOOL result;
	Ttype213828* b;
	NIM_BOOL LOC3;
	result = 0;
	b = t;
	{
		while (1) {
			if (!((IL64(211106233583616) &((NU64)1<<((NU)((*b).kind)&63U)))!=0)) goto LA2;
			b = (*b).sons->data[((NI) 0)];
		} LA2: ;
	}
	LOC3 = 0;
	LOC3 = ((*b).kind == ((NU8) 14));
	if (!(LOC3)) goto LA4;
	LOC3 = (((*b).flags &(1U<<((NU)(((NU8) 5))&31U)))!=0);
	LA4: ;
	result = LOC3;
	return result;
}

N_NIMCALL(NU8, equalparam_243681)(Tsym213822* a, Tsym213822* b) {
	NU8 result;
	result = 0;
	{
		NIM_BOOL LOC3;
		LOC3 = 0;
		LOC3 = sametypeornil_243638((*a).typ, (*b).typ, 4);
		if (!(LOC3)) goto LA4;
		LOC3 = exprstructuralequivalent_238099((*a).constraint, (*b).constraint, NIM_FALSE);
		LA4: ;
		if (!LOC3) goto LA5;
		{
			if (!((*a).ast == (*b).ast)) goto LA9;
			result = ((NU8) 1);
		}
		goto LA7;
		LA9: ;
		{
			NIM_BOOL LOC12;
			LOC12 = 0;
			LOC12 = !(((*a).ast == NIM_NIL));
			if (!(LOC12)) goto LA13;
			LOC12 = !(((*b).ast == NIM_NIL));
			LA13: ;
			if (!LOC12) goto LA14;
			{
				NIM_BOOL LOC18;
				LOC18 = 0;
				LOC18 = exprstructuralequivalent_238099((*a).ast, (*b).ast, NIM_FALSE);
				if (!LOC18) goto LA19;
				result = ((NU8) 1);
			}
			goto LA16;
			LA19: ;
			{
				result = ((NU8) 2);
			}
			LA16: ;
		}
		goto LA7;
		LA14: ;
		{
			if (!!(((*a).ast == NIM_NIL))) goto LA23;
			result = ((NU8) 1);
		}
		goto LA7;
		LA23: ;
		{
			if (!!(((*b).ast == NIM_NIL))) goto LA26;
			result = ((NU8) 2);
		}
		goto LA7;
		LA26: ;
		LA7: ;
	}
	goto LA1;
	LA5: ;
	{
		result = ((NU8) 0);
	}
	LA1: ;
	return result;
}

N_NIMCALL(NU8, equalparams_239053)(Tnode213790* a, Tnode213790* b) {
	NU8 result;
	NI length;
{	result = 0;
	result = ((NU8) 1);
	length = sonslen_216351(a);
	{
		NI LOC3;
		LOC3 = 0;
		LOC3 = sonslen_216351(b);
		if (!!((length == LOC3))) goto LA4;
		result = ((NU8) 0);
	}
	goto LA1;
	LA4: ;
	{
		{
			NI i_243820;
			NI HEX3Atmp_244033;
			NI res_244036;
			i_243820 = 0;
			HEX3Atmp_244033 = 0;
			HEX3Atmp_244033 = (NI)(length - ((NI) 1));
			res_244036 = ((NI) 1);
			{
				while (1) {
					Tsym213822* m;
					Tsym213822* n;
					NU8 LOC10;
					if (!(res_244036 <= HEX3Atmp_244033)) goto LA9;
					i_243820 = res_244036;
					m = (*(*a).kindU.S6.sons->data[i_243820]).kindU.S4.sym;
					n = (*(*b).kindU.S6.sons->data[i_243820]).kindU.S4.sym;
					LOC10 = 0;
					LOC10 = equalparam_243681(m, n);
					switch (LOC10) {
					case ((NU8) 0):
					{
						result = ((NU8) 0);
						goto BeforeRet;
					}
					break;
					case ((NU8) 1):
					{
					}
					break;
					case ((NU8) 2):
					{
						result = ((NU8) 2);
					}
					break;
					}
					{
						if (!!(((*(*m).name).Sup.id == (*(*n).name).Sup.id))) goto LA16;
						result = ((NU8) 0);
						goto BeforeRet;
					}
					LA16: ;
					res_244036 += ((NI) 1);
				} LA9: ;
			}
		}
		{
			NIM_BOOL LOC20;
			LOC20 = 0;
			LOC20 = sametypeornil_243638((*(*a).kindU.S6.sons->data[((NI) 0)]).typ, (*(*b).kindU.S6.sons->data[((NI) 0)]).typ, 4);
			if (!!(LOC20)) goto LA21;
			{
				NIM_BOOL LOC25;
				LOC25 = 0;
				LOC25 = ((*(*a).kindU.S6.sons->data[((NI) 0)]).typ == NIM_NIL);
				if (LOC25) goto LA26;
				LOC25 = ((*(*b).kindU.S6.sons->data[((NI) 0)]).typ == NIM_NIL);
				LA26: ;
				if (!LOC25) goto LA27;
				result = ((NU8) 0);
			}
			goto LA23;
			LA27: ;
			{
				result = ((NU8) 2);
			}
			LA23: ;
		}
		LA21: ;
	}
	LA1: ;
	}BeforeRet: ;
	return result;
}

N_NIMCALL(Ttype213828*, typeallowednode_246246)(Intset210035* marker, Tnode213790* n, NU8 kind, NU8 flags) {
	Ttype213828* result;
{	result = 0;
	{
		if (!!((n == NIM_NIL))) goto LA3;
		result = typeallowedaux_246237(marker, (*n).typ, kind, flags);
		{
			if (!(result == NIM_NIL)) goto LA7;
			switch ((*n).kind) {
			case ((NU8) 0) ... ((NU8) 23):
			{
			}
			break;
			default:
			{
				{
					NI i_246291;
					NI HEX3Atmp_246327;
					NI LOC12;
					NI res_246330;
					i_246291 = 0;
					HEX3Atmp_246327 = 0;
					LOC12 = 0;
					LOC12 = sonslen_216351(n);
					HEX3Atmp_246327 = (NI)(LOC12 - ((NI) 1));
					res_246330 = ((NI) 0);
					{
						while (1) {
							Tnode213790* it;
							if (!(res_246330 <= HEX3Atmp_246327)) goto LA14;
							i_246291 = res_246330;
							it = (*n).kindU.S6.sons->data[i_246291];
							{
								NIM_BOOL LOC17;
								LOC17 = 0;
								LOC17 = ((*it).kind == ((NU8) 139));
								if (!(LOC17)) goto LA18;
								LOC17 = ((5120 &(1U<<((NU)(kind)&31U)))!=0);
								LA18: ;
								if (!LOC17) goto LA19;
								result = (*n).typ;
								goto BeforeRet;
							}
							LA19: ;
							result = typeallowednode_246246(marker, it, kind, flags);
							{
								if (!!((result == NIM_NIL))) goto LA23;
								goto LA11;
							}
							LA23: ;
							res_246330 += ((NI) 1);
						} LA14: ;
					}
				} LA11: ;
			}
			break;
			}
		}
		LA7: ;
	}
	LA3: ;
	}BeforeRet: ;
	return result;
}

N_NIMCALL(Ttype213828*, typeallowedaux_246237)(Intset210035* marker, Ttype213828* typ, NU8 kind, NU8 flags_246245) {
	Ttype213828* result;
	Ttype213828* t;
{	result = 0;
	result = NIM_NIL;
	{
		if (!(typ == NIM_NIL)) goto LA3;
		goto BeforeRet;
	}
	LA3: ;
	{
		NIM_BOOL LOC7;
		LOC7 = 0;
		LOC7 = containsorincl_210862(marker, (*typ).Sup.id);
		if (!LOC7) goto LA8;
		goto BeforeRet;
	}
	LA8: ;
	t = skiptypes_217113(typ, IL64(211106232576000));
	switch ((*t).kind) {
	case ((NU8) 23):
	{
		Ttype213828* t2;
		{
			if (!((5120 &(1U<<((NU)(kind)&31U)))!=0)) goto LA13;
			result = t;
			goto BeforeRet;
		}
		LA13: ;
		t2 = skiptypes_217113((*t).sons->data[((NI) 0)], IL64(211106232576000));
		switch ((*t2).kind) {
		case ((NU8) 23):
		{
			{
				if (!!(((flags_246245 &(1U<<((NU)(((NU8) 1))&7U)))!=0))) goto LA18;
				result = t2;
			}
			LA18: ;
		}
		break;
		case ((NU8) 27):
		{
			{
				if (!!((kind == ((NU8) 3)))) goto LA23;
				result = t;
			}
			goto LA21;
			LA23: ;
			{
				result = typeallowedaux_246237(marker, t2, kind, flags_246245);
			}
			LA21: ;
		}
		break;
		default:
		{
			{
				if (!!(((2056 &(1U<<((NU)(kind)&31U)))!=0))) goto LA29;
				result = t;
			}
			goto LA27;
			LA29: ;
			{
				result = typeallowedaux_246237(marker, t2, kind, flags_246245);
			}
			LA27: ;
		}
		break;
		}
	}
	break;
	case ((NU8) 25):
	{
		{
			NIM_BOOL LOC35;
			LOC35 = 0;
			LOC35 = (kind == ((NU8) 10));
			if (!(LOC35)) goto LA36;
			LOC35 = ((*t).callconv == ((NU8) 8));
			LA36: ;
			if (!LOC35) goto LA37;
			result = t;
			goto BeforeRet;
		}
		LA37: ;
		{
			NI i_246711;
			NI HEX3Atmp_247017;
			NI LOC40;
			NI res_247020;
			i_246711 = 0;
			HEX3Atmp_247017 = 0;
			LOC40 = 0;
			LOC40 = sonslen_216327(t);
			HEX3Atmp_247017 = (NI)(LOC40 - ((NI) 1));
			res_247020 = ((NI) 1);
			{
				while (1) {
					if (!(res_247020 <= HEX3Atmp_247017)) goto LA42;
					i_246711 = res_247020;
					result = typeallowedaux_246237(marker, (*t).sons->data[i_246711], ((NU8) 3), flags_246245);
					{
						if (!!((result == NIM_NIL))) goto LA45;
						goto LA39;
					}
					LA45: ;
					res_247020 += ((NI) 1);
				} LA42: ;
			}
		} LA39: ;
		{
			NIM_BOOL LOC49;
			LOC49 = 0;
			LOC49 = result == 0;
			if (!(LOC49)) goto LA50;
			LOC49 = !(((*t).sons->data[((NI) 0)] == NIM_NIL));
			LA50: ;
			if (!LOC49) goto LA51;
			result = typeallowedaux_246237(marker, (*t).sons->data[((NI) 0)], ((NU8) 11), flags_246245);
		}
		LA51: ;
	}
	break;
	case ((NU8) 8):
	{
		result = NIM_NIL;
	}
	break;
	case ((NU8) 6):
	case ((NU8) 7):
	case ((NU8) 59):
	{
		{
			if (!!(((2056 &(1U<<((NU)(kind)&31U)))!=0))) goto LA57;
			result = t;
		}
		LA57: ;
	}
	break;
	case ((NU8) 3):
	{
		{
			if (!!(((flags_246245 &(1U<<((NU)(((NU8) 0))&7U)))!=0))) goto LA62;
			result = t;
		}
		LA62: ;
	}
	break;
	case ((NU8) 51):
	case ((NU8) 54):
	case ((NU8) 52):
	case ((NU8) 53):
	case ((NU8) 55):
	case ((NU8) 56):
	case ((NU8) 57):
	case ((NU8) 58):
	{
		{
			NIM_BOOL LOC67;
			LOC67 = 0;
			LOC67 = (((*t).flags &(1U<<((NU)(((NU8) 23))&31U)))!=0);
			if (LOC67) goto LA68;
			LOC67 = !(((flags_246245 &(1U<<((NU)(((NU8) 0))&7U)))!=0));
			LA68: ;
			if (!!(LOC67)) goto LA69;
			result = t;
		}
		LA69: ;
	}
	break;
	case ((NU8) 10):
	case ((NU8) 12):
	case ((NU8) 9):
	case ((NU8) 0):
	case ((NU8) 30):
	case ((NU8) 60):
	case ((NU8) 61):
	{
		result = t;
	}
	break;
	case ((NU8) 5):
	{
		{
			if (!!((kind == ((NU8) 10)))) goto LA75;
			result = t;
		}
		LA75: ;
	}
	break;
	case ((NU8) 28):
	case ((NU8) 1):
	case ((NU8) 2):
	case ((NU8) 14):
	case ((NU8) 31) ... ((NU8) 45):
	case ((NU8) 29):
	case ((NU8) 26):
	{
		result = NIM_NIL;
	}
	break;
	case ((NU8) 15):
	{
		{
			if (!!((kind == ((NU8) 3)))) goto LA81;
			result = t;
		}
		LA81: ;
	}
	break;
	case ((NU8) 11):
	case ((NU8) 13):
	{
		Ttype213828* LOC84;
		LOC84 = 0;
		LOC84 = lastson_216377(t);
		result = typeallowedaux_246237(marker, LOC84, kind, flags_246245);
	}
	break;
	case ((NU8) 20):
	{
		{
			Ttype213828* LOC88;
			LOC88 = 0;
			LOC88 = skiptypes_217113((*t).sons->data[((NI) 0)], IL64(211106232576000));
			if (!!(((IL64(16490526949380) &((NU64)1<<((NU)((*LOC88).kind)&63U)))!=0))) goto LA89;
			result = t;
		}
		LA89: ;
	}
	break;
	case ((NU8) 27):
	case ((NU8) 48):
	{
		{
			if (!!((kind == ((NU8) 3)))) goto LA94;
			result = t;
		}
		goto LA92;
		LA94: ;
		{
			result = typeallowedaux_246237(marker, (*t).sons->data[((NI) 0)], ((NU8) 8), flags_246245);
		}
		LA92: ;
	}
	break;
	case ((NU8) 24):
	{
		{
			if (!!(((*(*t).sons->data[((NI) 0)]).kind == ((NU8) 3)))) goto LA100;
			result = typeallowedaux_246237(marker, (*t).sons->data[((NI) 0)], ((NU8) 8), (flags_246245 | 2));
		}
		LA100: ;
	}
	break;
	case ((NU8) 16):
	{
		{
			if (!!(((*(*t).sons->data[((NI) 1)]).kind == ((NU8) 3)))) goto LA105;
			result = typeallowedaux_246237(marker, (*t).sons->data[((NI) 1)], ((NU8) 8), flags_246245);
		}
		LA105: ;
	}
	break;
	case ((NU8) 22):
	{
		{
			if (!(kind == ((NU8) 10))) goto LA110;
			result = t;
		}
		goto LA108;
		LA110: ;
		{
			Ttype213828* LOC113;
			LOC113 = 0;
			LOC113 = lastson_216377(t);
			result = typeallowedaux_246237(marker, LOC113, ((NU8) 8), (flags_246245 | 2));
		}
		LA108: ;
	}
	break;
	case ((NU8) 21):
	{
		Ttype213828* LOC115;
		LOC115 = 0;
		LOC115 = lastson_216377(t);
		result = typeallowedaux_246237(marker, LOC115, ((NU8) 8), (flags_246245 | 2));
	}
	break;
	case ((NU8) 4):
	case ((NU8) 19):
	case ((NU8) 46):
	case ((NU8) 47):
	case ((NU8) 49):
	{
		{
			NI i_246913;
			NI HEX3Atmp_247025;
			NI LOC118;
			NI res_247028;
			i_246913 = 0;
			HEX3Atmp_247025 = 0;
			LOC118 = 0;
			LOC118 = sonslen_216327(t);
			HEX3Atmp_247025 = (NI)(LOC118 - ((NI) 1));
			res_247028 = ((NI) 0);
			{
				while (1) {
					if (!(res_247028 <= HEX3Atmp_247025)) goto LA120;
					i_246913 = res_247028;
					result = typeallowedaux_246237(marker, (*t).sons->data[i_246913], kind, flags_246245);
					{
						if (!!((result == NIM_NIL))) goto LA123;
						goto LA117;
					}
					LA123: ;
					res_247028 += ((NI) 1);
				} LA120: ;
			}
		} LA117: ;
	}
	break;
	case ((NU8) 17):
	case ((NU8) 18):
	{
		NU8 flags;
		{
			NIM_BOOL LOC128;
			NIM_BOOL LOC129;
			LOC128 = 0;
			LOC129 = 0;
			LOC129 = ((5120 &(1U<<((NU)(kind)&31U)))!=0);
			if (!(LOC129)) goto LA130;
			LOC129 = ((*t).kind == ((NU8) 17));
			LA130: ;
			LOC128 = LOC129;
			if (!(LOC128)) goto LA131;
			LOC128 = !(((*t).sons->data[((NI) 0)] == NIM_NIL));
			LA131: ;
			if (!LOC128) goto LA132;
			result = t;
			goto BeforeRet;
		}
		LA132: ;
		flags = (flags_246245 | 1);
		{
			NI i_246983;
			NI HEX3Atmp_247033;
			NI LOC135;
			NI res_247036;
			i_246983 = 0;
			HEX3Atmp_247033 = 0;
			LOC135 = 0;
			LOC135 = sonslen_216327(t);
			HEX3Atmp_247033 = (NI)(LOC135 - ((NI) 1));
			res_247036 = ((NI) 0);
			{
				while (1) {
					if (!(res_247036 <= HEX3Atmp_247033)) goto LA137;
					i_246983 = res_247036;
					result = typeallowedaux_246237(marker, (*t).sons->data[i_246983], kind, flags);
					{
						if (!!((result == NIM_NIL))) goto LA140;
						goto LA134;
					}
					LA140: ;
					res_247036 += ((NI) 1);
				} LA137: ;
			}
		} LA134: ;
		{
			NIM_BOOL LOC144;
			LOC144 = 0;
			LOC144 = result == 0;
			if (!(LOC144)) goto LA145;
			LOC144 = !(((*t).n == NIM_NIL));
			LA145: ;
			if (!LOC144) goto LA146;
			result = typeallowednode_246246(marker, (*t).n, kind, flags);
		}
		LA146: ;
	}
	break;
	case ((NU8) 50):
	{
		result = NIM_NIL;
	}
	break;
	}
	}BeforeRet: ;
	return result;
}

N_NIMCALL(Ttype213828*, typeallowed_247040)(Ttype213828* t, NU8 kind) {
	Ttype213828* result;
	Intset210035 marker;
	result = 0;
	memset((void*)(&marker), 0, sizeof(marker));
	chckNil((void*)(&marker));
	memset((void*)(&marker), 0, sizeof(marker));
	initintset_210885((&marker));
	result = typeallowedaux_246237((&marker), t, kind, 0);
	return result;
}

static N_INLINE(Cell47705*, usrtocell_51640)(void* usr) {
	Cell47705* result;
	result = 0;
	result = ((Cell47705*) ((NI)((NU64)(((NI) (usr))) - (NU64)(((NI)sizeof(Cell47705))))));
	return result;
}

static N_INLINE(void, rtladdzct_53201)(Cell47705* c) {
	addzct_51617((&gch_50059.zct), c);
}

static N_INLINE(void, asgnRefNoCycle)(void** dest, void* src) {
	{
		Cell47705* c;
		if (!!((src == NIM_NIL))) goto LA3;
		c = usrtocell_51640(src);
		(*c).refcount += ((NI) 8);
	}
	LA3: ;
	{
		Cell47705* c;
		if (!!(((*dest) == NIM_NIL))) goto LA7;
		c = usrtocell_51640((*dest));
		{
			(*c).refcount -= ((NI) 8);
			if (!((NU64)((*c).refcount) < (NU64)(((NI) 8)))) goto LA11;
			rtladdzct_53201(c);
		}
		LA11: ;
	}
	LA7: ;
	(*dest) = src;
}

N_NIMCALL(Ttype213828*, taketype_248135)(Ttype213828* formal, Ttype213828* arg) {
	Ttype213828* result;
	result = 0;
	{
		if (!((*arg).kind == ((NU8) 5))) goto LA3;
		result = formal;
	}
	goto LA1;
	LA3: ;
	{
		NIM_BOOL LOC6;
		Ttype213828* a;
		Ttype213828* LOC10;
		LOC6 = 0;
		LOC6 = ((IL64(281475127705600) &((NU64)1<<((NU)((*formal).kind)&63U)))!=0);
		if (!(LOC6)) goto LA7;
		LOC6 = isemptycontainer_248113(arg);
		LA7: ;
		if (!LOC6) goto LA8;
		LOC10 = 0;
		LOC10 = skiptypes_217113(arg, 2048);
		a = copytype_216470(LOC10, (*arg).owner, NIM_FALSE);
		asgnRefNoCycle((void**) (&(*a).sons->data[((65552 &((NU64)1<<((NU)((*arg).kind)&63U)))!=0)]), (*formal).sons->data[((NI) 0)]);
		result = a;
	}
	goto LA1;
	LA8: ;
	{
		NIM_BOOL LOC12;
		LOC12 = 0;
		LOC12 = ((786432 &((NU64)1<<((NU)((*formal).kind)&63U)))!=0);
		if (!(LOC12)) goto LA13;
		LOC12 = ((*arg).kind == (*formal).kind);
		LA13: ;
		if (!LOC12) goto LA14;
		result = formal;
	}
	goto LA1;
	LA14: ;
	{
		result = arg;
	}
	LA1: ;
	return result;
}

N_NIMCALL(Ttype213828*, baseofdistinct_247496)(Ttype213828* t) {
	Ttype213828* result;
	result = 0;
	{
		if (!((*t).kind == ((NU8) 13))) goto LA3;
		result = (*t).sons->data[((NI) 0)];
	}
	goto LA1;
	LA3: ;
	{
		Ttype213828* parent;
		Ttype213828* it;
		result = copytype_216470(t, (*t).owner, NIM_FALSE);
		parent = NIM_NIL;
		it = result;
		{
			while (1) {
				if (!((6291456 &((NU64)1<<((NU)((*it).kind)&63U)))!=0)) goto LA7;
				parent = it;
				it = lastson_216377(it);
			} LA7: ;
		}
		{
			if (!((*it).kind == ((NU8) 13))) goto LA10;
			{
				NimStringDesc* LOC16;
				if (!!(!((parent == NIM_NIL)))) goto LA14;
				LOC16 = 0;
				LOC16 = HEX24_186183(TMP3507);
				internalerror_186113(LOC16);
			}
			LA14: ;
			asgnRefNoCycle((void**) (&(*parent).sons->data[((NI) 0)]), (*it).sons->data[((NI) 0)]);
		}
		LA10: ;
	}
	LA1: ;
	return result;
}

N_NIMCALL(Tnode213790*, skiphiddensubconv_248201)(Tnode213790* n) {
	Tnode213790* result;
	result = 0;
	{
		Ttype213828* formal;
		Ttype213828* arg;
		Ttype213828* dest;
		if (!((*n).kind == ((NU8) 59))) goto LA3;
		formal = (*n).typ;
		result = (*n).kindU.S6.sons->data[((NI) 1)];
		arg = (*result).typ;
		dest = taketype_248135(formal, arg);
		{
			NIM_BOOL LOC7;
			LOC7 = 0;
			LOC7 = (dest == arg);
			if (!(LOC7)) goto LA8;
			LOC7 = !(((*formal).kind == ((NU8) 6)));
			LA8: ;
			if (!LOC7) goto LA9;
			result = n;
		}
		goto LA5;
		LA9: ;
		{
			result = copytree_217822(result);
			asgnRefNoCycle((void**) (&(*result).typ), dest);
		}
		LA5: ;
	}
	goto LA1;
	LA3: ;
	{
		result = n;
	}
	LA1: ;
	return result;
}

N_NIMCALL(Tnode213790*, skipconvtaketype_248108)(Tnode213790* n) {
	Tnode213790* result;
	result = 0;
	result = skipconv_248082(n);
	asgnRefNoCycle((void**) (&(*result).typ), (*n).typ);
	return result;
}

N_NIMCALL(NIM_BOOL, searchtypenodeforaux_239973)(Tnode213790* n, Ttypepredicate239029 p, Intset210035* marker) {
	NIM_BOOL result;
{	result = 0;
	result = NIM_FALSE;
	switch ((*n).kind) {
	case ((NU8) 138):
	{
		{
			NI i_239991;
			NI HEX3Atmp_240219;
			NI LOC3;
			NI res_240222;
			i_239991 = 0;
			HEX3Atmp_240219 = 0;
			LOC3 = 0;
			LOC3 = sonslen_216351(n);
			HEX3Atmp_240219 = (NI)(LOC3 - ((NI) 1));
			res_240222 = ((NI) 0);
			{
				while (1) {
					if (!(res_240222 <= HEX3Atmp_240219)) goto LA5;
					i_239991 = res_240222;
					result = searchtypenodeforaux_239973((*n).kindU.S6.sons->data[i_239991], p, marker);
					{
						if (!result) goto LA8;
						goto BeforeRet;
					}
					LA8: ;
					res_240222 += ((NI) 1);
				} LA5: ;
			}
		}
	}
	break;
	case ((NU8) 139):
	{
		result = searchtypenodeforaux_239973((*n).kindU.S6.sons->data[((NI) 0)], p, marker);
		{
			if (!result) goto LA13;
			goto BeforeRet;
		}
		LA13: ;
		{
			NI i_240213;
			NI HEX3Atmp_240227;
			NI LOC16;
			NI res_240230;
			i_240213 = 0;
			HEX3Atmp_240227 = 0;
			LOC16 = 0;
			LOC16 = sonslen_216351(n);
			HEX3Atmp_240227 = (NI)(LOC16 - ((NI) 1));
			res_240230 = ((NI) 1);
			{
				while (1) {
					if (!(res_240230 <= HEX3Atmp_240227)) goto LA18;
					i_240213 = res_240230;
					switch ((*(*n).kindU.S6.sons->data[i_240213]).kind) {
					case ((NU8) 85):
					case ((NU8) 88):
					{
						Tnode213790* LOC20;
						LOC20 = 0;
						LOC20 = lastson_216364((*n).kindU.S6.sons->data[i_240213]);
						result = searchtypenodeforaux_239973(LOC20, p, marker);
						{
							if (!result) goto LA23;
							goto BeforeRet;
						}
						LA23: ;
					}
					break;
					default:
					{
						internalerror_186113(((NimStringDesc*) &TMP3576));
					}
					break;
					}
					res_240230 += ((NI) 1);
				} LA18: ;
			}
		}
	}
	break;
	case ((NU8) 3):
	{
		result = searchtypeforaux_239967((*(*n).kindU.S4.sym).typ, p, marker);
	}
	break;
	default:
	{
		internalerror_186100((*n).info, ((NimStringDesc*) &TMP3577));
	}
	break;
	}
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NIM_BOOL, searchtypeforaux_239967)(Ttype213828* t, Ttypepredicate239029 predicate, Intset210035* marker) {
	NIM_BOOL result;
{	result = 0;
	result = NIM_FALSE;
	{
		if (!(t == NIM_NIL)) goto LA3;
		goto BeforeRet;
	}
	LA3: ;
	{
		NIM_BOOL LOC7;
		LOC7 = 0;
		LOC7 = containsorincl_210862(marker, (*t).Sup.id);
		if (!LOC7) goto LA8;
		goto BeforeRet;
	}
	LA8: ;
	result = predicate(t);
	{
		if (!result) goto LA12;
		goto BeforeRet;
	}
	LA12: ;
	switch ((*t).kind) {
	case ((NU8) 17):
	{
		result = searchtypeforaux_239967((*t).sons->data[((NI) 0)], predicate, marker);
		{
			if (!!(result)) goto LA17;
			result = searchtypenodeforaux_239973((*t).n, predicate, marker);
		}
		LA17: ;
	}
	break;
	case ((NU8) 11):
	case ((NU8) 13):
	{
		Ttype213828* LOC20;
		LOC20 = 0;
		LOC20 = lastson_216377(t);
		result = searchtypeforaux_239967(LOC20, predicate, marker);
	}
	break;
	case ((NU8) 16):
	case ((NU8) 4):
	case ((NU8) 19):
	case ((NU8) 18):
	{
		{
			NI i_240264;
			NI HEX3Atmp_240266;
			NI LOC23;
			NI res_240269;
			i_240264 = 0;
			HEX3Atmp_240266 = 0;
			LOC23 = 0;
			LOC23 = sonslen_216327(t);
			HEX3Atmp_240266 = (NI)(LOC23 - ((NI) 1));
			res_240269 = ((NI) 0);
			{
				while (1) {
					if (!(res_240269 <= HEX3Atmp_240266)) goto LA25;
					i_240264 = res_240269;
					result = searchtypeforaux_239967((*t).sons->data[i_240264], predicate, marker);
					{
						if (!result) goto LA28;
						goto BeforeRet;
					}
					LA28: ;
					res_240269 += ((NI) 1);
				} LA25: ;
			}
		}
	}
	break;
	default:
	{
	}
	break;
	}
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NIM_BOOL, searchtypefor_240273)(Ttype213828* t, Ttypepredicate239029 predicate) {
	NIM_BOOL result;
	Intset210035 marker;
	result = 0;
	memset((void*)(&marker), 0, sizeof(marker));
	chckNil((void*)(&marker));
	memset((void*)(&marker), 0, sizeof(marker));
	initintset_210885((&marker));
	result = searchtypeforaux_239967(t, predicate, (&marker));
	return result;
}

N_NIMCALL(NIM_BOOL, isgcref_240486)(Ttype213828* t) {
	NIM_BOOL result;
	NIM_BOOL LOC1;
	NIM_BOOL LOC3;
	result = 0;
	LOC1 = 0;
	LOC1 = ((289406976 &((NU64)1<<((NU)((*t).kind)&63U)))!=0);
	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(NIM_BOOL, containsgarbagecollectedref_239106)(Ttype213828* typ) {
	NIM_BOOL result;
	result = 0;
	result = searchtypefor_240273(typ, isgcref_240486);
	return result;
}

N_NIMCALL(Ttype213828*, commonsuperclass_245850)(Ttype213828* a, Ttype213828* b) {
	Ttype213828* result;
	Ttype213828* x;
	Intset210035 ancestors;
	Ttype213828* y;
{	result = 0;
	{
		NIM_BOOL LOC3;
		LOC3 = 0;
		LOC3 = sameobjecttypes_244344(a, b);
		if (!LOC3) goto LA4;
		result = a;
		goto BeforeRet;
	}
	LA4: ;
	x = a;
	memset((void*)(&ancestors), 0, sizeof(ancestors));
	chckNil((void*)(&ancestors));
	memset((void*)(&ancestors), 0, sizeof(ancestors));
	initintset_210885((&ancestors));
	{
		while (1) {
			if (!!((x == NIM_NIL))) goto LA7;
			x = skiptypes_217113(x, IL64(211106247215360));
			incl_210832((&ancestors), (*x).Sup.id);
			x = (*x).sons->data[((NI) 0)];
		} LA7: ;
	}
	y = b;
	{
		while (1) {
			if (!!((y == NIM_NIL))) goto LA9;
			y = skiptypes_217113(y, IL64(211106247215360));
			{
				NIM_BOOL LOC12;
				LOC12 = 0;
				LOC12 = contains_210811((&ancestors), (*y).Sup.id);
				if (!LOC12) goto LA13;
				result = y;
				goto BeforeRet;
			}
			LA13: ;
			y = (*y).sons->data[((NI) 0)];
		} LA9: ;
	}
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NIM_BOOL, samebackendtype_245387)(Ttype213828* x, Ttype213828* y) {
	NIM_BOOL result;
	Tsametypeclosure243429 c;
	result = 0;
	memset((void*)(&c), 0, sizeof(c));
	chckNil((void*)(&c));
	memset((void*)(&c), 0, sizeof(c));
	initsametypeclosure_243448((&c));
	c.flags |= ((NU8)1)<<((((NU8) 0))%(sizeof(NU8)*8));
	result = sametypeaux_243580(x, y, (&c));
	return result;
}

N_NIMCALL(NIM_BOOL, ispureobject_239127)(Ttype213828* typ) {
	NIM_BOOL result;
	Ttype213828* t;
	NIM_BOOL LOC5;
	result = 0;
	t = typ;
	{
		while (1) {
			NIM_BOOL LOC3;
			LOC3 = 0;
			LOC3 = ((*t).kind == ((NU8) 17));
			if (!(LOC3)) goto LA4;
			LOC3 = !(((*t).sons->data[((NI) 0)] == NIM_NIL));
			LA4: ;
			if (!LOC3) goto LA2;
			t = (*t).sons->data[((NI) 0)];
		} LA2: ;
	}
	LOC5 = 0;
	LOC5 = !(((*t).sym == NIM_NIL));
	if (!(LOC5)) goto LA6;
	LOC5 = (((*(*t).sym).flags &(1U<<((NU)(((NU8) 9))&31U)))!=0);
	LA6: ;
	result = LOC5;
	return result;
}

N_NIMCALL(NIM_BOOL, canformacyclenode_240582)(Intset210035* marker, Tnode213790* n, NI startid) {
	NIM_BOOL result;
{	result = 0;
	result = NIM_FALSE;
	{
		if (!!((n == NIM_NIL))) goto LA3;
		result = canformacycleaux_240576(marker, (*n).typ, startid);
		{
			if (!!(result)) goto LA7;
			switch ((*n).kind) {
			case ((NU8) 0) ... ((NU8) 23):
			{
			}
			break;
			default:
			{
				{
					NI i_240612;
					NI HEX3Atmp_240615;
					NI LOC12;
					NI res_240618;
					i_240612 = 0;
					HEX3Atmp_240615 = 0;
					LOC12 = 0;
					LOC12 = sonslen_216351(n);
					HEX3Atmp_240615 = (NI)(LOC12 - ((NI) 1));
					res_240618 = ((NI) 0);
					{
						while (1) {
							if (!(res_240618 <= HEX3Atmp_240615)) goto LA14;
							i_240612 = res_240618;
							result = canformacyclenode_240582(marker, (*n).kindU.S6.sons->data[i_240612], startid);
							{
								if (!result) goto LA17;
								goto BeforeRet;
							}
							LA17: ;
							res_240618 += ((NI) 1);
						} LA14: ;
					}
				}
			}
			break;
			}
		}
		LA7: ;
	}
	LA3: ;
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NIM_BOOL, canformacycleaux_240576)(Intset210035* marker, Ttype213828* typ, NI startid) {
	NIM_BOOL result;
	Ttype213828* t;
{	result = 0;
	result = NIM_FALSE;
	{
		if (!(typ == NIM_NIL)) goto LA3;
		goto BeforeRet;
	}
	LA3: ;
	{
		if (!(((*typ).flags &(1U<<((NU)(((NU8) 4))&31U)))!=0)) goto LA7;
		goto BeforeRet;
	}
	LA7: ;
	t = skiptypes_217113(typ, IL64(211106232576000));
	{
		if (!(((*t).flags &(1U<<((NU)(((NU8) 4))&31U)))!=0)) goto LA11;
		goto BeforeRet;
	}
	LA11: ;
	switch ((*t).kind) {
	case ((NU8) 18):
	case ((NU8) 17):
	case ((NU8) 22):
	case ((NU8) 24):
	case ((NU8) 16):
	case ((NU8) 4):
	case ((NU8) 27):
	case ((NU8) 48):
	{
		{
			NIM_BOOL LOC16;
			LOC16 = 0;
			LOC16 = containsorincl_210862(marker, (*t).Sup.id);
			if (!!(LOC16)) goto LA17;
			{
				NI i_240686;
				NI HEX3Atmp_240728;
				NI LOC20;
				NI res_240731;
				i_240686 = 0;
				HEX3Atmp_240728 = 0;
				LOC20 = 0;
				LOC20 = sonslen_216327(t);
				HEX3Atmp_240728 = (NI)(LOC20 - ((NI) 1));
				res_240731 = ((NI) 0);
				{
					while (1) {
						if (!(res_240731 <= HEX3Atmp_240728)) goto LA22;
						i_240686 = res_240731;
						result = canformacycleaux_240576(marker, (*t).sons->data[i_240686], startid);
						{
							if (!result) goto LA25;
							goto BeforeRet;
						}
						LA25: ;
						res_240731 += ((NI) 1);
					} LA22: ;
				}
			}
			{
				if (!!(((*t).n == NIM_NIL))) goto LA29;
				result = canformacyclenode_240582(marker, (*t).n, startid);
			}
			LA29: ;
		}
		goto LA14;
		LA17: ;
		{
			result = ((*t).Sup.id == startid);
		}
		LA14: ;
		{
			NIM_BOOL LOC34;
			LOC34 = 0;
			LOC34 = ((*t).kind == ((NU8) 17));
			if (!(LOC34)) goto LA35;
			LOC34 = !((((*t).flags &(1U<<((NU)(((NU8) 2))&31U)))!=0));
			LA35: ;
			if (!LOC34) goto LA36;
			result = NIM_TRUE;
		}
		LA36: ;
	}
	break;
	case ((NU8) 25):
	{
		result = ((*typ).callconv == ((NU8) 8));
	}
	break;
	default:
	{
	}
	break;
	}
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NIM_BOOL, canformacycle_239112)(Ttype213828* typ) {
	NIM_BOOL result;
	Intset210035 marker;
	result = 0;
	memset((void*)(&marker), 0, sizeof(marker));
	chckNil((void*)(&marker));
	memset((void*)(&marker), 0, sizeof(marker));
	initintset_210885((&marker));
	result = canformacycleaux_240576((&marker), typ, (*typ).Sup.id);
	return result;
}

N_NIMCALL(NU8, analyseobjectwithtypefieldaux_240372)(Ttype213828* t, Intset210035* marker) {
	NU8 result;
	NU8 res;
{	result = 0;
	res = 0;
	result = ((NU8) 0);
	{
		if (!(t == NIM_NIL)) goto LA3;
		goto BeforeRet;
	}
	LA3: ;
	switch ((*t).kind) {
	case ((NU8) 17):
	{
		{
			if (!!(((*t).n == NIM_NIL))) goto LA8;
			{
				NIM_BOOL LOC12;
				LOC12 = 0;
				LOC12 = searchtypenodeforaux_239973((*t).n, isobjectwithtypefieldpredicate_240297, marker);
				if (!LOC12) goto LA13;
				result = ((NU8) 2);
				goto BeforeRet;
			}
			LA13: ;
		}
		LA8: ;
		{
			NI i_240414;
			NI HEX3Atmp_240465;
			NI LOC16;
			NI res_240468;
			i_240414 = 0;
			HEX3Atmp_240465 = 0;
			LOC16 = 0;
			LOC16 = sonslen_216327(t);
			HEX3Atmp_240465 = (NI)(LOC16 - ((NI) 1));
			res_240468 = ((NI) 0);
			{
				while (1) {
					if (!(res_240468 <= HEX3Atmp_240465)) goto LA18;
					i_240414 = res_240468;
					res = analyseobjectwithtypefieldaux_240372((*t).sons->data[i_240414], marker);
					{
						if (!(res == ((NU8) 2))) goto LA21;
						result = ((NU8) 2);
						goto BeforeRet;
					}
					LA21: ;
					{
						if (!(res == ((NU8) 1))) goto LA25;
						result = ((NU8) 1);
					}
					LA25: ;
					res_240468 += ((NI) 1);
				} LA18: ;
			}
		}
		{
			if (!(result == ((NU8) 0))) goto LA29;
			{
				NIM_BOOL LOC33;
				LOC33 = 0;
				LOC33 = isobjectwithtypefieldpredicate_240297(t);
				if (!LOC33) goto LA34;
				result = ((NU8) 1);
			}
			LA34: ;
		}
		LA29: ;
	}
	break;
	case ((NU8) 11):
	case ((NU8) 13):
	case ((NU8) 46):
	case ((NU8) 47):
	{
		Ttype213828* LOC37;
		LOC37 = 0;
		LOC37 = lastson_216377(t);
		result = analyseobjectwithtypefieldaux_240372(LOC37, marker);
	}
	break;
	case ((NU8) 16):
	case ((NU8) 4):
	case ((NU8) 18):
	{
		{
			NI i_240453;
			NI HEX3Atmp_240473;
			NI LOC40;
			NI res_240476;
			i_240453 = 0;
			HEX3Atmp_240473 = 0;
			LOC40 = 0;
			LOC40 = sonslen_216327(t);
			HEX3Atmp_240473 = (NI)(LOC40 - ((NI) 1));
			res_240476 = ((NI) 0);
			{
				while (1) {
					if (!(res_240476 <= HEX3Atmp_240473)) goto LA42;
					i_240453 = res_240476;
					res = analyseobjectwithtypefieldaux_240372((*t).sons->data[i_240453], marker);
					{
						if (!!((res == ((NU8) 0)))) goto LA45;
						result = ((NU8) 2);
						goto BeforeRet;
					}
					LA45: ;
					res_240476 += ((NI) 1);
				} LA42: ;
			}
		}
	}
	break;
	default:
	{
	}
	break;
	}
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NU8, analyseobjectwithtypefield_239138)(Ttype213828* t) {
	NU8 result;
	Intset210035 marker;
	result = 0;
	memset((void*)(&marker), 0, sizeof(marker));
	chckNil((void*)(&marker));
	memset((void*)(&marker), 0, sizeof(marker));
	initintset_210885((&marker));
	result = analyseobjectwithtypefieldaux_240372(t, (&marker));
	return result;
}

N_NIMCALL(NIM_BOOL, ishiddenpointer_240557)(Ttype213828* t) {
	NIM_BOOL result;
	result = 0;
	result = ((285212672 &((NU64)1<<((NU)((*t).kind)&63U)))!=0);
	return result;
}

N_NIMCALL(NIM_BOOL, containshiddenpointer_239109)(Ttype213828* typ) {
	NIM_BOOL result;
	result = 0;
	result = searchtypefor_240273(typ, ishiddenpointer_240557);
	return result;
}

static N_INLINE(NIM_BOOL, iscompiletimeonly_247906)(Ttype213828* t) {
	NIM_BOOL result;
	result = 0;
	result = ((IL64(576460752303423744) &((NU64)1<<((NU)((*t).kind)&63U)))!=0);
	return result;
}

N_NIMCALL(NIM_BOOL, containscompiletimeonly_247921)(Ttype213828* t) {
	NIM_BOOL result;
{	result = 0;
	{
		NIM_BOOL LOC3;
		LOC3 = 0;
		LOC3 = iscompiletimeonly_247906(t);
		if (!LOC3) goto LA4;
		result = NIM_TRUE;
		goto BeforeRet;
	}
	LA4: ;
	{
		NIM_BOOL LOC8;
		LOC8 = 0;
		LOC8 = HEX3DHEX3D_247927((*t).sons, NIM_NIL);
		if (!!(LOC8)) goto LA9;
		{
			NI i_248040;
			NI HEX3Atmp_248054;
			NI LOC12;
			NI res_248057;
			i_248040 = 0;
			HEX3Atmp_248054 = 0;
			LOC12 = 0;
			LOC12 = sonslen_216327(t);
			HEX3Atmp_248054 = (LOC12 - 1);
			res_248057 = ((NI) 0);
			{
				while (1) {
					if (!(res_248057 <= HEX3Atmp_248054)) goto LA14;
					i_248040 = res_248057;
					{
						NIM_BOOL LOC17;
						LOC17 = 0;
						LOC17 = !(((*t).sons->data[i_248040] == NIM_NIL));
						if (!(LOC17)) goto LA18;
						LOC17 = iscompiletimeonly_247906((*t).sons->data[i_248040]);
						LA18: ;
						if (!LOC17) goto LA19;
						result = NIM_TRUE;
						goto BeforeRet;
					}
					LA19: ;
					res_248057 += ((NI) 1);
				} LA14: ;
			}
		}
	}
	LA9: ;
	result = NIM_FALSE;
	goto BeforeRet;
	}BeforeRet: ;
	return result;
}
NIM_EXTERNC N_NOINLINE(void, compiler_typesInit000)(void) {
}

NIM_EXTERNC N_NOINLINE(void, compiler_typesDatInit000)(void) {
static TNimNode* TMP2778[2];
static TNimNode TMP894[3];
NTI243443.size = sizeof(TY243443);
NTI243443.kind = 18;
NTI243443.base = 0;
NTI243443.flags = 3;
TMP2778[0] = &TMP894[1];
TMP894[1].kind = 1;
TMP894[1].offset = offsetof(TY243443, Field0);
TMP894[1].typ = (&NTI104);
TMP894[1].name = "Field0";
TMP2778[1] = &TMP894[2];
TMP894[2].kind = 1;
TMP894[2].offset = offsetof(TY243443, Field1);
TMP894[2].typ = (&NTI104);
TMP894[2].name = "Field1";
TMP894[0].len = 2; TMP894[0].kind = 2; TMP894[0].sons = &TMP2778[0];
NTI243443.node = &TMP894[0];
NTI243442.size = sizeof(TY243442*);
NTI243442.kind = 24;
NTI243442.base = (&NTI243443);
NTI243442.flags = 2;
NTI243442.marker = TMP2779;
}

