/* Generated by Nim Compiler v0.12.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 NimStringDesc NimStringDesc;
typedef struct TGenericSeq TGenericSeq;
typedef struct Ttype224847 Ttype224847;
typedef struct Tidobj197015 Tidobj197015;
typedef struct TNimObject TNimObject;
typedef struct TNimType TNimType;
typedef struct TNimNode TNimNode;
typedef struct Ttypeseq224843 Ttypeseq224843;
typedef struct Tnode224809 Tnode224809;
typedef struct Tsym224841 Tsym224841;
typedef struct Tloc224823 Tloc224823;
typedef struct Ropeobj175009 Ropeobj175009;
typedef struct Tscope224835 Tscope224835;
typedef struct TY224944 TY224944;
typedef struct Tstrtable224813 Tstrtable224813;
typedef struct Tsymseq224811 Tsymseq224811;
typedef struct Tident197021 Tident197021;
typedef struct Tlineinfo189352 Tlineinfo189352;
typedef struct Tlib224827 Tlib224827;
typedef struct Tnodeseq224803 Tnodeseq224803;
typedef struct TY90959 TY90959;
typedef struct Tsametypeclosure258841 Tsametypeclosure258841;
typedef struct TY258854 TY258854;
typedef struct TY258855 TY258855;
typedef struct Intset221056 Intset221056;
typedef struct Trunk221052 Trunk221052;
typedef struct Trunkseq221054 Trunkseq221054;
typedef struct Cell48947 Cell48947;
typedef struct Cellseq48963 Cellseq48963;
typedef struct Gcheap51018 Gcheap51018;
typedef struct Gcstack51016 Gcstack51016;
typedef struct Cellset48959 Cellset48959;
typedef struct Pagedesc48955 Pagedesc48955;
typedef struct Memregion30891 Memregion30891;
typedef struct Smallchunk30843 Smallchunk30843;
typedef struct Llchunk30885 Llchunk30885;
typedef struct Bigchunk30845 Bigchunk30845;
typedef struct Intset30817 Intset30817;
typedef struct Trunk30813 Trunk30813;
typedef struct Avlnode30889 Avlnode30889;
typedef struct Gcstat51014 Gcstat51014;
typedef struct Tinstantiation224831 Tinstantiation224831;
typedef struct Tlistentry140022 Tlistentry140022;
typedef struct Basechunk30841 Basechunk30841;
typedef struct Freecell30833 Freecell30833;
typedef struct TY224932 TY224932;
struct  TGenericSeq  {
NI len;
NI reserved;
};
struct  NimStringDesc  {
  TGenericSeq Sup;
NIM_CHAR data[SEQ_DECL_SIZE];
};
typedef N_NIMCALL_PTR(void, TY3889) (void* p, NI op);
typedef N_NIMCALL_PTR(void*, TY3894) (void* p);
struct  TNimType  {
NI size;
NU8 kind;
NU8 flags;
TNimType* base;
TNimNode* node;
void* finalizer;
TY3889 marker;
TY3894 deepcopy;
};
struct  TNimObject  {
TNimType* m_type;
};
struct  Tidobj197015  {
  TNimObject Sup;
NI id;
};
struct  Tloc224823  {
NU8 k;
NU8 s;
NU16 flags;
Ttype224847* t;
Ropeobj175009* r;
Ropeobj175009* heaproot;
};
struct  Ttype224847  {
  Tidobj197015 Sup;
NU8 kind;
NU8 callconv;
NU32 flags;
Ttypeseq224843* sons;
Tnode224809* n;
Tsym224841* owner;
Tsym224841* sym;
Tsym224841* destructor;
Tsym224841* deepcopy;
Tsym224841* assignment;
NI64 size;
NI16 align;
NI16 locklevel;
Tloc224823 loc;
};
struct  Tstrtable224813  {
NI counter;
Tsymseq224811* data;
};
struct  Tlineinfo189352  {
NI16 line;
NI16 col;
NI32 fileindex;
};
struct  Tsym224841  {
  Tidobj197015 Sup;
NU8 kind;
union{
struct {Ttypeseq224843* typeinstcache;
Tscope224835* typscope;
} S1;
struct {TY224944* procinstcache;
Tsym224841* gcunsafetyreason;
} S2;
struct {TY224944* usedgenerics;
Tstrtable224813 tab;
} S3;
struct {Tsym224841* guard;
NI bitsize;
} S4;
} kindU;
NU8 magic;
Ttype224847* typ;
Tident197021* name;
Tlineinfo189352 info;
Tsym224841* owner;
NU32 flags;
Tnode224809* ast;
NU32 options;
NI position;
NI offset;
Tloc224823 loc;
Tlib224827* annex;
Tnode224809* constraint;
};
struct  Tnode224809  {
Ttype224847* typ;
Tlineinfo189352 info;
NU16 flags;
NU8 kind;
union{
struct {NI64 intval;
} S1;
struct {NF floatval;
} S2;
struct {NimStringDesc* strval;
} S3;
struct {Tsym224841* sym;
} S4;
struct {Tident197021* ident;
} S5;
struct {Tnodeseq224803* sons;
} S6;
} kindU;
NimStringDesc* comment;
};
struct  Tident197021  {
  Tidobj197015 Sup;
NimStringDesc* s;
Tident197021* next;
NI h;
};
typedef NimStringDesc* TY256612[62];
struct TY90959 {
NimStringDesc* Field0;
NI Field1;
};
typedef NimStringDesc* TY224022[10];
struct  Tsametypeclosure258841  {
NU8 cmp;
NI reccheck;
NU8 flags;
TY258854* s;
};
struct TY258855 {
NI Field0;
NI Field1;
};
struct  TNimNode  {
NU8 kind;
NI offset;
TNimType* typ;
NCSTRING name;
NI len;
TNimNode** sons;
};
typedef N_NIMCALL_PTR(NIM_BOOL, Ttypeiter254046) (Ttype224847* t, TNimObject* closure);
struct  Intset221056  {
NI counter;
NI max;
Trunk221052* head;
Trunkseq221054* data;
};
struct  Cell48947  {
NI refcount;
TNimType* typ;
};
struct  Cellseq48963  {
NI len;
NI cap;
Cell48947** d;
};
struct  Cellset48959  {
NI counter;
NI max;
Pagedesc48955* head;
Pagedesc48955** data;
};
typedef Smallchunk30843* TY30906[512];
typedef Trunk30813* Trunkbuckets30815[256];
struct  Intset30817  {
Trunkbuckets30815 data;
};
struct  Memregion30891  {
NI minlargeobj;
NI maxlargeobj;
TY30906 freesmallchunks;
Llchunk30885* llmem;
NI currmem;
NI maxmem;
NI freemem;
NI lastsize;
Bigchunk30845* freechunkslist;
Intset30817 chunkstarts;
Avlnode30889* root;
Avlnode30889* deleted;
Avlnode30889* last;
Avlnode30889* freeavlnodes;
};
struct  Gcstat51014  {
NI stackscans;
NI cyclecollections;
NI maxthreshold;
NI maxstacksize;
NI maxstackcells;
NI cycletablesize;
NI64 maxpause;
};
struct  Gcheap51018  {
Gcstack51016* stack;
void* stackbottom;
NI cyclethreshold;
Cellseq48963 zct;
Cellseq48963 decstack;
Cellset48959 cycleroots;
Cellseq48963 tempstack;
NI recgclock;
Memregion30891 region;
Gcstat51014 stat;
};
typedef N_NIMCALL_PTR(NIM_BOOL, Ttypepredicate254050) (Ttype224847* t);
struct  Ropeobj175009  {
  TNimObject Sup;
Ropeobj175009* left;
Ropeobj175009* right;
NI length;
NimStringDesc* data;
};
struct  Tscope224835  {
NI depthlevel;
Tstrtable224813 symbols;
Tnodeseq224803* usingsyms;
Tscope224835* parent;
};
struct  Tlistentry140022  {
  TNimObject Sup;
Tlistentry140022* prev;
Tlistentry140022* next;
};
struct  Tlib224827  {
  Tlistentry140022 Sup;
NU8 kind;
NIM_BOOL generated;
NIM_BOOL isoverriden;
Ropeobj175009* name;
Tnode224809* path;
};
typedef NI TY30822[8];
struct  Trunk221052  {
Trunk221052* next;
NI key;
TY30822 bits;
};
struct  Gcstack51016  {
Gcstack51016* prev;
Gcstack51016* next;
void* starts;
void* pos;
NI maxstacksize;
};
struct  Pagedesc48955  {
Pagedesc48955* next;
NI key;
TY30822 bits;
};
struct  Basechunk30841  {
NI prevsize;
NI size;
NIM_BOOL used;
};
struct  Smallchunk30843  {
  Basechunk30841 Sup;
Smallchunk30843* next;
Smallchunk30843* prev;
Freecell30833* freelist;
NI free;
NI acc;
NF data;
};
struct  Llchunk30885  {
NI size;
NI acc;
Llchunk30885* next;
};
struct  Bigchunk30845  {
  Basechunk30841 Sup;
Bigchunk30845* next;
Bigchunk30845* prev;
NI align;
NF data;
};
struct  Trunk30813  {
Trunk30813* next;
NI key;
TY30822 bits;
};
typedef Avlnode30889* TY30896[2];
struct  Avlnode30889  {
TY30896 link;
NI key;
NI upperbound;
NI level;
};
struct  Tinstantiation224831  {
Tsym224841* sym;
Ttypeseq224843* concretetypes;
TY224932* usedby;
NI compilesid;
};
struct  Freecell30833  {
Freecell30833* next;
NI zerofield;
};
struct TY258854 {
  TGenericSeq Sup;
  TY258855 data[SEQ_DECL_SIZE];
};
struct Ttypeseq224843 {
  TGenericSeq Sup;
  Ttype224847* data[SEQ_DECL_SIZE];
};
struct TY224944 {
  TGenericSeq Sup;
  Tinstantiation224831* data[SEQ_DECL_SIZE];
};
struct Tsymseq224811 {
  TGenericSeq Sup;
  Tsym224841* data[SEQ_DECL_SIZE];
};
struct Tnodeseq224803 {
  TGenericSeq Sup;
  Tnode224809* data[SEQ_DECL_SIZE];
};
struct Trunkseq221054 {
  TGenericSeq Sup;
  Trunk221052* data[SEQ_DECL_SIZE];
};
struct TY224932 {
  TGenericSeq Sup;
  NI32 data[SEQ_DECL_SIZE];
};
N_NIMCALL(NimStringDesc*, copyString)(NimStringDesc* src);
static N_INLINE(NIM_BOOL, isintlit_254327)(Ttype224847* 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_256623)(NimStringDesc** name, Ttype224847* typ);
N_NIMCALL(void, unsureAsgnRef)(void** dest, void* src);
N_NIMCALL(NimStringDesc*, resizeString)(NimStringDesc* dest, NI addlen);
N_NIMCALL(NimStringDesc*, typetostring_254032)(Ttype224847* typ, NU8 prefer);
N_NIMCALL(NI, sonslen_227351)(Ttype224847* n);
N_NIMCALL(NimStringDesc*, addChar)(NimStringDesc* s, NIM_CHAR c);
N_NIMCALL(Ttype224847*, base_254039)(Ttype224847* t);
N_NIMCALL(NI, len_227369)(Ttype224847* n);
N_NIMCALL(void, internalerror_195191)(NimStringDesc* errmsg);
N_NIMCALL(NimStringDesc*, HEX24_195279)(TY90959 x);
N_NIMCALL(NimStringDesc*, rendertree_246059)(Tnode224809* n, NU8 renderflags);
N_NIMCALL(NimStringDesc*, rangetostr_256451)(Tnode224809* n);
N_NIMCALL(NimStringDesc*, valuetostring_256438)(Tnode224809* a);
N_NIMCALL(NimStringDesc*, nimFloatToStr)(NF f);
N_NIMCALL(NI, sonslen_227387)(Tnode224809* n);
N_NIMCALL(NimStringDesc*, setLengthStr)(NimStringDesc* s, NI newlen);
static N_INLINE(NI, len_225098)(Tnode224809* n);
static N_INLINE(Tnode224809*, HEX5BHEX5D_225244)(Tnode224809* n, NI i);
static N_INLINE(void, addsep_103118)(NimStringDesc** dest, NimStringDesc* sep, NI startlen);
N_NIMCALL(NimStringDesc*, HEX24_227096)(NI16 x);
N_NIMCALL(NimStringDesc*, nsuFormatSingleElem)(NimStringDesc* formatstr, NimStringDesc* a);
N_NIMCALL(Ttype224847*, elemtype_254522)(Ttype224847* t);
N_NIMCALL(Ttype224847*, lastson_227426)(Ttype224847* n);
N_NIMCALL(void, initsametypeclosure_258863)(Tsametypeclosure258841* Result);
N_NOINLINE(void, chckNil)(void* p);
N_NIMCALL(NIM_BOOL, sametypeaux_259035)(Ttype224847* x, Ttype224847* y, Tsametypeclosure258841* c);
N_NIMCALL(Ttype224847*, skiptypes_228167)(Ttype224847* t, NU64 kinds);
N_NIMCALL(Ttype224847*, skipgenericalias_260119)(Ttype224847* t);
N_NIMCALL(NIM_BOOL, isgenericalias_260091)(Ttype224847* t);
static N_INLINE(NIM_BOOL, sameflags_260141)(Ttype224847* a, Ttype224847* b);
N_NIMCALL(NIM_BOOL, exprstructuralequivalent_253149)(Tnode224809* a, Tnode224809* b, NIM_BOOL strictsymequality);
N_NIMCALL(NIM_BOOL, containsorincl_258872)(Tsametypeclosure258841* c, Ttype224847* a, Ttype224847* b);
static N_INLINE(NIM_BOOL, contains_258890)(TY258855* a, NI aLen0, TY258855 item);
static N_INLINE(NI, find_258900)(TY258855* a, NI aLen0, TY258855 item);
N_NIMCALL(NIM_BOOL, HEX3DHEX3D_258946)(TY258855 x, TY258855 y);
N_NIMCALL(void, TMP2740)(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_260005)(Ttype224847* a, Ttype224847* b, Tsametypeclosure258841* c);
N_NIMCALL(NIM_BOOL, sametypeornilaux_259044)(Ttype224847* a, Ttype224847* b, Tsametypeclosure258841* c);
N_NIMCALL(NIM_BOOL, sameobjecttree_259866)(Tnode224809* a, Tnode224809* b, Tsametypeclosure258841* c);
static N_INLINE(NIM_BOOL, eqStrings)(NimStringDesc* a, NimStringDesc* b);
N_NIMCALL(NIM_BOOL, sametuple_259622)(Ttype224847* a, Ttype224847* b, Tsametypeclosure258841* c);
N_NIMCALL(void, internalerror_195172)(Tlineinfo189352 info, NimStringDesc* errmsg);
N_NIMCALL(NIM_BOOL, samechildrenaux_260048)(Ttype224847* a, Ttype224847* b, Tsametypeclosure258841* c);
N_NIMCALL(NIM_BOOL, sameconstraints_259240)(Tnode224809* a, Tnode224809* b);
N_NIMCALL(NIM_BOOL, samevalue_232324)(Tnode224809* a, Tnode224809* b);
N_NIMCALL(NIM_BOOL, iterovertype_254062)(Ttype224847* t, Ttypeiter254046 iter, TNimObject* closure);
N_NIMCALL(void, initintset_221927)(Intset221056* Result);
N_NIMCALL(NIM_BOOL, iterovertypeaux_255077)(Intset221056* marker, Ttype224847* t, Ttypeiter254046 iter, TNimObject* closure);
N_NIMCALL(NIM_BOOL, containsorincl_221898)(Intset221056* s, NI key);
N_NIMCALL(NIM_BOOL, iterovernode_255087)(Intset221056* marker, Tnode224809* n, Ttypeiter254046 iter, TNimObject* closure);
N_NIMCALL(NIM_BOOL, containsgenerictypeiter_263225)(Ttype224847* t, TNimObject* closure);
N_NIMCALL(NI64, firstord_254004)(Ttype224847* t);
N_NIMCALL(NI64, getordvalue_254178)(Tnode224809* n);
N_NIMCALL(void, localerror_195128)(Tlineinfo189352 info, NU16 msg, NimStringDesc* arg);
N_NIMCALL(NimStringDesc*, reprEnum)(NI e_86859, TNimType* typ);
N_NIMCALL(NI64, lastord_254010)(Ttype224847* t);
N_NIMCALL(NI64, lengthord_254016)(Ttype224847* t);
N_NIMCALL(NIM_BOOL, isordinaltype_254093)(Ttype224847* t);
N_NIMCALL(NIM_BOOL, compatibleeffectsaux_263417)(Tnode224809* se, Tnode224809* re);
N_NIMCALL(NI, safeinheritancediff_263388)(Ttype224847* a, Ttype224847* b);
N_NIMCALL(NI, inheritancediff_261091)(Ttype224847* a, Ttype224847* b);
N_NIMCALL(NIM_BOOL, sameobjecttypes_259785)(Ttype224847* a, Ttype224847* b);
N_NIMCALL(NIM_BOOL, isemptycontainer_263978)(Ttype224847* t);
N_NIMCALL(NU8, classify_263913)(Ttype224847* t);
N_NIMCALL(NI64, computesize_254184)(Ttype224847* typ);
N_NIMCALL(NI64, computesizeaux_262686)(Ttype224847* typ, NI64* a);
N_NIMCALL(NI64, align_262669)(NI64 address, NI64 alignment);
N_NIMCALL(NIM_BOOL, isobjectwithtypefieldpredicate_255556)(Ttype224847* t);
N_NIMCALL(NI64, computerecsizeaux_262694)(Tnode224809* n, NI64* a, NI64* curroffset);
N_NIMCALL(Tnode224809*, lastson_227406)(Tnode224809* n);
N_NIMCALL(NIM_BOOL, sametype_259092)(Ttype224847* a, Ttype224847* b, NU8 flags);
N_NIMCALL(NU8, equalparam_259157)(Tsym224841* a, Tsym224841* b);
N_NIMCALL(NIM_BOOL, sametypeornil_259108)(Ttype224847* a, Ttype224847* b, NU8 flags);
N_NIMCALL(Ttype224847*, typeallowedaux_261858)(Intset221056* marker, Ttype224847* typ, NU8 kind, NU8 flags_261866);
N_NIMCALL(Ttype224847*, typeallowednode_261870)(Intset221056* marker, Tnode224809* n, NU8 kind, NU8 flags);
N_NIMCALL(Ttype224847*, copytype_227542)(Ttype224847* t, Tsym224841* owner, NIM_BOOL keepid);
static N_INLINE(void, asgnRefNoCycle)(void** dest, void* src);
static N_INLINE(Cell48947*, usrtocell_52646)(void* usr);
static N_INLINE(void, rtladdzct_54204)(Cell48947* c);
N_NOINLINE(void, addzct_52617)(Cellseq48963* s, Cell48947* c);
N_NIMCALL(Ttype224847*, taketype_264006)(Ttype224847* formal, Ttype224847* arg);
N_NIMCALL(Tnode224809*, copytree_229028)(Tnode224809* src);
N_NIMCALL(Tnode224809*, skipconv_263935)(Tnode224809* n);
N_NIMCALL(NIM_BOOL, searchtypefor_255514)(Ttype224847* t, Ttypepredicate254050 predicate);
N_NIMCALL(NIM_BOOL, searchtypeforaux_255226)(Ttype224847* t, Ttypepredicate254050 predicate, Intset221056* marker);
N_NIMCALL(NIM_BOOL, searchtypenodeforaux_255235)(Tnode224809* n, Ttypepredicate254050 p, Intset221056* marker);
N_NIMCALL(NIM_BOOL, isgcref_255783)(Ttype224847* t);
N_NIMCALL(void, incl_221856)(Intset221056* s, NI key);
N_NIMCALL(NIM_BOOL, contains_221829)(Intset221056* s, NI key);
N_NIMCALL(NIM_BOOL, canformacycleaux_255909)(Intset221056* marker, Ttype224847* typ, NI startid);
N_NIMCALL(NIM_BOOL, canformacyclenode_255918)(Intset221056* marker, Tnode224809* n, NI startid);
N_NIMCALL(NU8, analyseobjectwithtypefieldaux_255637)(Ttype224847* t, Intset221056* marker);
N_NIMCALL(NIM_BOOL, ishiddenpointer_255878)(Ttype224847* t);
static N_INLINE(NIM_BOOL, iscompiletimeonly_263712)(Ttype224847* t);
N_NIMCALL(NIM_BOOL, HEX3DHEX3D_263739)(Ttypeseq224843* x, Ttypeseq224843* y);
STRING_LITERAL(TMP2077, "", 0);
STRING_LITERAL(TMP2078, " literal(", 9);
STRING_LITERAL(TMP2079, ")", 1);
STRING_LITERAL(TMP2080, "shared ", 7);
STRING_LITERAL(TMP2081, " not nil", 8);
STRING_LITERAL(TMP2082, "None", 4);
STRING_LITERAL(TMP2083, "bool", 4);
STRING_LITERAL(TMP2084, "Char", 4);
STRING_LITERAL(TMP2085, "empty", 5);
STRING_LITERAL(TMP2086, "Array Constructor [$1]", 22);
STRING_LITERAL(TMP2087, "nil", 3);
STRING_LITERAL(TMP2088, "untyped", 7);
STRING_LITERAL(TMP2089, "typed", 5);
STRING_LITERAL(TMP2090, "typeDesc", 8);
STRING_LITERAL(TMP2091, "GenericInvocation", 17);
STRING_LITERAL(TMP2092, "GenericBody", 11);
STRING_LITERAL(TMP2093, "GenericInst", 11);
STRING_LITERAL(TMP2094, "GenericParam", 12);
STRING_LITERAL(TMP2095, "distinct $1", 11);
STRING_LITERAL(TMP2096, "enum", 4);
STRING_LITERAL(TMP2097, "ordinal[$1]", 11);
STRING_LITERAL(TMP2098, "array[$1, $2]", 13);
STRING_LITERAL(TMP2099, "object", 6);
STRING_LITERAL(TMP2100, "tuple", 5);
STRING_LITERAL(TMP2101, "set[$1]", 7);
STRING_LITERAL(TMP2102, "range[$1]", 9);
STRING_LITERAL(TMP2103, "ptr ", 4);
STRING_LITERAL(TMP2104, "ref ", 4);
STRING_LITERAL(TMP2105, "var ", 4);
STRING_LITERAL(TMP2106, "seq[$1]", 7);
STRING_LITERAL(TMP2107, "proc", 4);
STRING_LITERAL(TMP2108, "pointer", 7);
STRING_LITERAL(TMP2109, "OpenArray[$1]", 13);
STRING_LITERAL(TMP2110, "string", 6);
STRING_LITERAL(TMP2111, "CString", 7);
STRING_LITERAL(TMP2112, "Forward", 7);
STRING_LITERAL(TMP2113, "int", 3);
STRING_LITERAL(TMP2114, "int8", 4);
STRING_LITERAL(TMP2115, "int16", 5);
STRING_LITERAL(TMP2116, "int32", 5);
STRING_LITERAL(TMP2117, "int64", 5);
STRING_LITERAL(TMP2118, "float", 5);
STRING_LITERAL(TMP2119, "float32", 7);
STRING_LITERAL(TMP2120, "float64", 7);
STRING_LITERAL(TMP2121, "float128", 8);
STRING_LITERAL(TMP2122, "uint", 4);
STRING_LITERAL(TMP2123, "uint8", 5);
STRING_LITERAL(TMP2124, "uint16", 6);
STRING_LITERAL(TMP2125, "uint32", 6);
STRING_LITERAL(TMP2126, "uint64", 6);
STRING_LITERAL(TMP2127, "bignum", 6);
STRING_LITERAL(TMP2128, "const ", 6);
STRING_LITERAL(TMP2129, "!", 1);
STRING_LITERAL(TMP2130, "varargs[$1]", 11);
STRING_LITERAL(TMP2131, "iter[$1]", 8);
STRING_LITERAL(TMP2132, "Error Type", 10);
STRING_LITERAL(TMP2133, "BuiltInTypeClass", 16);
STRING_LITERAL(TMP2134, "UserTypeClass", 13);
STRING_LITERAL(TMP2135, "UserTypeClassInst", 17);
STRING_LITERAL(TMP2136, "CompositeTypeClass", 18);
STRING_LITERAL(TMP2137, "and", 3);
STRING_LITERAL(TMP2138, "or", 2);
STRING_LITERAL(TMP2139, "not", 3);
STRING_LITERAL(TMP2140, "any", 3);
STRING_LITERAL(TMP2141, "static", 6);
STRING_LITERAL(TMP2142, "TypeFromExpr", 12);
STRING_LITERAL(TMP2143, "FieldAccessor", 13);
NIM_CONST TY256612 typetostr_256609 = {((NimStringDesc*) &TMP2082),
((NimStringDesc*) &TMP2083),
((NimStringDesc*) &TMP2084),
((NimStringDesc*) &TMP2085),
((NimStringDesc*) &TMP2086),
((NimStringDesc*) &TMP2087),
((NimStringDesc*) &TMP2088),
((NimStringDesc*) &TMP2089),
((NimStringDesc*) &TMP2090),
((NimStringDesc*) &TMP2091),
((NimStringDesc*) &TMP2092),
((NimStringDesc*) &TMP2093),
((NimStringDesc*) &TMP2094),
((NimStringDesc*) &TMP2095),
((NimStringDesc*) &TMP2096),
((NimStringDesc*) &TMP2097),
((NimStringDesc*) &TMP2098),
((NimStringDesc*) &TMP2099),
((NimStringDesc*) &TMP2100),
((NimStringDesc*) &TMP2101),
((NimStringDesc*) &TMP2102),
((NimStringDesc*) &TMP2103),
((NimStringDesc*) &TMP2104),
((NimStringDesc*) &TMP2105),
((NimStringDesc*) &TMP2106),
((NimStringDesc*) &TMP2107),
((NimStringDesc*) &TMP2108),
((NimStringDesc*) &TMP2109),
((NimStringDesc*) &TMP2110),
((NimStringDesc*) &TMP2111),
((NimStringDesc*) &TMP2112),
((NimStringDesc*) &TMP2113),
((NimStringDesc*) &TMP2114),
((NimStringDesc*) &TMP2115),
((NimStringDesc*) &TMP2116),
((NimStringDesc*) &TMP2117),
((NimStringDesc*) &TMP2118),
((NimStringDesc*) &TMP2119),
((NimStringDesc*) &TMP2120),
((NimStringDesc*) &TMP2121),
((NimStringDesc*) &TMP2122),
((NimStringDesc*) &TMP2123),
((NimStringDesc*) &TMP2124),
((NimStringDesc*) &TMP2125),
((NimStringDesc*) &TMP2126),
((NimStringDesc*) &TMP2127),
((NimStringDesc*) &TMP2128),
((NimStringDesc*) &TMP2129),
((NimStringDesc*) &TMP2130),
((NimStringDesc*) &TMP2131),
((NimStringDesc*) &TMP2132),
((NimStringDesc*) &TMP2133),
((NimStringDesc*) &TMP2134),
((NimStringDesc*) &TMP2135),
((NimStringDesc*) &TMP2136),
((NimStringDesc*) &TMP2137),
((NimStringDesc*) &TMP2138),
((NimStringDesc*) &TMP2139),
((NimStringDesc*) &TMP2140),
((NimStringDesc*) &TMP2141),
((NimStringDesc*) &TMP2142),
((NimStringDesc*) &TMP2143)}
;
STRING_LITERAL(TMP2144, "int literal(", 12);
STRING_LITERAL(TMP2145, ", ", 2);
STRING_LITERAL(TMP2146, "typedesc", 8);
STRING_LITERAL(TMP2147, "typedesc[", 9);
STRING_LITERAL(TMP2148, "]", 1);
STRING_LITERAL(TMP2150, "compiler/types.nim", 18);
NIM_CONST TY90959 TMP2149 = {((NimStringDesc*) &TMP2150),
((NI) 451)}
;
STRING_LITERAL(TMP2151, "static[", 7);
STRING_LITERAL(TMP2152, "(", 1);
NIM_CONST TY90959 TMP2153 = {((NimStringDesc*) &TMP2150),
((NI) 458)}
;
STRING_LITERAL(TMP2154, "var", 3);
STRING_LITERAL(TMP2155, "ref", 3);
STRING_LITERAL(TMP2156, "ptr", 3);
STRING_LITERAL(TMP2157, "seq", 3);
STRING_LITERAL(TMP2158, "array", 5);
STRING_LITERAL(TMP2159, "set", 3);
STRING_LITERAL(TMP2160, "range", 5);
STRING_LITERAL(TMP2161, "distinct", 8);
STRING_LITERAL(TMP2162, "openarray", 9);
STRING_LITERAL(TMP2163, "[", 1);
STRING_LITERAL(TMP2164, " and ", 5);
STRING_LITERAL(TMP2165, " or ", 4);
STRING_LITERAL(TMP2166, "not ", 4);
NIM_CONST TY90959 TMP2167 = {((NimStringDesc*) &TMP2150),
((NI) 489)}
;
STRING_LITERAL(TMP2168, "array[", 6);
STRING_LITERAL(TMP2169, "<invalid value>", 15);
STRING_LITERAL(TMP2170, "..", 2);
STRING_LITERAL(TMP2171, "Array constructor[", 18);
STRING_LITERAL(TMP2172, "seq[", 4);
STRING_LITERAL(TMP2173, "ordinal[", 8);
STRING_LITERAL(TMP2174, "set[", 4);
STRING_LITERAL(TMP2175, "openarray[", 10);
STRING_LITERAL(TMP2176, "distinct ", 9);
STRING_LITERAL(TMP2177, "tuple[", 6);
STRING_LITERAL(TMP2178, ": ", 2);
STRING_LITERAL(TMP2179, "tuple[]", 7);
STRING_LITERAL(TMP2180, "range ", 6);
STRING_LITERAL(TMP2181, "iterator (", 10);
STRING_LITERAL(TMP2182, "proc (", 6);
extern NIM_CONST TY224022 Callingconvtostr_224019;
STRING_LITERAL(TMP2193, "noSideEffect", 12);
STRING_LITERAL(TMP2194, "gcsafe", 6);
STRING_LITERAL(TMP2195, "locks: ", 7);
STRING_LITERAL(TMP2198, "{.", 2);
STRING_LITERAL(TMP2199, ".}", 2);
STRING_LITERAL(TMP2741, "sameTuple", 9);
NIM_CONST TY90959 TMP2742 = {((NimStringDesc*) &TMP2150),
((NI) 731)}
;
STRING_LITERAL(TMP2752, "invalid kind for first(", 23);
STRING_LITERAL(TMP2753, "invalid kind for last(", 22);
NIM_CONST TY90959 TMP2756 = {((NimStringDesc*) &TMP2150),
((NI) 1384)}
;
NIM_CONST TY90959 TMP2757 = {((NimStringDesc*) &TMP2150),
((NI) 1385)}
;
STRING_LITERAL(TMP2765, "getProcHeader", 13);
STRING_LITERAL(TMP2925, "computeRecSizeAux(record case branch)", 37);
STRING_LITERAL(TMP2926, "getSize: ", 9);
NIM_CONST TY90959 TMP3495 = {((NimStringDesc*) &TMP2150),
((NI) 1361)}
;
STRING_LITERAL(TMP3564, "searchTypeNodeForAux(record case branch)", 40);
STRING_LITERAL(TMP3565, "searchTypeNodeForAux()", 22);
TNimType NTI258855; /* tuple[a: int, b: int] */
extern TNimType NTI108; /* int */
TNimType NTI258854; /* seq[tuple[a: int, b: int]] */
extern NI intsize_173651;
extern TNimType NTI224262; /* TTypeKind */
extern NI floatsize_173652;
extern NI ptrsize_173653;
extern Gcheap51018 gch_51059;

static N_INLINE(NIM_BOOL, isintlit_254327)(Ttype224847* 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_256623)(NimStringDesc** name, Ttype224847* typ) {
	{
		NimStringDesc* LOC5;
		if (!(((*typ).flags &(1<<((((NU8) 15))&31)))!=0)) goto LA3;
		LOC5 = 0;
		LOC5 = rawNewString((*name)->Sup.len + 7);
appendString(LOC5, ((NimStringDesc*) &TMP2080));
appendString(LOC5, (*name));
		unsureAsgnRef((void**) (&(*name)), LOC5);
	}
	LA3: ;
	{
		if (!(((*typ).flags &(1<<((((NU8) 16))&31)))!=0)) goto LA8;
		(*name) = resizeString((*name), 8);
appendString((*name), ((NimStringDesc*) &TMP2081));
	}
	LA8: ;
}

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

N_NIMCALL(NimStringDesc*, valuetostring_256438)(Tnode224809* 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*) &TMP2169));
	}
	break;
	}
	return result;
}

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

static N_INLINE(NI, len_225098)(Tnode224809* n) {
	NI result;
	result = 0;
	{
		if (!(*n).kindU.S6.sons == 0) goto LA3;
		result = ((NI) 0);
	}
	goto LA1;
	LA3: ;
	{
		result = ((*n).kindU.S6.sons ? (*n).kindU.S6.sons->Sup.len : 0);
	}
	LA1: ;
	return result;
}

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

static N_INLINE(void, addsep_103118)(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_254032)(Ttype224847* typ, NU8 prefer) {
	NimStringDesc* result;
	Ttype224847* t;
{	result = 0;
	t = typ;
	result = copyString(((NimStringDesc*) &TMP2077));
	{
		if (!(t == NIM_NIL)) goto LA3;
		goto BeforeRet;
	}
	LA3: ;
	{
		NIM_BOOL LOC7;
		NIM_BOOL LOC8;
		LOC7 = 0;
		LOC8 = 0;
		LOC8 = ((25 &(1<<((prefer)&7)))!=0);
		if (!(LOC8)) goto LA9;
		LOC8 = !(((*t).sym == NIM_NIL));
		LA9: ;
		LOC7 = LOC8;
		if (!(LOC7)) goto LA10;
		LOC7 = !((((*(*t).sym).flags &(1<<((((NU8) 29))&31)))!=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_254327(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*) &TMP2078));
appendString(LOC19, LOC20);
appendString(LOC19, ((NimStringDesc*) &TMP2079));
			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_256623((&result), t);
		goto BeforeRet;
	}
	LA11: ;
	switch ((*t).kind) {
	case ((NU8) 31):
	{
		{
			NIM_BOOL LOC31;
			NIM_BOOL LOC32;
			LOC31 = 0;
			LOC32 = 0;
			LOC32 = isintlit_254327(t);
			LOC31 = !(LOC32);
			if (LOC31) goto LA33;
			LOC31 = (prefer == ((NU8) 2));
			LA33: ;
			if (!LOC31) goto LA34;
			result = copyString(typetostr_256609[((*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*) &TMP2144));
appendString(LOC42, LOC43);
appendString(LOC42, ((NimStringDesc*) &TMP2079));
				result = LOC42;
			}
			LA37: ;
		}
		LA29: ;
	}
	break;
	case ((NU8) 10):
	case ((NU8) 11):
	case ((NU8) 9):
	{
		NimStringDesc* LOC45;
		NimStringDesc* LOC46;
		LOC45 = 0;
		LOC46 = 0;
		LOC46 = typetostring_254032((*t).sons->data[((NI) 0)], ((NU8) 0));
		LOC45 = rawNewString(LOC46->Sup.len + 1);
appendString(LOC45, LOC46);
appendChar(LOC45, 91);
		result = LOC45;
		{
			NI i_256789;
			NI HEX3Atmp_257349;
			NI LOC48;
			NI res_257352;
			i_256789 = 0;
			HEX3Atmp_257349 = 0;
			LOC48 = 0;
			LOC48 = sonslen_227351(t);
			HEX3Atmp_257349 = (NI)((NI)(LOC48 - ((NI) 1)) - ((NI) (!(((*t).kind == ((NU8) 9))))));
			res_257352 = ((NI) 1);
			{
				while (1) {
					NimStringDesc* LOC55;
					if (!(res_257352 <= HEX3Atmp_257349)) goto LA50;
					i_256789 = res_257352;
					{
						if (!(((NI) 1) < i_256789)) goto LA53;
						result = resizeString(result, 2);
appendString(result, ((NimStringDesc*) &TMP2145));
					}
					LA53: ;
					LOC55 = 0;
					LOC55 = typetostring_254032((*t).sons->data[i_256789], ((NU8) 4));
					result = resizeString(result, LOC55->Sup.len + 0);
appendString(result, LOC55);
					res_257352 += ((NI) 1);
				} LA50: ;
			}
		}
		result = addChar(result, 93);
	}
	break;
	case ((NU8) 8):
	{
		{
			Ttype224847* LOC59;
			LOC59 = 0;
			LOC59 = base_254039(t);
			if (!((*LOC59).kind == ((NU8) 0))) goto LA60;
			result = copyString(((NimStringDesc*) &TMP2146));
		}
		goto LA57;
		LA60: ;
		{
			NimStringDesc* LOC63;
			Ttype224847* LOC64;
			NimStringDesc* LOC65;
			LOC63 = 0;
			LOC64 = 0;
			LOC64 = base_254039(t);
			LOC65 = 0;
			LOC65 = typetostring_254032(LOC64, ((NU8) 0));
			LOC63 = rawNewString(LOC65->Sup.len + 10);
appendString(LOC63, ((NimStringDesc*) &TMP2147));
appendString(LOC63, LOC65);
appendString(LOC63, ((NimStringDesc*) &TMP2148));
			result = LOC63;
		}
		LA57: ;
	}
	break;
	case ((NU8) 59):
	{
		{
			NI LOC69;
			NimStringDesc* LOC72;
			LOC69 = 0;
			LOC69 = len_227369(t);
			if (!!((((NI) 0) < LOC69))) goto LA70;
			LOC72 = 0;
			LOC72 = HEX24_195279(TMP2149);
			internalerror_195191(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_246059((*t).n, 0);
		}
		goto LA73;
		LA77: ;
		{
			NimStringDesc* LOC80;
			NimStringDesc* LOC81;
			LOC80 = 0;
			LOC81 = 0;
			LOC81 = typetostring_254032((*t).sons->data[((NI) 0)], ((NU8) 0));
			LOC80 = rawNewString(LOC81->Sup.len + 8);
appendString(LOC80, ((NimStringDesc*) &TMP2151));
appendString(LOC80, LOC81);
appendString(LOC80, ((NimStringDesc*) &TMP2148));
			result = LOC80;
			{
				NimStringDesc* LOC86;
				NimStringDesc* LOC87;
				if (!!(((*t).n == NIM_NIL))) goto LA84;
				LOC86 = 0;
				LOC87 = 0;
				LOC87 = rendertree_246059((*t).n, 0);
				LOC86 = rawNewString(LOC87->Sup.len + 2);
appendString(LOC86, ((NimStringDesc*) &TMP2152));
appendString(LOC86, LOC87);
appendString(LOC86, ((NimStringDesc*) &TMP2079));
				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_195279(TMP2153);
			internalerror_195191(LOC95);
		}
		LA93: ;
		result = copyString((*(*(*(*t).sym).owner).name).s);
		goto BeforeRet;
	}
	break;
	case ((NU8) 51):
	{
		Ttype224847* LOC97;
		LOC97 = 0;
		LOC97 = base_254039(t);
		switch ((*LOC97).kind) {
		case ((NU8) 23):
		{
			result = copyString(((NimStringDesc*) &TMP2154));
		}
		break;
		case ((NU8) 22):
		{
			result = copyString(((NimStringDesc*) &TMP2155));
		}
		break;
		case ((NU8) 21):
		{
			result = copyString(((NimStringDesc*) &TMP2156));
		}
		break;
		case ((NU8) 24):
		{
			result = copyString(((NimStringDesc*) &TMP2157));
		}
		break;
		case ((NU8) 16):
		{
			result = copyString(((NimStringDesc*) &TMP2158));
		}
		break;
		case ((NU8) 19):
		{
			result = copyString(((NimStringDesc*) &TMP2159));
		}
		break;
		case ((NU8) 20):
		{
			result = copyString(((NimStringDesc*) &TMP2160));
		}
		break;
		case ((NU8) 13):
		{
			result = copyString(((NimStringDesc*) &TMP2161));
		}
		break;
		case ((NU8) 25):
		{
			result = copyString(((NimStringDesc*) &TMP2107));
		}
		break;
		case ((NU8) 17):
		{
			result = copyString(((NimStringDesc*) &TMP2099));
		}
		break;
		case ((NU8) 18):
		{
			result = copyString(((NimStringDesc*) &TMP2100));
		}
		break;
		case ((NU8) 27):
		{
			result = copyString(((NimStringDesc*) &TMP2162));
		}
		break;
		default:
		{
			Ttype224847* LOC111;
			LOC111 = 0;
			LOC111 = base_254039(t);
			result = copyString(typetostr_256609[((*LOC111).kind)- 0]);
		}
		break;
		}
	}
	break;
	case ((NU8) 53):
	{
		Ttype224847* body;
		NimStringDesc* LOC113;
		body = base_254039(t);
		LOC113 = 0;
		LOC113 = rawNewString((*(*(*body).sym).name).s->Sup.len + 1);
appendString(LOC113, (*(*(*body).sym).name).s);
appendString(LOC113, ((NimStringDesc*) &TMP2163));
		result = LOC113;
		{
			NI i_256888;
			NI HEX3Atmp_257357;
			NI LOC115;
			NI res_257360;
			i_256888 = 0;
			HEX3Atmp_257357 = 0;
			LOC115 = 0;
			LOC115 = sonslen_227351(t);
			HEX3Atmp_257357 = (NI)(LOC115 - ((NI) 2));
			res_257360 = ((NI) 1);
			{
				while (1) {
					NimStringDesc* LOC122;
					if (!(res_257360 <= HEX3Atmp_257357)) goto LA117;
					i_256888 = res_257360;
					{
						if (!(((NI) 1) < i_256888)) goto LA120;
						result = resizeString(result, 2);
appendString(result, ((NimStringDesc*) &TMP2145));
					}
					LA120: ;
					LOC122 = 0;
					LOC122 = typetostring_254032((*t).sons->data[i_256888], ((NU8) 0));
					result = resizeString(result, LOC122->Sup.len + 0);
appendString(result, LOC122);
					res_257360 += ((NI) 1);
				} LA117: ;
			}
		}
		result = resizeString(result, 1);
appendString(result, ((NimStringDesc*) &TMP2148));
	}
	break;
	case ((NU8) 55):
	{
		NimStringDesc* LOC124;
		NimStringDesc* LOC125;
		NimStringDesc* LOC126;
		LOC124 = 0;
		LOC125 = 0;
		LOC125 = typetostring_254032((*t).sons->data[((NI) 0)], ((NU8) 0));
		LOC126 = 0;
		LOC126 = typetostring_254032((*t).sons->data[((NI) 1)], ((NU8) 0));
		LOC124 = rawNewString(LOC125->Sup.len + LOC126->Sup.len + 5);
appendString(LOC124, LOC125);
appendString(LOC124, ((NimStringDesc*) &TMP2164));
appendString(LOC124, LOC126);
		result = LOC124;
	}
	break;
	case ((NU8) 56):
	{
		NimStringDesc* LOC128;
		NimStringDesc* LOC129;
		NimStringDesc* LOC130;
		LOC128 = 0;
		LOC129 = 0;
		LOC129 = typetostring_254032((*t).sons->data[((NI) 0)], ((NU8) 0));
		LOC130 = 0;
		LOC130 = typetostring_254032((*t).sons->data[((NI) 1)], ((NU8) 0));
		LOC128 = rawNewString(LOC129->Sup.len + LOC130->Sup.len + 4);
appendString(LOC128, LOC129);
appendString(LOC128, ((NimStringDesc*) &TMP2165));
appendString(LOC128, LOC130);
		result = LOC128;
	}
	break;
	case ((NU8) 57):
	{
		NimStringDesc* LOC132;
		NimStringDesc* LOC133;
		LOC132 = 0;
		LOC133 = 0;
		LOC133 = typetostring_254032((*t).sons->data[((NI) 0)], ((NU8) 0));
		LOC132 = rawNewString(LOC133->Sup.len + 4);
appendString(LOC132, ((NimStringDesc*) &TMP2166));
appendString(LOC132, LOC133);
		result = LOC132;
	}
	break;
	case ((NU8) 6):
	{
		{
			NI LOC137;
			NimStringDesc* LOC140;
			LOC137 = 0;
			LOC137 = len_227369(t);
			if (!!((LOC137 == ((NI) 0)))) goto LA138;
			LOC140 = 0;
			LOC140 = HEX24_195279(TMP2167);
			internalerror_195191(LOC140);
		}
		LA138: ;
		result = copyString(((NimStringDesc*) &TMP2088));
	}
	break;
	case ((NU8) 60):
	case ((NU8) 61):
	{
		result = rendertree_246059((*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_256451((*(*t).sons->data[((NI) 0)]).n);
			LOC149 = 0;
			LOC149 = typetostring_254032((*t).sons->data[((NI) 1)], ((NU8) 0));
			LOC147 = rawNewString(LOC148->Sup.len + LOC149->Sup.len + 9);
appendString(LOC147, ((NimStringDesc*) &TMP2168));
appendString(LOC147, LOC148);
appendString(LOC147, ((NimStringDesc*) &TMP2145));
appendString(LOC147, LOC149);
appendChar(LOC147, 93);
			result = LOC147;
		}
		goto LA143;
		LA145: ;
		{
			NimStringDesc* LOC151;
			NimStringDesc* LOC152;
			NimStringDesc* LOC153;
			LOC151 = 0;
			LOC152 = 0;
			LOC152 = typetostring_254032((*t).sons->data[((NI) 0)], ((NU8) 0));
			LOC153 = 0;
			LOC153 = typetostring_254032((*t).sons->data[((NI) 1)], ((NU8) 0));
			LOC151 = rawNewString(LOC152->Sup.len + LOC153->Sup.len + 9);
appendString(LOC151, ((NimStringDesc*) &TMP2168));
appendString(LOC151, LOC152);
appendString(LOC151, ((NimStringDesc*) &TMP2145));
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_256451((*(*t).sons->data[((NI) 0)]).n);
		LOC157 = 0;
		LOC157 = typetostring_254032((*t).sons->data[((NI) 1)], ((NU8) 0));
		LOC155 = rawNewString(LOC156->Sup.len + LOC157->Sup.len + 21);
appendString(LOC155, ((NimStringDesc*) &TMP2171));
appendString(LOC155, LOC156);
appendString(LOC155, ((NimStringDesc*) &TMP2145));
appendString(LOC155, LOC157);
appendChar(LOC155, 93);
		result = LOC155;
	}
	break;
	case ((NU8) 24):
	{
		NimStringDesc* LOC159;
		NimStringDesc* LOC160;
		LOC159 = 0;
		LOC160 = 0;
		LOC160 = typetostring_254032((*t).sons->data[((NI) 0)], ((NU8) 0));
		LOC159 = rawNewString(LOC160->Sup.len + 5);
appendString(LOC159, ((NimStringDesc*) &TMP2172));
appendString(LOC159, LOC160);
appendChar(LOC159, 93);
		result = LOC159;
	}
	break;
	case ((NU8) 15):
	{
		NimStringDesc* LOC162;
		NimStringDesc* LOC163;
		LOC162 = 0;
		LOC163 = 0;
		LOC163 = typetostring_254032((*t).sons->data[((NI) 0)], ((NU8) 0));
		LOC162 = rawNewString(LOC163->Sup.len + 9);
appendString(LOC162, ((NimStringDesc*) &TMP2173));
appendString(LOC162, LOC163);
appendChar(LOC162, 93);
		result = LOC162;
	}
	break;
	case ((NU8) 19):
	{
		NimStringDesc* LOC165;
		NimStringDesc* LOC166;
		LOC165 = 0;
		LOC166 = 0;
		LOC166 = typetostring_254032((*t).sons->data[((NI) 0)], ((NU8) 0));
		LOC165 = rawNewString(LOC166->Sup.len + 5);
appendString(LOC165, ((NimStringDesc*) &TMP2174));
appendString(LOC165, LOC166);
appendChar(LOC165, 93);
		result = LOC165;
	}
	break;
	case ((NU8) 27):
	{
		NimStringDesc* LOC168;
		NimStringDesc* LOC169;
		LOC168 = 0;
		LOC169 = 0;
		LOC169 = typetostring_254032((*t).sons->data[((NI) 0)], ((NU8) 0));
		LOC168 = rawNewString(LOC169->Sup.len + 11);
appendString(LOC168, ((NimStringDesc*) &TMP2175));
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_254032((*t).sons->data[((NI) 0)], LOC172);
		LOC171 = rawNewString(LOC178->Sup.len + 9);
appendString(LOC171, ((NimStringDesc*) &TMP2176));
appendString(LOC171, LOC178);
		result = LOC171;
	}
	break;
	case ((NU8) 18):
	{
		{
			if (!!(((*t).n == NIM_NIL))) goto LA182;
			result = copyString(((NimStringDesc*) &TMP2177));
			{
				NI i_257013;
				NI HEX3Atmp_257365;
				NI LOC185;
				NI res_257368;
				i_257013 = 0;
				HEX3Atmp_257365 = 0;
				LOC185 = 0;
				LOC185 = sonslen_227387((*t).n);
				HEX3Atmp_257365 = (NI)(LOC185 - ((NI) 1));
				res_257368 = ((NI) 0);
				{
					while (1) {
						NimStringDesc* LOC188;
						NimStringDesc* LOC189;
						if (!(res_257368 <= HEX3Atmp_257365)) goto LA187;
						i_257013 = res_257368;
						LOC188 = 0;
						LOC189 = 0;
						LOC189 = typetostring_254032((*t).sons->data[i_257013], ((NU8) 0));
						LOC188 = rawNewString((*(*(*(*(*t).n).kindU.S6.sons->data[i_257013]).kindU.S4.sym).name).s->Sup.len + LOC189->Sup.len + 2);
appendString(LOC188, (*(*(*(*(*t).n).kindU.S6.sons->data[i_257013]).kindU.S4.sym).name).s);
appendString(LOC188, ((NimStringDesc*) &TMP2178));
appendString(LOC188, LOC189);
						result = resizeString(result, LOC188->Sup.len + 0);
appendString(result, LOC188);
						{
							NI LOC192;
							LOC192 = 0;
							LOC192 = sonslen_227387((*t).n);
							if (!(i_257013 < (NI)(LOC192 - ((NI) 1)))) goto LA193;
							result = resizeString(result, 2);
appendString(result, ((NimStringDesc*) &TMP2145));
						}
						LA193: ;
						res_257368 += ((NI) 1);
					} LA187: ;
				}
			}
			result = addChar(result, 93);
		}
		goto LA180;
		LA182: ;
		{
			NI LOC196;
			LOC196 = 0;
			LOC196 = sonslen_227351(t);
			if (!(LOC196 == ((NI) 0))) goto LA197;
			result = copyString(((NimStringDesc*) &TMP2179));
		}
		goto LA180;
		LA197: ;
		{
			result = copyString(((NimStringDesc*) &TMP2152));
			{
				NI i_257216;
				NI HEX3Atmp_257373;
				NI LOC201;
				NI res_257376;
				i_257216 = 0;
				HEX3Atmp_257373 = 0;
				LOC201 = 0;
				LOC201 = sonslen_227351(t);
				HEX3Atmp_257373 = (NI)(LOC201 - ((NI) 1));
				res_257376 = ((NI) 0);
				{
					while (1) {
						NimStringDesc* LOC204;
						if (!(res_257376 <= HEX3Atmp_257373)) goto LA203;
						i_257216 = res_257376;
						LOC204 = 0;
						LOC204 = typetostring_254032((*t).sons->data[i_257216], ((NU8) 0));
						result = resizeString(result, LOC204->Sup.len + 0);
appendString(result, LOC204);
						{
							NI LOC207;
							LOC207 = 0;
							LOC207 = sonslen_227351(t);
							if (!(i_257216 < (NI)(LOC207 - ((NI) 1)))) goto LA208;
							result = resizeString(result, 2);
appendString(result, ((NimStringDesc*) &TMP2145));
						}
						LA208: ;
						res_257376 += ((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_256609[((*t).kind)- 0]);
		{
			NI LOC213;
			LOC213 = 0;
			LOC213 = len_227369(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_257229;
				NI HEX3Atmp_257381;
				NI LOC217;
				NI res_257384;
				i_257229 = 0;
				HEX3Atmp_257381 = 0;
				LOC217 = 0;
				LOC217 = sonslen_227351(t);
				HEX3Atmp_257381 = (NI)(LOC217 - ((NI) 1));
				res_257384 = ((NI) 0);
				{
					while (1) {
						NimStringDesc* LOC220;
						if (!(res_257384 <= HEX3Atmp_257381)) goto LA219;
						i_257229 = res_257384;
						LOC220 = 0;
						LOC220 = typetostring_254032((*t).sons->data[i_257229], ((NU8) 0));
						result = resizeString(result, LOC220->Sup.len + 0);
appendString(result, LOC220);
						{
							NI LOC223;
							LOC223 = 0;
							LOC223 = sonslen_227351(t);
							if (!(i_257229 < (NI)(LOC223 - ((NI) 1)))) goto LA224;
							result = resizeString(result, 2);
appendString(result, ((NimStringDesc*) &TMP2145));
						}
						LA224: ;
						res_257384 += ((NI) 1);
					} LA219: ;
				}
			}
			result = addChar(result, 93);
		}
		goto LA211;
		LA214: ;
		{
			NimStringDesc* LOC227;
			LOC227 = 0;
			LOC227 = typetostring_254032((*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_256451((*t).n);
		LOC229 = rawNewString(LOC230->Sup.len + 6);
appendString(LOC229, ((NimStringDesc*) &TMP2180));
appendString(LOC229, LOC230);
		result = LOC229;
		{
			NimStringDesc* LOC235;
			NimStringDesc* LOC236;
			if (!!((prefer == ((NU8) 2)))) goto LA233;
			LOC235 = 0;
			LOC236 = 0;
			LOC236 = typetostring_254032((*t).sons->data[((NI) 0)], ((NU8) 0));
			LOC235 = rawNewString(LOC236->Sup.len + 2);
appendString(LOC235, ((NimStringDesc*) &TMP2152));
appendString(LOC235, LOC236);
appendString(LOC235, ((NimStringDesc*) &TMP2079));
			result = resizeString(result, LOC235->Sup.len + 0);
appendString(result, LOC235);
		}
		LA233: ;
	}
	break;
	case ((NU8) 25):
	{
		NimStringDesc* prag;
		{
			if (!(((*t).flags &(1<<((((NU8) 14))&31)))!=0)) goto LA240;
			result = copyString(((NimStringDesc*) &TMP2181));
		}
		goto LA238;
		LA240: ;
		{
			result = copyString(((NimStringDesc*) &TMP2182));
		}
		LA238: ;
		{
			NI i_257261;
			NI HEX3Atmp_257389;
			NI LOC244;
			NI res_257392;
			i_257261 = 0;
			HEX3Atmp_257389 = 0;
			LOC244 = 0;
			LOC244 = sonslen_227351(t);
			HEX3Atmp_257389 = (NI)(LOC244 - ((NI) 1));
			res_257392 = ((NI) 1);
			{
				while (1) {
					NimStringDesc* LOC258;
					if (!(res_257392 <= HEX3Atmp_257389)) goto LA246;
					i_257261 = res_257392;
					{
						NIM_BOOL LOC249;
						NIM_BOOL LOC250;
						NI LOC252;
						Tnode224809* LOC254;
						Tnode224809* LOC257;
						LOC249 = 0;
						LOC250 = 0;
						LOC250 = !(((*t).n == NIM_NIL));
						if (!(LOC250)) goto LA251;
						LOC252 = 0;
						LOC252 = len_225098((*t).n);
						LOC250 = (i_257261 < LOC252);
						LA251: ;
						LOC249 = LOC250;
						if (!(LOC249)) goto LA253;
						LOC254 = 0;
						LOC254 = HEX5BHEX5D_225244((*t).n, i_257261);
						LOC249 = ((*LOC254).kind == ((NU8) 3));
						LA253: ;
						if (!LOC249) goto LA255;
						LOC257 = 0;
						LOC257 = HEX5BHEX5D_225244((*t).n, i_257261);
						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*) &TMP2178));
					}
					LA255: ;
					LOC258 = 0;
					LOC258 = typetostring_254032((*t).sons->data[i_257261], ((NU8) 0));
					result = resizeString(result, LOC258->Sup.len + 0);
appendString(result, LOC258);
					{
						NI LOC261;
						LOC261 = 0;
						LOC261 = sonslen_227351(t);
						if (!(i_257261 < (NI)(LOC261 - ((NI) 1)))) goto LA262;
						result = resizeString(result, 2);
appendString(result, ((NimStringDesc*) &TMP2145));
					}
					LA262: ;
					res_257392 += ((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_254032((*t).sons->data[((NI) 0)], ((NU8) 0));
			LOC268 = rawNewString(LOC269->Sup.len + 2);
appendString(LOC268, ((NimStringDesc*) &TMP2178));
appendString(LOC268, LOC269);
			result = resizeString(result, LOC268->Sup.len + 0);
appendString(result, LOC268);
		}
		LA266: ;
		{
			if (!((*t).callconv == ((NU8) 0))) goto LA272;
			prag = copyString(((NimStringDesc*) &TMP2077));
		}
		goto LA270;
		LA272: ;
		{
			prag = copyString(Callingconvtostr_224019[((*t).callconv)- 0]);
		}
		LA270: ;
		{
			if (!(((*t).flags &(1<<((((NU8) 1))&31)))!=0)) goto LA277;
			addsep_103118((&prag), ((NimStringDesc*) &TMP2145), ((NI) 0));
			prag = resizeString(prag, 12);
appendString(prag, ((NimStringDesc*) &TMP2193));
		}
		LA277: ;
		{
			if (!(((*t).flags &(1<<((((NU8) 7))&31)))!=0)) goto LA281;
			addsep_103118((&prag), ((NimStringDesc*) &TMP2145), ((NI) 0));
			prag = resizeString(prag, 6);
appendString(prag, ((NimStringDesc*) &TMP2194));
		}
		LA281: ;
		{
			NimStringDesc* LOC287;
			NimStringDesc* LOC288;
			if (!!((((NI) ((*t).locklevel)) == ((NI) -1)))) goto LA285;
			addsep_103118((&prag), ((NimStringDesc*) &TMP2145), ((NI) 0));
			LOC287 = 0;
			LOC288 = 0;
			LOC288 = HEX24_227096((*t).locklevel);
			LOC287 = rawNewString(LOC288->Sup.len + 7);
appendString(LOC287, ((NimStringDesc*) &TMP2195));
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*) &TMP2198));
appendString(LOC293, prag);
appendString(LOC293, ((NimStringDesc*) &TMP2199));
			result = resizeString(result, LOC293->Sup.len + 0);
appendString(result, LOC293);
		}
		LA291: ;
	}
	break;
	case ((NU8) 48):
	case ((NU8) 49):
	{
		NimStringDesc* LOC295;
		LOC295 = 0;
		LOC295 = typetostring_254032((*t).sons->data[((NI) 0)], ((NU8) 0));
		result = nsuFormatSingleElem(typetostr_256609[((*t).kind)- 0], LOC295);
	}
	break;
	default:
	{
		result = copyString(typetostr_256609[((*t).kind)- 0]);
	}
	break;
	}
	addtypeflags_256623((&result), t);
	}BeforeRet: ;
	return result;
}

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

N_NIMCALL(void, initsametypeclosure_258863)(Tsametypeclosure258841* Result) {
}

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

N_NIMCALL(Ttype224847*, skipgenericalias_260119)(Ttype224847* t) {
	Ttype224847* result;
{	result = 0;
	{
		NIM_BOOL LOC3;
		LOC3 = 0;
		LOC3 = isgenericalias_260091(t);
		if (!LOC3) goto LA4;
		result = lastson_227426(t);
	}
	goto LA1;
	LA4: ;
	{
		result = t;
	}
	LA1: ;
	goto BeforeRet;
	}BeforeRet: ;
	return result;
}

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

static N_INLINE(NI, find_258900)(TY258855* a, NI aLen0, TY258855 item) {
	NI result;
{	result = 0;
	{
		TY258855 i_258944;
		NI i_258978;
		memset((void*)(&i_258944), 0, sizeof(i_258944));
		i_258978 = ((NI) 0);
		{
			while (1) {
				if (!(i_258978 < aLen0)) goto LA3;
				i_258944 = a[i_258978];
				{
					NIM_BOOL LOC6;
					LOC6 = 0;
					LOC6 = HEX3DHEX3D_258946(i_258944, item);
					if (!LOC6) goto LA7;
					goto BeforeRet;
				}
				LA7: ;
				result += ((NI) 1);
				i_258978 += ((NI) 1);
			} LA3: ;
		}
	}
	result = ((NI) -1);
	}BeforeRet: ;
	return result;
}

static N_INLINE(NIM_BOOL, contains_258890)(TY258855* a, NI aLen0, TY258855 item) {
	NIM_BOOL result;
	NI LOC1;
{	result = 0;
	LOC1 = 0;
	LOC1 = find_258900(a, aLen0, item);
	result = (((NI) 0) <= LOC1);
	goto BeforeRet;
	}BeforeRet: ;
	return result;
}
N_NIMCALL(void, TMP2740)(void* p, NI op) {
	TY258854* a;
	NI LOC1;
	a = (TY258854*)p;
	LOC1 = 0;
	for (LOC1 = 0; LOC1 < a->Sup.len; LOC1++) {
	}
}

N_NIMCALL(NIM_BOOL, containsorincl_258872)(Tsametypeclosure258841* c, Ttype224847* a, Ttype224847* b) {
	NIM_BOOL result;
	NIM_BOOL LOC1;
	TY258855 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_258890((*c).s->data, (*c).s->Sup.len, LOC3);
	LA2: ;
	result = LOC1;
	{
		TY258855 LOC12;
		if (!!(result)) goto LA6;
		{
			if (!(*c).s == 0) goto LA10;
			unsureAsgnRef((void**) (&(*c).s), (TY258854*) newSeq((&NTI258854), 0));
		}
		LA10: ;
		LOC12.Field0 = (*a).Sup.id;
		LOC12.Field1 = (*b).Sup.id;
		(*c).s = (TY258854*) incrSeqV2(&((*c).s)->Sup, sizeof(TY258855));
		(*c).s->data[(*c).s->Sup.len] = LOC12;
		++(*c).s->Sup.len;
	}
	LA6: ;
	return result;
}

N_NIMCALL(NIM_BOOL, sametypeornilaux_259044)(Ttype224847* a, Ttype224847* b, Tsametypeclosure258841* 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_259035(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_259866)(Tnode224809* a, Tnode224809* b, Tsametypeclosure258841* c) {
	NIM_BOOL result;
{	result = 0;
	{
		if (!(a == b)) goto LA3;
		result = NIM_TRUE;
	}
	goto LA1;
	LA3: ;
	{
		NIM_BOOL LOC6;
		NIM_BOOL LOC7;
		Ttype224847* x;
		Ttype224847* 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 &(1<<((((NU8) 0))&7)))!=0)) goto LA14;
			{
				if (!!((x == NIM_NIL))) goto LA18;
				x = skiptypes_228167(x, 1050624);
			}
			LA18: ;
			{
				if (!!((y == NIM_NIL))) goto LA22;
				y = skiptypes_228167(y, 1050624);
			}
			LA22: ;
		}
		LA14: ;
		{
			NIM_BOOL LOC26;
			LOC26 = 0;
			LOC26 = sametypeornilaux_259044(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_227387(a);
					LOC39 = 0;
					LOC39 = sonslen_227387(b);
					if (!(LOC38 == LOC39)) goto LA40;
					{
						NI i_259979;
						NI HEX3Atmp_259983;
						NI LOC43;
						NI res_259986;
						i_259979 = 0;
						HEX3Atmp_259983 = 0;
						LOC43 = 0;
						LOC43 = sonslen_227387(a);
						HEX3Atmp_259983 = (NI)(LOC43 - ((NI) 1));
						res_259986 = ((NI) 0);
						{
							while (1) {
								if (!(res_259986 <= HEX3Atmp_259983)) goto LA45;
								i_259979 = res_259986;
								{
									NIM_BOOL LOC48;
									LOC48 = 0;
									LOC48 = sameobjecttree_259866((*a).kindU.S6.sons->data[i_259979], (*b).kindU.S6.sons->data[i_259979], c);
									if (!!(LOC48)) goto LA49;
									goto BeforeRet;
								}
								LA49: ;
								res_259986 += ((NI) 1);
							} LA45: ;
						}
					}
					result = NIM_TRUE;
				}
				LA40: ;
			}
			break;
			}
		}
		LA27: ;
	}
	goto LA1;
	LA10: ;
	LA1: ;
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NIM_BOOL, sameobjectstructures_260005)(Ttype224847* a, Ttype224847* b, Tsametypeclosure258841* c) {
	NIM_BOOL result;
{	result = 0;
	{
		NI LOC3;
		NI LOC4;
		LOC3 = 0;
		LOC3 = sonslen_227351(a);
		LOC4 = 0;
		LOC4 = sonslen_227351(b);
		if (!!((LOC3 == LOC4))) goto LA5;
		goto BeforeRet;
	}
	LA5: ;
	{
		NI i_260024;
		NI HEX3Atmp_260026;
		NI LOC8;
		NI res_260029;
		i_260024 = 0;
		HEX3Atmp_260026 = 0;
		LOC8 = 0;
		LOC8 = sonslen_227351(a);
		HEX3Atmp_260026 = (NI)(LOC8 - ((NI) 1));
		res_260029 = ((NI) 0);
		{
			while (1) {
				if (!(res_260029 <= HEX3Atmp_260026)) goto LA10;
				i_260024 = res_260029;
				{
					NIM_BOOL LOC13;
					LOC13 = 0;
					LOC13 = sametypeornilaux_259044((*a).sons->data[i_260024], (*b).sons->data[i_260024], c);
					if (!!(LOC13)) goto LA14;
					goto BeforeRet;
				}
				LA14: ;
				res_260029 += ((NI) 1);
			} LA10: ;
		}
	}
	{
		NIM_BOOL LOC18;
		LOC18 = 0;
		LOC18 = sameobjecttree_259866((*a).n, (*b).n, c);
		if (!!(LOC18)) goto LA19;
		goto BeforeRet;
	}
	LA19: ;
	result = NIM_TRUE;
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NIM_BOOL, sametuple_259622)(Ttype224847* a, Ttype224847* b, Tsametypeclosure258841* c) {
	NIM_BOOL result;
{	result = 0;
	{
		NI LOC3;
		NI LOC4;
		LOC3 = 0;
		LOC3 = sonslen_227351(a);
		LOC4 = 0;
		LOC4 = sonslen_227351(b);
		if (!(LOC3 == LOC4)) goto LA5;
		result = NIM_TRUE;
		{
			NI i_259641;
			NI HEX3Atmp_259732;
			NI LOC8;
			NI res_259735;
			i_259641 = 0;
			HEX3Atmp_259732 = 0;
			LOC8 = 0;
			LOC8 = sonslen_227351(a);
			HEX3Atmp_259732 = (NI)(LOC8 - ((NI) 1));
			res_259735 = ((NI) 0);
			{
				while (1) {
					Ttype224847* x;
					Ttype224847* y;
					if (!(res_259735 <= HEX3Atmp_259732)) goto LA10;
					i_259641 = res_259735;
					x = (*a).sons->data[i_259641];
					y = (*b).sons->data[i_259641];
					{
						if (!(((*c).flags &(1<<((((NU8) 0))&7)))!=0)) goto LA13;
						x = skiptypes_228167(x, 1050624);
						y = skiptypes_228167(y, 1050624);
					}
					LA13: ;
					result = sametypeaux_259035(x, y, c);
					{
						if (!!(result)) goto LA17;
						goto BeforeRet;
					}
					LA17: ;
					res_259735 += ((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 &(1<<((((NU8) 0))&7)))!=0));
			LA24: ;
			if (!LOC21) goto LA25;
			{
				NI i_259702;
				NI HEX3Atmp_259740;
				NI LOC28;
				NI res_259743;
				i_259702 = 0;
				HEX3Atmp_259740 = 0;
				LOC28 = 0;
				LOC28 = sonslen_227387((*a).n);
				HEX3Atmp_259740 = (NI)(LOC28 - ((NI) 1));
				res_259743 = ((NI) 0);
				{
					while (1) {
						if (!(res_259743 <= HEX3Atmp_259740)) goto LA30;
						i_259702 = res_259743;
						{
							NIM_BOOL LOC33;
							Tsym224841* x;
							Tsym224841* y;
							LOC33 = 0;
							LOC33 = ((*(*(*a).n).kindU.S6.sons->data[i_259702]).kind == ((NU8) 3));
							if (!(LOC33)) goto LA34;
							LOC33 = ((*(*(*b).n).kindU.S6.sons->data[i_259702]).kind == ((NU8) 3));
							LA34: ;
							if (!LOC33) goto LA35;
							x = (*(*(*a).n).kindU.S6.sons->data[i_259702]).kindU.S4.sym;
							y = (*(*(*b).n).kindU.S6.sons->data[i_259702]).kindU.S4.sym;
							result = ((*(*x).name).Sup.id == (*(*y).name).Sup.id);
							{
								if (!!(result)) goto LA39;
								goto LA27;
							}
							LA39: ;
						}
						goto LA31;
						LA35: ;
						{
							internalerror_195172((*(*a).n).info, ((NimStringDesc*) &TMP2741));
						}
						LA31: ;
						res_259743 += ((NI) 1);
					} LA30: ;
				}
			} LA27: ;
		}
		LA25: ;
	}
	LA5: ;
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NIM_BOOL, samechildrenaux_260048)(Ttype224847* a, Ttype224847* b, Tsametypeclosure258841* c) {
	NIM_BOOL result;
{	result = 0;
	{
		NI LOC3;
		NI LOC4;
		LOC3 = 0;
		LOC3 = sonslen_227351(a);
		LOC4 = 0;
		LOC4 = sonslen_227351(b);
		if (!!((LOC3 == LOC4))) goto LA5;
		result = NIM_FALSE;
		goto BeforeRet;
	}
	LA5: ;
	result = NIM_TRUE;
	{
		NI i_260067;
		NI HEX3Atmp_260069;
		NI LOC8;
		NI res_260072;
		i_260067 = 0;
		HEX3Atmp_260069 = 0;
		LOC8 = 0;
		LOC8 = sonslen_227351(a);
		HEX3Atmp_260069 = (NI)(LOC8 - ((NI) 1));
		res_260072 = ((NI) 0);
		{
			while (1) {
				if (!(res_260072 <= HEX3Atmp_260069)) goto LA10;
				i_260067 = res_260072;
				result = sametypeornilaux_259044((*a).sons->data[i_260067], (*b).sons->data[i_260067], c);
				{
					if (!!(result)) goto LA13;
					goto BeforeRet;
				}
				LA13: ;
				res_260072 += ((NI) 1);
			} LA10: ;
		}
	}
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NIM_BOOL, sameconstraints_259240)(Tnode224809* a, Tnode224809* b) {
	NIM_BOOL result;
{	result = 0;
	{
		NI LOC3;
		NI LOC4;
		NimStringDesc* LOC7;
		LOC3 = 0;
		LOC3 = len_225098(a);
		LOC4 = 0;
		LOC4 = len_225098(b);
		if (!!((LOC3 == LOC4))) goto LA5;
		LOC7 = 0;
		LOC7 = HEX24_195279(TMP2742);
		internalerror_195191(LOC7);
	}
	LA5: ;
	{
		NI i_259273;
		NI HEX3Atmp_259279;
		NI LOC9;
		NI res_259282;
		i_259273 = 0;
		HEX3Atmp_259279 = 0;
		LOC9 = 0;
		LOC9 = len_225098(a);
		HEX3Atmp_259279 = (LOC9 - 1);
		res_259282 = ((NI) 1);
		{
			while (1) {
				if (!(res_259282 <= HEX3Atmp_259279)) goto LA11;
				i_259273 = res_259282;
				{
					Tnode224809* LOC14;
					Tnode224809* LOC15;
					NIM_BOOL LOC16;
					LOC14 = 0;
					LOC14 = HEX5BHEX5D_225244(a, i_259273);
					LOC15 = 0;
					LOC15 = HEX5BHEX5D_225244(b, i_259273);
					LOC16 = 0;
					LOC16 = exprstructuralequivalent_253149((*(*LOC14).kindU.S4.sym).constraint, (*(*LOC15).kindU.S4.sym).constraint, NIM_FALSE);
					if (!!(LOC16)) goto LA17;
					result = NIM_FALSE;
					goto BeforeRet;
				}
				LA17: ;
				res_259282 += ((NI) 1);
			} LA11: ;
		}
	}
	result = NIM_TRUE;
	goto BeforeRet;
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NIM_BOOL, sametypeaux_259035)(Ttype224847* x, Ttype224847* y, Tsametypeclosure258841* c) {
	NIM_BOOL result;
	Ttype224847* a;
	Ttype224847* b;
{	result = 0;
	{
		if (!(x == y)) goto LA3;
		result = NIM_TRUE;
		goto BeforeRet;
	}
	LA3: ;
	a = skiptypes_228167(x, 2048);
	b = skiptypes_228167(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: ;
	{
		Ttype224847* lhs;
		Ttype224847* rhs;
		if (!((*x).kind == ((NU8) 11))) goto LA28;
		lhs = skipgenericalias_260119(x);
		rhs = skipgenericalias_260119(y);
		{
			NIM_BOOL LOC32;
			Ttype224847* LOC34;
			Ttype224847* LOC35;
			LOC32 = 0;
			LOC32 = !(((*rhs).kind == ((NU8) 11)));
			if (LOC32) goto LA33;
			LOC34 = 0;
			LOC34 = base_254039(lhs);
			LOC35 = 0;
			LOC35 = base_254039(rhs);
			LOC32 = !((LOC34 == LOC35));
			LA33: ;
			if (!LOC32) goto LA36;
			result = NIM_FALSE;
			goto BeforeRet;
		}
		LA36: ;
		{
			NI i_260696;
			NI HEX3Atmp_260981;
			NI LOC39;
			NI res_260984;
			i_260696 = 0;
			HEX3Atmp_260981 = 0;
			LOC39 = 0;
			LOC39 = len_227369(lhs);
			HEX3Atmp_260981 = (NI)(LOC39 - ((NI) 2));
			res_260984 = ((NI) 1);
			{
				while (1) {
					Ttype224847* ff;
					Ttype224847* aa;
					if (!(res_260984 <= HEX3Atmp_260981)) goto LA41;
					i_260696 = res_260984;
					ff = (*rhs).sons->data[i_260696];
					aa = (*lhs).sons->data[i_260696];
					{
						NIM_BOOL LOC44;
						LOC44 = 0;
						LOC44 = sametypeaux_259035(ff, aa, c);
						if (!!(LOC44)) goto LA45;
						result = NIM_FALSE;
						goto BeforeRet;
					}
					LA45: ;
					res_260984 += ((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_260141(a, b);
	}
	break;
	case ((NU8) 59):
	case ((NU8) 60):
	{
		NIM_BOOL LOC49;
		LOC49 = 0;
		LOC49 = exprstructuralequivalent_253149((*a).n, (*b).n, NIM_FALSE);
		if (!(LOC49)) goto LA50;
		LOC49 = sameflags_260141(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_227369(a);
			LOC57 = 0;
			LOC57 = len_227369(b);
			LOC54 = (LOC56 == LOC57);
			LA55: ;
			LOC53 = LOC54;
			if (!(LOC53)) goto LA58;
			LOC59 = 0;
			LOC59 = len_227369(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_258872(c, a, b);
					if (!LOC69) goto LA70;
					result = NIM_TRUE;
					goto BeforeRet;
				}
				LA70: ;
			}
			LA62: ;
			result = sametypeaux_259035((*a).sons->data[((NI) 0)], (*b).sons->data[((NI) 0)], c);
		}
		LA60: ;
	}
	break;
	case ((NU8) 17):
	{
		{
			if (!!(((((*a).flags | (*b).flags) &(1<<((((NU8) 8))&31)))!=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) &(1<<((((NU8) 8))&31)))!=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_258872(c, a, b);
						if (!LOC91) goto LA92;
						result = NIM_TRUE;
						goto BeforeRet;
					}
					LA92: ;
				}
				LA84: ;
				LOC94 = 0;
				LOC94 = sameobjectstructures_260005(a, b, c);
				if (!(LOC94)) goto LA95;
				LOC94 = sameflags_260141(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_258872(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_260141(a, b);
				if (!LOC113) goto LA114;
				{
					if (!!(((((*a).flags | (*b).flags) &(1<<((((NU8) 8))&31)))!=0))) goto LA118;
					result = ((*a).Sup.id == (*b).Sup.id);
				}
				goto LA116;
				LA118: ;
				{
					{
						NIM_BOOL LOC123;
						LOC123 = 0;
						LOC123 = ((((*a).flags & (*b).flags) &(1<<((((NU8) 8))&31)))!=0);
						if (!(LOC123)) goto LA124;
						LOC123 = ((*(*a).sym).Sup.id == (*(*b).sym).Sup.id);
						LA124: ;
						if (!LOC123) goto LA125;
						result = sametypeaux_259035((*a).sons->data[((NI) 0)], (*b).sons->data[((NI) 0)], c);
					}
					LA125: ;
				}
				LA116: ;
			}
			LA114: ;
		}
		goto LA107;
		LA109: ;
		{
			NIM_BOOL LOC128;
			LOC128 = 0;
			LOC128 = sametypeaux_259035((*a).sons->data[((NI) 0)], (*b).sons->data[((NI) 0)], c);
			if (!(LOC128)) goto LA129;
			LOC128 = sameflags_260141(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_260141(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_258872(c, a, b);
				if (!LOC142) goto LA143;
				result = NIM_TRUE;
				goto BeforeRet;
			}
			LA143: ;
		}
		LA135: ;
		LOC145 = 0;
		LOC145 = sametuple_259622(a, b, c);
		if (!(LOC145)) goto LA146;
		LOC145 = sameflags_260141(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 &(1<<((((NU8) 2))&7)))!=0)) goto LA153;
			{
				if (!((*c).reccheck < ((NI) 3))) goto LA157;
				(*c).reccheck += ((NI) 1);
			}
			goto LA155;
			LA157: ;
			{
				{
					NIM_BOOL LOC162;
					LOC162 = 0;
					LOC162 = containsorincl_258872(c, a, b);
					if (!LOC162) goto LA163;
					result = NIM_TRUE;
					goto BeforeRet;
				}
				LA163: ;
			}
			LA155: ;
			LOC165 = 0;
			LOC165 = samechildrenaux_260048(x, y, c);
			if (!(LOC165)) goto LA166;
			LOC165 = sameflags_260141(a, b);
			LA166: ;
			result = LOC165;
		}
		goto LA148;
		LA153: ;
		{
			result = sameflags_260141(a, b);
		}
		LA148: ;
	}
	break;
	case ((NU8) 12):
	{
		NIM_BOOL LOC169;
		LOC169 = 0;
		LOC169 = samechildrenaux_260048(a, b, c);
		if (!(LOC169)) goto LA170;
		LOC169 = sameflags_260141(a, b);
		LA170: ;
		result = LOC169;
		{
			NIM_BOOL LOC173;
			LOC173 = 0;
			LOC173 = result;
			if (!(LOC173)) goto LA174;
			LOC173 = (((*c).flags &(1<<((((NU8) 3))&7)))!=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_258872(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_260048(a, b, c);
		if (!(LOC194)) goto LA195;
		LOC194 = sameflags_260141(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 &(1<<((((NU8) 1))&7)))!=0);
			if (LOC203) goto LA204;
			LOC203 = ((*a).callconv == (*b).callconv);
			LA204: ;
			LOC202 = LOC203;
			if (!(LOC202)) goto LA205;
			LOC206 = 0;
			LOC206 = !((((*c).flags &(1<<((((NU8) 4))&7)))!=0));
			if (LOC206) goto LA207;
			LOC206 = sameconstraints_259240((*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_258872(c, a, b);
				if (!LOC216) goto LA217;
				result = NIM_TRUE;
				goto BeforeRet;
			}
			LA217: ;
		}
		LA209: ;
		LOC219 = 0;
		LOC220 = 0;
		LOC220 = sametypeornilaux_259044((*a).sons->data[((NI) 0)], (*b).sons->data[((NI) 0)], c);
		if (!(LOC220)) goto LA221;
		LOC220 = samevalue_232324((*(*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_232324((*(*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_261047)(Ttype224847* x, Ttype224847* y, NU8 cmp, NU8 flags) {
	NIM_BOOL result;
	Tsametypeclosure258841 c;
	result = 0;
	memset((void*)(&c), 0, sizeof(c));
	chckNil((void*)(&c));
	memset((void*)(&c), 0, sizeof(c));
	initsametypeclosure_258863((&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_259035(x, y, (&c));
	}
	LA1: ;
	return result;
}

N_NIMCALL(NIM_BOOL, iterovernode_255087)(Intset221056* marker, Tnode224809* n, Ttypeiter254046 iter, TNimObject* closure) {
	NIM_BOOL result;
{	result = 0;
	{
		if (!!((n == NIM_NIL))) goto LA3;
		switch ((*n).kind) {
		case ((NU8) 0) ... ((NU8) 23):
		{
			result = iterovertypeaux_255077(marker, (*n).typ, iter, closure);
		}
		break;
		default:
		{
			{
				NI i_255119;
				NI HEX3Atmp_255122;
				NI LOC8;
				NI res_255125;
				i_255119 = 0;
				HEX3Atmp_255122 = 0;
				LOC8 = 0;
				LOC8 = sonslen_227387(n);
				HEX3Atmp_255122 = (NI)(LOC8 - ((NI) 1));
				res_255125 = ((NI) 0);
				{
					while (1) {
						if (!(res_255125 <= HEX3Atmp_255122)) goto LA10;
						i_255119 = res_255125;
						result = iterovernode_255087(marker, (*n).kindU.S6.sons->data[i_255119], iter, closure);
						{
							if (!result) goto LA13;
							goto BeforeRet;
						}
						LA13: ;
						res_255125 += ((NI) 1);
					} LA10: ;
				}
			}
		}
		break;
		}
	}
	LA3: ;
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NIM_BOOL, iterovertypeaux_255077)(Intset221056* marker, Ttype224847* t, Ttypeiter254046 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_221898(marker, (*t).Sup.id);
		if (!!(LOC11)) goto LA12;
		switch ((*t).kind) {
		case ((NU8) 11):
		case ((NU8) 10):
		{
			Ttype224847* LOC15;
			LOC15 = 0;
			LOC15 = lastson_227426(t);
			result = iterovertypeaux_255077(marker, LOC15, iter, closure);
		}
		break;
		default:
		{
			{
				NI i_255176;
				NI HEX3Atmp_255190;
				NI LOC18;
				NI res_255193;
				i_255176 = 0;
				HEX3Atmp_255190 = 0;
				LOC18 = 0;
				LOC18 = sonslen_227351(t);
				HEX3Atmp_255190 = (NI)(LOC18 - ((NI) 1));
				res_255193 = ((NI) 0);
				{
					while (1) {
						if (!(res_255193 <= HEX3Atmp_255190)) goto LA20;
						i_255176 = res_255193;
						result = iterovertypeaux_255077(marker, (*t).sons->data[i_255176], iter, closure);
						{
							if (!result) goto LA23;
							goto BeforeRet;
						}
						LA23: ;
						res_255193 += ((NI) 1);
					} LA20: ;
				}
			}
			{
				if (!!(((*t).n == NIM_NIL))) goto LA27;
				result = iterovernode_255087(marker, (*t).n, iter, closure);
			}
			LA27: ;
		}
		break;
		}
	}
	LA12: ;
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NIM_BOOL, iterovertype_254062)(Ttype224847* t, Ttypeiter254046 iter, TNimObject* closure) {
	NIM_BOOL result;
	Intset221056 marker;
	result = 0;
	memset((void*)(&marker), 0, sizeof(marker));
	chckNil((void*)(&marker));
	memset((void*)(&marker), 0, sizeof(marker));
	initintset_221927((&marker));
	result = iterovertypeaux_255077((&marker), t, iter, closure);
	return result;
}

N_NIMCALL(NIM_BOOL, containsgenerictypeiter_263225)(Ttype224847* 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;
		{
			Ttype224847* LOC11;
			LOC11 = 0;
			LOC11 = base_254039(t);
			if (!((*LOC11).kind == ((NU8) 0))) goto LA12;
			result = NIM_TRUE;
			goto BeforeRet;
		}
		LA12: ;
		{
			Ttype224847* LOC16;
			NIM_BOOL LOC17;
			LOC16 = 0;
			LOC16 = base_254039(t);
			LOC17 = 0;
			LOC17 = containsgenerictypeiter_263225(LOC16, closure);
			if (!LOC17) goto LA18;
			result = NIM_TRUE;
			goto BeforeRet;
		}
		LA18: ;
		result = NIM_FALSE;
		goto BeforeRet;
	}
	LA7: ;
	{
		if (!((IL64(1727130457096590848) &(IL64(1)<<(((*t).kind)&IL64(63))))!=0)) goto LA22;
		result = NIM_TRUE;
		goto BeforeRet;
	}
	LA22: ;
	result = NIM_FALSE;
	goto BeforeRet;
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NIM_BOOL, containsgenerictype_263310)(Ttype224847* t) {
	NIM_BOOL result;
	result = 0;
	result = iterovertype_254062(t, containsgenerictypeiter_263225, NIM_NIL);
	return result;
}

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

N_NIMCALL(NI64, firstord_254004)(Ttype224847* 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_254004((*t).sons->data[((NI) 0)]);
	}
	break;
	case ((NU8) 16):
	case ((NU8) 4):
	{
		result = firstord_254004((*t).sons->data[((NI) 0)]);
	}
	break;
	case ((NU8) 20):
	{
		result = getordvalue_254178((*(*t).n).kindU.S6.sons->data[((NI) 0)]);
	}
	break;
	case ((NU8) 31):
	{
		{
			if (!(intsize_173651 == ((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_227351(t);
			LOC19 = (((NI) 0) < LOC20);
			if (!(LOC19)) goto LA21;
			LOC19 = !(((*t).sons->data[((NI) 0)] == NIM_NIL));
			LA21: ;
			if (!LOC19) goto LA22;
			result = firstord_254004((*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):
	{
		Ttype224847* LOC26;
		LOC26 = 0;
		LOC26 = lastson_227426(t);
		result = firstord_254004(LOC26);
	}
	break;
	case ((NU8) 15):
	{
		{
			NI LOC30;
			Ttype224847* LOC33;
			LOC30 = 0;
			LOC30 = len_227369(t);
			if (!(((NI) 0) < LOC30)) goto LA31;
			LOC33 = 0;
			LOC33 = lastson_227426(t);
			result = firstord_254004(LOC33);
		}
		goto LA28;
		LA31: ;
		{
			NimStringDesc* LOC35;
			LOC35 = 0;
			LOC35 = rawNewString(reprEnum((*t).kind, (&NTI224262))->Sup.len + 24);
appendString(LOC35, ((NimStringDesc*) &TMP2752));
appendString(LOC35, reprEnum((*t).kind, (&NTI224262)));
appendChar(LOC35, 41);
			internalerror_195191(LOC35);
		}
		LA28: ;
	}
	break;
	default:
	{
		NimStringDesc* LOC37;
		LOC37 = 0;
		LOC37 = rawNewString(reprEnum((*t).kind, (&NTI224262))->Sup.len + 24);
appendString(LOC37, ((NimStringDesc*) &TMP2752));
appendString(LOC37, reprEnum((*t).kind, (&NTI224262)));
appendChar(LOC37, 41);
		internalerror_195191(LOC37);
		result = IL64(0);
	}
	break;
	}
	return result;
}

N_NIMCALL(NI64, lastord_254010)(Ttype224847* 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_254010((*t).sons->data[((NI) 0)]);
	}
	break;
	case ((NU8) 16):
	case ((NU8) 4):
	{
		result = lastord_254010((*t).sons->data[((NI) 0)]);
	}
	break;
	case ((NU8) 20):
	{
		result = getordvalue_254178((*(*t).n).kindU.S6.sons->data[((NI) 1)]);
	}
	break;
	case ((NU8) 31):
	{
		{
			if (!(intsize_173651 == ((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_173651 == ((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_227387((*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):
	{
		Ttype224847* LOC29;
		LOC29 = 0;
		LOC29 = lastson_227426(t);
		result = lastord_254010(LOC29);
	}
	break;
	case ((NU8) 50):
	{
		result = IL64(0);
	}
	break;
	case ((NU8) 15):
	{
		{
			NI LOC34;
			Ttype224847* LOC37;
			LOC34 = 0;
			LOC34 = len_227369(t);
			if (!(((NI) 0) < LOC34)) goto LA35;
			LOC37 = 0;
			LOC37 = lastson_227426(t);
			result = lastord_254010(LOC37);
		}
		goto LA32;
		LA35: ;
		{
			NimStringDesc* LOC39;
			LOC39 = 0;
			LOC39 = rawNewString(reprEnum((*t).kind, (&NTI224262))->Sup.len + 23);
appendString(LOC39, ((NimStringDesc*) &TMP2753));
appendString(LOC39, reprEnum((*t).kind, (&NTI224262)));
appendChar(LOC39, 41);
			internalerror_195191(LOC39);
		}
		LA32: ;
	}
	break;
	default:
	{
		NimStringDesc* LOC41;
		LOC41 = 0;
		LOC41 = rawNewString(reprEnum((*t).kind, (&NTI224262))->Sup.len + 23);
appendString(LOC41, ((NimStringDesc*) &TMP2753));
appendString(LOC41, reprEnum((*t).kind, (&NTI224262)));
appendChar(LOC41, 41);
		internalerror_195191(LOC41);
		result = IL64(0);
	}
	break;
	}
	return result;
}

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

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

N_NIMCALL(NIM_BOOL, sametype_259092)(Ttype224847* a, Ttype224847* b, NU8 flags) {
	NIM_BOOL result;
	Tsametypeclosure258841 c;
	result = 0;
	memset((void*)(&c), 0, sizeof(c));
	chckNil((void*)(&c));
	memset((void*)(&c), 0, sizeof(c));
	initsametypeclosure_258863((&c));
	c.flags = flags;
	result = sametypeaux_259035(a, b, (&c));
	return result;
}

N_NIMCALL(NIM_BOOL, sameobjecttypes_259785)(Ttype224847* a, Ttype224847* b) {
	NIM_BOOL result;
	result = 0;
	{
		if (!!(((((*a).flags | (*b).flags) &(1<<((((NU8) 8))&31)))!=0))) goto LA3;
		result = ((*a).Sup.id == (*b).Sup.id);
	}
	goto LA1;
	LA3: ;
	{
		{
			NIM_BOOL LOC8;
			Tsametypeclosure258841 c;
			LOC8 = 0;
			LOC8 = ((((*a).flags & (*b).flags) &(1<<((((NU8) 8))&31)))!=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_258863((&c));
			result = sametypeaux_259035(a, b, (&c));
		}
		LA10: ;
	}
	LA1: ;
	return result;
}

N_NIMCALL(NI, inheritancediff_261091)(Ttype224847* a, Ttype224847* b) {
	NI result;
	Ttype224847* x;
	Ttype224847* 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_228167(x, IL64(211106247215360));
			{
				NIM_BOOL LOC13;
				LOC13 = 0;
				LOC13 = sameobjecttypes_259785(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_228167(y, IL64(211106247215360));
			{
				NIM_BOOL LOC20;
				LOC20 = 0;
				LOC20 = sameobjecttypes_259785(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_263388)(Ttype224847* a, Ttype224847* 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_261091(a, b);
	}
	LA1: ;
	return result;
}

N_NIMCALL(NIM_BOOL, compatibleeffectsaux_263417)(Tnode224809* se, Tnode224809* re) {
	NIM_BOOL result;
{	result = 0;
	{
		if (!re == 0) goto LA3;
		result = NIM_FALSE;
		goto BeforeRet;
	}
	LA3: ;
	{
		Tnode224809* r_263431;
		r_263431 = 0;
		{
			NI i_263449;
			NI HEX3Atmp_263451;
			NI LOC7;
			NI res_263453;
			i_263449 = 0;
			HEX3Atmp_263451 = 0;
			LOC7 = 0;
			LOC7 = len_225098(re);
			HEX3Atmp_263451 = (LOC7 - 1);
			res_263453 = ((NI) 0);
			{
				while (1) {
					if (!(res_263453 <= HEX3Atmp_263451)) goto LA9;
					i_263449 = res_263453;
					r_263431 = (*re).kindU.S6.sons->data[i_263449];
					{
						{
							Tnode224809* s_263433;
							s_263433 = 0;
							{
								NI i_263439;
								NI HEX3Atmp_263441;
								NI LOC13;
								NI res_263443;
								i_263439 = 0;
								HEX3Atmp_263441 = 0;
								LOC13 = 0;
								LOC13 = len_225098(se);
								HEX3Atmp_263441 = (LOC13 - 1);
								res_263443 = ((NI) 0);
								{
									while (1) {
										if (!(res_263443 <= HEX3Atmp_263441)) goto LA15;
										i_263439 = res_263443;
										s_263433 = (*se).kindU.S6.sons->data[i_263439];
										{
											NI LOC18;
											LOC18 = 0;
											LOC18 = safeinheritancediff_263388((*r_263431).typ, (*s_263433).typ);
											if (!(LOC18 <= ((NI) 0))) goto LA19;
											goto LA10;
										}
										LA19: ;
										res_263443 += ((NI) 1);
									} LA15: ;
								}
							}
						}
						result = NIM_FALSE;
						goto BeforeRet;
					} LA10: ;
					res_263453 += ((NI) 1);
				} LA9: ;
			}
		}
	}
	result = NIM_TRUE;
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NIM_BOOL, compatibleeffects_263489)(Ttype224847* formal, Ttype224847* actual) {
	NIM_BOOL result;
	Tnode224809* 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_195279(TMP2756);
		internalerror_195191(LOC5);
	}
	LA3: ;
	{
		NimStringDesc* LOC10;
		if (!!(((*(*(*actual).n).kindU.S6.sons->data[((NI) 0)]).kind == ((NU8) 152)))) goto LA8;
		LOC10 = 0;
		LOC10 = HEX24_195279(TMP2757);
		internalerror_195191(LOC10);
	}
	LA8: ;
	spec = (*(*formal).n).kindU.S6.sons->data[((NI) 0)];
	{
		NI LOC13;
		Tnode224809* real;
		Tnode224809* se;
		Tnode224809* st;
		LOC13 = 0;
		LOC13 = len_225098(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_225098(real);
				if (!(LOC24 == ((NI) 0))) goto LA25;
				result = NIM_FALSE;
				goto BeforeRet;
			}
			LA25: ;
			result = compatibleeffectsaux_263417(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_225098(real);
				if (!(LOC39 == ((NI) 0))) goto LA40;
				result = NIM_FALSE;
				goto BeforeRet;
			}
			LA40: ;
			result = compatibleeffectsaux_263417(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_254447)(Tsym224841* sym, NU8 prefer) {
	NimStringDesc* result;
	NimStringDesc* LOC1;
	Tnode224809* 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_254469;
		NI HEX3Atmp_254500;
		NI LOC3;
		NI res_254503;
		i_254469 = 0;
		HEX3Atmp_254500 = 0;
		LOC3 = 0;
		LOC3 = sonslen_227387(n);
		HEX3Atmp_254500 = (NI)(LOC3 - ((NI) 1));
		res_254503 = ((NI) 1);
		{
			while (1) {
				Tnode224809* p;
				if (!(res_254503 <= HEX3Atmp_254500)) goto LA5;
				i_254469 = res_254503;
				p = (*n).kindU.S6.sons->data[i_254469];
				{
					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*) &TMP2178));
					LOC10 = 0;
					LOC10 = typetostring_254032((*(*p).kindU.S4.sym).typ, prefer);
					result = resizeString(result, LOC10->Sup.len + 0);
appendString(result, LOC10);
					{
						NI LOC13;
						LOC13 = 0;
						LOC13 = sonslen_227387(n);
						if (!!((i_254469 == (NI)(LOC13 - ((NI) 1))))) goto LA14;
						result = resizeString(result, 2);
appendString(result, ((NimStringDesc*) &TMP2145));
					}
					LA14: ;
				}
				goto LA6;
				LA8: ;
				{
					internalerror_195191(((NimStringDesc*) &TMP2765));
				}
				LA6: ;
				res_254503 += ((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_254032((*(*n).kindU.S6.sons->data[((NI) 0)]).typ, prefer);
		LOC21 = rawNewString(LOC22->Sup.len + 2);
appendString(LOC21, ((NimStringDesc*) &TMP2178));
appendString(LOC21, LOC22);
		result = resizeString(result, LOC21->Sup.len + 0);
appendString(result, LOC21);
	}
	LA19: ;
	return result;
}

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

N_NIMCALL(NU8, classify_263913)(Ttype224847* t) {
	NU8 result;
	result = 0;
	{
		if (!(t == NIM_NIL)) goto LA3;
		result = ((NU8) 0);
	}
	goto LA1;
	LA3: ;
	{
		Ttype224847* LOC6;
		LOC6 = 0;
		LOC6 = skiptypes_228167(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(Tnode224809*, skipconv_263935)(Tnode224809* n) {
	Tnode224809* 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_263913((*(*n).kindU.S6.sons->data[((NI) 0)]).typ);
			LOC5 = 0;
			LOC5 = classify_263913((*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_263913((*(*n).kindU.S6.sons->data[((NI) 1)]).typ);
			LOC12 = 0;
			LOC12 = classify_263913((*n).typ);
			if (!(LOC11 == LOC12)) goto LA13;
			result = (*n).kindU.S6.sons->data[((NI) 1)];
		}
		LA13: ;
	}
	break;
	default:
	{
	}
	break;
	}
	return result;
}

N_NIMCALL(NI64, align_262669)(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_255556)(Ttype224847* 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 &(1<<((((NU8) 2))&31)))!=0));
	LA8: ;
	result = LOC1;
	return result;
}

N_NIMCALL(NI64, computerecsizeaux_262694)(Tnode224809* 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_262694((*n).kindU.S6.sons->data[((NI) 0)], a, curroffset);
		maxsize = IL64(0);
		maxalign = IL64(1);
		{
			NI i_262814;
			NI HEX3Atmp_262850;
			NI LOC3;
			NI res_262853;
			i_262814 = 0;
			HEX3Atmp_262850 = 0;
			LOC3 = 0;
			LOC3 = sonslen_227387(n);
			HEX3Atmp_262850 = (NI)(LOC3 - ((NI) 1));
			res_262853 = ((NI) 1);
			{
				while (1) {
					if (!(res_262853 <= HEX3Atmp_262850)) goto LA5;
					i_262814 = res_262853;
					switch ((*(*n).kindU.S6.sons->data[i_262814]).kind) {
					case ((NU8) 85):
					case ((NU8) 88):
					{
						Tnode224809* LOC7;
						LOC7 = 0;
						LOC7 = lastson_227406((*n).kindU.S6.sons->data[i_262814]);
						res = computerecsizeaux_262694(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_195191(((NimStringDesc*) &TMP2925));
					}
					break;
					}
					res_262853 += ((NI) 1);
				} LA5: ;
			}
		}
		LOC13 = 0;
		LOC13 = align_262669((*curroffset), maxalign);
		(*curroffset) = (NI64)(LOC13 + maxsize);
		LOC14 = 0;
		LOC14 = align_262669(result, maxalign);
		result = (NI64)(LOC14 + maxsize);
		(*a) = maxalign;
	}
	break;
	case ((NU8) 138):
	{
		result = IL64(0);
		maxalign = IL64(1);
		{
			NI i_262838;
			NI HEX3Atmp_262858;
			NI LOC17;
			NI res_262861;
			i_262838 = 0;
			HEX3Atmp_262858 = 0;
			LOC17 = 0;
			LOC17 = sonslen_227387(n);
			HEX3Atmp_262858 = (NI)(LOC17 - ((NI) 1));
			res_262861 = ((NI) 0);
			{
				while (1) {
					NI64 LOC24;
					NI64 LOC25;
					if (!(res_262861 <= HEX3Atmp_262858)) goto LA19;
					i_262838 = res_262861;
					res = computerecsizeaux_262694((*n).kindU.S6.sons->data[i_262838], (&b), curroffset);
					{
						if (!(res < IL64(0))) goto LA22;
						result = res;
						goto BeforeRet;
					}
					LA22: ;
					LOC24 = 0;
					LOC24 = align_262669((*curroffset), b);
					(*curroffset) = (NI64)(LOC24 + res);
					LOC25 = 0;
					LOC25 = align_262669(result, b);
					result = (NI64)(LOC25 + res);
					{
						if (!(maxalign < b)) goto LA28;
						maxalign = b;
					}
					LA28: ;
					res_262861 += ((NI) 1);
				} LA19: ;
			}
		}
		(*a) = maxalign;
	}
	break;
	case ((NU8) 3):
	{
		result = computesizeaux_262686((*(*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_262686)(Ttype224847* 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_173651));
		(*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_173652));
		(*a) = result;
	}
	break;
	case ((NU8) 25):
	{
		{
			if (!((*typ).callconv == ((NU8) 8))) goto LA19;
			result = ((NI64) ((NI)(((NI) 2) * ptrsize_173653)));
		}
		goto LA17;
		LA19: ;
		{
			result = ((NI64) (ptrsize_173653));
		}
		LA17: ;
		(*a) = ((NI64) (ptrsize_173653));
	}
	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):
	{
		Ttype224847* base;
		base = lastson_227426(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_173653));
		}
		LA23: ;
		(*a) = result;
	}
	break;
	case ((NU8) 16):
	case ((NU8) 4):
	{
		NI64 elemsize;
		NI64 LOC37;
		elemsize = computesizeaux_262686((*typ).sons->data[((NI) 1)], a);
		{
			if (!(elemsize < IL64(0))) goto LA35;
			result = elemsize;
			goto BeforeRet;
		}
		LA35: ;
		LOC37 = 0;
		LOC37 = lengthord_254016((*typ).sons->data[((NI) 0)]);
		result = (NI64)(LOC37 * elemsize);
	}
	break;
	case ((NU8) 14):
	{
		{
			NI64 LOC41;
			LOC41 = 0;
			LOC41 = firstord_254004(typ);
			if (!(LOC41 < IL64(0))) goto LA42;
			result = IL64(4);
		}
		goto LA39;
		LA42: ;
		{
			length = lastord_254010(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_254016((*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_262669(length, IL64(8));
				if (!(((NI) ((NI64)(LOC76 % IL64(8)))) == ((NI) 0))) goto LA77;
				LOC79 = 0;
				LOC79 = align_262669(length, IL64(8));
				result = (NI64)(LOC79 / IL64(8));
			}
			goto LA62;
			LA77: ;
			{
				NI64 LOC81;
				LOC81 = 0;
				LOC81 = align_262669(length, IL64(8));
				result = (NI64)((NI64)(LOC81 / IL64(8)) + IL64(1));
			}
			LA62: ;
		}
		LA57: ;
		(*a) = result;
	}
	break;
	case ((NU8) 20):
	{
		result = computesizeaux_262686((*typ).sons->data[((NI) 0)], a);
	}
	break;
	case ((NU8) 18):
	{
		result = IL64(0);
		maxalign = IL64(1);
		{
			NI i_262955;
			NI HEX3Atmp_262978;
			NI LOC85;
			NI res_262981;
			i_262955 = 0;
			HEX3Atmp_262978 = 0;
			LOC85 = 0;
			LOC85 = sonslen_227351(typ);
			HEX3Atmp_262978 = (NI)(LOC85 - ((NI) 1));
			res_262981 = ((NI) 0);
			{
				while (1) {
					NI64 LOC92;
					if (!(res_262981 <= HEX3Atmp_262978)) goto LA87;
					i_262955 = res_262981;
					res = computesizeaux_262686((*typ).sons->data[i_262955], a);
					{
						if (!(res < IL64(0))) goto LA90;
						result = res;
						goto BeforeRet;
					}
					LA90: ;
					maxalign = ((maxalign >= (*a)) ? maxalign : (*a));
					LOC92 = 0;
					LOC92 = align_262669(result, (*a));
					result = (NI64)(LOC92 + res);
					res_262981 += ((NI) 1);
				} LA87: ;
			}
		}
		result = align_262669(result, maxalign);
		(*a) = maxalign;
	}
	break;
	case ((NU8) 17):
	{
		{
			if (!!(((*typ).sons->data[((NI) 0)] == NIM_NIL))) goto LA96;
			result = computesizeaux_262686((*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_255556(typ);
			if (!LOC103) goto LA104;
			result = ((NI64) (intsize_173651));
			maxalign = result;
		}
		goto LA94;
		LA104: ;
		{
			result = IL64(0);
			maxalign = IL64(1);
		}
		LA94: ;
		curroffset = result;
		result = computerecsizeaux_262694((*typ).n, a, (&curroffset));
		{
			if (!(result < IL64(0))) goto LA109;
			goto BeforeRet;
		}
		LA109: ;
		{
			if (!((*a) < maxalign)) goto LA113;
			(*a) = maxalign;
		}
		LA113: ;
		result = align_262669(result, (*a));
	}
	break;
	case ((NU8) 11):
	case ((NU8) 13):
	case ((NU8) 10):
	case ((NU8) 47):
	case ((NU8) 46):
	case ((NU8) 49):
	{
		Ttype224847* LOC116;
		LOC116 = 0;
		LOC116 = lastson_227426(typ);
		result = computesizeaux_262686(LOC116, a);
	}
	break;
	case ((NU8) 8):
	{
		Ttype224847* LOC118;
		LOC118 = 0;
		LOC118 = base_254039(typ);
		result = computesizeaux_262686(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_254184)(Ttype224847* typ) {
	NI64 result;
	NI64 a;
	result = 0;
	a = IL64(1);
	result = computesizeaux_262686(typ, (&a));
	return result;
}

N_NIMCALL(NI64, getsize_254190)(Ttype224847* typ) {
	NI64 result;
	result = 0;
	result = computesize_254184(typ);
	{
		NimStringDesc* LOC5;
		if (!(result < IL64(0))) goto LA3;
		LOC5 = 0;
		LOC5 = rawNewString(reprEnum((*typ).kind, (&NTI224262))->Sup.len + 9);
appendString(LOC5, ((NimStringDesc*) &TMP2926));
appendString(LOC5, reprEnum((*typ).kind, (&NTI224262)));
		internalerror_195191(LOC5);
	}
	LA3: ;
	return result;
}

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

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

N_NIMCALL(NU8, equalparam_259157)(Tsym224841* a, Tsym224841* b) {
	NU8 result;
	result = 0;
	{
		NIM_BOOL LOC3;
		LOC3 = 0;
		LOC3 = sametypeornil_259108((*a).typ, (*b).typ, 4);
		if (!(LOC3)) goto LA4;
		LOC3 = exprstructuralequivalent_253149((*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_253149((*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_254086)(Tnode224809* a, Tnode224809* b) {
	NU8 result;
	NI length;
{	result = 0;
	result = ((NU8) 1);
	length = sonslen_227387(a);
	{
		NI LOC3;
		LOC3 = 0;
		LOC3 = sonslen_227387(b);
		if (!!((length == LOC3))) goto LA4;
		result = ((NU8) 0);
	}
	goto LA1;
	LA4: ;
	{
		{
			NI i_259319;
			NI HEX3Atmp_259433;
			NI res_259436;
			i_259319 = 0;
			HEX3Atmp_259433 = 0;
			HEX3Atmp_259433 = (NI)(length - ((NI) 1));
			res_259436 = ((NI) 1);
			{
				while (1) {
					Tsym224841* m;
					Tsym224841* n;
					NU8 LOC10;
					if (!(res_259436 <= HEX3Atmp_259433)) goto LA9;
					i_259319 = res_259436;
					m = (*(*a).kindU.S6.sons->data[i_259319]).kindU.S4.sym;
					n = (*(*b).kindU.S6.sons->data[i_259319]).kindU.S4.sym;
					LOC10 = 0;
					LOC10 = equalparam_259157(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_259436 += ((NI) 1);
				} LA9: ;
			}
		}
		{
			NIM_BOOL LOC20;
			LOC20 = 0;
			LOC20 = sametypeornil_259108((*(*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(Ttype224847*, typeallowednode_261870)(Intset221056* marker, Tnode224809* n, NU8 kind, NU8 flags) {
	Ttype224847* result;
{	result = 0;
	{
		if (!!((n == NIM_NIL))) goto LA3;
		result = typeallowedaux_261858(marker, (*n).typ, kind, flags);
		{
			if (!(result == NIM_NIL)) goto LA7;
			switch ((*n).kind) {
			case ((NU8) 0) ... ((NU8) 23):
			{
			}
			break;
			default:
			{
				{
					NI i_261916;
					NI HEX3Atmp_261950;
					NI LOC12;
					NI res_261953;
					i_261916 = 0;
					HEX3Atmp_261950 = 0;
					LOC12 = 0;
					LOC12 = sonslen_227387(n);
					HEX3Atmp_261950 = (NI)(LOC12 - ((NI) 1));
					res_261953 = ((NI) 0);
					{
						while (1) {
							Tnode224809* it;
							if (!(res_261953 <= HEX3Atmp_261950)) goto LA14;
							i_261916 = res_261953;
							it = (*n).kindU.S6.sons->data[i_261916];
							{
								NIM_BOOL LOC17;
								LOC17 = 0;
								LOC17 = ((*it).kind == ((NU8) 139));
								if (!(LOC17)) goto LA18;
								LOC17 = (kind == ((NU8) 10));
								LA18: ;
								if (!LOC17) goto LA19;
								result = (*n).typ;
								goto BeforeRet;
							}
							LA19: ;
							result = typeallowednode_261870(marker, it, kind, flags);
							{
								if (!!((result == NIM_NIL))) goto LA23;
								goto LA11;
							}
							LA23: ;
							res_261953 += ((NI) 1);
						} LA14: ;
					}
				} LA11: ;
			}
			break;
			}
		}
		LA7: ;
	}
	LA3: ;
	}BeforeRet: ;
	return result;
}

N_NIMCALL(Ttype224847*, typeallowedaux_261858)(Intset221056* marker, Ttype224847* typ, NU8 kind, NU8 flags_261866) {
	Ttype224847* result;
	Ttype224847* t;
{	result = 0;
	result = NIM_NIL;
	{
		if (!(typ == NIM_NIL)) goto LA3;
		goto BeforeRet;
	}
	LA3: ;
	{
		NIM_BOOL LOC7;
		LOC7 = 0;
		LOC7 = containsorincl_221898(marker, (*typ).Sup.id);
		if (!LOC7) goto LA8;
		goto BeforeRet;
	}
	LA8: ;
	t = skiptypes_228167(typ, IL64(211106232576000));
	switch ((*t).kind) {
	case ((NU8) 23):
	{
		Ttype224847* t2;
		{
			if (!(kind == ((NU8) 10))) goto LA13;
			result = t;
			goto BeforeRet;
		}
		LA13: ;
		t2 = skiptypes_228167((*t).sons->data[((NI) 0)], IL64(211106232576000));
		switch ((*t2).kind) {
		case ((NU8) 23):
		{
			{
				if (!!(((flags_261866 &(1<<((((NU8) 1))&7)))!=0))) goto LA18;
				result = t2;
			}
			LA18: ;
		}
		break;
		case ((NU8) 27):
		{
			{
				if (!!((kind == ((NU8) 3)))) goto LA23;
				result = t;
			}
			goto LA21;
			LA23: ;
			{
				result = typeallowedaux_261858(marker, t2, kind, flags_261866);
			}
			LA21: ;
		}
		break;
		default:
		{
			{
				if (!!(((2056 &(1<<((kind)&31)))!=0))) goto LA29;
				result = t;
			}
			goto LA27;
			LA29: ;
			{
				result = typeallowedaux_261858(marker, t2, kind, flags_261866);
			}
			LA27: ;
		}
		break;
		}
	}
	break;
	case ((NU8) 25):
	{
		{
			NI i_262292;
			NI HEX3Atmp_262598;
			NI LOC34;
			NI res_262601;
			i_262292 = 0;
			HEX3Atmp_262598 = 0;
			LOC34 = 0;
			LOC34 = sonslen_227351(t);
			HEX3Atmp_262598 = (NI)(LOC34 - ((NI) 1));
			res_262601 = ((NI) 1);
			{
				while (1) {
					if (!(res_262601 <= HEX3Atmp_262598)) goto LA36;
					i_262292 = res_262601;
					result = typeallowedaux_261858(marker, (*t).sons->data[i_262292], ((NU8) 3), flags_261866);
					{
						if (!!((result == NIM_NIL))) goto LA39;
						goto LA33;
					}
					LA39: ;
					res_262601 += ((NI) 1);
				} LA36: ;
			}
		} LA33: ;
		{
			NIM_BOOL LOC43;
			LOC43 = 0;
			LOC43 = result == 0;
			if (!(LOC43)) goto LA44;
			LOC43 = !(((*t).sons->data[((NI) 0)] == NIM_NIL));
			LA44: ;
			if (!LOC43) goto LA45;
			result = typeallowedaux_261858(marker, (*t).sons->data[((NI) 0)], ((NU8) 11), flags_261866);
		}
		LA45: ;
	}
	break;
	case ((NU8) 8):
	{
		result = NIM_NIL;
	}
	break;
	case ((NU8) 6):
	case ((NU8) 7):
	case ((NU8) 59):
	{
		{
			if (!!(((2056 &(1<<((kind)&31)))!=0))) goto LA51;
			result = t;
		}
		LA51: ;
	}
	break;
	case ((NU8) 3):
	{
		{
			if (!!(((flags_261866 &(1<<((((NU8) 0))&7)))!=0))) goto LA56;
			result = t;
		}
		LA56: ;
	}
	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 LOC61;
			LOC61 = 0;
			LOC61 = (((*t).flags &(1<<((((NU8) 23))&31)))!=0);
			if (LOC61) goto LA62;
			LOC61 = !(((flags_261866 &(1<<((((NU8) 0))&7)))!=0));
			LA62: ;
			if (!!(LOC61)) goto LA63;
			result = t;
		}
		LA63: ;
	}
	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 LA69;
			result = t;
		}
		LA69: ;
	}
	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 LA75;
			result = t;
		}
		LA75: ;
	}
	break;
	case ((NU8) 11):
	case ((NU8) 13):
	{
		Ttype224847* LOC78;
		LOC78 = 0;
		LOC78 = lastson_227426(t);
		result = typeallowedaux_261858(marker, LOC78, kind, flags_261866);
	}
	break;
	case ((NU8) 20):
	{
		{
			Ttype224847* LOC82;
			LOC82 = 0;
			LOC82 = skiptypes_228167((*t).sons->data[((NI) 0)], IL64(211106232576000));
			if (!!(((IL64(16490526949380) &(IL64(1)<<(((*LOC82).kind)&IL64(63))))!=0))) goto LA83;
			result = t;
		}
		LA83: ;
	}
	break;
	case ((NU8) 27):
	case ((NU8) 48):
	{
		{
			if (!!((kind == ((NU8) 3)))) goto LA88;
			result = t;
		}
		goto LA86;
		LA88: ;
		{
			result = typeallowedaux_261858(marker, (*t).sons->data[((NI) 0)], ((NU8) 8), flags_261866);
		}
		LA86: ;
	}
	break;
	case ((NU8) 24):
	{
		{
			if (!!(((*(*t).sons->data[((NI) 0)]).kind == ((NU8) 3)))) goto LA94;
			result = typeallowedaux_261858(marker, (*t).sons->data[((NI) 0)], ((NU8) 8), (flags_261866 | 2));
		}
		LA94: ;
	}
	break;
	case ((NU8) 16):
	{
		{
			if (!!(((*(*t).sons->data[((NI) 1)]).kind == ((NU8) 3)))) goto LA99;
			result = typeallowedaux_261858(marker, (*t).sons->data[((NI) 1)], ((NU8) 8), flags_261866);
		}
		LA99: ;
	}
	break;
	case ((NU8) 22):
	{
		{
			if (!(kind == ((NU8) 10))) goto LA104;
			result = t;
		}
		goto LA102;
		LA104: ;
		{
			Ttype224847* LOC107;
			LOC107 = 0;
			LOC107 = lastson_227426(t);
			result = typeallowedaux_261858(marker, LOC107, ((NU8) 8), (flags_261866 | 2));
		}
		LA102: ;
	}
	break;
	case ((NU8) 21):
	{
		Ttype224847* LOC109;
		LOC109 = 0;
		LOC109 = lastson_227426(t);
		result = typeallowedaux_261858(marker, LOC109, ((NU8) 8), (flags_261866 | 2));
	}
	break;
	case ((NU8) 4):
	case ((NU8) 19):
	case ((NU8) 46):
	case ((NU8) 47):
	case ((NU8) 49):
	{
		{
			NI i_262495;
			NI HEX3Atmp_262606;
			NI LOC112;
			NI res_262609;
			i_262495 = 0;
			HEX3Atmp_262606 = 0;
			LOC112 = 0;
			LOC112 = sonslen_227351(t);
			HEX3Atmp_262606 = (NI)(LOC112 - ((NI) 1));
			res_262609 = ((NI) 0);
			{
				while (1) {
					if (!(res_262609 <= HEX3Atmp_262606)) goto LA114;
					i_262495 = res_262609;
					result = typeallowedaux_261858(marker, (*t).sons->data[i_262495], kind, flags_261866);
					{
						if (!!((result == NIM_NIL))) goto LA117;
						goto LA111;
					}
					LA117: ;
					res_262609 += ((NI) 1);
				} LA114: ;
			}
		} LA111: ;
	}
	break;
	case ((NU8) 17):
	case ((NU8) 18):
	{
		NU8 flags;
		{
			NIM_BOOL LOC122;
			NIM_BOOL LOC123;
			LOC122 = 0;
			LOC123 = 0;
			LOC123 = (kind == ((NU8) 10));
			if (!(LOC123)) goto LA124;
			LOC123 = ((*t).kind == ((NU8) 17));
			LA124: ;
			LOC122 = LOC123;
			if (!(LOC122)) goto LA125;
			LOC122 = !(((*t).sons->data[((NI) 0)] == NIM_NIL));
			LA125: ;
			if (!LOC122) goto LA126;
			result = t;
			goto BeforeRet;
		}
		LA126: ;
		flags = (flags_261866 | 1);
		{
			NI i_262564;
			NI HEX3Atmp_262614;
			NI LOC129;
			NI res_262617;
			i_262564 = 0;
			HEX3Atmp_262614 = 0;
			LOC129 = 0;
			LOC129 = sonslen_227351(t);
			HEX3Atmp_262614 = (NI)(LOC129 - ((NI) 1));
			res_262617 = ((NI) 0);
			{
				while (1) {
					if (!(res_262617 <= HEX3Atmp_262614)) goto LA131;
					i_262564 = res_262617;
					result = typeallowedaux_261858(marker, (*t).sons->data[i_262564], kind, flags);
					{
						if (!!((result == NIM_NIL))) goto LA134;
						goto LA128;
					}
					LA134: ;
					res_262617 += ((NI) 1);
				} LA131: ;
			}
		} LA128: ;
		{
			NIM_BOOL LOC138;
			LOC138 = 0;
			LOC138 = result == 0;
			if (!(LOC138)) goto LA139;
			LOC138 = !(((*t).n == NIM_NIL));
			LA139: ;
			if (!LOC138) goto LA140;
			result = typeallowednode_261870(marker, (*t).n, kind, flags);
		}
		LA140: ;
	}
	break;
	case ((NU8) 50):
	{
		result = NIM_NIL;
	}
	break;
	}
	}BeforeRet: ;
	return result;
}

N_NIMCALL(Ttype224847*, typeallowed_262654)(Ttype224847* t, NU8 kind) {
	Ttype224847* result;
	Intset221056 marker;
	result = 0;
	memset((void*)(&marker), 0, sizeof(marker));
	chckNil((void*)(&marker));
	memset((void*)(&marker), 0, sizeof(marker));
	initintset_221927((&marker));
	result = typeallowedaux_261858((&marker), t, kind, 0);
	return result;
}

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

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

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

N_NIMCALL(Ttype224847*, taketype_264006)(Ttype224847* formal, Ttype224847* arg) {
	Ttype224847* result;
	result = 0;
	{
		if (!((*arg).kind == ((NU8) 5))) goto LA3;
		result = formal;
	}
	goto LA1;
	LA3: ;
	{
		NIM_BOOL LOC6;
		Ttype224847* a;
		Ttype224847* LOC10;
		LOC6 = 0;
		LOC6 = ((IL64(281475127705600) &(IL64(1)<<(((*formal).kind)&IL64(63))))!=0);
		if (!(LOC6)) goto LA7;
		LOC6 = isemptycontainer_263978(arg);
		LA7: ;
		if (!LOC6) goto LA8;
		LOC10 = 0;
		LOC10 = skiptypes_228167(arg, 2048);
		a = copytype_227542(LOC10, (*arg).owner, NIM_FALSE);
		asgnRefNoCycle((void**) (&(*a).sons->data[((65552 &(IL64(1)<<(((*arg).kind)&IL64(63))))!=0)]), (*formal).sons->data[((NI) 0)]);
		result = a;
	}
	goto LA1;
	LA8: ;
	{
		NIM_BOOL LOC12;
		LOC12 = 0;
		LOC12 = ((786432 &(IL64(1)<<(((*formal).kind)&IL64(63))))!=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(Ttype224847*, baseofdistinct_263320)(Ttype224847* t) {
	Ttype224847* result;
	result = 0;
	{
		if (!((*t).kind == ((NU8) 13))) goto LA3;
		result = (*t).sons->data[((NI) 0)];
	}
	goto LA1;
	LA3: ;
	{
		Ttype224847* parent;
		Ttype224847* it;
		result = copytype_227542(t, (*t).owner, NIM_FALSE);
		parent = NIM_NIL;
		it = result;
		{
			while (1) {
				if (!((6291456 &(IL64(1)<<(((*it).kind)&IL64(63))))!=0)) goto LA7;
				parent = it;
				it = lastson_227426(it);
			} LA7: ;
		}
		{
			if (!((*it).kind == ((NU8) 13))) goto LA10;
			{
				NimStringDesc* LOC16;
				if (!!(!((parent == NIM_NIL)))) goto LA14;
				LOC16 = 0;
				LOC16 = HEX24_195279(TMP3495);
				internalerror_195191(LOC16);
			}
			LA14: ;
			asgnRefNoCycle((void**) (&(*parent).sons->data[((NI) 0)]), (*it).sons->data[((NI) 0)]);
		}
		LA10: ;
	}
	LA1: ;
	return result;
}

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

N_NIMCALL(Tnode224809*, skipconvtaketype_263967)(Tnode224809* n) {
	Tnode224809* result;
	result = 0;
	result = skipconv_263935(n);
	asgnRefNoCycle((void**) (&(*result).typ), (*n).typ);
	return result;
}

N_NIMCALL(NIM_BOOL, searchtypenodeforaux_255235)(Tnode224809* n, Ttypepredicate254050 p, Intset221056* marker) {
	NIM_BOOL result;
{	result = 0;
	result = NIM_FALSE;
	switch ((*n).kind) {
	case ((NU8) 138):
	{
		{
			NI i_255254;
			NI HEX3Atmp_255420;
			NI LOC3;
			NI res_255423;
			i_255254 = 0;
			HEX3Atmp_255420 = 0;
			LOC3 = 0;
			LOC3 = sonslen_227387(n);
			HEX3Atmp_255420 = (NI)(LOC3 - ((NI) 1));
			res_255423 = ((NI) 0);
			{
				while (1) {
					if (!(res_255423 <= HEX3Atmp_255420)) goto LA5;
					i_255254 = res_255423;
					result = searchtypenodeforaux_255235((*n).kindU.S6.sons->data[i_255254], p, marker);
					{
						if (!result) goto LA8;
						goto BeforeRet;
					}
					LA8: ;
					res_255423 += ((NI) 1);
				} LA5: ;
			}
		}
	}
	break;
	case ((NU8) 139):
	{
		result = searchtypenodeforaux_255235((*n).kindU.S6.sons->data[((NI) 0)], p, marker);
		{
			if (!result) goto LA13;
			goto BeforeRet;
		}
		LA13: ;
		{
			NI i_255414;
			NI HEX3Atmp_255428;
			NI LOC16;
			NI res_255431;
			i_255414 = 0;
			HEX3Atmp_255428 = 0;
			LOC16 = 0;
			LOC16 = sonslen_227387(n);
			HEX3Atmp_255428 = (NI)(LOC16 - ((NI) 1));
			res_255431 = ((NI) 1);
			{
				while (1) {
					if (!(res_255431 <= HEX3Atmp_255428)) goto LA18;
					i_255414 = res_255431;
					switch ((*(*n).kindU.S6.sons->data[i_255414]).kind) {
					case ((NU8) 85):
					case ((NU8) 88):
					{
						Tnode224809* LOC20;
						LOC20 = 0;
						LOC20 = lastson_227406((*n).kindU.S6.sons->data[i_255414]);
						result = searchtypenodeforaux_255235(LOC20, p, marker);
						{
							if (!result) goto LA23;
							goto BeforeRet;
						}
						LA23: ;
					}
					break;
					default:
					{
						internalerror_195191(((NimStringDesc*) &TMP3564));
					}
					break;
					}
					res_255431 += ((NI) 1);
				} LA18: ;
			}
		}
	}
	break;
	case ((NU8) 3):
	{
		result = searchtypeforaux_255226((*(*n).kindU.S4.sym).typ, p, marker);
	}
	break;
	default:
	{
		internalerror_195172((*n).info, ((NimStringDesc*) &TMP3565));
	}
	break;
	}
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NIM_BOOL, searchtypeforaux_255226)(Ttype224847* t, Ttypepredicate254050 predicate, Intset221056* 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_221898(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_255226((*t).sons->data[((NI) 0)], predicate, marker);
		{
			if (!!(result)) goto LA17;
			result = searchtypenodeforaux_255235((*t).n, predicate, marker);
		}
		LA17: ;
	}
	break;
	case ((NU8) 11):
	case ((NU8) 13):
	{
		Ttype224847* LOC20;
		LOC20 = 0;
		LOC20 = lastson_227426(t);
		result = searchtypeforaux_255226(LOC20, predicate, marker);
	}
	break;
	case ((NU8) 16):
	case ((NU8) 4):
	case ((NU8) 19):
	case ((NU8) 18):
	{
		{
			NI i_255490;
			NI HEX3Atmp_255492;
			NI LOC23;
			NI res_255495;
			i_255490 = 0;
			HEX3Atmp_255492 = 0;
			LOC23 = 0;
			LOC23 = sonslen_227351(t);
			HEX3Atmp_255492 = (NI)(LOC23 - ((NI) 1));
			res_255495 = ((NI) 0);
			{
				while (1) {
					if (!(res_255495 <= HEX3Atmp_255492)) goto LA25;
					i_255490 = res_255495;
					result = searchtypeforaux_255226((*t).sons->data[i_255490], predicate, marker);
					{
						if (!result) goto LA28;
						goto BeforeRet;
					}
					LA28: ;
					res_255495 += ((NI) 1);
				} LA25: ;
			}
		}
	}
	break;
	default:
	{
	}
	break;
	}
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NIM_BOOL, searchtypefor_255514)(Ttype224847* t, Ttypepredicate254050 predicate) {
	NIM_BOOL result;
	Intset221056 marker;
	result = 0;
	memset((void*)(&marker), 0, sizeof(marker));
	chckNil((void*)(&marker));
	memset((void*)(&marker), 0, sizeof(marker));
	initintset_221927((&marker));
	result = searchtypeforaux_255226(t, predicate, (&marker));
	return result;
}

N_NIMCALL(NIM_BOOL, isgcref_255783)(Ttype224847* t) {
	NIM_BOOL result;
	NIM_BOOL LOC1;
	NIM_BOOL LOC3;
	result = 0;
	LOC1 = 0;
	LOC1 = ((289406976 &(IL64(1)<<(((*t).kind)&IL64(63))))!=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_254154)(Ttype224847* typ) {
	NIM_BOOL result;
	result = 0;
	result = searchtypefor_255514(typ, isgcref_255783);
	return result;
}

N_NIMCALL(Ttype224847*, commonsuperclass_261468)(Ttype224847* a, Ttype224847* b) {
	Ttype224847* result;
	Ttype224847* x;
	Intset221056 ancestors;
	Ttype224847* y;
{	result = 0;
	{
		NIM_BOOL LOC3;
		LOC3 = 0;
		LOC3 = sameobjecttypes_259785(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_221927((&ancestors));
	{
		while (1) {
			if (!!((x == NIM_NIL))) goto LA7;
			x = skiptypes_228167(x, IL64(211106247215360));
			incl_221856((&ancestors), (*x).Sup.id);
			x = (*x).sons->data[((NI) 0)];
		} LA7: ;
	}
	y = b;
	{
		while (1) {
			if (!!((y == NIM_NIL))) goto LA9;
			y = skiptypes_228167(y, IL64(211106247215360));
			{
				NIM_BOOL LOC12;
				LOC12 = 0;
				LOC12 = contains_221829((&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_261024)(Ttype224847* x, Ttype224847* y) {
	NIM_BOOL result;
	Tsametypeclosure258841 c;
	result = 0;
	memset((void*)(&c), 0, sizeof(c));
	chckNil((void*)(&c));
	memset((void*)(&c), 0, sizeof(c));
	initsametypeclosure_258863((&c));
	c.flags |= ((NU8)1)<<((((NU8) 0))%(sizeof(NU8)*8));
	result = sametypeaux_259035(x, y, (&c));
	return result;
}

N_NIMCALL(NIM_BOOL, ispureobject_254196)(Ttype224847* typ) {
	NIM_BOOL result;
	Ttype224847* 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 &(1<<((((NU8) 9))&31)))!=0);
	LA6: ;
	result = LOC5;
	return result;
}

N_NIMCALL(NIM_BOOL, canformacyclenode_255918)(Intset221056* marker, Tnode224809* n, NI startid) {
	NIM_BOOL result;
{	result = 0;
	result = NIM_FALSE;
	{
		if (!!((n == NIM_NIL))) goto LA3;
		result = canformacycleaux_255909(marker, (*n).typ, startid);
		{
			if (!!(result)) goto LA7;
			switch ((*n).kind) {
			case ((NU8) 0) ... ((NU8) 23):
			{
			}
			break;
			default:
			{
				{
					NI i_255949;
					NI HEX3Atmp_255952;
					NI LOC12;
					NI res_255955;
					i_255949 = 0;
					HEX3Atmp_255952 = 0;
					LOC12 = 0;
					LOC12 = sonslen_227387(n);
					HEX3Atmp_255952 = (NI)(LOC12 - ((NI) 1));
					res_255955 = ((NI) 0);
					{
						while (1) {
							if (!(res_255955 <= HEX3Atmp_255952)) goto LA14;
							i_255949 = res_255955;
							result = canformacyclenode_255918(marker, (*n).kindU.S6.sons->data[i_255949], startid);
							{
								if (!result) goto LA17;
								goto BeforeRet;
							}
							LA17: ;
							res_255955 += ((NI) 1);
						} LA14: ;
					}
				}
			}
			break;
			}
		}
		LA7: ;
	}
	LA3: ;
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NIM_BOOL, canformacycleaux_255909)(Intset221056* marker, Ttype224847* typ, NI startid) {
	NIM_BOOL result;
	Ttype224847* t;
{	result = 0;
	result = NIM_FALSE;
	{
		if (!(typ == NIM_NIL)) goto LA3;
		goto BeforeRet;
	}
	LA3: ;
	{
		if (!(((*typ).flags &(1<<((((NU8) 4))&31)))!=0)) goto LA7;
		goto BeforeRet;
	}
	LA7: ;
	t = skiptypes_228167(typ, IL64(211106232576000));
	{
		if (!(((*t).flags &(1<<((((NU8) 4))&31)))!=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_221898(marker, (*t).Sup.id);
			if (!!(LOC16)) goto LA17;
			{
				NI i_256039;
				NI HEX3Atmp_256081;
				NI LOC20;
				NI res_256084;
				i_256039 = 0;
				HEX3Atmp_256081 = 0;
				LOC20 = 0;
				LOC20 = sonslen_227351(t);
				HEX3Atmp_256081 = (NI)(LOC20 - ((NI) 1));
				res_256084 = ((NI) 0);
				{
					while (1) {
						if (!(res_256084 <= HEX3Atmp_256081)) goto LA22;
						i_256039 = res_256084;
						result = canformacycleaux_255909(marker, (*t).sons->data[i_256039], startid);
						{
							if (!result) goto LA25;
							goto BeforeRet;
						}
						LA25: ;
						res_256084 += ((NI) 1);
					} LA22: ;
				}
			}
			{
				if (!!(((*t).n == NIM_NIL))) goto LA29;
				result = canformacyclenode_255918(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 &(1<<((((NU8) 2))&31)))!=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_254166)(Ttype224847* typ) {
	NIM_BOOL result;
	Intset221056 marker;
	result = 0;
	memset((void*)(&marker), 0, sizeof(marker));
	chckNil((void*)(&marker));
	memset((void*)(&marker), 0, sizeof(marker));
	initintset_221927((&marker));
	result = canformacycleaux_255909((&marker), typ, (*typ).Sup.id);
	return result;
}

N_NIMCALL(NU8, analyseobjectwithtypefieldaux_255637)(Ttype224847* t, Intset221056* 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_255235((*t).n, isobjectwithtypefieldpredicate_255556, marker);
				if (!LOC12) goto LA13;
				result = ((NU8) 2);
				goto BeforeRet;
			}
			LA13: ;
		}
		LA8: ;
		{
			NI i_255680;
			NI HEX3Atmp_255732;
			NI LOC16;
			NI res_255735;
			i_255680 = 0;
			HEX3Atmp_255732 = 0;
			LOC16 = 0;
			LOC16 = sonslen_227351(t);
			HEX3Atmp_255732 = (NI)(LOC16 - ((NI) 1));
			res_255735 = ((NI) 0);
			{
				while (1) {
					if (!(res_255735 <= HEX3Atmp_255732)) goto LA18;
					i_255680 = res_255735;
					res = analyseobjectwithtypefieldaux_255637((*t).sons->data[i_255680], marker);
					{
						if (!(res == ((NU8) 2))) goto LA21;
						result = ((NU8) 2);
						goto BeforeRet;
					}
					LA21: ;
					{
						if (!(res == ((NU8) 1))) goto LA25;
						result = ((NU8) 1);
					}
					LA25: ;
					res_255735 += ((NI) 1);
				} LA18: ;
			}
		}
		{
			if (!(result == ((NU8) 0))) goto LA29;
			{
				NIM_BOOL LOC33;
				LOC33 = 0;
				LOC33 = isobjectwithtypefieldpredicate_255556(t);
				if (!LOC33) goto LA34;
				result = ((NU8) 1);
			}
			LA34: ;
		}
		LA29: ;
	}
	break;
	case ((NU8) 11):
	case ((NU8) 13):
	case ((NU8) 46):
	case ((NU8) 47):
	{
		Ttype224847* LOC37;
		LOC37 = 0;
		LOC37 = lastson_227426(t);
		result = analyseobjectwithtypefieldaux_255637(LOC37, marker);
	}
	break;
	case ((NU8) 16):
	case ((NU8) 4):
	case ((NU8) 18):
	{
		{
			NI i_255720;
			NI HEX3Atmp_255740;
			NI LOC40;
			NI res_255743;
			i_255720 = 0;
			HEX3Atmp_255740 = 0;
			LOC40 = 0;
			LOC40 = sonslen_227351(t);
			HEX3Atmp_255740 = (NI)(LOC40 - ((NI) 1));
			res_255743 = ((NI) 0);
			{
				while (1) {
					if (!(res_255743 <= HEX3Atmp_255740)) goto LA42;
					i_255720 = res_255743;
					res = analyseobjectwithtypefieldaux_255637((*t).sons->data[i_255720], marker);
					{
						if (!!((res == ((NU8) 0)))) goto LA45;
						result = ((NU8) 2);
						goto BeforeRet;
					}
					LA45: ;
					res_255743 += ((NI) 1);
				} LA42: ;
			}
		}
	}
	break;
	default:
	{
	}
	break;
	}
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NU8, analyseobjectwithtypefield_254216)(Ttype224847* t) {
	NU8 result;
	Intset221056 marker;
	result = 0;
	memset((void*)(&marker), 0, sizeof(marker));
	chckNil((void*)(&marker));
	memset((void*)(&marker), 0, sizeof(marker));
	initintset_221927((&marker));
	result = analyseobjectwithtypefieldaux_255637(t, (&marker));
	return result;
}

N_NIMCALL(NIM_BOOL, ishiddenpointer_255878)(Ttype224847* t) {
	NIM_BOOL result;
	result = 0;
	result = ((285212672 &(IL64(1)<<(((*t).kind)&IL64(63))))!=0);
	return result;
}

N_NIMCALL(NIM_BOOL, containshiddenpointer_254160)(Ttype224847* typ) {
	NIM_BOOL result;
	result = 0;
	result = searchtypefor_255514(typ, ishiddenpointer_255878);
	return result;
}

static N_INLINE(NIM_BOOL, iscompiletimeonly_263712)(Ttype224847* t) {
	NIM_BOOL result;
	result = 0;
	result = ((IL64(576460752303423744) &(IL64(1)<<(((*t).kind)&IL64(63))))!=0);
	return result;
}

N_NIMCALL(NIM_BOOL, containscompiletimeonly_263733)(Ttype224847* t) {
	NIM_BOOL result;
{	result = 0;
	{
		NIM_BOOL LOC3;
		LOC3 = 0;
		LOC3 = iscompiletimeonly_263712(t);
		if (!LOC3) goto LA4;
		result = NIM_TRUE;
		goto BeforeRet;
	}
	LA4: ;
	{
		NIM_BOOL LOC8;
		LOC8 = 0;
		LOC8 = HEX3DHEX3D_263739((*t).sons, NIM_NIL);
		if (!!(LOC8)) goto LA9;
		{
			NI i_263869;
			NI HEX3Atmp_263883;
			NI LOC12;
			NI res_263886;
			i_263869 = 0;
			HEX3Atmp_263883 = 0;
			LOC12 = 0;
			LOC12 = sonslen_227351(t);
			HEX3Atmp_263883 = (LOC12 - 1);
			res_263886 = ((NI) 0);
			{
				while (1) {
					if (!(res_263886 <= HEX3Atmp_263883)) goto LA14;
					i_263869 = res_263886;
					{
						NIM_BOOL LOC17;
						LOC17 = 0;
						LOC17 = !(((*t).sons->data[i_263869] == NIM_NIL));
						if (!(LOC17)) goto LA18;
						LOC17 = iscompiletimeonly_263712((*t).sons->data[i_263869]);
						LA18: ;
						if (!LOC17) goto LA19;
						result = NIM_TRUE;
						goto BeforeRet;
					}
					LA19: ;
					res_263886 += ((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* TMP2739[2];
static TNimNode TMP890[3];
NTI258855.size = sizeof(TY258855);
NTI258855.kind = 18;
NTI258855.base = 0;
NTI258855.flags = 3;
TMP2739[0] = &TMP890[1];
TMP890[1].kind = 1;
TMP890[1].offset = offsetof(TY258855, Field0);
TMP890[1].typ = (&NTI108);
TMP890[1].name = "Field0";
TMP2739[1] = &TMP890[2];
TMP890[2].kind = 1;
TMP890[2].offset = offsetof(TY258855, Field1);
TMP890[2].typ = (&NTI108);
TMP890[2].name = "Field1";
TMP890[0].len = 2; TMP890[0].kind = 2; TMP890[0].sons = &TMP2739[0];
NTI258855.node = &TMP890[0];
NTI258854.size = sizeof(TY258854*);
NTI258854.kind = 24;
NTI258854.base = (&NTI258855);
NTI258854.flags = 2;
NTI258854.marker = TMP2740;
}

