/* Generated by Nimrod Compiler v0.9.5 */
/*   (c) 2014 Andreas Rumpf */
/* The generated code is subject to the original license. */
/* Compiled for: Linux, i386, gcc */
/* Command for C compiler:
   gcc -c  -w -O3 -fno-strict-aliasing  -I/build/nimrod/src/nimrod/lib -o compiler/nimcache/types.o compiler/nimcache/types.c */
#define NIM_INTBITS 32
#include "nimbase.h"

#include <string.h>
typedef struct NimStringDesc NimStringDesc;
typedef struct TGenericSeq TGenericSeq;
typedef struct ttype188837 ttype188837;
typedef struct tidobj167013 tidobj167013;
typedef struct TNimObject TNimObject;
typedef struct TNimType TNimType;
typedef struct TNimNode TNimNode;
typedef struct ttypeseq188835 ttypeseq188835;
typedef struct tnode188803 tnode188803;
typedef struct tsym188833 tsym188833;
typedef struct tloc188817 tloc188817;
typedef struct trope145007 trope145007;
typedef struct tscope188827 tscope188827;
typedef struct TY188933 TY188933;
typedef struct tinstantiation188823 tinstantiation188823;
typedef struct tstrtable188807 tstrtable188807;
typedef struct tsymseq188805 tsymseq188805;
typedef struct tident167019 tident167019;
typedef struct tlineinfo163527 tlineinfo163527;
typedef struct tlib188821 tlib188821;
typedef struct tnodeseq188797 tnodeseq188797;
typedef struct TY79484 TY79484;
typedef struct tsametypeclosure227852 tsametypeclosure227852;
typedef struct TY227865 TY227865;
typedef struct TY227866 TY227866;
typedef struct tintset185047 tintset185047;
typedef struct ttrunk185043 ttrunk185043;
typedef struct ttrunkseq185045 ttrunkseq185045;
typedef struct tcell41090 tcell41090;
typedef struct tcellseq41106 tcellseq41106;
typedef struct tgcheap43016 tgcheap43016;
typedef struct tcellset41102 tcellset41102;
typedef struct tpagedesc41098 tpagedesc41098;
typedef struct tmemregion23410 tmemregion23410;
typedef struct tsmallchunk22638 tsmallchunk22638;
typedef struct tllchunk23404 tllchunk23404;
typedef struct tbigchunk22640 tbigchunk22640;
typedef struct tintset22615 tintset22615;
typedef struct ttrunk22611 ttrunk22611;
typedef struct tavlnode23408 tavlnode23408;
typedef struct tgcstat43014 tgcstat43014;
typedef struct TY188922 TY188922;
typedef struct tlistentry118017 tlistentry118017;
typedef struct tbasechunk22636 tbasechunk22636;
typedef struct tfreecell22628 tfreecell22628;
struct  TGenericSeq  {
NI len;
NI reserved;
};
struct  NimStringDesc  {
  TGenericSeq Sup;
NIM_CHAR data[SEQ_DECL_SIZE];
};
typedef N_NIMCALL_PTR(void, TY2289) (void* p, NI op);
struct  TNimType  {
NI size;
NU8 kind;
NU8 flags;
TNimType* base;
TNimNode* node;
void* finalizer;
TY2289 marker;
};
struct  TNimObject  {
TNimType* m_type;
};
struct  tidobj167013  {
  TNimObject Sup;
NI Id;
};
struct  tloc188817  {
NU8 K;
NU8 S;
NU8 Flags;
ttype188837* T;
trope145007* R;
trope145007* Heaproot;
NI A;
};
struct  ttype188837  {
  tidobj167013 Sup;
NU8 Kind;
NU8 Callconv;
NU32 Flags;
ttypeseq188835* Sons;
tnode188803* N;
tsym188833* Destructor;
tsym188833* Owner;
tsym188833* Sym;
NI64 Size;
NI Align;
tloc188817 Loc;
};
struct  tstrtable188807  {
NI Counter;
tsymseq188805* Data;
};
struct  tlineinfo163527  {
NI16 Line;
NI16 Col;
NI32 Fileindex;
};
struct  tsym188833  {
  tidobj167013 Sup;
NU8 Kind;
union {
struct {ttypeseq188835* Typeinstcache;
tscope188827* Typscope;
} S1;
struct {TY188933* Procinstcache;
tscope188827* Scope;
} S2;
struct {TY188933* Usedgenerics;
tstrtable188807 Tab;
} S3;
} kindU;
NU16 Magic;
ttype188837* Typ;
tident167019* Name;
tlineinfo163527 Info;
tsym188833* Owner;
NU32 Flags;
tnode188803* Ast;
NU32 Options;
NI Position;
NI Offset;
tloc188817 Loc;
tlib188821* Annex;
tnode188803* Constraint;
};
struct  tnode188803  {
ttype188837* Typ;
tlineinfo163527 Info;
NU16 Flags;
NU8 Kind;
union {
struct {NI64 Intval;
} S1;
struct {NF Floatval;
} S2;
struct {NimStringDesc* Strval;
} S3;
struct {tsym188833* Sym;
} S4;
struct {tident167019* Ident;
} S5;
struct {tnodeseq188797* Sons;
} S6;
} kindU;
NimStringDesc* Comment;
};
struct  tident167019  {
  tidobj167013 Sup;
NimStringDesc* S;
tident167019* Next;
NI H;
};
typedef NimStringDesc* TY225632[62];
struct TY79484 {
NimStringDesc* Field0;
NI Field1;
};
typedef NimStringDesc* TY188016[10];
struct  TNimNode  {
NU8 kind;
NI offset;
TNimType* typ;
NCSTRING name;
NI len;
TNimNode** sons;
};
struct TY227866 {
NI Field0;
NI Field1;
};
struct  tsametypeclosure227852  {
NU8 Cmp;
NI Reccheck;
NU8 Flags;
TY227865* S;
};
typedef N_NIMCALL_PTR(NIM_BOOL, ttypeiter223034) (ttype188837* t, TNimObject* closure);
struct  tintset185047  {
NI Counter;
NI Max;
ttrunk185043* Head;
ttrunkseq185045* Data;
};
struct  tcell41090  {
NI Refcount;
TNimType* Typ;
};
struct  tcellseq41106  {
NI Len;
NI Cap;
tcell41090** D;
};
struct  tcellset41102  {
NI Counter;
NI Max;
tpagedesc41098* Head;
tpagedesc41098** Data;
};
typedef tsmallchunk22638* TY23422[512];
typedef ttrunk22611* ttrunkbuckets22613[256];
struct  tintset22615  {
ttrunkbuckets22613 Data;
};
struct  tmemregion23410  {
NI Minlargeobj;
NI Maxlargeobj;
TY23422 Freesmallchunks;
tllchunk23404* Llmem;
NI Currmem;
NI Maxmem;
NI Freemem;
NI Lastsize;
tbigchunk22640* Freechunkslist;
tintset22615 Chunkstarts;
tavlnode23408* Root;
tavlnode23408* Deleted;
tavlnode23408* Last;
tavlnode23408* Freeavlnodes;
};
struct  tgcstat43014  {
NI Stackscans;
NI Cyclecollections;
NI Maxthreshold;
NI Maxstacksize;
NI Maxstackcells;
NI Cycletablesize;
NI64 Maxpause;
};
struct  tgcheap43016  {
void* Stackbottom;
NI Cyclethreshold;
tcellseq41106 Zct;
tcellseq41106 Decstack;
tcellset41102 Cycleroots;
tcellseq41106 Tempstack;
NI Recgclock;
tmemregion23410 Region;
tgcstat43014 Stat;
};
typedef N_NIMCALL_PTR(NIM_BOOL, ttypepredicate223038) (ttype188837* t);
struct  trope145007  {
  TNimObject Sup;
trope145007* Left;
trope145007* Right;
NI Length;
NimStringDesc* Data;
};
struct  tscope188827  {
NI Depthlevel;
tstrtable188807 Symbols;
tnodeseq188797* Usingsyms;
tscope188827* Parent;
};
struct  tinstantiation188823  {
tsym188833* Sym;
ttypeseq188835* Concretetypes;
TY188922* Usedby;
};
struct  tlistentry118017  {
  TNimObject Sup;
tlistentry118017* Prev;
tlistentry118017* Next;
};
struct  tlib188821  {
  tlistentry118017 Sup;
NU8 Kind;
NIM_BOOL Generated;
NIM_BOOL Isoverriden;
trope145007* Name;
tnode188803* Path;
};
typedef NI TY22618[16];
struct  ttrunk185043  {
ttrunk185043* Next;
NI Key;
TY22618 Bits;
};
struct  tpagedesc41098  {
tpagedesc41098* Next;
NI Key;
TY22618 Bits;
};
struct  tbasechunk22636  {
NI Prevsize;
NI Size;
NIM_BOOL Used;
};
struct  tsmallchunk22638  {
  tbasechunk22636 Sup;
tsmallchunk22638* Next;
tsmallchunk22638* Prev;
tfreecell22628* Freelist;
NI Free;
NI Acc;
NF Data;
};
struct  tllchunk23404  {
NI Size;
NI Acc;
tllchunk23404* Next;
};
struct  tbigchunk22640  {
  tbasechunk22636 Sup;
tbigchunk22640* Next;
tbigchunk22640* Prev;
NI Align;
NF Data;
};
struct  ttrunk22611  {
ttrunk22611* Next;
NI Key;
TY22618 Bits;
};
typedef tavlnode23408* TY23414[2];
struct  tavlnode23408  {
TY23414 Link;
NI Key;
NI Upperbound;
NI Level;
};
struct  tfreecell22628  {
tfreecell22628* Next;
NI Zerofield;
};
struct ttypeseq188835 {
  TGenericSeq Sup;
  ttype188837* data[SEQ_DECL_SIZE];
};
struct TY188933 {
  TGenericSeq Sup;
  tinstantiation188823* data[SEQ_DECL_SIZE];
};
struct tsymseq188805 {
  TGenericSeq Sup;
  tsym188833* data[SEQ_DECL_SIZE];
};
struct tnodeseq188797 {
  TGenericSeq Sup;
  tnode188803* data[SEQ_DECL_SIZE];
};
struct TY227865 {
  TGenericSeq Sup;
  TY227866 data[SEQ_DECL_SIZE];
};
struct ttrunkseq185045 {
  TGenericSeq Sup;
  ttrunk185043* data[SEQ_DECL_SIZE];
};
struct TY188922 {
  TGenericSeq Sup;
  NI32 data[SEQ_DECL_SIZE];
};
N_NIMCALL(NimStringDesc*, copyString)(NimStringDesc* src);
static N_INLINE(NIM_BOOL, isintlit_223316)(ttype188837* t);
static N_INLINE(void, appendString)(NimStringDesc* dest, NimStringDesc* src);
N_NIMCALL(NimStringDesc*, nimInt64ToStr)(NI64 x);
N_NIMCALL(NimStringDesc*, rawNewString)(NI space);
N_NIMCALL(NimStringDesc*, typetostring_223020)(ttype188837* typ, NU8 prefer);
static N_INLINE(void, appendChar)(NimStringDesc* dest, NIM_CHAR c);
static N_INLINE(NI, sonslen_189185)(ttype188837* n);
N_NIMCALL(NimStringDesc*, resizeString)(NimStringDesc* dest, NI addlen);
N_NIMCALL(NimStringDesc*, addChar)(NimStringDesc* s, NIM_CHAR c);
N_NIMCALL(ttype188837*, base_223029)(ttype188837* t);
N_NIMCALL(NI, len_192569)(ttype188837* n);
N_NIMCALL(void, internalerror_165606)(NimStringDesc* errmsg);
N_NIMCALL(NimStringDesc*, HEX24_165714)(TY79484 x_165718);
N_NIMCALL(NimStringDesc*, rendertree_211051)(tnode188803* n, NU8 renderflags);
N_NIMCALL(NimStringDesc*, rangetostr_225466)(tnode188803* n);
N_NIMCALL(NimStringDesc*, valuetostring_225418)(tnode188803* a);
N_NIMCALL(NimStringDesc*, nimFloatToStr)(NF x);
static N_INLINE(NI, sonslen_189181)(tnode188803* n);
N_NIMCALL(NimStringDesc*, setLengthStr)(NimStringDesc* s, NI newlen);
static N_INLINE(void, addsep_89827)(NimStringDesc** dest, NimStringDesc* sep, NI startlen);
N_NIMCALL(NimStringDesc*, nsuFormatSingleElem)(NimStringDesc* formatstr, NimStringDesc* a);
N_NIMCALL(NI64, firstord_223002)(ttype188837* t);
N_NIMCALL(NI64, getordvalue_223150)(tnode188803* n);
N_NIMCALL(void, localerror_165571)(tlineinfo163527 info, NU16 msg, NimStringDesc* arg);
static N_INLINE(ttype188837*, lastson_189193)(ttype188837* n);
N_NIMCALL(NimStringDesc*, reprEnum)(NI e_75880, TNimType* typ);
N_NIMCALL(NI64, lastord_223006)(ttype188837* t);
N_NIMCALL(NI64, lengthord_223010)(ttype188837* t);
N_NIMCALL(NIM_BOOL, isordinaltype_223071)(ttype188837* t);
N_NIMCALL(void, initsametypeclosure_227872)(tsametypeclosure227852* Result);
N_NOINLINE(void, chckNil)(void* p);
N_NIMCALL(NIM_BOOL, sametypeaux_228050)(ttype188837* x, ttype188837* y, tsametypeclosure227852* c);
N_NIMCALL(ttype188837*, skiptypes_192793)(ttype188837* t, NU64 kinds);
N_NIMCALL(ttype188837*, skipgenericalias_229506)(ttype188837* t);
N_NIMCALL(NIM_BOOL, isgenericalias_229482)(ttype188837* t);
static N_INLINE(NIM_BOOL, sameflags_229524)(ttype188837* a, ttype188837* b);
N_NIMCALL(NIM_BOOL, exprstructuralequivalent_221150)(tnode188803* a, tnode188803* b);
N_NIMCALL(NIM_BOOL, containsorincl_227877)(tsametypeclosure227852* c, ttype188837* a, ttype188837* b);
static N_INLINE(NIM_BOOL, contains_227898)(TY227866* a_227904, NI a_227904Len0, TY227866 item_227907);
static N_INLINE(NI, find_227910)(TY227866* a_227915, NI a_227915Len0, TY227866 item_227917);
N_NIMCALL(NIM_BOOL, HEX3DHEX3D_227959)(TY227866 x_227963, TY227866 y_227965);
N_NIMCALL(void, TMP2524)(void* p, NI op);
N_NIMCALL(void*, newSeq)(TNimType* typ, NI len);
N_NIMCALL(void, unsureAsgnRef)(void** dest, void* src);
N_NIMCALL(TGenericSeq*, incrSeq)(TGenericSeq* seq, NI elemsize);
N_NIMCALL(NIM_BOOL, sameobjectstructures_229428)(ttype188837* a, ttype188837* b, tsametypeclosure227852* c);
N_NIMCALL(NIM_BOOL, sametypeornilaux_228057)(ttype188837* a, ttype188837* b, tsametypeclosure227852* c);
N_NIMCALL(NIM_BOOL, sameobjecttree_229174)(tnode188803* a, tnode188803* b, tsametypeclosure227852* c);
static N_INLINE(NIM_BOOL, eqStrings)(NimStringDesc* a, NimStringDesc* b);
N_NIMCALL(NIM_BOOL, sametuple_228866)(ttype188837* a, ttype188837* b, tsametypeclosure227852* c);
N_NIMCALL(void, internalerror_165591)(tlineinfo163527 info, NimStringDesc* errmsg);
N_NIMCALL(NIM_BOOL, samechildrenaux_229455)(ttype188837* a, ttype188837* b, tsametypeclosure227852* c);
N_NIMCALL(NIM_BOOL, sameconstraints_228280)(tnode188803* a, tnode188803* b);
static N_INLINE(NI, len_189264)(tnode188803* n);
static N_INLINE(tnode188803*, HEX5BHEX5D_189694)(tnode188803* n, NI i);
N_NIMCALL(NIM_BOOL, samevalue_197271)(tnode188803* a, tnode188803* b);
N_NIMCALL(NIM_BOOL, iterovertype_223048)(ttype188837* t, ttypeiter223034 iter, TNimObject* closure);
N_NIMCALL(void, initintset_185918)(tintset185047* Result);
N_NIMCALL(NIM_BOOL, iterovertypeaux_224075)(tintset185047* marker, ttype188837* t, ttypeiter223034 iter, TNimObject* closure);
N_NIMCALL(NIM_BOOL, containsorincl_185888)(tintset185047* s, NI key);
N_NIMCALL(NIM_BOOL, iterovernode_224083)(tintset185047* marker, tnode188803* n, ttypeiter223034 iter, TNimObject* closure);
N_NIMCALL(NIM_BOOL, containsgenerictypeiter_232618)(ttype188837* t, TNimObject* closure);
N_NIMCALL(NIM_BOOL, compatibleeffectsaux_232831)(tnode188803* se, tnode188803* re);
N_NIMCALL(NI, safeinheritancediff_232806)(ttype188837* a, ttype188837* b);
N_NIMCALL(NI, inheritancediff_230560)(ttype188837* a, ttype188837* b);
N_NIMCALL(NIM_BOOL, sameobjecttypes_229091)(ttype188837* a, ttype188837* b);
N_NIMCALL(ttype188837*, elemtype_223559)(ttype188837* t);
N_NIMCALL(NI64, computesize_223154)(ttype188837* typ);
N_NIMCALL(NI64, computesizeaux_232025)(ttype188837* typ, NI64* a);
N_NIMCALL(NI64, align_232018)(NI64 address, NI64 alignment);
N_NIMCALL(NIM_BOOL, isobjectwithtypefieldpredicate_224556)(ttype188837* t);
N_NIMCALL(NI64, computerecsizeaux_232031)(tnode188803* n, NI64* a, NI64* curroffset);
static N_INLINE(tnode188803*, lastson_189189)(tnode188803* n);
N_NIMCALL(NIM_BOOL, typeallowedaux_231250)(tintset185047* marker, ttype188837* typ, NU8 kind, NU8 flags_231258);
N_NIMCALL(NIM_BOOL, typeallowednode_231260)(tintset185047* marker, tnode188803* n, NU8 kind, NU8 flags);
N_NIMCALL(NIM_BOOL, sametype_228116)(ttype188837* a, ttype188837* b, NU8 flags);
N_NIMCALL(void, incl_185849)(tintset185047* s, NI key);
N_NIMCALL(NIM_BOOL, contains_185821)(tintset185047 s, NI key);
N_NIMCALL(ttype188837*, copytype_189141)(ttype188837* t, tsym188833* owner, NIM_BOOL keepid);
static N_INLINE(void, asgnRefNoCycle)(void** dest, void* src);
static N_INLINE(tcell41090*, usrtocell_44443)(void* usr);
static N_INLINE(void, rtladdzct_46002)(tcell41090* c);
N_NOINLINE(void, addzct_44418)(tcellseq41106* s, tcell41090* c);
N_NIMCALL(NIM_BOOL, searchtypefor_224526)(ttype188837* t, ttypepredicate223038 predicate);
N_NIMCALL(NIM_BOOL, searchtypeforaux_224214)(ttype188837* t, ttypepredicate223038 predicate, tintset185047* marker);
N_NIMCALL(NIM_BOOL, searchtypenodeforaux_224221)(tnode188803* n, ttypepredicate223038 p, tintset185047* marker);
N_NIMCALL(NIM_BOOL, isgcref_224755)(ttype188837* t);
N_NIMCALL(NIM_BOOL, canformacycleaux_224863)(tintset185047* marker, ttype188837* typ, NI startid);
N_NIMCALL(NIM_BOOL, canformacyclenode_224870)(tintset185047* marker, tnode188803* n, NI startid);
N_NIMCALL(NU8, analyseobjectwithtypefieldaux_224631)(ttype188837* t, tintset185047* marker);
N_NIMCALL(NIM_BOOL, istyref_224798)(ttype188837* t);
static N_INLINE(NIM_BOOL, iscompiletimeonly_233237)(ttype188837* t);
N_NIMCALL(NIM_BOOL, HEX3DHEX3D_233264)(ttypeseq188835* x_233270, ttypeseq188835* y_233275);
STRING_LITERAL(TMP1863, "", 0);
STRING_LITERAL(TMP1864, " literal(", 9);
STRING_LITERAL(TMP1865, ")", 1);
STRING_LITERAL(TMP1866, "None", 4);
STRING_LITERAL(TMP1867, "bool", 4);
STRING_LITERAL(TMP1868, "Char", 4);
STRING_LITERAL(TMP1869, "empty", 5);
STRING_LITERAL(TMP1870, "Array Constructor [$1]", 22);
STRING_LITERAL(TMP1871, "nil", 3);
STRING_LITERAL(TMP1872, "expr", 4);
STRING_LITERAL(TMP1873, "stmt", 4);
STRING_LITERAL(TMP1874, "typeDesc", 8);
STRING_LITERAL(TMP1875, "GenericInvokation", 17);
STRING_LITERAL(TMP1876, "GenericBody", 11);
STRING_LITERAL(TMP1877, "GenericInst", 11);
STRING_LITERAL(TMP1878, "GenericParam", 12);
STRING_LITERAL(TMP1879, "distinct $1", 11);
STRING_LITERAL(TMP1880, "enum", 4);
STRING_LITERAL(TMP1881, "ordinal[$1]", 11);
STRING_LITERAL(TMP1882, "array[$1, $2]", 13);
STRING_LITERAL(TMP1883, "object", 6);
STRING_LITERAL(TMP1884, "tuple", 5);
STRING_LITERAL(TMP1885, "set[$1]", 7);
STRING_LITERAL(TMP1886, "range[$1]", 9);
STRING_LITERAL(TMP1887, "ptr ", 4);
STRING_LITERAL(TMP1888, "ref ", 4);
STRING_LITERAL(TMP1889, "var ", 4);
STRING_LITERAL(TMP1890, "seq[$1]", 7);
STRING_LITERAL(TMP1891, "proc", 4);
STRING_LITERAL(TMP1892, "pointer", 7);
STRING_LITERAL(TMP1893, "OpenArray[$1]", 13);
STRING_LITERAL(TMP1894, "string", 6);
STRING_LITERAL(TMP1895, "CString", 7);
STRING_LITERAL(TMP1896, "Forward", 7);
STRING_LITERAL(TMP1897, "int", 3);
STRING_LITERAL(TMP1898, "int8", 4);
STRING_LITERAL(TMP1899, "int16", 5);
STRING_LITERAL(TMP1900, "int32", 5);
STRING_LITERAL(TMP1901, "int64", 5);
STRING_LITERAL(TMP1902, "float", 5);
STRING_LITERAL(TMP1903, "float32", 7);
STRING_LITERAL(TMP1904, "float64", 7);
STRING_LITERAL(TMP1905, "float128", 8);
STRING_LITERAL(TMP1906, "uint", 4);
STRING_LITERAL(TMP1907, "uint8", 5);
STRING_LITERAL(TMP1908, "uint16", 6);
STRING_LITERAL(TMP1909, "uint32", 6);
STRING_LITERAL(TMP1910, "uint64", 6);
STRING_LITERAL(TMP1911, "bignum", 6);
STRING_LITERAL(TMP1912, "const ", 6);
STRING_LITERAL(TMP1913, "!", 1);
STRING_LITERAL(TMP1914, "varargs[$1]", 11);
STRING_LITERAL(TMP1915, "iter[$1]", 8);
STRING_LITERAL(TMP1916, "Error Type", 10);
STRING_LITERAL(TMP1917, "BuiltInTypeClass", 16);
STRING_LITERAL(TMP1918, "UserTypeClass", 13);
STRING_LITERAL(TMP1919, "UserTypeClassInst", 17);
STRING_LITERAL(TMP1920, "CompositeTypeClass", 18);
STRING_LITERAL(TMP1921, "and", 3);
STRING_LITERAL(TMP1922, "or", 2);
STRING_LITERAL(TMP1923, "not", 3);
STRING_LITERAL(TMP1924, "any", 3);
STRING_LITERAL(TMP1925, "static", 6);
STRING_LITERAL(TMP1926, "TypeFromExpr", 12);
STRING_LITERAL(TMP1927, "FieldAccessor", 13);
NIM_CONST TY225632 typetostr_225631 = {((NimStringDesc*) &TMP1866),
((NimStringDesc*) &TMP1867),
((NimStringDesc*) &TMP1868),
((NimStringDesc*) &TMP1869),
((NimStringDesc*) &TMP1870),
((NimStringDesc*) &TMP1871),
((NimStringDesc*) &TMP1872),
((NimStringDesc*) &TMP1873),
((NimStringDesc*) &TMP1874),
((NimStringDesc*) &TMP1875),
((NimStringDesc*) &TMP1876),
((NimStringDesc*) &TMP1877),
((NimStringDesc*) &TMP1878),
((NimStringDesc*) &TMP1879),
((NimStringDesc*) &TMP1880),
((NimStringDesc*) &TMP1881),
((NimStringDesc*) &TMP1882),
((NimStringDesc*) &TMP1883),
((NimStringDesc*) &TMP1884),
((NimStringDesc*) &TMP1885),
((NimStringDesc*) &TMP1886),
((NimStringDesc*) &TMP1887),
((NimStringDesc*) &TMP1888),
((NimStringDesc*) &TMP1889),
((NimStringDesc*) &TMP1890),
((NimStringDesc*) &TMP1891),
((NimStringDesc*) &TMP1892),
((NimStringDesc*) &TMP1893),
((NimStringDesc*) &TMP1894),
((NimStringDesc*) &TMP1895),
((NimStringDesc*) &TMP1896),
((NimStringDesc*) &TMP1897),
((NimStringDesc*) &TMP1898),
((NimStringDesc*) &TMP1899),
((NimStringDesc*) &TMP1900),
((NimStringDesc*) &TMP1901),
((NimStringDesc*) &TMP1902),
((NimStringDesc*) &TMP1903),
((NimStringDesc*) &TMP1904),
((NimStringDesc*) &TMP1905),
((NimStringDesc*) &TMP1906),
((NimStringDesc*) &TMP1907),
((NimStringDesc*) &TMP1908),
((NimStringDesc*) &TMP1909),
((NimStringDesc*) &TMP1910),
((NimStringDesc*) &TMP1911),
((NimStringDesc*) &TMP1912),
((NimStringDesc*) &TMP1913),
((NimStringDesc*) &TMP1914),
((NimStringDesc*) &TMP1915),
((NimStringDesc*) &TMP1916),
((NimStringDesc*) &TMP1917),
((NimStringDesc*) &TMP1918),
((NimStringDesc*) &TMP1919),
((NimStringDesc*) &TMP1920),
((NimStringDesc*) &TMP1921),
((NimStringDesc*) &TMP1922),
((NimStringDesc*) &TMP1923),
((NimStringDesc*) &TMP1924),
((NimStringDesc*) &TMP1925),
((NimStringDesc*) &TMP1926),
((NimStringDesc*) &TMP1927)}
;
STRING_LITERAL(TMP1928, "int literal(", 12);
STRING_LITERAL(TMP1929, ", ", 2);
STRING_LITERAL(TMP1930, "typedesc", 8);
STRING_LITERAL(TMP1931, "typedesc[", 9);
STRING_LITERAL(TMP1932, "]", 1);
STRING_LITERAL(TMP1934, "compiler/types.nim", 18);
NIM_CONST TY79484 TMP1933 = {((NimStringDesc*) &TMP1934),
438}
;
STRING_LITERAL(TMP1935, "static[", 7);
STRING_LITERAL(TMP1936, "(", 1);
NIM_CONST TY79484 TMP1937 = {((NimStringDesc*) &TMP1934),
442}
;
STRING_LITERAL(TMP1938, "var", 3);
STRING_LITERAL(TMP1939, "ref", 3);
STRING_LITERAL(TMP1940, "ptr", 3);
STRING_LITERAL(TMP1941, "seq", 3);
STRING_LITERAL(TMP1942, "array", 5);
STRING_LITERAL(TMP1943, "set", 3);
STRING_LITERAL(TMP1944, "range", 5);
STRING_LITERAL(TMP1945, "distinct", 8);
STRING_LITERAL(TMP1946, "openarray", 9);
STRING_LITERAL(TMP1947, "[", 1);
STRING_LITERAL(TMP1948, " and ", 5);
STRING_LITERAL(TMP1949, " or ", 4);
STRING_LITERAL(TMP1950, "not ", 4);
NIM_CONST TY79484 TMP1951 = {((NimStringDesc*) &TMP1934),
473}
;
STRING_LITERAL(TMP1952, "array[", 6);
STRING_LITERAL(TMP1953, "<invalid value>", 15);
STRING_LITERAL(TMP1954, "..", 2);
STRING_LITERAL(TMP1955, "Array constructor[", 18);
STRING_LITERAL(TMP1956, "seq[", 4);
STRING_LITERAL(TMP1957, "ordinal[", 8);
STRING_LITERAL(TMP1958, "set[", 4);
STRING_LITERAL(TMP1959, "openarray[", 10);
STRING_LITERAL(TMP1960, "distinct ", 9);
STRING_LITERAL(TMP1961, "tuple[", 6);
STRING_LITERAL(TMP1962, ": ", 2);
STRING_LITERAL(TMP1963, "range ", 6);
STRING_LITERAL(TMP1964, "iterator (", 10);
STRING_LITERAL(TMP1965, "proc (", 6);
extern NIM_CONST TY188016 callingconvtostr_188015;
STRING_LITERAL(TMP1976, "noSideEffect", 12);
STRING_LITERAL(TMP1977, "gcsafe", 6);
STRING_LITERAL(TMP1978, "{.", 2);
STRING_LITERAL(TMP1979, ".}", 2);
STRING_LITERAL(TMP1980, "shared ", 7);
STRING_LITERAL(TMP1981, " not nil", 8);
STRING_LITERAL(TMP2497, "invalid kind for first(", 23);
STRING_LITERAL(TMP2498, "invalid kind for last(", 22);
STRING_LITERAL(TMP2525, "sameTuple", 9);
NIM_CONST TY79484 TMP2526 = {((NimStringDesc*) &TMP1934),
702}
;
NIM_CONST TY79484 TMP2540 = {((NimStringDesc*) &TMP1934),
1331}
;
NIM_CONST TY79484 TMP2541 = {((NimStringDesc*) &TMP1934),
1332}
;
STRING_LITERAL(TMP2548, "getProcHeader", 13);
STRING_LITERAL(TMP2613, "computeRecSizeAux(record case branch)", 37);
STRING_LITERAL(TMP2614, "computeRecSizeAux()", 19);
STRING_LITERAL(TMP2615, "getSize: ", 9);
NIM_CONST TY79484 TMP3010 = {((NimStringDesc*) &TMP1934),
1308}
;
STRING_LITERAL(TMP3175, "searchTypeNodeForAux(record case branch)", 40);
STRING_LITERAL(TMP3176, "searchTypeNodeForAux()", 22);
extern NI intsize_142590;
extern TNimType NTI188240; /* TTypeKind */
TNimType NTI227866; /* tuple[a: int, b: int] */
extern TNimType NTI106; /* int */
TNimType NTI227865; /* seq[tuple[a: int, b: int]] */
extern NI floatsize_142591;
extern NI ptrsize_142592;
extern tgcheap43016 gch_43044;

static N_INLINE(NIM_BOOL, isintlit_223316)(ttype188837* 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)), (NI32)((*src).Sup.len + 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[((NI32)((*dest).Sup.len + 1))- 0] = 0;
	(*dest).Sup.len += 1;
}

static N_INLINE(NI, sonslen_189185)(ttype188837* n) {
	NI result;
	result = 0;
	{
		if (!(*n).Sons == 0) goto LA3;
		result = 0;
	}
	goto LA1;
	LA3: ;
	{
		result = (*n).Sons->Sup.len;
	}
	LA1: ;
	return result;
}

N_NIMCALL(ttype188837*, base_223029)(ttype188837* t) {
	ttype188837* result;
	result = 0;
	result = (*t).Sons->data[0];
	return result;
}

N_NIMCALL(NimStringDesc*, valuetostring_225418)(tnode188803* 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*) &TMP1953));
	}
	break;
	}
	return result;
}

N_NIMCALL(NimStringDesc*, rangetostr_225466)(tnode188803* n) {
	NimStringDesc* result;
	NimStringDesc* LOC1;
	NimStringDesc* LOC2;
	NimStringDesc* LOC3;
	result = 0;
	LOC1 = 0;
	LOC2 = 0;
	LOC2 = valuetostring_225418((*n).kindU.S6.Sons->data[0]);
	LOC3 = 0;
	LOC3 = valuetostring_225418((*n).kindU.S6.Sons->data[1]);
	LOC1 = rawNewString(LOC2->Sup.len + LOC3->Sup.len + 2);
appendString(LOC1, LOC2);
appendString(LOC1, ((NimStringDesc*) &TMP1954));
appendString(LOC1, LOC3);
	result = LOC1;
	return result;
}

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

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

N_NIMCALL(NimStringDesc*, typetostring_223020)(ttype188837* typ, NU8 prefer) {
	NimStringDesc* result;
	ttype188837* t;
	result = 0;
	t = typ;
	result = copyString(((NimStringDesc*) &TMP1863));
	{
		if (!(t == NIM_NIL)) goto LA3;
		goto BeforeRet;
	}
	LA3: ;
	{
		NIM_BOOL LOC7;
		NIM_BOOL LOC8;
		LOC7 = 0;
		LOC8 = 0;
		LOC8 = (prefer == ((NU8) 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_223316(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*) &TMP1864));
appendString(LOC19, LOC20);
appendString(LOC19, ((NimStringDesc*) &TMP1865));
			result = LOC19;
			goto BeforeRet;
		}
		LA17: ;
		result = copyString((*(*(*t).Sym).Name).S);
		goto BeforeRet;
	}
	LA11: ;
	switch ((*t).Kind) {
	case ((NU8) 31):
	{
		{
			NIM_BOOL LOC24;
			NIM_BOOL LOC25;
			LOC24 = 0;
			LOC25 = 0;
			LOC25 = isintlit_223316(t);
			LOC24 = !(LOC25);
			if (LOC24) goto LA26;
			LOC24 = (prefer == ((NU8) 2));
			LA26: ;
			if (!LOC24) goto LA27;
			result = copyString(typetostr_225631[((*t).Kind)- 0]);
		}
		goto LA22;
		LA27: ;
		{
			NimStringDesc* LOC30;
			NimStringDesc* LOC31;
			LOC30 = 0;
			LOC31 = 0;
			LOC31 = nimInt64ToStr((*(*t).N).kindU.S1.Intval);
			LOC30 = rawNewString(LOC31->Sup.len + 13);
appendString(LOC30, ((NimStringDesc*) &TMP1928));
appendString(LOC30, LOC31);
appendString(LOC30, ((NimStringDesc*) &TMP1865));
			result = LOC30;
		}
		LA22: ;
	}
	break;
	case ((NU8) 10):
	case ((NU8) 11):
	case ((NU8) 9):
	{
		NimStringDesc* LOC33;
		NimStringDesc* LOC34;
		NI i_225775;
		NI HEX3Atmp_226375;
		NI LOC35;
		NI res_226377;
		LOC33 = 0;
		LOC34 = 0;
		LOC34 = typetostring_223020((*t).Sons->data[0], ((NU8) 0));
		LOC33 = rawNewString(LOC34->Sup.len + 1);
appendString(LOC33, LOC34);
appendChar(LOC33, 91);
		result = LOC33;
		i_225775 = 0;
		HEX3Atmp_226375 = 0;
		LOC35 = 0;
		LOC35 = sonslen_189185(t);
		HEX3Atmp_226375 = (NI32)((NI32)(LOC35 - 1) - ((NI) (!(((*t).Kind == ((NU8) 9))))));
		res_226377 = 1;
		while (1) {
			NimStringDesc* LOC41;
			if (!(res_226377 <= HEX3Atmp_226375)) goto LA36;
			i_225775 = res_226377;
			{
				if (!(1 < i_225775)) goto LA39;
				result = resizeString(result, 2);
appendString(result, ((NimStringDesc*) &TMP1929));
			}
			LA39: ;
			LOC41 = 0;
			LOC41 = typetostring_223020((*t).Sons->data[i_225775], ((NU8) 0));
			result = resizeString(result, LOC41->Sup.len + 0);
appendString(result, LOC41);
			res_226377 += 1;
		} LA36: ;
		result = addChar(result, 93);
	}
	break;
	case ((NU8) 8):
	{
		{
			ttype188837* LOC45;
			LOC45 = 0;
			LOC45 = base_223029(t);
			if (!((*LOC45).Kind == ((NU8) 0))) goto LA46;
			result = copyString(((NimStringDesc*) &TMP1930));
		}
		goto LA43;
		LA46: ;
		{
			NimStringDesc* LOC49;
			ttype188837* LOC50;
			NimStringDesc* LOC51;
			LOC49 = 0;
			LOC50 = 0;
			LOC50 = base_223029(t);
			LOC51 = 0;
			LOC51 = typetostring_223020(LOC50, ((NU8) 0));
			LOC49 = rawNewString(LOC51->Sup.len + 10);
appendString(LOC49, ((NimStringDesc*) &TMP1931));
appendString(LOC49, LOC51);
appendString(LOC49, ((NimStringDesc*) &TMP1932));
			result = LOC49;
		}
		LA43: ;
	}
	break;
	case ((NU8) 59):
	{
		NimStringDesc* LOC59;
		NimStringDesc* LOC60;
		{
			NI LOC55;
			NimStringDesc* LOC58;
			LOC55 = 0;
			LOC55 = len_192569(t);
			if (!!((0 < LOC55))) goto LA56;
			LOC58 = 0;
			LOC58 = HEX24_165714(TMP1933);
			internalerror_165606(LOC58);
		}
		LA56: ;
		LOC59 = 0;
		LOC60 = 0;
		LOC60 = typetostring_223020((*t).Sons->data[0], ((NU8) 0));
		LOC59 = rawNewString(LOC60->Sup.len + 8);
appendString(LOC59, ((NimStringDesc*) &TMP1935));
appendString(LOC59, LOC60);
appendString(LOC59, ((NimStringDesc*) &TMP1932));
		result = LOC59;
		{
			NimStringDesc* LOC65;
			NimStringDesc* LOC66;
			if (!!(((*t).N == NIM_NIL))) goto LA63;
			LOC65 = 0;
			LOC66 = 0;
			LOC66 = rendertree_211051((*t).N, 0);
			LOC65 = rawNewString(LOC66->Sup.len + 2);
appendString(LOC65, ((NimStringDesc*) &TMP1936));
appendString(LOC65, LOC66);
appendString(LOC65, ((NimStringDesc*) &TMP1865));
			result = resizeString(result, LOC65->Sup.len + 0);
appendString(result, LOC65);
		}
		LA63: ;
	}
	break;
	case ((NU8) 52):
	{
		{
			NIM_BOOL LOC70;
			NimStringDesc* LOC74;
			LOC70 = 0;
			LOC70 = !(((*t).Sym == NIM_NIL));
			if (!(LOC70)) goto LA71;
			LOC70 = !(((*(*t).Sym).Owner == NIM_NIL));
			LA71: ;
			if (!!(LOC70)) goto LA72;
			LOC74 = 0;
			LOC74 = HEX24_165714(TMP1937);
			internalerror_165606(LOC74);
		}
		LA72: ;
		result = copyString((*(*(*(*t).Sym).Owner).Name).S);
		goto BeforeRet;
	}
	break;
	case ((NU8) 51):
	{
		ttype188837* LOC76;
		LOC76 = 0;
		LOC76 = base_223029(t);
		switch ((*LOC76).Kind) {
		case ((NU8) 23):
		{
			result = copyString(((NimStringDesc*) &TMP1938));
		}
		break;
		case ((NU8) 22):
		{
			result = copyString(((NimStringDesc*) &TMP1939));
		}
		break;
		case ((NU8) 21):
		{
			result = copyString(((NimStringDesc*) &TMP1940));
		}
		break;
		case ((NU8) 24):
		{
			result = copyString(((NimStringDesc*) &TMP1941));
		}
		break;
		case ((NU8) 16):
		{
			result = copyString(((NimStringDesc*) &TMP1942));
		}
		break;
		case ((NU8) 19):
		{
			result = copyString(((NimStringDesc*) &TMP1943));
		}
		break;
		case ((NU8) 20):
		{
			result = copyString(((NimStringDesc*) &TMP1944));
		}
		break;
		case ((NU8) 13):
		{
			result = copyString(((NimStringDesc*) &TMP1945));
		}
		break;
		case ((NU8) 25):
		{
			result = copyString(((NimStringDesc*) &TMP1891));
		}
		break;
		case ((NU8) 17):
		{
			result = copyString(((NimStringDesc*) &TMP1883));
		}
		break;
		case ((NU8) 18):
		{
			result = copyString(((NimStringDesc*) &TMP1884));
		}
		break;
		case ((NU8) 27):
		{
			result = copyString(((NimStringDesc*) &TMP1946));
		}
		break;
		default:
		{
			ttype188837* LOC90;
			LOC90 = 0;
			LOC90 = base_223029(t);
			result = copyString(typetostr_225631[((*LOC90).Kind)- 0]);
		}
		break;
		}
	}
	break;
	case ((NU8) 53):
	{
		ttype188837* body;
		NimStringDesc* LOC92;
		NI i_225900;
		NI HEX3Atmp_226379;
		NI LOC93;
		NI res_226381;
		body = base_223029(t);
		LOC92 = 0;
		LOC92 = rawNewString((*(*(*body).Sym).Name).S->Sup.len + 1);
appendString(LOC92, (*(*(*body).Sym).Name).S);
appendString(LOC92, ((NimStringDesc*) &TMP1947));
		result = LOC92;
		i_225900 = 0;
		HEX3Atmp_226379 = 0;
		LOC93 = 0;
		LOC93 = sonslen_189185(t);
		HEX3Atmp_226379 = (NI32)(LOC93 - 2);
		res_226381 = 1;
		while (1) {
			NimStringDesc* LOC99;
			if (!(res_226381 <= HEX3Atmp_226379)) goto LA94;
			i_225900 = res_226381;
			{
				if (!(1 < i_225900)) goto LA97;
				result = resizeString(result, 2);
appendString(result, ((NimStringDesc*) &TMP1929));
			}
			LA97: ;
			LOC99 = 0;
			LOC99 = typetostring_223020((*t).Sons->data[i_225900], ((NU8) 0));
			result = resizeString(result, LOC99->Sup.len + 0);
appendString(result, LOC99);
			res_226381 += 1;
		} LA94: ;
		result = resizeString(result, 1);
appendString(result, ((NimStringDesc*) &TMP1932));
	}
	break;
	case ((NU8) 55):
	{
		NimStringDesc* LOC101;
		NimStringDesc* LOC102;
		NimStringDesc* LOC103;
		LOC101 = 0;
		LOC102 = 0;
		LOC102 = typetostring_223020((*t).Sons->data[0], ((NU8) 0));
		LOC103 = 0;
		LOC103 = typetostring_223020((*t).Sons->data[1], ((NU8) 0));
		LOC101 = rawNewString(LOC102->Sup.len + LOC103->Sup.len + 5);
appendString(LOC101, LOC102);
appendString(LOC101, ((NimStringDesc*) &TMP1948));
appendString(LOC101, LOC103);
		result = LOC101;
	}
	break;
	case ((NU8) 56):
	{
		NimStringDesc* LOC105;
		NimStringDesc* LOC106;
		NimStringDesc* LOC107;
		LOC105 = 0;
		LOC106 = 0;
		LOC106 = typetostring_223020((*t).Sons->data[0], ((NU8) 0));
		LOC107 = 0;
		LOC107 = typetostring_223020((*t).Sons->data[1], ((NU8) 0));
		LOC105 = rawNewString(LOC106->Sup.len + LOC107->Sup.len + 4);
appendString(LOC105, LOC106);
appendString(LOC105, ((NimStringDesc*) &TMP1949));
appendString(LOC105, LOC107);
		result = LOC105;
	}
	break;
	case ((NU8) 57):
	{
		NimStringDesc* LOC109;
		NimStringDesc* LOC110;
		LOC109 = 0;
		LOC110 = 0;
		LOC110 = typetostring_223020((*t).Sons->data[0], ((NU8) 0));
		LOC109 = rawNewString(LOC110->Sup.len + 4);
appendString(LOC109, ((NimStringDesc*) &TMP1950));
appendString(LOC109, LOC110);
		result = LOC109;
	}
	break;
	case ((NU8) 6):
	{
		{
			NI LOC114;
			NimStringDesc* LOC117;
			LOC114 = 0;
			LOC114 = len_192569(t);
			if (!!((LOC114 == 0))) goto LA115;
			LOC117 = 0;
			LOC117 = HEX24_165714(TMP1951);
			internalerror_165606(LOC117);
		}
		LA115: ;
		result = copyString(((NimStringDesc*) &TMP1872));
	}
	break;
	case ((NU8) 60):
	case ((NU8) 61):
	{
		result = rendertree_211051((*t).N, 0);
	}
	break;
	case ((NU8) 16):
	{
		{
			NimStringDesc* LOC124;
			NimStringDesc* LOC125;
			NimStringDesc* LOC126;
			if (!((*(*t).Sons->data[0]).Kind == ((NU8) 20))) goto LA122;
			LOC124 = 0;
			LOC125 = 0;
			LOC125 = rangetostr_225466((*(*t).Sons->data[0]).N);
			LOC126 = 0;
			LOC126 = typetostring_223020((*t).Sons->data[1], ((NU8) 0));
			LOC124 = rawNewString(LOC125->Sup.len + LOC126->Sup.len + 9);
appendString(LOC124, ((NimStringDesc*) &TMP1952));
appendString(LOC124, LOC125);
appendString(LOC124, ((NimStringDesc*) &TMP1929));
appendString(LOC124, LOC126);
appendChar(LOC124, 93);
			result = LOC124;
		}
		goto LA120;
		LA122: ;
		{
			NimStringDesc* LOC128;
			NimStringDesc* LOC129;
			NimStringDesc* LOC130;
			LOC128 = 0;
			LOC129 = 0;
			LOC129 = typetostring_223020((*t).Sons->data[0], ((NU8) 0));
			LOC130 = 0;
			LOC130 = typetostring_223020((*t).Sons->data[1], ((NU8) 0));
			LOC128 = rawNewString(LOC129->Sup.len + LOC130->Sup.len + 9);
appendString(LOC128, ((NimStringDesc*) &TMP1952));
appendString(LOC128, LOC129);
appendString(LOC128, ((NimStringDesc*) &TMP1929));
appendString(LOC128, LOC130);
appendChar(LOC128, 93);
			result = LOC128;
		}
		LA120: ;
	}
	break;
	case ((NU8) 4):
	{
		NimStringDesc* LOC132;
		NimStringDesc* LOC133;
		NimStringDesc* LOC134;
		LOC132 = 0;
		LOC133 = 0;
		LOC133 = rangetostr_225466((*(*t).Sons->data[0]).N);
		LOC134 = 0;
		LOC134 = typetostring_223020((*t).Sons->data[1], ((NU8) 0));
		LOC132 = rawNewString(LOC133->Sup.len + LOC134->Sup.len + 21);
appendString(LOC132, ((NimStringDesc*) &TMP1955));
appendString(LOC132, LOC133);
appendString(LOC132, ((NimStringDesc*) &TMP1929));
appendString(LOC132, LOC134);
appendChar(LOC132, 93);
		result = LOC132;
	}
	break;
	case ((NU8) 24):
	{
		NimStringDesc* LOC136;
		NimStringDesc* LOC137;
		LOC136 = 0;
		LOC137 = 0;
		LOC137 = typetostring_223020((*t).Sons->data[0], ((NU8) 0));
		LOC136 = rawNewString(LOC137->Sup.len + 5);
appendString(LOC136, ((NimStringDesc*) &TMP1956));
appendString(LOC136, LOC137);
appendChar(LOC136, 93);
		result = LOC136;
	}
	break;
	case ((NU8) 15):
	{
		NimStringDesc* LOC139;
		NimStringDesc* LOC140;
		LOC139 = 0;
		LOC140 = 0;
		LOC140 = typetostring_223020((*t).Sons->data[0], ((NU8) 0));
		LOC139 = rawNewString(LOC140->Sup.len + 9);
appendString(LOC139, ((NimStringDesc*) &TMP1957));
appendString(LOC139, LOC140);
appendChar(LOC139, 93);
		result = LOC139;
	}
	break;
	case ((NU8) 19):
	{
		NimStringDesc* LOC142;
		NimStringDesc* LOC143;
		LOC142 = 0;
		LOC143 = 0;
		LOC143 = typetostring_223020((*t).Sons->data[0], ((NU8) 0));
		LOC142 = rawNewString(LOC143->Sup.len + 5);
appendString(LOC142, ((NimStringDesc*) &TMP1958));
appendString(LOC142, LOC143);
appendChar(LOC142, 93);
		result = LOC142;
	}
	break;
	case ((NU8) 27):
	{
		NimStringDesc* LOC145;
		NimStringDesc* LOC146;
		LOC145 = 0;
		LOC146 = 0;
		LOC146 = typetostring_223020((*t).Sons->data[0], ((NU8) 0));
		LOC145 = rawNewString(LOC146->Sup.len + 11);
appendString(LOC145, ((NimStringDesc*) &TMP1959));
appendString(LOC145, LOC146);
appendChar(LOC145, 93);
		result = LOC145;
	}
	break;
	case ((NU8) 13):
	{
		NimStringDesc* LOC148;
		NimStringDesc* LOC149;
		LOC148 = 0;
		LOC149 = 0;
		LOC149 = typetostring_223020((*t).Sons->data[0], ((NU8) 0));
		LOC148 = rawNewString(LOC149->Sup.len + 9);
appendString(LOC148, ((NimStringDesc*) &TMP1960));
appendString(LOC148, LOC149);
		result = LOC148;
	}
	break;
	case ((NU8) 18):
	{
		result = copyString(((NimStringDesc*) &TMP1961));
		{
			NI i_226013;
			NI HEX3Atmp_226383;
			NI LOC155;
			NI res_226385;
			if (!!(((*t).N == NIM_NIL))) goto LA153;
			i_226013 = 0;
			HEX3Atmp_226383 = 0;
			LOC155 = 0;
			LOC155 = sonslen_189181((*t).N);
			HEX3Atmp_226383 = (NI32)(LOC155 - 1);
			res_226385 = 0;
			while (1) {
				NimStringDesc* LOC157;
				NimStringDesc* LOC158;
				if (!(res_226385 <= HEX3Atmp_226383)) goto LA156;
				i_226013 = res_226385;
				LOC157 = 0;
				LOC158 = 0;
				LOC158 = typetostring_223020((*t).Sons->data[i_226013], ((NU8) 0));
				LOC157 = rawNewString((*(*(*(*(*t).N).kindU.S6.Sons->data[i_226013]).kindU.S4.Sym).Name).S->Sup.len + LOC158->Sup.len + 2);
appendString(LOC157, (*(*(*(*(*t).N).kindU.S6.Sons->data[i_226013]).kindU.S4.Sym).Name).S);
appendString(LOC157, ((NimStringDesc*) &TMP1962));
appendString(LOC157, LOC158);
				result = resizeString(result, LOC157->Sup.len + 0);
appendString(result, LOC157);
				{
					NI LOC161;
					LOC161 = 0;
					LOC161 = sonslen_189181((*t).N);
					if (!(i_226013 < (NI32)(LOC161 - 1))) goto LA162;
					result = resizeString(result, 2);
appendString(result, ((NimStringDesc*) &TMP1929));
				}
				LA162: ;
				res_226385 += 1;
			} LA156: ;
		}
		goto LA151;
		LA153: ;
		{
			NI i_226242;
			NI HEX3Atmp_226387;
			NI LOC165;
			NI res_226389;
			i_226242 = 0;
			HEX3Atmp_226387 = 0;
			LOC165 = 0;
			LOC165 = sonslen_189185(t);
			HEX3Atmp_226387 = (NI32)(LOC165 - 1);
			res_226389 = 0;
			while (1) {
				NimStringDesc* LOC167;
				if (!(res_226389 <= HEX3Atmp_226387)) goto LA166;
				i_226242 = res_226389;
				LOC167 = 0;
				LOC167 = typetostring_223020((*t).Sons->data[i_226242], ((NU8) 0));
				result = resizeString(result, LOC167->Sup.len + 0);
appendString(result, LOC167);
				{
					NI LOC170;
					LOC170 = 0;
					LOC170 = sonslen_189185(t);
					if (!(i_226242 < (NI32)(LOC170 - 1))) goto LA171;
					result = resizeString(result, 2);
appendString(result, ((NimStringDesc*) &TMP1929));
				}
				LA171: ;
				res_226389 += 1;
			} LA166: ;
		}
		LA151: ;
		result = addChar(result, 93);
	}
	break;
	case ((NU8) 21):
	case ((NU8) 22):
	case ((NU8) 23):
	case ((NU8) 47):
	case ((NU8) 46):
	{
		result = copyString(typetostr_225631[((*t).Kind)- 0]);
		{
			NI LOC176;
			NI i_226256;
			NI HEX3Atmp_226391;
			NI LOC179;
			NI res_226393;
			LOC176 = 0;
			LOC176 = len_192569(t);
			if (!(2 <= LOC176)) goto LA177;
			result = setLengthStr(result, (NI32)(result->Sup.len - 1));
			result = addChar(result, 91);
			i_226256 = 0;
			HEX3Atmp_226391 = 0;
			LOC179 = 0;
			LOC179 = sonslen_189185(t);
			HEX3Atmp_226391 = (NI32)(LOC179 - 1);
			res_226393 = 0;
			while (1) {
				NimStringDesc* LOC181;
				if (!(res_226393 <= HEX3Atmp_226391)) goto LA180;
				i_226256 = res_226393;
				LOC181 = 0;
				LOC181 = typetostring_223020((*t).Sons->data[i_226256], ((NU8) 0));
				result = resizeString(result, LOC181->Sup.len + 0);
appendString(result, LOC181);
				{
					NI LOC184;
					LOC184 = 0;
					LOC184 = sonslen_189185(t);
					if (!(i_226256 < (NI32)(LOC184 - 1))) goto LA185;
					result = resizeString(result, 2);
appendString(result, ((NimStringDesc*) &TMP1929));
				}
				LA185: ;
				res_226393 += 1;
			} LA180: ;
			result = addChar(result, 93);
		}
		goto LA174;
		LA177: ;
		{
			NimStringDesc* LOC188;
			LOC188 = 0;
			LOC188 = typetostring_223020((*t).Sons->data[0], ((NU8) 0));
			result = resizeString(result, LOC188->Sup.len + 0);
appendString(result, LOC188);
		}
		LA174: ;
	}
	break;
	case ((NU8) 20):
	{
		NimStringDesc* LOC190;
		NimStringDesc* LOC191;
		LOC190 = 0;
		LOC191 = 0;
		LOC191 = rangetostr_225466((*t).N);
		LOC190 = rawNewString(LOC191->Sup.len + 6);
appendString(LOC190, ((NimStringDesc*) &TMP1963));
appendString(LOC190, LOC191);
		result = LOC190;
		{
			NimStringDesc* LOC196;
			NimStringDesc* LOC197;
			if (!!((prefer == ((NU8) 2)))) goto LA194;
			LOC196 = 0;
			LOC197 = 0;
			LOC197 = typetostring_223020((*t).Sons->data[0], ((NU8) 0));
			LOC196 = rawNewString(LOC197->Sup.len + 2);
appendString(LOC196, ((NimStringDesc*) &TMP1936));
appendString(LOC196, LOC197);
appendString(LOC196, ((NimStringDesc*) &TMP1865));
			result = resizeString(result, LOC196->Sup.len + 0);
appendString(result, LOC196);
		}
		LA194: ;
	}
	break;
	case ((NU8) 25):
	{
		NI i_226292;
		NI HEX3Atmp_226395;
		NI LOC204;
		NI res_226397;
		NimStringDesc* prag;
		{
			if (!(((*t).Flags &(1<<((((NU8) 14))&31)))!=0)) goto LA201;
			result = copyString(((NimStringDesc*) &TMP1964));
		}
		goto LA199;
		LA201: ;
		{
			result = copyString(((NimStringDesc*) &TMP1965));
		}
		LA199: ;
		i_226292 = 0;
		HEX3Atmp_226395 = 0;
		LOC204 = 0;
		LOC204 = sonslen_189185(t);
		HEX3Atmp_226395 = (NI32)(LOC204 - 1);
		res_226397 = 1;
		while (1) {
			NimStringDesc* LOC206;
			if (!(res_226397 <= HEX3Atmp_226395)) goto LA205;
			i_226292 = res_226397;
			LOC206 = 0;
			LOC206 = typetostring_223020((*t).Sons->data[i_226292], ((NU8) 0));
			result = resizeString(result, LOC206->Sup.len + 0);
appendString(result, LOC206);
			{
				NI LOC209;
				LOC209 = 0;
				LOC209 = sonslen_189185(t);
				if (!(i_226292 < (NI32)(LOC209 - 1))) goto LA210;
				result = resizeString(result, 2);
appendString(result, ((NimStringDesc*) &TMP1929));
			}
			LA210: ;
			res_226397 += 1;
		} LA205: ;
		result = addChar(result, 41);
		{
			NimStringDesc* LOC216;
			NimStringDesc* LOC217;
			if (!!(((*t).Sons->data[0] == NIM_NIL))) goto LA214;
			LOC216 = 0;
			LOC217 = 0;
			LOC217 = typetostring_223020((*t).Sons->data[0], ((NU8) 0));
			LOC216 = rawNewString(LOC217->Sup.len + 2);
appendString(LOC216, ((NimStringDesc*) &TMP1962));
appendString(LOC216, LOC217);
			result = resizeString(result, LOC216->Sup.len + 0);
appendString(result, LOC216);
		}
		LA214: ;
		prag = 0;
		{
			if (!!(((*t).Callconv == ((NU8) 0)))) goto LA220;
			prag = copyString(callingconvtostr_188015[((*t).Callconv)- 0]);
		}
		goto LA218;
		LA220: ;
		{
			prag = copyString(((NimStringDesc*) &TMP1863));
		}
		LA218: ;
		{
			if (!(((*t).Flags &(1<<((((NU8) 1))&31)))!=0)) goto LA225;
			addsep_89827(&prag, ((NimStringDesc*) &TMP1929), 0);
			prag = resizeString(prag, 12);
appendString(prag, ((NimStringDesc*) &TMP1976));
		}
		LA225: ;
		{
			if (!(((*t).Flags &(1<<((((NU8) 7))&31)))!=0)) goto LA229;
			addsep_89827(&prag, ((NimStringDesc*) &TMP1929), 0);
			prag = resizeString(prag, 6);
appendString(prag, ((NimStringDesc*) &TMP1977));
		}
		LA229: ;
		{
			NimStringDesc* LOC235;
			if (!!((prag->Sup.len == 0))) goto LA233;
			LOC235 = 0;
			LOC235 = rawNewString(prag->Sup.len + 4);
appendString(LOC235, ((NimStringDesc*) &TMP1978));
appendString(LOC235, prag);
appendString(LOC235, ((NimStringDesc*) &TMP1979));
			result = resizeString(result, LOC235->Sup.len + 0);
appendString(result, LOC235);
		}
		LA233: ;
	}
	break;
	case ((NU8) 48):
	case ((NU8) 49):
	{
		NimStringDesc* LOC237;
		LOC237 = 0;
		LOC237 = typetostring_223020((*t).Sons->data[0], ((NU8) 0));
		result = nsuFormatSingleElem(typetostr_225631[((*t).Kind)- 0], LOC237);
	}
	break;
	default:
	{
		result = copyString(typetostr_225631[((*t).Kind)- 0]);
	}
	break;
	}
	{
		NimStringDesc* LOC243;
		if (!(((*t).Flags &(1<<((((NU8) 15))&31)))!=0)) goto LA241;
		LOC243 = 0;
		LOC243 = rawNewString(result->Sup.len + 7);
appendString(LOC243, ((NimStringDesc*) &TMP1980));
appendString(LOC243, result);
		result = LOC243;
	}
	LA241: ;
	{
		if (!(((*t).Flags &(1<<((((NU8) 16))&31)))!=0)) goto LA246;
		result = resizeString(result, 8);
appendString(result, ((NimStringDesc*) &TMP1981));
	}
	LA246: ;
	BeforeRet: ;
	return result;
}

N_NIMCALL(NI64, getordvalue_223150)(tnode188803* n) {
	NI64 result;
	result = 0;
	switch ((*n).Kind) {
	case ((NU8) 5) ... ((NU8) 10):
	{
		result = (*n).kindU.S1.Intval;
	}
	break;
	case ((NU8) 23):
	{
		result = 0;
	}
	break;
	case ((NU8) 58):
	{
		result = getordvalue_223150((*n).kindU.S6.Sons->data[1]);
	}
	break;
	default:
	{
		localerror_165571((*n).Info, ((NU16) 74), ((NimStringDesc*) &TMP1863));
		result = 0;
	}
	break;
	}
	return result;
}

static N_INLINE(ttype188837*, lastson_189193)(ttype188837* n) {
	ttype188837* result;
	NI LOC1;
	result = 0;
	LOC1 = 0;
	LOC1 = sonslen_189185(n);
	result = (*n).Sons->data[(NI32)(LOC1 - 1)];
	return result;
}

N_NIMCALL(NI64, firstord_223002)(ttype188837* 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 = 0;
	}
	break;
	case ((NU8) 19):
	case ((NU8) 23):
	{
		result = firstord_223002((*t).Sons->data[0]);
	}
	break;
	case ((NU8) 16):
	case ((NU8) 4):
	{
		result = firstord_223002((*t).Sons->data[0]);
	}
	break;
	case ((NU8) 20):
	{
		result = getordvalue_223150((*(*t).N).kindU.S6.Sons->data[0]);
	}
	break;
	case ((NU8) 31):
	{
		{
			if (!(intsize_142590 == 4)) goto LA8;
			result = (-2147483647 -1);
		}
		goto LA6;
		LA8: ;
		{
			result = (IL64(-9223372036854775807) - IL64(1));
		}
		LA6: ;
	}
	break;
	case ((NU8) 32):
	{
		result = -128;
	}
	break;
	case ((NU8) 33):
	{
		result = -32768;
	}
	break;
	case ((NU8) 34):
	{
		result = (-2147483647 -1);
	}
	break;
	case ((NU8) 35):
	{
		result = (IL64(-9223372036854775807) - IL64(1));
	}
	break;
	case ((NU8) 40) ... ((NU8) 44):
	{
		result = 0;
	}
	break;
	case ((NU8) 14):
	{
		{
			NIM_BOOL LOC19;
			NI LOC20;
			LOC19 = 0;
			LOC20 = 0;
			LOC20 = sonslen_189185(t);
			LOC19 = (0 < LOC20);
			if (!(LOC19)) goto LA21;
			LOC19 = !(((*t).Sons->data[0] == NIM_NIL));
			LA21: ;
			if (!LOC19) goto LA22;
			result = firstord_223002((*t).Sons->data[0]);
		}
		goto LA17;
		LA22: ;
		{
			result = ((NI64) ((*(*(*(*t).N).kindU.S6.Sons->data[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):
	{
		ttype188837* LOC26;
		LOC26 = 0;
		LOC26 = lastson_189193(t);
		result = firstord_223002(LOC26);
	}
	break;
	default:
	{
		NimStringDesc* LOC28;
		LOC28 = 0;
		LOC28 = rawNewString(reprEnum((*t).Kind, (&NTI188240))->Sup.len + 24);
appendString(LOC28, ((NimStringDesc*) &TMP2497));
appendString(LOC28, reprEnum((*t).Kind, (&NTI188240)));
appendChar(LOC28, 41);
		internalerror_165606(LOC28);
		result = 0;
	}
	break;
	}
	return result;
}

N_NIMCALL(NI64, lastord_223006)(ttype188837* t) {
	NI64 result;
	result = 0;
	switch ((*t).Kind) {
	case ((NU8) 1):
	{
		result = 1;
	}
	break;
	case ((NU8) 2):
	{
		result = 255;
	}
	break;
	case ((NU8) 19):
	case ((NU8) 23):
	{
		result = lastord_223006((*t).Sons->data[0]);
	}
	break;
	case ((NU8) 16):
	case ((NU8) 4):
	{
		result = lastord_223006((*t).Sons->data[0]);
	}
	break;
	case ((NU8) 20):
	{
		result = getordvalue_223150((*(*t).N).kindU.S6.Sons->data[1]);
	}
	break;
	case ((NU8) 31):
	{
		{
			if (!(intsize_142590 == 4)) goto LA9;
			result = 2147483647;
		}
		goto LA7;
		LA9: ;
		{
			result = IL64(9223372036854775807);
		}
		LA7: ;
	}
	break;
	case ((NU8) 32):
	{
		result = 127;
	}
	break;
	case ((NU8) 33):
	{
		result = 32767;
	}
	break;
	case ((NU8) 34):
	{
		result = 2147483647;
	}
	break;
	case ((NU8) 35):
	{
		result = IL64(9223372036854775807);
	}
	break;
	case ((NU8) 40):
	{
		{
			if (!(intsize_142590 == 4)) goto LA19;
			result = IL64(4294967295);
		}
		goto LA17;
		LA19: ;
		{
			result = IL64(9223372036854775807);
		}
		LA17: ;
	}
	break;
	case ((NU8) 41):
	{
		result = 255;
	}
	break;
	case ((NU8) 42):
	{
		result = 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_189181((*t).N);
		result = ((NI64) ((*(*(*(*t).N).kindU.S6.Sons->data[(NI32)(LOC27 - 1)]).kindU.S4.Sym).Position));
	}
	break;
	case ((NU8) 11):
	case ((NU8) 13):
	case ((NU8) 46):
	case ((NU8) 47):
	case ((NU8) 8):
	case ((NU8) 61):
	{
		ttype188837* LOC29;
		LOC29 = 0;
		LOC29 = lastson_189193(t);
		result = lastord_223006(LOC29);
	}
	break;
	case ((NU8) 50):
	{
		result = 0;
	}
	break;
	default:
	{
		NimStringDesc* LOC32;
		LOC32 = 0;
		LOC32 = rawNewString(reprEnum((*t).Kind, (&NTI188240))->Sup.len + 23);
appendString(LOC32, ((NimStringDesc*) &TMP2498));
appendString(LOC32, reprEnum((*t).Kind, (&NTI188240)));
appendChar(LOC32, 41);
		internalerror_165606(LOC32);
		result = 0;
	}
	break;
	}
	return result;
}

N_NIMCALL(NI64, lengthord_223010)(ttype188837* t) {
	NI64 result;
	result = 0;
	switch ((*t).Kind) {
	case ((NU8) 35):
	case ((NU8) 34):
	case ((NU8) 31):
	{
		result = lastord_223006(t);
	}
	break;
	case ((NU8) 13):
	case ((NU8) 46):
	case ((NU8) 47):
	{
		result = lengthord_223010((*t).Sons->data[0]);
	}
	break;
	default:
	{
		NI64 LOC4;
		NI64 LOC5;
		LOC4 = 0;
		LOC4 = lastord_223006(t);
		LOC5 = 0;
		LOC5 = firstord_223002(t);
		result = (NI64)((NI64)(LOC4 - LOC5) + 1);
	}
	break;
	}
	return result;
}

N_NIMCALL(NIM_BOOL, isordinaltype_223071)(ttype188837* t) {
	NIM_BOOL result;
	NIM_BOOL LOC1;
	NIM_BOOL LOC3;
	result = 0;
	LOC1 = 0;
	LOC1 = ((*t).Kind == ((NU8) 2) || (*t).Kind >= ((NU8) 31) && (*t).Kind <= ((NU8) 35) || (*t).Kind >= ((NU8) 41) && (*t).Kind <= ((NU8) 43) || (*t).Kind == ((NU8) 1) || (*t).Kind == ((NU8) 14));
	if (LOC1) goto LA2;
	LOC3 = 0;
	LOC3 = ((*t).Kind == ((NU8) 20) || (*t).Kind == ((NU8) 15) || (*t).Kind == ((NU8) 46) || (*t).Kind == ((NU8) 47) || (*t).Kind == ((NU8) 11));
	if (!(LOC3)) goto LA4;
	LOC3 = isordinaltype_223071((*t).Sons->data[0]);
	LA4: ;
	LOC1 = LOC3;
	LA2: ;
	result = LOC1;
	return result;
}

N_NIMCALL(void, initsametypeclosure_227872)(tsametypeclosure227852* Result) {
}

N_NIMCALL(NIM_BOOL, isgenericalias_229482)(ttype188837* t) {
	NIM_BOOL result;
	NIM_BOOL LOC1;
	ttype188837* LOC3;
	result = 0;
	LOC1 = 0;
	LOC1 = ((*t).Kind == ((NU8) 11));
	if (!(LOC1)) goto LA2;
	LOC3 = 0;
	LOC3 = lastson_189193(t);
	LOC1 = ((*LOC3).Kind == ((NU8) 11));
	LA2: ;
	result = LOC1;
	goto BeforeRet;
	BeforeRet: ;
	return result;
}

N_NIMCALL(ttype188837*, skipgenericalias_229506)(ttype188837* t) {
	ttype188837* result;
	result = 0;
	{
		NIM_BOOL LOC3;
		LOC3 = 0;
		LOC3 = isgenericalias_229482(t);
		if (!LOC3) goto LA4;
		result = lastson_189193(t);
	}
	goto LA1;
	LA4: ;
	{
		result = t;
	}
	LA1: ;
	goto BeforeRet;
	BeforeRet: ;
	return result;
}

static N_INLINE(NIM_BOOL, sameflags_229524)(ttype188837* a, ttype188837* b) {
	NIM_BOOL result;
	result = 0;
	result = ((114688 & (*a).Flags) == (114688 & (*b).Flags));
	return result;
}

static N_INLINE(NI, find_227910)(TY227866* a_227915, NI a_227915Len0, TY227866 item_227917) {
	NI result;
	TY227866 i_227957;
	NI i_227994;
	result = 0;
	memset((void*)&i_227957, 0, sizeof(i_227957));
	i_227994 = 0;
	while (1) {
		if (!(i_227994 < a_227915Len0)) goto LA1;
		i_227957 = a_227915[i_227994];
		{
			NIM_BOOL LOC4;
			LOC4 = 0;
			LOC4 = HEX3DHEX3D_227959(i_227957, item_227917);
			if (!LOC4) goto LA5;
			goto BeforeRet;
		}
		LA5: ;
		result += 1;
		i_227994 += 1;
	} LA1: ;
	result = -1;
	BeforeRet: ;
	return result;
}

static N_INLINE(NIM_BOOL, contains_227898)(TY227866* a_227904, NI a_227904Len0, TY227866 item_227907) {
	NIM_BOOL result;
	NI LOC1;
	result = 0;
	LOC1 = 0;
	LOC1 = find_227910(a_227904, a_227904Len0, item_227907);
	result = (0 <= LOC1);
	goto BeforeRet;
	BeforeRet: ;
	return result;
}
N_NIMCALL(void, TMP2524)(void* p, NI op) {
	TY227865* a;
	NI LOC1;
	a = (TY227865*)p;
	LOC1 = 0;
	for (LOC1 = 0; LOC1 < a->Sup.len; LOC1++) {
	}
}

N_NIMCALL(NIM_BOOL, containsorincl_227877)(tsametypeclosure227852* c, ttype188837* a, ttype188837* b) {
	NIM_BOOL result;
	NIM_BOOL LOC1;
	TY227866 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_227898((*c).S->data, (*c).S->Sup.len, LOC3);
	LA2: ;
	result = LOC1;
	{
		TY227866 LOC12;
		if (!!(result)) goto LA6;
		{
			if (!(*c).S == 0) goto LA10;
			unsureAsgnRef((void**) &(*c).S, (TY227865*) newSeq((&NTI227865), 0));
		}
		LA10: ;
		LOC12.Field0 = (*a).Sup.Id;
		LOC12.Field1 = (*b).Sup.Id;
		(*c).S = (TY227865*) incrSeq(&((*c).S)->Sup, sizeof(TY227866));
		(*c).S->data[(*c).S->Sup.len-1] = LOC12;
	}
	LA6: ;
	return result;
}

N_NIMCALL(NIM_BOOL, sametypeornilaux_228057)(ttype188837* a, ttype188837* b, tsametypeclosure227852* 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_228050(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)), (NI32)((*a).Sup.len * 1));
	LOC11 = (LOC13 == ((NI32) 0));
	LA12: ;
	result = LOC11;
	goto BeforeRet;
	BeforeRet: ;
	return result;
}

N_NIMCALL(NIM_BOOL, sameobjecttree_229174)(tnode188803* a, tnode188803* b, tsametypeclosure227852* c) {
	NIM_BOOL result;
	result = 0;
	{
		if (!(a == b)) goto LA3;
		result = NIM_TRUE;
	}
	goto LA1;
	LA3: ;
	{
		NIM_BOOL LOC6;
		NIM_BOOL LOC7;
		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;
		{
			NIM_BOOL LOC14;
			LOC14 = 0;
			LOC14 = sametypeornilaux_228057((*a).Typ, (*b).Typ, c);
			if (!LOC14) goto LA15;
			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 LOC26;
					NI LOC27;
					NI i_229392;
					NI HEX3Atmp_229421;
					NI LOC30;
					NI res_229423;
					LOC26 = 0;
					LOC26 = sonslen_189181(a);
					LOC27 = 0;
					LOC27 = sonslen_189181(b);
					if (!(LOC26 == LOC27)) goto LA28;
					i_229392 = 0;
					HEX3Atmp_229421 = 0;
					LOC30 = 0;
					LOC30 = sonslen_189181(a);
					HEX3Atmp_229421 = (NI32)(LOC30 - 1);
					res_229423 = 0;
					while (1) {
						if (!(res_229423 <= HEX3Atmp_229421)) goto LA31;
						i_229392 = res_229423;
						{
							NIM_BOOL LOC34;
							LOC34 = 0;
							LOC34 = sameobjecttree_229174((*a).kindU.S6.Sons->data[i_229392], (*b).kindU.S6.Sons->data[i_229392], c);
							if (!!(LOC34)) goto LA35;
							goto BeforeRet;
						}
						LA35: ;
						res_229423 += 1;
					} LA31: ;
					result = NIM_TRUE;
				}
				LA28: ;
			}
			break;
			}
		}
		LA15: ;
	}
	goto LA1;
	LA10: ;
	LA1: ;
	BeforeRet: ;
	return result;
}

N_NIMCALL(NIM_BOOL, sameobjectstructures_229428)(ttype188837* a, ttype188837* b, tsametypeclosure227852* c) {
	NIM_BOOL result;
	NI i_229447;
	NI HEX3Atmp_229448;
	NI LOC7;
	NI res_229450;
	result = 0;
	{
		NI LOC3;
		NI LOC4;
		LOC3 = 0;
		LOC3 = sonslen_189185(a);
		LOC4 = 0;
		LOC4 = sonslen_189185(b);
		if (!!((LOC3 == LOC4))) goto LA5;
		goto BeforeRet;
	}
	LA5: ;
	i_229447 = 0;
	HEX3Atmp_229448 = 0;
	LOC7 = 0;
	LOC7 = sonslen_189185(a);
	HEX3Atmp_229448 = (NI32)(LOC7 - 1);
	res_229450 = 0;
	while (1) {
		if (!(res_229450 <= HEX3Atmp_229448)) goto LA8;
		i_229447 = res_229450;
		{
			NIM_BOOL LOC11;
			LOC11 = 0;
			LOC11 = sametypeornilaux_228057((*a).Sons->data[i_229447], (*b).Sons->data[i_229447], c);
			if (!!(LOC11)) goto LA12;
			goto BeforeRet;
		}
		LA12: ;
		res_229450 += 1;
	} LA8: ;
	{
		NIM_BOOL LOC16;
		LOC16 = 0;
		LOC16 = sameobjecttree_229174((*a).N, (*b).N, c);
		if (!!(LOC16)) goto LA17;
		goto BeforeRet;
	}
	LA17: ;
	result = NIM_TRUE;
	BeforeRet: ;
	return result;
}

N_NIMCALL(NIM_BOOL, sametuple_228866)(ttype188837* a, ttype188837* b, tsametypeclosure227852* c) {
	NIM_BOOL result;
	result = 0;
	{
		NI LOC3;
		NI LOC4;
		NI i_228885;
		NI HEX3Atmp_229067;
		NI LOC7;
		NI res_229069;
		LOC3 = 0;
		LOC3 = sonslen_189185(a);
		LOC4 = 0;
		LOC4 = sonslen_189185(b);
		if (!(LOC3 == LOC4)) goto LA5;
		result = NIM_TRUE;
		i_228885 = 0;
		HEX3Atmp_229067 = 0;
		LOC7 = 0;
		LOC7 = sonslen_189185(a);
		HEX3Atmp_229067 = (NI32)(LOC7 - 1);
		res_229069 = 0;
		while (1) {
			ttype188837* x;
			ttype188837* y;
			if (!(res_229069 <= HEX3Atmp_229067)) goto LA8;
			i_228885 = res_229069;
			x = (*a).Sons->data[i_228885];
			y = (*b).Sons->data[i_228885];
			{
				if (!(((*c).Flags &(1<<((((NU8) 0))&7)))!=0)) goto LA11;
				x = skiptypes_192793(x, 1048576);
				y = skiptypes_192793(y, 1048576);
			}
			LA11: ;
			result = sametypeaux_228050(x, y, c);
			{
				if (!!(result)) goto LA15;
				goto BeforeRet;
			}
			LA15: ;
			res_229069 += 1;
		} LA8: ;
		{
			NIM_BOOL LOC19;
			NIM_BOOL LOC20;
			NI i_228962;
			NI HEX3Atmp_229071;
			NI LOC25;
			NI res_229073;
			LOC19 = 0;
			LOC20 = 0;
			LOC20 = !(((*a).N == NIM_NIL));
			if (!(LOC20)) goto LA21;
			LOC20 = !(((*b).N == NIM_NIL));
			LA21: ;
			LOC19 = LOC20;
			if (!(LOC19)) goto LA22;
			LOC19 = !((((*c).Flags &(1<<((((NU8) 0))&7)))!=0));
			LA22: ;
			if (!LOC19) goto LA23;
			i_228962 = 0;
			HEX3Atmp_229071 = 0;
			LOC25 = 0;
			LOC25 = sonslen_189181((*a).N);
			HEX3Atmp_229071 = (NI32)(LOC25 - 1);
			res_229073 = 0;
			while (1) {
				if (!(res_229073 <= HEX3Atmp_229071)) goto LA26;
				i_228962 = res_229073;
				{
					NIM_BOOL LOC29;
					tsym188833* x;
					tsym188833* y;
					LOC29 = 0;
					LOC29 = ((*(*(*a).N).kindU.S6.Sons->data[i_228962]).Kind == ((NU8) 3));
					if (!(LOC29)) goto LA30;
					LOC29 = ((*(*(*b).N).kindU.S6.Sons->data[i_228962]).Kind == ((NU8) 3));
					LA30: ;
					if (!LOC29) goto LA31;
					x = (*(*(*a).N).kindU.S6.Sons->data[i_228962]).kindU.S4.Sym;
					y = (*(*(*b).N).kindU.S6.Sons->data[i_228962]).kindU.S4.Sym;
					result = ((*(*x).Name).Sup.Id == (*(*y).Name).Sup.Id);
					{
						if (!!(result)) goto LA35;
						goto LA26;
					}
					LA35: ;
				}
				goto LA27;
				LA31: ;
				{
					internalerror_165591((*(*a).N).Info, ((NimStringDesc*) &TMP2525));
				}
				LA27: ;
				res_229073 += 1;
			} LA26: ;
		}
		LA23: ;
	}
	goto LA1;
	LA5: ;
	{
		result = NIM_FALSE;
	}
	LA1: ;
	BeforeRet: ;
	return result;
}

N_NIMCALL(NIM_BOOL, samechildrenaux_229455)(ttype188837* a, ttype188837* b, tsametypeclosure227852* c) {
	NIM_BOOL result;
	NI i_229474;
	NI HEX3Atmp_229475;
	NI LOC7;
	NI res_229477;
	result = 0;
	{
		NI LOC3;
		NI LOC4;
		LOC3 = 0;
		LOC3 = sonslen_189185(a);
		LOC4 = 0;
		LOC4 = sonslen_189185(b);
		if (!!((LOC3 == LOC4))) goto LA5;
		result = NIM_FALSE;
		goto BeforeRet;
	}
	LA5: ;
	result = NIM_TRUE;
	i_229474 = 0;
	HEX3Atmp_229475 = 0;
	LOC7 = 0;
	LOC7 = sonslen_189185(a);
	HEX3Atmp_229475 = (NI32)(LOC7 - 1);
	res_229477 = 0;
	while (1) {
		if (!(res_229477 <= HEX3Atmp_229475)) goto LA8;
		i_229474 = res_229477;
		result = sametypeornilaux_228057((*a).Sons->data[i_229474], (*b).Sons->data[i_229474], c);
		{
			if (!!(result)) goto LA11;
			goto BeforeRet;
		}
		LA11: ;
		res_229477 += 1;
	} LA8: ;
	BeforeRet: ;
	return result;
}

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

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

N_NIMCALL(NIM_BOOL, sameconstraints_228280)(tnode188803* a, tnode188803* b) {
	NIM_BOOL result;
	NI i_228313;
	NI HEX3Atmp_228342;
	NI LOC8;
	NI res_228344;
	result = 0;
	{
		NI LOC3;
		NI LOC4;
		NimStringDesc* LOC7;
		LOC3 = 0;
		LOC3 = len_189264(a);
		LOC4 = 0;
		LOC4 = len_189264(b);
		if (!!((LOC3 == LOC4))) goto LA5;
		LOC7 = 0;
		LOC7 = HEX24_165714(TMP2526);
		internalerror_165606(LOC7);
	}
	LA5: ;
	i_228313 = 0;
	HEX3Atmp_228342 = 0;
	LOC8 = 0;
	LOC8 = len_189264(a);
	HEX3Atmp_228342 = LOC8 - 1;
	res_228344 = 1;
	while (1) {
		if (!(res_228344 <= HEX3Atmp_228342)) goto LA9;
		i_228313 = res_228344;
		{
			tnode188803* LOC12;
			tnode188803* LOC13;
			NIM_BOOL LOC14;
			LOC12 = 0;
			LOC12 = HEX5BHEX5D_189694(a, i_228313);
			LOC13 = 0;
			LOC13 = HEX5BHEX5D_189694(b, i_228313);
			LOC14 = 0;
			LOC14 = exprstructuralequivalent_221150((*(*LOC12).kindU.S4.Sym).Constraint, (*(*LOC13).kindU.S4.Sym).Constraint);
			if (!!(LOC14)) goto LA15;
			result = NIM_FALSE;
			goto BeforeRet;
		}
		LA15: ;
		res_228344 += 1;
	} LA9: ;
	result = NIM_TRUE;
	goto BeforeRet;
	BeforeRet: ;
	return result;
}

N_NIMCALL(NIM_BOOL, sametypeaux_228050)(ttype188837* x, ttype188837* y, tsametypeclosure227852* c) {
	NIM_BOOL result;
	ttype188837* a;
	ttype188837* b;
	result = 0;
	{
		if (!(x == y)) goto LA3;
		result = NIM_TRUE;
		goto BeforeRet;
	}
	LA3: ;
	a = skiptypes_192793(x, 2048);
	b = skiptypes_192793(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 LA11;
				a = (*a).Sons->data[0];
			} LA11: ;
			while (1) {
				if (!((*b).Kind == ((NU8) 13))) goto LA12;
				b = (*b).Sons->data[0];
			} LA12: ;
			{
				if (!!(((*a).Kind == (*b).Kind))) goto LA15;
				result = NIM_FALSE;
				goto BeforeRet;
			}
			LA15: ;
		}
		break;
		case ((NU8) 2):
		{
			while (1) {
				if (!((*a).Kind == ((NU8) 13))) goto LA18;
				a = (*a).Sons->data[0];
			} LA18: ;
			{
				if (!!(((*a).Kind == (*b).Kind))) goto LA21;
				result = NIM_FALSE;
				goto BeforeRet;
			}
			LA21: ;
		}
		break;
		}
	}
	LA7: ;
	{
		ttype188837* lhs;
		ttype188837* rhs;
		NI i_230101;
		NI HEX3Atmp_230512;
		NI LOC35;
		NI res_230514;
		if (!((*x).Kind == ((NU8) 11))) goto LA25;
		lhs = skipgenericalias_229506(x);
		rhs = skipgenericalias_229506(y);
		{
			NIM_BOOL LOC29;
			ttype188837* LOC31;
			ttype188837* LOC32;
			LOC29 = 0;
			LOC29 = !(((*rhs).Kind == ((NU8) 11)));
			if (LOC29) goto LA30;
			LOC31 = 0;
			LOC31 = base_223029(lhs);
			LOC32 = 0;
			LOC32 = base_223029(rhs);
			LOC29 = !((LOC31 == LOC32));
			LA30: ;
			if (!LOC29) goto LA33;
			result = NIM_FALSE;
			goto BeforeRet;
		}
		LA33: ;
		i_230101 = 0;
		HEX3Atmp_230512 = 0;
		LOC35 = 0;
		LOC35 = len_192569(lhs);
		HEX3Atmp_230512 = (NI32)(LOC35 - 2);
		res_230514 = 1;
		while (1) {
			ttype188837* ff;
			ttype188837* aa;
			if (!(res_230514 <= HEX3Atmp_230512)) goto LA36;
			i_230101 = res_230514;
			ff = (*rhs).Sons->data[i_230101];
			aa = (*lhs).Sons->data[i_230101];
			{
				NIM_BOOL LOC39;
				LOC39 = 0;
				LOC39 = sametypeaux_228050(ff, aa, c);
				if (!!(LOC39)) goto LA40;
				result = NIM_FALSE;
				goto BeforeRet;
			}
			LA40: ;
			res_230514 += 1;
		} LA36: ;
		result = NIM_TRUE;
		goto BeforeRet;
	}
	LA25: ;
	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_229524(a, b);
	}
	break;
	case ((NU8) 59):
	case ((NU8) 60):
	{
		NIM_BOOL LOC44;
		LOC44 = 0;
		LOC44 = exprstructuralequivalent_221150((*a).N, (*b).N);
		if (!(LOC44)) goto LA45;
		LOC44 = sameflags_229524(a, b);
		LA45: ;
		result = LOC44;
	}
	break;
	case ((NU8) 17):
	{
		{
			if (!!(((((*a).Flags | (*b).Flags) &(1<<((((NU8) 8))&31)))!=0))) goto LA49;
			result = ((*a).Sup.Id == (*b).Sup.Id);
		}
		goto LA47;
		LA49: ;
		{
			{
				NIM_BOOL LOC54;
				NIM_BOOL LOC68;
				LOC54 = 0;
				LOC54 = ((((*a).Flags & (*b).Flags) &(1<<((((NU8) 8))&31)))!=0);
				if (!(LOC54)) goto LA55;
				LOC54 = ((*(*a).Sym).Sup.Id == (*(*b).Sym).Sup.Id);
				LA55: ;
				if (!LOC54) goto LA56;
				{
					if (!((*c).Reccheck < 3)) goto LA60;
					(*c).Reccheck += 1;
				}
				goto LA58;
				LA60: ;
				{
					{
						NIM_BOOL LOC65;
						LOC65 = 0;
						LOC65 = containsorincl_227877(c, a, b);
						if (!LOC65) goto LA66;
						result = NIM_TRUE;
						goto BeforeRet;
					}
					LA66: ;
				}
				LA58: ;
				LOC68 = 0;
				LOC68 = sameobjectstructures_229428(a, b, c);
				if (!(LOC68)) goto LA69;
				LOC68 = sameflags_229524(a, b);
				LA69: ;
				result = LOC68;
			}
			LA56: ;
		}
		LA47: ;
	}
	break;
	case ((NU8) 13):
	{
		{
			if (!((*c).Reccheck < 3)) goto LA73;
			(*c).Reccheck += 1;
		}
		goto LA71;
		LA73: ;
		{
			{
				NIM_BOOL LOC78;
				LOC78 = 0;
				LOC78 = containsorincl_227877(c, a, b);
				if (!LOC78) goto LA79;
				result = NIM_TRUE;
				goto BeforeRet;
			}
			LA79: ;
		}
		LA71: ;
		{
			if (!((*c).Cmp == ((NU8) 0))) goto LA83;
			{
				NIM_BOOL LOC87;
				LOC87 = 0;
				LOC87 = sameflags_229524(a, b);
				if (!LOC87) goto LA88;
				{
					if (!!(((((*a).Flags | (*b).Flags) &(1<<((((NU8) 8))&31)))!=0))) goto LA92;
					result = ((*a).Sup.Id == (*b).Sup.Id);
				}
				goto LA90;
				LA92: ;
				{
					{
						NIM_BOOL LOC97;
						LOC97 = 0;
						LOC97 = ((((*a).Flags & (*b).Flags) &(1<<((((NU8) 8))&31)))!=0);
						if (!(LOC97)) goto LA98;
						LOC97 = ((*(*a).Sym).Sup.Id == (*(*b).Sym).Sup.Id);
						LA98: ;
						if (!LOC97) goto LA99;
						result = sametypeaux_228050((*a).Sons->data[0], (*b).Sons->data[0], c);
					}
					LA99: ;
				}
				LA90: ;
			}
			LA88: ;
		}
		goto LA81;
		LA83: ;
		{
			NIM_BOOL LOC102;
			LOC102 = 0;
			LOC102 = sametypeaux_228050((*a).Sons->data[0], (*b).Sons->data[0], c);
			if (!(LOC102)) goto LA103;
			LOC102 = sameflags_229524(a, b);
			LA103: ;
			result = LOC102;
		}
		LA81: ;
	}
	break;
	case ((NU8) 14):
	case ((NU8) 30):
	case ((NU8) 50):
	{
		NIM_BOOL LOC105;
		LOC105 = 0;
		LOC105 = ((*a).Sup.Id == (*b).Sup.Id);
		if (!(LOC105)) goto LA106;
		LOC105 = sameflags_229524(a, b);
		LA106: ;
		result = LOC105;
	}
	break;
	case ((NU8) 18):
	{
		NIM_BOOL LOC118;
		{
			if (!((*c).Reccheck < 3)) goto LA110;
			(*c).Reccheck += 1;
		}
		goto LA108;
		LA110: ;
		{
			{
				NIM_BOOL LOC115;
				LOC115 = 0;
				LOC115 = containsorincl_227877(c, a, b);
				if (!LOC115) goto LA116;
				result = NIM_TRUE;
				goto BeforeRet;
			}
			LA116: ;
		}
		LA108: ;
		LOC118 = 0;
		LOC118 = sametuple_228866(a, b, c);
		if (!(LOC118)) goto LA119;
		LOC118 = sameflags_229524(a, b);
		LA119: ;
		result = LOC118;
	}
	break;
	case ((NU8) 8):
	{
		{
			if (!((*c).Cmp == ((NU8) 1))) goto LA123;
			result = NIM_FALSE;
		}
		goto LA121;
		LA123: ;
		{
			NIM_BOOL LOC138;
			if (!(((*c).Flags &(1<<((((NU8) 2))&7)))!=0)) goto LA126;
			{
				if (!((*c).Reccheck < 3)) goto LA130;
				(*c).Reccheck += 1;
			}
			goto LA128;
			LA130: ;
			{
				{
					NIM_BOOL LOC135;
					LOC135 = 0;
					LOC135 = containsorincl_227877(c, a, b);
					if (!LOC135) goto LA136;
					result = NIM_TRUE;
					goto BeforeRet;
				}
				LA136: ;
			}
			LA128: ;
			LOC138 = 0;
			LOC138 = samechildrenaux_229455(x, y, c);
			if (!(LOC138)) goto LA139;
			LOC138 = sameflags_229524(a, b);
			LA139: ;
			result = LOC138;
		}
		goto LA121;
		LA126: ;
		{
			result = sameflags_229524(a, b);
		}
		LA121: ;
	}
	break;
	case ((NU8) 12):
	{
		NIM_BOOL LOC142;
		LOC142 = 0;
		LOC142 = samechildrenaux_229455(a, b, c);
		if (!(LOC142)) goto LA143;
		LOC142 = sameflags_229524(a, b);
		LA143: ;
		result = LOC142;
		{
			NIM_BOOL LOC146;
			LOC146 = 0;
			LOC146 = result;
			if (!(LOC146)) goto LA147;
			LOC146 = (((*c).Flags &(1<<((((NU8) 3))&7)))!=0);
			LA147: ;
			if (!LOC146) goto LA148;
			result = ((*(*a).Sym).Position == (*(*b).Sym).Position);
		}
		LA148: ;
	}
	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 LOC167;
		{
			if (!((*c).Reccheck < 3)) goto LA153;
			(*c).Reccheck += 1;
		}
		goto LA151;
		LA153: ;
		{
			{
				NIM_BOOL LOC158;
				LOC158 = 0;
				LOC158 = containsorincl_227877(c, a, b);
				if (!LOC158) goto LA159;
				result = NIM_TRUE;
				goto BeforeRet;
			}
			LA159: ;
		}
		LA151: ;
		{
			NIM_BOOL LOC163;
			LOC163 = 0;
			LOC163 = ((*a).Kind == ((NU8) 52));
			if (!(LOC163)) goto LA164;
			LOC163 = !(((*a).N == NIM_NIL));
			LA164: ;
			if (!LOC163) goto LA165;
			result = ((*a).N == (*b).N);
			goto BeforeRet;
		}
		LA165: ;
		LOC167 = 0;
		LOC167 = samechildrenaux_229455(a, b, c);
		if (!(LOC167)) goto LA168;
		LOC167 = sameflags_229524(a, b);
		LA168: ;
		result = LOC167;
		{
			NIM_BOOL LOC171;
			NIM_BOOL LOC175;
			NIM_BOOL LOC176;
			NIM_BOOL LOC179;
			LOC171 = 0;
			LOC171 = result;
			if (!(LOC171)) goto LA172;
			LOC171 = ((*a).Kind == ((NU8) 25));
			LA172: ;
			if (!LOC171) goto LA173;
			LOC175 = 0;
			LOC176 = 0;
			LOC176 = (((*c).Flags &(1<<((((NU8) 1))&7)))!=0);
			if (LOC176) goto LA177;
			LOC176 = ((*a).Callconv == (*b).Callconv);
			LA177: ;
			LOC175 = LOC176;
			if (!(LOC175)) goto LA178;
			LOC179 = 0;
			LOC179 = !((((*c).Flags &(1<<((((NU8) 4))&7)))!=0));
			if (LOC179) goto LA180;
			LOC179 = sameconstraints_228280((*a).N, (*b).N);
			LA180: ;
			LOC175 = LOC179;
			LA178: ;
			result = LOC175;
		}
		LA173: ;
	}
	break;
	case ((NU8) 20):
	{
		NIM_BOOL LOC192;
		NIM_BOOL LOC193;
		{
			if (!((*c).Reccheck < 3)) goto LA184;
			(*c).Reccheck += 1;
		}
		goto LA182;
		LA184: ;
		{
			{
				NIM_BOOL LOC189;
				LOC189 = 0;
				LOC189 = containsorincl_227877(c, a, b);
				if (!LOC189) goto LA190;
				result = NIM_TRUE;
				goto BeforeRet;
			}
			LA190: ;
		}
		LA182: ;
		LOC192 = 0;
		LOC193 = 0;
		LOC193 = sametypeornilaux_228057((*a).Sons->data[0], (*b).Sons->data[0], c);
		if (!(LOC193)) goto LA194;
		LOC193 = samevalue_197271((*(*a).N).kindU.S6.Sons->data[0], (*(*b).N).kindU.S6.Sons->data[0]);
		LA194: ;
		LOC192 = LOC193;
		if (!(LOC192)) goto LA195;
		LOC192 = samevalue_197271((*(*a).N).kindU.S6.Sons->data[1], (*(*b).N).kindU.S6.Sons->data[1]);
		LA195: ;
		result = LOC192;
	}
	break;
	case ((NU8) 11):
	{
	}
	break;
	case ((NU8) 0):
	{
		result = NIM_FALSE;
	}
	break;
	}
	BeforeRet: ;
	return result;
}

N_NIMCALL(NIM_BOOL, sametype_228116)(ttype188837* a, ttype188837* b, NU8 flags) {
	NIM_BOOL result;
	tsametypeclosure227852 c;
	result = 0;
	chckNil((void*)&c);
	memset((void*)&c, 0, sizeof(c));
	initsametypeclosure_227872(&c);
	c.Flags = flags;
	result = sametypeaux_228050(a, b, &c);
	return result;
}

N_NIMCALL(NIM_BOOL, sameobjecttypes_229091)(ttype188837* a, ttype188837* 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;
			tsametypeclosure227852 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;
			chckNil((void*)&c);
			memset((void*)&c, 0, sizeof(c));
			initsametypeclosure_227872(&c);
			result = sametypeaux_228050(a, b, &c);
		}
		LA10: ;
	}
	LA1: ;
	return result;
}

N_NIMCALL(NIM_BOOL, comparetypes_230547)(ttype188837* x, ttype188837* y, NU8 cmp, NU8 flags) {
	NIM_BOOL result;
	tsametypeclosure227852 c;
	result = 0;
	chckNil((void*)&c);
	memset((void*)&c, 0, sizeof(c));
	initsametypeclosure_227872(&c);
	c.Cmp = cmp;
	c.Flags = flags;
	result = sametypeaux_228050(x, y, &c);
	return result;
}

N_NIMCALL(NIM_BOOL, iterovernode_224083)(tintset185047* marker, tnode188803* n, ttypeiter223034 iter, TNimObject* closure) {
	NIM_BOOL result;
	result = 0;
	{
		if (!!((n == NIM_NIL))) goto LA3;
		switch ((*n).Kind) {
		case ((NU8) 0) ... ((NU8) 23):
		{
			result = iterovertypeaux_224075(marker, (*n).Typ, iter, closure);
		}
		break;
		default:
		{
			NI i_224120;
			NI HEX3Atmp_224135;
			NI LOC7;
			NI res_224137;
			i_224120 = 0;
			HEX3Atmp_224135 = 0;
			LOC7 = 0;
			LOC7 = sonslen_189181(n);
			HEX3Atmp_224135 = (NI32)(LOC7 - 1);
			res_224137 = 0;
			while (1) {
				if (!(res_224137 <= HEX3Atmp_224135)) goto LA8;
				i_224120 = res_224137;
				result = iterovernode_224083(marker, (*n).kindU.S6.Sons->data[i_224120], iter, closure);
				{
					if (!result) goto LA11;
					goto BeforeRet;
				}
				LA11: ;
				res_224137 += 1;
			} LA8: ;
		}
		break;
		}
	}
	LA3: ;
	BeforeRet: ;
	return result;
}

N_NIMCALL(NIM_BOOL, iterovertypeaux_224075)(tintset185047* marker, ttype188837* t, ttypeiter223034 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_185888(marker, (*t).Sup.Id);
		if (!!(LOC11)) goto LA12;
		switch ((*t).Kind) {
		case ((NU8) 11):
		case ((NU8) 10):
		{
			ttype188837* LOC15;
			LOC15 = 0;
			LOC15 = lastson_189193(t);
			result = iterovertypeaux_224075(marker, LOC15, iter, closure);
		}
		break;
		default:
		{
			NI i_224179;
			NI HEX3Atmp_224197;
			NI LOC17;
			NI res_224199;
			i_224179 = 0;
			HEX3Atmp_224197 = 0;
			LOC17 = 0;
			LOC17 = sonslen_189185(t);
			HEX3Atmp_224197 = (NI32)(LOC17 - 1);
			res_224199 = 0;
			while (1) {
				if (!(res_224199 <= HEX3Atmp_224197)) goto LA18;
				i_224179 = res_224199;
				result = iterovertypeaux_224075(marker, (*t).Sons->data[i_224179], iter, closure);
				{
					if (!result) goto LA21;
					goto BeforeRet;
				}
				LA21: ;
				res_224199 += 1;
			} LA18: ;
			{
				if (!!(((*t).N == NIM_NIL))) goto LA25;
				result = iterovernode_224083(marker, (*t).N, iter, closure);
			}
			LA25: ;
		}
		break;
		}
	}
	LA12: ;
	BeforeRet: ;
	return result;
}

N_NIMCALL(NIM_BOOL, iterovertype_223048)(ttype188837* t, ttypeiter223034 iter, TNimObject* closure) {
	NIM_BOOL result;
	tintset185047 marker;
	result = 0;
	chckNil((void*)&marker);
	memset((void*)&marker, 0, sizeof(marker));
	initintset_185918(&marker);
	result = iterovertypeaux_224075(&marker, t, iter, closure);
	return result;
}

N_NIMCALL(NIM_BOOL, containsgenerictypeiter_232618)(ttype188837* 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;
		{
			ttype188837* LOC11;
			LOC11 = 0;
			LOC11 = base_223029(t);
			if (!((*LOC11).Kind == ((NU8) 0))) goto LA12;
			result = NIM_TRUE;
			goto BeforeRet;
		}
		LA12: ;
		{
			ttype188837* LOC16;
			NIM_BOOL LOC17;
			LOC16 = 0;
			LOC16 = base_223029(t);
			LOC17 = 0;
			LOC17 = containsgenerictypeiter_232618(LOC16, closure);
			if (!LOC17) goto LA18;
			result = NIM_TRUE;
			goto BeforeRet;
		}
		LA18: ;
		result = NIM_FALSE;
		goto BeforeRet;
	}
	LA7: ;
	{
		if (!((*t).Kind >= ((NU8) 9) && (*t).Kind <= ((NU8) 10) || (*t).Kind == ((NU8) 12) || (*t).Kind >= ((NU8) 51) && (*t).Kind <= ((NU8) 58) || (*t).Kind == ((NU8) 60))) goto LA22;
		result = NIM_TRUE;
		goto BeforeRet;
	}
	LA22: ;
	result = NIM_FALSE;
	goto BeforeRet;
	BeforeRet: ;
	return result;
}

N_NIMCALL(NIM_BOOL, containsgenerictype_232717)(ttype188837* t) {
	NIM_BOOL result;
	result = 0;
	result = iterovertype_223048(t, containsgenerictypeiter_232618, NIM_NIL);
	return result;
}

N_NIMCALL(NI, inheritancediff_230560)(ttype188837* a, ttype188837* b) {
	NI result;
	ttype188837* x;
	ttype188837* y;
	result = 0;
	x = a;
	result = 0;
	while (1) {
		if (!!((x == NIM_NIL))) goto LA1;
		x = skiptypes_192793(x, IL64(211106247215360));
		{
			NIM_BOOL LOC4;
			LOC4 = 0;
			LOC4 = sameobjecttypes_229091(x, b);
			if (!LOC4) goto LA5;
			goto BeforeRet;
		}
		LA5: ;
		x = (*x).Sons->data[0];
		result -= 1;
	} LA1: ;
	y = b;
	result = 0;
	while (1) {
		if (!!((y == NIM_NIL))) goto LA7;
		y = skiptypes_192793(y, IL64(211106247215360));
		{
			NIM_BOOL LOC10;
			LOC10 = 0;
			LOC10 = sameobjecttypes_229091(y, a);
			if (!LOC10) goto LA11;
			goto BeforeRet;
		}
		LA11: ;
		y = (*y).Sons->data[0];
		result += 1;
	} LA7: ;
	result = 2147483647;
	BeforeRet: ;
	return result;
}

N_NIMCALL(NI, safeinheritancediff_232806)(ttype188837* a, ttype188837* 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 = -1;
	}
	goto LA1;
	LA5: ;
	{
		result = inheritancediff_230560(a, b);
	}
	LA1: ;
	return result;
}

N_NIMCALL(NIM_BOOL, compatibleeffectsaux_232831)(tnode188803* se, tnode188803* re) {
	NIM_BOOL result;
	tnode188803* r_232847;
	NI i_232857;
	NI HEX3Atmp_232859;
	NI LOC5;
	NI res_232861;
	result = 0;
	{
		if (!re == 0) goto LA3;
		result = NIM_FALSE;
		goto BeforeRet;
	}
	LA3: ;
	r_232847 = 0;
	i_232857 = 0;
	HEX3Atmp_232859 = 0;
	LOC5 = 0;
	LOC5 = len_189264(re);
	HEX3Atmp_232859 = LOC5 - 1;
	res_232861 = 0;
	while (1) {
		if (!(res_232861 <= HEX3Atmp_232859)) goto LA6;
		i_232857 = res_232861;
		r_232847 = (*re).kindU.S6.Sons->data[i_232857];
		{
			tnode188803* s_232849;
			NI i_232851;
			NI HEX3Atmp_232853;
			NI LOC8;
			NI res_232855;
			s_232849 = 0;
			i_232851 = 0;
			HEX3Atmp_232853 = 0;
			LOC8 = 0;
			LOC8 = len_189264(se);
			HEX3Atmp_232853 = LOC8 - 1;
			res_232855 = 0;
			while (1) {
				if (!(res_232855 <= HEX3Atmp_232853)) goto LA9;
				i_232851 = res_232855;
				s_232849 = (*se).kindU.S6.Sons->data[i_232851];
				{
					NI LOC12;
					LOC12 = 0;
					LOC12 = safeinheritancediff_232806((*r_232847).Typ, (*s_232849).Typ);
					if (!(LOC12 <= 0)) goto LA13;
					goto LA7;
				}
				LA13: ;
				res_232855 += 1;
			} LA9: ;
			result = NIM_FALSE;
			goto BeforeRet;
		} LA7: ;
		res_232861 += 1;
	} LA6: ;
	result = NIM_TRUE;
	BeforeRet: ;
	return result;
}

N_NIMCALL(NIM_BOOL, compatibleeffects_232867)(ttype188837* formal, ttype188837* actual) {
	NIM_BOOL result;
	tnode188803* spec;
	result = 0;
	{
		NimStringDesc* LOC5;
		if (!!(((*(*(*formal).N).kindU.S6.Sons->data[0]).Kind == ((NU8) 150)))) goto LA3;
		LOC5 = 0;
		LOC5 = HEX24_165714(TMP2540);
		internalerror_165606(LOC5);
	}
	LA3: ;
	{
		NimStringDesc* LOC10;
		if (!!(((*(*(*actual).N).kindU.S6.Sons->data[0]).Kind == ((NU8) 150)))) goto LA8;
		LOC10 = 0;
		LOC10 = HEX24_165714(TMP2541);
		internalerror_165606(LOC10);
	}
	LA8: ;
	spec = (*(*formal).N).kindU.S6.Sons->data[0];
	{
		NI LOC13;
		tnode188803* real;
		tnode188803* se;
		tnode188803* st;
		LOC13 = 0;
		LOC13 = len_189264(spec);
		if (!!((LOC13 == 0))) goto LA14;
		real = (*(*actual).N).kindU.S6.Sons->data[0];
		se = (*spec).kindU.S6.Sons->data[0];
		{
			NIM_BOOL LOC18;
			LOC18 = 0;
			LOC18 = !(se == 0);
			if (!(LOC18)) goto LA19;
			LOC18 = !(((*se).Kind == ((NU8) 150)));
			LA19: ;
			if (!LOC18) goto LA20;
			{
				NI LOC24;
				LOC24 = 0;
				LOC24 = len_189264(real);
				if (!(LOC24 == 0)) goto LA25;
				result = NIM_FALSE;
				goto BeforeRet;
			}
			LA25: ;
			result = compatibleeffectsaux_232831(se, (*real).kindU.S6.Sons->data[0]);
			{
				if (!!(result)) goto LA29;
				goto BeforeRet;
			}
			LA29: ;
		}
		LA20: ;
		st = (*spec).kindU.S6.Sons->data[3];
		{
			NIM_BOOL LOC33;
			LOC33 = 0;
			LOC33 = !(st == 0);
			if (!(LOC33)) goto LA34;
			LOC33 = !(((*st).Kind == ((NU8) 150)));
			LA34: ;
			if (!LOC33) goto LA35;
			{
				NI LOC39;
				LOC39 = 0;
				LOC39 = len_189264(real);
				if (!(LOC39 == 0)) goto LA40;
				result = NIM_FALSE;
				goto BeforeRet;
			}
			LA40: ;
			result = compatibleeffectsaux_232831(st, (*real).kindU.S6.Sons->data[3]);
			{
				if (!!(result)) goto LA44;
				goto BeforeRet;
			}
			LA44: ;
		}
		LA35: ;
	}
	LA14: ;
	result = NIM_TRUE;
	BeforeRet: ;
	return result;
}

N_NIMCALL(NimStringDesc*, getprocheader_223025)(tsym188833* sym) {
	NimStringDesc* result;
	NimStringDesc* LOC1;
	tnode188803* n;
	NI i_223454;
	NI HEX3Atmp_223552;
	NI LOC2;
	NI res_223554;
	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;
	i_223454 = 0;
	HEX3Atmp_223552 = 0;
	LOC2 = 0;
	LOC2 = sonslen_189181(n);
	HEX3Atmp_223552 = (NI32)(LOC2 - 1);
	res_223554 = 1;
	while (1) {
		tnode188803* p;
		if (!(res_223554 <= HEX3Atmp_223552)) goto LA3;
		i_223454 = res_223554;
		p = (*n).kindU.S6.Sons->data[i_223454];
		{
			NimStringDesc* LOC8;
			if (!((*p).Kind == ((NU8) 3))) goto LA6;
			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*) &TMP1962));
			LOC8 = 0;
			LOC8 = typetostring_223020((*(*p).kindU.S4.Sym).Typ, ((NU8) 0));
			result = resizeString(result, LOC8->Sup.len + 0);
appendString(result, LOC8);
			{
				NI LOC11;
				LOC11 = 0;
				LOC11 = sonslen_189181(n);
				if (!!((i_223454 == (NI32)(LOC11 - 1)))) goto LA12;
				result = resizeString(result, 2);
appendString(result, ((NimStringDesc*) &TMP1929));
			}
			LA12: ;
		}
		goto LA4;
		LA6: ;
		{
			internalerror_165606(((NimStringDesc*) &TMP2548));
		}
		LA4: ;
		res_223554 += 1;
	} LA3: ;
	result = addChar(result, 41);
	{
		NimStringDesc* LOC19;
		NimStringDesc* LOC20;
		if (!!(((*(*n).kindU.S6.Sons->data[0]).Typ == NIM_NIL))) goto LA17;
		LOC19 = 0;
		LOC20 = 0;
		LOC20 = typetostring_223020((*(*n).kindU.S6.Sons->data[0]).Typ, ((NU8) 0));
		LOC19 = rawNewString(LOC20->Sup.len + 2);
appendString(LOC19, ((NimStringDesc*) &TMP1962));
appendString(LOC19, LOC20);
		result = resizeString(result, LOC19->Sup.len + 0);
appendString(result, LOC19);
	}
	LA17: ;
	return result;
}

N_NIMCALL(ttype188837*, elemtype_223559)(ttype188837* t) {
	ttype188837* result;
	result = 0;
	switch ((*t).Kind) {
	case ((NU8) 11):
	case ((NU8) 13):
	{
		ttype188837* LOC2;
		LOC2 = 0;
		LOC2 = lastson_189193(t);
		result = elemtype_223559(LOC2);
	}
	break;
	case ((NU8) 16):
	case ((NU8) 4):
	{
		result = (*t).Sons->data[1];
	}
	break;
	default:
	{
		result = (*t).Sons->data[0];
	}
	break;
	}
	return result;
}

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

N_NIMCALL(NIM_BOOL, isobjectwithtypefieldpredicate_224556)(ttype188837* 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[0] == NIM_NIL);
	LA4: ;
	LOC2 = LOC3;
	if (!(LOC2)) goto LA5;
	LOC6 = 0;
	LOC6 = !(((*t).Sym == NIM_NIL));
	if (!(LOC6)) goto LA7;
	LOC6 = (((*(*t).Sym).Flags &(1<<((((NU8) 9))&31)))!=0);
	LA7: ;
	LOC2 = !(LOC6);
	LA5: ;
	LOC1 = LOC2;
	if (!(LOC1)) goto LA8;
	LOC1 = !((((*t).Flags &(1<<((((NU8) 2))&31)))!=0));
	LA8: ;
	result = LOC1;
	return result;
}

static N_INLINE(tnode188803*, lastson_189189)(tnode188803* n) {
	tnode188803* result;
	NI LOC1;
	result = 0;
	LOC1 = 0;
	LOC1 = sonslen_189181(n);
	result = (*n).kindU.S6.Sons->data[(NI32)(LOC1 - 1)];
	return result;
}

N_NIMCALL(NI64, computerecsizeaux_232031)(tnode188803* 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) 137):
	{
		NI i_232227;
		NI HEX3Atmp_232328;
		NI LOC2;
		NI res_232330;
		NI64 LOC11;
		NI64 LOC12;
		result = computerecsizeaux_232031((*n).kindU.S6.Sons->data[0], a, curroffset);
		maxsize = 0;
		maxalign = 1;
		i_232227 = 0;
		HEX3Atmp_232328 = 0;
		LOC2 = 0;
		LOC2 = sonslen_189181(n);
		HEX3Atmp_232328 = (NI32)(LOC2 - 1);
		res_232330 = 1;
		while (1) {
			if (!(res_232330 <= HEX3Atmp_232328)) goto LA3;
			i_232227 = res_232330;
			switch ((*(*n).kindU.S6.Sons->data[i_232227]).Kind) {
			case ((NU8) 85):
			case ((NU8) 88):
			{
				tnode188803* LOC5;
				LOC5 = 0;
				LOC5 = lastson_189189((*n).kindU.S6.Sons->data[i_232227]);
				res = computerecsizeaux_232031(LOC5, &b, curroffset);
				{
					if (!(res < 0)) goto LA8;
					result = res;
					goto BeforeRet;
				}
				LA8: ;
				maxsize = ((maxsize >= res) ? maxsize : res);
				maxalign = ((maxalign >= b) ? maxalign : b);
			}
			break;
			default:
			{
				internalerror_165606(((NimStringDesc*) &TMP2613));
			}
			break;
			}
			res_232330 += 1;
		} LA3: ;
		LOC11 = 0;
		LOC11 = align_232018((*curroffset), maxalign);
		(*curroffset) = (NI64)(LOC11 + maxsize);
		LOC12 = 0;
		LOC12 = align_232018(result, maxalign);
		result = (NI64)(LOC12 + maxsize);
		(*a) = maxalign;
	}
	break;
	case ((NU8) 136):
	{
		NI i_232277;
		NI HEX3Atmp_232332;
		NI LOC14;
		NI res_232334;
		result = 0;
		maxalign = 1;
		i_232277 = 0;
		HEX3Atmp_232332 = 0;
		LOC14 = 0;
		LOC14 = sonslen_189181(n);
		HEX3Atmp_232332 = (NI32)(LOC14 - 1);
		res_232334 = 0;
		while (1) {
			NI64 LOC20;
			NI64 LOC21;
			if (!(res_232334 <= HEX3Atmp_232332)) goto LA15;
			i_232277 = res_232334;
			res = computerecsizeaux_232031((*n).kindU.S6.Sons->data[i_232277], &b, curroffset);
			{
				if (!(res < 0)) goto LA18;
				result = res;
				goto BeforeRet;
			}
			LA18: ;
			LOC20 = 0;
			LOC20 = align_232018((*curroffset), b);
			(*curroffset) = (NI64)(LOC20 + res);
			LOC21 = 0;
			LOC21 = align_232018(result, b);
			result = (NI64)(LOC21 + res);
			{
				if (!(maxalign < b)) goto LA24;
				maxalign = b;
			}
			LA24: ;
			res_232334 += 1;
		} LA15: ;
		(*a) = maxalign;
	}
	break;
	case ((NU8) 3):
	{
		result = computesizeaux_232025((*(*n).kindU.S4.Sym).Typ, a);
		(*(*n).kindU.S4.Sym).Offset = ((NI) ((*curroffset)));
	}
	break;
	default:
	{
		internalerror_165606(((NimStringDesc*) &TMP2614));
		(*a) = 1;
		result = -1;
	}
	break;
	}
	BeforeRet: ;
	return result;
}

N_NIMCALL(NI64, computesizeaux_232025)(ttype188837* 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 == -2)) goto LA3;
		result = -2;
		goto BeforeRet;
	}
	LA3: ;
	{
		if (!(0 <= (*typ).Size)) goto LA7;
		result = (*typ).Size;
		(*a) = ((NI64) ((*typ).Align));
		goto BeforeRet;
	}
	LA7: ;
	(*typ).Size = -2;
	switch ((*typ).Kind) {
	case ((NU8) 31):
	case ((NU8) 40):
	{
		result = ((NI64) (intsize_142590));
		(*a) = result;
	}
	break;
	case ((NU8) 32):
	case ((NU8) 41):
	case ((NU8) 1):
	case ((NU8) 2):
	{
		result = 1;
		(*a) = result;
	}
	break;
	case ((NU8) 33):
	case ((NU8) 42):
	{
		result = 2;
		(*a) = result;
	}
	break;
	case ((NU8) 34):
	case ((NU8) 43):
	case ((NU8) 37):
	{
		result = 4;
		(*a) = result;
	}
	break;
	case ((NU8) 35):
	case ((NU8) 44):
	case ((NU8) 38):
	{
		result = 8;
		(*a) = result;
	}
	break;
	case ((NU8) 39):
	{
		result = 16;
		(*a) = result;
	}
	break;
	case ((NU8) 36):
	{
		result = ((NI64) (floatsize_142591));
		(*a) = result;
	}
	break;
	case ((NU8) 25):
	{
		{
			if (!((*typ).Callconv == ((NU8) 8))) goto LA19;
			result = ((NI64) ((NI32)(2 * ptrsize_142592)));
		}
		goto LA17;
		LA19: ;
		{
			result = ((NI64) (ptrsize_142592));
		}
		LA17: ;
		(*a) = ((NI64) (ptrsize_142592));
	}
	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):
	{
		result = ((NI64) (ptrsize_142592));
		(*a) = result;
	}
	break;
	case ((NU8) 16):
	case ((NU8) 4):
	{
		NI64 elemsize;
		NI64 LOC28;
		elemsize = computesizeaux_232025((*typ).Sons->data[1], a);
		{
			if (!(elemsize < 0)) goto LA26;
			result = elemsize;
			goto BeforeRet;
		}
		LA26: ;
		LOC28 = 0;
		LOC28 = lengthord_223010((*typ).Sons->data[0]);
		result = (NI64)(LOC28 * elemsize);
	}
	break;
	case ((NU8) 14):
	{
		{
			NI64 LOC32;
			LOC32 = 0;
			LOC32 = firstord_223002(typ);
			if (!(LOC32 < 0)) goto LA33;
			result = 4;
		}
		goto LA30;
		LA33: ;
		{
			length = lastord_223006(typ);
			{
				if (!((NI64)(length + 1) < 256)) goto LA38;
				result = 1;
			}
			goto LA36;
			LA38: ;
			{
				if (!((NI64)(length + 1) < 65536)) goto LA41;
				result = 2;
			}
			goto LA36;
			LA41: ;
			{
				if (!((NI64)(length + 1) < IL64(4294967296))) goto LA44;
				result = 4;
			}
			goto LA36;
			LA44: ;
			{
				result = 8;
			}
			LA36: ;
		}
		LA30: ;
		(*a) = result;
	}
	break;
	case ((NU8) 19):
	{
		length = lengthord_223010((*typ).Sons->data[0]);
		{
			if (!(length <= 8)) goto LA50;
			result = 1;
		}
		goto LA48;
		LA50: ;
		{
			if (!(length <= 16)) goto LA53;
			result = 2;
		}
		goto LA48;
		LA53: ;
		{
			if (!(length <= 32)) goto LA56;
			result = 4;
		}
		goto LA48;
		LA56: ;
		{
			if (!(length <= 64)) goto LA59;
			result = 8;
		}
		goto LA48;
		LA59: ;
		{
			NI64 LOC62;
			NI64 LOC65;
			LOC62 = 0;
			LOC62 = align_232018(length, 8);
			if (!(((NI) ((NI64)(LOC62 % 8))) == 0)) goto LA63;
			LOC65 = 0;
			LOC65 = align_232018(length, 8);
			result = (NI64)(LOC65 / 8);
		}
		goto LA48;
		LA63: ;
		{
			NI64 LOC67;
			LOC67 = 0;
			LOC67 = align_232018(length, 8);
			result = (NI64)((NI64)(LOC67 / 8) + 1);
		}
		LA48: ;
		(*a) = result;
	}
	break;
	case ((NU8) 20):
	{
		result = computesizeaux_232025((*typ).Sons->data[0], a);
	}
	break;
	case ((NU8) 18):
	{
		NI i_232387;
		NI HEX3Atmp_232420;
		NI LOC70;
		NI res_232422;
		result = 0;
		maxalign = 1;
		i_232387 = 0;
		HEX3Atmp_232420 = 0;
		LOC70 = 0;
		LOC70 = sonslen_189185(typ);
		HEX3Atmp_232420 = (NI32)(LOC70 - 1);
		res_232422 = 0;
		while (1) {
			NI64 LOC76;
			if (!(res_232422 <= HEX3Atmp_232420)) goto LA71;
			i_232387 = res_232422;
			res = computesizeaux_232025((*typ).Sons->data[i_232387], a);
			{
				if (!(res < 0)) goto LA74;
				result = res;
				goto BeforeRet;
			}
			LA74: ;
			maxalign = ((maxalign >= (*a)) ? maxalign : (*a));
			LOC76 = 0;
			LOC76 = align_232018(result, (*a));
			result = (NI64)(LOC76 + res);
			res_232422 += 1;
		} LA71: ;
		result = align_232018(result, maxalign);
		(*a) = maxalign;
	}
	break;
	case ((NU8) 17):
	{
		{
			if (!!(((*typ).Sons->data[0] == NIM_NIL))) goto LA80;
			result = computesizeaux_232025((*typ).Sons->data[0], a);
			{
				if (!(result < 0)) goto LA84;
				goto BeforeRet;
			}
			LA84: ;
			maxalign = (*a);
		}
		goto LA78;
		LA80: ;
		{
			NIM_BOOL LOC87;
			LOC87 = 0;
			LOC87 = isobjectwithtypefieldpredicate_224556(typ);
			if (!LOC87) goto LA88;
			result = ((NI64) (intsize_142590));
			maxalign = result;
		}
		goto LA78;
		LA88: ;
		{
			result = 0;
			maxalign = 1;
		}
		LA78: ;
		curroffset = result;
		result = computerecsizeaux_232031((*typ).N, a, &curroffset);
		{
			if (!(result < 0)) goto LA93;
			goto BeforeRet;
		}
		LA93: ;
		{
			if (!((*a) < maxalign)) goto LA97;
			(*a) = maxalign;
		}
		LA97: ;
		result = align_232018(result, (*a));
	}
	break;
	case ((NU8) 11):
	case ((NU8) 13):
	case ((NU8) 10):
	case ((NU8) 47):
	case ((NU8) 46):
	case ((NU8) 49):
	{
		ttype188837* LOC100;
		LOC100 = 0;
		LOC100 = lastson_189193(typ);
		result = computesizeaux_232025(LOC100, a);
	}
	break;
	case ((NU8) 8):
	{
		ttype188837* LOC102;
		LOC102 = 0;
		LOC102 = base_223029(typ);
		result = computesizeaux_232025(LOC102, a);
	}
	break;
	case ((NU8) 30):
	{
		result = -2;
		goto BeforeRet;
	}
	break;
	default:
	{
		result = -1;
	}
	break;
	}
	(*typ).Size = result;
	(*typ).Align = ((NI) ((*a)));
	BeforeRet: ;
	return result;
}

N_NIMCALL(NI64, computesize_223154)(ttype188837* typ) {
	NI64 result;
	NI64 a;
	result = 0;
	a = 1;
	result = computesizeaux_232025(typ, &a);
	return result;
}

N_NIMCALL(NI64, getsize_223158)(ttype188837* typ) {
	NI64 result;
	result = 0;
	result = computesize_223154(typ);
	{
		NimStringDesc* LOC5;
		if (!(result < 0)) goto LA3;
		LOC5 = 0;
		LOC5 = rawNewString(reprEnum((*typ).Kind, (&NTI188240))->Sup.len + 9);
appendString(LOC5, ((NimStringDesc*) &TMP2615));
appendString(LOC5, reprEnum((*typ).Kind, (&NTI188240)));
		internalerror_165606(LOC5);
	}
	LA3: ;
	return result;
}

N_NIMCALL(NIM_BOOL, enumhasholes_223075)(ttype188837* t) {
	NIM_BOOL result;
	ttype188837* b;
	NIM_BOOL LOC2;
	result = 0;
	b = t;
	while (1) {
		if (!((*b).Kind == ((NU8) 46) || (*b).Kind == ((NU8) 47) || (*b).Kind == ((NU8) 20) || (*b).Kind == ((NU8) 11))) goto LA1;
		b = (*b).Sons->data[0];
	} LA1: ;
	LOC2 = 0;
	LOC2 = ((*b).Kind == ((NU8) 14));
	if (!(LOC2)) goto LA3;
	LOC2 = (((*b).Flags &(1<<((((NU8) 5))&31)))!=0);
	LA3: ;
	result = LOC2;
	return result;
}

N_NIMCALL(NIM_BOOL, typeallowednode_231260)(tintset185047* marker, tnode188803* n, NU8 kind, NU8 flags) {
	NIM_BOOL result;
	result = 0;
	result = NIM_TRUE;
	{
		if (!!((n == NIM_NIL))) goto LA3;
		result = typeallowedaux_231250(marker, (*n).Typ, kind, flags);
		{
			if (!result) goto LA7;
			switch ((*n).Kind) {
			case ((NU8) 0) ... ((NU8) 23):
			{
			}
			break;
			default:
			{
				NI i_231299;
				NI HEX3Atmp_231314;
				NI LOC11;
				NI res_231316;
				i_231299 = 0;
				HEX3Atmp_231314 = 0;
				LOC11 = 0;
				LOC11 = sonslen_189181(n);
				HEX3Atmp_231314 = (NI32)(LOC11 - 1);
				res_231316 = 0;
				while (1) {
					if (!(res_231316 <= HEX3Atmp_231314)) goto LA12;
					i_231299 = res_231316;
					result = typeallowednode_231260(marker, (*n).kindU.S6.Sons->data[i_231299], kind, flags);
					{
						if (!!(result)) goto LA15;
						goto LA12;
					}
					LA15: ;
					res_231316 += 1;
				} LA12: ;
			}
			break;
			}
		}
		LA7: ;
	}
	LA3: ;
	return result;
}

N_NIMCALL(NIM_BOOL, typeallowedaux_231250)(tintset185047* marker, ttype188837* typ, NU8 kind, NU8 flags_231258) {
	NIM_BOOL result;
	ttype188837* t;
	result = 0;
	result = NIM_TRUE;
	{
		if (!(typ == NIM_NIL)) goto LA3;
		goto BeforeRet;
	}
	LA3: ;
	{
		NIM_BOOL LOC7;
		LOC7 = 0;
		LOC7 = containsorincl_185888(marker, (*typ).Sup.Id);
		if (!LOC7) goto LA8;
		goto BeforeRet;
	}
	LA8: ;
	t = skiptypes_192793(typ, IL64(211106232576000));
	switch ((*t).Kind) {
	case ((NU8) 23):
	{
		ttype188837* t2;
		{
			if (!(kind == ((NU8) 10))) goto LA13;
			result = NIM_FALSE;
			goto BeforeRet;
		}
		LA13: ;
		t2 = skiptypes_192793((*t).Sons->data[0], IL64(211106232576000));
		switch ((*t2).Kind) {
		case ((NU8) 23):
		{
			result = ((flags_231258 &(1<<((((NU8) 1))&7)))!=0);
		}
		break;
		case ((NU8) 27):
		{
			NIM_BOOL LOC17;
			LOC17 = 0;
			LOC17 = (kind == ((NU8) 3));
			if (!(LOC17)) goto LA18;
			LOC17 = typeallowedaux_231250(marker, t2, kind, flags_231258);
			LA18: ;
			result = LOC17;
		}
		break;
		default:
		{
			NIM_BOOL LOC20;
			LOC20 = 0;
			LOC20 = ((2056 &(1<<((kind)&31)))!=0);
			if (!(LOC20)) goto LA21;
			LOC20 = typeallowedaux_231250(marker, t2, kind, flags_231258);
			LA21: ;
			result = LOC20;
		}
		break;
		}
	}
	break;
	case ((NU8) 25):
	{
		NI i_231713;
		NI HEX3Atmp_231990;
		NI LOC23;
		NI res_231992;
		i_231713 = 0;
		HEX3Atmp_231990 = 0;
		LOC23 = 0;
		LOC23 = sonslen_189185(t);
		HEX3Atmp_231990 = (NI32)(LOC23 - 1);
		res_231992 = 1;
		while (1) {
			if (!(res_231992 <= HEX3Atmp_231990)) goto LA24;
			i_231713 = res_231992;
			result = typeallowedaux_231250(marker, (*t).Sons->data[i_231713], ((NU8) 3), flags_231258);
			{
				if (!!(result)) goto LA27;
				goto LA24;
			}
			LA27: ;
			res_231992 += 1;
		} LA24: ;
		{
			NIM_BOOL LOC31;
			LOC31 = 0;
			LOC31 = result;
			if (!(LOC31)) goto LA32;
			LOC31 = !(((*t).Sons->data[0] == NIM_NIL));
			LA32: ;
			if (!LOC31) goto LA33;
			result = typeallowedaux_231250(marker, (*t).Sons->data[0], ((NU8) 11), flags_231258);
		}
		LA33: ;
	}
	break;
	case ((NU8) 6):
	case ((NU8) 7):
	case ((NU8) 8):
	case ((NU8) 59):
	{
		result = NIM_TRUE;
	}
	break;
	case ((NU8) 3):
	{
		result = ((flags_231258 &(1<<((((NU8) 0))&7)))!=0);
	}
	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 LOC38;
		LOC38 = 0;
		LOC38 = (((*t).Flags &(1<<((((NU8) 23))&31)))!=0);
		if (LOC38) goto LA39;
		LOC38 = !(((flags_231258 &(1<<((((NU8) 0))&7)))!=0));
		LA39: ;
		result = LOC38;
	}
	break;
	case ((NU8) 10):
	case ((NU8) 12):
	case ((NU8) 9):
	case ((NU8) 0):
	case ((NU8) 30):
	case ((NU8) 60):
	case ((NU8) 61):
	{
		result = NIM_FALSE;
	}
	break;
	case ((NU8) 5):
	{
		result = (kind == ((NU8) 10));
	}
	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_TRUE;
	}
	break;
	case ((NU8) 15):
	{
		result = (kind == ((NU8) 3));
	}
	break;
	case ((NU8) 11):
	case ((NU8) 13):
	{
		ttype188837* LOC45;
		LOC45 = 0;
		LOC45 = lastson_189193(t);
		result = typeallowedaux_231250(marker, LOC45, kind, flags_231258);
	}
	break;
	case ((NU8) 20):
	{
		ttype188837* LOC47;
		LOC47 = 0;
		LOC47 = skiptypes_192793((*t).Sons->data[0], IL64(211106232576000));
		result = ((*LOC47).Kind == ((NU8) 2) || (*LOC47).Kind == ((NU8) 14) || (*LOC47).Kind >= ((NU8) 31) && (*LOC47).Kind <= ((NU8) 39));
	}
	break;
	case ((NU8) 27):
	case ((NU8) 48):
	{
		NIM_BOOL LOC49;
		LOC49 = 0;
		LOC49 = (kind == ((NU8) 3));
		if (!(LOC49)) goto LA50;
		LOC49 = typeallowedaux_231250(marker, (*t).Sons->data[0], ((NU8) 8), flags_231258);
		LA50: ;
		result = LOC49;
	}
	break;
	case ((NU8) 24):
	{
		NIM_BOOL LOC52;
		LOC52 = 0;
		LOC52 = ((*(*t).Sons->data[0]).Kind == ((NU8) 3));
		if (LOC52) goto LA53;
		LOC52 = typeallowedaux_231250(marker, (*t).Sons->data[0], ((NU8) 8), (flags_231258 | 2));
		LA53: ;
		result = LOC52;
	}
	break;
	case ((NU8) 16):
	{
		NIM_BOOL LOC55;
		LOC55 = 0;
		LOC55 = ((*(*t).Sons->data[1]).Kind == ((NU8) 3));
		if (LOC55) goto LA56;
		LOC55 = typeallowedaux_231250(marker, (*t).Sons->data[1], ((NU8) 8), flags_231258);
		LA56: ;
		result = LOC55;
	}
	break;
	case ((NU8) 22):
	{
		ttype188837* LOC62;
		{
			if (!(kind == ((NU8) 10))) goto LA60;
			result = NIM_FALSE;
			goto BeforeRet;
		}
		LA60: ;
		LOC62 = 0;
		LOC62 = lastson_189193(t);
		result = typeallowedaux_231250(marker, LOC62, ((NU8) 8), (flags_231258 | 2));
	}
	break;
	case ((NU8) 21):
	{
		ttype188837* LOC64;
		LOC64 = 0;
		LOC64 = lastson_189193(t);
		result = typeallowedaux_231250(marker, LOC64, ((NU8) 8), (flags_231258 | 2));
	}
	break;
	case ((NU8) 4):
	case ((NU8) 19):
	case ((NU8) 46):
	case ((NU8) 47):
	case ((NU8) 49):
	{
		NI i_231922;
		NI HEX3Atmp_231994;
		NI LOC66;
		NI res_231996;
		i_231922 = 0;
		HEX3Atmp_231994 = 0;
		LOC66 = 0;
		LOC66 = sonslen_189185(t);
		HEX3Atmp_231994 = (NI32)(LOC66 - 1);
		res_231996 = 0;
		while (1) {
			if (!(res_231996 <= HEX3Atmp_231994)) goto LA67;
			i_231922 = res_231996;
			result = typeallowedaux_231250(marker, (*t).Sons->data[i_231922], kind, flags_231258);
			{
				if (!!(result)) goto LA70;
				goto LA67;
			}
			LA70: ;
			res_231996 += 1;
		} LA67: ;
	}
	break;
	case ((NU8) 17):
	case ((NU8) 18):
	{
		NU8 flags;
		NI i_231972;
		NI HEX3Atmp_231998;
		NI LOC79;
		NI res_232000;
		{
			NIM_BOOL LOC75;
			LOC75 = 0;
			LOC75 = (kind == ((NU8) 10));
			if (!(LOC75)) goto LA76;
			LOC75 = ((*t).Kind == ((NU8) 17));
			LA76: ;
			if (!LOC75) goto LA77;
			result = NIM_FALSE;
			goto BeforeRet;
		}
		LA77: ;
		flags = (flags_231258 | 1);
		i_231972 = 0;
		HEX3Atmp_231998 = 0;
		LOC79 = 0;
		LOC79 = sonslen_189185(t);
		HEX3Atmp_231998 = (NI32)(LOC79 - 1);
		res_232000 = 0;
		while (1) {
			if (!(res_232000 <= HEX3Atmp_231998)) goto LA80;
			i_231972 = res_232000;
			result = typeallowedaux_231250(marker, (*t).Sons->data[i_231972], kind, flags);
			{
				if (!!(result)) goto LA83;
				goto LA80;
			}
			LA83: ;
			res_232000 += 1;
		} LA80: ;
		{
			NIM_BOOL LOC87;
			LOC87 = 0;
			LOC87 = result;
			if (!(LOC87)) goto LA88;
			LOC87 = !(((*t).N == NIM_NIL));
			LA88: ;
			if (!LOC87) goto LA89;
			result = typeallowednode_231260(marker, (*t).N, kind, flags);
		}
		LA89: ;
	}
	break;
	case ((NU8) 50):
	{
		result = NIM_TRUE;
	}
	break;
	}
	BeforeRet: ;
	return result;
}

N_NIMCALL(NIM_BOOL, typeallowed_223180)(ttype188837* t, NU8 kind) {
	NIM_BOOL result;
	tintset185047 marker;
	result = 0;
	chckNil((void*)&marker);
	memset((void*)&marker, 0, sizeof(marker));
	initintset_185918(&marker);
	result = typeallowedaux_231250(&marker, t, kind, 0);
	return result;
}

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

N_NIMCALL(ttype188837*, commonsuperclass_230876)(ttype188837* a, ttype188837* b) {
	ttype188837* result;
	ttype188837* x;
	tintset185047 ancestors;
	ttype188837* y;
	result = 0;
	{
		NIM_BOOL LOC3;
		LOC3 = 0;
		LOC3 = sameobjecttypes_229091(a, b);
		if (!LOC3) goto LA4;
		result = a;
		goto BeforeRet;
	}
	LA4: ;
	x = a;
	chckNil((void*)&ancestors);
	memset((void*)&ancestors, 0, sizeof(ancestors));
	initintset_185918(&ancestors);
	while (1) {
		if (!!((x == NIM_NIL))) goto LA6;
		x = skiptypes_192793(x, IL64(211106247215360));
		incl_185849(&ancestors, (*x).Sup.Id);
		x = (*x).Sons->data[0];
	} LA6: ;
	y = b;
	while (1) {
		if (!!((y == NIM_NIL))) goto LA7;
		y = skiptypes_192793(y, IL64(211106247215360));
		{
			NIM_BOOL LOC10;
			LOC10 = 0;
			LOC10 = contains_185821(ancestors, (*y).Sup.Id);
			if (!LOC10) goto LA11;
			result = y;
			goto BeforeRet;
		}
		LA11: ;
		y = (*y).Sons->data[0];
	} LA7: ;
	BeforeRet: ;
	return result;
}

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

static N_INLINE(void, rtladdzct_46002)(tcell41090* c) {
	addzct_44418(&gch_43044.Zct, c);
}

static N_INLINE(void, asgnRefNoCycle)(void** dest, void* src) {
	{
		tcell41090* c;
		if (!!((src == NIM_NIL))) goto LA3;
		c = usrtocell_44443(src);
		(*c).Refcount += 8;
	}
	LA3: ;
	{
		tcell41090* c;
		if (!!(((*dest) == NIM_NIL))) goto LA7;
		c = usrtocell_44443((*dest));
		{
			(*c).Refcount -= 8;
			if (!((NU32)((*c).Refcount) < (NU32)(8))) goto LA11;
			rtladdzct_46002(c);
		}
		LA11: ;
	}
	LA7: ;
	(*dest) = src;
}

N_NIMCALL(ttype188837*, baseofdistinct_232723)(ttype188837* t) {
	ttype188837* result;
	result = 0;
	{
		if (!((*t).Kind == ((NU8) 13))) goto LA3;
		result = (*t).Sons->data[0];
	}
	goto LA1;
	LA3: ;
	{
		ttype188837* parent;
		ttype188837* it;
		result = copytype_189141(t, (*t).Owner, NIM_FALSE);
		parent = NIM_NIL;
		it = result;
		while (1) {
			if (!((*it).Kind == ((NU8) 21) || (*it).Kind == ((NU8) 22))) goto LA6;
			parent = it;
			it = lastson_189193(it);
		} LA6: ;
		{
			if (!((*it).Kind == ((NU8) 13))) goto LA9;
			{
				NimStringDesc* LOC15;
				if (!!(!((parent == NIM_NIL)))) goto LA13;
				LOC15 = 0;
				LOC15 = HEX24_165714(TMP3010);
				internalerror_165606(LOC15);
			}
			LA13: ;
			asgnRefNoCycle((void**) &(*parent).Sons->data[0], (*it).Sons->data[0]);
		}
		LA9: ;
	}
	LA1: ;
	return result;
}

N_NIMCALL(NIM_BOOL, samebackendtype_230522)(ttype188837* x, ttype188837* y) {
	NIM_BOOL result;
	tsametypeclosure227852 c;
	result = 0;
	chckNil((void*)&c);
	memset((void*)&c, 0, sizeof(c));
	initsametypeclosure_227872(&c);
	c.Flags |=((NI8)(1)<<((((NU8) 0))%(sizeof(NI8)*8)));
	result = sametypeaux_228050(x, y, &c);
	return result;
}

N_NIMCALL(NIM_BOOL, searchtypenodeforaux_224221)(tnode188803* n, ttypepredicate223038 p, tintset185047* marker) {
	NIM_BOOL result;
	result = 0;
	result = NIM_FALSE;
	switch ((*n).Kind) {
	case ((NU8) 136):
	{
		NI i_224240;
		NI HEX3Atmp_224470;
		NI LOC2;
		NI res_224472;
		i_224240 = 0;
		HEX3Atmp_224470 = 0;
		LOC2 = 0;
		LOC2 = sonslen_189181(n);
		HEX3Atmp_224470 = (NI32)(LOC2 - 1);
		res_224472 = 0;
		while (1) {
			if (!(res_224472 <= HEX3Atmp_224470)) goto LA3;
			i_224240 = res_224472;
			result = searchtypenodeforaux_224221((*n).kindU.S6.Sons->data[i_224240], p, marker);
			{
				if (!result) goto LA6;
				goto BeforeRet;
			}
			LA6: ;
			res_224472 += 1;
		} LA3: ;
	}
	break;
	case ((NU8) 137):
	{
		NI i_224427;
		NI HEX3Atmp_224474;
		NI LOC13;
		NI res_224476;
		result = searchtypenodeforaux_224221((*n).kindU.S6.Sons->data[0], p, marker);
		{
			if (!result) goto LA11;
			goto BeforeRet;
		}
		LA11: ;
		i_224427 = 0;
		HEX3Atmp_224474 = 0;
		LOC13 = 0;
		LOC13 = sonslen_189181(n);
		HEX3Atmp_224474 = (NI32)(LOC13 - 1);
		res_224476 = 1;
		while (1) {
			if (!(res_224476 <= HEX3Atmp_224474)) goto LA14;
			i_224427 = res_224476;
			switch ((*(*n).kindU.S6.Sons->data[i_224427]).Kind) {
			case ((NU8) 85):
			case ((NU8) 88):
			{
				tnode188803* LOC16;
				LOC16 = 0;
				LOC16 = lastson_189189((*n).kindU.S6.Sons->data[i_224427]);
				result = searchtypenodeforaux_224221(LOC16, p, marker);
				{
					if (!result) goto LA19;
					goto BeforeRet;
				}
				LA19: ;
			}
			break;
			default:
			{
				internalerror_165606(((NimStringDesc*) &TMP3175));
			}
			break;
			}
			res_224476 += 1;
		} LA14: ;
	}
	break;
	case ((NU8) 3):
	{
		result = searchtypeforaux_224214((*(*n).kindU.S4.Sym).Typ, p, marker);
	}
	break;
	default:
	{
		internalerror_165591((*n).Info, ((NimStringDesc*) &TMP3176));
	}
	break;
	}
	BeforeRet: ;
	return result;
}

N_NIMCALL(NIM_BOOL, searchtypeforaux_224214)(ttype188837* t, ttypepredicate223038 predicate, tintset185047* 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_185888(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_224214((*t).Sons->data[0], predicate, marker);
		{
			if (!!(result)) goto LA17;
			result = searchtypenodeforaux_224221((*t).N, predicate, marker);
		}
		LA17: ;
	}
	break;
	case ((NU8) 11):
	case ((NU8) 13):
	{
		ttype188837* LOC20;
		LOC20 = 0;
		LOC20 = lastson_189193(t);
		result = searchtypeforaux_224214(LOC20, predicate, marker);
	}
	break;
	case ((NU8) 16):
	case ((NU8) 4):
	case ((NU8) 19):
	case ((NU8) 18):
	{
		NI i_224518;
		NI HEX3Atmp_224519;
		NI LOC22;
		NI res_224521;
		i_224518 = 0;
		HEX3Atmp_224519 = 0;
		LOC22 = 0;
		LOC22 = sonslen_189185(t);
		HEX3Atmp_224519 = (NI32)(LOC22 - 1);
		res_224521 = 0;
		while (1) {
			if (!(res_224521 <= HEX3Atmp_224519)) goto LA23;
			i_224518 = res_224521;
			result = searchtypeforaux_224214((*t).Sons->data[i_224518], predicate, marker);
			{
				if (!result) goto LA26;
				goto BeforeRet;
			}
			LA26: ;
			res_224521 += 1;
		} LA23: ;
	}
	break;
	default:
	{
	}
	break;
	}
	BeforeRet: ;
	return result;
}

N_NIMCALL(NIM_BOOL, searchtypefor_224526)(ttype188837* t, ttypepredicate223038 predicate) {
	NIM_BOOL result;
	tintset185047 marker;
	result = 0;
	chckNil((void*)&marker);
	memset((void*)&marker, 0, sizeof(marker));
	initintset_185918(&marker);
	result = searchtypeforaux_224214(t, predicate, &marker);
	return result;
}

N_NIMCALL(NIM_BOOL, isgcref_224755)(ttype188837* t) {
	NIM_BOOL result;
	NIM_BOOL LOC1;
	NIM_BOOL LOC3;
	result = 0;
	LOC1 = 0;
	LOC1 = ((*t).Kind == ((NU8) 22) || (*t).Kind == ((NU8) 24) || (*t).Kind == ((NU8) 28));
	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_223134)(ttype188837* typ) {
	NIM_BOOL result;
	result = 0;
	result = searchtypefor_224526(typ, isgcref_224755);
	return result;
}

N_NIMCALL(NIM_BOOL, ispureobject_223162)(ttype188837* typ) {
	NIM_BOOL result;
	ttype188837* t;
	NIM_BOOL LOC4;
	result = 0;
	t = typ;
	while (1) {
		NIM_BOOL LOC2;
		LOC2 = 0;
		LOC2 = ((*t).Kind == ((NU8) 17));
		if (!(LOC2)) goto LA3;
		LOC2 = !(((*t).Sons->data[0] == NIM_NIL));
		LA3: ;
		if (!LOC2) goto LA1;
		t = (*t).Sons->data[0];
	} LA1: ;
	LOC4 = 0;
	LOC4 = !(((*t).Sym == NIM_NIL));
	if (!(LOC4)) goto LA5;
	LOC4 = (((*(*t).Sym).Flags &(1<<((((NU8) 9))&31)))!=0);
	LA5: ;
	result = LOC4;
	return result;
}

N_NIMCALL(NIM_BOOL, canformacyclenode_224870)(tintset185047* marker, tnode188803* n, NI startid) {
	NIM_BOOL result;
	result = 0;
	result = NIM_FALSE;
	{
		if (!!((n == NIM_NIL))) goto LA3;
		result = canformacycleaux_224863(marker, (*n).Typ, startid);
		{
			if (!!(result)) goto LA7;
			switch ((*n).Kind) {
			case ((NU8) 0) ... ((NU8) 23):
			{
			}
			break;
			default:
			{
				NI i_224906;
				NI HEX3Atmp_224921;
				NI LOC11;
				NI res_224923;
				i_224906 = 0;
				HEX3Atmp_224921 = 0;
				LOC11 = 0;
				LOC11 = sonslen_189181(n);
				HEX3Atmp_224921 = (NI32)(LOC11 - 1);
				res_224923 = 0;
				while (1) {
					if (!(res_224923 <= HEX3Atmp_224921)) goto LA12;
					i_224906 = res_224923;
					result = canformacyclenode_224870(marker, (*n).kindU.S6.Sons->data[i_224906], startid);
					{
						if (!result) goto LA15;
						goto BeforeRet;
					}
					LA15: ;
					res_224923 += 1;
				} LA12: ;
			}
			break;
			}
		}
		LA7: ;
	}
	LA3: ;
	BeforeRet: ;
	return result;
}

N_NIMCALL(NIM_BOOL, canformacycleaux_224863)(tintset185047* marker, ttype188837* typ, NI startid) {
	NIM_BOOL result;
	ttype188837* 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_192793(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;
			NI i_225009;
			NI HEX3Atmp_225058;
			NI LOC19;
			NI res_225060;
			LOC16 = 0;
			LOC16 = containsorincl_185888(marker, (*t).Sup.Id);
			if (!!(LOC16)) goto LA17;
			i_225009 = 0;
			HEX3Atmp_225058 = 0;
			LOC19 = 0;
			LOC19 = sonslen_189185(t);
			HEX3Atmp_225058 = (NI32)(LOC19 - 1);
			res_225060 = 0;
			while (1) {
				if (!(res_225060 <= HEX3Atmp_225058)) goto LA20;
				i_225009 = res_225060;
				result = canformacycleaux_224863(marker, (*t).Sons->data[i_225009], startid);
				{
					if (!result) goto LA23;
					goto BeforeRet;
				}
				LA23: ;
				res_225060 += 1;
			} LA20: ;
			{
				if (!!(((*t).N == NIM_NIL))) goto LA27;
				result = canformacyclenode_224870(marker, (*t).N, startid);
			}
			LA27: ;
		}
		goto LA14;
		LA17: ;
		{
			result = ((*t).Sup.Id == startid);
		}
		LA14: ;
		{
			NIM_BOOL LOC32;
			LOC32 = 0;
			LOC32 = ((*t).Kind == ((NU8) 17));
			if (!(LOC32)) goto LA33;
			LOC32 = !((((*t).Flags &(1<<((((NU8) 2))&31)))!=0));
			LA33: ;
			if (!LOC32) goto LA34;
			result = NIM_TRUE;
		}
		LA34: ;
	}
	break;
	case ((NU8) 25):
	{
		result = ((*typ).Callconv == ((NU8) 8));
	}
	break;
	default:
	{
	}
	break;
	}
	BeforeRet: ;
	return result;
}

N_NIMCALL(NIM_BOOL, canformacycle_223142)(ttype188837* typ) {
	NIM_BOOL result;
	tintset185047 marker;
	result = 0;
	chckNil((void*)&marker);
	memset((void*)&marker, 0, sizeof(marker));
	initintset_185918(&marker);
	result = canformacycleaux_224863(&marker, typ, (*typ).Sup.Id);
	return result;
}

N_NIMCALL(NU8, analyseobjectwithtypefieldaux_224631)(ttype188837* t, tintset185047* 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):
	{
		NI i_224684;
		NI HEX3Atmp_224735;
		NI LOC15;
		NI res_224737;
		{
			if (!!(((*t).N == NIM_NIL))) goto LA8;
			{
				NIM_BOOL LOC12;
				LOC12 = 0;
				LOC12 = searchtypenodeforaux_224221((*t).N, isobjectwithtypefieldpredicate_224556, marker);
				if (!LOC12) goto LA13;
				result = ((NU8) 2);
				goto BeforeRet;
			}
			LA13: ;
		}
		LA8: ;
		i_224684 = 0;
		HEX3Atmp_224735 = 0;
		LOC15 = 0;
		LOC15 = sonslen_189185(t);
		HEX3Atmp_224735 = (NI32)(LOC15 - 1);
		res_224737 = 0;
		while (1) {
			if (!(res_224737 <= HEX3Atmp_224735)) goto LA16;
			i_224684 = res_224737;
			res = analyseobjectwithtypefieldaux_224631((*t).Sons->data[i_224684], marker);
			{
				if (!(res == ((NU8) 2))) goto LA19;
				result = ((NU8) 2);
				goto BeforeRet;
			}
			LA19: ;
			{
				if (!(res == ((NU8) 1))) goto LA23;
				result = ((NU8) 1);
			}
			LA23: ;
			res_224737 += 1;
		} LA16: ;
		{
			if (!(result == ((NU8) 0))) goto LA27;
			{
				NIM_BOOL LOC31;
				LOC31 = 0;
				LOC31 = isobjectwithtypefieldpredicate_224556(t);
				if (!LOC31) goto LA32;
				result = ((NU8) 1);
			}
			LA32: ;
		}
		LA27: ;
	}
	break;
	case ((NU8) 11):
	case ((NU8) 13):
	case ((NU8) 46):
	case ((NU8) 47):
	{
		ttype188837* LOC35;
		LOC35 = 0;
		LOC35 = lastson_189193(t);
		result = analyseobjectwithtypefieldaux_224631(LOC35, marker);
	}
	break;
	case ((NU8) 16):
	case ((NU8) 4):
	case ((NU8) 18):
	{
		NI i_224724;
		NI HEX3Atmp_224739;
		NI LOC37;
		NI res_224741;
		i_224724 = 0;
		HEX3Atmp_224739 = 0;
		LOC37 = 0;
		LOC37 = sonslen_189185(t);
		HEX3Atmp_224739 = (NI32)(LOC37 - 1);
		res_224741 = 0;
		while (1) {
			if (!(res_224741 <= HEX3Atmp_224739)) goto LA38;
			i_224724 = res_224741;
			res = analyseobjectwithtypefieldaux_224631((*t).Sons->data[i_224724], marker);
			{
				if (!!((res == ((NU8) 0)))) goto LA41;
				result = ((NU8) 2);
				goto BeforeRet;
			}
			LA41: ;
			res_224741 += 1;
		} LA38: ;
	}
	break;
	default:
	{
	}
	break;
	}
	BeforeRet: ;
	return result;
}

N_NIMCALL(NU8, analyseobjectwithtypefield_223176)(ttype188837* t) {
	NU8 result;
	tintset185047 marker;
	result = 0;
	chckNil((void*)&marker);
	memset((void*)&marker, 0, sizeof(marker));
	initintset_185918(&marker);
	result = analyseobjectwithtypefieldaux_224631(t, &marker);
	return result;
}

N_NIMCALL(NIM_BOOL, istyref_224798)(ttype188837* t) {
	NIM_BOOL result;
	NIM_BOOL LOC1;
	NIM_BOOL LOC3;
	result = 0;
	LOC1 = 0;
	LOC1 = ((*t).Kind == ((NU8) 22));
	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, containstyref_224831)(ttype188837* typ) {
	NIM_BOOL result;
	result = 0;
	result = searchtypefor_224526(typ, istyref_224798);
	return result;
}

static N_INLINE(NIM_BOOL, iscompiletimeonly_233237)(ttype188837* t) {
	NIM_BOOL result;
	result = 0;
	result = ((*t).Kind == ((NU8) 8) || (*t).Kind == ((NU8) 59));
	return result;
}

N_NIMCALL(NIM_BOOL, containscompiletimeonly_233257)(ttype188837* t) {
	NIM_BOOL result;
	result = 0;
	{
		NIM_BOOL LOC3;
		LOC3 = 0;
		LOC3 = iscompiletimeonly_233237(t);
		if (!LOC3) goto LA4;
		result = NIM_TRUE;
		goto BeforeRet;
	}
	LA4: ;
	{
		NIM_BOOL LOC8;
		NI i_233411;
		NI HEX3Atmp_233429;
		NI LOC11;
		NI res_233431;
		LOC8 = 0;
		LOC8 = HEX3DHEX3D_233264((*t).Sons, NIM_NIL);
		if (!!(LOC8)) goto LA9;
		i_233411 = 0;
		HEX3Atmp_233429 = 0;
		LOC11 = 0;
		LOC11 = sonslen_189185(t);
		HEX3Atmp_233429 = LOC11 - 1;
		res_233431 = 0;
		while (1) {
			if (!(res_233431 <= HEX3Atmp_233429)) goto LA12;
			i_233411 = res_233431;
			{
				NIM_BOOL LOC15;
				LOC15 = 0;
				LOC15 = !(((*t).Sons->data[i_233411] == NIM_NIL));
				if (!(LOC15)) goto LA16;
				LOC15 = iscompiletimeonly_233237((*t).Sons->data[i_233411]);
				LA16: ;
				if (!LOC15) goto LA17;
				result = NIM_TRUE;
				goto BeforeRet;
			}
			LA17: ;
			res_233431 += 1;
		} LA12: ;
	}
	LA9: ;
	result = NIM_FALSE;
	goto BeforeRet;
	BeforeRet: ;
	return result;
}
N_NOINLINE(void, typesInit)(void) {
}

N_NOINLINE(void, typesDatInit)(void) {
static TNimNode* TMP2523[2];
static TNimNode TMP801[3];
NTI227866.size = sizeof(TY227866);
NTI227866.kind = 18;
NTI227866.base = 0;
NTI227866.flags = 3;
TMP2523[0] = &TMP801[1];
TMP801[1].kind = 1;
TMP801[1].offset = offsetof(TY227866, Field0);
TMP801[1].typ = (&NTI106);
TMP801[1].name = "Field0";
TMP2523[1] = &TMP801[2];
TMP801[2].kind = 1;
TMP801[2].offset = offsetof(TY227866, Field1);
TMP801[2].typ = (&NTI106);
TMP801[2].name = "Field1";
TMP801[0].len = 2; TMP801[0].kind = 2; TMP801[0].sons = &TMP2523[0];
NTI227866.node = &TMP801[0];
NTI227865.size = sizeof(TY227865*);
NTI227865.kind = 24;
NTI227865.base = (&NTI227866);
NTI227865.flags = 2;
NTI227865.marker = TMP2524;
}

