/* 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 Tnode215790 Tnode215790;
typedef struct Ttype215828 Ttype215828;
typedef struct Tlineinfo183337 Tlineinfo183337;
typedef struct NimStringDesc NimStringDesc;
typedef struct TGenericSeq TGenericSeq;
typedef struct Tsym215822 Tsym215822;
typedef struct Tident190012 Tident190012;
typedef struct Tnodeseq215784 Tnodeseq215784;
typedef struct Tidobj190006 Tidobj190006;
typedef struct TNimObject TNimObject;
typedef struct TNimType TNimType;
typedef struct TNimNode TNimNode;
typedef struct Ttypeseq215824 Ttypeseq215824;
typedef struct Tloc215804 Tloc215804;
typedef struct Ropeobj170006 Ropeobj170006;
typedef struct Tscope215816 Tscope215816;
typedef struct TY215925 TY215925;
typedef struct Tstrtable215794 Tstrtable215794;
typedef struct Tsymseq215792 Tsymseq215792;
typedef struct Tlib215808 Tlib215808;
typedef struct TY88687 TY88687;
typedef struct Tsametypeclosure245429 Tsametypeclosure245429;
typedef struct TY245442 TY245442;
typedef struct TY245443 TY245443;
typedef struct Intset212035 Intset212035;
typedef struct Trunk212031 Trunk212031;
typedef struct Trunkseq212033 Trunkseq212033;
typedef struct Cell47505 Cell47505;
typedef struct Cellseq47521 Cellseq47521;
typedef struct Gcheap49818 Gcheap49818;
typedef struct Gcstack49816 Gcstack49816;
typedef struct Cellset47517 Cellset47517;
typedef struct Pagedesc47513 Pagedesc47513;
typedef struct Memregion29688 Memregion29688;
typedef struct Smallchunk29640 Smallchunk29640;
typedef struct Llchunk29682 Llchunk29682;
typedef struct Bigchunk29642 Bigchunk29642;
typedef struct Intset29614 Intset29614;
typedef struct Trunk29610 Trunk29610;
typedef struct Avlnode29686 Avlnode29686;
typedef struct Gcstat49814 Gcstat49814;
typedef struct Tinstantiation215812 Tinstantiation215812;
typedef struct Tlistentry135010 Tlistentry135010;
typedef struct Basechunk29638 Basechunk29638;
typedef struct Freecell29630 Freecell29630;
typedef struct TY215913 TY215913;
struct  Tlineinfo183337  {
NI16 line;
NI16 col;
NI32 fileindex;
};
struct  TGenericSeq  {
NI len;
NI reserved;
};
struct  NimStringDesc  {
  TGenericSeq Sup;
NIM_CHAR data[SEQ_DECL_SIZE];
};
struct  Tnode215790  {
Ttype215828* typ;
Tlineinfo183337 info;
NU16 flags;
NU8 kind;
union{
struct {NI64 intval;
} S1;
struct {NF floatval;
} S2;
struct {NimStringDesc* strval;
} S3;
struct {Tsym215822* sym;
} S4;
struct {Tident190012* ident;
} S5;
struct {Tnodeseq215784* 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  Tidobj190006  {
  TNimObject Sup;
NI id;
};
struct  Tloc215804  {
NU8 k;
NU8 s;
NU16 flags;
Ttype215828* t;
Ropeobj170006* r;
Ropeobj170006* heaproot;
};
struct  Ttype215828  {
  Tidobj190006 Sup;
NU8 kind;
NU8 callconv;
NU32 flags;
Ttypeseq215824* sons;
Tnode215790* n;
Tsym215822* owner;
Tsym215822* sym;
Tsym215822* destructor;
Tsym215822* deepcopy;
Tsym215822* assignment;
NI64 size;
NI16 align;
NI16 locklevel;
Tloc215804 loc;
};
struct  Tstrtable215794  {
NI counter;
Tsymseq215792* data;
};
struct  Tsym215822  {
  Tidobj190006 Sup;
NU8 kind;
union{
struct {Ttypeseq215824* typeinstcache;
Tscope215816* typscope;
} S1;
struct {TY215925* procinstcache;
Tsym215822* gcunsafetyreason;
} S2;
struct {TY215925* usedgenerics;
Tstrtable215794 tab;
} S3;
struct {Tsym215822* guard;
NI bitsize;
} S4;
} kindU;
NU8 magic;
Ttype215828* typ;
Tident190012* name;
Tlineinfo183337 info;
Tsym215822* owner;
NU32 flags;
Tnode215790* ast;
NU32 options;
NI position;
NI offset;
Tloc215804 loc;
Tlib215808* annex;
Tnode215790* constraint;
};
struct  Tident190012  {
  Tidobj190006 Sup;
NimStringDesc* s;
Tident190012* next;
NI h;
};
typedef NimStringDesc* TY243206[62];
struct TY88687 {
NimStringDesc* Field0;
NI Field1;
};
typedef NimStringDesc* TY215016[10];
struct  Tsametypeclosure245429  {
NU8 cmp;
NI reccheck;
NU8 flags;
TY245442* s;
};
struct TY245443 {
NI Field0;
NI Field1;
};
struct  TNimNode  {
NU8 kind;
NI offset;
TNimType* typ;
NCSTRING name;
NI len;
TNimNode** sons;
};
typedef N_NIMCALL_PTR(NIM_BOOL, Ttypeiter241025) (Ttype215828* t, TNimObject* closure);
struct  Intset212035  {
NI counter;
NI max;
Trunk212031* head;
Trunkseq212033* data;
};
struct  Cell47505  {
NI refcount;
TNimType* typ;
};
struct  Cellseq47521  {
NI len;
NI cap;
Cell47505** d;
};
struct  Cellset47517  {
NI counter;
NI max;
Pagedesc47513* head;
Pagedesc47513** data;
};
typedef Smallchunk29640* TY29703[512];
typedef Trunk29610* Trunkbuckets29612[256];
struct  Intset29614  {
Trunkbuckets29612 data;
};
struct  Memregion29688  {
NI minlargeobj;
NI maxlargeobj;
TY29703 freesmallchunks;
Llchunk29682* llmem;
NI currmem;
NI maxmem;
NI freemem;
NI lastsize;
Bigchunk29642* freechunkslist;
Intset29614 chunkstarts;
Avlnode29686* root;
Avlnode29686* deleted;
Avlnode29686* last;
Avlnode29686* freeavlnodes;
};
struct  Gcstat49814  {
NI stackscans;
NI cyclecollections;
NI maxthreshold;
NI maxstacksize;
NI maxstackcells;
NI cycletablesize;
NI64 maxpause;
};
struct  Gcheap49818  {
Gcstack49816* stack;
void* stackbottom;
NI cyclethreshold;
Cellseq47521 zct;
Cellseq47521 decstack;
Cellset47517 cycleroots;
Cellseq47521 tempstack;
NI recgclock;
Memregion29688 region;
Gcstat49814 stat;
};
typedef N_NIMCALL_PTR(NIM_BOOL, Ttypepredicate241029) (Ttype215828* t);
struct  Ropeobj170006  {
  TNimObject Sup;
Ropeobj170006* left;
Ropeobj170006* right;
NI length;
NimStringDesc* data;
};
struct  Tscope215816  {
NI depthlevel;
Tstrtable215794 symbols;
Tnodeseq215784* usingsyms;
Tscope215816* parent;
};
struct  Tlistentry135010  {
  TNimObject Sup;
Tlistentry135010* prev;
Tlistentry135010* next;
};
struct  Tlib215808  {
  Tlistentry135010 Sup;
NU8 kind;
NIM_BOOL generated;
NIM_BOOL isoverriden;
Ropeobj170006* name;
Tnode215790* path;
};
typedef NI TY29619[8];
struct  Trunk212031  {
Trunk212031* next;
NI key;
TY29619 bits;
};
struct  Gcstack49816  {
Gcstack49816* prev;
Gcstack49816* next;
void* starts;
void* pos;
NI maxstacksize;
};
struct  Pagedesc47513  {
Pagedesc47513* next;
NI key;
TY29619 bits;
};
struct  Basechunk29638  {
NI prevsize;
NI size;
NIM_BOOL used;
};
struct  Smallchunk29640  {
  Basechunk29638 Sup;
Smallchunk29640* next;
Smallchunk29640* prev;
Freecell29630* freelist;
NI free;
NI acc;
NF data;
};
struct  Llchunk29682  {
NI size;
NI acc;
Llchunk29682* next;
};
struct  Bigchunk29642  {
  Basechunk29638 Sup;
Bigchunk29642* next;
Bigchunk29642* prev;
NI align;
NF data;
};
struct  Trunk29610  {
Trunk29610* next;
NI key;
TY29619 bits;
};
typedef Avlnode29686* TY29693[2];
struct  Avlnode29686  {
TY29693 link;
NI key;
NI upperbound;
NI level;
};
struct  Tinstantiation215812  {
Tsym215822* sym;
Ttypeseq215824* concretetypes;
TY215913* usedby;
NI compilesid;
};
struct  Freecell29630  {
Freecell29630* next;
NI zerofield;
};
struct TY245442 {
  TGenericSeq Sup;
  TY245443 data[SEQ_DECL_SIZE];
};
struct Ttypeseq215824 {
  TGenericSeq Sup;
  Ttype215828* data[SEQ_DECL_SIZE];
};
struct Tnodeseq215784 {
  TGenericSeq Sup;
  Tnode215790* data[SEQ_DECL_SIZE];
};
struct TY215925 {
  TGenericSeq Sup;
  Tinstantiation215812* data[SEQ_DECL_SIZE];
};
struct Tsymseq215792 {
  TGenericSeq Sup;
  Tsym215822* data[SEQ_DECL_SIZE];
};
struct Trunkseq212033 {
  TGenericSeq Sup;
  Trunk212031* data[SEQ_DECL_SIZE];
};
struct TY215913 {
  TGenericSeq Sup;
  NI32 data[SEQ_DECL_SIZE];
};
N_NIMCALL(NU8, classify_250066)(Ttype215828* t);
N_NIMCALL(Ttype215828*, skiptypes_219113)(Ttype215828* t, NU64 kinds);
N_NIMCALL(NimStringDesc*, copyString)(NimStringDesc* src);
static N_INLINE(NIM_BOOL, isintlit_241222)(Ttype215828* 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_243211)(NimStringDesc** name, Ttype215828* typ);
N_NIMCALL(void, unsureAsgnRef)(void** dest, void* src);
N_NIMCALL(NimStringDesc*, resizeString)(NimStringDesc* dest, NI addlen);
N_NIMCALL(NimStringDesc*, typetostring_241017)(Ttype215828* typ, NU8 prefer);
N_NIMCALL(NI, sonslen_218327)(Ttype215828* n);
N_NIMCALL(NimStringDesc*, addChar)(NimStringDesc* s, NIM_CHAR c);
N_NIMCALL(Ttype215828*, base_241021)(Ttype215828* t);
N_NIMCALL(NI, len_218339)(Ttype215828* n);
N_NIMCALL(void, internalerror_188113)(NimStringDesc* errmsg);
N_NIMCALL(NimStringDesc*, HEX24_188183)(TY88687 x);
N_NIMCALL(NimStringDesc*, rendertree_234044)(Tnode215790* n, NU8 renderflags);
N_NIMCALL(NimStringDesc*, rangetostr_243024)(Tnode215790* n);
N_NIMCALL(NimStringDesc*, valuetostring_243017)(Tnode215790* a);
N_NIMCALL(NimStringDesc*, nimFloatToStr)(NF f);
N_NIMCALL(NI, sonslen_218351)(Tnode215790* n);
N_NIMCALL(NimStringDesc*, setLengthStr)(NimStringDesc* s, NI newlen);
static N_INLINE(NI, len_216059)(Tnode215790* n);
static N_INLINE(Tnode215790*, HEX5BHEX5D_216238)(Tnode215790* n, NI i);
static N_INLINE(void, addsep_100319)(NimStringDesc** dest, NimStringDesc* sep, NI startlen);
N_NIMCALL(NimStringDesc*, HEX24_218069)(NI16 x);
N_NIMCALL(NimStringDesc*, nsuFormatSingleElem)(NimStringDesc* formatstr, NimStringDesc* a);
N_NIMCALL(Ttype215828*, elemtype_241383)(Ttype215828* t);
N_NIMCALL(Ttype215828*, lastson_218377)(Ttype215828* n);
N_NIMCALL(void, initsametypeclosure_245448)(Tsametypeclosure245429* Result);
N_NOINLINE(void, chckNil)(void* p);
N_NIMCALL(NIM_BOOL, sametypeaux_245580)(Ttype215828* x, Ttype215828* y, Tsametypeclosure245429* c);
N_NIMCALL(Ttype215828*, skipgenericalias_246606)(Ttype215828* t);
N_NIMCALL(NIM_BOOL, isgenericalias_246584)(Ttype215828* t);
static N_INLINE(NIM_BOOL, sameflags_246622)(Ttype215828* a, Ttype215828* b);
N_NIMCALL(NIM_BOOL, exprstructuralequivalent_240099)(Tnode215790* a, Tnode215790* b, NIM_BOOL strictsymequality);
N_NIMCALL(NIM_BOOL, containsorincl_245451)(Tsametypeclosure245429* c, Ttype215828* a, Ttype215828* b);
static N_INLINE(NIM_BOOL, contains_245469)(TY245443* a, NI aLen0, TY245443 item);
static N_INLINE(NI, find_245479)(TY245443* a, NI aLen0, TY245443 item);
N_NIMCALL(NIM_BOOL, HEX3DHEX3D_245515)(TY245443 x, TY245443 y);
N_NIMCALL(void, TMP2782)(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_246530)(Ttype215828* a, Ttype215828* b, Tsametypeclosure245429* c);
N_NIMCALL(NIM_BOOL, sametypeornilaux_245586)(Ttype215828* a, Ttype215828* b, Tsametypeclosure245429* c);
N_NIMCALL(NIM_BOOL, sameobjecttree_246407)(Tnode215790* a, Tnode215790* b, Tsametypeclosure245429* c);
static N_INLINE(NIM_BOOL, eqStrings)(NimStringDesc* a, NimStringDesc* b);
N_NIMCALL(NIM_BOOL, sametuple_246210)(Ttype215828* a, Ttype215828* b, Tsametypeclosure245429* c);
N_NIMCALL(void, internalerror_188100)(Tlineinfo183337 info, NimStringDesc* errmsg);
N_NIMCALL(NIM_BOOL, samechildrenaux_246557)(Ttype215828* a, Ttype215828* b, Tsametypeclosure245429* c);
N_NIMCALL(NIM_BOOL, sameconstraints_245758)(Tnode215790* a, Tnode215790* b);
N_NIMCALL(NIM_BOOL, samevalue_222189)(Tnode215790* a, Tnode215790* b);
N_NIMCALL(NIM_BOOL, iterovertype_241038)(Ttype215828* t, Ttypeiter241025 iter, TNimObject* closure);
N_NIMCALL(void, initintset_212885)(Intset212035* Result);
N_NIMCALL(NIM_BOOL, iterovertypeaux_241859)(Intset212035* marker, Ttype215828* t, Ttypeiter241025 iter, TNimObject* closure);
N_NIMCALL(NIM_BOOL, containsorincl_212862)(Intset212035* s, NI key);
N_NIMCALL(NIM_BOOL, iterovernode_241866)(Intset212035* marker, Tnode215790* n, Ttypeiter241025 iter, TNimObject* closure);
N_NIMCALL(NIM_BOOL, containsgenerictypeiter_249413)(Ttype215828* t, TNimObject* closure);
N_NIMCALL(NI64, firstord_241001)(Ttype215828* t);
N_NIMCALL(NI64, getordvalue_241118)(Tnode215790* n);
N_NIMCALL(void, localerror_188080)(Tlineinfo183337 info, NU16 msg, NimStringDesc* arg);
N_NIMCALL(NimStringDesc*, reprEnum)(NI e_85009, TNimType* typ);
N_NIMCALL(NI64, lastord_241004)(Ttype215828* t);
N_NIMCALL(NI64, lengthord_241007)(Ttype215828* t);
N_NIMCALL(NIM_BOOL, isordinaltype_241057)(Ttype215828* t);
N_NIMCALL(NIM_BOOL, compatibleeffectsaux_249575)(Tnode215790* se, Tnode215790* re);
N_NIMCALL(NI, safeinheritancediff_249552)(Ttype215828* a, Ttype215828* b);
N_NIMCALL(NI, inheritancediff_247442)(Ttype215828* a, Ttype215828* b);
N_NIMCALL(NIM_BOOL, sameobjecttypes_246344)(Ttype215828* a, Ttype215828* b);
N_NIMCALL(NIM_BOOL, isemptycontainer_250113)(Ttype215828* t);
N_NIMCALL(NI64, computesize_241121)(Ttype215828* typ);
N_NIMCALL(NI64, computesizeaux_249057)(Ttype215828* typ, NI64* a);
N_NIMCALL(NI64, align_249049)(NI64 address, NI64 alignment);
N_NIMCALL(NIM_BOOL, isobjectwithtypefieldpredicate_242297)(Ttype215828* t);
N_NIMCALL(NI64, computerecsizeaux_249062)(Tnode215790* n, NI64* a, NI64* curroffset);
N_NIMCALL(Tnode215790*, lastson_218364)(Tnode215790* n);
N_NIMCALL(NIM_BOOL, sametype_245628)(Ttype215828* a, Ttype215828* b, NU8 flags);
N_NIMCALL(NU8, equalparam_245681)(Tsym215822* a, Tsym215822* b);
N_NIMCALL(NIM_BOOL, sametypeornil_245638)(Ttype215828* a, Ttype215828* b, NU8 flags);
N_NIMCALL(Ttype215828*, typeallowedaux_248237)(Intset212035* marker, Ttype215828* typ, NU8 kind, NU8 flags_248245);
N_NIMCALL(Ttype215828*, typeallowednode_248246)(Intset212035* marker, Tnode215790* n, NU8 kind, NU8 flags);
N_NIMCALL(Ttype215828*, copytype_218470)(Ttype215828* t, Tsym215822* owner, NIM_BOOL keepid);
static N_INLINE(void, asgnRefNoCycle)(void** dest, void* src);
static N_INLINE(Cell47505*, usrtocell_51440)(void* usr);
static N_INLINE(void, rtladdzct_53001)(Cell47505* c);
N_NOINLINE(void, addzct_51417)(Cellseq47521* s, Cell47505* c);
N_NIMCALL(Ttype215828*, taketype_250135)(Ttype215828* formal, Ttype215828* arg);
N_NIMCALL(Tnode215790*, copytree_219822)(Tnode215790* src);
N_NIMCALL(Tnode215790*, skipconv_250082)(Tnode215790* n);
N_NIMCALL(NIM_BOOL, searchtypefor_242273)(Ttype215828* t, Ttypepredicate241029 predicate);
N_NIMCALL(NIM_BOOL, searchtypeforaux_241967)(Ttype215828* t, Ttypepredicate241029 predicate, Intset212035* marker);
N_NIMCALL(NIM_BOOL, searchtypenodeforaux_241973)(Tnode215790* n, Ttypepredicate241029 p, Intset212035* marker);
N_NIMCALL(NIM_BOOL, isgcref_242486)(Ttype215828* t);
N_NIMCALL(void, incl_212832)(Intset212035* s, NI key);
N_NIMCALL(NIM_BOOL, contains_212811)(Intset212035* s, NI key);
N_NIMCALL(NIM_BOOL, canformacycleaux_242576)(Intset212035* marker, Ttype215828* typ, NI startid);
N_NIMCALL(NIM_BOOL, canformacyclenode_242582)(Intset212035* marker, Tnode215790* n, NI startid);
N_NIMCALL(NU8, analyseobjectwithtypefieldaux_242372)(Ttype215828* t, Intset212035* marker);
N_NIMCALL(NIM_BOOL, ishiddenpointer_242557)(Ttype215828* t);
static N_INLINE(NIM_BOOL, iscompiletimeonly_249906)(Ttype215828* t);
N_NIMCALL(NIM_BOOL, HEX3DHEX3D_249927)(Ttypeseq215824* x, Ttypeseq215824* y);
STRING_LITERAL(TMP2119, "", 0);
STRING_LITERAL(TMP2120, " literal(", 9);
STRING_LITERAL(TMP2121, ")", 1);
STRING_LITERAL(TMP2122, "shared ", 7);
STRING_LITERAL(TMP2123, " not nil", 8);
STRING_LITERAL(TMP2124, "None", 4);
STRING_LITERAL(TMP2125, "bool", 4);
STRING_LITERAL(TMP2126, "Char", 4);
STRING_LITERAL(TMP2127, "empty", 5);
STRING_LITERAL(TMP2128, "Array Constructor [$1]", 22);
STRING_LITERAL(TMP2129, "nil", 3);
STRING_LITERAL(TMP2130, "untyped", 7);
STRING_LITERAL(TMP2131, "typed", 5);
STRING_LITERAL(TMP2132, "typeDesc", 8);
STRING_LITERAL(TMP2133, "GenericInvocation", 17);
STRING_LITERAL(TMP2134, "GenericBody", 11);
STRING_LITERAL(TMP2135, "GenericInst", 11);
STRING_LITERAL(TMP2136, "GenericParam", 12);
STRING_LITERAL(TMP2137, "distinct $1", 11);
STRING_LITERAL(TMP2138, "enum", 4);
STRING_LITERAL(TMP2139, "ordinal[$1]", 11);
STRING_LITERAL(TMP2140, "array[$1, $2]", 13);
STRING_LITERAL(TMP2141, "object", 6);
STRING_LITERAL(TMP2142, "tuple", 5);
STRING_LITERAL(TMP2143, "set[$1]", 7);
STRING_LITERAL(TMP2144, "range[$1]", 9);
STRING_LITERAL(TMP2145, "ptr ", 4);
STRING_LITERAL(TMP2146, "ref ", 4);
STRING_LITERAL(TMP2147, "var ", 4);
STRING_LITERAL(TMP2148, "seq[$1]", 7);
STRING_LITERAL(TMP2149, "proc", 4);
STRING_LITERAL(TMP2150, "pointer", 7);
STRING_LITERAL(TMP2151, "OpenArray[$1]", 13);
STRING_LITERAL(TMP2152, "string", 6);
STRING_LITERAL(TMP2153, "CString", 7);
STRING_LITERAL(TMP2154, "Forward", 7);
STRING_LITERAL(TMP2155, "int", 3);
STRING_LITERAL(TMP2156, "int8", 4);
STRING_LITERAL(TMP2157, "int16", 5);
STRING_LITERAL(TMP2158, "int32", 5);
STRING_LITERAL(TMP2159, "int64", 5);
STRING_LITERAL(TMP2160, "float", 5);
STRING_LITERAL(TMP2161, "float32", 7);
STRING_LITERAL(TMP2162, "float64", 7);
STRING_LITERAL(TMP2163, "float128", 8);
STRING_LITERAL(TMP2164, "uint", 4);
STRING_LITERAL(TMP2165, "uint8", 5);
STRING_LITERAL(TMP2166, "uint16", 6);
STRING_LITERAL(TMP2167, "uint32", 6);
STRING_LITERAL(TMP2168, "uint64", 6);
STRING_LITERAL(TMP2169, "bignum", 6);
STRING_LITERAL(TMP2170, "const ", 6);
STRING_LITERAL(TMP2171, "!", 1);
STRING_LITERAL(TMP2172, "varargs[$1]", 11);
STRING_LITERAL(TMP2173, "iter[$1]", 8);
STRING_LITERAL(TMP2174, "Error Type", 10);
STRING_LITERAL(TMP2175, "BuiltInTypeClass", 16);
STRING_LITERAL(TMP2176, "UserTypeClass", 13);
STRING_LITERAL(TMP2177, "UserTypeClassInst", 17);
STRING_LITERAL(TMP2178, "CompositeTypeClass", 18);
STRING_LITERAL(TMP2179, "and", 3);
STRING_LITERAL(TMP2180, "or", 2);
STRING_LITERAL(TMP2181, "not", 3);
STRING_LITERAL(TMP2182, "any", 3);
STRING_LITERAL(TMP2183, "static", 6);
STRING_LITERAL(TMP2184, "TypeFromExpr", 12);
STRING_LITERAL(TMP2185, "FieldAccessor", 13);
NIM_CONST TY243206 typetostr_243203 = {((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),
((NimStringDesc*) &TMP2183),
((NimStringDesc*) &TMP2184),
((NimStringDesc*) &TMP2185)}
;
STRING_LITERAL(TMP2186, "int literal(", 12);
STRING_LITERAL(TMP2187, ", ", 2);
STRING_LITERAL(TMP2188, "typedesc", 8);
STRING_LITERAL(TMP2189, "typedesc[", 9);
STRING_LITERAL(TMP2190, "]", 1);
STRING_LITERAL(TMP2192, "compiler/types.nim", 18);
NIM_CONST TY88687 TMP2191 = {((NimStringDesc*) &TMP2192),
((NI) 451)}
;
STRING_LITERAL(TMP2193, "static[", 7);
STRING_LITERAL(TMP2194, "(", 1);
NIM_CONST TY88687 TMP2195 = {((NimStringDesc*) &TMP2192),
((NI) 458)}
;
STRING_LITERAL(TMP2196, "var", 3);
STRING_LITERAL(TMP2197, "ref", 3);
STRING_LITERAL(TMP2198, "ptr", 3);
STRING_LITERAL(TMP2199, "seq", 3);
STRING_LITERAL(TMP2200, "array", 5);
STRING_LITERAL(TMP2201, "set", 3);
STRING_LITERAL(TMP2202, "range", 5);
STRING_LITERAL(TMP2203, "distinct", 8);
STRING_LITERAL(TMP2204, "openarray", 9);
STRING_LITERAL(TMP2205, "[", 1);
STRING_LITERAL(TMP2206, " and ", 5);
STRING_LITERAL(TMP2207, " or ", 4);
STRING_LITERAL(TMP2208, "not ", 4);
NIM_CONST TY88687 TMP2209 = {((NimStringDesc*) &TMP2192),
((NI) 489)}
;
STRING_LITERAL(TMP2210, "array[", 6);
STRING_LITERAL(TMP2211, "<invalid value>", 15);
STRING_LITERAL(TMP2212, "..", 2);
STRING_LITERAL(TMP2213, "Array constructor[", 18);
STRING_LITERAL(TMP2214, "seq[", 4);
STRING_LITERAL(TMP2215, "ordinal[", 8);
STRING_LITERAL(TMP2216, "set[", 4);
STRING_LITERAL(TMP2217, "openarray[", 10);
STRING_LITERAL(TMP2218, "distinct ", 9);
STRING_LITERAL(TMP2219, "tuple[", 6);
STRING_LITERAL(TMP2220, ": ", 2);
STRING_LITERAL(TMP2221, "tuple[]", 7);
STRING_LITERAL(TMP2222, "range ", 6);
STRING_LITERAL(TMP2223, "iterator (", 10);
STRING_LITERAL(TMP2224, "proc (", 6);
extern NIM_CONST TY215016 Callingconvtostr_215013;
STRING_LITERAL(TMP2235, "noSideEffect", 12);
STRING_LITERAL(TMP2236, "gcsafe", 6);
STRING_LITERAL(TMP2237, "locks: ", 7);
STRING_LITERAL(TMP2240, "{.", 2);
STRING_LITERAL(TMP2241, ".}", 2);
STRING_LITERAL(TMP2783, "sameTuple", 9);
NIM_CONST TY88687 TMP2784 = {((NimStringDesc*) &TMP2192),
((NI) 731)}
;
STRING_LITERAL(TMP2794, "invalid kind for first(", 23);
STRING_LITERAL(TMP2795, "invalid kind for last(", 22);
NIM_CONST TY88687 TMP2798 = {((NimStringDesc*) &TMP2192),
((NI) 1387)}
;
NIM_CONST TY88687 TMP2799 = {((NimStringDesc*) &TMP2192),
((NI) 1388)}
;
STRING_LITERAL(TMP2807, "getProcHeader", 13);
STRING_LITERAL(TMP2968, "computeRecSizeAux(record case branch)", 37);
STRING_LITERAL(TMP2969, "getSize: ", 9);
NIM_CONST TY88687 TMP3512 = {((NimStringDesc*) &TMP2192),
((NI) 1364)}
;
STRING_LITERAL(TMP3581, "searchTypeNodeForAux(record case branch)", 40);
STRING_LITERAL(TMP3582, "searchTypeNodeForAux()", 22);
TNimType NTI245443; /* tuple[a: int, b: int] */
extern TNimType NTI104; /* int */
TNimType NTI245442; /* seq[tuple[a: int, b: int]] */
extern NI intsize_168615;
extern TNimType NTI215241; /* TTypeKind */
extern NI floatsize_168616;
extern NI ptrsize_168617;
extern Gcheap49818 gch_49859;

N_NIMCALL(NU8, classify_250066)(Ttype215828* t) {
	NU8 result;
	result = 0;
	{
		if (!(t == NIM_NIL)) goto LA3;
		result = ((NU8) 0);
	}
	goto LA1;
	LA3: ;
	{
		Ttype215828* LOC6;
		LOC6 = 0;
		LOC6 = skiptypes_219113(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(Tnode215790*, skipconv_250082)(Tnode215790* n) {
	Tnode215790* 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_250066((*(*n).kindU.S6.sons->data[((NI) 0)]).typ);
			LOC5 = 0;
			LOC5 = classify_250066((*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_250066((*(*n).kindU.S6.sons->data[((NI) 1)]).typ);
			LOC12 = 0;
			LOC12 = classify_250066((*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_241222)(Ttype215828* 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_243211)(NimStringDesc** name, Ttype215828* 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*) &TMP2122));
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*) &TMP2123));
	}
	LA8: ;
}

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

N_NIMCALL(NimStringDesc*, valuetostring_243017)(Tnode215790* 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*) &TMP2211));
	}
	break;
	}
	return result;
}

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

static N_INLINE(NI, len_216059)(Tnode215790* 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(Tnode215790*, HEX5BHEX5D_216238)(Tnode215790* n, NI i) {
	Tnode215790* 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_241017)(Ttype215828* typ, NU8 prefer) {
	NimStringDesc* result;
	Ttype215828* t;
{	result = 0;
	t = typ;
	result = copyString(((NimStringDesc*) &TMP2119));
	{
		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_241222(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*) &TMP2120));
appendString(LOC19, LOC20);
appendString(LOC19, ((NimStringDesc*) &TMP2121));
			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_243211((&result), t);
		goto BeforeRet;
	}
	LA11: ;
	switch ((*t).kind) {
	case ((NU8) 31):
	{
		{
			NIM_BOOL LOC31;
			NIM_BOOL LOC32;
			LOC31 = 0;
			LOC32 = 0;
			LOC32 = isintlit_241222(t);
			LOC31 = !(LOC32);
			if (LOC31) goto LA33;
			LOC31 = (prefer == ((NU8) 2));
			LA33: ;
			if (!LOC31) goto LA34;
			result = copyString(typetostr_243203[((*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*) &TMP2186));
appendString(LOC42, LOC43);
appendString(LOC42, ((NimStringDesc*) &TMP2121));
				result = LOC42;
			}
			LA37: ;
		}
		LA29: ;
	}
	break;
	case ((NU8) 10):
	case ((NU8) 11):
	case ((NU8) 9):
	{
		NimStringDesc* LOC45;
		NimStringDesc* LOC46;
		LOC45 = 0;
		LOC46 = 0;
		LOC46 = typetostring_241017((*t).sons->data[((NI) 0)], ((NU8) 0));
		LOC45 = rawNewString(LOC46->Sup.len + 1);
appendString(LOC45, LOC46);
appendChar(LOC45, 91);
		result = LOC45;
		{
			NI i_243370;
			NI HEX3Atmp_243946;
			NI LOC48;
			NI res_243949;
			i_243370 = 0;
			HEX3Atmp_243946 = 0;
			LOC48 = 0;
			LOC48 = sonslen_218327(t);
			HEX3Atmp_243946 = (NI)((NI)(LOC48 - ((NI) 1)) - ((NI) (!(((*t).kind == ((NU8) 9))))));
			res_243949 = ((NI) 1);
			{
				while (1) {
					NimStringDesc* LOC55;
					if (!(res_243949 <= HEX3Atmp_243946)) goto LA50;
					i_243370 = res_243949;
					{
						if (!(((NI) 1) < i_243370)) goto LA53;
						result = resizeString(result, 2);
appendString(result, ((NimStringDesc*) &TMP2187));
					}
					LA53: ;
					LOC55 = 0;
					LOC55 = typetostring_241017((*t).sons->data[i_243370], ((NU8) 4));
					result = resizeString(result, LOC55->Sup.len + 0);
appendString(result, LOC55);
					res_243949 += ((NI) 1);
				} LA50: ;
			}
		}
		result = addChar(result, 93);
	}
	break;
	case ((NU8) 8):
	{
		{
			Ttype215828* LOC59;
			LOC59 = 0;
			LOC59 = base_241021(t);
			if (!((*LOC59).kind == ((NU8) 0))) goto LA60;
			result = copyString(((NimStringDesc*) &TMP2188));
		}
		goto LA57;
		LA60: ;
		{
			NimStringDesc* LOC63;
			Ttype215828* LOC64;
			NimStringDesc* LOC65;
			LOC63 = 0;
			LOC64 = 0;
			LOC64 = base_241021(t);
			LOC65 = 0;
			LOC65 = typetostring_241017(LOC64, ((NU8) 0));
			LOC63 = rawNewString(LOC65->Sup.len + 10);
appendString(LOC63, ((NimStringDesc*) &TMP2189));
appendString(LOC63, LOC65);
appendString(LOC63, ((NimStringDesc*) &TMP2190));
			result = LOC63;
		}
		LA57: ;
	}
	break;
	case ((NU8) 59):
	{
		{
			NI LOC69;
			NimStringDesc* LOC72;
			LOC69 = 0;
			LOC69 = len_218339(t);
			if (!!((((NI) 0) < LOC69))) goto LA70;
			LOC72 = 0;
			LOC72 = HEX24_188183(TMP2191);
			internalerror_188113(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_234044((*t).n, 0);
		}
		goto LA73;
		LA77: ;
		{
			NimStringDesc* LOC80;
			NimStringDesc* LOC81;
			LOC80 = 0;
			LOC81 = 0;
			LOC81 = typetostring_241017((*t).sons->data[((NI) 0)], ((NU8) 0));
			LOC80 = rawNewString(LOC81->Sup.len + 8);
appendString(LOC80, ((NimStringDesc*) &TMP2193));
appendString(LOC80, LOC81);
appendString(LOC80, ((NimStringDesc*) &TMP2190));
			result = LOC80;
			{
				NimStringDesc* LOC86;
				NimStringDesc* LOC87;
				if (!!(((*t).n == NIM_NIL))) goto LA84;
				LOC86 = 0;
				LOC87 = 0;
				LOC87 = rendertree_234044((*t).n, 0);
				LOC86 = rawNewString(LOC87->Sup.len + 2);
appendString(LOC86, ((NimStringDesc*) &TMP2194));
appendString(LOC86, LOC87);
appendString(LOC86, ((NimStringDesc*) &TMP2121));
				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_188183(TMP2195);
			internalerror_188113(LOC95);
		}
		LA93: ;
		result = copyString((*(*(*(*t).sym).owner).name).s);
		goto BeforeRet;
	}
	break;
	case ((NU8) 51):
	{
		Ttype215828* LOC97;
		LOC97 = 0;
		LOC97 = base_241021(t);
		switch ((*LOC97).kind) {
		case ((NU8) 23):
		{
			result = copyString(((NimStringDesc*) &TMP2196));
		}
		break;
		case ((NU8) 22):
		{
			result = copyString(((NimStringDesc*) &TMP2197));
		}
		break;
		case ((NU8) 21):
		{
			result = copyString(((NimStringDesc*) &TMP2198));
		}
		break;
		case ((NU8) 24):
		{
			result = copyString(((NimStringDesc*) &TMP2199));
		}
		break;
		case ((NU8) 16):
		{
			result = copyString(((NimStringDesc*) &TMP2200));
		}
		break;
		case ((NU8) 19):
		{
			result = copyString(((NimStringDesc*) &TMP2201));
		}
		break;
		case ((NU8) 20):
		{
			result = copyString(((NimStringDesc*) &TMP2202));
		}
		break;
		case ((NU8) 13):
		{
			result = copyString(((NimStringDesc*) &TMP2203));
		}
		break;
		case ((NU8) 25):
		{
			result = copyString(((NimStringDesc*) &TMP2149));
		}
		break;
		case ((NU8) 17):
		{
			result = copyString(((NimStringDesc*) &TMP2141));
		}
		break;
		case ((NU8) 18):
		{
			result = copyString(((NimStringDesc*) &TMP2142));
		}
		break;
		case ((NU8) 27):
		{
			result = copyString(((NimStringDesc*) &TMP2204));
		}
		break;
		default:
		{
			Ttype215828* LOC111;
			LOC111 = 0;
			LOC111 = base_241021(t);
			result = copyString(typetostr_243203[((*LOC111).kind)- 0]);
		}
		break;
		}
	}
	break;
	case ((NU8) 53):
	{
		Ttype215828* body;
		NimStringDesc* LOC113;
		body = base_241021(t);
		LOC113 = 0;
		LOC113 = rawNewString((*(*(*body).sym).name).s->Sup.len + 1);
appendString(LOC113, (*(*(*body).sym).name).s);
appendString(LOC113, ((NimStringDesc*) &TMP2205));
		result = LOC113;
		{
			NI i_243468;
			NI HEX3Atmp_243954;
			NI LOC115;
			NI res_243957;
			i_243468 = 0;
			HEX3Atmp_243954 = 0;
			LOC115 = 0;
			LOC115 = sonslen_218327(t);
			HEX3Atmp_243954 = (NI)(LOC115 - ((NI) 2));
			res_243957 = ((NI) 1);
			{
				while (1) {
					NimStringDesc* LOC122;
					if (!(res_243957 <= HEX3Atmp_243954)) goto LA117;
					i_243468 = res_243957;
					{
						if (!(((NI) 1) < i_243468)) goto LA120;
						result = resizeString(result, 2);
appendString(result, ((NimStringDesc*) &TMP2187));
					}
					LA120: ;
					LOC122 = 0;
					LOC122 = typetostring_241017((*t).sons->data[i_243468], ((NU8) 0));
					result = resizeString(result, LOC122->Sup.len + 0);
appendString(result, LOC122);
					res_243957 += ((NI) 1);
				} LA117: ;
			}
		}
		result = resizeString(result, 1);
appendString(result, ((NimStringDesc*) &TMP2190));
	}
	break;
	case ((NU8) 55):
	{
		NimStringDesc* LOC124;
		NimStringDesc* LOC125;
		NimStringDesc* LOC126;
		LOC124 = 0;
		LOC125 = 0;
		LOC125 = typetostring_241017((*t).sons->data[((NI) 0)], ((NU8) 0));
		LOC126 = 0;
		LOC126 = typetostring_241017((*t).sons->data[((NI) 1)], ((NU8) 0));
		LOC124 = rawNewString(LOC125->Sup.len + LOC126->Sup.len + 5);
appendString(LOC124, LOC125);
appendString(LOC124, ((NimStringDesc*) &TMP2206));
appendString(LOC124, LOC126);
		result = LOC124;
	}
	break;
	case ((NU8) 56):
	{
		NimStringDesc* LOC128;
		NimStringDesc* LOC129;
		NimStringDesc* LOC130;
		LOC128 = 0;
		LOC129 = 0;
		LOC129 = typetostring_241017((*t).sons->data[((NI) 0)], ((NU8) 0));
		LOC130 = 0;
		LOC130 = typetostring_241017((*t).sons->data[((NI) 1)], ((NU8) 0));
		LOC128 = rawNewString(LOC129->Sup.len + LOC130->Sup.len + 4);
appendString(LOC128, LOC129);
appendString(LOC128, ((NimStringDesc*) &TMP2207));
appendString(LOC128, LOC130);
		result = LOC128;
	}
	break;
	case ((NU8) 57):
	{
		NimStringDesc* LOC132;
		NimStringDesc* LOC133;
		LOC132 = 0;
		LOC133 = 0;
		LOC133 = typetostring_241017((*t).sons->data[((NI) 0)], ((NU8) 0));
		LOC132 = rawNewString(LOC133->Sup.len + 4);
appendString(LOC132, ((NimStringDesc*) &TMP2208));
appendString(LOC132, LOC133);
		result = LOC132;
	}
	break;
	case ((NU8) 6):
	{
		{
			NI LOC137;
			NimStringDesc* LOC140;
			LOC137 = 0;
			LOC137 = len_218339(t);
			if (!!((LOC137 == ((NI) 0)))) goto LA138;
			LOC140 = 0;
			LOC140 = HEX24_188183(TMP2209);
			internalerror_188113(LOC140);
		}
		LA138: ;
		result = copyString(((NimStringDesc*) &TMP2130));
	}
	break;
	case ((NU8) 60):
	case ((NU8) 61):
	{
		result = rendertree_234044((*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_243024((*(*t).sons->data[((NI) 0)]).n);
			LOC149 = 0;
			LOC149 = typetostring_241017((*t).sons->data[((NI) 1)], ((NU8) 0));
			LOC147 = rawNewString(LOC148->Sup.len + LOC149->Sup.len + 9);
appendString(LOC147, ((NimStringDesc*) &TMP2210));
appendString(LOC147, LOC148);
appendString(LOC147, ((NimStringDesc*) &TMP2187));
appendString(LOC147, LOC149);
appendChar(LOC147, 93);
			result = LOC147;
		}
		goto LA143;
		LA145: ;
		{
			NimStringDesc* LOC151;
			NimStringDesc* LOC152;
			NimStringDesc* LOC153;
			LOC151 = 0;
			LOC152 = 0;
			LOC152 = typetostring_241017((*t).sons->data[((NI) 0)], ((NU8) 0));
			LOC153 = 0;
			LOC153 = typetostring_241017((*t).sons->data[((NI) 1)], ((NU8) 0));
			LOC151 = rawNewString(LOC152->Sup.len + LOC153->Sup.len + 9);
appendString(LOC151, ((NimStringDesc*) &TMP2210));
appendString(LOC151, LOC152);
appendString(LOC151, ((NimStringDesc*) &TMP2187));
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_243024((*(*t).sons->data[((NI) 0)]).n);
		LOC157 = 0;
		LOC157 = typetostring_241017((*t).sons->data[((NI) 1)], ((NU8) 0));
		LOC155 = rawNewString(LOC156->Sup.len + LOC157->Sup.len + 21);
appendString(LOC155, ((NimStringDesc*) &TMP2213));
appendString(LOC155, LOC156);
appendString(LOC155, ((NimStringDesc*) &TMP2187));
appendString(LOC155, LOC157);
appendChar(LOC155, 93);
		result = LOC155;
	}
	break;
	case ((NU8) 24):
	{
		NimStringDesc* LOC159;
		NimStringDesc* LOC160;
		LOC159 = 0;
		LOC160 = 0;
		LOC160 = typetostring_241017((*t).sons->data[((NI) 0)], ((NU8) 0));
		LOC159 = rawNewString(LOC160->Sup.len + 5);
appendString(LOC159, ((NimStringDesc*) &TMP2214));
appendString(LOC159, LOC160);
appendChar(LOC159, 93);
		result = LOC159;
	}
	break;
	case ((NU8) 15):
	{
		NimStringDesc* LOC162;
		NimStringDesc* LOC163;
		LOC162 = 0;
		LOC163 = 0;
		LOC163 = typetostring_241017((*t).sons->data[((NI) 0)], ((NU8) 0));
		LOC162 = rawNewString(LOC163->Sup.len + 9);
appendString(LOC162, ((NimStringDesc*) &TMP2215));
appendString(LOC162, LOC163);
appendChar(LOC162, 93);
		result = LOC162;
	}
	break;
	case ((NU8) 19):
	{
		NimStringDesc* LOC165;
		NimStringDesc* LOC166;
		LOC165 = 0;
		LOC166 = 0;
		LOC166 = typetostring_241017((*t).sons->data[((NI) 0)], ((NU8) 0));
		LOC165 = rawNewString(LOC166->Sup.len + 5);
appendString(LOC165, ((NimStringDesc*) &TMP2216));
appendString(LOC165, LOC166);
appendChar(LOC165, 93);
		result = LOC165;
	}
	break;
	case ((NU8) 27):
	{
		NimStringDesc* LOC168;
		NimStringDesc* LOC169;
		LOC168 = 0;
		LOC169 = 0;
		LOC169 = typetostring_241017((*t).sons->data[((NI) 0)], ((NU8) 0));
		LOC168 = rawNewString(LOC169->Sup.len + 11);
appendString(LOC168, ((NimStringDesc*) &TMP2217));
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_241017((*t).sons->data[((NI) 0)], LOC172);
		LOC171 = rawNewString(LOC178->Sup.len + 9);
appendString(LOC171, ((NimStringDesc*) &TMP2218));
appendString(LOC171, LOC178);
		result = LOC171;
	}
	break;
	case ((NU8) 18):
	{
		{
			if (!!(((*t).n == NIM_NIL))) goto LA182;
			result = copyString(((NimStringDesc*) &TMP2219));
			{
				NI i_243612;
				NI HEX3Atmp_243962;
				NI LOC185;
				NI res_243965;
				i_243612 = 0;
				HEX3Atmp_243962 = 0;
				LOC185 = 0;
				LOC185 = sonslen_218351((*t).n);
				HEX3Atmp_243962 = (NI)(LOC185 - ((NI) 1));
				res_243965 = ((NI) 0);
				{
					while (1) {
						NimStringDesc* LOC188;
						NimStringDesc* LOC189;
						if (!(res_243965 <= HEX3Atmp_243962)) goto LA187;
						i_243612 = res_243965;
						LOC188 = 0;
						LOC189 = 0;
						LOC189 = typetostring_241017((*t).sons->data[i_243612], ((NU8) 0));
						LOC188 = rawNewString((*(*(*(*(*t).n).kindU.S6.sons->data[i_243612]).kindU.S4.sym).name).s->Sup.len + LOC189->Sup.len + 2);
appendString(LOC188, (*(*(*(*(*t).n).kindU.S6.sons->data[i_243612]).kindU.S4.sym).name).s);
appendString(LOC188, ((NimStringDesc*) &TMP2220));
appendString(LOC188, LOC189);
						result = resizeString(result, LOC188->Sup.len + 0);
appendString(result, LOC188);
						{
							NI LOC192;
							LOC192 = 0;
							LOC192 = sonslen_218351((*t).n);
							if (!(i_243612 < (NI)(LOC192 - ((NI) 1)))) goto LA193;
							result = resizeString(result, 2);
appendString(result, ((NimStringDesc*) &TMP2187));
						}
						LA193: ;
						res_243965 += ((NI) 1);
					} LA187: ;
				}
			}
			result = addChar(result, 93);
		}
		goto LA180;
		LA182: ;
		{
			NI LOC196;
			LOC196 = 0;
			LOC196 = sonslen_218327(t);
			if (!(LOC196 == ((NI) 0))) goto LA197;
			result = copyString(((NimStringDesc*) &TMP2221));
		}
		goto LA180;
		LA197: ;
		{
			result = copyString(((NimStringDesc*) &TMP2194));
			{
				NI i_243815;
				NI HEX3Atmp_243970;
				NI LOC201;
				NI res_243973;
				i_243815 = 0;
				HEX3Atmp_243970 = 0;
				LOC201 = 0;
				LOC201 = sonslen_218327(t);
				HEX3Atmp_243970 = (NI)(LOC201 - ((NI) 1));
				res_243973 = ((NI) 0);
				{
					while (1) {
						NimStringDesc* LOC204;
						if (!(res_243973 <= HEX3Atmp_243970)) goto LA203;
						i_243815 = res_243973;
						LOC204 = 0;
						LOC204 = typetostring_241017((*t).sons->data[i_243815], ((NU8) 0));
						result = resizeString(result, LOC204->Sup.len + 0);
appendString(result, LOC204);
						{
							NI LOC207;
							LOC207 = 0;
							LOC207 = sonslen_218327(t);
							if (!(i_243815 < (NI)(LOC207 - ((NI) 1)))) goto LA208;
							result = resizeString(result, 2);
appendString(result, ((NimStringDesc*) &TMP2187));
						}
						LA208: ;
						res_243973 += ((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_243203[((*t).kind)- 0]);
		{
			NI LOC213;
			LOC213 = 0;
			LOC213 = len_218339(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_243827;
				NI HEX3Atmp_243978;
				NI LOC217;
				NI res_243981;
				i_243827 = 0;
				HEX3Atmp_243978 = 0;
				LOC217 = 0;
				LOC217 = sonslen_218327(t);
				HEX3Atmp_243978 = (NI)(LOC217 - ((NI) 1));
				res_243981 = ((NI) 0);
				{
					while (1) {
						NimStringDesc* LOC220;
						if (!(res_243981 <= HEX3Atmp_243978)) goto LA219;
						i_243827 = res_243981;
						LOC220 = 0;
						LOC220 = typetostring_241017((*t).sons->data[i_243827], ((NU8) 0));
						result = resizeString(result, LOC220->Sup.len + 0);
appendString(result, LOC220);
						{
							NI LOC223;
							LOC223 = 0;
							LOC223 = sonslen_218327(t);
							if (!(i_243827 < (NI)(LOC223 - ((NI) 1)))) goto LA224;
							result = resizeString(result, 2);
appendString(result, ((NimStringDesc*) &TMP2187));
						}
						LA224: ;
						res_243981 += ((NI) 1);
					} LA219: ;
				}
			}
			result = addChar(result, 93);
		}
		goto LA211;
		LA214: ;
		{
			NimStringDesc* LOC227;
			LOC227 = 0;
			LOC227 = typetostring_241017((*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_243024((*t).n);
		LOC229 = rawNewString(LOC230->Sup.len + 6);
appendString(LOC229, ((NimStringDesc*) &TMP2222));
appendString(LOC229, LOC230);
		result = LOC229;
		{
			NimStringDesc* LOC235;
			NimStringDesc* LOC236;
			if (!!((prefer == ((NU8) 2)))) goto LA233;
			LOC235 = 0;
			LOC236 = 0;
			LOC236 = typetostring_241017((*t).sons->data[((NI) 0)], ((NU8) 0));
			LOC235 = rawNewString(LOC236->Sup.len + 2);
appendString(LOC235, ((NimStringDesc*) &TMP2194));
appendString(LOC235, LOC236);
appendString(LOC235, ((NimStringDesc*) &TMP2121));
			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*) &TMP2223));
		}
		goto LA238;
		LA240: ;
		{
			result = copyString(((NimStringDesc*) &TMP2224));
		}
		LA238: ;
		{
			NI i_243858;
			NI HEX3Atmp_243986;
			NI LOC244;
			NI res_243989;
			i_243858 = 0;
			HEX3Atmp_243986 = 0;
			LOC244 = 0;
			LOC244 = sonslen_218327(t);
			HEX3Atmp_243986 = (NI)(LOC244 - ((NI) 1));
			res_243989 = ((NI) 1);
			{
				while (1) {
					NimStringDesc* LOC258;
					if (!(res_243989 <= HEX3Atmp_243986)) goto LA246;
					i_243858 = res_243989;
					{
						NIM_BOOL LOC249;
						NIM_BOOL LOC250;
						NI LOC252;
						Tnode215790* LOC254;
						Tnode215790* LOC257;
						LOC249 = 0;
						LOC250 = 0;
						LOC250 = !(((*t).n == NIM_NIL));
						if (!(LOC250)) goto LA251;
						LOC252 = 0;
						LOC252 = len_216059((*t).n);
						LOC250 = (i_243858 < LOC252);
						LA251: ;
						LOC249 = LOC250;
						if (!(LOC249)) goto LA253;
						LOC254 = 0;
						LOC254 = HEX5BHEX5D_216238((*t).n, i_243858);
						LOC249 = ((*LOC254).kind == ((NU8) 3));
						LA253: ;
						if (!LOC249) goto LA255;
						LOC257 = 0;
						LOC257 = HEX5BHEX5D_216238((*t).n, i_243858);
						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*) &TMP2220));
					}
					LA255: ;
					LOC258 = 0;
					LOC258 = typetostring_241017((*t).sons->data[i_243858], ((NU8) 0));
					result = resizeString(result, LOC258->Sup.len + 0);
appendString(result, LOC258);
					{
						NI LOC261;
						LOC261 = 0;
						LOC261 = sonslen_218327(t);
						if (!(i_243858 < (NI)(LOC261 - ((NI) 1)))) goto LA262;
						result = resizeString(result, 2);
appendString(result, ((NimStringDesc*) &TMP2187));
					}
					LA262: ;
					res_243989 += ((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_241017((*t).sons->data[((NI) 0)], ((NU8) 0));
			LOC268 = rawNewString(LOC269->Sup.len + 2);
appendString(LOC268, ((NimStringDesc*) &TMP2220));
appendString(LOC268, LOC269);
			result = resizeString(result, LOC268->Sup.len + 0);
appendString(result, LOC268);
		}
		LA266: ;
		{
			if (!((*t).callconv == ((NU8) 0))) goto LA272;
			prag = copyString(((NimStringDesc*) &TMP2119));
		}
		goto LA270;
		LA272: ;
		{
			prag = copyString(Callingconvtostr_215013[((*t).callconv)- 0]);
		}
		LA270: ;
		{
			if (!(((*t).flags &(1U<<((NU)(((NU8) 1))&31U)))!=0)) goto LA277;
			addsep_100319((&prag), ((NimStringDesc*) &TMP2187), ((NI) 0));
			prag = resizeString(prag, 12);
appendString(prag, ((NimStringDesc*) &TMP2235));
		}
		LA277: ;
		{
			if (!(((*t).flags &(1U<<((NU)(((NU8) 7))&31U)))!=0)) goto LA281;
			addsep_100319((&prag), ((NimStringDesc*) &TMP2187), ((NI) 0));
			prag = resizeString(prag, 6);
appendString(prag, ((NimStringDesc*) &TMP2236));
		}
		LA281: ;
		{
			NimStringDesc* LOC287;
			NimStringDesc* LOC288;
			if (!!((((NI) ((*t).locklevel)) == ((NI) -1)))) goto LA285;
			addsep_100319((&prag), ((NimStringDesc*) &TMP2187), ((NI) 0));
			LOC287 = 0;
			LOC288 = 0;
			LOC288 = HEX24_218069((*t).locklevel);
			LOC287 = rawNewString(LOC288->Sup.len + 7);
appendString(LOC287, ((NimStringDesc*) &TMP2237));
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*) &TMP2240));
appendString(LOC293, prag);
appendString(LOC293, ((NimStringDesc*) &TMP2241));
			result = resizeString(result, LOC293->Sup.len + 0);
appendString(result, LOC293);
		}
		LA291: ;
	}
	break;
	case ((NU8) 48):
	case ((NU8) 49):
	{
		NimStringDesc* LOC295;
		LOC295 = 0;
		LOC295 = typetostring_241017((*t).sons->data[((NI) 0)], ((NU8) 0));
		result = nsuFormatSingleElem(typetostr_243203[((*t).kind)- 0], LOC295);
	}
	break;
	default:
	{
		result = copyString(typetostr_243203[((*t).kind)- 0]);
	}
	break;
	}
	addtypeflags_243211((&result), t);
	}BeforeRet: ;
	return result;
}

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

N_NIMCALL(void, initsametypeclosure_245448)(Tsametypeclosure245429* Result) {
}

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

N_NIMCALL(Ttype215828*, skipgenericalias_246606)(Ttype215828* t) {
	Ttype215828* result;
{	result = 0;
	{
		NIM_BOOL LOC3;
		LOC3 = 0;
		LOC3 = isgenericalias_246584(t);
		if (!LOC3) goto LA4;
		result = lastson_218377(t);
	}
	goto LA1;
	LA4: ;
	{
		result = t;
	}
	LA1: ;
	goto BeforeRet;
	}BeforeRet: ;
	return result;
}

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

static N_INLINE(NI, find_245479)(TY245443* a, NI aLen0, TY245443 item) {
	NI result;
{	result = 0;
	{
		TY245443 i_245513;
		NI i_245544;
		memset((void*)(&i_245513), 0, sizeof(i_245513));
		i_245544 = ((NI) 0);
		{
			while (1) {
				if (!(i_245544 < aLen0)) goto LA3;
				i_245513 = a[i_245544];
				{
					NIM_BOOL LOC6;
					LOC6 = 0;
					LOC6 = HEX3DHEX3D_245515(i_245513, item);
					if (!LOC6) goto LA7;
					goto BeforeRet;
				}
				LA7: ;
				result += ((NI) 1);
				i_245544 += ((NI) 1);
			} LA3: ;
		}
	}
	result = ((NI) -1);
	}BeforeRet: ;
	return result;
}

static N_INLINE(NIM_BOOL, contains_245469)(TY245443* a, NI aLen0, TY245443 item) {
	NIM_BOOL result;
	NI LOC1;
{	result = 0;
	LOC1 = 0;
	LOC1 = find_245479(a, aLen0, item);
	result = (((NI) 0) <= LOC1);
	goto BeforeRet;
	}BeforeRet: ;
	return result;
}
N_NIMCALL(void, TMP2782)(void* p, NI op) {
	TY245442* a;
	NI LOC1;
	a = (TY245442*)p;
	LOC1 = 0;
	for (LOC1 = 0; LOC1 < a->Sup.len; LOC1++) {
	}
}

N_NIMCALL(NIM_BOOL, containsorincl_245451)(Tsametypeclosure245429* c, Ttype215828* a, Ttype215828* b) {
	NIM_BOOL result;
	NIM_BOOL LOC1;
	TY245443 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_245469((*c).s->data, (*c).s->Sup.len, LOC3);
	LA2: ;
	result = LOC1;
	{
		TY245443 LOC12;
		if (!!(result)) goto LA6;
		{
			if (!(*c).s == 0) goto LA10;
			unsureAsgnRef((void**) (&(*c).s), (TY245442*) newSeq((&NTI245442), 0));
		}
		LA10: ;
		LOC12.Field0 = (*a).Sup.id;
		LOC12.Field1 = (*b).Sup.id;
		(*c).s = (TY245442*) incrSeqV2(&((*c).s)->Sup, sizeof(TY245443));
		(*c).s->data[(*c).s->Sup.len] = LOC12;
		++(*c).s->Sup.len;
	}
	LA6: ;
	return result;
}

N_NIMCALL(NIM_BOOL, sametypeornilaux_245586)(Ttype215828* a, Ttype215828* b, Tsametypeclosure245429* 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_245580(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_246407)(Tnode215790* a, Tnode215790* b, Tsametypeclosure245429* c) {
	NIM_BOOL result;
{	result = 0;
	{
		if (!(a == b)) goto LA3;
		result = NIM_TRUE;
	}
	goto LA1;
	LA3: ;
	{
		NIM_BOOL LOC6;
		NIM_BOOL LOC7;
		Ttype215828* x;
		Ttype215828* 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_219113(x, 1050624);
			}
			LA18: ;
			{
				if (!!((y == NIM_NIL))) goto LA22;
				y = skiptypes_219113(y, 1050624);
			}
			LA22: ;
		}
		LA14: ;
		{
			NIM_BOOL LOC26;
			LOC26 = 0;
			LOC26 = sametypeornilaux_245586(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_218351(a);
					LOC39 = 0;
					LOC39 = sonslen_218351(b);
					if (!(LOC38 == LOC39)) goto LA40;
					{
						NI i_246519;
						NI HEX3Atmp_246523;
						NI LOC43;
						NI res_246526;
						i_246519 = 0;
						HEX3Atmp_246523 = 0;
						LOC43 = 0;
						LOC43 = sonslen_218351(a);
						HEX3Atmp_246523 = (NI)(LOC43 - ((NI) 1));
						res_246526 = ((NI) 0);
						{
							while (1) {
								if (!(res_246526 <= HEX3Atmp_246523)) goto LA45;
								i_246519 = res_246526;
								{
									NIM_BOOL LOC48;
									LOC48 = 0;
									LOC48 = sameobjecttree_246407((*a).kindU.S6.sons->data[i_246519], (*b).kindU.S6.sons->data[i_246519], c);
									if (!!(LOC48)) goto LA49;
									goto BeforeRet;
								}
								LA49: ;
								res_246526 += ((NI) 1);
							} LA45: ;
						}
					}
					result = NIM_TRUE;
				}
				LA40: ;
			}
			break;
			}
		}
		LA27: ;
	}
	goto LA1;
	LA10: ;
	LA1: ;
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NIM_BOOL, sameobjectstructures_246530)(Ttype215828* a, Ttype215828* b, Tsametypeclosure245429* c) {
	NIM_BOOL result;
{	result = 0;
	{
		NI LOC3;
		NI LOC4;
		LOC3 = 0;
		LOC3 = sonslen_218327(a);
		LOC4 = 0;
		LOC4 = sonslen_218327(b);
		if (!!((LOC3 == LOC4))) goto LA5;
		goto BeforeRet;
	}
	LA5: ;
	{
		NI i_246548;
		NI HEX3Atmp_246550;
		NI LOC8;
		NI res_246553;
		i_246548 = 0;
		HEX3Atmp_246550 = 0;
		LOC8 = 0;
		LOC8 = sonslen_218327(a);
		HEX3Atmp_246550 = (NI)(LOC8 - ((NI) 1));
		res_246553 = ((NI) 0);
		{
			while (1) {
				if (!(res_246553 <= HEX3Atmp_246550)) goto LA10;
				i_246548 = res_246553;
				{
					NIM_BOOL LOC13;
					LOC13 = 0;
					LOC13 = sametypeornilaux_245586((*a).sons->data[i_246548], (*b).sons->data[i_246548], c);
					if (!!(LOC13)) goto LA14;
					goto BeforeRet;
				}
				LA14: ;
				res_246553 += ((NI) 1);
			} LA10: ;
		}
	}
	{
		NIM_BOOL LOC18;
		LOC18 = 0;
		LOC18 = sameobjecttree_246407((*a).n, (*b).n, c);
		if (!!(LOC18)) goto LA19;
		goto BeforeRet;
	}
	LA19: ;
	result = NIM_TRUE;
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NIM_BOOL, sametuple_246210)(Ttype215828* a, Ttype215828* b, Tsametypeclosure245429* c) {
	NIM_BOOL result;
{	result = 0;
	{
		NI LOC3;
		NI LOC4;
		LOC3 = 0;
		LOC3 = sonslen_218327(a);
		LOC4 = 0;
		LOC4 = sonslen_218327(b);
		if (!(LOC3 == LOC4)) goto LA5;
		result = NIM_TRUE;
		{
			NI i_246228;
			NI HEX3Atmp_246318;
			NI LOC8;
			NI res_246321;
			i_246228 = 0;
			HEX3Atmp_246318 = 0;
			LOC8 = 0;
			LOC8 = sonslen_218327(a);
			HEX3Atmp_246318 = (NI)(LOC8 - ((NI) 1));
			res_246321 = ((NI) 0);
			{
				while (1) {
					Ttype215828* x;
					Ttype215828* y;
					if (!(res_246321 <= HEX3Atmp_246318)) goto LA10;
					i_246228 = res_246321;
					x = (*a).sons->data[i_246228];
					y = (*b).sons->data[i_246228];
					{
						if (!(((*c).flags &(1U<<((NU)(((NU8) 0))&7U)))!=0)) goto LA13;
						x = skiptypes_219113(x, 1050624);
						y = skiptypes_219113(y, 1050624);
					}
					LA13: ;
					result = sametypeaux_245580(x, y, c);
					{
						if (!!(result)) goto LA17;
						goto BeforeRet;
					}
					LA17: ;
					res_246321 += ((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_246288;
				NI HEX3Atmp_246326;
				NI LOC28;
				NI res_246329;
				i_246288 = 0;
				HEX3Atmp_246326 = 0;
				LOC28 = 0;
				LOC28 = sonslen_218351((*a).n);
				HEX3Atmp_246326 = (NI)(LOC28 - ((NI) 1));
				res_246329 = ((NI) 0);
				{
					while (1) {
						if (!(res_246329 <= HEX3Atmp_246326)) goto LA30;
						i_246288 = res_246329;
						{
							NIM_BOOL LOC33;
							Tsym215822* x;
							Tsym215822* y;
							LOC33 = 0;
							LOC33 = ((*(*(*a).n).kindU.S6.sons->data[i_246288]).kind == ((NU8) 3));
							if (!(LOC33)) goto LA34;
							LOC33 = ((*(*(*b).n).kindU.S6.sons->data[i_246288]).kind == ((NU8) 3));
							LA34: ;
							if (!LOC33) goto LA35;
							x = (*(*(*a).n).kindU.S6.sons->data[i_246288]).kindU.S4.sym;
							y = (*(*(*b).n).kindU.S6.sons->data[i_246288]).kindU.S4.sym;
							result = ((*(*x).name).Sup.id == (*(*y).name).Sup.id);
							{
								if (!!(result)) goto LA39;
								goto LA27;
							}
							LA39: ;
						}
						goto LA31;
						LA35: ;
						{
							internalerror_188100((*(*a).n).info, ((NimStringDesc*) &TMP2783));
						}
						LA31: ;
						res_246329 += ((NI) 1);
					} LA30: ;
				}
			} LA27: ;
		}
		LA25: ;
	}
	LA5: ;
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NIM_BOOL, samechildrenaux_246557)(Ttype215828* a, Ttype215828* b, Tsametypeclosure245429* c) {
	NIM_BOOL result;
{	result = 0;
	{
		NI LOC3;
		NI LOC4;
		LOC3 = 0;
		LOC3 = sonslen_218327(a);
		LOC4 = 0;
		LOC4 = sonslen_218327(b);
		if (!!((LOC3 == LOC4))) goto LA5;
		result = NIM_FALSE;
		goto BeforeRet;
	}
	LA5: ;
	result = NIM_TRUE;
	{
		NI i_246575;
		NI HEX3Atmp_246577;
		NI LOC8;
		NI res_246580;
		i_246575 = 0;
		HEX3Atmp_246577 = 0;
		LOC8 = 0;
		LOC8 = sonslen_218327(a);
		HEX3Atmp_246577 = (NI)(LOC8 - ((NI) 1));
		res_246580 = ((NI) 0);
		{
			while (1) {
				if (!(res_246580 <= HEX3Atmp_246577)) goto LA10;
				i_246575 = res_246580;
				result = sametypeornilaux_245586((*a).sons->data[i_246575], (*b).sons->data[i_246575], c);
				{
					if (!!(result)) goto LA13;
					goto BeforeRet;
				}
				LA13: ;
				res_246580 += ((NI) 1);
			} LA10: ;
		}
	}
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NIM_BOOL, sameconstraints_245758)(Tnode215790* a, Tnode215790* b) {
	NIM_BOOL result;
{	result = 0;
	{
		NI LOC3;
		NI LOC4;
		NimStringDesc* LOC7;
		LOC3 = 0;
		LOC3 = len_216059(a);
		LOC4 = 0;
		LOC4 = len_216059(b);
		if (!!((LOC3 == LOC4))) goto LA5;
		LOC7 = 0;
		LOC7 = HEX24_188183(TMP2784);
		internalerror_188113(LOC7);
	}
	LA5: ;
	{
		NI i_245790;
		NI HEX3Atmp_245796;
		NI LOC9;
		NI res_245799;
		i_245790 = 0;
		HEX3Atmp_245796 = 0;
		LOC9 = 0;
		LOC9 = len_216059(a);
		HEX3Atmp_245796 = (LOC9 - 1);
		res_245799 = ((NI) 1);
		{
			while (1) {
				if (!(res_245799 <= HEX3Atmp_245796)) goto LA11;
				i_245790 = res_245799;
				{
					Tnode215790* LOC14;
					Tnode215790* LOC15;
					NIM_BOOL LOC16;
					LOC14 = 0;
					LOC14 = HEX5BHEX5D_216238(a, i_245790);
					LOC15 = 0;
					LOC15 = HEX5BHEX5D_216238(b, i_245790);
					LOC16 = 0;
					LOC16 = exprstructuralequivalent_240099((*(*LOC14).kindU.S4.sym).constraint, (*(*LOC15).kindU.S4.sym).constraint, NIM_FALSE);
					if (!!(LOC16)) goto LA17;
					result = NIM_FALSE;
					goto BeforeRet;
				}
				LA17: ;
				res_245799 += ((NI) 1);
			} LA11: ;
		}
	}
	result = NIM_TRUE;
	goto BeforeRet;
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NIM_BOOL, sametypeaux_245580)(Ttype215828* x, Ttype215828* y, Tsametypeclosure245429* c) {
	NIM_BOOL result;
	Ttype215828* a;
	Ttype215828* b;
{	result = 0;
	{
		if (!(x == y)) goto LA3;
		result = NIM_TRUE;
		goto BeforeRet;
	}
	LA3: ;
	a = skiptypes_219113(x, 2048);
	b = skiptypes_219113(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: ;
	{
		Ttype215828* lhs;
		Ttype215828* rhs;
		if (!((*x).kind == ((NU8) 11))) goto LA28;
		lhs = skipgenericalias_246606(x);
		rhs = skipgenericalias_246606(y);
		{
			NIM_BOOL LOC32;
			Ttype215828* LOC34;
			Ttype215828* LOC35;
			LOC32 = 0;
			LOC32 = !(((*rhs).kind == ((NU8) 11)));
			if (LOC32) goto LA33;
			LOC34 = 0;
			LOC34 = base_241021(lhs);
			LOC35 = 0;
			LOC35 = base_241021(rhs);
			LOC32 = !((LOC34 == LOC35));
			LA33: ;
			if (!LOC32) goto LA36;
			result = NIM_FALSE;
			goto BeforeRet;
		}
		LA36: ;
		{
			NI i_247095;
			NI HEX3Atmp_247380;
			NI LOC39;
			NI res_247383;
			i_247095 = 0;
			HEX3Atmp_247380 = 0;
			LOC39 = 0;
			LOC39 = len_218339(lhs);
			HEX3Atmp_247380 = (NI)(LOC39 - ((NI) 2));
			res_247383 = ((NI) 1);
			{
				while (1) {
					Ttype215828* ff;
					Ttype215828* aa;
					if (!(res_247383 <= HEX3Atmp_247380)) goto LA41;
					i_247095 = res_247383;
					ff = (*rhs).sons->data[i_247095];
					aa = (*lhs).sons->data[i_247095];
					{
						NIM_BOOL LOC44;
						LOC44 = 0;
						LOC44 = sametypeaux_245580(ff, aa, c);
						if (!!(LOC44)) goto LA45;
						result = NIM_FALSE;
						goto BeforeRet;
					}
					LA45: ;
					res_247383 += ((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_246622(a, b);
	}
	break;
	case ((NU8) 59):
	case ((NU8) 60):
	{
		NIM_BOOL LOC49;
		LOC49 = 0;
		LOC49 = exprstructuralequivalent_240099((*a).n, (*b).n, NIM_FALSE);
		if (!(LOC49)) goto LA50;
		LOC49 = sameflags_246622(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_218339(a);
			LOC57 = 0;
			LOC57 = len_218339(b);
			LOC54 = (LOC56 == LOC57);
			LA55: ;
			LOC53 = LOC54;
			if (!(LOC53)) goto LA58;
			LOC59 = 0;
			LOC59 = len_218339(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_245451(c, a, b);
					if (!LOC69) goto LA70;
					result = NIM_TRUE;
					goto BeforeRet;
				}
				LA70: ;
			}
			LA62: ;
			result = sametypeaux_245580((*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_245451(c, a, b);
						if (!LOC91) goto LA92;
						result = NIM_TRUE;
						goto BeforeRet;
					}
					LA92: ;
				}
				LA84: ;
				LOC94 = 0;
				LOC94 = sameobjectstructures_246530(a, b, c);
				if (!(LOC94)) goto LA95;
				LOC94 = sameflags_246622(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_245451(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_246622(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_245580((*a).sons->data[((NI) 0)], (*b).sons->data[((NI) 0)], c);
					}
					LA125: ;
				}
				LA116: ;
			}
			LA114: ;
		}
		goto LA107;
		LA109: ;
		{
			NIM_BOOL LOC128;
			LOC128 = 0;
			LOC128 = sametypeaux_245580((*a).sons->data[((NI) 0)], (*b).sons->data[((NI) 0)], c);
			if (!(LOC128)) goto LA129;
			LOC128 = sameflags_246622(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_246622(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_245451(c, a, b);
				if (!LOC142) goto LA143;
				result = NIM_TRUE;
				goto BeforeRet;
			}
			LA143: ;
		}
		LA135: ;
		LOC145 = 0;
		LOC145 = sametuple_246210(a, b, c);
		if (!(LOC145)) goto LA146;
		LOC145 = sameflags_246622(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_245451(c, a, b);
					if (!LOC162) goto LA163;
					result = NIM_TRUE;
					goto BeforeRet;
				}
				LA163: ;
			}
			LA155: ;
			LOC165 = 0;
			LOC165 = samechildrenaux_246557(x, y, c);
			if (!(LOC165)) goto LA166;
			LOC165 = sameflags_246622(a, b);
			LA166: ;
			result = LOC165;
		}
		goto LA148;
		LA153: ;
		{
			result = sameflags_246622(a, b);
		}
		LA148: ;
	}
	break;
	case ((NU8) 12):
	{
		NIM_BOOL LOC169;
		LOC169 = 0;
		LOC169 = samechildrenaux_246557(a, b, c);
		if (!(LOC169)) goto LA170;
		LOC169 = sameflags_246622(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_245451(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_246557(a, b, c);
		if (!(LOC194)) goto LA195;
		LOC194 = sameflags_246622(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_245758((*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_245451(c, a, b);
				if (!LOC216) goto LA217;
				result = NIM_TRUE;
				goto BeforeRet;
			}
			LA217: ;
		}
		LA209: ;
		LOC219 = 0;
		LOC220 = 0;
		LOC220 = sametypeornilaux_245586((*a).sons->data[((NI) 0)], (*b).sons->data[((NI) 0)], c);
		if (!(LOC220)) goto LA221;
		LOC220 = samevalue_222189((*(*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_222189((*(*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_247404)(Ttype215828* x, Ttype215828* y, NU8 cmp, NU8 flags) {
	NIM_BOOL result;
	Tsametypeclosure245429 c;
	result = 0;
	memset((void*)(&c), 0, sizeof(c));
	chckNil((void*)(&c));
	memset((void*)(&c), 0, sizeof(c));
	initsametypeclosure_245448((&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_245580(x, y, (&c));
	}
	LA1: ;
	return result;
}

N_NIMCALL(NIM_BOOL, iterovernode_241866)(Intset212035* marker, Tnode215790* n, Ttypeiter241025 iter, TNimObject* closure) {
	NIM_BOOL result;
{	result = 0;
	{
		if (!!((n == NIM_NIL))) goto LA3;
		switch ((*n).kind) {
		case ((NU8) 0) ... ((NU8) 23):
		{
			result = iterovertypeaux_241859(marker, (*n).typ, iter, closure);
		}
		break;
		default:
		{
			{
				NI i_241897;
				NI HEX3Atmp_241900;
				NI LOC8;
				NI res_241903;
				i_241897 = 0;
				HEX3Atmp_241900 = 0;
				LOC8 = 0;
				LOC8 = sonslen_218351(n);
				HEX3Atmp_241900 = (NI)(LOC8 - ((NI) 1));
				res_241903 = ((NI) 0);
				{
					while (1) {
						if (!(res_241903 <= HEX3Atmp_241900)) goto LA10;
						i_241897 = res_241903;
						result = iterovernode_241866(marker, (*n).kindU.S6.sons->data[i_241897], iter, closure);
						{
							if (!result) goto LA13;
							goto BeforeRet;
						}
						LA13: ;
						res_241903 += ((NI) 1);
					} LA10: ;
				}
			}
		}
		break;
		}
	}
	LA3: ;
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NIM_BOOL, iterovertypeaux_241859)(Intset212035* marker, Ttype215828* t, Ttypeiter241025 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_212862(marker, (*t).Sup.id);
		if (!!(LOC11)) goto LA12;
		switch ((*t).kind) {
		case ((NU8) 11):
		case ((NU8) 10):
		{
			Ttype215828* LOC15;
			LOC15 = 0;
			LOC15 = lastson_218377(t);
			result = iterovertypeaux_241859(marker, LOC15, iter, closure);
		}
		break;
		default:
		{
			{
				NI i_241938;
				NI HEX3Atmp_241952;
				NI LOC18;
				NI res_241955;
				i_241938 = 0;
				HEX3Atmp_241952 = 0;
				LOC18 = 0;
				LOC18 = sonslen_218327(t);
				HEX3Atmp_241952 = (NI)(LOC18 - ((NI) 1));
				res_241955 = ((NI) 0);
				{
					while (1) {
						if (!(res_241955 <= HEX3Atmp_241952)) goto LA20;
						i_241938 = res_241955;
						result = iterovertypeaux_241859(marker, (*t).sons->data[i_241938], iter, closure);
						{
							if (!result) goto LA23;
							goto BeforeRet;
						}
						LA23: ;
						res_241955 += ((NI) 1);
					} LA20: ;
				}
			}
			{
				if (!!(((*t).n == NIM_NIL))) goto LA27;
				result = iterovernode_241866(marker, (*t).n, iter, closure);
			}
			LA27: ;
		}
		break;
		}
	}
	LA12: ;
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NIM_BOOL, iterovertype_241038)(Ttype215828* t, Ttypeiter241025 iter, TNimObject* closure) {
	NIM_BOOL result;
	Intset212035 marker;
	result = 0;
	memset((void*)(&marker), 0, sizeof(marker));
	chckNil((void*)(&marker));
	memset((void*)(&marker), 0, sizeof(marker));
	initintset_212885((&marker));
	result = iterovertypeaux_241859((&marker), t, iter, closure);
	return result;
}

N_NIMCALL(NIM_BOOL, containsgenerictypeiter_249413)(Ttype215828* 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;
		{
			Ttype215828* LOC11;
			LOC11 = 0;
			LOC11 = base_241021(t);
			if (!((*LOC11).kind == ((NU8) 0))) goto LA12;
			result = NIM_TRUE;
			goto BeforeRet;
		}
		LA12: ;
		{
			Ttype215828* LOC16;
			NIM_BOOL LOC17;
			LOC16 = 0;
			LOC16 = base_241021(t);
			LOC17 = 0;
			LOC17 = containsgenerictypeiter_249413(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_249492)(Ttype215828* t) {
	NIM_BOOL result;
	result = 0;
	result = iterovertype_241038(t, containsgenerictypeiter_249413, NIM_NIL);
	return result;
}

N_NIMCALL(NI64, getordvalue_241118)(Tnode215790* 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_241118((*n).kindU.S6.sons->data[((NI) 1)]);
	}
	break;
	default:
	{
		localerror_188080((*n).info, ((NU16) 78), ((NimStringDesc*) &TMP2119));
		result = IL64(0);
	}
	break;
	}
	return result;
}

N_NIMCALL(NI64, firstord_241001)(Ttype215828* 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_241001((*t).sons->data[((NI) 0)]);
	}
	break;
	case ((NU8) 16):
	case ((NU8) 4):
	{
		result = firstord_241001((*t).sons->data[((NI) 0)]);
	}
	break;
	case ((NU8) 20):
	{
		result = getordvalue_241118((*(*t).n).kindU.S6.sons->data[((NI) 0)]);
	}
	break;
	case ((NU8) 31):
	{
		{
			if (!(intsize_168615 == ((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_218327(t);
			LOC19 = (((NI) 0) < LOC20);
			if (!(LOC19)) goto LA21;
			LOC19 = !(((*t).sons->data[((NI) 0)] == NIM_NIL));
			LA21: ;
			if (!LOC19) goto LA22;
			result = firstord_241001((*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):
	{
		Ttype215828* LOC26;
		LOC26 = 0;
		LOC26 = lastson_218377(t);
		result = firstord_241001(LOC26);
	}
	break;
	case ((NU8) 15):
	{
		{
			NI LOC30;
			Ttype215828* LOC33;
			LOC30 = 0;
			LOC30 = len_218339(t);
			if (!(((NI) 0) < LOC30)) goto LA31;
			LOC33 = 0;
			LOC33 = lastson_218377(t);
			result = firstord_241001(LOC33);
		}
		goto LA28;
		LA31: ;
		{
			NimStringDesc* LOC35;
			LOC35 = 0;
			LOC35 = rawNewString(reprEnum((*t).kind, (&NTI215241))->Sup.len + 24);
appendString(LOC35, ((NimStringDesc*) &TMP2794));
appendString(LOC35, reprEnum((*t).kind, (&NTI215241)));
appendChar(LOC35, 41);
			internalerror_188113(LOC35);
		}
		LA28: ;
	}
	break;
	default:
	{
		NimStringDesc* LOC37;
		LOC37 = 0;
		LOC37 = rawNewString(reprEnum((*t).kind, (&NTI215241))->Sup.len + 24);
appendString(LOC37, ((NimStringDesc*) &TMP2794));
appendString(LOC37, reprEnum((*t).kind, (&NTI215241)));
appendChar(LOC37, 41);
		internalerror_188113(LOC37);
		result = IL64(0);
	}
	break;
	}
	return result;
}

N_NIMCALL(NI64, lastord_241004)(Ttype215828* 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_241004((*t).sons->data[((NI) 0)]);
	}
	break;
	case ((NU8) 16):
	case ((NU8) 4):
	{
		result = lastord_241004((*t).sons->data[((NI) 0)]);
	}
	break;
	case ((NU8) 20):
	{
		result = getordvalue_241118((*(*t).n).kindU.S6.sons->data[((NI) 1)]);
	}
	break;
	case ((NU8) 31):
	{
		{
			if (!(intsize_168615 == ((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_168615 == ((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_218351((*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):
	{
		Ttype215828* LOC29;
		LOC29 = 0;
		LOC29 = lastson_218377(t);
		result = lastord_241004(LOC29);
	}
	break;
	case ((NU8) 50):
	{
		result = IL64(0);
	}
	break;
	case ((NU8) 15):
	{
		{
			NI LOC34;
			Ttype215828* LOC37;
			LOC34 = 0;
			LOC34 = len_218339(t);
			if (!(((NI) 0) < LOC34)) goto LA35;
			LOC37 = 0;
			LOC37 = lastson_218377(t);
			result = lastord_241004(LOC37);
		}
		goto LA32;
		LA35: ;
		{
			NimStringDesc* LOC39;
			LOC39 = 0;
			LOC39 = rawNewString(reprEnum((*t).kind, (&NTI215241))->Sup.len + 23);
appendString(LOC39, ((NimStringDesc*) &TMP2795));
appendString(LOC39, reprEnum((*t).kind, (&NTI215241)));
appendChar(LOC39, 41);
			internalerror_188113(LOC39);
		}
		LA32: ;
	}
	break;
	default:
	{
		NimStringDesc* LOC41;
		LOC41 = 0;
		LOC41 = rawNewString(reprEnum((*t).kind, (&NTI215241))->Sup.len + 23);
appendString(LOC41, ((NimStringDesc*) &TMP2795));
appendString(LOC41, reprEnum((*t).kind, (&NTI215241)));
appendChar(LOC41, 41);
		internalerror_188113(LOC41);
		result = IL64(0);
	}
	break;
	}
	return result;
}

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

N_NIMCALL(NIM_BOOL, isordinaltype_241057)(Ttype215828* 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_241057((*t).sons->data[((NI) 0)]);
	LA4: ;
	LOC1 = LOC3;
	LA2: ;
	result = LOC1;
	return result;
}

N_NIMCALL(NIM_BOOL, sametype_245628)(Ttype215828* a, Ttype215828* b, NU8 flags) {
	NIM_BOOL result;
	Tsametypeclosure245429 c;
	result = 0;
	memset((void*)(&c), 0, sizeof(c));
	chckNil((void*)(&c));
	memset((void*)(&c), 0, sizeof(c));
	initsametypeclosure_245448((&c));
	c.flags = flags;
	result = sametypeaux_245580(a, b, (&c));
	return result;
}

N_NIMCALL(NIM_BOOL, sameobjecttypes_246344)(Ttype215828* a, Ttype215828* 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;
			Tsametypeclosure245429 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_245448((&c));
			result = sametypeaux_245580(a, b, (&c));
		}
		LA10: ;
	}
	LA1: ;
	return result;
}

N_NIMCALL(NI, inheritancediff_247442)(Ttype215828* a, Ttype215828* b) {
	NI result;
	Ttype215828* x;
	Ttype215828* 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_219113(x, IL64(211106247215360));
			{
				NIM_BOOL LOC13;
				LOC13 = 0;
				LOC13 = sameobjecttypes_246344(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_219113(y, IL64(211106247215360));
			{
				NIM_BOOL LOC20;
				LOC20 = 0;
				LOC20 = sameobjecttypes_246344(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_249552)(Ttype215828* a, Ttype215828* 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_247442(a, b);
	}
	LA1: ;
	return result;
}

N_NIMCALL(NIM_BOOL, compatibleeffectsaux_249575)(Tnode215790* se, Tnode215790* re) {
	NIM_BOOL result;
{	result = 0;
	{
		if (!re == 0) goto LA3;
		result = NIM_FALSE;
		goto BeforeRet;
	}
	LA3: ;
	{
		Tnode215790* r_249589;
		r_249589 = 0;
		{
			NI i_249607;
			NI HEX3Atmp_249609;
			NI LOC7;
			NI res_249611;
			i_249607 = 0;
			HEX3Atmp_249609 = 0;
			LOC7 = 0;
			LOC7 = len_216059(re);
			HEX3Atmp_249609 = (LOC7 - 1);
			res_249611 = ((NI) 0);
			{
				while (1) {
					if (!(res_249611 <= HEX3Atmp_249609)) goto LA9;
					i_249607 = res_249611;
					r_249589 = (*re).kindU.S6.sons->data[i_249607];
					{
						{
							Tnode215790* s_249591;
							s_249591 = 0;
							{
								NI i_249597;
								NI HEX3Atmp_249599;
								NI LOC13;
								NI res_249601;
								i_249597 = 0;
								HEX3Atmp_249599 = 0;
								LOC13 = 0;
								LOC13 = len_216059(se);
								HEX3Atmp_249599 = (LOC13 - 1);
								res_249601 = ((NI) 0);
								{
									while (1) {
										if (!(res_249601 <= HEX3Atmp_249599)) goto LA15;
										i_249597 = res_249601;
										s_249591 = (*se).kindU.S6.sons->data[i_249597];
										{
											NI LOC18;
											LOC18 = 0;
											LOC18 = safeinheritancediff_249552((*r_249589).typ, (*s_249591).typ);
											if (!(LOC18 <= ((NI) 0))) goto LA19;
											goto LA10;
										}
										LA19: ;
										res_249601 += ((NI) 1);
									} LA15: ;
								}
							}
						}
						result = NIM_FALSE;
						goto BeforeRet;
					} LA10: ;
					res_249611 += ((NI) 1);
				} LA9: ;
			}
		}
	}
	result = NIM_TRUE;
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NIM_BOOL, compatibleeffects_249614)(Ttype215828* formal, Ttype215828* actual) {
	NIM_BOOL result;
	Tnode215790* 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_188183(TMP2798);
		internalerror_188113(LOC5);
	}
	LA3: ;
	{
		NimStringDesc* LOC10;
		if (!!(((*(*(*actual).n).kindU.S6.sons->data[((NI) 0)]).kind == ((NU8) 152)))) goto LA8;
		LOC10 = 0;
		LOC10 = HEX24_188183(TMP2799);
		internalerror_188113(LOC10);
	}
	LA8: ;
	spec = (*(*formal).n).kindU.S6.sons->data[((NI) 0)];
	{
		NI LOC13;
		Tnode215790* real;
		Tnode215790* se;
		Tnode215790* st;
		LOC13 = 0;
		LOC13 = len_216059(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_216059(real);
				if (!(LOC24 == ((NI) 0))) goto LA25;
				result = NIM_FALSE;
				goto BeforeRet;
			}
			LA25: ;
			result = compatibleeffectsaux_249575(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_216059(real);
				if (!(LOC39 == ((NI) 0))) goto LA40;
				result = NIM_FALSE;
				goto BeforeRet;
			}
			LA40: ;
			result = compatibleeffectsaux_249575(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_241324)(Tsym215822* sym, NU8 prefer) {
	NimStringDesc* result;
	NimStringDesc* LOC1;
	Tnode215790* 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_241345;
		NI HEX3Atmp_241376;
		NI LOC3;
		NI res_241379;
		i_241345 = 0;
		HEX3Atmp_241376 = 0;
		LOC3 = 0;
		LOC3 = sonslen_218351(n);
		HEX3Atmp_241376 = (NI)(LOC3 - ((NI) 1));
		res_241379 = ((NI) 1);
		{
			while (1) {
				Tnode215790* p;
				if (!(res_241379 <= HEX3Atmp_241376)) goto LA5;
				i_241345 = res_241379;
				p = (*n).kindU.S6.sons->data[i_241345];
				{
					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*) &TMP2220));
					LOC10 = 0;
					LOC10 = typetostring_241017((*(*p).kindU.S4.sym).typ, prefer);
					result = resizeString(result, LOC10->Sup.len + 0);
appendString(result, LOC10);
					{
						NI LOC13;
						LOC13 = 0;
						LOC13 = sonslen_218351(n);
						if (!!((i_241345 == (NI)(LOC13 - ((NI) 1))))) goto LA14;
						result = resizeString(result, 2);
appendString(result, ((NimStringDesc*) &TMP2187));
					}
					LA14: ;
				}
				goto LA6;
				LA8: ;
				{
					internalerror_188113(((NimStringDesc*) &TMP2807));
				}
				LA6: ;
				res_241379 += ((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_241017((*(*n).kindU.S6.sons->data[((NI) 0)]).typ, prefer);
		LOC21 = rawNewString(LOC22->Sup.len + 2);
appendString(LOC21, ((NimStringDesc*) &TMP2220));
appendString(LOC21, LOC22);
		result = resizeString(result, LOC21->Sup.len + 0);
appendString(result, LOC21);
	}
	LA19: ;
	return result;
}

N_NIMCALL(NIM_BOOL, isemptycontainer_250113)(Ttype215828* 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):
	{
		Ttype215828* LOC5;
		LOC5 = 0;
		LOC5 = lastson_218377(t);
		result = isemptycontainer_250113(LOC5);
	}
	break;
	default:
	{
		result = NIM_FALSE;
	}
	break;
	}
	return result;
}

N_NIMCALL(NI64, align_249049)(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_242297)(Ttype215828* 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_249062)(Tnode215790* 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_249062((*n).kindU.S6.sons->data[((NI) 0)], a, curroffset);
		maxsize = IL64(0);
		maxalign = IL64(1);
		{
			NI i_249213;
			NI HEX3Atmp_249248;
			NI LOC3;
			NI res_249251;
			i_249213 = 0;
			HEX3Atmp_249248 = 0;
			LOC3 = 0;
			LOC3 = sonslen_218351(n);
			HEX3Atmp_249248 = (NI)(LOC3 - ((NI) 1));
			res_249251 = ((NI) 1);
			{
				while (1) {
					if (!(res_249251 <= HEX3Atmp_249248)) goto LA5;
					i_249213 = res_249251;
					switch ((*(*n).kindU.S6.sons->data[i_249213]).kind) {
					case ((NU8) 85):
					case ((NU8) 88):
					{
						Tnode215790* LOC7;
						LOC7 = 0;
						LOC7 = lastson_218364((*n).kindU.S6.sons->data[i_249213]);
						res = computerecsizeaux_249062(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_188113(((NimStringDesc*) &TMP2968));
					}
					break;
					}
					res_249251 += ((NI) 1);
				} LA5: ;
			}
		}
		LOC13 = 0;
		LOC13 = align_249049((*curroffset), maxalign);
		(*curroffset) = (NI64)(LOC13 + maxsize);
		LOC14 = 0;
		LOC14 = align_249049(result, maxalign);
		result = (NI64)(LOC14 + maxsize);
		(*a) = maxalign;
	}
	break;
	case ((NU8) 138):
	{
		result = IL64(0);
		maxalign = IL64(1);
		{
			NI i_249236;
			NI HEX3Atmp_249256;
			NI LOC17;
			NI res_249259;
			i_249236 = 0;
			HEX3Atmp_249256 = 0;
			LOC17 = 0;
			LOC17 = sonslen_218351(n);
			HEX3Atmp_249256 = (NI)(LOC17 - ((NI) 1));
			res_249259 = ((NI) 0);
			{
				while (1) {
					NI64 LOC24;
					NI64 LOC25;
					if (!(res_249259 <= HEX3Atmp_249256)) goto LA19;
					i_249236 = res_249259;
					res = computerecsizeaux_249062((*n).kindU.S6.sons->data[i_249236], (&b), curroffset);
					{
						if (!(res < IL64(0))) goto LA22;
						result = res;
						goto BeforeRet;
					}
					LA22: ;
					LOC24 = 0;
					LOC24 = align_249049((*curroffset), b);
					(*curroffset) = (NI64)(LOC24 + res);
					LOC25 = 0;
					LOC25 = align_249049(result, b);
					result = (NI64)(LOC25 + res);
					{
						if (!(maxalign < b)) goto LA28;
						maxalign = b;
					}
					LA28: ;
					res_249259 += ((NI) 1);
				} LA19: ;
			}
		}
		(*a) = maxalign;
	}
	break;
	case ((NU8) 3):
	{
		result = computesizeaux_249057((*(*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_249057)(Ttype215828* 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_168615));
		(*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_168616));
		(*a) = result;
	}
	break;
	case ((NU8) 25):
	{
		{
			if (!((*typ).callconv == ((NU8) 8))) goto LA19;
			result = ((NI64) ((NI)(((NI) 2) * ptrsize_168617)));
		}
		goto LA17;
		LA19: ;
		{
			result = ((NI64) (ptrsize_168617));
		}
		LA17: ;
		(*a) = ((NI64) (ptrsize_168617));
	}
	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):
	{
		Ttype215828* base;
		base = lastson_218377(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_168617));
		}
		LA23: ;
		(*a) = result;
	}
	break;
	case ((NU8) 16):
	case ((NU8) 4):
	{
		NI64 elemsize;
		NI64 LOC37;
		elemsize = computesizeaux_249057((*typ).sons->data[((NI) 1)], a);
		{
			if (!(elemsize < IL64(0))) goto LA35;
			result = elemsize;
			goto BeforeRet;
		}
		LA35: ;
		LOC37 = 0;
		LOC37 = lengthord_241007((*typ).sons->data[((NI) 0)]);
		result = (NI64)(LOC37 * elemsize);
	}
	break;
	case ((NU8) 14):
	{
		{
			NI64 LOC41;
			LOC41 = 0;
			LOC41 = firstord_241001(typ);
			if (!(LOC41 < IL64(0))) goto LA42;
			result = IL64(4);
		}
		goto LA39;
		LA42: ;
		{
			length = lastord_241004(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_241007((*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_249049(length, IL64(8));
				if (!(((NI) ((NI64)(LOC76 % IL64(8)))) == ((NI) 0))) goto LA77;
				LOC79 = 0;
				LOC79 = align_249049(length, IL64(8));
				result = (NI64)(LOC79 / IL64(8));
			}
			goto LA62;
			LA77: ;
			{
				NI64 LOC81;
				LOC81 = 0;
				LOC81 = align_249049(length, IL64(8));
				result = (NI64)((NI64)(LOC81 / IL64(8)) + IL64(1));
			}
			LA62: ;
		}
		LA57: ;
		(*a) = result;
	}
	break;
	case ((NU8) 20):
	{
		result = computesizeaux_249057((*typ).sons->data[((NI) 0)], a);
	}
	break;
	case ((NU8) 18):
	{
		result = IL64(0);
		maxalign = IL64(1);
		{
			NI i_249328;
			NI HEX3Atmp_249351;
			NI LOC85;
			NI res_249354;
			i_249328 = 0;
			HEX3Atmp_249351 = 0;
			LOC85 = 0;
			LOC85 = sonslen_218327(typ);
			HEX3Atmp_249351 = (NI)(LOC85 - ((NI) 1));
			res_249354 = ((NI) 0);
			{
				while (1) {
					NI64 LOC92;
					if (!(res_249354 <= HEX3Atmp_249351)) goto LA87;
					i_249328 = res_249354;
					res = computesizeaux_249057((*typ).sons->data[i_249328], a);
					{
						if (!(res < IL64(0))) goto LA90;
						result = res;
						goto BeforeRet;
					}
					LA90: ;
					maxalign = ((maxalign >= (*a)) ? maxalign : (*a));
					LOC92 = 0;
					LOC92 = align_249049(result, (*a));
					result = (NI64)(LOC92 + res);
					res_249354 += ((NI) 1);
				} LA87: ;
			}
		}
		result = align_249049(result, maxalign);
		(*a) = maxalign;
	}
	break;
	case ((NU8) 17):
	{
		{
			if (!!(((*typ).sons->data[((NI) 0)] == NIM_NIL))) goto LA96;
			result = computesizeaux_249057((*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_242297(typ);
			if (!LOC103) goto LA104;
			result = ((NI64) (intsize_168615));
			maxalign = result;
		}
		goto LA94;
		LA104: ;
		{
			result = IL64(0);
			maxalign = IL64(1);
		}
		LA94: ;
		curroffset = result;
		result = computerecsizeaux_249062((*typ).n, a, (&curroffset));
		{
			if (!(result < IL64(0))) goto LA109;
			goto BeforeRet;
		}
		LA109: ;
		{
			if (!((*a) < maxalign)) goto LA113;
			(*a) = maxalign;
		}
		LA113: ;
		result = align_249049(result, (*a));
	}
	break;
	case ((NU8) 11):
	case ((NU8) 13):
	case ((NU8) 10):
	case ((NU8) 47):
	case ((NU8) 46):
	case ((NU8) 49):
	{
		Ttype215828* LOC116;
		LOC116 = 0;
		LOC116 = lastson_218377(typ);
		result = computesizeaux_249057(LOC116, a);
	}
	break;
	case ((NU8) 8):
	{
		Ttype215828* LOC118;
		LOC118 = 0;
		LOC118 = base_241021(typ);
		result = computesizeaux_249057(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_241121)(Ttype215828* typ) {
	NI64 result;
	NI64 a;
	result = 0;
	a = IL64(1);
	result = computesizeaux_249057(typ, (&a));
	return result;
}

N_NIMCALL(NI64, getsize_241124)(Ttype215828* typ) {
	NI64 result;
	result = 0;
	result = computesize_241121(typ);
	{
		NimStringDesc* LOC5;
		if (!(result < IL64(0))) goto LA3;
		LOC5 = 0;
		LOC5 = rawNewString(reprEnum((*typ).kind, (&NTI215241))->Sup.len + 9);
appendString(LOC5, ((NimStringDesc*) &TMP2969));
appendString(LOC5, reprEnum((*typ).kind, (&NTI215241)));
		internalerror_188113(LOC5);
	}
	LA3: ;
	return result;
}

N_NIMCALL(NIM_BOOL, sametypeornil_245638)(Ttype215828* a, Ttype215828* 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_245628(a, b, flags);
		}
		LA6: ;
	}
	LA1: ;
	return result;
}

N_NIMCALL(NIM_BOOL, enumhasholes_241060)(Ttype215828* t) {
	NIM_BOOL result;
	Ttype215828* 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_245681)(Tsym215822* a, Tsym215822* b) {
	NU8 result;
	result = 0;
	{
		NIM_BOOL LOC3;
		LOC3 = 0;
		LOC3 = sametypeornil_245638((*a).typ, (*b).typ, 4);
		if (!(LOC3)) goto LA4;
		LOC3 = exprstructuralequivalent_240099((*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_240099((*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_241053)(Tnode215790* a, Tnode215790* b) {
	NU8 result;
	NI length;
{	result = 0;
	result = ((NU8) 1);
	length = sonslen_218351(a);
	{
		NI LOC3;
		LOC3 = 0;
		LOC3 = sonslen_218351(b);
		if (!!((length == LOC3))) goto LA4;
		result = ((NU8) 0);
	}
	goto LA1;
	LA4: ;
	{
		{
			NI i_245820;
			NI HEX3Atmp_246033;
			NI res_246036;
			i_245820 = 0;
			HEX3Atmp_246033 = 0;
			HEX3Atmp_246033 = (NI)(length - ((NI) 1));
			res_246036 = ((NI) 1);
			{
				while (1) {
					Tsym215822* m;
					Tsym215822* n;
					NU8 LOC10;
					if (!(res_246036 <= HEX3Atmp_246033)) goto LA9;
					i_245820 = res_246036;
					m = (*(*a).kindU.S6.sons->data[i_245820]).kindU.S4.sym;
					n = (*(*b).kindU.S6.sons->data[i_245820]).kindU.S4.sym;
					LOC10 = 0;
					LOC10 = equalparam_245681(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_246036 += ((NI) 1);
				} LA9: ;
			}
		}
		{
			NIM_BOOL LOC20;
			LOC20 = 0;
			LOC20 = sametypeornil_245638((*(*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(Ttype215828*, typeallowednode_248246)(Intset212035* marker, Tnode215790* n, NU8 kind, NU8 flags) {
	Ttype215828* result;
{	result = 0;
	{
		if (!!((n == NIM_NIL))) goto LA3;
		result = typeallowedaux_248237(marker, (*n).typ, kind, flags);
		{
			if (!(result == NIM_NIL)) goto LA7;
			switch ((*n).kind) {
			case ((NU8) 0) ... ((NU8) 23):
			{
			}
			break;
			default:
			{
				{
					NI i_248291;
					NI HEX3Atmp_248327;
					NI LOC12;
					NI res_248330;
					i_248291 = 0;
					HEX3Atmp_248327 = 0;
					LOC12 = 0;
					LOC12 = sonslen_218351(n);
					HEX3Atmp_248327 = (NI)(LOC12 - ((NI) 1));
					res_248330 = ((NI) 0);
					{
						while (1) {
							Tnode215790* it;
							if (!(res_248330 <= HEX3Atmp_248327)) goto LA14;
							i_248291 = res_248330;
							it = (*n).kindU.S6.sons->data[i_248291];
							{
								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_248246(marker, it, kind, flags);
							{
								if (!!((result == NIM_NIL))) goto LA23;
								goto LA11;
							}
							LA23: ;
							res_248330 += ((NI) 1);
						} LA14: ;
					}
				} LA11: ;
			}
			break;
			}
		}
		LA7: ;
	}
	LA3: ;
	}BeforeRet: ;
	return result;
}

N_NIMCALL(Ttype215828*, typeallowedaux_248237)(Intset212035* marker, Ttype215828* typ, NU8 kind, NU8 flags_248245) {
	Ttype215828* result;
	Ttype215828* t;
{	result = 0;
	result = NIM_NIL;
	{
		if (!(typ == NIM_NIL)) goto LA3;
		goto BeforeRet;
	}
	LA3: ;
	{
		NIM_BOOL LOC7;
		LOC7 = 0;
		LOC7 = containsorincl_212862(marker, (*typ).Sup.id);
		if (!LOC7) goto LA8;
		goto BeforeRet;
	}
	LA8: ;
	t = skiptypes_219113(typ, IL64(211106232576000));
	switch ((*t).kind) {
	case ((NU8) 23):
	{
		Ttype215828* t2;
		{
			if (!((5120 &(1U<<((NU)(kind)&31U)))!=0)) goto LA13;
			result = t;
			goto BeforeRet;
		}
		LA13: ;
		t2 = skiptypes_219113((*t).sons->data[((NI) 0)], IL64(211106232576000));
		switch ((*t2).kind) {
		case ((NU8) 23):
		{
			{
				if (!!(((flags_248245 &(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_248237(marker, t2, kind, flags_248245);
			}
			LA21: ;
		}
		break;
		default:
		{
			{
				if (!!(((2056 &(1U<<((NU)(kind)&31U)))!=0))) goto LA29;
				result = t;
			}
			goto LA27;
			LA29: ;
			{
				result = typeallowedaux_248237(marker, t2, kind, flags_248245);
			}
			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_248711;
			NI HEX3Atmp_249017;
			NI LOC40;
			NI res_249020;
			i_248711 = 0;
			HEX3Atmp_249017 = 0;
			LOC40 = 0;
			LOC40 = sonslen_218327(t);
			HEX3Atmp_249017 = (NI)(LOC40 - ((NI) 1));
			res_249020 = ((NI) 1);
			{
				while (1) {
					if (!(res_249020 <= HEX3Atmp_249017)) goto LA42;
					i_248711 = res_249020;
					result = typeallowedaux_248237(marker, (*t).sons->data[i_248711], ((NU8) 3), flags_248245);
					{
						if (!!((result == NIM_NIL))) goto LA45;
						goto LA39;
					}
					LA45: ;
					res_249020 += ((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_248237(marker, (*t).sons->data[((NI) 0)], ((NU8) 11), flags_248245);
		}
		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_248245 &(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_248245 &(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):
	{
		Ttype215828* LOC84;
		LOC84 = 0;
		LOC84 = lastson_218377(t);
		result = typeallowedaux_248237(marker, LOC84, kind, flags_248245);
	}
	break;
	case ((NU8) 20):
	{
		{
			Ttype215828* LOC88;
			LOC88 = 0;
			LOC88 = skiptypes_219113((*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_248237(marker, (*t).sons->data[((NI) 0)], ((NU8) 8), flags_248245);
		}
		LA92: ;
	}
	break;
	case ((NU8) 24):
	{
		{
			if (!!(((*(*t).sons->data[((NI) 0)]).kind == ((NU8) 3)))) goto LA100;
			result = typeallowedaux_248237(marker, (*t).sons->data[((NI) 0)], ((NU8) 8), (flags_248245 | 2));
		}
		LA100: ;
	}
	break;
	case ((NU8) 16):
	{
		{
			if (!!(((*(*t).sons->data[((NI) 1)]).kind == ((NU8) 3)))) goto LA105;
			result = typeallowedaux_248237(marker, (*t).sons->data[((NI) 1)], ((NU8) 8), flags_248245);
		}
		LA105: ;
	}
	break;
	case ((NU8) 22):
	{
		{
			if (!(kind == ((NU8) 10))) goto LA110;
			result = t;
		}
		goto LA108;
		LA110: ;
		{
			Ttype215828* LOC113;
			LOC113 = 0;
			LOC113 = lastson_218377(t);
			result = typeallowedaux_248237(marker, LOC113, ((NU8) 8), (flags_248245 | 2));
		}
		LA108: ;
	}
	break;
	case ((NU8) 21):
	{
		Ttype215828* LOC115;
		LOC115 = 0;
		LOC115 = lastson_218377(t);
		result = typeallowedaux_248237(marker, LOC115, ((NU8) 8), (flags_248245 | 2));
	}
	break;
	case ((NU8) 4):
	case ((NU8) 19):
	case ((NU8) 46):
	case ((NU8) 47):
	case ((NU8) 49):
	{
		{
			NI i_248913;
			NI HEX3Atmp_249025;
			NI LOC118;
			NI res_249028;
			i_248913 = 0;
			HEX3Atmp_249025 = 0;
			LOC118 = 0;
			LOC118 = sonslen_218327(t);
			HEX3Atmp_249025 = (NI)(LOC118 - ((NI) 1));
			res_249028 = ((NI) 0);
			{
				while (1) {
					if (!(res_249028 <= HEX3Atmp_249025)) goto LA120;
					i_248913 = res_249028;
					result = typeallowedaux_248237(marker, (*t).sons->data[i_248913], kind, flags_248245);
					{
						if (!!((result == NIM_NIL))) goto LA123;
						goto LA117;
					}
					LA123: ;
					res_249028 += ((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_248245 | 1);
		{
			NI i_248983;
			NI HEX3Atmp_249033;
			NI LOC135;
			NI res_249036;
			i_248983 = 0;
			HEX3Atmp_249033 = 0;
			LOC135 = 0;
			LOC135 = sonslen_218327(t);
			HEX3Atmp_249033 = (NI)(LOC135 - ((NI) 1));
			res_249036 = ((NI) 0);
			{
				while (1) {
					if (!(res_249036 <= HEX3Atmp_249033)) goto LA137;
					i_248983 = res_249036;
					result = typeallowedaux_248237(marker, (*t).sons->data[i_248983], kind, flags);
					{
						if (!!((result == NIM_NIL))) goto LA140;
						goto LA134;
					}
					LA140: ;
					res_249036 += ((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_248246(marker, (*t).n, kind, flags);
		}
		LA146: ;
	}
	break;
	case ((NU8) 50):
	{
		result = NIM_NIL;
	}
	break;
	}
	}BeforeRet: ;
	return result;
}

N_NIMCALL(Ttype215828*, typeallowed_249040)(Ttype215828* t, NU8 kind) {
	Ttype215828* result;
	Intset212035 marker;
	result = 0;
	memset((void*)(&marker), 0, sizeof(marker));
	chckNil((void*)(&marker));
	memset((void*)(&marker), 0, sizeof(marker));
	initintset_212885((&marker));
	result = typeallowedaux_248237((&marker), t, kind, 0);
	return result;
}

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

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

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

N_NIMCALL(Ttype215828*, taketype_250135)(Ttype215828* formal, Ttype215828* arg) {
	Ttype215828* result;
	result = 0;
	{
		if (!((*arg).kind == ((NU8) 5))) goto LA3;
		result = formal;
	}
	goto LA1;
	LA3: ;
	{
		NIM_BOOL LOC6;
		Ttype215828* a;
		Ttype215828* LOC10;
		LOC6 = 0;
		LOC6 = ((IL64(281475127705600) &((NU64)1<<((NU)((*formal).kind)&63U)))!=0);
		if (!(LOC6)) goto LA7;
		LOC6 = isemptycontainer_250113(arg);
		LA7: ;
		if (!LOC6) goto LA8;
		LOC10 = 0;
		LOC10 = skiptypes_219113(arg, 2048);
		a = copytype_218470(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(Ttype215828*, baseofdistinct_249496)(Ttype215828* t) {
	Ttype215828* result;
	result = 0;
	{
		if (!((*t).kind == ((NU8) 13))) goto LA3;
		result = (*t).sons->data[((NI) 0)];
	}
	goto LA1;
	LA3: ;
	{
		Ttype215828* parent;
		Ttype215828* it;
		result = copytype_218470(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_218377(it);
			} LA7: ;
		}
		{
			if (!((*it).kind == ((NU8) 13))) goto LA10;
			{
				NimStringDesc* LOC16;
				if (!!(!((parent == NIM_NIL)))) goto LA14;
				LOC16 = 0;
				LOC16 = HEX24_188183(TMP3512);
				internalerror_188113(LOC16);
			}
			LA14: ;
			asgnRefNoCycle((void**) (&(*parent).sons->data[((NI) 0)]), (*it).sons->data[((NI) 0)]);
		}
		LA10: ;
	}
	LA1: ;
	return result;
}

N_NIMCALL(Tnode215790*, skiphiddensubconv_250201)(Tnode215790* n) {
	Tnode215790* result;
	result = 0;
	{
		Ttype215828* formal;
		Ttype215828* arg;
		Ttype215828* dest;
		if (!((*n).kind == ((NU8) 59))) goto LA3;
		formal = (*n).typ;
		result = (*n).kindU.S6.sons->data[((NI) 1)];
		arg = (*result).typ;
		dest = taketype_250135(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_219822(result);
			asgnRefNoCycle((void**) (&(*result).typ), dest);
		}
		LA5: ;
	}
	goto LA1;
	LA3: ;
	{
		result = n;
	}
	LA1: ;
	return result;
}

N_NIMCALL(Tnode215790*, skipconvtaketype_250108)(Tnode215790* n) {
	Tnode215790* result;
	result = 0;
	result = skipconv_250082(n);
	asgnRefNoCycle((void**) (&(*result).typ), (*n).typ);
	return result;
}

N_NIMCALL(NIM_BOOL, searchtypenodeforaux_241973)(Tnode215790* n, Ttypepredicate241029 p, Intset212035* marker) {
	NIM_BOOL result;
{	result = 0;
	result = NIM_FALSE;
	switch ((*n).kind) {
	case ((NU8) 138):
	{
		{
			NI i_241991;
			NI HEX3Atmp_242219;
			NI LOC3;
			NI res_242222;
			i_241991 = 0;
			HEX3Atmp_242219 = 0;
			LOC3 = 0;
			LOC3 = sonslen_218351(n);
			HEX3Atmp_242219 = (NI)(LOC3 - ((NI) 1));
			res_242222 = ((NI) 0);
			{
				while (1) {
					if (!(res_242222 <= HEX3Atmp_242219)) goto LA5;
					i_241991 = res_242222;
					result = searchtypenodeforaux_241973((*n).kindU.S6.sons->data[i_241991], p, marker);
					{
						if (!result) goto LA8;
						goto BeforeRet;
					}
					LA8: ;
					res_242222 += ((NI) 1);
				} LA5: ;
			}
		}
	}
	break;
	case ((NU8) 139):
	{
		result = searchtypenodeforaux_241973((*n).kindU.S6.sons->data[((NI) 0)], p, marker);
		{
			if (!result) goto LA13;
			goto BeforeRet;
		}
		LA13: ;
		{
			NI i_242213;
			NI HEX3Atmp_242227;
			NI LOC16;
			NI res_242230;
			i_242213 = 0;
			HEX3Atmp_242227 = 0;
			LOC16 = 0;
			LOC16 = sonslen_218351(n);
			HEX3Atmp_242227 = (NI)(LOC16 - ((NI) 1));
			res_242230 = ((NI) 1);
			{
				while (1) {
					if (!(res_242230 <= HEX3Atmp_242227)) goto LA18;
					i_242213 = res_242230;
					switch ((*(*n).kindU.S6.sons->data[i_242213]).kind) {
					case ((NU8) 85):
					case ((NU8) 88):
					{
						Tnode215790* LOC20;
						LOC20 = 0;
						LOC20 = lastson_218364((*n).kindU.S6.sons->data[i_242213]);
						result = searchtypenodeforaux_241973(LOC20, p, marker);
						{
							if (!result) goto LA23;
							goto BeforeRet;
						}
						LA23: ;
					}
					break;
					default:
					{
						internalerror_188113(((NimStringDesc*) &TMP3581));
					}
					break;
					}
					res_242230 += ((NI) 1);
				} LA18: ;
			}
		}
	}
	break;
	case ((NU8) 3):
	{
		result = searchtypeforaux_241967((*(*n).kindU.S4.sym).typ, p, marker);
	}
	break;
	default:
	{
		internalerror_188100((*n).info, ((NimStringDesc*) &TMP3582));
	}
	break;
	}
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NIM_BOOL, searchtypeforaux_241967)(Ttype215828* t, Ttypepredicate241029 predicate, Intset212035* 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_212862(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_241967((*t).sons->data[((NI) 0)], predicate, marker);
		{
			if (!!(result)) goto LA17;
			result = searchtypenodeforaux_241973((*t).n, predicate, marker);
		}
		LA17: ;
	}
	break;
	case ((NU8) 11):
	case ((NU8) 13):
	{
		Ttype215828* LOC20;
		LOC20 = 0;
		LOC20 = lastson_218377(t);
		result = searchtypeforaux_241967(LOC20, predicate, marker);
	}
	break;
	case ((NU8) 16):
	case ((NU8) 4):
	case ((NU8) 19):
	case ((NU8) 18):
	{
		{
			NI i_242264;
			NI HEX3Atmp_242266;
			NI LOC23;
			NI res_242269;
			i_242264 = 0;
			HEX3Atmp_242266 = 0;
			LOC23 = 0;
			LOC23 = sonslen_218327(t);
			HEX3Atmp_242266 = (NI)(LOC23 - ((NI) 1));
			res_242269 = ((NI) 0);
			{
				while (1) {
					if (!(res_242269 <= HEX3Atmp_242266)) goto LA25;
					i_242264 = res_242269;
					result = searchtypeforaux_241967((*t).sons->data[i_242264], predicate, marker);
					{
						if (!result) goto LA28;
						goto BeforeRet;
					}
					LA28: ;
					res_242269 += ((NI) 1);
				} LA25: ;
			}
		}
	}
	break;
	default:
	{
	}
	break;
	}
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NIM_BOOL, searchtypefor_242273)(Ttype215828* t, Ttypepredicate241029 predicate) {
	NIM_BOOL result;
	Intset212035 marker;
	result = 0;
	memset((void*)(&marker), 0, sizeof(marker));
	chckNil((void*)(&marker));
	memset((void*)(&marker), 0, sizeof(marker));
	initintset_212885((&marker));
	result = searchtypeforaux_241967(t, predicate, (&marker));
	return result;
}

N_NIMCALL(NIM_BOOL, isgcref_242486)(Ttype215828* 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_241106)(Ttype215828* typ) {
	NIM_BOOL result;
	result = 0;
	result = searchtypefor_242273(typ, isgcref_242486);
	return result;
}

N_NIMCALL(Ttype215828*, commonsuperclass_247850)(Ttype215828* a, Ttype215828* b) {
	Ttype215828* result;
	Ttype215828* x;
	Intset212035 ancestors;
	Ttype215828* y;
{	result = 0;
	{
		NIM_BOOL LOC3;
		LOC3 = 0;
		LOC3 = sameobjecttypes_246344(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_212885((&ancestors));
	{
		while (1) {
			if (!!((x == NIM_NIL))) goto LA7;
			x = skiptypes_219113(x, IL64(211106247215360));
			incl_212832((&ancestors), (*x).Sup.id);
			x = (*x).sons->data[((NI) 0)];
		} LA7: ;
	}
	y = b;
	{
		while (1) {
			if (!!((y == NIM_NIL))) goto LA9;
			y = skiptypes_219113(y, IL64(211106247215360));
			{
				NIM_BOOL LOC12;
				LOC12 = 0;
				LOC12 = contains_212811((&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_247387)(Ttype215828* x, Ttype215828* y) {
	NIM_BOOL result;
	Tsametypeclosure245429 c;
	result = 0;
	memset((void*)(&c), 0, sizeof(c));
	chckNil((void*)(&c));
	memset((void*)(&c), 0, sizeof(c));
	initsametypeclosure_245448((&c));
	c.flags |= ((NU8)1)<<((((NU8) 0))%(sizeof(NU8)*8));
	result = sametypeaux_245580(x, y, (&c));
	return result;
}

N_NIMCALL(NIM_BOOL, ispureobject_241127)(Ttype215828* typ) {
	NIM_BOOL result;
	Ttype215828* 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_242582)(Intset212035* marker, Tnode215790* n, NI startid) {
	NIM_BOOL result;
{	result = 0;
	result = NIM_FALSE;
	{
		if (!!((n == NIM_NIL))) goto LA3;
		result = canformacycleaux_242576(marker, (*n).typ, startid);
		{
			if (!!(result)) goto LA7;
			switch ((*n).kind) {
			case ((NU8) 0) ... ((NU8) 23):
			{
			}
			break;
			default:
			{
				{
					NI i_242612;
					NI HEX3Atmp_242615;
					NI LOC12;
					NI res_242618;
					i_242612 = 0;
					HEX3Atmp_242615 = 0;
					LOC12 = 0;
					LOC12 = sonslen_218351(n);
					HEX3Atmp_242615 = (NI)(LOC12 - ((NI) 1));
					res_242618 = ((NI) 0);
					{
						while (1) {
							if (!(res_242618 <= HEX3Atmp_242615)) goto LA14;
							i_242612 = res_242618;
							result = canformacyclenode_242582(marker, (*n).kindU.S6.sons->data[i_242612], startid);
							{
								if (!result) goto LA17;
								goto BeforeRet;
							}
							LA17: ;
							res_242618 += ((NI) 1);
						} LA14: ;
					}
				}
			}
			break;
			}
		}
		LA7: ;
	}
	LA3: ;
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NIM_BOOL, canformacycleaux_242576)(Intset212035* marker, Ttype215828* typ, NI startid) {
	NIM_BOOL result;
	Ttype215828* 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_219113(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_212862(marker, (*t).Sup.id);
			if (!!(LOC16)) goto LA17;
			{
				NI i_242686;
				NI HEX3Atmp_242728;
				NI LOC20;
				NI res_242731;
				i_242686 = 0;
				HEX3Atmp_242728 = 0;
				LOC20 = 0;
				LOC20 = sonslen_218327(t);
				HEX3Atmp_242728 = (NI)(LOC20 - ((NI) 1));
				res_242731 = ((NI) 0);
				{
					while (1) {
						if (!(res_242731 <= HEX3Atmp_242728)) goto LA22;
						i_242686 = res_242731;
						result = canformacycleaux_242576(marker, (*t).sons->data[i_242686], startid);
						{
							if (!result) goto LA25;
							goto BeforeRet;
						}
						LA25: ;
						res_242731 += ((NI) 1);
					} LA22: ;
				}
			}
			{
				if (!!(((*t).n == NIM_NIL))) goto LA29;
				result = canformacyclenode_242582(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_241112)(Ttype215828* typ) {
	NIM_BOOL result;
	Intset212035 marker;
	result = 0;
	memset((void*)(&marker), 0, sizeof(marker));
	chckNil((void*)(&marker));
	memset((void*)(&marker), 0, sizeof(marker));
	initintset_212885((&marker));
	result = canformacycleaux_242576((&marker), typ, (*typ).Sup.id);
	return result;
}

N_NIMCALL(NU8, analyseobjectwithtypefieldaux_242372)(Ttype215828* t, Intset212035* 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_241973((*t).n, isobjectwithtypefieldpredicate_242297, marker);
				if (!LOC12) goto LA13;
				result = ((NU8) 2);
				goto BeforeRet;
			}
			LA13: ;
		}
		LA8: ;
		{
			NI i_242414;
			NI HEX3Atmp_242465;
			NI LOC16;
			NI res_242468;
			i_242414 = 0;
			HEX3Atmp_242465 = 0;
			LOC16 = 0;
			LOC16 = sonslen_218327(t);
			HEX3Atmp_242465 = (NI)(LOC16 - ((NI) 1));
			res_242468 = ((NI) 0);
			{
				while (1) {
					if (!(res_242468 <= HEX3Atmp_242465)) goto LA18;
					i_242414 = res_242468;
					res = analyseobjectwithtypefieldaux_242372((*t).sons->data[i_242414], marker);
					{
						if (!(res == ((NU8) 2))) goto LA21;
						result = ((NU8) 2);
						goto BeforeRet;
					}
					LA21: ;
					{
						if (!(res == ((NU8) 1))) goto LA25;
						result = ((NU8) 1);
					}
					LA25: ;
					res_242468 += ((NI) 1);
				} LA18: ;
			}
		}
		{
			if (!(result == ((NU8) 0))) goto LA29;
			{
				NIM_BOOL LOC33;
				LOC33 = 0;
				LOC33 = isobjectwithtypefieldpredicate_242297(t);
				if (!LOC33) goto LA34;
				result = ((NU8) 1);
			}
			LA34: ;
		}
		LA29: ;
	}
	break;
	case ((NU8) 11):
	case ((NU8) 13):
	case ((NU8) 46):
	case ((NU8) 47):
	{
		Ttype215828* LOC37;
		LOC37 = 0;
		LOC37 = lastson_218377(t);
		result = analyseobjectwithtypefieldaux_242372(LOC37, marker);
	}
	break;
	case ((NU8) 16):
	case ((NU8) 4):
	case ((NU8) 18):
	{
		{
			NI i_242453;
			NI HEX3Atmp_242473;
			NI LOC40;
			NI res_242476;
			i_242453 = 0;
			HEX3Atmp_242473 = 0;
			LOC40 = 0;
			LOC40 = sonslen_218327(t);
			HEX3Atmp_242473 = (NI)(LOC40 - ((NI) 1));
			res_242476 = ((NI) 0);
			{
				while (1) {
					if (!(res_242476 <= HEX3Atmp_242473)) goto LA42;
					i_242453 = res_242476;
					res = analyseobjectwithtypefieldaux_242372((*t).sons->data[i_242453], marker);
					{
						if (!!((res == ((NU8) 0)))) goto LA45;
						result = ((NU8) 2);
						goto BeforeRet;
					}
					LA45: ;
					res_242476 += ((NI) 1);
				} LA42: ;
			}
		}
	}
	break;
	default:
	{
	}
	break;
	}
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NU8, analyseobjectwithtypefield_241138)(Ttype215828* t) {
	NU8 result;
	Intset212035 marker;
	result = 0;
	memset((void*)(&marker), 0, sizeof(marker));
	chckNil((void*)(&marker));
	memset((void*)(&marker), 0, sizeof(marker));
	initintset_212885((&marker));
	result = analyseobjectwithtypefieldaux_242372(t, (&marker));
	return result;
}

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

N_NIMCALL(NIM_BOOL, containshiddenpointer_241109)(Ttype215828* typ) {
	NIM_BOOL result;
	result = 0;
	result = searchtypefor_242273(typ, ishiddenpointer_242557);
	return result;
}

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

N_NIMCALL(NIM_BOOL, containscompiletimeonly_249921)(Ttype215828* t) {
	NIM_BOOL result;
{	result = 0;
	{
		NIM_BOOL LOC3;
		LOC3 = 0;
		LOC3 = iscompiletimeonly_249906(t);
		if (!LOC3) goto LA4;
		result = NIM_TRUE;
		goto BeforeRet;
	}
	LA4: ;
	{
		NIM_BOOL LOC8;
		LOC8 = 0;
		LOC8 = HEX3DHEX3D_249927((*t).sons, NIM_NIL);
		if (!!(LOC8)) goto LA9;
		{
			NI i_250040;
			NI HEX3Atmp_250054;
			NI LOC12;
			NI res_250057;
			i_250040 = 0;
			HEX3Atmp_250054 = 0;
			LOC12 = 0;
			LOC12 = sonslen_218327(t);
			HEX3Atmp_250054 = (LOC12 - 1);
			res_250057 = ((NI) 0);
			{
				while (1) {
					if (!(res_250057 <= HEX3Atmp_250054)) goto LA14;
					i_250040 = res_250057;
					{
						NIM_BOOL LOC17;
						LOC17 = 0;
						LOC17 = !(((*t).sons->data[i_250040] == NIM_NIL));
						if (!(LOC17)) goto LA18;
						LOC17 = iscompiletimeonly_249906((*t).sons->data[i_250040]);
						LA18: ;
						if (!LOC17) goto LA19;
						result = NIM_TRUE;
						goto BeforeRet;
					}
					LA19: ;
					res_250057 += ((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* TMP2781[2];
static TNimNode TMP896[3];
NTI245443.size = sizeof(TY245443);
NTI245443.kind = 18;
NTI245443.base = 0;
NTI245443.flags = 3;
TMP2781[0] = &TMP896[1];
TMP896[1].kind = 1;
TMP896[1].offset = offsetof(TY245443, Field0);
TMP896[1].typ = (&NTI104);
TMP896[1].name = "Field0";
TMP2781[1] = &TMP896[2];
TMP896[2].kind = 1;
TMP896[2].offset = offsetof(TY245443, Field1);
TMP896[2].typ = (&NTI104);
TMP896[2].name = "Field1";
TMP896[0].len = 2; TMP896[0].kind = 2; TMP896[0].sons = &TMP2781[0];
NTI245443.node = &TMP896[0];
NTI245442.size = sizeof(TY245442*);
NTI245442.kind = 24;
NTI245442.base = (&NTI245443);
NTI245442.flags = 2;
NTI245442.marker = TMP2782;
}

