text: /* Generated by Nim Compiler v0.15.0 */
  /*   (c) 2016 Andreas Rumpf */
  /* The generated code is subject to the original license. */
  #define NIM_INTBITS 64
  
  #include "nimbase.h"
  #include <string.h>
  typedef struct Tnode294802 Tnode294802;
  typedef struct Ttype294840 Ttype294840;
  typedef struct Tlineinfo193336 Tlineinfo193336;
  typedef struct NimStringDesc NimStringDesc;
  typedef struct TGenericSeq TGenericSeq;
  typedef struct Tsym294834 Tsym294834;
  typedef struct Tident201010 Tident201010;
  typedef struct Tnodeseq294796 Tnodeseq294796;
  typedef struct Tidobj201004 Tidobj201004;
  typedef struct TNimObject TNimObject;
  typedef struct TNimType TNimType;
  typedef struct TNimNode TNimNode;
  typedef struct Ttypeseq294836 Ttypeseq294836;
  typedef struct TY294960 TY294960;
  typedef struct Tloc294816 Tloc294816;
  typedef struct Ropeobj180006 Ropeobj180006;
  typedef struct TY294929 TY294929;
  typedef struct Tstrtable294806 Tstrtable294806;
  typedef struct Tsymseq294804 Tsymseq294804;
  typedef struct Tlib294820 Tlib294820;
  typedef struct TY205018 TY205018;
  typedef struct Tsametypeclosure326433 Tsametypeclosure326433;
  typedef struct TY326446 TY326446;
  typedef struct TY326447 TY326447;
  typedef struct Intset270030 Intset270030;
  typedef struct Trunk270026 Trunk270026;
  typedef struct Trunkseq270028 Trunkseq270028;
  typedef struct Cell47304 Cell47304;
  typedef struct Cellseq47320 Cellseq47320;
  typedef struct Gcheap49818 Gcheap49818;
  typedef struct Gcstack49816 Gcstack49816;
  typedef struct Memregion29486 Memregion29486;
  typedef struct Smallchunk29440 Smallchunk29440;
  typedef struct Llchunk29480 Llchunk29480;
  typedef struct Bigchunk29442 Bigchunk29442;
  typedef struct Intset29414 Intset29414;
  typedef struct Trunk29410 Trunk29410;
  typedef struct Avlnode29484 Avlnode29484;
  typedef struct Gcstat49814 Gcstat49814;
  typedef struct Cellset47316 Cellset47316;
  typedef struct Pagedesc47312 Pagedesc47312;
  typedef struct TY294961 TY294961;
  typedef struct Tinstantiation294824 Tinstantiation294824;
  typedef struct Tlistentry148007 Tlistentry148007;
  typedef struct Basechunk29438 Basechunk29438;
  typedef struct Freecell29430 Freecell29430;
  struct  Tlineinfo193336  {
  NI16 line;
  NI16 col;
  NI32 fileindex;
  };
  typedef NU16 Tnodeflag294427Set;
  typedef NU8 Tnodekind294020;
  struct  TGenericSeq  {
  NI len;
  NI reserved;
  };
  struct  NimStringDesc  {
    TGenericSeq Sup;
  NIM_CHAR data[SEQ_DECL_SIZE];
  };
  struct  Tnode294802  {
  Ttype294840* typ;
  Tlineinfo193336 info;
  Tnodeflag294427Set flags;
  Tnodekind294020 kind;
  union{
  struct {NI64 intval;
  } S1;
  struct {NF floatval;
  } S2;
  struct {NimStringDesc* strval;
  } S3;
  struct {Tsym294834* sym;
  } S4;
  struct {Tident201010* ident;
  } S5;
  struct {Tnodeseq294796* sons;
  } S6;
  } kindU;
  NimStringDesc* comment;
  };
  typedef NU8 Ordinaltype330862;
  typedef NU64 Ttypekind294244Set;
  typedef NU8 Tnimkind3403;
  typedef NU8 Tnimtypeflag3409Set;
  typedef N_NIMCALL_PTR(void, TY3489) (void* p0, NI op0);
  typedef N_NIMCALL_PTR(void*, TY3494) (void* p0);
  struct  TNimType  {
  NI size;
  Tnimkind3403 kind;
  Tnimtypeflag3409Set flags;
  TNimType* base;
  TNimNode* node;
  void* finalizer;
  TY3489 marker;
  TY3494 deepcopy;
  };
  struct  TNimObject  {
  TNimType* m_type;
  };
  struct  Tidobj201004  {
    TNimObject Sup;
  NI id;
  };
  typedef NU8 Ttypekind294244;
  typedef NU8 Tcallingconvention294002;
  typedef NU32 Ttypeflag294431Set;
  typedef NU8 Tlockind294808;
  typedef NU8 Tstorageloc294812;
  typedef NU16 Tlocflag294810Set;
  struct  Tloc294816  {
  Tlockind294808 k;
  Tstorageloc294812 s;
  Tlocflag294810Set flags;
  Ttype294840* t;
  Ropeobj180006* r;
  };
  struct  Ttype294840  {
    Tidobj201004 Sup;
  Ttypekind294244 kind;
  Tcallingconvention294002 callconv;
  Ttypeflag294431Set flags;
  Ttypeseq294836* sons;
  Tnode294802* n;
  Tsym294834* owner;
  Tsym294834* sym;
  Tsym294834* destructor;
  Tsym294834* deepcopy;
  Tsym294834* assignment;
  TY294960* methods;
  NI64 size;
  NI16 align;
  NI16 locklevel;
  Tloc294816 loc;
  };
  typedef NU8 Tprefereddesc322011;
  typedef NU8 Tsymkind294435;
  struct  Tstrtable294806  {
  NI counter;
  Tsymseq294804* data;
  };
  typedef NU16 Tmagic294524;
  typedef NU32 Tsymflag294184Set;
  typedef NU32 Toption171009Set;
  struct  Tsym294834  {
    Tidobj201004 Sup;
  Tsymkind294435 kind;
  union{
  struct {Ttypeseq294836* typeinstcache;
  } S1;
  struct {TY294929* procinstcache;
  Tsym294834* gcunsafetyreason;
  } S2;
  struct {TY294929* usedgenerics;
  Tstrtable294806 tab;
  } S3;
  struct {Tsym294834* guard;
  NI bitsize;
  } S4;
  } kindU;
  Tmagic294524 magic;
  Ttype294840* typ;
  Tident201010* name;
  Tlineinfo193336 info;
  Tsym294834* owner;
  Tsymflag294184Set flags;
  Tnode294802* ast;
  Toption171009Set options;
  NI position;
  NI offset;
  Tloc294816 loc;
  Tlib294820* annex;
  Tnode294802* constraint;
  };
  typedef NU8 Tsymflag294184;
  struct  Tident201010  {
    Tidobj201004 Sup;
  NimStringDesc* s;
  Tident201010* next;
  NI h;
  };
  typedef NU8 Ttypeflag294431;
  typedef NimStringDesc* TY324406[63];
  struct TY205018 {
  NimStringDesc* Field0;
  NI Field1;
  };
  typedef NU8 Trenderflag313004Set;
  typedef NimStringDesc* TY294016[10];
  typedef NU8 Tdistinctcompare326427;
  typedef NU8 Ttypecmpflag326429Set;
  struct  Tsametypeclosure326433  {
  Tdistinctcompare326427 cmp;
  NI reccheck;
  Ttypecmpflag326429Set flags;
  TY326446* s;
  };
  typedef NU8 Ttypecmpflag326429;
  struct TY326447 {
  NI Field0;
  NI Field1;
  };
  typedef NU8 Tnimnodekind3405;
  struct  TNimNode  {
  Tnimnodekind3405 kind;
  NI offset;
  TNimType* typ;
  NCSTRING name;
  NI len;
  TNimNode** sons;
  };
  typedef N_NIMCALL_PTR(NIM_BOOL, Ttypeiter322025) (Ttype294840* t0, TNimObject* closure0);
  struct  Intset270030  {
  NI counter;
  NI max;
  Trunk270026* head;
  Trunkseq270028* data;
  };
  typedef NU16 Tmsgkind193002;
  typedef NU8 Tparamsequality322060;
  typedef NU8 Ttypeallowedflag329032Set;
  typedef NU8 Ttypeallowedflag329032;
  struct  Cell47304  {
  NI refcount;
  TNimType* typ;
  };
  struct  Cellseq47320  {
  NI len;
  NI cap;
  Cell47304** d;
  };
  typedef Smallchunk29440* TY29501[512];
  typedef Trunk29410* Trunkbuckets29412[256];
  struct  Intset29414  {
  Trunkbuckets29412 data;
  };
  struct  Memregion29486  {
  NI minlargeobj;
  NI maxlargeobj;
  TY29501 freesmallchunks;
  Llchunk29480* llmem;
  NI currmem;
  NI maxmem;
  NI freemem;
  NI lastsize;
  Bigchunk29442* freechunkslist;
  Intset29414 chunkstarts;
  Avlnode29484* root;
  Avlnode29484* deleted;
  Avlnode29484* last;
  Avlnode29484* freeavlnodes;
  NIM_BOOL locked;
  };
  struct  Gcstat49814  {
  NI stackscans;
  NI cyclecollections;
  NI maxthreshold;
  NI maxstacksize;
  NI maxstackcells;
  NI cycletablesize;
  NI64 maxpause;
  };
  struct  Cellset47316  {
  NI counter;
  NI max;
  Pagedesc47312* head;
  Pagedesc47312** data;
  };
  struct  Gcheap49818  {
  Gcstack49816* stack;
  void* stackbottom;
  NI cyclethreshold;
  Cellseq47320 zct;
  Cellseq47320 decstack;
  Cellseq47320 tempstack;
  NI recgclock;
  Memregion29486 region;
  Gcstat49814 stat;
  Cellset47316 marked;
  Cellseq47320 additionalroots;
  };
  typedef NimStringDesc* TY194732[1];
  typedef N_NIMCALL_PTR(NIM_BOOL, Ttypepredicate322029) (Ttype294840* t0);
  typedef NU8 Ttypefieldresult322145;
  struct TY294961 {
  NI Field0;
  Tsym294834* Field1;
  };
  struct  Ropeobj180006  {
    TNimObject Sup;
  Ropeobj180006* left;
  Ropeobj180006* right;
  NI length;
  NimStringDesc* data;
  };
  struct  Tlistentry148007  {
    TNimObject Sup;
  Tlistentry148007* prev;
  Tlistentry148007* next;
  };
  typedef NU8 Tlibkind294818;
  struct  Tlib294820  {
    Tlistentry148007 Sup;
  Tlibkind294818 kind;
  NIM_BOOL generated;
  NIM_BOOL isoverriden;
  Ropeobj180006* name;
  Tnode294802* path;
  };
  typedef NI TY29419[8];
  struct  Trunk270026  {
  Trunk270026* next;
  NI key;
  TY29419 bits;
  };
  struct  Gcstack49816  {
  Gcstack49816* prev;
  Gcstack49816* next;
  void* starts;
  void* pos;
  NI maxstacksize;
  };
  struct  Basechunk29438  {
  NI prevsize;
  NI size;
  NIM_BOOL used;
  };
  struct  Smallchunk29440  {
    Basechunk29438 Sup;
  Smallchunk29440* next;
  Smallchunk29440* prev;
  Freecell29430* freelist;
  NI free;
  NI acc;
  NF data;
  };
  struct  Llchunk29480  {
  NI size;
  NI acc;
  Llchunk29480* next;
  };
  struct  Bigchunk29442  {
    Basechunk29438 Sup;
  Bigchunk29442* next;
  Bigchunk29442* prev;
  NI align;
  NF data;
  };
  struct  Trunk29410  {
  Trunk29410* next;
  NI key;
  TY29419 bits;
  };
  typedef Avlnode29484* TY29491[2];
  struct  Avlnode29484  {
  TY29491 link;
  NI key;
  NI upperbound;
  NI level;
  };
  struct  Pagedesc47312  {
  Pagedesc47312* next;
  NI key;
  TY29419 bits;
  };
  struct  Tinstantiation294824  {
  Tsym294834* sym;
  Ttypeseq294836* concretetypes;
  NI compilesid;
  };
  struct  Freecell29430  {
  Freecell29430* next;
  NI zerofield;
  };
  struct TY326446 {
    TGenericSeq Sup;
    TY326447 data[SEQ_DECL_SIZE];
  };
  struct Ttypeseq294836 {
    TGenericSeq Sup;
    Ttype294840* data[SEQ_DECL_SIZE];
  };
  struct Tnodeseq294796 {
    TGenericSeq Sup;
    Tnode294802* data[SEQ_DECL_SIZE];
  };
  struct TY294960 {
    TGenericSeq Sup;
    TY294961 data[SEQ_DECL_SIZE];
  };
  struct TY294929 {
    TGenericSeq Sup;
    Tinstantiation294824* data[SEQ_DECL_SIZE];
  };
  struct Tsymseq294804 {
    TGenericSeq Sup;
    Tsym294834* data[SEQ_DECL_SIZE];
  };
  struct Trunkseq270028 {
    TGenericSeq Sup;
    Trunk270026* data[SEQ_DECL_SIZE];
  };
  N_NIMCALL(Ordinaltype330862, classify_330866_3876443242)(Ttype294840* t0);
  N_NIMCALL(Ttype294840*, skiptypes_298099_850551059)(Ttype294840* t0, Ttypekind294244Set kinds0);
  N_NIMCALL(NimStringDesc*, copyString)(NimStringDesc* src0);
  static N_INLINE(NIM_BOOL, isintlit_322233_3876443242)(Ttype294840* t0);
  static N_INLINE(void, appendString)(NimStringDesc* dest0, NimStringDesc* src0);
  static N_INLINE(void, copymem_7485_1689653243)(void* dest0, void* source0, NI size0);
  N_NIMCALL(NimStringDesc*, nimInt64ToStr)(NI64 x0);
  N_NIMCALL(NimStringDesc*, rawNewString)(NI space0);
  static N_INLINE(void, appendChar)(NimStringDesc* dest0, NIM_CHAR c0);
  static N_INLINE(void, addtypeflags_324411_3876443242)(NimStringDesc** name0, Ttype294840* typ0);
  N_NIMCALL(NimStringDesc*, resizeString)(NimStringDesc* dest0, NI addlen0);
  N_NIMCALL(NimStringDesc*, typetostring_322017_3876443242)(Ttype294840* typ0, Tprefereddesc322011 prefer0);
  N_NIMCALL(NI, sonslen_297327_850551059)(Ttype294840* n0);
  N_NIMCALL(NimStringDesc*, addChar)(NimStringDesc* s0, NIM_CHAR c0);
  N_NIMCALL(Ttype294840*, base_322021_3876443242)(Ttype294840* t0);
  N_NIMCALL(NI, len_297339_850551059)(Ttype294840* n0);
  N_NIMCALL(void, internalerror_198113_155036129)(NimStringDesc* errmsg0);
  N_NIMCALL(NimStringDesc*, HEX24_198185_1689653243)(TY205018 x0);
  N_NIMCALL(NimStringDesc*, rendertree_313044_382274130)(Tnode294802* n0, Trenderflag313004Set renderflags0);
  N_NIMCALL(NimStringDesc*, rangetostr_324224_3876443242)(Tnode294802* n0);
  N_NIMCALL(NimStringDesc*, valuetostring_324217_3876443242)(Tnode294802* a0);
  N_NIMCALL(NimStringDesc*, nimFloatToStr)(NF f0);
  N_NIMCALL(NI, sonslen_297351_850551059)(Tnode294802* n0);
  N_NIMCALL(NimStringDesc*, setLengthStr)(NimStringDesc* s0, NI newlen0);
  static N_INLINE(NI, len_295081_850551059)(Tnode294802* n0);
  static N_INLINE(Tnode294802*, HEX5BHEX5D_295238_850551059)(Tnode294802* n0, NI i0);
  static N_INLINE(void, addsep_109376_4286263276)(NimStringDesc** dest0, NimStringDesc* sep0, NI startlen0);
  N_NIMCALL(NimStringDesc*, HEX24_297069_850551059)(NI16 x0);
  N_NIMCALL(NimStringDesc*, nsuFormatSingleElem)(NimStringDesc* formatstr0, NimStringDesc* a0);
  N_NIMCALL(Ttype294840*, elemtype_322394_3876443242)(Ttype294840* t0);
  N_NIMCALL(Ttype294840*, lastson_297377_850551059)(Ttype294840* n0);
  N_NIMCALL(void, initsametypeclosure_326453_3876443242)(Tsametypeclosure326433* Result);
  N_NOINLINE(void, chckNil)(void* p0);
  N_NIMCALL(NIM_BOOL, sametypeaux_326585_3876443242)(Ttype294840* x0, Ttype294840* y0, Tsametypeclosure326433* c0);
  N_NIMCALL(Ttype294840*, skipgenericalias_327481_3876443242)(Ttype294840* t0);
  N_NIMCALL(NIM_BOOL, isgenericalias_327459_3876443242)(Ttype294840* t0);
  static N_INLINE(NIM_BOOL, sameflags_327497_3876443242)(Ttype294840* a0, Ttype294840* b0);
  N_NIMCALL(NIM_BOOL, exprstructuralequivalent_320311_2616423590)(Tnode294802* a0, Tnode294802* b0, NIM_BOOL strictsymequality0);
  N_NIMCALL(NIM_BOOL, containsorincl_326456_3876443242)(Tsametypeclosure326433* c0, Ttype294840* a0, Ttype294840* b0);
  static N_INLINE(NIM_BOOL, contains_326474_1689653243)(TY326447* a0, NI a0Len0, TY326447 item0);
  static N_INLINE(NI, find_326484_1689653243)(TY326447* a0, NI a0Len0, TY326447 item0);
  N_NIMCALL(NIM_BOOL, HEX3DHEX3D_326520_1689653243)(TY326447 x0, TY326447 y0);
  N_NIMCALL(void, T3876443242_114)(void* p, NI op);
  N_NIMCALL(void*, newSeq)(TNimType* typ0, NI len0);
  N_NIMCALL(void, unsureAsgnRef)(void** dest0, void* src0);
  N_NIMCALL(TGenericSeq*, incrSeqV2)(TGenericSeq* seq0, NI elemsize0);
  N_NIMCALL(NIM_BOOL, sameobjectstructures_327405_3876443242)(Ttype294840* a0, Ttype294840* b0, Tsametypeclosure326433* c0);
  N_NIMCALL(NIM_BOOL, sametypeornilaux_326591_3876443242)(Ttype294840* a0, Ttype294840* b0, Tsametypeclosure326433* c0);
  N_NIMCALL(NIM_BOOL, sameobjecttree_327282_3876443242)(Tnode294802* a0, Tnode294802* b0, Tsametypeclosure326433* c0);
  static N_INLINE(NIM_BOOL, eqStrings)(NimStringDesc* a0, NimStringDesc* b0);
  static N_INLINE(NIM_BOOL, equalmem_7495_1689653243)(void* a0, void* b0, NI size0);
  N_NIMCALL(NIM_BOOL, sametuple_327040_3876443242)(Ttype294840* a0, Ttype294840* b0, Tsametypeclosure326433* c0);
  N_NIMCALL(void, internalerror_198100_155036129)(Tlineinfo193336 info0, NimStringDesc* errmsg0);
  N_NIMCALL(NIM_BOOL, samechildrenaux_327432_3876443242)(Ttype294840* a0, Ttype294840* b0, Tsametypeclosure326433* c0);
  N_NIMCALL(NIM_BOOL, sameconstraints_326763_3876443242)(Tnode294802* a0, Tnode294802* b0);
  N_NIMCALL(NIM_BOOL, samevalue_301169_2984716966)(Tnode294802* a0, Tnode294802* b0);
  N_NIMCALL(NIM_BOOL, iterovertype_322049_3876443242)(Ttype294840* t0, Ttypeiter322025 iter0, TNimObject* closure0);
  N_NIMCALL(void, initintset_270885_2627731572)(Intset270030* Result);
  N_NIMCALL(NIM_BOOL, iterovertypeaux_323061_3876443242)(Intset270030* marker0, Ttype294840* t0, Ttypeiter322025 iter0, TNimObject* closure0);
  N_NIMCALL(NIM_BOOL, containsorincl_270862_2627731572)(Intset270030* s0, NI key0);
  N_NIMCALL(NIM_BOOL, iterovernode_323068_3876443242)(Intset270030* marker0, Tnode294802* n0, Ttypeiter322025 iter0, TNimObject* closure0);
  N_NIMCALL(NIM_BOOL, containsgenerictypeiter_330213_3876443242)(Ttype294840* t0, TNimObject* closure0);
  N_NIMCALL(NI64, firstord_322001_3876443242)(Ttype294840* t0);
  N_NIMCALL(NI64, getordvalue_322129_3876443242)(Tnode294802* n0);
  N_NIMCALL(void, localerror_198080_155036129)(Tlineinfo193336 info0, Tmsgkind193002 msg0, NimStringDesc* arg0);
  N_NIMCALL(NimStringDesc*, reprEnum)(NI e0, TNimType* typ0);
  N_NIMCALL(NI64, lastord_322004_3876443242)(Ttype294840* t0);
  N_NIMCALL(NI64, lengthord_322007_3876443242)(Ttype294840* t0);
  N_NIMCALL(NIM_BOOL, isordinaltype_322068_3876443242)(Ttype294840* t0);
  N_NIMCALL(NIM_BOOL, compatibleeffectsaux_330375_3876443242)(Tnode294802* se0, Tnode294802* re0);
  N_NIMCALL(NI, safeinheritancediff_330352_3876443242)(Ttype294840* a0, Ttype294840* b0);
  N_NIMCALL(NI, inheritancediff_328252_3876443242)(Ttype294840* a0, Ttype294840* b0);
  N_NIMCALL(NIM_BOOL, sameobjecttypes_327219_3876443242)(Ttype294840* a0, Ttype294840* b0);
  N_NIMCALL(NIM_BOOL, isemptycontainer_330930_3876443242)(Ttype294840* t0);
  N_NIMCALL(NI64, computesize_322132_3876443242)(Ttype294840* typ0);
  N_NIMCALL(NI64, computesizeaux_329857_3876443242)(Ttype294840* typ0, NI64* a0);
  N_NIMCALL(NI64, align_329849_3876443242)(NI64 address0, NI64 alignment0);
  N_NIMCALL(NIM_BOOL, isobjectwithtypefieldpredicate_323509_3876443242)(Ttype294840* t0);
  N_NIMCALL(NI64, computerecsizeaux_329862_3876443242)(Tnode294802* n0, NI64* a0, NI64* curroffset0);
  N_NIMCALL(Tnode294802*, lastson_297364_850551059)(Tnode294802* n0);
  N_NIMCALL(NIM_BOOL, sametype_326633_3876443242)(Ttype294840* a0, Ttype294840* b0, Ttypecmpflag326429Set flags0);
  N_NIMCALL(void, incl_270832_2627731572)(Intset270030* s0, NI key0);
  N_NIMCALL(NIM_BOOL, contains_270811_2627731572)(Intset270030* s0, NI key0);
  N_NIMCALL(Tparamsequality322060, equalparam_326686_3876443242)(Tsym294834* a0, Tsym294834* b0);
  N_NIMCALL(NIM_BOOL, sametypeornil_326643_3876443242)(Ttype294840* a0, Ttype294840* b0, Ttypecmpflag326429Set flags0);
  N_NIMCALL(Ttype294840*, typeallowedaux_329038_3876443242)(Intset270030* marker0, Ttype294840* typ0, Tsymkind294435 kind0, Ttypeallowedflag329032Set flags_329046_3876443242);
  N_NIMCALL(Ttype294840*, typeallowednode_329047_3876443242)(Intset270030* marker0, Tnode294802* n0, Tsymkind294435 kind0, Ttypeallowedflag329032Set flags0);
  N_NIMCALL(Ttype294840*, copytype_297470_850551059)(Ttype294840* t0, Tsym294834* owner0, NIM_BOOL keepid0);
  static N_INLINE(void, asgnRefNoCycle)(void** dest0, void* src0);
  static N_INLINE(Cell47304*, usrtocell_51440_1689653243)(void* usr0);
  static N_INLINE(void, rtladdzct_52601_1689653243)(Cell47304* c0);
  N_NOINLINE(void, addzct_51417_1689653243)(Cellseq47320* s0, Cell47304* c0);
  N_NIMCALL(NimStringDesc*, msgkindtostring_194723_155036129)(Tmsgkind193002 kind0);
  N_NIMCALL(NimStringDesc*, nsuFormatOpenArray)(NimStringDesc* formatstr0, NimStringDesc** a0, NI a0Len0);
  N_NIMCALL(Ttype294840*, taketype_330952_3876443242)(Ttype294840* formal0, Ttype294840* arg0);
  N_NIMCALL(Tnode294802*, copytree_298822_850551059)(Tnode294802* src0);
  N_NIMCALL(Tnode294802*, skipconv_330882_3876443242)(Tnode294802* n0);
  N_NIMCALL(NIM_BOOL, searchtypefor_323485_3876443242)(Ttype294840* t0, Ttypepredicate322029 predicate0);
  N_NIMCALL(NIM_BOOL, searchtypeforaux_323169_3876443242)(Ttype294840* t0, Ttypepredicate322029 predicate0, Intset270030* marker0);
  N_NIMCALL(NIM_BOOL, searchtypenodeforaux_323175_3876443242)(Tnode294802* n0, Ttypepredicate322029 p0, Intset270030* marker0);
  N_NIMCALL(NIM_BOOL, isgcref_323711_3876443242)(Ttype294840* t0);
  N_NIMCALL(NIM_BOOL, canformacycleaux_323801_3876443242)(Intset270030* marker0, Ttype294840* typ0, NI startid0);
  N_NIMCALL(NIM_BOOL, canformacyclenode_323807_3876443242)(Intset270030* marker0, Tnode294802* n0, NI startid0);
  N_NIMCALL(Ttypefieldresult322145, analyseobjectwithtypefieldaux_323584_3876443242)(Ttype294840* t0, Intset270030* marker0);
  N_NIMCALL(NIM_BOOL, ishiddenpointer_323782_3876443242)(Ttype294840* t0);
  static N_INLINE(NIM_BOOL, iscompiletimeonly_330706_3876443242)(Ttype294840* t0);
  N_NIMCALL(NIM_BOOL, HEX3DHEX3D_330727_1689653243)(Ttypeseq294836* x0, Ttypeseq294836* y0);
  STRING_LITERAL(T3876443242_2, "", 0);
  STRING_LITERAL(T3876443242_3, " literal(", 9);
  STRING_LITERAL(T3876443242_4, ")", 1);
  STRING_LITERAL(T3876443242_5, " not nil", 8);
  STRING_LITERAL(T3876443242_6, "None", 4);
  STRING_LITERAL(T3876443242_7, "bool", 4);
  STRING_LITERAL(T3876443242_8, "Char", 4);
  STRING_LITERAL(T3876443242_9, "empty", 5);
  STRING_LITERAL(T3876443242_10, "Array Constructor [$1]", 22);
  STRING_LITERAL(T3876443242_11, "nil", 3);
  STRING_LITERAL(T3876443242_12, "untyped", 7);
  STRING_LITERAL(T3876443242_13, "typed", 5);
  STRING_LITERAL(T3876443242_14, "typeDesc", 8);
  STRING_LITERAL(T3876443242_15, "GenericInvocation", 17);
  STRING_LITERAL(T3876443242_16, "GenericBody", 11);
  STRING_LITERAL(T3876443242_17, "GenericInst", 11);
  STRING_LITERAL(T3876443242_18, "GenericParam", 12);
  STRING_LITERAL(T3876443242_19, "distinct $1", 11);
  STRING_LITERAL(T3876443242_20, "enum", 4);
  STRING_LITERAL(T3876443242_21, "ordinal[$1]", 11);
  STRING_LITERAL(T3876443242_22, "array[$1, $2]", 13);
  STRING_LITERAL(T3876443242_23, "object", 6);
  STRING_LITERAL(T3876443242_24, "tuple", 5);
  STRING_LITERAL(T3876443242_25, "set[$1]", 7);
  STRING_LITERAL(T3876443242_26, "range[$1]", 9);
  STRING_LITERAL(T3876443242_27, "ptr ", 4);
  STRING_LITERAL(T3876443242_28, "ref ", 4);
  STRING_LITERAL(T3876443242_29, "var ", 4);
  STRING_LITERAL(T3876443242_30, "seq[$1]", 7);
  STRING_LITERAL(T3876443242_31, "proc", 4);
  STRING_LITERAL(T3876443242_32, "pointer", 7);
  STRING_LITERAL(T3876443242_33, "OpenArray[$1]", 13);
  STRING_LITERAL(T3876443242_34, "string", 6);
  STRING_LITERAL(T3876443242_35, "CString", 7);
  STRING_LITERAL(T3876443242_36, "Forward", 7);
  STRING_LITERAL(T3876443242_37, "int", 3);
  STRING_LITERAL(T3876443242_38, "int8", 4);
  STRING_LITERAL(T3876443242_39, "int16", 5);
  STRING_LITERAL(T3876443242_40, "int32", 5);
  STRING_LITERAL(T3876443242_41, "int64", 5);
  STRING_LITERAL(T3876443242_42, "float", 5);
  STRING_LITERAL(T3876443242_43, "float32", 7);
  STRING_LITERAL(T3876443242_44, "float64", 7);
  STRING_LITERAL(T3876443242_45, "float128", 8);
  STRING_LITERAL(T3876443242_46, "uint", 4);
  STRING_LITERAL(T3876443242_47, "uint8", 5);
  STRING_LITERAL(T3876443242_48, "uint16", 6);
  STRING_LITERAL(T3876443242_49, "uint32", 6);
  STRING_LITERAL(T3876443242_50, "uint64", 6);
  STRING_LITERAL(T3876443242_51, "bignum", 6);
  STRING_LITERAL(T3876443242_52, "const ", 6);
  STRING_LITERAL(T3876443242_53, "!", 1);
  STRING_LITERAL(T3876443242_54, "varargs[$1]", 11);
  STRING_LITERAL(T3876443242_55, "iter[$1]", 8);
  STRING_LITERAL(T3876443242_56, "Error Type", 10);
  STRING_LITERAL(T3876443242_57, "BuiltInTypeClass", 16);
  STRING_LITERAL(T3876443242_58, "UserTypeClass", 13);
  STRING_LITERAL(T3876443242_59, "UserTypeClassInst", 17);
  STRING_LITERAL(T3876443242_60, "CompositeTypeClass", 18);
  STRING_LITERAL(T3876443242_61, "and", 3);
  STRING_LITERAL(T3876443242_62, "or", 2);
  STRING_LITERAL(T3876443242_63, "not", 3);
  STRING_LITERAL(T3876443242_64, "any", 3);
  STRING_LITERAL(T3876443242_65, "static", 6);
  STRING_LITERAL(T3876443242_66, "TypeFromExpr", 12);
  STRING_LITERAL(T3876443242_67, "FieldAccessor", 13);
  STRING_LITERAL(T3876443242_68, "void", 4);
  NIM_CONST TY324406 typetostr_324403_3876443242 = {((NimStringDesc*) &T3876443242_6),
  ((NimStringDesc*) &T3876443242_7),
  ((NimStringDesc*) &T3876443242_8),
  ((NimStringDesc*) &T3876443242_9),
  ((NimStringDesc*) &T3876443242_10),
  ((NimStringDesc*) &T3876443242_11),
  ((NimStringDesc*) &T3876443242_12),
  ((NimStringDesc*) &T3876443242_13),
  ((NimStringDesc*) &T3876443242_14),
  ((NimStringDesc*) &T3876443242_15),
  ((NimStringDesc*) &T3876443242_16),
  ((NimStringDesc*) &T3876443242_17),
  ((NimStringDesc*) &T3876443242_18),
  ((NimStringDesc*) &T3876443242_19),
  ((NimStringDesc*) &T3876443242_20),
  ((NimStringDesc*) &T3876443242_21),
  ((NimStringDesc*) &T3876443242_22),
  ((NimStringDesc*) &T3876443242_23),
  ((NimStringDesc*) &T3876443242_24),
  ((NimStringDesc*) &T3876443242_25),
  ((NimStringDesc*) &T3876443242_26),
  ((NimStringDesc*) &T3876443242_27),
  ((NimStringDesc*) &T3876443242_28),
  ((NimStringDesc*) &T3876443242_29),
  ((NimStringDesc*) &T3876443242_30),
  ((NimStringDesc*) &T3876443242_31),
  ((NimStringDesc*) &T3876443242_32),
  ((NimStringDesc*) &T3876443242_33),
  ((NimStringDesc*) &T3876443242_34),
  ((NimStringDesc*) &T3876443242_35),
  ((NimStringDesc*) &T3876443242_36),
  ((NimStringDesc*) &T3876443242_37),
  ((NimStringDesc*) &T3876443242_38),
  ((NimStringDesc*) &T3876443242_39),
  ((NimStringDesc*) &T3876443242_40),
  ((NimStringDesc*) &T3876443242_41),
  ((NimStringDesc*) &T3876443242_42),
  ((NimStringDesc*) &T3876443242_43),
  ((NimStringDesc*) &T3876443242_44),
  ((NimStringDesc*) &T3876443242_45),
  ((NimStringDesc*) &T3876443242_46),
  ((NimStringDesc*) &T3876443242_47),
  ((NimStringDesc*) &T3876443242_48),
  ((NimStringDesc*) &T3876443242_49),
  ((NimStringDesc*) &T3876443242_50),
  ((NimStringDesc*) &T3876443242_51),
  ((NimStringDesc*) &T3876443242_52),
  ((NimStringDesc*) &T3876443242_53),
  ((NimStringDesc*) &T3876443242_54),
  ((NimStringDesc*) &T3876443242_55),
  ((NimStringDesc*) &T3876443242_56),
  ((NimStringDesc*) &T3876443242_57),
  ((NimStringDesc*) &T3876443242_58),
  ((NimStringDesc*) &T3876443242_59),
  ((NimStringDesc*) &T3876443242_60),
  ((NimStringDesc*) &T3876443242_61),
  ((NimStringDesc*) &T3876443242_62),
  ((NimStringDesc*) &T3876443242_63),
  ((NimStringDesc*) &T3876443242_64),
  ((NimStringDesc*) &T3876443242_65),
  ((NimStringDesc*) &T3876443242_66),
  ((NimStringDesc*) &T3876443242_67),
  ((NimStringDesc*) &T3876443242_68)}
  ;
  STRING_LITERAL(T3876443242_69, "int literal(", 12);
  STRING_LITERAL(T3876443242_70, ", ", 2);
  STRING_LITERAL(T3876443242_71, "typedesc", 8);
  STRING_LITERAL(T3876443242_72, "typedesc[", 9);
  STRING_LITERAL(T3876443242_73, "]", 1);
  STRING_LITERAL(T3876443242_75, "compiler/types.nim", 18);
  NIM_CONST TY205018 T3876443242_74 = {((NimStringDesc*) &T3876443242_75),
  ((NI) 456)}
  ;
  STRING_LITERAL(T3876443242_76, "static[", 7);
  STRING_LITERAL(T3876443242_77, "(", 1);
  NIM_CONST TY205018 T3876443242_78 = {((NimStringDesc*) &T3876443242_75),
  ((NI) 463)}
  ;
  STRING_LITERAL(T3876443242_79, "var", 3);
  STRING_LITERAL(T3876443242_80, "ref", 3);
  STRING_LITERAL(T3876443242_81, "ptr", 3);
  STRING_LITERAL(T3876443242_82, "seq", 3);
  STRING_LITERAL(T3876443242_83, "array", 5);
  STRING_LITERAL(T3876443242_84, "set", 3);
  STRING_LITERAL(T3876443242_85, "range", 5);
  STRING_LITERAL(T3876443242_86, "distinct", 8);
  STRING_LITERAL(T3876443242_87, "openarray", 9);
  STRING_LITERAL(T3876443242_88, "[", 1);
  STRING_LITERAL(T3876443242_89, " and ", 5);
  STRING_LITERAL(T3876443242_90, " or ", 4);
  STRING_LITERAL(T3876443242_91, "not ", 4);
  NIM_CONST TY205018 T3876443242_92 = {((NimStringDesc*) &T3876443242_75),
  ((NI) 494)}
  ;
  STRING_LITERAL(T3876443242_93, "array[", 6);
  STRING_LITERAL(T3876443242_94, "<invalid value>", 15);
  STRING_LITERAL(T3876443242_95, "..", 2);
  STRING_LITERAL(T3876443242_96, "Array constructor[", 18);
  STRING_LITERAL(T3876443242_97, "seq[", 4);
  STRING_LITERAL(T3876443242_98, "ordinal[", 8);
  STRING_LITERAL(T3876443242_99, "set[", 4);
  STRING_LITERAL(T3876443242_100, "openarray[", 10);
  STRING_LITERAL(T3876443242_101, "distinct ", 9);
  STRING_LITERAL(T3876443242_102, "tuple[", 6);
  STRING_LITERAL(T3876443242_103, ": ", 2);
  STRING_LITERAL(T3876443242_104, "tuple[]", 7);
  STRING_LITERAL(T3876443242_105, "range ", 6);
  STRING_LITERAL(T3876443242_106, "iterator (", 10);
  STRING_LITERAL(T3876443242_107, "proc (", 6);
  extern NIM_CONST TY294016 Callingconvtostr_294013_850551059;
  STRING_LITERAL(T3876443242_108, "noSideEffect", 12);
  STRING_LITERAL(T3876443242_109, "gcsafe", 6);
  STRING_LITERAL(T3876443242_110, "locks: ", 7);
  STRING_LITERAL(T3876443242_111, "{.", 2);
  STRING_LITERAL(T3876443242_112, ".}", 2);
  STRING_LITERAL(T3876443242_115, "sameTuple", 9);
  NIM_CONST TY205018 T3876443242_116 = {((NimStringDesc*) &T3876443242_75),
  ((NI) 742)}
  ;
  STRING_LITERAL(T3876443242_117, "invalid kind for first(", 23);
  STRING_LITERAL(T3876443242_118, "invalid kind for last(", 22);
  NIM_CONST Ttypekind294244Set abstractinst_322082_3876443242 = IL64(211106232576256);
  NIM_CONST TY205018 T3876443242_119 = {((NimStringDesc*) &T3876443242_75),
  ((NI) 1392)}
  ;
  NIM_CONST TY205018 T3876443242_120 = {((NimStringDesc*) &T3876443242_75),
  ((NI) 1393)}
  ;
  STRING_LITERAL(T3876443242_121, "getProcHeader", 13);
  STRING_LITERAL(T3876443242_122, "computeRecSizeAux(record case branch)", 37);
  STRING_LITERAL(T3876443242_123, "getSize: ", 9);
  NIM_CONST TY205018 T3876443242_124 = {((NimStringDesc*) &T3876443242_75),
  ((NI) 1369)}
  ;
  STRING_LITERAL(T3876443242_125, " = ", 3);
  STRING_LITERAL(T3876443242_126, ") ", 2);
  STRING_LITERAL(T3876443242_127, "searchTypeNodeForAux(record case branch)", 40);
  STRING_LITERAL(T3876443242_128, "searchTypeNodeForAux()", 22);
  TNimType NTI326447; /* tuple[a: int, b: int] */
  extern TNimType NTI104; /* int */
  TNimType NTI326446; /* seq[tuple[a: int, b: int]] */
  extern NI intsize_178641_4151366050;
  extern TNimType NTI294244; /* TTypeKind */
  extern NI floatsize_178642_4151366050;
  extern NI ptrsize_178643_4151366050;
  extern Gcheap49818 gch_49858_1689653243;
  
  N_NIMCALL(Ordinaltype330862, classify_330866_3876443242)(Ttype294840* t0) {
  	Ordinaltype330862 result0;
  	result0 = (Ordinaltype330862)0;
  	{
  		if (!(t0 == NIM_NIL)) goto LA3;
  		result0 = ((Ordinaltype330862) 0);
  	}
  	goto LA1;
  	LA3: ;
  	{
  		Ttype294840* LOC6;
  		LOC6 = (Ttype294840*)0;
  		LOC6 = skiptypes_298099_850551059(t0, IL64(211106242013440));
  		switch ((*LOC6).kind) {
  		case ((Ttypekind294244) 36) ... ((Ttypekind294244) 39):
  		{
  			result0 = ((Ordinaltype330862) 2);
  		}
  		break;
  		case ((Ttypekind294244) 31) ... ((Ttypekind294244) 35):
  		case ((Ttypekind294244) 40) ... ((Ttypekind294244) 44):
  		case ((Ttypekind294244) 1):
  		case ((Ttypekind294244) 2):
  		case ((Ttypekind294244) 14):
  		{
  			result0 = ((Ordinaltype330862) 1);
  		}
  		break;
  		default:
  		{
  			result0 = ((Ordinaltype330862) 0);
  		}
  		break;
  		}
  	}
  	LA1: ;
  	return result0;
  }
  
  N_NIMCALL(Tnode294802*, skipconv_330882_3876443242)(Tnode294802* n0) {
  	Tnode294802* result0;
  	result0 = (Tnode294802*)0;
  	result0 = n0;
  	switch ((*n0).kind) {
  	case ((Tnodekind294020) 67):
  	case ((Tnodekind294020) 66):
  	case ((Tnodekind294020) 70):
  	case ((Tnodekind294020) 68):
  	case ((Tnodekind294020) 69):
  	{
  		{
  			Ordinaltype330862 LOC4;
  			Ordinaltype330862 LOC5;
  			LOC4 = (Ordinaltype330862)0;
  			LOC4 = classify_330866_3876443242((*(*n0).kindU.S6.sons->data[((NI) 0)]).typ);
  			LOC5 = (Ordinaltype330862)0;
  			LOC5 = classify_330866_3876443242((*n0).typ);
  			if (!(LOC4 == LOC5)) goto LA6;
  			result0 = (*n0).kindU.S6.sons->data[((NI) 0)];
  		}
  		LA6: ;
  	}
  	break;
  	case ((Tnodekind294020) 58):
  	case ((Tnodekind294020) 59):
  	case ((Tnodekind294020) 60):
  	{
  		{
  			Ordinaltype330862 LOC11;
  			Ordinaltype330862 LOC12;
  			LOC11 = (Ordinaltype330862)0;
  			LOC11 = classify_330866_3876443242((*(*n0).kindU.S6.sons->data[((NI) 1)]).typ);
  			LOC12 = (Ordinaltype330862)0;
  			LOC12 = classify_330866_3876443242((*n0).typ);
  			if (!(LOC11 == LOC12)) goto LA13;
  			result0 = (*n0).kindU.S6.sons->data[((NI) 1)];
  		}
  		LA13: ;
  	}
  	break;
  	default:
  	{
  	}
  	break;
  	}
  	return result0;
  }
  
  static N_INLINE(NIM_BOOL, isintlit_322233_3876443242)(Ttype294840* t0) {
  	NIM_BOOL result0;
  	NIM_BOOL LOC1;
  	NIM_BOOL LOC2;
  	result0 = (NIM_BOOL)0;
  	LOC1 = (NIM_BOOL)0;
  	LOC2 = (NIM_BOOL)0;
  	LOC2 = ((*t0).kind == ((Ttypekind294244) 31));
  	if (!(LOC2)) goto LA3;
  	LOC2 = !(((*t0).n == NIM_NIL));
  	LA3: ;
  	LOC1 = LOC2;
  	if (!(LOC1)) goto LA4;
  	LOC1 = ((*(*t0).n).kind == ((Tnodekind294020) 6));
  	LA4: ;
  	result0 = LOC1;
  	return result0;
  }
  
  static N_INLINE(void, copymem_7485_1689653243)(void* dest0, void* source0, NI size0) {
  	void* LOC1;
  	LOC1 = (void*)0;
  	LOC1 = memcpy(dest0, source0, ((size_t) (size0)));
  }
  
  static N_INLINE(void, appendString)(NimStringDesc* dest0, NimStringDesc* src0) {
  	copymem_7485_1689653243(((void*) ((&(*dest0).data[((*dest0).Sup.len)- 0]))), ((void*) ((*src0).data)), ((NI) ((NI)((*src0).Sup.len + ((NI) 1)))));
  	(*dest0).Sup.len += (*src0).Sup.len;
  }
  
  static N_INLINE(void, appendChar)(NimStringDesc* dest0, NIM_CHAR c0) {
  	(*dest0).data[((*dest0).Sup.len)- 0] = c0;
  	(*dest0).data[((NI)((*dest0).Sup.len + ((NI) 1)))- 0] = 0;
  	(*dest0).Sup.len += ((NI) 1);
  }
  
  static N_INLINE(void, addtypeflags_324411_3876443242)(NimStringDesc** name0, Ttype294840* typ0) {
  	{
  		if (!(((*typ0).flags &(1U<<((NU)(((Ttypeflag294431) 16))&31U)))!=0)) goto LA3;
  		(*name0) = resizeString((*name0), 8);
  appendString((*name0), ((NimStringDesc*) &T3876443242_5));
  	}
  	LA3: ;
  }
  
  N_NIMCALL(Ttype294840*, base_322021_3876443242)(Ttype294840* t0) {
  	Ttype294840* result0;
  	result0 = (Ttype294840*)0;
  	result0 = (*t0).sons->data[((NI) 0)];
  	return result0;
  }
  
  N_NIMCALL(NimStringDesc*, valuetostring_324217_3876443242)(Tnode294802* a0) {
  	NimStringDesc* result0;
  	result0 = (NimStringDesc*)0;
  	switch ((*a0).kind) {
  	case ((Tnodekind294020) 5) ... ((Tnodekind294020) 15):
  	{
  		result0 = nimInt64ToStr((*a0).kindU.S1.intval);
  	}
  	break;
  	case ((Tnodekind294020) 16) ... ((Tnodekind294020) 19):
  	{
  		result0 = nimFloatToStr((*a0).kindU.S2.floatval);
  	}
  	break;
  	case ((Tnodekind294020) 20) ... ((Tnodekind294020) 22):
  	{
  		result0 = copyString((*a0).kindU.S3.strval);
  	}
  	break;
  	default:
  	{
  		result0 = copyString(((NimStringDesc*) &T3876443242_94));
  	}
  	break;
  	}
  	return result0;
  }
  
  N_NIMCALL(NimStringDesc*, rangetostr_324224_3876443242)(Tnode294802* n0) {
  	NimStringDesc* result0;
  	NimStringDesc* LOC1;
  	NimStringDesc* LOC2;
  	NimStringDesc* LOC3;
  	result0 = (NimStringDesc*)0;
  	LOC1 = (NimStringDesc*)0;
  	LOC2 = (NimStringDesc*)0;
  	LOC2 = valuetostring_324217_3876443242((*n0).kindU.S6.sons->data[((NI) 0)]);
  	LOC3 = (NimStringDesc*)0;
  	LOC3 = valuetostring_324217_3876443242((*n0).kindU.S6.sons->data[((NI) 1)]);
  	LOC1 = rawNewString(LOC2->Sup.len + LOC3->Sup.len + 2);
  appendString(LOC1, LOC2);
  appendString(LOC1, ((NimStringDesc*) &T3876443242_95));
  appendString(LOC1, LOC3);
  	result0 = LOC1;
  	return result0;
  }
  
  static N_INLINE(NI, len_295081_850551059)(Tnode294802* n0) {
  	NI result0;
  	result0 = (NI)0;
  	{
  		if (!(*n0).kindU.S6.sons == 0) goto LA3;
  		result0 = ((NI) 0);
  	}
  	goto LA1;
  	LA3: ;
  	{
  		result0 = ((*n0).kindU.S6.sons ? (*n0).kindU.S6.sons->Sup.len : 0);
  	}
  	LA1: ;
  	return result0;
  }
  
  static N_INLINE(Tnode294802*, HEX5BHEX5D_295238_850551059)(Tnode294802* n0, NI i0) {
  	Tnode294802* result0;
  	result0 = (Tnode294802*)0;
  	result0 = (*n0).kindU.S6.sons->data[i0];
  	return result0;
  }
  
  static N_INLINE(void, addsep_109376_4286263276)(NimStringDesc** dest0, NimStringDesc* sep0, NI startlen0) {
  	{
  		if (!(((NI) (startlen0)) < ((*dest0) ? (*dest0)->Sup.len : 0))) goto LA3;
  		(*dest0) = resizeString((*dest0), sep0->Sup.len + 0);
  appendString((*dest0), sep0);
  	}
  	LA3: ;
  }
  
  N_NIMCALL(NimStringDesc*, typetostring_322017_3876443242)(Ttype294840* typ0, Tprefereddesc322011 prefer0) {
  	NimStringDesc* result0;
  	Ttype294840* t0;
  {	result0 = (NimStringDesc*)0;
  	t0 = typ0;
  	result0 = copyString(((NimStringDesc*) &T3876443242_2));
  	{
  		if (!(t0 == NIM_NIL)) goto LA3;
  		goto BeforeRet;
  	}
  	LA3: ;
  	{
  		NIM_BOOL LOC7;
  		NIM_BOOL LOC8;
  		LOC7 = (NIM_BOOL)0;
  		LOC8 = (NIM_BOOL)0;
  		LOC8 = ((25 &(1U<<((NU)(prefer0)&7U)))!=0);
  		if (!(LOC8)) goto LA9;
  		LOC8 = !(((*t0).sym == NIM_NIL));
  		LA9: ;
  		LOC7 = LOC8;
  		if (!(LOC7)) goto LA10;
  		LOC7 = !((((*(*t0).sym).flags &(1U<<((NU)(((Tsymflag294184) 29))&31U)))!=0));
  		LA10: ;
  		if (!LOC7) goto LA11;
  		{
  			NIM_BOOL LOC15;
  			NimStringDesc* LOC19;
  			NimStringDesc* LOC20;
  			LOC15 = (NIM_BOOL)0;
  			LOC15 = ((*t0).kind == ((Ttypekind294244) 31));
  			if (!(LOC15)) goto LA16;
  			LOC15 = isintlit_322233_3876443242(t0);
  			LA16: ;
  			if (!LOC15) goto LA17;
  			LOC19 = (NimStringDesc*)0;
  			LOC20 = (NimStringDesc*)0;
  			LOC20 = nimInt64ToStr((*(*t0).n).kindU.S1.intval);
  			LOC19 = rawNewString((*(*(*t0).sym).name).s->Sup.len + LOC20->Sup.len + 10);
  appendString(LOC19, (*(*(*t0).sym).name).s);
  appendString(LOC19, ((NimStringDesc*) &T3876443242_3));
  appendString(LOC19, LOC20);
  appendString(LOC19, ((NimStringDesc*) &T3876443242_4));
  			result0 = LOC19;
  		}
  		goto LA13;
  		LA17: ;
  		{
  			NIM_BOOL LOC22;
  			LOC22 = (NIM_BOOL)0;
  			LOC22 = (prefer0 == ((Tprefereddesc322011) 0));
  			if (LOC22) goto LA23;
  			LOC22 = (*(*t0).sym).owner == 0;
  			LA23: ;
  			if (!LOC22) goto LA24;
  			result0 = copyString((*(*(*t0).sym).name).s);
  		}
  		goto LA13;
  		LA24: ;
  		{
  			NimStringDesc* LOC27;
  			LOC27 = (NimStringDesc*)0;
  			LOC27 = rawNewString((*(*(*(*t0).sym).owner).name).s->Sup.len + (*(*(*t0).sym).name).s->Sup.len + 1);
  appendString(LOC27, (*(*(*(*t0).sym).owner).name).s);
  appendChar(LOC27, 46);
  appendString(LOC27, (*(*(*t0).sym).name).s);
  			result0 = LOC27;
  		}
  		LA13: ;
  		addtypeflags_324411_3876443242((&result0), t0);
  		goto BeforeRet;
  	}
  	LA11: ;
  	switch ((*t0).kind) {
  	case ((Ttypekind294244) 31):
  	{
  		{
  			NIM_BOOL LOC31;
  			NIM_BOOL LOC32;
  			LOC31 = (NIM_BOOL)0;
  			LOC32 = (NIM_BOOL)0;
  			LOC32 = isintlit_322233_3876443242(t0);
  			LOC31 = !(LOC32);
  			if (LOC31) goto LA33;
  			LOC31 = (prefer0 == ((Tprefereddesc322011) 2));
  			LA33: ;
  			if (!LOC31) goto LA34;
  			result0 = copyString(typetostr_324403_3876443242[((*t0).kind)- 0]);
  		}
  		goto LA29;
  		LA34: ;
  		{
  			{
  				if (!(prefer0 == ((Tprefereddesc322011) 4))) goto LA39;
  				result0 = nimInt64ToStr((*(*t0).n).kindU.S1.intval);
  			}
  			goto LA37;
  			LA39: ;
  			{
  				NimStringDesc* LOC42;
  				NimStringDesc* LOC43;
  				LOC42 = (NimStringDesc*)0;
  				LOC43 = (NimStringDesc*)0;
  				LOC43 = nimInt64ToStr((*(*t0).n).kindU.S1.intval);
  				LOC42 = rawNewString(LOC43->Sup.len + 13);
  appendString(LOC42, ((NimStringDesc*) &T3876443242_69));
  appendString(LOC42, LOC43);
  appendString(LOC42, ((NimStringDesc*) &T3876443242_4));
  				result0 = LOC42;
  			}
  			LA37: ;
  		}
  		LA29: ;
  	}
  	break;
  	case ((Ttypekind294244) 10):
  	case ((Ttypekind294244) 11):
  	case ((Ttypekind294244) 9):
  	{
  		NimStringDesc* LOC45;
  		NimStringDesc* LOC46;
  		LOC45 = (NimStringDesc*)0;
  		LOC46 = (NimStringDesc*)0;
  		LOC46 = typetostring_322017_3876443242((*t0).sons->data[((NI) 0)], ((Tprefereddesc322011) 0));
  		LOC45 = rawNewString(LOC46->Sup.len + 1);
  appendString(LOC45, LOC46);
  appendChar(LOC45, 91);
  		result0 = LOC45;
  		{
  			NI i_324560_3876443242;
  			NI HEX3Atmp_325167_3876443242;
  			NI LOC48;
  			NI res_325170_3876443242;
  			i_324560_3876443242 = (NI)0;
  			HEX3Atmp_325167_3876443242 = (NI)0;
  			LOC48 = (NI)0;
  			LOC48 = sonslen_297327_850551059(t0);
  			HEX3Atmp_325167_3876443242 = (NI)((NI)(LOC48 - ((NI) 1)) - ((NI) (!(((*t0).kind == ((Ttypekind294244) 9))))));
  			res_325170_3876443242 = ((NI) 1);
  			{
  				while (1) {
  					NimStringDesc* LOC55;
  					if (!(res_325170_3876443242 <= HEX3Atmp_325167_3876443242)) goto LA50;
  					i_324560_3876443242 = res_325170_3876443242;
  					{
  						if (!(((NI) 1) < i_324560_3876443242)) goto LA53;
  						result0 = resizeString(result0, 2);
  appendString(result0, ((NimStringDesc*) &T3876443242_70));
  					}
  					LA53: ;
  					LOC55 = (NimStringDesc*)0;
  					LOC55 = typetostring_322017_3876443242((*t0).sons->data[i_324560_3876443242], ((Tprefereddesc322011) 4));
  					result0 = resizeString(result0, LOC55->Sup.len + 0);
  appendString(result0, LOC55);
  					res_325170_3876443242 += ((NI) 1);
  				} LA50: ;
  			}
  		}
  		result0 = addChar(result0, 93);
  	}
  	break;
  	case ((Ttypekind294244) 8):
  	{
  		{
  			Ttype294840* LOC59;
  			LOC59 = (Ttype294840*)0;
  			LOC59 = base_322021_3876443242(t0);
  			if (!((*LOC59).kind == ((Ttypekind294244) 0))) goto LA60;
  			result0 = copyString(((NimStringDesc*) &T3876443242_71));
  		}
  		goto LA57;
  		LA60: ;
  		{
  			NimStringDesc* LOC63;
  			Ttype294840* LOC64;
  			NimStringDesc* LOC65;
  			LOC63 = (NimStringDesc*)0;
  			LOC64 = (Ttype294840*)0;
  			LOC64 = base_322021_3876443242(t0);
  			LOC65 = (NimStringDesc*)0;
  			LOC65 = typetostring_322017_3876443242(LOC64, ((Tprefereddesc322011) 0));
  			LOC63 = rawNewString(LOC65->Sup.len + 10);
  appendString(LOC63, ((NimStringDesc*) &T3876443242_72));
  appendString(LOC63, LOC65);
  appendString(LOC63, ((NimStringDesc*) &T3876443242_73));
  			result0 = LOC63;
  		}
  		LA57: ;
  	}
  	break;
  	case ((Ttypekind294244) 59):
  	{
  		{
  			NI LOC69;
  			NimStringDesc* LOC72;
  			LOC69 = (NI)0;
  			LOC69 = len_297339_850551059(t0);
  			if (!!((((NI) 0) < LOC69))) goto LA70;
  			LOC72 = (NimStringDesc*)0;
  			LOC72 = HEX24_198185_1689653243(T3876443242_74);
  			internalerror_198113_155036129(LOC72);
  		}
  		LA70: ;
  		{
  			NIM_BOOL LOC75;
  			LOC75 = (NIM_BOOL)0;
  			LOC75 = (prefer0 == ((Tprefereddesc322011) 4));
  			if (!(LOC75)) goto LA76;
  			LOC75 = !(((*t0).n == NIM_NIL));
  			LA76: ;
  			if (!LOC75) goto LA77;
  			result0 = rendertree_313044_382274130((*t0).n, 0);
  		}
  		goto LA73;
  		LA77: ;
  		{
  			NimStringDesc* LOC80;
  			NimStringDesc* LOC81;
  			LOC80 = (NimStringDesc*)0;
  			LOC81 = (NimStringDesc*)0;
  			LOC81 = typetostring_322017_3876443242((*t0).sons->data[((NI) 0)], ((Tprefereddesc322011) 0));
  			LOC80 = rawNewString(LOC81->Sup.len + 8);
  appendString(LOC80, ((NimStringDesc*) &T3876443242_76));
  appendString(LOC80, LOC81);
  appendString(LOC80, ((NimStringDesc*) &T3876443242_73));
  			result0 = LOC80;
  			{
  				NimStringDesc* LOC86;
  				NimStringDesc* LOC87;
  				if (!!(((*t0).n == NIM_NIL))) goto LA84;
  				LOC86 = (NimStringDesc*)0;
  				LOC87 = (NimStringDesc*)0;
  				LOC87 = rendertree_313044_382274130((*t0).n, 0);
  				LOC86 = rawNewString(LOC87->Sup.len + 2);
  appendString(LOC86, ((NimStringDesc*) &T3876443242_77));
  appendString(LOC86, LOC87);
  appendString(LOC86, ((NimStringDesc*) &T3876443242_4));
  				result0 = resizeString(result0, LOC86->Sup.len + 0);
  appendString(result0, LOC86);
  			}
  			LA84: ;
  		}
  		LA73: ;
  	}
  	break;
  	case ((Ttypekind294244) 52):
  	{
  		{
  			NIM_BOOL LOC91;
  			NimStringDesc* LOC95;
  			LOC91 = (NIM_BOOL)0;
  			LOC91 = !(((*t0).sym == NIM_NIL));
  			if (!(LOC91)) goto LA92;
  			LOC91 = !(((*(*t0).sym).owner == NIM_NIL));
  			LA92: ;
  			if (!!(LOC91)) goto LA93;
  			LOC95 = (NimStringDesc*)0;
  			LOC95 = HEX24_198185_1689653243(T3876443242_78);
  			internalerror_198113_155036129(LOC95);
  		}
  		LA93: ;
  		result0 = copyString((*(*(*(*t0).sym).owner).name).s);
  		goto BeforeRet;
  	}
  	break;
  	case ((Ttypekind294244) 51):
  	{
  		Ttype294840* LOC97;
  		LOC97 = (Ttype294840*)0;
  		LOC97 = base_322021_3876443242(t0);
  		switch ((*LOC97).kind) {
  		case ((Ttypekind294244) 23):
  		{
  			result0 = copyString(((NimStringDesc*) &T3876443242_79));
  		}
  		break;
  		case ((Ttypekind294244) 22):
  		{
  			result0 = copyString(((NimStringDesc*) &T3876443242_80));
  		}
  		break;
  		case ((Ttypekind294244) 21):
  		{
  			result0 = copyString(((NimStringDesc*) &T3876443242_81));
  		}
  		break;
  		case ((Ttypekind294244) 24):
  		{
  			result0 = copyString(((NimStringDesc*) &T3876443242_82));
  		}
  		break;
  		case ((Ttypekind294244) 16):
  		{
  			result0 = copyString(((NimStringDesc*) &T3876443242_83));
  		}
  		break;
  		case ((Ttypekind294244) 19):
  		{
  			result0 = copyString(((NimStringDesc*) &T3876443242_84));
  		}
  		break;
  		case ((Ttypekind294244) 20):
  		{
  			result0 = copyString(((NimStringDesc*) &T3876443242_85));
  		}
  		break;
  		case ((Ttypekind294244) 13):
  		{
  			result0 = copyString(((NimStringDesc*) &T3876443242_86));
  		}
  		break;
  		case ((Ttypekind294244) 25):
  		{
  			result0 = copyString(((NimStringDesc*) &T3876443242_31));
  		}
  		break;
  		case ((Ttypekind294244) 17):
  		{
  			result0 = copyString(((NimStringDesc*) &T3876443242_23));
  		}
  		break;
  		case ((Ttypekind294244) 18):
  		{
  			result0 = copyString(((NimStringDesc*) &T3876443242_24));
  		}
  		break;
  		case ((Ttypekind294244) 27):
  		{
  			result0 = copyString(((NimStringDesc*) &T3876443242_87));
  		}
  		break;
  		default:
  		{
  			Ttype294840* LOC111;
  			LOC111 = (Ttype294840*)0;
  			LOC111 = base_322021_3876443242(t0);
  			result0 = copyString(typetostr_324403_3876443242[((*LOC111).kind)- 0]);
  		}
  		break;
  		}
  	}
  	break;
  	case ((Ttypekind294244) 53):
  	{
  		Ttype294840* body0;
  		NimStringDesc* LOC113;
  		body0 = base_322021_3876443242(t0);
  		LOC113 = (NimStringDesc*)0;
  		LOC113 = rawNewString((*(*(*body0).sym).name).s->Sup.len + 1);
  appendString(LOC113, (*(*(*body0).sym).name).s);
  appendString(LOC113, ((NimStringDesc*) &T3876443242_88));
  		result0 = LOC113;
  		{
  			NI i_324658_3876443242;
  			NI HEX3Atmp_325175_3876443242;
  			NI LOC115;
  			NI res_325178_3876443242;
  			i_324658_3876443242 = (NI)0;
  			HEX3Atmp_325175_3876443242 = (NI)0;
  			LOC115 = (NI)0;
  			LOC115 = sonslen_297327_850551059(t0);
  			HEX3Atmp_325175_3876443242 = (NI)(LOC115 - ((NI) 2));
  			res_325178_3876443242 = ((NI) 1);
  			{
  				while (1) {
  					NimStringDesc* LOC122;
  					if (!(res_325178_3876443242 <= HEX3Atmp_325175_3876443242)) goto LA117;
  					i_324658_3876443242 = res_325178_3876443242;
  					{
  						if (!(((NI) 1) < i_324658_3876443242)) goto LA120;
  						result0 = resizeString(result0, 2);
  appendString(result0, ((NimStringDesc*) &T3876443242_70));
  					}
  					LA120: ;
  					LOC122 = (NimStringDesc*)0;
  					LOC122 = typetostring_322017_3876443242((*t0).sons->data[i_324658_3876443242], ((Tprefereddesc322011) 0));
  					result0 = resizeString(result0, LOC122->Sup.len + 0);
  appendString(result0, LOC122);
  					res_325178_3876443242 += ((NI) 1);
  				} LA117: ;
  			}
  		}
  		result0 = resizeString(result0, 1);
  appendString(result0, ((NimStringDesc*) &T3876443242_73));
  	}
  	break;
  	case ((Ttypekind294244) 55):
  	{
  		NimStringDesc* LOC124;
  		NimStringDesc* LOC125;
  		NimStringDesc* LOC126;
  		LOC124 = (NimStringDesc*)0;
  		LOC125 = (NimStringDesc*)0;
  		LOC125 = typetostring_322017_3876443242((*t0).sons->data[((NI) 0)], ((Tprefereddesc322011) 0));
  		LOC126 = (NimStringDesc*)0;
  		LOC126 = typetostring_322017_3876443242((*t0).sons->data[((NI) 1)], ((Tprefereddesc322011) 0));
  		LOC124 = rawNewString(LOC125->Sup.len + LOC126->Sup.len + 5);
  appendString(LOC124, LOC125);
  appendString(LOC124, ((NimStringDesc*) &T3876443242_89));
  appendString(LOC124, LOC126);
  		result0 = LOC124;
  	}
  	break;
  	case ((Ttypekind294244) 56):
  	{
  		NimStringDesc* LOC128;
  		NimStringDesc* LOC129;
  		NimStringDesc* LOC130;
  		LOC128 = (NimStringDesc*)0;
  		LOC129 = (NimStringDesc*)0;
  		LOC129 = typetostring_322017_3876443242((*t0).sons->data[((NI) 0)], ((Tprefereddesc322011) 0));
  		LOC130 = (NimStringDesc*)0;
  		LOC130 = typetostring_322017_3876443242((*t0).sons->data[((NI) 1)], ((Tprefereddesc322011) 0));
  		LOC128 = rawNewString(LOC129->Sup.len + LOC130->Sup.len + 4);
  appendString(LOC128, LOC129);
  appendString(LOC128, ((NimStringDesc*) &T3876443242_90));
  appendString(LOC128, LOC130);
  		result0 = LOC128;
  	}
  	break;
  	case ((Ttypekind294244) 57):
  	{
  		NimStringDesc* LOC132;
  		NimStringDesc* LOC133;
  		LOC132 = (NimStringDesc*)0;
  		LOC133 = (NimStringDesc*)0;
  		LOC133 = typetostring_322017_3876443242((*t0).sons->data[((NI) 0)], ((Tprefereddesc322011) 0));
  		LOC132 = rawNewString(LOC133->Sup.len + 4);
  appendString(LOC132, ((NimStringDesc*) &T3876443242_91));
  appendString(LOC132, LOC133);
  		result0 = LOC132;
  	}
  	break;
  	case ((Ttypekind294244) 6):
  	{
  		{
  			NI LOC137;
  			NimStringDesc* LOC140;
  			LOC137 = (NI)0;
  			LOC137 = len_297339_850551059(t0);
  			if (!!((LOC137 == ((NI) 0)))) goto LA138;
  			LOC140 = (NimStringDesc*)0;
  			LOC140 = HEX24_198185_1689653243(T3876443242_92);
  			internalerror_198113_155036129(LOC140);
  		}
  		LA138: ;
  		result0 = copyString(((NimStringDesc*) &T3876443242_12));
  	}
  	break;
  	case ((Ttypekind294244) 60):
  	case ((Ttypekind294244) 61):
  	{
  		result0 = rendertree_313044_382274130((*t0).n, 0);
  	}
  	break;
  	case ((Ttypekind294244) 16):
  	{
  		{
  			NimStringDesc* LOC147;
  			NimStringDesc* LOC148;
  			NimStringDesc* LOC149;
  			if (!((*(*t0).sons->data[((NI) 0)]).kind == ((Ttypekind294244) 20))) goto LA145;
  			LOC147 = (NimStringDesc*)0;
  			LOC148 = (NimStringDesc*)0;
  			LOC148 = rangetostr_324224_3876443242((*(*t0).sons->data[((NI) 0)]).n);
  			LOC149 = (NimStringDesc*)0;
  			LOC149 = typetostring_322017_3876443242((*t0).sons->data[((NI) 1)], ((Tprefereddesc322011) 0));
  			LOC147 = rawNewString(LOC148->Sup.len + LOC149->Sup.len + 9);
  appendString(LOC147, ((NimStringDesc*) &T3876443242_93));
  appendString(LOC147, LOC148);
  appendString(LOC147, ((NimStringDesc*) &T3876443242_70));
  appendString(LOC147, LOC149);
  appendChar(LOC147, 93);
  			result0 = LOC147;
  		}
  		goto LA143;
  		LA145: ;
  		{
  			NimStringDesc* LOC151;
  			NimStringDesc* LOC152;
  			NimStringDesc* LOC153;
  			LOC151 = (NimStringDesc*)0;
  			LOC152 = (NimStringDesc*)0;
  			LOC152 = typetostring_322017_3876443242((*t0).sons->data[((NI) 0)], ((Tprefereddesc322011) 0));
  			LOC153 = (NimStringDesc*)0;
  			LOC153 = typetostring_322017_3876443242((*t0).sons->data[((NI) 1)], ((Tprefereddesc322011) 0));
  			LOC151 = rawNewString(LOC152->Sup.len + LOC153->Sup.len + 9);
  appendString(LOC151, ((NimStringDesc*) &T3876443242_93));
  appendString(LOC151, LOC152);
  appendString(LOC151, ((NimStringDesc*) &T3876443242_70));
  appendString(LOC151, LOC153);
  appendChar(LOC151, 93);
  			result0 = LOC151;
  		}
  		LA143: ;
  	}
  	break;
  	case ((Ttypekind294244) 4):
  	{
  		NimStringDesc* LOC155;
  		NimStringDesc* LOC156;
  		NimStringDesc* LOC157;
  		LOC155 = (NimStringDesc*)0;
  		LOC156 = (NimStringDesc*)0;
  		LOC156 = rangetostr_324224_3876443242((*(*t0).sons->data[((NI) 0)]).n);
  		LOC157 = (NimStringDesc*)0;
  		LOC157 = typetostring_322017_3876443242((*t0).sons->data[((NI) 1)], ((Tprefereddesc322011) 0));
  		LOC155 = rawNewString(LOC156->Sup.len + LOC157->Sup.len + 21);
  appendString(LOC155, ((NimStringDesc*) &T3876443242_96));
  appendString(LOC155, LOC156);
  appendString(LOC155, ((NimStringDesc*) &T3876443242_70));
  appendString(LOC155, LOC157);
  appendChar(LOC155, 93);
  		result0 = LOC155;
  	}
  	break;
  	case ((Ttypekind294244) 24):
  	{
  		NimStringDesc* LOC159;
  		NimStringDesc* LOC160;
  		LOC159 = (NimStringDesc*)0;
  		LOC160 = (NimStringDesc*)0;
  		LOC160 = typetostring_322017_3876443242((*t0).sons->data[((NI) 0)], ((Tprefereddesc322011) 0));
  		LOC159 = rawNewString(LOC160->Sup.len + 5);
  appendString(LOC159, ((NimStringDesc*) &T3876443242_97));
  appendString(LOC159, LOC160);
  appendChar(LOC159, 93);
  		result0 = LOC159;
  	}
  	break;
  	case ((Ttypekind294244) 15):
  	{
  		NimStringDesc* LOC162;
  		NimStringDesc* LOC163;
  		LOC162 = (NimStringDesc*)0;
  		LOC163 = (NimStringDesc*)0;
  		LOC163 = typetostring_322017_3876443242((*t0).sons->data[((NI) 0)], ((Tprefereddesc322011) 0));
  		LOC162 = rawNewString(LOC163->Sup.len + 9);
  appendString(LOC162, ((NimStringDesc*) &T3876443242_98));
  appendString(LOC162, LOC163);
  appendChar(LOC162, 93);
  		result0 = LOC162;
  	}
  	break;
  	case ((Ttypekind294244) 19):
  	{
  		NimStringDesc* LOC165;
  		NimStringDesc* LOC166;
  		LOC165 = (NimStringDesc*)0;
  		LOC166 = (NimStringDesc*)0;
  		LOC166 = typetostring_322017_3876443242((*t0).sons->data[((NI) 0)], ((Tprefereddesc322011) 0));
  		LOC165 = rawNewString(LOC166->Sup.len + 5);
  appendString(LOC165, ((NimStringDesc*) &T3876443242_99));
  appendString(LOC165, LOC166);
  appendChar(LOC165, 93);
  		result0 = LOC165;
  	}
  	break;
  	case ((Ttypekind294244) 27):
  	{
  		NimStringDesc* LOC168;
  		NimStringDesc* LOC169;
  		LOC168 = (NimStringDesc*)0;
  		LOC169 = (NimStringDesc*)0;
  		LOC169 = typetostring_322017_3876443242((*t0).sons->data[((NI) 0)], ((Tprefereddesc322011) 0));
  		LOC168 = rawNewString(LOC169->Sup.len + 11);
  appendString(LOC168, ((NimStringDesc*) &T3876443242_100));
  appendString(LOC168, LOC169);
  appendChar(LOC168, 93);
  		result0 = LOC168;
  	}
  	break;
  	case ((Ttypekind294244) 13):
  	{
  		NimStringDesc* LOC171;
  		Tprefereddesc322011 LOC172;
  		NimStringDesc* LOC178;
  		LOC171 = (NimStringDesc*)0;
  		LOC172 = (Tprefereddesc322011)0;
  		{
  			if (!(prefer0 == ((Tprefereddesc322011) 3))) goto LA175;
  			LOC172 = ((Tprefereddesc322011) 3);
  		}
  		goto LA173;
  		LA175: ;
  		{
  			LOC172 = ((Tprefereddesc322011) 0);
  		}
  		LA173: ;
  		LOC178 = (NimStringDesc*)0;
  		LOC178 = typetostring_322017_3876443242((*t0).sons->data[((NI) 0)], LOC172);
  		LOC171 = rawNewString(LOC178->Sup.len + 9);
  appendString(LOC171, ((NimStringDesc*) &T3876443242_101));
  appendString(LOC171, LOC178);
  		result0 = LOC171;
  	}
  	break;
  	case ((Ttypekind294244) 18):
  	{
  		{
  			if (!!(((*t0).n == NIM_NIL))) goto LA182;
  			result0 = copyString(((NimStringDesc*) &T3876443242_102));
  			{
  				NI i_324812_3876443242;
  				NI HEX3Atmp_325183_3876443242;
  				NI LOC185;
  				NI res_325186_3876443242;
  				i_324812_3876443242 = (NI)0;
  				HEX3Atmp_325183_3876443242 = (NI)0;
  				LOC185 = (NI)0;
  				LOC185 = sonslen_297351_850551059((*t0).n);
  				HEX3Atmp_325183_3876443242 = (NI)(LOC185 - ((NI) 1));
  				res_325186_3876443242 = ((NI) 0);
  				{
  					while (1) {
  						NimStringDesc* LOC188;
  						NimStringDesc* LOC189;
  						if (!(res_325186_3876443242 <= HEX3Atmp_325183_3876443242)) goto LA187;
  						i_324812_3876443242 = res_325186_3876443242;
  						LOC188 = (NimStringDesc*)0;
  						LOC189 = (NimStringDesc*)0;
  						LOC189 = typetostring_322017_3876443242((*t0).sons->data[i_324812_3876443242], ((Tprefereddesc322011) 0));
  						LOC188 = rawNewString((*(*(*(*(*t0).n).kindU.S6.sons->data[i_324812_3876443242]).kindU.S4.sym).name).s->Sup.len + LOC189->Sup.len + 2);
  appendString(LOC188, (*(*(*(*(*t0).n).kindU.S6.sons->data[i_324812_3876443242]).kindU.S4.sym).name).s);
  appendString(LOC188, ((NimStringDesc*) &T3876443242_103));
  appendString(LOC188, LOC189);
  						result0 = resizeString(result0, LOC188->Sup.len + 0);
  appendString(result0, LOC188);
  						{
  							NI LOC192;
  							LOC192 = (NI)0;
  							LOC192 = sonslen_297351_850551059((*t0).n);
  							if (!(i_324812_3876443242 < (NI)(LOC192 - ((NI) 1)))) goto LA193;
  							result0 = resizeString(result0, 2);
  appendString(result0, ((NimStringDesc*) &T3876443242_70));
  						}
  						LA193: ;
  						res_325186_3876443242 += ((NI) 1);
  					} LA187: ;
  				}
  			}
  			result0 = addChar(result0, 93);
  		}
  		goto LA180;
  		LA182: ;
  		{
  			NI LOC196;
  			LOC196 = (NI)0;
  			LOC196 = sonslen_297327_850551059(t0);
  			if (!(LOC196 == ((NI) 0))) goto LA197;
  			result0 = copyString(((NimStringDesc*) &T3876443242_104));
  		}
  		goto LA180;
  		LA197: ;
  		{
  			result0 = copyString(((NimStringDesc*) &T3876443242_77));
  			{
  				NI i_325015_3876443242;
  				NI HEX3Atmp_325191_3876443242;
  				NI LOC201;
  				NI res_325194_3876443242;
  				i_325015_3876443242 = (NI)0;
  				HEX3Atmp_325191_3876443242 = (NI)0;
  				LOC201 = (NI)0;
  				LOC201 = sonslen_297327_850551059(t0);
  				HEX3Atmp_325191_3876443242 = (NI)(LOC201 - ((NI) 1));
  				res_325194_3876443242 = ((NI) 0);
  				{
  					while (1) {
  						NimStringDesc* LOC204;
  						if (!(res_325194_3876443242 <= HEX3Atmp_325191_3876443242)) goto LA203;
  						i_325015_3876443242 = res_325194_3876443242;
  						LOC204 = (NimStringDesc*)0;
  						LOC204 = typetostring_322017_3876443242((*t0).sons->data[i_325015_3876443242], ((Tprefereddesc322011) 0));
  						result0 = resizeString(result0, LOC204->Sup.len + 0);
  appendString(result0, LOC204);
  						{
  							NI LOC207;
  							LOC207 = (NI)0;
  							LOC207 = sonslen_297327_850551059(t0);
  							if (!(i_325015_3876443242 < (NI)(LOC207 - ((NI) 1)))) goto LA208;
  							result0 = resizeString(result0, 2);
  appendString(result0, ((NimStringDesc*) &T3876443242_70));
  						}
  						LA208: ;
  						res_325194_3876443242 += ((NI) 1);
  					} LA203: ;
  				}
  			}
  			result0 = addChar(result0, 41);
  		}
  		LA180: ;
  	}
  	break;
  	case ((Ttypekind294244) 21):
  	case ((Ttypekind294244) 22):
  	case ((Ttypekind294244) 23):
  	case ((Ttypekind294244) 47):
  	case ((Ttypekind294244) 46):
  	{
  		result0 = copyString(typetostr_324403_3876443242[((*t0).kind)- 0]);
  		{
  			NI LOC213;
  			LOC213 = (NI)0;
  			LOC213 = len_297339_850551059(t0);
  			if (!(((NI) 2) <= LOC213)) goto LA214;
  			result0 = setLengthStr(result0, ((NI) ((NI)((result0 ? result0->Sup.len : 0) - ((NI) 1)))));
  			result0 = addChar(result0, 91);
  			{
  				NI i_325027_3876443242;
  				NI HEX3Atmp_325199_3876443242;
  				NI LOC217;
  				NI res_325202_3876443242;
  				i_325027_3876443242 = (NI)0;
  				HEX3Atmp_325199_3876443242 = (NI)0;
  				LOC217 = (NI)0;
  				LOC217 = sonslen_297327_850551059(t0);
  				HEX3Atmp_325199_3876443242 = (NI)(LOC217 - ((NI) 1));
  				res_325202_3876443242 = ((NI) 0);
  				{
  					while (1) {
  						NimStringDesc* LOC220;
  						if (!(res_325202_3876443242 <= HEX3Atmp_325199_3876443242)) goto LA219;
  						i_325027_3876443242 = res_325202_3876443242;
  						LOC220 = (NimStringDesc*)0;
  						LOC220 = typetostring_322017_3876443242((*t0).sons->data[i_325027_3876443242], ((Tprefereddesc322011) 0));
  						result0 = resizeString(result0, LOC220->Sup.len + 0);
  appendString(result0, LOC220);
  						{
  							NI LOC223;
  							LOC223 = (NI)0;
  							LOC223 = sonslen_297327_850551059(t0);
  							if (!(i_325027_3876443242 < (NI)(LOC223 - ((NI) 1)))) goto LA224;
  							result0 = resizeString(result0, 2);
  appendString(result0, ((NimStringDesc*) &T3876443242_70));
  						}
  						LA224: ;
  						res_325202_3876443242 += ((NI) 1);
  					} LA219: ;
  				}
  			}
  			result0 = addChar(result0, 93);
  		}
  		goto LA211;
  		LA214: ;
  		{
  			NimStringDesc* LOC227;
  			LOC227 = (NimStringDesc*)0;
  			LOC227 = typetostring_322017_3876443242((*t0).sons->data[((NI) 0)], ((Tprefereddesc322011) 0));
  			result0 = resizeString(result0, LOC227->Sup.len + 0);
  appendString(result0, LOC227);
  		}
  		LA211: ;
  	}
  	break;
  	case ((Ttypekind294244) 20):
  	{
  		result0 = copyString(((NimStringDesc*) &T3876443242_105));
  		{
  			NIM_BOOL LOC231;
  			NimStringDesc* LOC235;
  			LOC231 = (NIM_BOOL)0;
  			LOC231 = !(((*t0).n == NIM_NIL));
  			if (!(LOC231)) goto LA232;
  			LOC231 = ((*(*t0).n).kind == ((Tnodekind294020) 44));
  			LA232: ;
  			if (!LOC231) goto LA233;
  			LOC235 = (NimStringDesc*)0;
  			LOC235 = rangetostr_324224_3876443242((*t0).n);
  			result0 = resizeString(result0, LOC235->Sup.len + 0);
  appendString(result0, LOC235);
  		}
  		LA233: ;
  		{
  			NimStringDesc* LOC240;
  			NimStringDesc* LOC241;
  			if (!!((prefer0 == ((Tprefereddesc322011) 2)))) goto LA238;
  			LOC240 = (NimStringDesc*)0;
  			LOC241 = (NimStringDesc*)0;
  			LOC241 = typetostring_322017_3876443242((*t0).sons->data[((NI) 0)], ((Tprefereddesc322011) 0));
  			LOC240 = rawNewString(LOC241->Sup.len + 2);
  appendString(LOC240, ((NimStringDesc*) &T3876443242_77));
  appendString(LOC240, LOC241);
  appendString(LOC240, ((NimStringDesc*) &T3876443242_4));
  			result0 = resizeString(result0, LOC240->Sup.len + 0);
  appendString(result0, LOC240);
  		}
  		LA238: ;
  	}
  	break;
  	case ((Ttypekind294244) 25):
  	{
  		NimStringDesc* prag0;
  		{
  			if (!(((*t0).flags &(1U<<((NU)(((Ttypeflag294431) 14))&31U)))!=0)) goto LA245;
  			result0 = copyString(((NimStringDesc*) &T3876443242_106));
  		}
  		goto LA243;
  		LA245: ;
  		{
  			result0 = copyString(((NimStringDesc*) &T3876443242_107));
  		}
  		LA243: ;
  		{
  			NI i_325079_3876443242;
  			NI HEX3Atmp_325207_3876443242;
  			NI LOC249;
  			NI res_325210_3876443242;
  			i_325079_3876443242 = (NI)0;
  			HEX3Atmp_325207_3876443242 = (NI)0;
  			LOC249 = (NI)0;
  			LOC249 = sonslen_297327_850551059(t0);
  			HEX3Atmp_325207_3876443242 = (NI)(LOC249 - ((NI) 1));
  			res_325210_3876443242 = ((NI) 1);
  			{
  				while (1) {
  					NimStringDesc* LOC263;
  					if (!(res_325210_3876443242 <= HEX3Atmp_325207_3876443242)) goto LA251;
  					i_325079_3876443242 = res_325210_3876443242;
  					{
  						NIM_BOOL LOC254;
  						NIM_BOOL LOC255;
  						NI LOC257;
  						Tnode294802* LOC259;
  						Tnode294802* LOC262;
  						LOC254 = (NIM_BOOL)0;
  						LOC255 = (NIM_BOOL)0;
  						LOC255 = !(((*t0).n == NIM_NIL));
  						if (!(LOC255)) goto LA256;
  						LOC257 = (NI)0;
  						LOC257 = len_295081_850551059((*t0).n);
  						LOC255 = (i_325079_3876443242 < LOC257);
  						LA256: ;
  						LOC254 = LOC255;
  						if (!(LOC254)) goto LA258;
  						LOC259 = (Tnode294802*)0;
  						LOC259 = HEX5BHEX5D_295238_850551059((*t0).n, i_325079_3876443242);
  						LOC254 = ((*LOC259).kind == ((Tnodekind294020) 3));
  						LA258: ;
  						if (!LOC254) goto LA260;
  						LOC262 = (Tnode294802*)0;
  						LOC262 = HEX5BHEX5D_295238_850551059((*t0).n, i_325079_3876443242);
  						result0 = resizeString(result0, (*(*(*LOC262).kindU.S4.sym).name).s->Sup.len + 0);
  appendString(result0, (*(*(*LOC262).kindU.S4.sym).name).s);
  						result0 = resizeString(result0, 2);
  appendString(result0, ((NimStringDesc*) &T3876443242_103));
  					}
  					LA260: ;
  					LOC263 = (NimStringDesc*)0;
  					LOC263 = typetostring_322017_3876443242((*t0).sons->data[i_325079_3876443242], ((Tprefereddesc322011) 0));
  					result0 = resizeString(result0, LOC263->Sup.len + 0);
  appendString(result0, LOC263);
  					{
  						NI LOC266;
  						LOC266 = (NI)0;
  						LOC266 = sonslen_297327_850551059(t0);
  						if (!(i_325079_3876443242 < (NI)(LOC266 - ((NI) 1)))) goto LA267;
  						result0 = resizeString(result0, 2);
  appendString(result0, ((NimStringDesc*) &T3876443242_70));
  					}
  					LA267: ;
  					res_325210_3876443242 += ((NI) 1);
  				} LA251: ;
  			}
  		}
  		result0 = addChar(result0, 41);
  		{
  			NimStringDesc* LOC273;
  			NimStringDesc* LOC274;
  			if (!!(((*t0).sons->data[((NI) 0)] == NIM_NIL))) goto LA271;
  			LOC273 = (NimStringDesc*)0;
  			LOC274 = (NimStringDesc*)0;
  			LOC274 = typetostring_322017_3876443242((*t0).sons->data[((NI) 0)], ((Tprefereddesc322011) 0));
  			LOC273 = rawNewString(LOC274->Sup.len + 2);
  appendString(LOC273, ((NimStringDesc*) &T3876443242_103));
  appendString(LOC273, LOC274);
  			result0 = resizeString(result0, LOC273->Sup.len + 0);
  appendString(result0, LOC273);
  		}
  		LA271: ;
  		{
  			if (!((*t0).callconv == ((Tcallingconvention294002) 0))) goto LA277;
  			prag0 = copyString(((NimStringDesc*) &T3876443242_2));
  		}
  		goto LA275;
  		LA277: ;
  		{
  			prag0 = copyString(Callingconvtostr_294013_850551059[((*t0).callconv)- 0]);
  		}
  		LA275: ;
  		{
  			if (!(((*t0).flags &(1U<<((NU)(((Ttypeflag294431) 1))&31U)))!=0)) goto LA282;
  			addsep_109376_4286263276((&prag0), ((NimStringDesc*) &T3876443242_70), ((NI) 0));
  			prag0 = resizeString(prag0, 12);
  appendString(prag0, ((NimStringDesc*) &T3876443242_108));
  		}
  		LA282: ;
  		{
  			if (!(((*t0).flags &(1U<<((NU)(((Ttypeflag294431) 7))&31U)))!=0)) goto LA286;
  			addsep_109376_4286263276((&prag0), ((NimStringDesc*) &T3876443242_70), ((NI) 0));
  			prag0 = resizeString(prag0, 6);
  appendString(prag0, ((NimStringDesc*) &T3876443242_109));
  		}
  		LA286: ;
  		{
  			NimStringDesc* LOC292;
  			NimStringDesc* LOC293;
  			if (!!((((NI) ((*t0).locklevel)) == ((NI) -1)))) goto LA290;
  			addsep_109376_4286263276((&prag0), ((NimStringDesc*) &T3876443242_70), ((NI) 0));
  			LOC292 = (NimStringDesc*)0;
  			LOC293 = (NimStringDesc*)0;
  			LOC293 = HEX24_297069_850551059((*t0).locklevel);
  			LOC292 = rawNewString(LOC293->Sup.len + 7);
  appendString(LOC292, ((NimStringDesc*) &T3876443242_110));
  appendString(LOC292, LOC293);
  			prag0 = resizeString(prag0, LOC292->Sup.len + 0);
  appendString(prag0, LOC292);
  		}
  		LA290: ;
  		{
  			NimStringDesc* LOC298;
  			if (!!(((prag0 ? prag0->Sup.len : 0) == ((NI) 0)))) goto LA296;
  			LOC298 = (NimStringDesc*)0;
  			LOC298 = rawNewString(prag0->Sup.len + 4);
  appendString(LOC298, ((NimStringDesc*) &T3876443242_111));
  appendString(LOC298, prag0);
  appendString(LOC298, ((NimStringDesc*) &T3876443242_112));
  			result0 = resizeString(result0, LOC298->Sup.len + 0);
  appendString(result0, LOC298);
  		}
  		LA296: ;
  	}
  	break;
  	case ((Ttypekind294244) 48):
  	case ((Ttypekind294244) 49):
  	{
  		NimStringDesc* LOC300;
  		LOC300 = (NimStringDesc*)0;
  		LOC300 = typetostring_322017_3876443242((*t0).sons->data[((NI) 0)], ((Tprefereddesc322011) 0));
  		result0 = nsuFormatSingleElem(typetostr_324403_3876443242[((*t0).kind)- 0], LOC300);
  	}
  	break;
  	default:
  	{
  		result0 = copyString(typetostr_324403_3876443242[((*t0).kind)- 0]);
  	}
  	break;
  	}
  	addtypeflags_324411_3876443242((&result0), t0);
  	}BeforeRet: ;
  	return result0;
  }
  
  N_NIMCALL(Ttype294840*, elemtype_322394_3876443242)(Ttype294840* t0) {
  	Ttype294840* result0;
  	result0 = (Ttype294840*)0;
  	switch ((*t0).kind) {
  	case ((Ttypekind294244) 11):
  	case ((Ttypekind294244) 13):
  	{
  		Ttype294840* LOC2;
  		LOC2 = (Ttype294840*)0;
  		LOC2 = lastson_297377_850551059(t0);
  		result0 = elemtype_322394_3876443242(LOC2);
  	}
  	break;
  	case ((Ttypekind294244) 16):
  	case ((Ttypekind294244) 4):
  	{
  		result0 = (*t0).sons->data[((NI) 1)];
  	}
  	break;
  	default:
  	{
  		result0 = lastson_297377_850551059(t0);
  	}
  	break;
  	}
  	return result0;
  }
  
  N_NIMCALL(void, initsametypeclosure_326453_3876443242)(Tsametypeclosure326433* Result) {
  }
  
  N_NIMCALL(NIM_BOOL, isgenericalias_327459_3876443242)(Ttype294840* t0) {
  	NIM_BOOL result0;
  	NIM_BOOL LOC1;
  	Ttype294840* LOC3;
  {	result0 = (NIM_BOOL)0;
  	LOC1 = (NIM_BOOL)0;
  	LOC1 = ((*t0).kind == ((Ttypekind294244) 11));
  	if (!(LOC1)) goto LA2;
  	LOC3 = (Ttype294840*)0;
  	LOC3 = lastson_297377_850551059(t0);
  	LOC1 = ((*LOC3).kind == ((Ttypekind294244) 11));
  	LA2: ;
  	result0 = LOC1;
  	goto BeforeRet;
  	}BeforeRet: ;
  	return result0;
  }
  
  N_NIMCALL(Ttype294840*, skipgenericalias_327481_3876443242)(Ttype294840* t0) {
  	Ttype294840* result0;
  {	result0 = (Ttype294840*)0;
  	{
  		NIM_BOOL LOC3;
  		LOC3 = (NIM_BOOL)0;
  		LOC3 = isgenericalias_327459_3876443242(t0);
  		if (!LOC3) goto LA4;
  		result0 = lastson_297377_850551059(t0);
  	}
  	goto LA1;
  	LA4: ;
  	{
  		result0 = t0;
  	}
  	LA1: ;
  	goto BeforeRet;
  	}BeforeRet: ;
  	return result0;
  }
  
  static N_INLINE(NIM_BOOL, sameflags_327497_3876443242)(Ttype294840* a0, Ttype294840* b0) {
  	NIM_BOOL result0;
  	result0 = (NIM_BOOL)0;
  	result0 = ((344064 & (*a0).flags) == (344064 & (*b0).flags));
  	return result0;
  }
  
  static N_INLINE(NI, find_326484_1689653243)(TY326447* a0, NI a0Len0, TY326447 item0) {
  	NI result0;
  {	result0 = (NI)0;
  	{
  		TY326447 i_326518_1689653243;
  		NI i_326549_1689653243;
  		memset((void*)(&i_326518_1689653243), 0, sizeof(i_326518_1689653243));
  		i_326549_1689653243 = ((NI) 0);
  		{
  			while (1) {
  				if (!(i_326549_1689653243 < a0Len0)) goto LA3;
  				i_326518_1689653243 = a0[i_326549_1689653243];
  				{
  					NIM_BOOL LOC6;
  					LOC6 = (NIM_BOOL)0;
  					LOC6 = HEX3DHEX3D_326520_1689653243(i_326518_1689653243, item0);
  					if (!LOC6) goto LA7;
  					goto BeforeRet;
  				}
  				LA7: ;
  				result0 += ((NI) 1);
  				i_326549_1689653243 += ((NI) 1);
  			} LA3: ;
  		}
  	}
  	result0 = ((NI) -1);
  	}BeforeRet: ;
  	return result0;
  }
  
  static N_INLINE(NIM_BOOL, contains_326474_1689653243)(TY326447* a0, NI a0Len0, TY326447 item0) {
  	NIM_BOOL result0;
  	NI LOC1;
  {	result0 = (NIM_BOOL)0;
  	LOC1 = (NI)0;
  	LOC1 = find_326484_1689653243(a0, a0Len0, item0);
  	result0 = (((NI) 0) <= LOC1);
  	goto BeforeRet;
  	}BeforeRet: ;
  	return result0;
  }
  N_NIMCALL(void, T3876443242_114)(void* p, NI op) {
  	TY326446* a;
  	NI LOC1;
  	a = (TY326446*)p;
  	LOC1 = (NI)0;
  	for (LOC1 = 0; LOC1 < a->Sup.len; LOC1++) {
  	}
  }
  
  N_NIMCALL(NIM_BOOL, containsorincl_326456_3876443242)(Tsametypeclosure326433* c0, Ttype294840* a0, Ttype294840* b0) {
  	NIM_BOOL result0;
  	NIM_BOOL LOC1;
  	TY326447 LOC3;
  	result0 = (NIM_BOOL)0;
  	LOC1 = (NIM_BOOL)0;
  	LOC1 = !((*c0).s == 0);
  	if (!(LOC1)) goto LA2;
  	LOC3.Field0 = (*a0).Sup.id;
  	LOC3.Field1 = (*b0).Sup.id;
  	LOC1 = contains_326474_1689653243((*c0).s->data, (*c0).s->Sup.len, LOC3);
  	LA2: ;
  	result0 = LOC1;
  	{
  		TY326447 LOC12;
  		if (!!(result0)) goto LA6;
  		{
  			if (!(*c0).s == 0) goto LA10;
  			unsureAsgnRef((void**) (&(*c0).s), (TY326446*) newSeq((&NTI326446), 0));
  		}
  		LA10: ;
  		LOC12.Field0 = (*a0).Sup.id;
  		LOC12.Field1 = (*b0).Sup.id;
  		(*c0).s = (TY326446*) incrSeqV2(&((*c0).s)->Sup, sizeof(TY326447));
  		(*c0).s->data[(*c0).s->Sup.len] = LOC12;
  		++(*c0).s->Sup.len;
  	}
  	LA6: ;
  	return result0;
  }
  
  N_NIMCALL(NIM_BOOL, sametypeornilaux_326591_3876443242)(Ttype294840* a0, Ttype294840* b0, Tsametypeclosure326433* c0) {
  	NIM_BOOL result0;
  	result0 = (NIM_BOOL)0;
  	{
  		if (!(a0 == b0)) goto LA3;
  		result0 = NIM_TRUE;
  	}
  	goto LA1;
  	LA3: ;
  	{
  		{
  			NIM_BOOL LOC8;
  			LOC8 = (NIM_BOOL)0;
  			LOC8 = (a0 == NIM_NIL);
  			if (LOC8) goto LA9;
  			LOC8 = (b0 == NIM_NIL);
  			LA9: ;
  			if (!LOC8) goto LA10;
  			result0 = NIM_FALSE;
  		}
  		goto LA6;
  		LA10: ;
  		{
  			result0 = sametypeaux_326585_3876443242(a0, b0, c0);
  		}
  		LA6: ;
  	}
  	LA1: ;
  	return result0;
  }
  
  static N_INLINE(NIM_BOOL, equalmem_7495_1689653243)(void* a0, void* b0, NI size0) {
  	NIM_BOOL result0;
  	int LOC1;
  	result0 = (NIM_BOOL)0;
  	LOC1 = (int)0;
  	LOC1 = memcmp(a0, b0, ((size_t) (size0)));
  	result0 = (LOC1 == ((NI32) 0));
  	return result0;
  }
  
  static N_INLINE(NIM_BOOL, eqStrings)(NimStringDesc* a0, NimStringDesc* b0) {
  	NIM_BOOL result0;
  	NIM_BOOL LOC11;
  {	result0 = (NIM_BOOL)0;
  	{
  		if (!(a0 == b0)) goto LA3;
  		result0 = NIM_TRUE;
  		goto BeforeRet;
  	}
  	LA3: ;
  	{
  		NIM_BOOL LOC7;
  		LOC7 = (NIM_BOOL)0;
  		LOC7 = (a0 == NIM_NIL);
  		if (LOC7) goto LA8;
  		LOC7 = (b0 == NIM_NIL);
  		LA8: ;
  		if (!LOC7) goto LA9;
  		result0 = NIM_FALSE;
  		goto BeforeRet;
  	}
  	LA9: ;
  	LOC11 = (NIM_BOOL)0;
  	LOC11 = ((*a0).Sup.len == (*b0).Sup.len);
  	if (!(LOC11)) goto LA12;
  	LOC11 = equalmem_7495_1689653243(((void*) ((*a0).data)), ((void*) ((*b0).data)), ((NI) ((*a0).Sup.len)));
  	LA12: ;
  	result0 = LOC11;
  	goto BeforeRet;
  	}BeforeRet: ;
  	return result0;
  }
  
  N_NIMCALL(NIM_BOOL, sameobjecttree_327282_3876443242)(Tnode294802* a0, Tnode294802* b0, Tsametypeclosure326433* c0) {
  	NIM_BOOL result0;
  {	result0 = (NIM_BOOL)0;
  	{
  		if (!(a0 == b0)) goto LA3;
  		result0 = NIM_TRUE;
  	}
  	goto LA1;
  	LA3: ;
  	{
  		NIM_BOOL LOC6;
  		NIM_BOOL LOC7;
  		Ttype294840* x0;
  		Ttype294840* y0;
  		LOC6 = (NIM_BOOL)0;
  		LOC7 = (NIM_BOOL)0;
  		LOC7 = !((a0 == NIM_NIL));
  		if (!(LOC7)) goto LA8;
  		LOC7 = !((b0 == NIM_NIL));
  		LA8: ;
  		LOC6 = LOC7;
  		if (!(LOC6)) goto LA9;
  		LOC6 = ((*a0).kind == (*b0).kind);
  		LA9: ;
  		if (!LOC6) goto LA10;
  		x0 = (*a0).typ;
  		y0 = (*b0).typ;
  		{
  			if (!(((*c0).flags &(1U<<((NU)(((Ttypecmpflag326429) 0))&7U)))!=0)) goto LA14;
  			{
  				if (!!((x0 == NIM_NIL))) goto LA18;
  				x0 = skiptypes_298099_850551059(x0, 1050624);
  			}
  			LA18: ;
  			{
  				if (!!((y0 == NIM_NIL))) goto LA22;
  				y0 = skiptypes_298099_850551059(y0, 1050624);
  			}
  			LA22: ;
  		}
  		LA14: ;
  		{
  			NIM_BOOL LOC26;
  			LOC26 = (NIM_BOOL)0;
  			LOC26 = sametypeornilaux_326591_3876443242(x0, y0, c0);
  			if (!LOC26) goto LA27;
  			switch ((*a0).kind) {
  			case ((Tnodekind294020) 3):
  			{
  				result0 = ((*(*(*a0).kindU.S4.sym).name).Sup.id == (*(*(*b0).kindU.S4.sym).name).Sup.id);
  			}
  			break;
  			case ((Tnodekind294020) 2):
  			{
  				result0 = ((*(*a0).kindU.S5.ident).Sup.id == (*(*b0).kindU.S5.ident).Sup.id);
  			}
  			break;
  			case ((Tnodekind294020) 5) ... ((Tnodekind294020) 10):
  			{
  				result0 = ((*a0).kindU.S1.intval == (*b0).kindU.S1.intval);
  			}
  			break;
  			case ((Tnodekind294020) 16) ... ((Tnodekind294020) 18):
  			{
  				result0 = ((*a0).kindU.S2.floatval == (*b0).kindU.S2.floatval);
  			}
  			break;
  			case ((Tnodekind294020) 20) ... ((Tnodekind294020) 22):
  			{
  				result0 = eqStrings((*a0).kindU.S3.strval, (*b0).kindU.S3.strval);
  			}
  			break;
  			case ((Tnodekind294020) 1):
  			case ((Tnodekind294020) 23):
  			case ((Tnodekind294020) 4):
  			{
  				result0 = NIM_TRUE;
  			}
  			break;
  			default:
  			{
  				{
  					NI LOC38;
  					NI LOC39;
  					LOC38 = (NI)0;
  					LOC38 = sonslen_297351_850551059(a0);
  					LOC39 = (NI)0;
  					LOC39 = sonslen_297351_850551059(b0);
  					if (!(LOC38 == LOC39)) goto LA40;
  					{
  						NI i_327394_3876443242;
  						NI HEX3Atmp_327398_3876443242;
  						NI LOC43;
  						NI res_327401_3876443242;
  						i_327394_3876443242 = (NI)0;
  						HEX3Atmp_327398_3876443242 = (NI)0;
  						LOC43 = (NI)0;
  						LOC43 = sonslen_297351_850551059(a0);
  						HEX3Atmp_327398_3876443242 = (NI)(LOC43 - ((NI) 1));
  						res_327401_3876443242 = ((NI) 0);
  						{
  							while (1) {
  								if (!(res_327401_3876443242 <= HEX3Atmp_327398_3876443242)) goto LA45;
  								i_327394_3876443242 = res_327401_3876443242;
  								{
  									NIM_BOOL LOC48;
  									LOC48 = (NIM_BOOL)0;
  									LOC48 = sameobjecttree_327282_3876443242((*a0).kindU.S6.sons->data[i_327394_3876443242], (*b0).kindU.S6.sons->data[i_327394_3876443242], c0);
  									if (!!(LOC48)) goto LA49;
  									goto BeforeRet;
  								}
  								LA49: ;
  								res_327401_3876443242 += ((NI) 1);
  							} LA45: ;
  						}
  					}
  					result0 = NIM_TRUE;
  				}
  				LA40: ;
  			}
  			break;
  			}
  		}
  		LA27: ;
  	}
  	goto LA1;
  	LA10: ;
  	LA1: ;
  	}BeforeRet: ;
  	return result0;
  }
  
  N_NIMCALL(NIM_BOOL, sameobjectstructures_327405_3876443242)(Ttype294840* a0, Ttype294840* b0, Tsametypeclosure326433* c0) {
  	NIM_BOOL result0;
  {	result0 = (NIM_BOOL)0;
  	{
  		NI LOC3;
  		NI LOC4;
  		LOC3 = (NI)0;
  		LOC3 = sonslen_297327_850551059(a0);
  		LOC4 = (NI)0;
  		LOC4 = sonslen_297327_850551059(b0);
  		if (!!((LOC3 == LOC4))) goto LA5;
  		goto BeforeRet;
  	}
  	LA5: ;
  	{
  		NI i_327423_3876443242;
  		NI HEX3Atmp_327425_3876443242;
  		NI LOC8;
  		NI res_327428_3876443242;
  		i_327423_3876443242 = (NI)0;
  		HEX3Atmp_327425_3876443242 = (NI)0;
  		LOC8 = (NI)0;
  		LOC8 = sonslen_297327_850551059(a0);
  		HEX3Atmp_327425_3876443242 = (NI)(LOC8 - ((NI) 1));
  		res_327428_3876443242 = ((NI) 0);
  		{
  			while (1) {
  				if (!(res_327428_3876443242 <= HEX3Atmp_327425_3876443242)) goto LA10;
  				i_327423_3876443242 = res_327428_3876443242;
  				{
  					NIM_BOOL LOC13;
  					LOC13 = (NIM_BOOL)0;
  					LOC13 = sametypeornilaux_326591_3876443242((*a0).sons->data[i_327423_3876443242], (*b0).sons->data[i_327423_3876443242], c0);
  					if (!!(LOC13)) goto LA14;
  					goto BeforeRet;
  				}
  				LA14: ;
  				res_327428_3876443242 += ((NI) 1);
  			} LA10: ;
  		}
  	}
  	{
  		NIM_BOOL LOC18;
  		LOC18 = (NIM_BOOL)0;
  		LOC18 = sameobjecttree_327282_3876443242((*a0).n, (*b0).n, c0);
  		if (!!(LOC18)) goto LA19;
  		goto BeforeRet;
  	}
  	LA19: ;
  	result0 = NIM_TRUE;
  	}BeforeRet: ;
  	return result0;
  }
  
  N_NIMCALL(NIM_BOOL, sametuple_327040_3876443242)(Ttype294840* a0, Ttype294840* b0, Tsametypeclosure326433* c0) {
  	NIM_BOOL result0;
  {	result0 = (NIM_BOOL)0;
  	{
  		NI LOC3;
  		NI LOC4;
  		LOC3 = (NI)0;
  		LOC3 = sonslen_297327_850551059(a0);
  		LOC4 = (NI)0;
  		LOC4 = sonslen_297327_850551059(b0);
  		if (!(LOC3 == LOC4)) goto LA5;
  		result0 = NIM_TRUE;
  		{
  			NI i_327058_3876443242;
  			NI HEX3Atmp_327193_3876443242;
  			NI LOC8;
  			NI res_327196_3876443242;
  			i_327058_3876443242 = (NI)0;
  			HEX3Atmp_327193_3876443242 = (NI)0;
  			LOC8 = (NI)0;
  			LOC8 = sonslen_297327_850551059(a0);
  			HEX3Atmp_327193_3876443242 = (NI)(LOC8 - ((NI) 1));
  			res_327196_3876443242 = ((NI) 0);
  			{
  				while (1) {
  					Ttype294840* x0;
  					Ttype294840* y0;
  					if (!(res_327196_3876443242 <= HEX3Atmp_327193_3876443242)) goto LA10;
  					i_327058_3876443242 = res_327196_3876443242;
  					x0 = (*a0).sons->data[i_327058_3876443242];
  					y0 = (*b0).sons->data[i_327058_3876443242];
  					{
  						if (!(((*c0).flags &(1U<<((NU)(((Ttypecmpflag326429) 0))&7U)))!=0)) goto LA13;
  						x0 = skiptypes_298099_850551059(x0, 1050624);
  						y0 = skiptypes_298099_850551059(y0, 1050624);
  					}
  					LA13: ;
  					result0 = sametypeaux_326585_3876443242(x0, y0, c0);
  					{
  						if (!!(result0)) goto LA17;
  						goto BeforeRet;
  					}
  					LA17: ;
  					res_327196_3876443242 += ((NI) 1);
  				} LA10: ;
  			}
  		}
  		{
  			NIM_BOOL LOC21;
  			NIM_BOOL LOC22;
  			LOC21 = (NIM_BOOL)0;
  			LOC22 = (NIM_BOOL)0;
  			LOC22 = !(((*a0).n == NIM_NIL));
  			if (!(LOC22)) goto LA23;
  			LOC22 = !(((*b0).n == NIM_NIL));
  			LA23: ;
  			LOC21 = LOC22;
  			if (!(LOC21)) goto LA24;
  			LOC21 = !((((*c0).flags &(1U<<((NU)(((Ttypecmpflag326429) 0))&7U)))!=0));
  			LA24: ;
  			if (!LOC21) goto LA25;
  			{
  				NI i_327118_3876443242;
  				NI HEX3Atmp_327201_3876443242;
  				NI LOC28;
  				NI res_327204_3876443242;
  				i_327118_3876443242 = (NI)0;
  				HEX3Atmp_327201_3876443242 = (NI)0;
  				LOC28 = (NI)0;
  				LOC28 = sonslen_297351_850551059((*a0).n);
  				HEX3Atmp_327201_3876443242 = (NI)(LOC28 - ((NI) 1));
  				res_327204_3876443242 = ((NI) 0);
  				{
  					while (1) {
  						if (!(res_327204_3876443242 <= HEX3Atmp_327201_3876443242)) goto LA30;
  						i_327118_3876443242 = res_327204_3876443242;
  						{
  							NIM_BOOL LOC33;
  							Tsym294834* x0;
  							Tsym294834* y0;
  							LOC33 = (NIM_BOOL)0;
  							LOC33 = ((*(*(*a0).n).kindU.S6.sons->data[i_327118_3876443242]).kind == ((Tnodekind294020) 3));
  							if (!(LOC33)) goto LA34;
  							LOC33 = ((*(*(*b0).n).kindU.S6.sons->data[i_327118_3876443242]).kind == ((Tnodekind294020) 3));
  							LA34: ;
  							if (!LOC33) goto LA35;
  							x0 = (*(*(*a0).n).kindU.S6.sons->data[i_327118_3876443242]).kindU.S4.sym;
  							y0 = (*(*(*b0).n).kindU.S6.sons->data[i_327118_3876443242]).kindU.S4.sym;
  							result0 = ((*(*x0).name).Sup.id == (*(*y0).name).Sup.id);
  							{
  								if (!!(result0)) goto LA39;
  								goto LA27;
  							}
  							LA39: ;
  						}
  						goto LA31;
  						LA35: ;
  						{
  							internalerror_198100_155036129((*(*a0).n).info, ((NimStringDesc*) &T3876443242_115));
  						}
  						LA31: ;
  						res_327204_3876443242 += ((NI) 1);
  					} LA30: ;
  				}
  			} LA27: ;
  		}
  		goto LA19;
  		LA25: ;
  		{
  			NIM_BOOL LOC43;
  			NIM_BOOL LOC44;
  			NIM_BOOL LOC46;
  			LOC43 = (NIM_BOOL)0;
  			LOC44 = (NIM_BOOL)0;
  			LOC44 = !(((*a0).n == (*b0).n));
  			if (!(LOC44)) goto LA45;
  			LOC46 = (NIM_BOOL)0;
  			LOC46 = ((*a0).n == NIM_NIL);
  			if (LOC46) goto LA47;
  			LOC46 = ((*b0).n == NIM_NIL);
  			LA47: ;
  			LOC44 = LOC46;
  			LA45: ;
  			LOC43 = LOC44;
  			if (!(LOC43)) goto LA48;
  			LOC43 = !((((*c0).flags &(1U<<((NU)(((Ttypecmpflag326429) 0))&7U)))!=0));
  			LA48: ;
  			if (!LOC43) goto LA49;
  			result0 = NIM_FALSE;
  		}
  		goto LA19;
  		LA49: ;
  		LA19: ;
  	}
  	LA5: ;
  	}BeforeRet: ;
  	return result0;
  }
  
  N_NIMCALL(NIM_BOOL, samechildrenaux_327432_3876443242)(Ttype294840* a0, Ttype294840* b0, Tsametypeclosure326433* c0) {
  	NIM_BOOL result0;
  {	result0 = (NIM_BOOL)0;
  	{
  		NI LOC3;
  		NI LOC4;
  		LOC3 = (NI)0;
  		LOC3 = sonslen_297327_850551059(a0);
  		LOC4 = (NI)0;
  		LOC4 = sonslen_297327_850551059(b0);
  		if (!!((LOC3 == LOC4))) goto LA5;
  		result0 = NIM_FALSE;
  		goto BeforeRet;
  	}
  	LA5: ;
  	result0 = NIM_TRUE;
  	{
  		NI i_327450_3876443242;
  		NI HEX3Atmp_327452_3876443242;
  		NI LOC8;
  		NI res_327455_3876443242;
  		i_327450_3876443242 = (NI)0;
  		HEX3Atmp_327452_3876443242 = (NI)0;
  		LOC8 = (NI)0;
  		LOC8 = sonslen_297327_850551059(a0);
  		HEX3Atmp_327452_3876443242 = (NI)(LOC8 - ((NI) 1));
  		res_327455_3876443242 = ((NI) 0);
  		{
  			while (1) {
  				if (!(res_327455_3876443242 <= HEX3Atmp_327452_3876443242)) goto LA10;
  				i_327450_3876443242 = res_327455_3876443242;
  				result0 = sametypeornilaux_326591_3876443242((*a0).sons->data[i_327450_3876443242], (*b0).sons->data[i_327450_3876443242], c0);
  				{
  					if (!!(result0)) goto LA13;
  					goto BeforeRet;
  				}
  				LA13: ;
  				res_327455_3876443242 += ((NI) 1);
  			} LA10: ;
  		}
  	}
  	}BeforeRet: ;
  	return result0;
  }
  
  N_NIMCALL(NIM_BOOL, sameconstraints_326763_3876443242)(Tnode294802* a0, Tnode294802* b0) {
  	NIM_BOOL result0;
  {	result0 = (NIM_BOOL)0;
  	{
  		NIM_BOOL LOC3;
  		LOC3 = (NIM_BOOL)0;
  		LOC3 = a0 == 0;
  		if (!(LOC3)) goto LA4;
  		LOC3 = b0 == 0;
  		LA4: ;
  		if (!LOC3) goto LA5;
  		result0 = NIM_TRUE;
  		goto BeforeRet;
  	}
  	LA5: ;
  	{
  		NI LOC9;
  		NI LOC10;
  		NimStringDesc* LOC13;
  		LOC9 = (NI)0;
  		LOC9 = len_295081_850551059(a0);
  		LOC10 = (NI)0;
  		LOC10 = len_295081_850551059(b0);
  		if (!!((LOC9 == LOC10))) goto LA11;
  		LOC13 = (NimStringDesc*)0;
  		LOC13 = HEX24_198185_1689653243(T3876443242_116);
  		internalerror_198113_155036129(LOC13);
  	}
  	LA11: ;
  	{
  		NI i_326811_3876443242;
  		NI HEX3Atmp_326817_3876443242;
  		NI LOC15;
  		NI res_326820_3876443242;
  		i_326811_3876443242 = (NI)0;
  		HEX3Atmp_326817_3876443242 = (NI)0;
  		LOC15 = (NI)0;
  		LOC15 = len_295081_850551059(a0);
  		HEX3Atmp_326817_3876443242 = (LOC15 - 1);
  		res_326820_3876443242 = ((NI) 1);
  		{
  			while (1) {
  				if (!(res_326820_3876443242 <= HEX3Atmp_326817_3876443242)) goto LA17;
  				i_326811_3876443242 = res_326820_3876443242;
  				{
  					Tnode294802* LOC20;
  					Tnode294802* LOC21;
  					NIM_BOOL LOC22;
  					LOC20 = (Tnode294802*)0;
  					LOC20 = HEX5BHEX5D_295238_850551059(a0, i_326811_3876443242);
  					LOC21 = (Tnode294802*)0;
  					LOC21 = HEX5BHEX5D_295238_850551059(b0, i_326811_3876443242);
  					LOC22 = (NIM_BOOL)0;
  					LOC22 = exprstructuralequivalent_320311_2616423590((*(*LOC20).kindU.S4.sym).constraint, (*(*LOC21).kindU.S4.sym).constraint, NIM_FALSE);
  					if (!!(LOC22)) goto LA23;
  					result0 = NIM_FALSE;
  					goto BeforeRet;
  				}
  				LA23: ;
  				res_326820_3876443242 += ((NI) 1);
  			} LA17: ;
  		}
  	}
  	result0 = NIM_TRUE;
  	goto BeforeRet;
  	}BeforeRet: ;
  	return result0;
  }
  
  N_NIMCALL(NIM_BOOL, sametypeaux_326585_3876443242)(Ttype294840* x0, Ttype294840* y0, Tsametypeclosure326433* c0) {
  	NIM_BOOL result0;
  	Ttype294840* a0;
  	Ttype294840* b0;
  {	result0 = (NIM_BOOL)0;
  	{
  		if (!(x0 == y0)) goto LA3;
  		result0 = NIM_TRUE;
  		goto BeforeRet;
  	}
  	LA3: ;
  	a0 = skiptypes_298099_850551059(x0, 2048);
  	b0 = skiptypes_298099_850551059(y0, 2048);
  	{
  		if (!!(((*a0).kind == (*b0).kind))) goto LA7;
  		switch ((*c0).cmp) {
  		case ((Tdistinctcompare326427) 0):
  		{
  			result0 = NIM_FALSE;
  			goto BeforeRet;
  		}
  		break;
  		case ((Tdistinctcompare326427) 1):
  		{
  			{
  				while (1) {
  					if (!((*a0).kind == ((Ttypekind294244) 13))) goto LA12;
  					a0 = (*a0).sons->data[((NI) 0)];
  				} LA12: ;
  			}
  			{
  				while (1) {
  					if (!((*b0).kind == ((Ttypekind294244) 13))) goto LA14;
  					b0 = (*b0).sons->data[((NI) 0)];
  				} LA14: ;
  			}
  			{
  				if (!!(((*a0).kind == (*b0).kind))) goto LA17;
  				result0 = NIM_FALSE;
  				goto BeforeRet;
  			}
  			LA17: ;
  		}
  		break;
  		case ((Tdistinctcompare326427) 2):
  		{
  			{
  				while (1) {
  					if (!((*a0).kind == ((Ttypekind294244) 13))) goto LA21;
  					a0 = (*a0).sons->data[((NI) 0)];
  				} LA21: ;
  			}
  			{
  				if (!!(((*a0).kind == (*b0).kind))) goto LA24;
  				result0 = NIM_FALSE;
  				goto BeforeRet;
  			}
  			LA24: ;
  		}
  		break;
  		}
  	}
  	LA7: ;
  	{
  		NIM_BOOL LOC28;
  		Ttype294840* lhs0;
  		Ttype294840* rhs0;
  		LOC28 = (NIM_BOOL)0;
  		LOC28 = ((*x0).kind == ((Ttypekind294244) 11));
  		if (!(LOC28)) goto LA29;
  		LOC28 = !((((*c0).flags &(1U<<((NU)(((Ttypecmpflag326429) 0))&7U)))!=0));
  		LA29: ;
  		if (!LOC28) goto LA30;
  		lhs0 = skipgenericalias_327481_3876443242(x0);
  		rhs0 = skipgenericalias_327481_3876443242(y0);
  		{
  			NIM_BOOL LOC34;
  			Ttype294840* LOC36;
  			Ttype294840* LOC37;
  			LOC34 = (NIM_BOOL)0;
  			LOC34 = !(((*rhs0).kind == ((Ttypekind294244) 11)));
  			if (LOC34) goto LA35;
  			LOC36 = (Ttype294840*)0;
  			LOC36 = base_322021_3876443242(lhs0);
  			LOC37 = (Ttype294840*)0;
  			LOC37 = base_322021_3876443242(rhs0);
  			LOC34 = !((LOC36 == LOC37));
  			LA35: ;
  			if (!LOC34) goto LA38;
  			result0 = NIM_FALSE;
  			goto BeforeRet;
  		}
  		LA38: ;
  		{
  			NI i_327905_3876443242;
  			NI HEX3Atmp_328190_3876443242;
  			NI LOC41;
  			NI res_328193_3876443242;
  			i_327905_3876443242 = (NI)0;
  			HEX3Atmp_328190_3876443242 = (NI)0;
  			LOC41 = (NI)0;
  			LOC41 = len_297339_850551059(lhs0);
  			HEX3Atmp_328190_3876443242 = (NI)(LOC41 - ((NI) 2));
  			res_328193_3876443242 = ((NI) 1);
  			{
  				while (1) {
  					Ttype294840* ff0;
  					Ttype294840* aa0;
  					if (!(res_328193_3876443242 <= HEX3Atmp_328190_3876443242)) goto LA43;
  					i_327905_3876443242 = res_328193_3876443242;
  					ff0 = (*rhs0).sons->data[i_327905_3876443242];
  					aa0 = (*lhs0).sons->data[i_327905_3876443242];
  					{
  						NIM_BOOL LOC46;
  						LOC46 = (NIM_BOOL)0;
  						LOC46 = sametypeaux_326585_3876443242(ff0, aa0, c0);
  						if (!!(LOC46)) goto LA47;
  						result0 = NIM_FALSE;
  						goto BeforeRet;
  					}
  					LA47: ;
  					res_328193_3876443242 += ((NI) 1);
  				} LA43: ;
  			}
  		}
  		result0 = NIM_TRUE;
  		goto BeforeRet;
  	}
  	LA30: ;
  	switch ((*a0).kind) {
  	case ((Ttypekind294244) 3):
  	case ((Ttypekind294244) 2):
  	case ((Ttypekind294244) 1):
  	case ((Ttypekind294244) 5):
  	case ((Ttypekind294244) 26):
  	case ((Ttypekind294244) 28):
  	case ((Ttypekind294244) 29):
  	case ((Ttypekind294244) 31) ... ((Ttypekind294244) 45):
  	case ((Ttypekind294244) 7):
  	case ((Ttypekind294244) 6):
  	case ((Ttypekind294244) 62):
  	{
  		result0 = sameflags_327497_3876443242(a0, b0);
  	}
  	break;
  	case ((Ttypekind294244) 59):
  	case ((Ttypekind294244) 60):
  	{
  		NIM_BOOL LOC51;
  		LOC51 = (NIM_BOOL)0;
  		LOC51 = exprstructuralequivalent_320311_2616423590((*a0).n, (*b0).n, NIM_FALSE);
  		if (!(LOC51)) goto LA52;
  		LOC51 = sameflags_327497_3876443242(a0, b0);
  		LA52: ;
  		result0 = LOC51;
  		{
  			NIM_BOOL LOC55;
  			NIM_BOOL LOC56;
  			NI LOC58;
  			NI LOC59;
  			NI LOC61;
  			LOC55 = (NIM_BOOL)0;
  			LOC56 = (NIM_BOOL)0;
  			LOC56 = result0;
  			if (!(LOC56)) goto LA57;
  			LOC58 = (NI)0;
  			LOC58 = len_297339_850551059(a0);
  			LOC59 = (NI)0;
  			LOC59 = len_297339_850551059(b0);
  			LOC56 = (LOC58 == LOC59);
  			LA57: ;
  			LOC55 = LOC56;
  			if (!(LOC55)) goto LA60;
  			LOC61 = (NI)0;
  			LOC61 = len_297339_850551059(a0);
  			LOC55 = (LOC61 == ((NI) 1));
  			LA60: ;
  			if (!LOC55) goto LA62;
  			{
  				if (!((*c0).reccheck < ((NI) 3))) goto LA66;
  				(*c0).reccheck += ((NI) 1);
  			}
  			goto LA64;
  			LA66: ;
  			{
  				{
  					NIM_BOOL LOC71;
  					LOC71 = (NIM_BOOL)0;
  					LOC71 = containsorincl_326456_3876443242(c0, a0, b0);
  					if (!LOC71) goto LA72;
  					result0 = NIM_TRUE;
  					goto BeforeRet;
  				}
  				LA72: ;
  			}
  			LA64: ;
  			result0 = sametypeaux_326585_3876443242((*a0).sons->data[((NI) 0)], (*b0).sons->data[((NI) 0)], c0);
  		}
  		LA62: ;
  	}
  	break;
  	case ((Ttypekind294244) 17):
  	{
  		{
  			if (!!(((((*a0).flags | (*b0).flags) &(1U<<((NU)(((Ttypeflag294431) 8))&31U)))!=0))) goto LA77;
  			result0 = ((*a0).Sup.id == (*b0).Sup.id);
  		}
  		goto LA75;
  		LA77: ;
  		{
  			{
  				NIM_BOOL LOC82;
  				NIM_BOOL LOC96;
  				LOC82 = (NIM_BOOL)0;
  				LOC82 = ((((*a0).flags & (*b0).flags) &(1U<<((NU)(((Ttypeflag294431) 8))&31U)))!=0);
  				if (!(LOC82)) goto LA83;
  				LOC82 = ((*(*a0).sym).Sup.id == (*(*b0).sym).Sup.id);
  				LA83: ;
  				if (!LOC82) goto LA84;
  				{
  					if (!((*c0).reccheck < ((NI) 3))) goto LA88;
  					(*c0).reccheck += ((NI) 1);
  				}
  				goto LA86;
  				LA88: ;
  				{
  					{
  						NIM_BOOL LOC93;
  						LOC93 = (NIM_BOOL)0;
  						LOC93 = containsorincl_326456_3876443242(c0, a0, b0);
  						if (!LOC93) goto LA94;
  						result0 = NIM_TRUE;
  						goto BeforeRet;
  					}
  					LA94: ;
  				}
  				LA86: ;
  				LOC96 = (NIM_BOOL)0;
  				LOC96 = sameobjectstructures_327405_3876443242(a0, b0, c0);
  				if (!(LOC96)) goto LA97;
  				LOC96 = sameflags_327497_3876443242(a0, b0);
  				LA97: ;
  				result0 = LOC96;
  			}
  			LA84: ;
  		}
  		LA75: ;
  	}
  	break;
  	case ((Ttypekind294244) 13):
  	{
  		{
  			if (!((*c0).reccheck < ((NI) 3))) goto LA101;
  			(*c0).reccheck += ((NI) 1);
  		}
  		goto LA99;
  		LA101: ;
  		{
  			{
  				NIM_BOOL LOC106;
  				LOC106 = (NIM_BOOL)0;
  				LOC106 = containsorincl_326456_3876443242(c0, a0, b0);
  				if (!LOC106) goto LA107;
  				result0 = NIM_TRUE;
  				goto BeforeRet;
  			}
  			LA107: ;
  		}
  		LA99: ;
  		{
  			if (!((*c0).cmp == ((Tdistinctcompare326427) 0))) goto LA111;
  			{
  				NIM_BOOL LOC115;
  				LOC115 = (NIM_BOOL)0;
  				LOC115 = sameflags_327497_3876443242(a0, b0);
  				if (!LOC115) goto LA116;
  				{
  					if (!!(((((*a0).flags | (*b0).flags) &(1U<<((NU)(((Ttypeflag294431) 8))&31U)))!=0))) goto LA120;
  					result0 = ((*a0).Sup.id == (*b0).Sup.id);
  				}
  				goto LA118;
  				LA120: ;
  				{
  					{
  						NIM_BOOL LOC125;
  						LOC125 = (NIM_BOOL)0;
  						LOC125 = ((((*a0).flags & (*b0).flags) &(1U<<((NU)(((Ttypeflag294431) 8))&31U)))!=0);
  						if (!(LOC125)) goto LA126;
  						LOC125 = ((*(*a0).sym).Sup.id == (*(*b0).sym).Sup.id);
  						LA126: ;
  						if (!LOC125) goto LA127;
  						result0 = sametypeaux_326585_3876443242((*a0).sons->data[((NI) 0)], (*b0).sons->data[((NI) 0)], c0);
  					}
  					LA127: ;
  				}
  				LA118: ;
  			}
  			LA116: ;
  		}
  		goto LA109;
  		LA111: ;
  		{
  			NIM_BOOL LOC130;
  			LOC130 = (NIM_BOOL)0;
  			LOC130 = sametypeaux_326585_3876443242((*a0).sons->data[((NI) 0)], (*b0).sons->data[((NI) 0)], c0);
  			if (!(LOC130)) goto LA131;
  			LOC130 = sameflags_327497_3876443242(a0, b0);
  			LA131: ;
  			result0 = LOC130;
  		}
  		LA109: ;
  	}
  	break;
  	case ((Ttypekind294244) 14):
  	case ((Ttypekind294244) 30):
  	{
  		NIM_BOOL LOC133;
  		LOC133 = (NIM_BOOL)0;
  		LOC133 = ((*a0).Sup.id == (*b0).Sup.id);
  		if (!(LOC133)) goto LA134;
  		LOC133 = sameflags_327497_3876443242(a0, b0);
  		LA134: ;
  		result0 = LOC133;
  	}
  	break;
  	case ((Ttypekind294244) 50):
  	{
  		result0 = ((*b0).kind == ((Ttypekind294244) 50));
  	}
  	break;
  	case ((Ttypekind294244) 18):
  	{
  		NIM_BOOL LOC147;
  		{
  			if (!((*c0).reccheck < ((NI) 3))) goto LA139;
  			(*c0).reccheck += ((NI) 1);
  		}
  		goto LA137;
  		LA139: ;
  		{
  			{
  				NIM_BOOL LOC144;
  				LOC144 = (NIM_BOOL)0;
  				LOC144 = containsorincl_326456_3876443242(c0, a0, b0);
  				if (!LOC144) goto LA145;
  				result0 = NIM_TRUE;
  				goto BeforeRet;
  			}
  			LA145: ;
  		}
  		LA137: ;
  		LOC147 = (NIM_BOOL)0;
  		LOC147 = sametuple_327040_3876443242(a0, b0, c0);
  		if (!(LOC147)) goto LA148;
  		LOC147 = sameflags_327497_3876443242(a0, b0);
  		LA148: ;
  		result0 = LOC147;
  	}
  	break;
  	case ((Ttypekind294244) 8):
  	{
  		{
  			if (!((*c0).cmp == ((Tdistinctcompare326427) 1))) goto LA152;
  			result0 = NIM_FALSE;
  		}
  		goto LA150;
  		LA152: ;
  		{
  			NIM_BOOL LOC167;
  			if (!(((*c0).flags &(1U<<((NU)(((Ttypecmpflag326429) 2))&7U)))!=0)) goto LA155;
  			{
  				if (!((*c0).reccheck < ((NI) 3))) goto LA159;
  				(*c0).reccheck += ((NI) 1);
  			}
  			goto LA157;
  			LA159: ;
  			{
  				{
  					NIM_BOOL LOC164;
  					LOC164 = (NIM_BOOL)0;
  					LOC164 = containsorincl_326456_3876443242(c0, a0, b0);
  					if (!LOC164) goto LA165;
  					result0 = NIM_TRUE;
  					goto BeforeRet;
  				}
  				LA165: ;
  			}
  			LA157: ;
  			LOC167 = (NIM_BOOL)0;
  			LOC167 = samechildrenaux_327432_3876443242(x0, y0, c0);
  			if (!(LOC167)) goto LA168;
  			LOC167 = sameflags_327497_3876443242(a0, b0);
  			LA168: ;
  			result0 = LOC167;
  		}
  		goto LA150;
  		LA155: ;
  		{
  			result0 = sameflags_327497_3876443242(a0, b0);
  		}
  		LA150: ;
  	}
  	break;
  	case ((Ttypekind294244) 12):
  	{
  		NIM_BOOL LOC171;
  		LOC171 = (NIM_BOOL)0;
  		LOC171 = samechildrenaux_327432_3876443242(a0, b0, c0);
  		if (!(LOC171)) goto LA172;
  		LOC171 = sameflags_327497_3876443242(a0, b0);
  		LA172: ;
  		result0 = LOC171;
  		{
  			NIM_BOOL LOC175;
  			LOC175 = (NIM_BOOL)0;
  			LOC175 = result0;
  			if (!(LOC175)) goto LA176;
  			LOC175 = (((*c0).flags &(1U<<((NU)(((Ttypecmpflag326429) 3))&7U)))!=0);
  			LA176: ;
  			if (!LOC175) goto LA177;
  			result0 = ((*(*a0).sym).position == (*(*b0).sym).position);
  		}
  		LA177: ;
  	}
  	break;
  	case ((Ttypekind294244) 9):
  	case ((Ttypekind294244) 10):
  	case ((Ttypekind294244) 24):
  	case ((Ttypekind294244) 27):
  	case ((Ttypekind294244) 19):
  	case ((Ttypekind294244) 22):
  	case ((Ttypekind294244) 21):
  	case ((Ttypekind294244) 23):
  	case ((Ttypekind294244) 4):
  	case ((Ttypekind294244) 16):
  	case ((Ttypekind294244) 25):
  	case ((Ttypekind294244) 46):
  	case ((Ttypekind294244) 47):
  	case ((Ttypekind294244) 48):
  	case ((Ttypekind294244) 49):
  	case ((Ttypekind294244) 15):
  	case ((Ttypekind294244) 51):
  	case ((Ttypekind294244) 61):
  	case ((Ttypekind294244) 54):
  	case ((Ttypekind294244) 52):
  	case ((Ttypekind294244) 53):
  	case ((Ttypekind294244) 55):
  	case ((Ttypekind294244) 56):
  	case ((Ttypekind294244) 57):
  	case ((Ttypekind294244) 58):
  	{
  		NIM_BOOL LOC196;
  		{
  			if (!((*c0).reccheck < ((NI) 3))) goto LA182;
  			(*c0).reccheck += ((NI) 1);
  		}
  		goto LA180;
  		LA182: ;
  		{
  			{
  				NIM_BOOL LOC187;
  				LOC187 = (NIM_BOOL)0;
  				LOC187 = containsorincl_326456_3876443242(c0, a0, b0);
  				if (!LOC187) goto LA188;
  				result0 = NIM_TRUE;
  				goto BeforeRet;
  			}
  			LA188: ;
  		}
  		LA180: ;
  		{
  			NIM_BOOL LOC192;
  			LOC192 = (NIM_BOOL)0;
  			LOC192 = ((*a0).kind == ((Ttypekind294244) 52));
  			if (!(LOC192)) goto LA193;
  			LOC192 = !(((*a0).n == NIM_NIL));
  			LA193: ;
  			if (!LOC192) goto LA194;
  			result0 = ((*a0).n == (*b0).n);
  			goto BeforeRet;
  		}
  		LA194: ;
  		LOC196 = (NIM_BOOL)0;
  		LOC196 = samechildrenaux_327432_3876443242(a0, b0, c0);
  		if (!(LOC196)) goto LA197;
  		LOC196 = sameflags_327497_3876443242(a0, b0);
  		LA197: ;
  		result0 = LOC196;
  		{
  			NIM_BOOL LOC200;
  			NIM_BOOL LOC204;
  			NIM_BOOL LOC205;
  			NIM_BOOL LOC208;
  			LOC200 = (NIM_BOOL)0;
  			LOC200 = result0;
  			if (!(LOC200)) goto LA201;
  			LOC200 = ((*a0).kind == ((Ttypekind294244) 25));
  			LA201: ;
  			if (!LOC200) goto LA202;
  			LOC204 = (NIM_BOOL)0;
  			LOC205 = (NIM_BOOL)0;
  			LOC205 = (((*c0).flags &(1U<<((NU)(((Ttypecmpflag326429) 1))&7U)))!=0);
  			if (LOC205) goto LA206;
  			LOC205 = ((*a0).callconv == (*b0).callconv);
  			LA206: ;
  			LOC204 = LOC205;
  			if (!(LOC204)) goto LA207;
  			LOC208 = (NIM_BOOL)0;
  			LOC208 = !((((*c0).flags &(1U<<((NU)(((Ttypecmpflag326429) 4))&7U)))!=0));
  			if (LOC208) goto LA209;
  			LOC208 = sameconstraints_326763_3876443242((*a0).n, (*b0).n);
  			LA209: ;
  			LOC204 = LOC208;
  			LA207: ;
  			result0 = LOC204;
  		}
  		LA202: ;
  	}
  	break;
  	case ((Ttypekind294244) 20):
  	{
  		NIM_BOOL LOC221;
  		NIM_BOOL LOC222;
  		{
  			if (!((*c0).reccheck < ((NI) 3))) goto LA213;
  			(*c0).reccheck += ((NI) 1);
  		}
  		goto LA211;
  		LA213: ;
  		{
  			{
  				NIM_BOOL LOC218;
  				LOC218 = (NIM_BOOL)0;
  				LOC218 = containsorincl_326456_3876443242(c0, a0, b0);
  				if (!LOC218) goto LA219;
  				result0 = NIM_TRUE;
  				goto BeforeRet;
  			}
  			LA219: ;
  		}
  		LA211: ;
  		LOC221 = (NIM_BOOL)0;
  		LOC222 = (NIM_BOOL)0;
  		LOC222 = sametypeornilaux_326591_3876443242((*a0).sons->data[((NI) 0)], (*b0).sons->data[((NI) 0)], c0);
  		if (!(LOC222)) goto LA223;
  		LOC222 = samevalue_301169_2984716966((*(*a0).n).kindU.S6.sons->data[((NI) 0)], (*(*b0).n).kindU.S6.sons->data[((NI) 0)]);
  		LA223: ;
  		LOC221 = LOC222;
  		if (!(LOC221)) goto LA224;
  		LOC221 = samevalue_301169_2984716966((*(*a0).n).kindU.S6.sons->data[((NI) 1)], (*(*b0).n).kindU.S6.sons->data[((NI) 1)]);
  		LA224: ;
  		result0 = LOC221;
  	}
  	break;
  	case ((Ttypekind294244) 11):
  	{
  	}
  	break;
  	case ((Ttypekind294244) 0):
  	{
  		result0 = NIM_FALSE;
  	}
  	break;
  	}
  	}BeforeRet: ;
  	return result0;
  }
  
  N_NIMCALL(NIM_BOOL, comparetypes_328214_3876443242)(Ttype294840* x0, Ttype294840* y0, Tdistinctcompare326427 cmp0, Ttypecmpflag326429Set flags0) {
  	NIM_BOOL result0;
  	Tsametypeclosure326433 c0;
  	result0 = (NIM_BOOL)0;
  	memset((void*)(&c0), 0, sizeof(c0));
  	chckNil((void*)(&c0));
  	memset((void*)(&c0), 0, sizeof(c0));
  	initsametypeclosure_326453_3876443242((&c0));
  	c0.cmp = cmp0;
  	c0.flags = flags0;
  	{
  		if (!(x0 == y0)) goto LA3;
  		result0 = NIM_TRUE;
  	}
  	goto LA1;
  	LA3: ;
  	{
  		NIM_BOOL LOC6;
  		LOC6 = (NIM_BOOL)0;
  		LOC6 = x0 == 0;
  		if (LOC6) goto LA7;
  		LOC6 = y0 == 0;
  		LA7: ;
  		if (!LOC6) goto LA8;
  		result0 = NIM_FALSE;
  	}
  	goto LA1;
  	LA8: ;
  	{
  		result0 = sametypeaux_326585_3876443242(x0, y0, (&c0));
  	}
  	LA1: ;
  	return result0;
  }
  
  N_NIMCALL(NIM_BOOL, iterovernode_323068_3876443242)(Intset270030* marker0, Tnode294802* n0, Ttypeiter322025 iter0, TNimObject* closure0) {
  	NIM_BOOL result0;
  {	result0 = (NIM_BOOL)0;
  	{
  		if (!!((n0 == NIM_NIL))) goto LA3;
  		switch ((*n0).kind) {
  		case ((Tnodekind294020) 0) ... ((Tnodekind294020) 23):
  		{
  			result0 = iterovertypeaux_323061_3876443242(marker0, (*n0).typ, iter0, closure0);
  		}
  		break;
  		default:
  		{
  			{
  				NI i_323099_3876443242;
  				NI HEX3Atmp_323102_3876443242;
  				NI LOC8;
  				NI res_323105_3876443242;
  				i_323099_3876443242 = (NI)0;
  				HEX3Atmp_323102_3876443242 = (NI)0;
  				LOC8 = (NI)0;
  				LOC8 = sonslen_297351_850551059(n0);
  				HEX3Atmp_323102_3876443242 = (NI)(LOC8 - ((NI) 1));
  				res_323105_3876443242 = ((NI) 0);
  				{
  					while (1) {
  						if (!(res_323105_3876443242 <= HEX3Atmp_323102_3876443242)) goto LA10;
  						i_323099_3876443242 = res_323105_3876443242;
  						result0 = iterovernode_323068_3876443242(marker0, (*n0).kindU.S6.sons->data[i_323099_3876443242], iter0, closure0);
  						{
  							if (!result0) goto LA13;
  							goto BeforeRet;
  						}
  						LA13: ;
  						res_323105_3876443242 += ((NI) 1);
  					} LA10: ;
  				}
  			}
  		}
  		break;
  		}
  	}
  	LA3: ;
  	}BeforeRet: ;
  	return result0;
  }
  
  N_NIMCALL(NIM_BOOL, iterovertypeaux_323061_3876443242)(Intset270030* marker0, Ttype294840* t0, Ttypeiter322025 iter0, TNimObject* closure0) {
  	NIM_BOOL result0;
  {	result0 = (NIM_BOOL)0;
  	result0 = NIM_FALSE;
  	{
  		if (!(t0 == NIM_NIL)) goto LA3;
  		goto BeforeRet;
  	}
  	LA3: ;
  	result0 = iter0(t0, closure0);
  	{
  		if (!result0) goto LA7;
  		goto BeforeRet;
  	}
  	LA7: ;
  	{
  		NIM_BOOL LOC11;
  		LOC11 = (NIM_BOOL)0;
  		LOC11 = containsorincl_270862_2627731572(marker0, (*t0).Sup.id);
  		if (!!(LOC11)) goto LA12;
  		switch ((*t0).kind) {
  		case ((Ttypekind294244) 11):
  		case ((Ttypekind294244) 10):
  		{
  			Ttype294840* LOC15;
  			LOC15 = (Ttype294840*)0;
  			LOC15 = lastson_297377_850551059(t0);
  			result0 = iterovertypeaux_323061_3876443242(marker0, LOC15, iter0, closure0);
  		}
  		break;
  		default:
  		{
  			{
  				NI i_323140_3876443242;
  				NI HEX3Atmp_323154_3876443242;
  				NI LOC18;
  				NI res_323157_3876443242;
  				i_323140_3876443242 = (NI)0;
  				HEX3Atmp_323154_3876443242 = (NI)0;
  				LOC18 = (NI)0;
  				LOC18 = sonslen_297327_850551059(t0);
  				HEX3Atmp_323154_3876443242 = (NI)(LOC18 - ((NI) 1));
  				res_323157_3876443242 = ((NI) 0);
  				{
  					while (1) {
  						if (!(res_323157_3876443242 <= HEX3Atmp_323154_3876443242)) goto LA20;
  						i_323140_3876443242 = res_323157_3876443242;
  						result0 = iterovertypeaux_323061_3876443242(marker0, (*t0).sons->data[i_323140_3876443242], iter0, closure0);
  						{
  							if (!result0) goto LA23;
  							goto BeforeRet;
  						}
  						LA23: ;
  						res_323157_3876443242 += ((NI) 1);
  					} LA20: ;
  				}
  			}
  			{
  				if (!!(((*t0).n == NIM_NIL))) goto LA27;
  				result0 = iterovernode_323068_3876443242(marker0, (*t0).n, iter0, closure0);
  			}
  			LA27: ;
  		}
  		break;
  		}
  	}
  	LA12: ;
  	}BeforeRet: ;
  	return result0;
  }
  
  N_NIMCALL(NIM_BOOL, iterovertype_322049_3876443242)(Ttype294840* t0, Ttypeiter322025 iter0, TNimObject* closure0) {
  	NIM_BOOL result0;
  	Intset270030 marker0;
  	result0 = (NIM_BOOL)0;
  	memset((void*)(&marker0), 0, sizeof(marker0));
  	chckNil((void*)(&marker0));
  	memset((void*)(&marker0), 0, sizeof(marker0));
  	initintset_270885_2627731572((&marker0));
  	result0 = iterovertypeaux_323061_3876443242((&marker0), t0, iter0, closure0);
  	return result0;
  }
  
  N_NIMCALL(NIM_BOOL, containsgenerictypeiter_330213_3876443242)(Ttype294840* t0, TNimObject* closure0) {
  	NIM_BOOL result0;
  {	result0 = (NIM_BOOL)0;
  	{
  		if (!((*t0).kind == ((Ttypekind294244) 59))) goto LA3;
  		result0 = ((*t0).n == NIM_NIL);
  		goto BeforeRet;
  	}
  	LA3: ;
  	{
  		if (!((*t0).kind == ((Ttypekind294244) 8))) goto LA7;
  		{
  			Ttype294840* LOC11;
  			LOC11 = (Ttype294840*)0;
  			LOC11 = base_322021_3876443242(t0);
  			if (!((*LOC11).kind == ((Ttypekind294244) 0))) goto LA12;
  			result0 = NIM_TRUE;
  			goto BeforeRet;
  		}
  		LA12: ;
  		{
  			Ttype294840* LOC16;
  			NIM_BOOL LOC17;
  			LOC16 = (Ttype294840*)0;
  			LOC16 = base_322021_3876443242(t0);
  			LOC17 = (NIM_BOOL)0;
  			LOC17 = containsgenerictypeiter_330213_3876443242(LOC16, closure0);
  			if (!LOC17) goto LA18;
  			result0 = NIM_TRUE;
  			goto BeforeRet;
  		}
  		LA18: ;
  		result0 = NIM_FALSE;
  		goto BeforeRet;
  	}
  	LA7: ;
  	{
  		if (!((IL64(1727130457096590848) &((NU64)1<<((NU)((*t0).kind)&63U)))!=0)) goto LA22;
  		result0 = NIM_TRUE;
  		goto BeforeRet;
  	}
  	LA22: ;
  	result0 = NIM_FALSE;
  	goto BeforeRet;
  	}BeforeRet: ;
  	return result0;
  }
  
  N_NIMCALL(NIM_BOOL, containsgenerictype_330292_3876443242)(Ttype294840* t0) {
  	NIM_BOOL result0;
  	result0 = (NIM_BOOL)0;
  	result0 = iterovertype_322049_3876443242(t0, containsgenerictypeiter_330213_3876443242, NIM_NIL);
  	return result0;
  }
  
  N_NIMCALL(NI64, getordvalue_322129_3876443242)(Tnode294802* n0) {
  	NI64 result0;
  	result0 = (NI64)0;
  	switch ((*n0).kind) {
  	case ((Tnodekind294020) 5) ... ((Tnodekind294020) 15):
  	{
  		result0 = (*n0).kindU.S1.intval;
  	}
  	break;
  	case ((Tnodekind294020) 23):
  	{
  		result0 = IL64(0);
  	}
  	break;
  	case ((Tnodekind294020) 58):
  	{
  		result0 = getordvalue_322129_3876443242((*n0).kindU.S6.sons->data[((NI) 1)]);
  	}
  	break;
  	default:
  	{
  		localerror_198080_155036129((*n0).info, ((Tmsgkind193002) 78), ((NimStringDesc*) &T3876443242_2));
  		result0 = IL64(0);
  	}
  	break;
  	}
  	return result0;
  }
  
  N_NIMCALL(NI64, firstord_322001_3876443242)(Ttype294840* t0) {
  	NI64 result0;
  	result0 = (NI64)0;
  	switch ((*t0).kind) {
  	case ((Ttypekind294244) 1):
  	case ((Ttypekind294244) 2):
  	case ((Ttypekind294244) 24):
  	case ((Ttypekind294244) 27):
  	case ((Ttypekind294244) 28):
  	case ((Ttypekind294244) 48):
  	case ((Ttypekind294244) 50):
  	{
  		result0 = IL64(0);
  	}
  	break;
  	case ((Ttypekind294244) 19):
  	case ((Ttypekind294244) 23):
  	{
  		result0 = firstord_322001_3876443242((*t0).sons->data[((NI) 0)]);
  	}
  	break;
  	case ((Ttypekind294244) 16):
  	case ((Ttypekind294244) 4):
  	{
  		result0 = firstord_322001_3876443242((*t0).sons->data[((NI) 0)]);
  	}
  	break;
  	case ((Ttypekind294244) 20):
  	{
  		result0 = getordvalue_322129_3876443242((*(*t0).n).kindU.S6.sons->data[((NI) 0)]);
  	}
  	break;
  	case ((Ttypekind294244) 31):
  	{
  		{
  			if (!(intsize_178641_4151366050 == ((NI) 4))) goto LA8;
  			result0 = IL64(-2147483648);
  		}
  		goto LA6;
  		LA8: ;
  		{
  			result0 = (IL64(-9223372036854775807) - IL64(1));
  		}
  		LA6: ;
  	}
  	break;
  	case ((Ttypekind294244) 32):
  	{
  		result0 = IL64(-128);
  	}
  	break;
  	case ((Ttypekind294244) 33):
  	{
  		result0 = IL64(-32768);
  	}
  	break;
  	case ((Ttypekind294244) 34):
  	{
  		result0 = IL64(-2147483648);
  	}
  	break;
  	case ((Ttypekind294244) 35):
  	{
  		result0 = (IL64(-9223372036854775807) - IL64(1));
  	}
  	break;
  	case ((Ttypekind294244) 40) ... ((Ttypekind294244) 44):
  	{
  		result0 = IL64(0);
  	}
  	break;
  	case ((Ttypekind294244) 14):
  	{
  		{
  			NIM_BOOL LOC19;
  			NI LOC20;
  			LOC19 = (NIM_BOOL)0;
  			LOC20 = (NI)0;
  			LOC20 = sonslen_297327_850551059(t0);
  			LOC19 = (((NI) 0) < LOC20);
  			if (!(LOC19)) goto LA21;
  			LOC19 = !(((*t0).sons->data[((NI) 0)] == NIM_NIL));
  			LA21: ;
  			if (!LOC19) goto LA22;
  			result0 = firstord_322001_3876443242((*t0).sons->data[((NI) 0)]);
  		}
  		goto LA17;
  		LA22: ;
  		{
  			result0 = ((NI64) ((*(*(*(*t0).n).kindU.S6.sons->data[((NI) 0)]).kindU.S4.sym).position));
  		}
  		LA17: ;
  	}
  	break;
  	case ((Ttypekind294244) 11):
  	case ((Ttypekind294244) 13):
  	case ((Ttypekind294244) 46):
  	case ((Ttypekind294244) 47):
  	case ((Ttypekind294244) 8):
  	case ((Ttypekind294244) 61):
  	{
  		Ttype294840* LOC26;
  		LOC26 = (Ttype294840*)0;
  		LOC26 = lastson_297377_850551059(t0);
  		result0 = firstord_322001_3876443242(LOC26);
  	}
  	break;
  	case ((Ttypekind294244) 15):
  	{
  		{
  			NI LOC30;
  			Ttype294840* LOC33;
  			LOC30 = (NI)0;
  			LOC30 = len_297339_850551059(t0);
  			if (!(((NI) 0) < LOC30)) goto LA31;
  			LOC33 = (Ttype294840*)0;
  			LOC33 = lastson_297377_850551059(t0);
  			result0 = firstord_322001_3876443242(LOC33);
  		}
  		goto LA28;
  		LA31: ;
  		{
  			NimStringDesc* LOC35;
  			LOC35 = (NimStringDesc*)0;
  			LOC35 = rawNewString(reprEnum((NI)(*t0).kind, (&NTI294244))->Sup.len + 24);
  appendString(LOC35, ((NimStringDesc*) &T3876443242_117));
  appendString(LOC35, reprEnum((NI)(*t0).kind, (&NTI294244)));
  appendChar(LOC35, 41);
  			internalerror_198113_155036129(LOC35);
  		}
  		LA28: ;
  	}
  	break;
  	default:
  	{
  		NimStringDesc* LOC37;
  		LOC37 = (NimStringDesc*)0;
  		LOC37 = rawNewString(reprEnum((NI)(*t0).kind, (&NTI294244))->Sup.len + 24);
  appendString(LOC37, ((NimStringDesc*) &T3876443242_117));
  appendString(LOC37, reprEnum((NI)(*t0).kind, (&NTI294244)));
  appendChar(LOC37, 41);
  		internalerror_198113_155036129(LOC37);
  		result0 = IL64(0);
  	}
  	break;
  	}
  	return result0;
  }
  
  N_NIMCALL(NI64, lastord_322004_3876443242)(Ttype294840* t0) {
  	NI64 result0;
  	result0 = (NI64)0;
  	switch ((*t0).kind) {
  	case ((Ttypekind294244) 1):
  	{
  		result0 = IL64(1);
  	}
  	break;
  	case ((Ttypekind294244) 2):
  	{
  		result0 = IL64(255);
  	}
  	break;
  	case ((Ttypekind294244) 19):
  	case ((Ttypekind294244) 23):
  	{
  		result0 = lastord_322004_3876443242((*t0).sons->data[((NI) 0)]);
  	}
  	break;
  	case ((Ttypekind294244) 16):
  	case ((Ttypekind294244) 4):
  	{
  		result0 = lastord_322004_3876443242((*t0).sons->data[((NI) 0)]);
  	}
  	break;
  	case ((Ttypekind294244) 20):
  	{
  		result0 = getordvalue_322129_3876443242((*(*t0).n).kindU.S6.sons->data[((NI) 1)]);
  	}
  	break;
  	case ((Ttypekind294244) 31):
  	{
  		{
  			if (!(intsize_178641_4151366050 == ((NI) 4))) goto LA9;
  			result0 = IL64(2147483647);
  		}
  		goto LA7;
  		LA9: ;
  		{
  			result0 = IL64(9223372036854775807);
  		}
  		LA7: ;
  	}
  	break;
  	case ((Ttypekind294244) 32):
  	{
  		result0 = IL64(127);
  	}
  	break;
  	case ((Ttypekind294244) 33):
  	{
  		result0 = IL64(32767);
  	}
  	break;
  	case ((Ttypekind294244) 34):
  	{
  		result0 = IL64(2147483647);
  	}
  	break;
  	case ((Ttypekind294244) 35):
  	{
  		result0 = IL64(9223372036854775807);
  	}
  	break;
  	case ((Ttypekind294244) 40):
  	{
  		{
  			if (!(intsize_178641_4151366050 == ((NI) 4))) goto LA19;
  			result0 = IL64(4294967295);
  		}
  		goto LA17;
  		LA19: ;
  		{
  			result0 = IL64(9223372036854775807);
  		}
  		LA17: ;
  	}
  	break;
  	case ((Ttypekind294244) 41):
  	{
  		result0 = IL64(255);
  	}
  	break;
  	case ((Ttypekind294244) 42):
  	{
  		result0 = IL64(65535);
  	}
  	break;
  	case ((Ttypekind294244) 43):
  	{
  		result0 = IL64(4294967295);
  	}
  	break;
  	case ((Ttypekind294244) 44):
  	{
  		result0 = IL64(9223372036854775807);
  	}
  	break;
  	case ((Ttypekind294244) 14):
  	{
  		NI LOC27;
  		LOC27 = (NI)0;
  		LOC27 = sonslen_297351_850551059((*t0).n);
  		result0 = ((NI64) ((*(*(*(*t0).n).kindU.S6.sons->data[(NI)(LOC27 - ((NI) 1))]).kindU.S4.sym).position));
  	}
  	break;
  	case ((Ttypekind294244) 11):
  	case ((Ttypekind294244) 13):
  	case ((Ttypekind294244) 46):
  	case ((Ttypekind294244) 47):
  	case ((Ttypekind294244) 8):
  	case ((Ttypekind294244) 61):
  	{
  		Ttype294840* LOC29;
  		LOC29 = (Ttype294840*)0;
  		LOC29 = lastson_297377_850551059(t0);
  		result0 = lastord_322004_3876443242(LOC29);
  	}
  	break;
  	case ((Ttypekind294244) 50):
  	{
  		result0 = IL64(0);
  	}
  	break;
  	case ((Ttypekind294244) 15):
  	{
  		{
  			NI LOC34;
  			Ttype294840* LOC37;
  			LOC34 = (NI)0;
  			LOC34 = len_297339_850551059(t0);
  			if (!(((NI) 0) < LOC34)) goto LA35;
  			LOC37 = (Ttype294840*)0;
  			LOC37 = lastson_297377_850551059(t0);
  			result0 = lastord_322004_3876443242(LOC37);
  		}
  		goto LA32;
  		LA35: ;
  		{
  			NimStringDesc* LOC39;
  			LOC39 = (NimStringDesc*)0;
  			LOC39 = rawNewString(reprEnum((NI)(*t0).kind, (&NTI294244))->Sup.len + 23);
  appendString(LOC39, ((NimStringDesc*) &T3876443242_118));
  appendString(LOC39, reprEnum((NI)(*t0).kind, (&NTI294244)));
  appendChar(LOC39, 41);
  			internalerror_198113_155036129(LOC39);
  		}
  		LA32: ;
  	}
  	break;
  	default:
  	{
  		NimStringDesc* LOC41;
  		LOC41 = (NimStringDesc*)0;
  		LOC41 = rawNewString(reprEnum((NI)(*t0).kind, (&NTI294244))->Sup.len + 23);
  appendString(LOC41, ((NimStringDesc*) &T3876443242_118));
  appendString(LOC41, reprEnum((NI)(*t0).kind, (&NTI294244)));
  appendChar(LOC41, 41);
  		internalerror_198113_155036129(LOC41);
  		result0 = IL64(0);
  	}
  	break;
  	}
  	return result0;
  }
  
  N_NIMCALL(NI64, lengthord_322007_3876443242)(Ttype294840* t0) {
  	NI64 result0;
  	result0 = (NI64)0;
  	switch ((*t0).kind) {
  	case ((Ttypekind294244) 35):
  	case ((Ttypekind294244) 34):
  	case ((Ttypekind294244) 31):
  	{
  		result0 = lastord_322004_3876443242(t0);
  	}
  	break;
  	case ((Ttypekind294244) 13):
  	case ((Ttypekind294244) 46):
  	case ((Ttypekind294244) 47):
  	{
  		result0 = lengthord_322007_3876443242((*t0).sons->data[((NI) 0)]);
  	}
  	break;
  	default:
  	{
  		NI64 last0;
  		NI64 first0;
  		last0 = lastord_322004_3876443242(t0);
  		first0 = firstord_322001_3876443242(t0);
  		{
  			NIM_BOOL LOC6;
  			LOC6 = (NIM_BOOL)0;
  			LOC6 = (last0 == IL64(9223372036854775807));
  			if (!(LOC6)) goto LA7;
  			LOC6 = (first0 <= IL64(0));
  			LA7: ;
  			if (!LOC6) goto LA8;
  			result0 = last0;
  		}
  		goto LA4;
  		LA8: ;
  		{
  			NI64 LOC11;
  			NI64 LOC12;
  			LOC11 = (NI64)0;
  			LOC11 = lastord_322004_3876443242(t0);
  			LOC12 = (NI64)0;
  			LOC12 = firstord_322001_3876443242(t0);
  			result0 = (NI64)((NI64)(LOC11 - LOC12) + IL64(1));
  		}
  		LA4: ;
  	}
  	break;
  	}
  	return result0;
  }
  
  N_NIMCALL(NIM_BOOL, isordinaltype_322068_3876443242)(Ttype294840* t0) {
  	NIM_BOOL result0;
  	NIM_BOOL LOC1;
  	NIM_BOOL LOC3;
  	result0 = (NIM_BOOL)0;
  	LOC1 = (NIM_BOOL)0;
  	LOC1 = ((IL64(15459734798342) &((NU64)1<<((NU)((*t0).kind)&63U)))!=0);
  	if (LOC1) goto LA2;
  	LOC3 = (NIM_BOOL)0;
  	LOC3 = ((IL64(211106233624576) &((NU64)1<<((NU)((*t0).kind)&63U)))!=0);
  	if (!(LOC3)) goto LA4;
  	LOC3 = isordinaltype_322068_3876443242((*t0).sons->data[((NI) 0)]);
  	LA4: ;
  	LOC1 = LOC3;
  	LA2: ;
  	result0 = LOC1;
  	return result0;
  }
  
  N_NIMCALL(NIM_BOOL, sametype_326633_3876443242)(Ttype294840* a0, Ttype294840* b0, Ttypecmpflag326429Set flags0) {
  	NIM_BOOL result0;
  	Tsametypeclosure326433 c0;
  	result0 = (NIM_BOOL)0;
  	memset((void*)(&c0), 0, sizeof(c0));
  	chckNil((void*)(&c0));
  	memset((void*)(&c0), 0, sizeof(c0));
  	initsametypeclosure_326453_3876443242((&c0));
  	c0.flags = flags0;
  	result0 = sametypeaux_326585_3876443242(a0, b0, (&c0));
  	return result0;
  }
  
  N_NIMCALL(NIM_BOOL, sameobjecttypes_327219_3876443242)(Ttype294840* a0, Ttype294840* b0) {
  	NIM_BOOL result0;
  	result0 = (NIM_BOOL)0;
  	{
  		if (!!(((((*a0).flags | (*b0).flags) &(1U<<((NU)(((Ttypeflag294431) 8))&31U)))!=0))) goto LA3;
  		result0 = ((*a0).Sup.id == (*b0).Sup.id);
  	}
  	goto LA1;
  	LA3: ;
  	{
  		{
  			NIM_BOOL LOC8;
  			Tsametypeclosure326433 c0;
  			LOC8 = (NIM_BOOL)0;
  			LOC8 = ((((*a0).flags & (*b0).flags) &(1U<<((NU)(((Ttypeflag294431) 8))&31U)))!=0);
  			if (!(LOC8)) goto LA9;
  			LOC8 = ((*(*a0).sym).Sup.id == (*(*b0).sym).Sup.id);
  			LA9: ;
  			if (!LOC8) goto LA10;
  			memset((void*)(&c0), 0, sizeof(c0));
  			chckNil((void*)(&c0));
  			memset((void*)(&c0), 0, sizeof(c0));
  			initsametypeclosure_326453_3876443242((&c0));
  			result0 = sametypeaux_326585_3876443242(a0, b0, (&c0));
  		}
  		LA10: ;
  	}
  	LA1: ;
  	return result0;
  }
  
  N_NIMCALL(NI, inheritancediff_328252_3876443242)(Ttype294840* a0, Ttype294840* b0) {
  	NI result0;
  	Ttype294840* x0;
  	Ttype294840* y0;
  {	result0 = (NI)0;
  	{
  		NIM_BOOL LOC3;
  		NIM_BOOL LOC4;
  		LOC3 = (NIM_BOOL)0;
  		LOC4 = (NIM_BOOL)0;
  		LOC4 = (a0 == b0);
  		if (LOC4) goto LA5;
  		LOC4 = ((*a0).kind == ((Ttypekind294244) 50));
  		LA5: ;
  		LOC3 = LOC4;
  		if (LOC3) goto LA6;
  		LOC3 = ((*b0).kind == ((Ttypekind294244) 50));
  		LA6: ;
  		if (!LOC3) goto LA7;
  		result0 = ((NI) 0);
  		goto BeforeRet;
  	}
  	LA7: ;
  	x0 = a0;
  	result0 = ((NI) 0);
  	{
  		while (1) {
  			if (!!((x0 == NIM_NIL))) goto LA10;
  			x0 = skiptypes_298099_850551059(x0, IL64(211106247215360));
  			{
  				NIM_BOOL LOC13;
  				LOC13 = (NIM_BOOL)0;
  				LOC13 = sameobjecttypes_327219_3876443242(x0, b0);
  				if (!LOC13) goto LA14;
  				goto BeforeRet;
  			}
  			LA14: ;
  			x0 = (*x0).sons->data[((NI) 0)];
  			result0 -= ((NI) 1);
  		} LA10: ;
  	}
  	y0 = b0;
  	result0 = ((NI) 0);
  	{
  		while (1) {
  			if (!!((y0 == NIM_NIL))) goto LA17;
  			y0 = skiptypes_298099_850551059(y0, IL64(211106247215360));
  			{
  				NIM_BOOL LOC20;
  				LOC20 = (NIM_BOOL)0;
  				LOC20 = sameobjecttypes_327219_3876443242(y0, a0);
  				if (!LOC20) goto LA21;
  				goto BeforeRet;
  			}
  			LA21: ;
  			y0 = (*y0).sons->data[((NI) 0)];
  			result0 += ((NI) 1);
  		} LA17: ;
  	}
  	result0 = ((NI) IL64(9223372036854775807));
  	}BeforeRet: ;
  	return result0;
  }
  
  N_NIMCALL(NI, safeinheritancediff_330352_3876443242)(Ttype294840* a0, Ttype294840* b0) {
  	NI result0;
  	result0 = (NI)0;
  	{
  		NIM_BOOL LOC3;
  		LOC3 = (NIM_BOOL)0;
  		LOC3 = ((*a0).kind == ((Ttypekind294244) 50));
  		if (LOC3) goto LA4;
  		LOC3 = ((*b0).kind == ((Ttypekind294244) 50));
  		LA4: ;
  		if (!LOC3) goto LA5;
  		result0 = ((NI) -1);
  	}
  	goto LA1;
  	LA5: ;
  	{
  		result0 = inheritancediff_328252_3876443242(a0, b0);
  	}
  	LA1: ;
  	return result0;
  }
  
  N_NIMCALL(NIM_BOOL, compatibleeffectsaux_330375_3876443242)(Tnode294802* se0, Tnode294802* re0) {
  	NIM_BOOL result0;
  {	result0 = (NIM_BOOL)0;
  	{
  		if (!re0 == 0) goto LA3;
  		result0 = NIM_FALSE;
  		goto BeforeRet;
  	}
  	LA3: ;
  	{
  		Tnode294802* r_330389_3876443242;
  		r_330389_3876443242 = (Tnode294802*)0;
  		{
  			NI i_330407_3876443242;
  			NI HEX3Atmp_330409_3876443242;
  			NI LOC7;
  			NI res_330411_3876443242;
  			i_330407_3876443242 = (NI)0;
  			HEX3Atmp_330409_3876443242 = (NI)0;
  			LOC7 = (NI)0;
  			LOC7 = len_295081_850551059(re0);
  			HEX3Atmp_330409_3876443242 = (LOC7 - 1);
  			res_330411_3876443242 = ((NI) 0);
  			{
  				while (1) {
  					if (!(res_330411_3876443242 <= HEX3Atmp_330409_3876443242)) goto LA9;
  					i_330407_3876443242 = res_330411_3876443242;
  					r_330389_3876443242 = (*re0).kindU.S6.sons->data[i_330407_3876443242];
  					{
  						{
  							Tnode294802* s_330391_3876443242;
  							s_330391_3876443242 = (Tnode294802*)0;
  							{
  								NI i_330397_3876443242;
  								NI HEX3Atmp_330399_3876443242;
  								NI LOC13;
  								NI res_330401_3876443242;
  								i_330397_3876443242 = (NI)0;
  								HEX3Atmp_330399_3876443242 = (NI)0;
  								LOC13 = (NI)0;
  								LOC13 = len_295081_850551059(se0);
  								HEX3Atmp_330399_3876443242 = (LOC13 - 1);
  								res_330401_3876443242 = ((NI) 0);
  								{
  									while (1) {
  										if (!(res_330401_3876443242 <= HEX3Atmp_330399_3876443242)) goto LA15;
  										i_330397_3876443242 = res_330401_3876443242;
  										s_330391_3876443242 = (*se0).kindU.S6.sons->data[i_330397_3876443242];
  										{
  											NI LOC18;
  											LOC18 = (NI)0;
  											LOC18 = safeinheritancediff_330352_3876443242((*r_330389_3876443242).typ, (*s_330391_3876443242).typ);
  											if (!(LOC18 <= ((NI) 0))) goto LA19;
  											goto LA10;
  										}
  										LA19: ;
  										res_330401_3876443242 += ((NI) 1);
  									} LA15: ;
  								}
  							}
  						}
  						result0 = NIM_FALSE;
  						goto BeforeRet;
  					} LA10: ;
  					res_330411_3876443242 += ((NI) 1);
  				} LA9: ;
  			}
  		}
  	}
  	result0 = NIM_TRUE;
  	}BeforeRet: ;
  	return result0;
  }
  
  N_NIMCALL(NIM_BOOL, compatibleeffects_330414_3876443242)(Ttype294840* formal0, Ttype294840* actual0) {
  	NIM_BOOL result0;
  	Tnode294802* spec0;
  	NIM_BOOL LOC46;
  {	result0 = (NIM_BOOL)0;
  	{
  		NimStringDesc* LOC5;
  		if (!!(((*(*(*formal0).n).kindU.S6.sons->data[((NI) 0)]).kind == ((Tnodekind294020) 152)))) goto LA3;
  		LOC5 = (NimStringDesc*)0;
  		LOC5 = HEX24_198185_1689653243(T3876443242_119);
  		internalerror_198113_155036129(LOC5);
  	}
  	LA3: ;
  	{
  		NimStringDesc* LOC10;
  		if (!!(((*(*(*actual0).n).kindU.S6.sons->data[((NI) 0)]).kind == ((Tnodekind294020) 152)))) goto LA8;
  		LOC10 = (NimStringDesc*)0;
  		LOC10 = HEX24_198185_1689653243(T3876443242_120);
  		internalerror_198113_155036129(LOC10);
  	}
  	LA8: ;
  	spec0 = (*(*formal0).n).kindU.S6.sons->data[((NI) 0)];
  	{
  		NI LOC13;
  		Tnode294802* real0;
  		Tnode294802* se0;
  		Tnode294802* st0;
  		LOC13 = (NI)0;
  		LOC13 = len_295081_850551059(spec0);
  		if (!!((LOC13 == ((NI) 0)))) goto LA14;
  		real0 = (*(*actual0).n).kindU.S6.sons->data[((NI) 0)];
  		se0 = (*spec0).kindU.S6.sons->data[((NI) 0)];
  		{
  			NIM_BOOL LOC18;
  			LOC18 = (NIM_BOOL)0;
  			LOC18 = !(se0 == 0);
  			if (!(LOC18)) goto LA19;
  			LOC18 = !(((*se0).kind == ((Tnodekind294020) 152)));
  			LA19: ;
  			if (!LOC18) goto LA20;
  			{
  				NI LOC24;
  				LOC24 = (NI)0;
  				LOC24 = len_295081_850551059(real0);
  				if (!(LOC24 == ((NI) 0))) goto LA25;
  				result0 = NIM_FALSE;
  				goto BeforeRet;
  			}
  			LA25: ;
  			result0 = compatibleeffectsaux_330375_3876443242(se0, (*real0).kindU.S6.sons->data[((NI) 0)]);
  			{
  				if (!!(result0)) goto LA29;
  				goto BeforeRet;
  			}
  			LA29: ;
  		}
  		LA20: ;
  		st0 = (*spec0).kindU.S6.sons->data[((NI) 3)];
  		{
  			NIM_BOOL LOC33;
  			LOC33 = (NIM_BOOL)0;
  			LOC33 = !(st0 == 0);
  			if (!(LOC33)) goto LA34;
  			LOC33 = !(((*st0).kind == ((Tnodekind294020) 152)));
  			LA34: ;
  			if (!LOC33) goto LA35;
  			{
  				NI LOC39;
  				LOC39 = (NI)0;
  				LOC39 = len_295081_850551059(real0);
  				if (!(LOC39 == ((NI) 0))) goto LA40;
  				result0 = NIM_FALSE;
  				goto BeforeRet;
  			}
  			LA40: ;
  			result0 = compatibleeffectsaux_330375_3876443242(st0, (*real0).kindU.S6.sons->data[((NI) 3)]);
  			{
  				if (!!(result0)) goto LA44;
  				goto BeforeRet;
  			}
  			LA44: ;
  		}
  		LA35: ;
  	}
  	LA14: ;
  	LOC46 = (NIM_BOOL)0;
  	LOC46 = (((NI) ((*formal0).locklevel)) < ((NI) 0));
  	if (LOC46) goto LA47;
  	LOC46 = (((NI) ((*actual0).locklevel)) <= ((NI) ((*formal0).locklevel)));
  	LA47: ;
  	result0 = LOC46;
  	}BeforeRet: ;
  	return result0;
  }
  
  N_NIMCALL(NimStringDesc*, getprocheader_322335_3876443242)(Tsym294834* sym0, Tprefereddesc322011 prefer0) {
  	NimStringDesc* result0;
  	NimStringDesc* LOC1;
  	Tnode294802* n0;
  	result0 = (NimStringDesc*)0;
  	LOC1 = (NimStringDesc*)0;
  	LOC1 = rawNewString((*(*(*sym0).owner).name).s->Sup.len + (*(*sym0).name).s->Sup.len + 2);
  appendString(LOC1, (*(*(*sym0).owner).name).s);
  appendChar(LOC1, 46);
  appendString(LOC1, (*(*sym0).name).s);
  appendChar(LOC1, 40);
  	result0 = LOC1;
  	n0 = (*(*sym0).typ).n;
  	{
  		NI i_322356_3876443242;
  		NI HEX3Atmp_322387_3876443242;
  		NI LOC3;
  		NI res_322390_3876443242;
  		i_322356_3876443242 = (NI)0;
  		HEX3Atmp_322387_3876443242 = (NI)0;
  		LOC3 = (NI)0;
  		LOC3 = sonslen_297351_850551059(n0);
  		HEX3Atmp_322387_3876443242 = (NI)(LOC3 - ((NI) 1));
  		res_322390_3876443242 = ((NI) 1);
  		{
  			while (1) {
  				Tnode294802* p0;
  				if (!(res_322390_3876443242 <= HEX3Atmp_322387_3876443242)) goto LA5;
  				i_322356_3876443242 = res_322390_3876443242;
  				p0 = (*n0).kindU.S6.sons->data[i_322356_3876443242];
  				{
  					NimStringDesc* LOC10;
  					if (!((*p0).kind == ((Tnodekind294020) 3))) goto LA8;
  					result0 = resizeString(result0, (*(*(*p0).kindU.S4.sym).name).s->Sup.len + 0);
  appendString(result0, (*(*(*p0).kindU.S4.sym).name).s);
  					result0 = resizeString(result0, 2);
  appendString(result0, ((NimStringDesc*) &T3876443242_103));
  					LOC10 = (NimStringDesc*)0;
  					LOC10 = typetostring_322017_3876443242((*(*p0).kindU.S4.sym).typ, prefer0);
  					result0 = resizeString(result0, LOC10->Sup.len + 0);
  appendString(result0, LOC10);
  					{
  						NI LOC13;
  						LOC13 = (NI)0;
  						LOC13 = sonslen_297351_850551059(n0);
  						if (!!((i_322356_3876443242 == (NI)(LOC13 - ((NI) 1))))) goto LA14;
  						result0 = resizeString(result0, 2);
  appendString(result0, ((NimStringDesc*) &T3876443242_70));
  					}
  					LA14: ;
  				}
  				goto LA6;
  				LA8: ;
  				{
  					internalerror_198113_155036129(((NimStringDesc*) &T3876443242_121));
  				}
  				LA6: ;
  				res_322390_3876443242 += ((NI) 1);
  			} LA5: ;
  		}
  	}
  	result0 = addChar(result0, 41);
  	{
  		NimStringDesc* LOC21;
  		NimStringDesc* LOC22;
  		if (!!(((*(*n0).kindU.S6.sons->data[((NI) 0)]).typ == NIM_NIL))) goto LA19;
  		LOC21 = (NimStringDesc*)0;
  		LOC22 = (NimStringDesc*)0;
  		LOC22 = typetostring_322017_3876443242((*(*n0).kindU.S6.sons->data[((NI) 0)]).typ, prefer0);
  		LOC21 = rawNewString(LOC22->Sup.len + 2);
  appendString(LOC21, ((NimStringDesc*) &T3876443242_103));
  appendString(LOC21, LOC22);
  		result0 = resizeString(result0, LOC21->Sup.len + 0);
  appendString(result0, LOC21);
  	}
  	LA19: ;
  	return result0;
  }
  
  N_NIMCALL(NIM_BOOL, isemptycontainer_330930_3876443242)(Ttype294840* t0) {
  	NIM_BOOL result0;
  	result0 = (NIM_BOOL)0;
  	switch ((*t0).kind) {
  	case ((Ttypekind294244) 6):
  	case ((Ttypekind294244) 5):
  	{
  		result0 = NIM_TRUE;
  	}
  	break;
  	case ((Ttypekind294244) 16):
  	case ((Ttypekind294244) 4):
  	{
  		result0 = ((*(*t0).sons->data[((NI) 1)]).kind == ((Ttypekind294244) 3));
  	}
  	break;
  	case ((Ttypekind294244) 19):
  	case ((Ttypekind294244) 24):
  	case ((Ttypekind294244) 27):
  	case ((Ttypekind294244) 48):
  	{
  		result0 = ((*(*t0).sons->data[((NI) 0)]).kind == ((Ttypekind294244) 3));
  	}
  	break;
  	case ((Ttypekind294244) 11):
  	{
  		Ttype294840* LOC5;
  		LOC5 = (Ttype294840*)0;
  		LOC5 = lastson_297377_850551059(t0);
  		result0 = isemptycontainer_330930_3876443242(LOC5);
  	}
  	break;
  	default:
  	{
  		result0 = NIM_FALSE;
  	}
  	break;
  	}
  	return result0;
  }
  
  N_NIMCALL(NI64, align_329849_3876443242)(NI64 address0, NI64 alignment0) {
  	NI64 result0;
  	result0 = (NI64)0;
  	result0 = (NI64)((NI64)(address0 + (NI64)(alignment0 - IL64(1))) & (NI64)((NU64) ~((NI64)(alignment0 - IL64(1)))));
  	return result0;
  }
  
  N_NIMCALL(NIM_BOOL, isobjectwithtypefieldpredicate_323509_3876443242)(Ttype294840* t0) {
  	NIM_BOOL result0;
  	NIM_BOOL LOC1;
  	NIM_BOOL LOC2;
  	NIM_BOOL LOC3;
  	NIM_BOOL LOC6;
  	result0 = (NIM_BOOL)0;
  	LOC1 = (NIM_BOOL)0;
  	LOC2 = (NIM_BOOL)0;
  	LOC3 = (NIM_BOOL)0;
  	LOC3 = ((*t0).kind == ((Ttypekind294244) 17));
  	if (!(LOC3)) goto LA4;
  	LOC3 = ((*t0).sons->data[((NI) 0)] == NIM_NIL);
  	LA4: ;
  	LOC2 = LOC3;
  	if (!(LOC2)) goto LA5;
  	LOC6 = (NIM_BOOL)0;
  	LOC6 = !(((*t0).sym == NIM_NIL));
  	if (!(LOC6)) goto LA7;
  	LOC6 = !(((134218240 & (*(*t0).sym).flags) == 0));
  	LA7: ;
  	LOC2 = !(LOC6);
  	LA5: ;
  	LOC1 = LOC2;
  	if (!(LOC1)) goto LA8;
  	LOC1 = !((((*t0).flags &(1U<<((NU)(((Ttypeflag294431) 2))&31U)))!=0));
  	LA8: ;
  	result0 = LOC1;
  	return result0;
  }
  
  N_NIMCALL(NI64, computerecsizeaux_329862_3876443242)(Tnode294802* n0, NI64* a0, NI64* curroffset0) {
  	NI64 result0;
  	NI64 maxalign0;
  	NI64 maxsize0;
  	NI64 b0;
  	NI64 res0;
  {	result0 = (NI64)0;
  	maxalign0 = (NI64)0;
  	maxsize0 = (NI64)0;
  	b0 = (NI64)0;
  	res0 = (NI64)0;
  	switch ((*n0).kind) {
  	case ((Tnodekind294020) 139):
  	{
  		NI64 LOC13;
  		NI64 LOC14;
  		result0 = computerecsizeaux_329862_3876443242((*n0).kindU.S6.sons->data[((NI) 0)], a0, curroffset0);
  		maxsize0 = IL64(0);
  		maxalign0 = IL64(1);
  		{
  			NI i_330013_3876443242;
  			NI HEX3Atmp_330048_3876443242;
  			NI LOC3;
  			NI res_330051_3876443242;
  			i_330013_3876443242 = (NI)0;
  			HEX3Atmp_330048_3876443242 = (NI)0;
  			LOC3 = (NI)0;
  			LOC3 = sonslen_297351_850551059(n0);
  			HEX3Atmp_330048_3876443242 = (NI)(LOC3 - ((NI) 1));
  			res_330051_3876443242 = ((NI) 1);
  			{
  				while (1) {
  					if (!(res_330051_3876443242 <= HEX3Atmp_330048_3876443242)) goto LA5;
  					i_330013_3876443242 = res_330051_3876443242;
  					switch ((*(*n0).kindU.S6.sons->data[i_330013_3876443242]).kind) {
  					case ((Tnodekind294020) 85):
  					case ((Tnodekind294020) 88):
  					{
  						Tnode294802* LOC7;
  						LOC7 = (Tnode294802*)0;
  						LOC7 = lastson_297364_850551059((*n0).kindU.S6.sons->data[i_330013_3876443242]);
  						res0 = computerecsizeaux_329862_3876443242(LOC7, (&b0), curroffset0);
  						{
  							if (!(res0 < IL64(0))) goto LA10;
  							result0 = res0;
  							goto BeforeRet;
  						}
  						LA10: ;
  						maxsize0 = ((maxsize0 >= res0) ? maxsize0 : res0);
  						maxalign0 = ((maxalign0 >= b0) ? maxalign0 : b0);
  					}
  					break;
  					default:
  					{
  						internalerror_198113_155036129(((NimStringDesc*) &T3876443242_122));
  					}
  					break;
  					}
  					res_330051_3876443242 += ((NI) 1);
  				} LA5: ;
  			}
  		}
  		LOC13 = (NI64)0;
  		LOC13 = align_329849_3876443242((*curroffset0), maxalign0);
  		(*curroffset0) = (NI64)(LOC13 + maxsize0);
  		LOC14 = (NI64)0;
  		LOC14 = align_329849_3876443242(result0, maxalign0);
  		result0 = (NI64)(LOC14 + maxsize0);
  		(*a0) = maxalign0;
  	}
  	break;
  	case ((Tnodekind294020) 138):
  	{
  		result0 = IL64(0);
  		maxalign0 = IL64(1);
  		{
  			NI i_330036_3876443242;
  			NI HEX3Atmp_330056_3876443242;
  			NI LOC17;
  			NI res_330059_3876443242;
  			i_330036_3876443242 = (NI)0;
  			HEX3Atmp_330056_3876443242 = (NI)0;
  			LOC17 = (NI)0;
  			LOC17 = sonslen_297351_850551059(n0);
  			HEX3Atmp_330056_3876443242 = (NI)(LOC17 - ((NI) 1));
  			res_330059_3876443242 = ((NI) 0);
  			{
  				while (1) {
  					NI64 LOC24;
  					NI64 LOC25;
  					if (!(res_330059_3876443242 <= HEX3Atmp_330056_3876443242)) goto LA19;
  					i_330036_3876443242 = res_330059_3876443242;
  					res0 = computerecsizeaux_329862_3876443242((*n0).kindU.S6.sons->data[i_330036_3876443242], (&b0), curroffset0);
  					{
  						if (!(res0 < IL64(0))) goto LA22;
  						result0 = res0;
  						goto BeforeRet;
  					}
  					LA22: ;
  					LOC24 = (NI64)0;
  					LOC24 = align_329849_3876443242((*curroffset0), b0);
  					(*curroffset0) = (NI64)(LOC24 + res0);
  					LOC25 = (NI64)0;
  					LOC25 = align_329849_3876443242(result0, b0);
  					result0 = (NI64)(LOC25 + res0);
  					{
  						if (!(maxalign0 < b0)) goto LA28;
  						maxalign0 = b0;
  					}
  					LA28: ;
  					res_330059_3876443242 += ((NI) 1);
  				} LA19: ;
  			}
  		}
  		(*a0) = maxalign0;
  	}
  	break;
  	case ((Tnodekind294020) 3):
  	{
  		result0 = computesizeaux_329857_3876443242((*(*n0).kindU.S4.sym).typ, a0);
  		(*(*n0).kindU.S4.sym).offset = ((NI) ((*curroffset0)));
  	}
  	break;
  	default:
  	{
  		(*a0) = IL64(1);
  		result0 = IL64(-3);
  	}
  	break;
  	}
  	}BeforeRet: ;
  	return result0;
  }
  
  N_NIMCALL(NI64, computesizeaux_329857_3876443242)(Ttype294840* typ0, NI64* a0) {
  	NI64 result0;
  	NI64 res0;
  	NI64 maxalign0;
  	NI64 length0;
  	NI64 curroffset0;
  {	result0 = (NI64)0;
  	res0 = (NI64)0;
  	maxalign0 = (NI64)0;
  	length0 = (NI64)0;
  	curroffset0 = (NI64)0;
  	{
  		if (!((*typ0).size == IL64(-2))) goto LA3;
  		result0 = IL64(-2);
  		goto BeforeRet;
  	}
  	LA3: ;
  	{
  		if (!(IL64(0) <= (*typ0).size)) goto LA7;
  		result0 = (*typ0).size;
  		(*a0) = ((NI64) ((*typ0).align));
  		goto BeforeRet;
  	}
  	LA7: ;
  	(*typ0).size = IL64(-2);
  	switch ((*typ0).kind) {
  	case ((Ttypekind294244) 31):
  	case ((Ttypekind294244) 40):
  	{
  		result0 = ((NI64) (intsize_178641_4151366050));
  		(*a0) = result0;
  	}
  	break;
  	case ((Ttypekind294244) 32):
  	case ((Ttypekind294244) 41):
  	case ((Ttypekind294244) 1):
  	case ((Ttypekind294244) 2):
  	{
  		result0 = IL64(1);
  		(*a0) = result0;
  	}
  	break;
  	case ((Ttypekind294244) 33):
  	case ((Ttypekind294244) 42):
  	{
  		result0 = IL64(2);
  		(*a0) = result0;
  	}
  	break;
  	case ((Ttypekind294244) 34):
  	case ((Ttypekind294244) 43):
  	case ((Ttypekind294244) 37):
  	{
  		result0 = IL64(4);
  		(*a0) = result0;
  	}
  	break;
  	case ((Ttypekind294244) 35):
  	case ((Ttypekind294244) 44):
  	case ((Ttypekind294244) 38):
  	{
  		result0 = IL64(8);
  		(*a0) = result0;
  	}
  	break;
  	case ((Ttypekind294244) 39):
  	{
  		result0 = IL64(16);
  		(*a0) = result0;
  	}
  	break;
  	case ((Ttypekind294244) 36):
  	{
  		result0 = ((NI64) (floatsize_178642_4151366050));
  		(*a0) = result0;
  	}
  	break;
  	case ((Ttypekind294244) 25):
  	{
  		{
  			if (!((*typ0).callconv == ((Tcallingconvention294002) 8))) goto LA19;
  			result0 = ((NI64) ((NI)(((NI) 2) * ptrsize_178643_4151366050)));
  		}
  		goto LA17;
  		LA19: ;
  		{
  			result0 = ((NI64) (ptrsize_178643_4151366050));
  		}
  		LA17: ;
  		(*a0) = ((NI64) (ptrsize_178643_4151366050));
  	}
  	break;
  	case ((Ttypekind294244) 5):
  	case ((Ttypekind294244) 29):
  	case ((Ttypekind294244) 28):
  	case ((Ttypekind294244) 24):
  	case ((Ttypekind294244) 21):
  	case ((Ttypekind294244) 22):
  	case ((Ttypekind294244) 23):
  	case ((Ttypekind294244) 27):
  	case ((Ttypekind294244) 45):
  	{
  		Ttype294840* base0;
  		base0 = lastson_297377_850551059(typ0);
  		{
  			NIM_BOOL LOC25;
  			NIM_BOOL LOC27;
  			LOC25 = (NIM_BOOL)0;
  			LOC25 = (base0 == typ0);
  			if (LOC25) goto LA26;
  			LOC27 = (NIM_BOOL)0;
  			LOC27 = ((*base0).kind == ((Ttypekind294244) 18));
  			if (!(LOC27)) goto LA28;
  			LOC27 = ((*base0).size == IL64(-2));
  			LA28: ;
  			LOC25 = LOC27;
  			LA26: ;
  			if (!LOC25) goto LA29;
  			result0 = IL64(-2);
  		}
  		goto LA23;
  		LA29: ;
  		{
  			result0 = ((NI64) (ptrsize_178643_4151366050));
  		}
  		LA23: ;
  		(*a0) = result0;
  	}
  	break;
  	case ((Ttypekind294244) 16):
  	case ((Ttypekind294244) 4):
  	{
  		NI64 elemsize0;
  		NI64 LOC37;
  		elemsize0 = computesizeaux_329857_3876443242((*typ0).sons->data[((NI) 1)], a0);
  		{
  			if (!(elemsize0 < IL64(0))) goto LA35;
  			result0 = elemsize0;
  			goto BeforeRet;
  		}
  		LA35: ;
  		LOC37 = (NI64)0;
  		LOC37 = lengthord_322007_3876443242((*typ0).sons->data[((NI) 0)]);
  		result0 = (NI64)(LOC37 * elemsize0);
  	}
  	break;
  	case ((Ttypekind294244) 14):
  	{
  		{
  			NI64 LOC41;
  			LOC41 = (NI64)0;
  			LOC41 = firstord_322001_3876443242(typ0);
  			if (!(LOC41 < IL64(0))) goto LA42;
  			result0 = IL64(4);
  		}
  		goto LA39;
  		LA42: ;
  		{
  			length0 = lastord_322004_3876443242(typ0);
  			{
  				if (!((NI64)(length0 + IL64(1)) < IL64(256))) goto LA47;
  				result0 = IL64(1);
  			}
  			goto LA45;
  			LA47: ;
  			{
  				if (!((NI64)(length0 + IL64(1)) < IL64(65536))) goto LA50;
  				result0 = IL64(2);
  			}
  			goto LA45;
  			LA50: ;
  			{
  				if (!((NI64)(length0 + IL64(1)) < IL64(4294967296))) goto LA53;
  				result0 = IL64(4);
  			}
  			goto LA45;
  			LA53: ;
  			{
  				result0 = IL64(8);
  			}
  			LA45: ;
  		}
  		LA39: ;
  		(*a0) = result0;
  	}
  	break;
  	case ((Ttypekind294244) 19):
  	{
  		{
  			if (!((*(*typ0).sons->data[((NI) 0)]).kind == ((Ttypekind294244) 12))) goto LA59;
  			result0 = IL64(-1);
  		}
  		goto LA57;
  		LA59: ;
  		{
  			length0 = lengthord_322007_3876443242((*typ0).sons->data[((NI) 0)]);
  			{
  				if (!(length0 <= IL64(8))) goto LA64;
  				result0 = IL64(1);
  			}
  			goto LA62;
  			LA64: ;
  			{
  				if (!(length0 <= IL64(16))) goto LA67;
  				result0 = IL64(2);
  			}
  			goto LA62;
  			LA67: ;
  			{
  				if (!(length0 <= IL64(32))) goto LA70;
  				result0 = IL64(4);
  			}
  			goto LA62;
  			LA70: ;
  			{
  				if (!(length0 <= IL64(64))) goto LA73;
  				result0 = IL64(8);
  			}
  			goto LA62;
  			LA73: ;
  			{
  				NI64 LOC76;
  				NI64 LOC79;
  				LOC76 = (NI64)0;
  				LOC76 = align_329849_3876443242(length0, IL64(8));
  				if (!(((NI) ((NI64)(LOC76 % IL64(8)))) == ((NI) 0))) goto LA77;
  				LOC79 = (NI64)0;
  				LOC79 = align_329849_3876443242(length0, IL64(8));
  				result0 = (NI64)(LOC79 / IL64(8));
  			}
  			goto LA62;
  			LA77: ;
  			{
  				NI64 LOC81;
  				LOC81 = (NI64)0;
  				LOC81 = align_329849_3876443242(length0, IL64(8));
  				result0 = (NI64)((NI64)(LOC81 / IL64(8)) + IL64(1));
  			}
  			LA62: ;
  		}
  		LA57: ;
  		(*a0) = result0;
  	}
  	break;
  	case ((Ttypekind294244) 20):
  	{
  		result0 = computesizeaux_329857_3876443242((*typ0).sons->data[((NI) 0)], a0);
  	}
  	break;
  	case ((Ttypekind294244) 18):
  	{
  		result0 = IL64(0);
  		maxalign0 = IL64(1);
  		{
  			NI i_330128_3876443242;
  			NI HEX3Atmp_330163_3876443242;
  			NI LOC85;
  			NI res_330166_3876443242;
  			i_330128_3876443242 = (NI)0;
  			HEX3Atmp_330163_3876443242 = (NI)0;
  			LOC85 = (NI)0;
  			LOC85 = sonslen_297327_850551059(typ0);
  			HEX3Atmp_330163_3876443242 = (NI)(LOC85 - ((NI) 1));
  			res_330166_3876443242 = ((NI) 0);
  			{
  				while (1) {
  					NI64 LOC92;
  					if (!(res_330166_3876443242 <= HEX3Atmp_330163_3876443242)) goto LA87;
  					i_330128_3876443242 = res_330166_3876443242;
  					res0 = computesizeaux_329857_3876443242((*typ0).sons->data[i_330128_3876443242], a0);
  					{
  						if (!(res0 < IL64(0))) goto LA90;
  						result0 = res0;
  						goto BeforeRet;
  					}
  					LA90: ;
  					maxalign0 = ((maxalign0 >= (*a0)) ? maxalign0 : (*a0));
  					LOC92 = (NI64)0;
  					LOC92 = align_329849_3876443242(result0, (*a0));
  					result0 = (NI64)(LOC92 + res0);
  					res_330166_3876443242 += ((NI) 1);
  				} LA87: ;
  			}
  		}
  		result0 = align_329849_3876443242(result0, maxalign0);
  		(*a0) = maxalign0;
  	}
  	break;
  	case ((Ttypekind294244) 17):
  	{
  		{
  			Ttype294840* LOC98;
  			if (!!(((*typ0).sons->data[((NI) 0)] == NIM_NIL))) goto LA96;
  			LOC98 = (Ttype294840*)0;
  			LOC98 = skiptypes_298099_850551059((*typ0).sons->data[((NI) 0)], IL64(211106247215360));
  			result0 = computesizeaux_329857_3876443242(LOC98, a0);
  			{
  				if (!(result0 < IL64(0))) goto LA101;
  				goto BeforeRet;
  			}
  			LA101: ;
  			maxalign0 = (*a0);
  		}
  		goto LA94;
  		LA96: ;
  		{
  			NIM_BOOL LOC104;
  			LOC104 = (NIM_BOOL)0;
  			LOC104 = isobjectwithtypefieldpredicate_323509_3876443242(typ0);
  			if (!LOC104) goto LA105;
  			result0 = ((NI64) (intsize_178641_4151366050));
  			maxalign0 = result0;
  		}
  		goto LA94;
  		LA105: ;
  		{
  			result0 = IL64(0);
  			maxalign0 = IL64(1);
  		}
  		LA94: ;
  		curroffset0 = result0;
  		result0 = computerecsizeaux_329862_3876443242((*typ0).n, a0, (&curroffset0));
  		{
  			if (!(result0 < IL64(0))) goto LA110;
  			goto BeforeRet;
  		}
  		LA110: ;
  		{
  			if (!((*a0) < maxalign0)) goto LA114;
  			(*a0) = maxalign0;
  		}
  		LA114: ;
  		result0 = align_329849_3876443242(result0, (*a0));
  	}
  	break;
  	case ((Ttypekind294244) 11):
  	case ((Ttypekind294244) 13):
  	case ((Ttypekind294244) 10):
  	case ((Ttypekind294244) 47):
  	case ((Ttypekind294244) 46):
  	case ((Ttypekind294244) 49):
  	{
  		Ttype294840* LOC117;
  		LOC117 = (Ttype294840*)0;
  		LOC117 = lastson_297377_850551059(typ0);
  		result0 = computesizeaux_329857_3876443242(LOC117, a0);
  	}
  	break;
  	case ((Ttypekind294244) 8):
  	{
  		Ttype294840* LOC119;
  		LOC119 = (Ttype294840*)0;
  		LOC119 = base_322021_3876443242(typ0);
  		result0 = computesizeaux_329857_3876443242(LOC119, a0);
  	}
  	break;
  	case ((Ttypekind294244) 30):
  	{
  		result0 = IL64(-2);
  		goto BeforeRet;
  	}
  	break;
  	case ((Ttypekind294244) 59):
  	{
  		{
  			Ttype294840* LOC126;
  			if (!!(((*typ0).n == NIM_NIL))) goto LA124;
  			LOC126 = (Ttype294840*)0;
  			LOC126 = lastson_297377_850551059(typ0);
  			result0 = computesizeaux_329857_3876443242(LOC126, a0);
  		}
  		goto LA122;
  		LA124: ;
  		{
  			result0 = IL64(-1);
  		}
  		LA122: ;
  	}
  	break;
  	default:
  	{
  		result0 = IL64(-1);
  	}
  	break;
  	}
  	(*typ0).size = result0;
  	(*typ0).align = ((NI16) ((*a0)));
  	}BeforeRet: ;
  	return result0;
  }
  
  N_NIMCALL(NI64, computesize_322132_3876443242)(Ttype294840* typ0) {
  	NI64 result0;
  	NI64 a0;
  	result0 = (NI64)0;
  	a0 = IL64(1);
  	result0 = computesizeaux_329857_3876443242(typ0, (&a0));
  	return result0;
  }
  
  N_NIMCALL(NI64, getsize_322135_3876443242)(Ttype294840* typ0) {
  	NI64 result0;
  	result0 = (NI64)0;
  	result0 = computesize_322132_3876443242(typ0);
  	{
  		NimStringDesc* LOC5;
  		if (!(result0 < IL64(0))) goto LA3;
  		LOC5 = (NimStringDesc*)0;
  		LOC5 = rawNewString(reprEnum((NI)(*typ0).kind, (&NTI294244))->Sup.len + 9);
  appendString(LOC5, ((NimStringDesc*) &T3876443242_123));
  appendString(LOC5, reprEnum((NI)(*typ0).kind, (&NTI294244)));
  		internalerror_198113_155036129(LOC5);
  	}
  	LA3: ;
  	return result0;
  }
  
  N_NIMCALL(NIM_BOOL, sametypeornil_326643_3876443242)(Ttype294840* a0, Ttype294840* b0, Ttypecmpflag326429Set flags0) {
  	NIM_BOOL result0;
  	result0 = (NIM_BOOL)0;
  	{
  		if (!(a0 == b0)) goto LA3;
  		result0 = NIM_TRUE;
  	}
  	goto LA1;
  	LA3: ;
  	{
  		{
  			NIM_BOOL LOC8;
  			LOC8 = (NIM_BOOL)0;
  			LOC8 = (a0 == NIM_NIL);
  			if (LOC8) goto LA9;
  			LOC8 = (b0 == NIM_NIL);
  			LA9: ;
  			if (!LOC8) goto LA10;
  			result0 = NIM_FALSE;
  		}
  		goto LA6;
  		LA10: ;
  		{
  			result0 = sametype_326633_3876443242(a0, b0, flags0);
  		}
  		LA6: ;
  	}
  	LA1: ;
  	return result0;
  }
  
  N_NIMCALL(NIM_BOOL, enumhasholes_322071_3876443242)(Ttype294840* t0) {
  	NIM_BOOL result0;
  	Ttype294840* b0;
  	NIM_BOOL LOC3;
  	result0 = (NIM_BOOL)0;
  	b0 = t0;
  	{
  		while (1) {
  			if (!((IL64(211106233583616) &((NU64)1<<((NU)((*b0).kind)&63U)))!=0)) goto LA2;
  			b0 = (*b0).sons->data[((NI) 0)];
  		} LA2: ;
  	}
  	LOC3 = (NIM_BOOL)0;
  	LOC3 = ((*b0).kind == ((Ttypekind294244) 14));
  	if (!(LOC3)) goto LA4;
  	LOC3 = (((*b0).flags &(1U<<((NU)(((Ttypeflag294431) 5))&31U)))!=0);
  	LA4: ;
  	result0 = LOC3;
  	return result0;
  }
  
  N_NIMCALL(Ttype294840*, commonsuperclass_328650_3876443242)(Ttype294840* a0, Ttype294840* b0) {
  	Ttype294840* result0;
  	Ttype294840* x0;
  	Intset270030 ancestors0;
  	Ttype294840* y0;
  {	result0 = (Ttype294840*)0;
  	{
  		NIM_BOOL LOC3;
  		LOC3 = (NIM_BOOL)0;
  		LOC3 = sameobjecttypes_327219_3876443242(a0, b0);
  		if (!LOC3) goto LA4;
  		result0 = a0;
  		goto BeforeRet;
  	}
  	LA4: ;
  	x0 = a0;
  	memset((void*)(&ancestors0), 0, sizeof(ancestors0));
  	chckNil((void*)(&ancestors0));
  	memset((void*)(&ancestors0), 0, sizeof(ancestors0));
  	initintset_270885_2627731572((&ancestors0));
  	{
  		while (1) {
  			if (!!((x0 == NIM_NIL))) goto LA7;
  			x0 = skiptypes_298099_850551059(x0, IL64(211106247215360));
  			incl_270832_2627731572((&ancestors0), (*x0).Sup.id);
  			x0 = (*x0).sons->data[((NI) 0)];
  		} LA7: ;
  	}
  	y0 = b0;
  	{
  		while (1) {
  			if (!!((y0 == NIM_NIL))) goto LA9;
  			y0 = skiptypes_298099_850551059(y0, IL64(211106247215360));
  			{
  				NIM_BOOL LOC12;
  				LOC12 = (NIM_BOOL)0;
  				LOC12 = contains_270811_2627731572((&ancestors0), (*y0).Sup.id);
  				if (!LOC12) goto LA13;
  				result0 = y0;
  				goto BeforeRet;
  			}
  			LA13: ;
  			y0 = (*y0).sons->data[((NI) 0)];
  		} LA9: ;
  	}
  	}BeforeRet: ;
  	return result0;
  }
  
  N_NIMCALL(Tparamsequality322060, equalparam_326686_3876443242)(Tsym294834* a0, Tsym294834* b0) {
  	Tparamsequality322060 result0;
  	result0 = (Tparamsequality322060)0;
  	{
  		NIM_BOOL LOC3;
  		LOC3 = (NIM_BOOL)0;
  		LOC3 = sametypeornil_326643_3876443242((*a0).typ, (*b0).typ, 4);
  		if (!(LOC3)) goto LA4;
  		LOC3 = exprstructuralequivalent_320311_2616423590((*a0).constraint, (*b0).constraint, NIM_FALSE);
  		LA4: ;
  		if (!LOC3) goto LA5;
  		{
  			if (!((*a0).ast == (*b0).ast)) goto LA9;
  			result0 = ((Tparamsequality322060) 1);
  		}
  		goto LA7;
  		LA9: ;
  		{
  			NIM_BOOL LOC12;
  			LOC12 = (NIM_BOOL)0;
  			LOC12 = !(((*a0).ast == NIM_NIL));
  			if (!(LOC12)) goto LA13;
  			LOC12 = !(((*b0).ast == NIM_NIL));
  			LA13: ;
  			if (!LOC12) goto LA14;
  			{
  				NIM_BOOL LOC18;
  				LOC18 = (NIM_BOOL)0;
  				LOC18 = exprstructuralequivalent_320311_2616423590((*a0).ast, (*b0).ast, NIM_FALSE);
  				if (!LOC18) goto LA19;
  				result0 = ((Tparamsequality322060) 1);
  			}
  			goto LA16;
  			LA19: ;
  			{
  				result0 = ((Tparamsequality322060) 2);
  			}
  			LA16: ;
  		}
  		goto LA7;
  		LA14: ;
  		{
  			if (!!(((*a0).ast == NIM_NIL))) goto LA23;
  			result0 = ((Tparamsequality322060) 1);
  		}
  		goto LA7;
  		LA23: ;
  		{
  			if (!!(((*b0).ast == NIM_NIL))) goto LA26;
  			result0 = ((Tparamsequality322060) 2);
  		}
  		goto LA7;
  		LA26: ;
  		LA7: ;
  	}
  	goto LA1;
  	LA5: ;
  	{
  		result0 = ((Tparamsequality322060) 0);
  	}
  	LA1: ;
  	return result0;
  }
  
  N_NIMCALL(Tparamsequality322060, equalparams_322064_3876443242)(Tnode294802* a0, Tnode294802* b0) {
  	Tparamsequality322060 result0;
  	NI length0;
  {	result0 = (Tparamsequality322060)0;
  	result0 = ((Tparamsequality322060) 1);
  	length0 = sonslen_297351_850551059(a0);
  	{
  		NI LOC3;
  		LOC3 = (NI)0;
  		LOC3 = sonslen_297351_850551059(b0);
  		if (!!((length0 == LOC3))) goto LA4;
  		result0 = ((Tparamsequality322060) 0);
  	}
  	goto LA1;
  	LA4: ;
  	{
  		{
  			NI i_326841_3876443242;
  			NI HEX3Atmp_327033_3876443242;
  			NI res_327036_3876443242;
  			i_326841_3876443242 = (NI)0;
  			HEX3Atmp_327033_3876443242 = (NI)0;
  			HEX3Atmp_327033_3876443242 = (NI)(length0 - ((NI) 1));
  			res_327036_3876443242 = ((NI) 1);
  			{
  				while (1) {
  					Tsym294834* m0;
  					Tsym294834* n0;
  					Tparamsequality322060 LOC10;
  					if (!(res_327036_3876443242 <= HEX3Atmp_327033_3876443242)) goto LA9;
  					i_326841_3876443242 = res_327036_3876443242;
  					m0 = (*(*a0).kindU.S6.sons->data[i_326841_3876443242]).kindU.S4.sym;
  					n0 = (*(*b0).kindU.S6.sons->data[i_326841_3876443242]).kindU.S4.sym;
  					LOC10 = (Tparamsequality322060)0;
  					LOC10 = equalparam_326686_3876443242(m0, n0);
  					switch (LOC10) {
  					case ((Tparamsequality322060) 0):
  					{
  						result0 = ((Tparamsequality322060) 0);
  						goto BeforeRet;
  					}
  					break;
  					case ((Tparamsequality322060) 1):
  					{
  					}
  					break;
  					case ((Tparamsequality322060) 2):
  					{
  						result0 = ((Tparamsequality322060) 2);
  					}
  					break;
  					}
  					{
  						if (!!(((*(*m0).name).Sup.id == (*(*n0).name).Sup.id))) goto LA16;
  						result0 = ((Tparamsequality322060) 0);
  						goto BeforeRet;
  					}
  					LA16: ;
  					res_327036_3876443242 += ((NI) 1);
  				} LA9: ;
  			}
  		}
  		{
  			NIM_BOOL LOC20;
  			LOC20 = (NIM_BOOL)0;
  			LOC20 = sametypeornil_326643_3876443242((*(*a0).kindU.S6.sons->data[((NI) 0)]).typ, (*(*b0).kindU.S6.sons->data[((NI) 0)]).typ, 4);
  			if (!!(LOC20)) goto LA21;
  			{
  				NIM_BOOL LOC25;
  				LOC25 = (NIM_BOOL)0;
  				LOC25 = ((*(*a0).kindU.S6.sons->data[((NI) 0)]).typ == NIM_NIL);
  				if (LOC25) goto LA26;
  				LOC25 = ((*(*b0).kindU.S6.sons->data[((NI) 0)]).typ == NIM_NIL);
  				LA26: ;
  				if (!LOC25) goto LA27;
  				result0 = ((Tparamsequality322060) 0);
  			}
  			goto LA23;
  			LA27: ;
  			{
  				result0 = ((Tparamsequality322060) 2);
  			}
  			LA23: ;
  		}
  		LA21: ;
  	}
  	LA1: ;
  	}BeforeRet: ;
  	return result0;
  }
  
  N_NIMCALL(Ttype294840*, typeallowednode_329047_3876443242)(Intset270030* marker0, Tnode294802* n0, Tsymkind294435 kind0, Ttypeallowedflag329032Set flags0) {
  	Ttype294840* result0;
  {	result0 = (Ttype294840*)0;
  	{
  		if (!!((n0 == NIM_NIL))) goto LA3;
  		result0 = typeallowedaux_329038_3876443242(marker0, (*n0).typ, kind0, flags0);
  		{
  			if (!(result0 == NIM_NIL)) goto LA7;
  			switch ((*n0).kind) {
  			case ((Tnodekind294020) 0) ... ((Tnodekind294020) 23):
  			{
  			}
  			break;
  			default:
  			{
  				{
  					NIM_BOOL LOC13;
  					Tnode294802* LOC17;
  					LOC13 = (NIM_BOOL)0;
  					LOC13 = ((*n0).kind == ((Tnodekind294020) 139));
  					if (!(LOC13)) goto LA14;
  					LOC13 = ((5120 &(1U<<((NU)(kind0)&31U)))!=0);
  					LA14: ;
  					if (!LOC13) goto LA15;
  					LOC17 = (Tnode294802*)0;
  					LOC17 = HEX5BHEX5D_295238_850551059(n0, ((NI) 0));
  					result0 = (*LOC17).typ;
  					goto BeforeRet;
  				}
  				LA15: ;
  				{
  					NI i_329112_3876443242;
  					NI HEX3Atmp_329128_3876443242;
  					NI LOC19;
  					NI res_329131_3876443242;
  					i_329112_3876443242 = (NI)0;
  					HEX3Atmp_329128_3876443242 = (NI)0;
  					LOC19 = (NI)0;
  					LOC19 = sonslen_297351_850551059(n0);
  					HEX3Atmp_329128_3876443242 = (NI)(LOC19 - ((NI) 1));
  					res_329131_3876443242 = ((NI) 0);
  					{
  						while (1) {
  							Tnode294802* it0;
  							if (!(res_329131_3876443242 <= HEX3Atmp_329128_3876443242)) goto LA21;
  							i_329112_3876443242 = res_329131_3876443242;
  							it0 = (*n0).kindU.S6.sons->data[i_329112_3876443242];
  							result0 = typeallowednode_329047_3876443242(marker0, it0, kind0, flags0);
  							{
  								if (!!((result0 == NIM_NIL))) goto LA24;
  								goto LA18;
  							}
  							LA24: ;
  							res_329131_3876443242 += ((NI) 1);
  						} LA21: ;
  					}
  				} LA18: ;
  			}
  			break;
  			}
  		}
  		LA7: ;
  	}
  	LA3: ;
  	}BeforeRet: ;
  	return result0;
  }
  
  N_NIMCALL(Ttype294840*, typeallowedaux_329038_3876443242)(Intset270030* marker0, Ttype294840* typ0, Tsymkind294435 kind0, Ttypeallowedflag329032Set flags_329046_3876443242) {
  	Ttype294840* result0;
  	Ttype294840* t0;
  {	result0 = (Ttype294840*)0;
  	result0 = NIM_NIL;
  	{
  		if (!(typ0 == NIM_NIL)) goto LA3;
  		goto BeforeRet;
  	}
  	LA3: ;
  	{
  		NIM_BOOL LOC7;
  		LOC7 = (NIM_BOOL)0;
  		LOC7 = containsorincl_270862_2627731572(marker0, (*typ0).Sup.id);
  		if (!LOC7) goto LA8;
  		goto BeforeRet;
  	}
  	LA8: ;
  	t0 = skiptypes_298099_850551059(typ0, IL64(211106232576000));
  	switch ((*t0).kind) {
  	case ((Ttypekind294244) 23):
  	{
  		Ttype294840* t20;
  		{
  			if (!((5120 &(1U<<((NU)(kind0)&31U)))!=0)) goto LA13;
  			result0 = t0;
  			goto BeforeRet;
  		}
  		LA13: ;
  		t20 = skiptypes_298099_850551059((*t0).sons->data[((NI) 0)], IL64(211106232576000));
  		switch ((*t20).kind) {
  		case ((Ttypekind294244) 23):
  		{
  			{
  				if (!!(((flags_329046_3876443242 &(1U<<((NU)(((Ttypeallowedflag329032) 1))&7U)))!=0))) goto LA18;
  				result0 = t20;
  			}
  			LA18: ;
  		}
  		break;
  		case ((Ttypekind294244) 27):
  		{
  			{
  				if (!!((kind0 == ((Tsymkind294435) 3)))) goto LA23;
  				result0 = t0;
  			}
  			goto LA21;
  			LA23: ;
  			{
  				result0 = typeallowedaux_329038_3876443242(marker0, t20, kind0, flags_329046_3876443242);
  			}
  			LA21: ;
  		}
  		break;
  		default:
  		{
  			{
  				if (!!(((2056 &(1U<<((NU)(kind0)&31U)))!=0))) goto LA29;
  				result0 = t0;
  			}
  			goto LA27;
  			LA29: ;
  			{
  				result0 = typeallowedaux_329038_3876443242(marker0, t20, kind0, flags_329046_3876443242);
  			}
  			LA27: ;
  		}
  		break;
  		}
  	}
  	break;
  	case ((Ttypekind294244) 25):
  	{
  		{
  			NIM_BOOL LOC35;
  			LOC35 = (NIM_BOOL)0;
  			LOC35 = (kind0 == ((Tsymkind294435) 10));
  			if (!(LOC35)) goto LA36;
  			LOC35 = ((*t0).callconv == ((Tcallingconvention294002) 8));
  			LA36: ;
  			if (!LOC35) goto LA37;
  			result0 = t0;
  			goto BeforeRet;
  		}
  		LA37: ;
  		{
  			NI i_329511_3876443242;
  			NI HEX3Atmp_329817_3876443242;
  			NI LOC40;
  			NI res_329820_3876443242;
  			i_329511_3876443242 = (NI)0;
  			HEX3Atmp_329817_3876443242 = (NI)0;
  			LOC40 = (NI)0;
  			LOC40 = sonslen_297327_850551059(t0);
  			HEX3Atmp_329817_3876443242 = (NI)(LOC40 - ((NI) 1));
  			res_329820_3876443242 = ((NI) 1);
  			{
  				while (1) {
  					if (!(res_329820_3876443242 <= HEX3Atmp_329817_3876443242)) goto LA42;
  					i_329511_3876443242 = res_329820_3876443242;
  					result0 = typeallowedaux_329038_3876443242(marker0, (*t0).sons->data[i_329511_3876443242], ((Tsymkind294435) 3), flags_329046_3876443242);
  					{
  						if (!!((result0 == NIM_NIL))) goto LA45;
  						goto LA39;
  					}
  					LA45: ;
  					res_329820_3876443242 += ((NI) 1);
  				} LA42: ;
  			}
  		} LA39: ;
  		{
  			NIM_BOOL LOC49;
  			LOC49 = (NIM_BOOL)0;
  			LOC49 = result0 == 0;
  			if (!(LOC49)) goto LA50;
  			LOC49 = !(((*t0).sons->data[((NI) 0)] == NIM_NIL));
  			LA50: ;
  			if (!LOC49) goto LA51;
  			result0 = typeallowedaux_329038_3876443242(marker0, (*t0).sons->data[((NI) 0)], ((Tsymkind294435) 11), flags_329046_3876443242);
  		}
  		LA51: ;
  	}
  	break;
  	case ((Ttypekind294244) 8):
  	{
  		result0 = NIM_NIL;
  	}
  	break;
  	case ((Ttypekind294244) 6):
  	case ((Ttypekind294244) 7):
  	case ((Ttypekind294244) 59):
  	{
  		{
  			if (!!(((2056 &(1U<<((NU)(kind0)&31U)))!=0))) goto LA57;
  			result0 = t0;
  		}
  		LA57: ;
  	}
  	break;
  	case ((Ttypekind294244) 62):
  	{
  		{
  			if (!!(((flags_329046_3876443242 &(1U<<((NU)(((Ttypeallowedflag329032) 0))&7U)))!=0))) goto LA62;
  			result0 = t0;
  		}
  		LA62: ;
  	}
  	break;
  	case ((Ttypekind294244) 51):
  	case ((Ttypekind294244) 54):
  	case ((Ttypekind294244) 52):
  	case ((Ttypekind294244) 53):
  	case ((Ttypekind294244) 55):
  	case ((Ttypekind294244) 56):
  	case ((Ttypekind294244) 57):
  	case ((Ttypekind294244) 58):
  	{
  		{
  			NIM_BOOL LOC67;
  			LOC67 = (NIM_BOOL)0;
  			LOC67 = (((*t0).flags &(1U<<((NU)(((Ttypeflag294431) 23))&31U)))!=0);
  			if (LOC67) goto LA68;
  			LOC67 = !(((flags_329046_3876443242 &(1U<<((NU)(((Ttypeallowedflag329032) 0))&7U)))!=0));
  			LA68: ;
  			if (!!(LOC67)) goto LA69;
  			result0 = t0;
  		}
  		LA69: ;
  	}
  	break;
  	case ((Ttypekind294244) 10):
  	case ((Ttypekind294244) 12):
  	case ((Ttypekind294244) 9):
  	case ((Ttypekind294244) 0):
  	case ((Ttypekind294244) 30):
  	case ((Ttypekind294244) 60):
  	case ((Ttypekind294244) 61):
  	{
  		result0 = t0;
  	}
  	break;
  	case ((Ttypekind294244) 5):
  	{
  		{
  			if (!!((kind0 == ((Tsymkind294435) 10)))) goto LA75;
  			result0 = t0;
  		}
  		LA75: ;
  	}
  	break;
  	case ((Ttypekind294244) 28):
  	case ((Ttypekind294244) 1):
  	case ((Ttypekind294244) 2):
  	case ((Ttypekind294244) 14):
  	case ((Ttypekind294244) 31) ... ((Ttypekind294244) 45):
  	case ((Ttypekind294244) 29):
  	case ((Ttypekind294244) 26):
  	{
  		result0 = NIM_NIL;
  	}
  	break;
  	case ((Ttypekind294244) 15):
  	{
  		{
  			if (!!((kind0 == ((Tsymkind294435) 3)))) goto LA81;
  			result0 = t0;
  		}
  		LA81: ;
  	}
  	break;
  	case ((Ttypekind294244) 11):
  	case ((Ttypekind294244) 13):
  	{
  		Ttype294840* LOC84;
  		LOC84 = (Ttype294840*)0;
  		LOC84 = lastson_297377_850551059(t0);
  		result0 = typeallowedaux_329038_3876443242(marker0, LOC84, kind0, flags_329046_3876443242);
  	}
  	break;
  	case ((Ttypekind294244) 20):
  	{
  		{
  			Ttype294840* LOC88;
  			LOC88 = (Ttype294840*)0;
  			LOC88 = skiptypes_298099_850551059((*t0).sons->data[((NI) 0)], IL64(211106232576000));
  			if (!!(((IL64(16490526949380) &((NU64)1<<((NU)((*LOC88).kind)&63U)))!=0))) goto LA89;
  			result0 = t0;
  		}
  		LA89: ;
  	}
  	break;
  	case ((Ttypekind294244) 27):
  	case ((Ttypekind294244) 48):
  	{
  		{
  			if (!!((kind0 == ((Tsymkind294435) 3)))) goto LA94;
  			result0 = t0;
  		}
  		goto LA92;
  		LA94: ;
  		{
  			result0 = typeallowedaux_329038_3876443242(marker0, (*t0).sons->data[((NI) 0)], ((Tsymkind294435) 8), flags_329046_3876443242);
  		}
  		LA92: ;
  	}
  	break;
  	case ((Ttypekind294244) 24):
  	{
  		{
  			if (!!(((*(*t0).sons->data[((NI) 0)]).kind == ((Ttypekind294244) 3)))) goto LA100;
  			result0 = typeallowedaux_329038_3876443242(marker0, (*t0).sons->data[((NI) 0)], ((Tsymkind294435) 8), (flags_329046_3876443242 | 2));
  		}
  		LA100: ;
  	}
  	break;
  	case ((Ttypekind294244) 16):
  	{
  		{
  			if (!!(((*(*t0).sons->data[((NI) 1)]).kind == ((Ttypekind294244) 3)))) goto LA105;
  			result0 = typeallowedaux_329038_3876443242(marker0, (*t0).sons->data[((NI) 1)], ((Tsymkind294435) 8), flags_329046_3876443242);
  		}
  		LA105: ;
  	}
  	break;
  	case ((Ttypekind294244) 22):
  	{
  		{
  			if (!(kind0 == ((Tsymkind294435) 10))) goto LA110;
  			result0 = t0;
  		}
  		goto LA108;
  		LA110: ;
  		{
  			Ttype294840* LOC113;
  			LOC113 = (Ttype294840*)0;
  			LOC113 = lastson_297377_850551059(t0);
  			result0 = typeallowedaux_329038_3876443242(marker0, LOC113, ((Tsymkind294435) 8), (flags_329046_3876443242 | 2));
  		}
  		LA108: ;
  	}
  	break;
  	case ((Ttypekind294244) 21):
  	{
  		Ttype294840* LOC115;
  		LOC115 = (Ttype294840*)0;
  		LOC115 = lastson_297377_850551059(t0);
  		result0 = typeallowedaux_329038_3876443242(marker0, LOC115, ((Tsymkind294435) 8), (flags_329046_3876443242 | 2));
  	}
  	break;
  	case ((Ttypekind294244) 4):
  	case ((Ttypekind294244) 19):
  	case ((Ttypekind294244) 46):
  	case ((Ttypekind294244) 47):
  	case ((Ttypekind294244) 49):
  	{
  		{
  			NI i_329713_3876443242;
  			NI HEX3Atmp_329825_3876443242;
  			NI LOC118;
  			NI res_329828_3876443242;
  			i_329713_3876443242 = (NI)0;
  			HEX3Atmp_329825_3876443242 = (NI)0;
  			LOC118 = (NI)0;
  			LOC118 = sonslen_297327_850551059(t0);
  			HEX3Atmp_329825_3876443242 = (NI)(LOC118 - ((NI) 1));
  			res_329828_3876443242 = ((NI) 0);
  			{
  				while (1) {
  					if (!(res_329828_3876443242 <= HEX3Atmp_329825_3876443242)) goto LA120;
  					i_329713_3876443242 = res_329828_3876443242;
  					result0 = typeallowedaux_329038_3876443242(marker0, (*t0).sons->data[i_329713_3876443242], kind0, flags_329046_3876443242);
  					{
  						if (!!((result0 == NIM_NIL))) goto LA123;
  						goto LA117;
  					}
  					LA123: ;
  					res_329828_3876443242 += ((NI) 1);
  				} LA120: ;
  			}
  		} LA117: ;
  	}
  	break;
  	case ((Ttypekind294244) 17):
  	case ((Ttypekind294244) 18):
  	{
  		Ttypeallowedflag329032Set flags0;
  		{
  			NIM_BOOL LOC128;
  			NIM_BOOL LOC129;
  			LOC128 = (NIM_BOOL)0;
  			LOC129 = (NIM_BOOL)0;
  			LOC129 = ((5120 &(1U<<((NU)(kind0)&31U)))!=0);
  			if (!(LOC129)) goto LA130;
  			LOC129 = ((*t0).kind == ((Ttypekind294244) 17));
  			LA130: ;
  			LOC128 = LOC129;
  			if (!(LOC128)) goto LA131;
  			LOC128 = !(((*t0).sons->data[((NI) 0)] == NIM_NIL));
  			LA131: ;
  			if (!LOC128) goto LA132;
  			result0 = t0;
  			goto BeforeRet;
  		}
  		LA132: ;
  		flags0 = (flags_329046_3876443242 | 1);
  		{
  			NI i_329783_3876443242;
  			NI HEX3Atmp_329833_3876443242;
  			NI LOC135;
  			NI res_329836_3876443242;
  			i_329783_3876443242 = (NI)0;
  			HEX3Atmp_329833_3876443242 = (NI)0;
  			LOC135 = (NI)0;
  			LOC135 = sonslen_297327_850551059(t0);
  			HEX3Atmp_329833_3876443242 = (NI)(LOC135 - ((NI) 1));
  			res_329836_3876443242 = ((NI) 0);
  			{
  				while (1) {
  					if (!(res_329836_3876443242 <= HEX3Atmp_329833_3876443242)) goto LA137;
  					i_329783_3876443242 = res_329836_3876443242;
  					result0 = typeallowedaux_329038_3876443242(marker0, (*t0).sons->data[i_329783_3876443242], kind0, flags0);
  					{
  						if (!!((result0 == NIM_NIL))) goto LA140;
  						goto LA134;
  					}
  					LA140: ;
  					res_329836_3876443242 += ((NI) 1);
  				} LA137: ;
  			}
  		} LA134: ;
  		{
  			NIM_BOOL LOC144;
  			LOC144 = (NIM_BOOL)0;
  			LOC144 = result0 == 0;
  			if (!(LOC144)) goto LA145;
  			LOC144 = !(((*t0).n == NIM_NIL));
  			LA145: ;
  			if (!LOC144) goto LA146;
  			result0 = typeallowednode_329047_3876443242(marker0, (*t0).n, kind0, flags0);
  		}
  		LA146: ;
  	}
  	break;
  	case ((Ttypekind294244) 50):
  	case ((Ttypekind294244) 3):
  	{
  		result0 = NIM_NIL;
  	}
  	break;
  	}
  	}BeforeRet: ;
  	return result0;
  }
  
  N_NIMCALL(Ttype294840*, typeallowed_329840_3876443242)(Ttype294840* t0, Tsymkind294435 kind0) {
  	Ttype294840* result0;
  	Intset270030 marker0;
  	result0 = (Ttype294840*)0;
  	memset((void*)(&marker0), 0, sizeof(marker0));
  	chckNil((void*)(&marker0));
  	memset((void*)(&marker0), 0, sizeof(marker0));
  	initintset_270885_2627731572((&marker0));
  	result0 = typeallowedaux_329038_3876443242((&marker0), t0, kind0, 0);
  	return result0;
  }
  
  N_NIMCALL(Tnode294802*, skiphidden_330908_3876443242)(Tnode294802* n0) {
  	Tnode294802* result0;
  	result0 = (Tnode294802*)0;
  	result0 = n0;
  	{
  		while (1) {
  			switch ((*result0).kind) {
  			case ((Tnodekind294020) 58):
  			case ((Tnodekind294020) 59):
  			{
  				{
  					Ordinaltype330862 LOC6;
  					Ordinaltype330862 LOC7;
  					LOC6 = (Ordinaltype330862)0;
  					LOC6 = classify_330866_3876443242((*(*result0).kindU.S6.sons->data[((NI) 1)]).typ);
  					LOC7 = (Ordinaltype330862)0;
  					LOC7 = classify_330866_3876443242((*result0).typ);
  					if (!(LOC6 == LOC7)) goto LA8;
  					result0 = (*result0).kindU.S6.sons->data[((NI) 1)];
  				}
  				goto LA4;
  				LA8: ;
  				{
  					goto LA1;
  				}
  				LA4: ;
  			}
  			break;
  			case ((Tnodekind294020) 65):
  			case ((Tnodekind294020) 64):
  			{
  				result0 = (*result0).kindU.S6.sons->data[((NI) 0)];
  			}
  			break;
  			default:
  			{
  				goto LA1;
  			}
  			break;
  			}
  		}
  	} LA1: ;
  	return result0;
  }
  
  static N_INLINE(Cell47304*, usrtocell_51440_1689653243)(void* usr0) {
  	Cell47304* result0;
  	result0 = (Cell47304*)0;
  	result0 = ((Cell47304*) ((NI)((NU64)(((NI) (usr0))) - (NU64)(((NI)sizeof(Cell47304))))));
  	return result0;
  }
  
  static N_INLINE(void, rtladdzct_52601_1689653243)(Cell47304* c0) {
  	addzct_51417_1689653243((&gch_49858_1689653243.zct), c0);
  }
  
  static N_INLINE(void, asgnRefNoCycle)(void** dest0, void* src0) {
  	{
  		Cell47304* c0;
  		if (!!((src0 == NIM_NIL))) goto LA3;
  		c0 = usrtocell_51440_1689653243(src0);
  		(*c0).refcount += ((NI) 8);
  	}
  	LA3: ;
  	{
  		Cell47304* c0;
  		if (!!(((*dest0) == NIM_NIL))) goto LA7;
  		c0 = usrtocell_51440_1689653243((*dest0));
  		{
  			(*c0).refcount -= ((NI) 8);
  			if (!((NU64)((*c0).refcount) < (NU64)(((NI) 8)))) goto LA11;
  			rtladdzct_52601_1689653243(c0);
  		}
  		LA11: ;
  	}
  	LA7: ;
  	(*dest0) = src0;
  }
  
  N_NIMCALL(Ttype294840*, taketype_330952_3876443242)(Ttype294840* formal0, Ttype294840* arg0) {
  	Ttype294840* result0;
  	result0 = (Ttype294840*)0;
  	{
  		if (!((*arg0).kind == ((Ttypekind294244) 5))) goto LA3;
  		result0 = formal0;
  	}
  	goto LA1;
  	LA3: ;
  	{
  		NIM_BOOL LOC6;
  		Ttype294840* a0;
  		Ttype294840* LOC10;
  		LOC6 = (NIM_BOOL)0;
  		LOC6 = ((IL64(281475127705600) &((NU64)1<<((NU)((*formal0).kind)&63U)))!=0);
  		if (!(LOC6)) goto LA7;
  		LOC6 = isemptycontainer_330930_3876443242(arg0);
  		LA7: ;
  		if (!LOC6) goto LA8;
  		LOC10 = (Ttype294840*)0;
  		LOC10 = skiptypes_298099_850551059(arg0, 2048);
  		a0 = copytype_297470_850551059(LOC10, (*arg0).owner, NIM_FALSE);
  		asgnRefNoCycle((void**) (&(*a0).sons->data[((65552 &((NU64)1<<((NU)((*arg0).kind)&63U)))!=0)]), (*formal0).sons->data[((NI) 0)]);
  		result0 = a0;
  	}
  	goto LA1;
  	LA8: ;
  	{
  		NIM_BOOL LOC12;
  		LOC12 = (NIM_BOOL)0;
  		LOC12 = ((786432 &((NU64)1<<((NU)((*formal0).kind)&63U)))!=0);
  		if (!(LOC12)) goto LA13;
  		LOC12 = ((*arg0).kind == (*formal0).kind);
  		LA13: ;
  		if (!LOC12) goto LA14;
  		result0 = formal0;
  	}
  	goto LA1;
  	LA14: ;
  	{
  		result0 = arg0;
  	}
  	LA1: ;
  	return result0;
  }
  
  N_NIMCALL(Ttype294840*, baseofdistinct_330296_3876443242)(Ttype294840* t0) {
  	Ttype294840* result0;
  	result0 = (Ttype294840*)0;
  	{
  		if (!((*t0).kind == ((Ttypekind294244) 13))) goto LA3;
  		result0 = (*t0).sons->data[((NI) 0)];
  	}
  	goto LA1;
  	LA3: ;
  	{
  		Ttype294840* parent0;
  		Ttype294840* it0;
  		result0 = copytype_297470_850551059(t0, (*t0).owner, NIM_FALSE);
  		parent0 = NIM_NIL;
  		it0 = result0;
  		{
  			while (1) {
  				if (!((6291456 &((NU64)1<<((NU)((*it0).kind)&63U)))!=0)) goto LA7;
  				parent0 = it0;
  				it0 = lastson_297377_850551059(it0);
  			} LA7: ;
  		}
  		{
  			if (!((*it0).kind == ((Ttypekind294244) 13))) goto LA10;
  			{
  				NimStringDesc* LOC16;
  				if (!!(!((parent0 == NIM_NIL)))) goto LA14;
  				LOC16 = (NimStringDesc*)0;
  				LOC16 = HEX24_198185_1689653243(T3876443242_124);
  				internalerror_198113_155036129(LOC16);
  			}
  			LA14: ;
  			asgnRefNoCycle((void**) (&(*parent0).sons->data[((NI) 0)]), (*it0).sons->data[((NI) 0)]);
  		}
  		LA10: ;
  	}
  	LA1: ;
  	return result0;
  }
  
  N_NIMCALL(void, typemismatch_331055_3876443242)(Tnode294802* n0, Ttype294840* formal0, Ttype294840* actual0) {
  	{
  		NIM_BOOL LOC3;
  		NimStringDesc* named0;
  		NimStringDesc* desc0;
  		NimStringDesc* x0;
  		NimStringDesc* LOC13;
  		NimStringDesc* LOC14;
  		NimStringDesc* LOC15;
  		NimStringDesc* LOC16;
  		TY194732 LOC17;
  		NimStringDesc* LOC18;
  		LOC3 = (NIM_BOOL)0;
  		LOC3 = !(((*formal0).kind == ((Ttypekind294244) 50)));
  		if (!(LOC3)) goto LA4;
  		LOC3 = !(((*actual0).kind == ((Ttypekind294244) 50)));
  		LA4: ;
  		if (!LOC3) goto LA5;
  		named0 = typetostring_322017_3876443242(formal0, ((Tprefereddesc322011) 0));
  		desc0 = typetostring_322017_3876443242(formal0, ((Tprefereddesc322011) 1));
  		{
  			if (!eqStrings(named0, desc0)) goto LA9;
  			x0 = named0;
  		}
  		goto LA7;
  		LA9: ;
  		{
  			NimStringDesc* LOC12;
  			LOC12 = (NimStringDesc*)0;
  			LOC12 = rawNewString(named0->Sup.len + desc0->Sup.len + 3);
  appendString(LOC12, named0);
  appendString(LOC12, ((NimStringDesc*) &T3876443242_125));
  appendString(LOC12, desc0);
  			x0 = LOC12;
  		}
  		LA7: ;
  		LOC13 = (NimStringDesc*)0;
  		LOC14 = (NimStringDesc*)0;
  		LOC14 = msgkindtostring_194723_155036129(((Tmsgkind193002) 133));
  		LOC15 = (NimStringDesc*)0;
  		LOC15 = typetostring_322017_3876443242(actual0, ((Tprefereddesc322011) 0));
  		LOC16 = (NimStringDesc*)0;
  		LOC16 = msgkindtostring_194723_155036129(((Tmsgkind193002) 135));
  		memset((void*)LOC17, 0, sizeof(LOC17));
  		LOC17[0] = copyString(x0);
  		LOC18 = (NimStringDesc*)0;
  		LOC18 = nsuFormatOpenArray(LOC16, LOC17, 1);
  		LOC13 = rawNewString(LOC14->Sup.len + LOC15->Sup.len + LOC18->Sup.len + 2);
  appendString(LOC13, LOC14);
  appendString(LOC13, LOC15);
  appendString(LOC13, ((NimStringDesc*) &T3876443242_126));
  appendString(LOC13, LOC18);
  		localerror_198080_155036129((*n0).info, ((Tmsgkind193002) 4), LOC13);
  	}
  	LA5: ;
  }
  
  N_NIMCALL(Tnode294802*, skiphiddensubconv_331018_3876443242)(Tnode294802* n0) {
  	Tnode294802* result0;
  	result0 = (Tnode294802*)0;
  	{
  		Ttype294840* formal0;
  		Ttype294840* arg0;
  		Ttype294840* dest0;
  		if (!((*n0).kind == ((Tnodekind294020) 59))) goto LA3;
  		formal0 = (*n0).typ;
  		result0 = (*n0).kindU.S6.sons->data[((NI) 1)];
  		arg0 = (*result0).typ;
  		dest0 = taketype_330952_3876443242(formal0, arg0);
  		{
  			NIM_BOOL LOC7;
  			LOC7 = (NIM_BOOL)0;
  			LOC7 = (dest0 == arg0);
  			if (!(LOC7)) goto LA8;
  			LOC7 = !(((*formal0).kind == ((Ttypekind294244) 6)));
  			LA8: ;
  			if (!LOC7) goto LA9;
  			result0 = n0;
  		}
  		goto LA5;
  		LA9: ;
  		{
  			result0 = copytree_298822_850551059(result0);
  			asgnRefNoCycle((void**) (&(*result0).typ), dest0);
  		}
  		LA5: ;
  	}
  	goto LA1;
  	LA3: ;
  	{
  		result0 = n0;
  	}
  	LA1: ;
  	return result0;
  }
  
  N_NIMCALL(Tnode294802*, skipconvtaketype_330925_3876443242)(Tnode294802* n0) {
  	Tnode294802* result0;
  	result0 = (Tnode294802*)0;
  	result0 = skipconv_330882_3876443242(n0);
  	asgnRefNoCycle((void**) (&(*result0).typ), (*n0).typ);
  	return result0;
  }
  
  N_NIMCALL(NIM_BOOL, searchtypenodeforaux_323175_3876443242)(Tnode294802* n0, Ttypepredicate322029 p0, Intset270030* marker0) {
  	NIM_BOOL result0;
  {	result0 = (NIM_BOOL)0;
  	result0 = NIM_FALSE;
  	switch ((*n0).kind) {
  	case ((Tnodekind294020) 138):
  	{
  		{
  			NI i_323193_3876443242;
  			NI HEX3Atmp_323419_3876443242;
  			NI LOC3;
  			NI res_323422_3876443242;
  			i_323193_3876443242 = (NI)0;
  			HEX3Atmp_323419_3876443242 = (NI)0;
  			LOC3 = (NI)0;
  			LOC3 = sonslen_297351_850551059(n0);
  			HEX3Atmp_323419_3876443242 = (NI)(LOC3 - ((NI) 1));
  			res_323422_3876443242 = ((NI) 0);
  			{
  				while (1) {
  					if (!(res_323422_3876443242 <= HEX3Atmp_323419_3876443242)) goto LA5;
  					i_323193_3876443242 = res_323422_3876443242;
  					result0 = searchtypenodeforaux_323175_3876443242((*n0).kindU.S6.sons->data[i_323193_3876443242], p0, marker0);
  					{
  						if (!result0) goto LA8;
  						goto BeforeRet;
  					}
  					LA8: ;
  					res_323422_3876443242 += ((NI) 1);
  				} LA5: ;
  			}
  		}
  	}
  	break;
  	case ((Tnodekind294020) 139):
  	{
  		result0 = searchtypenodeforaux_323175_3876443242((*n0).kindU.S6.sons->data[((NI) 0)], p0, marker0);
  		{
  			if (!result0) goto LA13;
  			goto BeforeRet;
  		}
  		LA13: ;
  		{
  			NI i_323413_3876443242;
  			NI HEX3Atmp_323427_3876443242;
  			NI LOC16;
  			NI res_323430_3876443242;
  			i_323413_3876443242 = (NI)0;
  			HEX3Atmp_323427_3876443242 = (NI)0;
  			LOC16 = (NI)0;
  			LOC16 = sonslen_297351_850551059(n0);
  			HEX3Atmp_323427_3876443242 = (NI)(LOC16 - ((NI) 1));
  			res_323430_3876443242 = ((NI) 1);
  			{
  				while (1) {
  					if (!(res_323430_3876443242 <= HEX3Atmp_323427_3876443242)) goto LA18;
  					i_323413_3876443242 = res_323430_3876443242;
  					switch ((*(*n0).kindU.S6.sons->data[i_323413_3876443242]).kind) {
  					case ((Tnodekind294020) 85):
  					case ((Tnodekind294020) 88):
  					{
  						Tnode294802* LOC20;
  						LOC20 = (Tnode294802*)0;
  						LOC20 = lastson_297364_850551059((*n0).kindU.S6.sons->data[i_323413_3876443242]);
  						result0 = searchtypenodeforaux_323175_3876443242(LOC20, p0, marker0);
  						{
  							if (!result0) goto LA23;
  							goto BeforeRet;
  						}
  						LA23: ;
  					}
  					break;
  					default:
  					{
  						internalerror_198113_155036129(((NimStringDesc*) &T3876443242_127));
  					}
  					break;
  					}
  					res_323430_3876443242 += ((NI) 1);
  				} LA18: ;
  			}
  		}
  	}
  	break;
  	case ((Tnodekind294020) 3):
  	{
  		result0 = searchtypeforaux_323169_3876443242((*(*n0).kindU.S4.sym).typ, p0, marker0);
  	}
  	break;
  	default:
  	{
  		internalerror_198100_155036129((*n0).info, ((NimStringDesc*) &T3876443242_128));
  	}
  	break;
  	}
  	}BeforeRet: ;
  	return result0;
  }
  
  N_NIMCALL(NIM_BOOL, searchtypeforaux_323169_3876443242)(Ttype294840* t0, Ttypepredicate322029 predicate0, Intset270030* marker0) {
  	NIM_BOOL result0;
  {	result0 = (NIM_BOOL)0;
  	result0 = NIM_FALSE;
  	{
  		if (!(t0 == NIM_NIL)) goto LA3;
  		goto BeforeRet;
  	}
  	LA3: ;
  	{
  		NIM_BOOL LOC7;
  		LOC7 = (NIM_BOOL)0;
  		LOC7 = containsorincl_270862_2627731572(marker0, (*t0).Sup.id);
  		if (!LOC7) goto LA8;
  		goto BeforeRet;
  	}
  	LA8: ;
  	result0 = predicate0(t0);
  	{
  		if (!result0) goto LA12;
  		goto BeforeRet;
  	}
  	LA12: ;
  	switch ((*t0).kind) {
  	case ((Ttypekind294244) 17):
  	{
  		{
  			Ttype294840* LOC19;
  			if (!!(((*t0).sons->data[((NI) 0)] == NIM_NIL))) goto LA17;
  			LOC19 = (Ttype294840*)0;
  			LOC19 = skiptypes_298099_850551059((*t0).sons->data[((NI) 0)], IL64(211106247215360));
  			result0 = searchtypeforaux_323169_3876443242(LOC19, predicate0, marker0);
  		}
  		LA17: ;
  		{
  			if (!!(result0)) goto LA22;
  			result0 = searchtypenodeforaux_323175_3876443242((*t0).n, predicate0, marker0);
  		}
  		LA22: ;
  	}
  	break;
  	case ((Ttypekind294244) 11):
  	case ((Ttypekind294244) 13):
  	{
  		Ttype294840* LOC25;
  		LOC25 = (Ttype294840*)0;
  		LOC25 = lastson_297377_850551059(t0);
  		result0 = searchtypeforaux_323169_3876443242(LOC25, predicate0, marker0);
  	}
  	break;
  	case ((Ttypekind294244) 16):
  	case ((Ttypekind294244) 4):
  	case ((Ttypekind294244) 19):
  	case ((Ttypekind294244) 18):
  	{
  		{
  			NI i_323476_3876443242;
  			NI HEX3Atmp_323478_3876443242;
  			NI LOC28;
  			NI res_323481_3876443242;
  			i_323476_3876443242 = (NI)0;
  			HEX3Atmp_323478_3876443242 = (NI)0;
  			LOC28 = (NI)0;
  			LOC28 = sonslen_297327_850551059(t0);
  			HEX3Atmp_323478_3876443242 = (NI)(LOC28 - ((NI) 1));
  			res_323481_3876443242 = ((NI) 0);
  			{
  				while (1) {
  					if (!(res_323481_3876443242 <= HEX3Atmp_323478_3876443242)) goto LA30;
  					i_323476_3876443242 = res_323481_3876443242;
  					result0 = searchtypeforaux_323169_3876443242((*t0).sons->data[i_323476_3876443242], predicate0, marker0);
  					{
  						if (!result0) goto LA33;
  						goto BeforeRet;
  					}
  					LA33: ;
  					res_323481_3876443242 += ((NI) 1);
  				} LA30: ;
  			}
  		}
  	}
  	break;
  	default:
  	{
  	}
  	break;
  	}
  	}BeforeRet: ;
  	return result0;
  }
  
  N_NIMCALL(NIM_BOOL, searchtypefor_323485_3876443242)(Ttype294840* t0, Ttypepredicate322029 predicate0) {
  	NIM_BOOL result0;
  	Intset270030 marker0;
  	result0 = (NIM_BOOL)0;
  	memset((void*)(&marker0), 0, sizeof(marker0));
  	chckNil((void*)(&marker0));
  	memset((void*)(&marker0), 0, sizeof(marker0));
  	initintset_270885_2627731572((&marker0));
  	result0 = searchtypeforaux_323169_3876443242(t0, predicate0, (&marker0));
  	return result0;
  }
  
  N_NIMCALL(NIM_BOOL, isgcref_323711_3876443242)(Ttype294840* t0) {
  	NIM_BOOL result0;
  	NIM_BOOL LOC1;
  	NIM_BOOL LOC3;
  	result0 = (NIM_BOOL)0;
  	LOC1 = (NIM_BOOL)0;
  	LOC1 = ((289406976 &((NU64)1<<((NU)((*t0).kind)&63U)))!=0);
  	if (LOC1) goto LA2;
  	LOC3 = (NIM_BOOL)0;
  	LOC3 = ((*t0).kind == ((Ttypekind294244) 25));
  	if (!(LOC3)) goto LA4;
  	LOC3 = ((*t0).callconv == ((Tcallingconvention294002) 8));
  	LA4: ;
  	LOC1 = LOC3;
  	LA2: ;
  	result0 = LOC1;
  	return result0;
  }
  
  N_NIMCALL(NIM_BOOL, containsgarbagecollectedref_322117_3876443242)(Ttype294840* typ0) {
  	NIM_BOOL result0;
  	result0 = (NIM_BOOL)0;
  	result0 = searchtypefor_323485_3876443242(typ0, isgcref_323711_3876443242);
  	return result0;
  }
  
  N_NIMCALL(NIM_BOOL, ispureobject_322138_3876443242)(Ttype294840* typ0) {
  	NIM_BOOL result0;
  	Ttype294840* t0;
  	NIM_BOOL LOC5;
  	result0 = (NIM_BOOL)0;
  	t0 = typ0;
  	{
  		while (1) {
  			NIM_BOOL LOC3;
  			LOC3 = (NIM_BOOL)0;
  			LOC3 = ((*t0).kind == ((Ttypekind294244) 17));
  			if (!(LOC3)) goto LA4;
  			LOC3 = !(((*t0).sons->data[((NI) 0)] == NIM_NIL));
  			LA4: ;
  			if (!LOC3) goto LA2;
  			t0 = skiptypes_298099_850551059((*t0).sons->data[((NI) 0)], IL64(211106247215360));
  		} LA2: ;
  	}
  	LOC5 = (NIM_BOOL)0;
  	LOC5 = !(((*t0).sym == NIM_NIL));
  	if (!(LOC5)) goto LA6;
  	LOC5 = (((*(*t0).sym).flags &(1U<<((NU)(((Tsymflag294184) 9))&31U)))!=0);
  	LA6: ;
  	result0 = LOC5;
  	return result0;
  }
  
  N_NIMCALL(NIM_BOOL, samebackendtype_328197_3876443242)(Ttype294840* x0, Ttype294840* y0) {
  	NIM_BOOL result0;
  	Tsametypeclosure326433 c0;
  	result0 = (NIM_BOOL)0;
  	memset((void*)(&c0), 0, sizeof(c0));
  	chckNil((void*)(&c0));
  	memset((void*)(&c0), 0, sizeof(c0));
  	initsametypeclosure_326453_3876443242((&c0));
  	c0.flags |= ((NU8)1)<<((((Ttypecmpflag326429) 0))%(sizeof(NU8)*8));
  	result0 = sametypeaux_326585_3876443242(x0, y0, (&c0));
  	return result0;
  }
  
  N_NIMCALL(NIM_BOOL, canformacyclenode_323807_3876443242)(Intset270030* marker0, Tnode294802* n0, NI startid0) {
  	NIM_BOOL result0;
  {	result0 = (NIM_BOOL)0;
  	result0 = NIM_FALSE;
  	{
  		if (!!((n0 == NIM_NIL))) goto LA3;
  		result0 = canformacycleaux_323801_3876443242(marker0, (*n0).typ, startid0);
  		{
  			if (!!(result0)) goto LA7;
  			switch ((*n0).kind) {
  			case ((Tnodekind294020) 0) ... ((Tnodekind294020) 23):
  			{
  			}
  			break;
  			default:
  			{
  				{
  					NI i_323837_3876443242;
  					NI HEX3Atmp_323840_3876443242;
  					NI LOC12;
  					NI res_323843_3876443242;
  					i_323837_3876443242 = (NI)0;
  					HEX3Atmp_323840_3876443242 = (NI)0;
  					LOC12 = (NI)0;
  					LOC12 = sonslen_297351_850551059(n0);
  					HEX3Atmp_323840_3876443242 = (NI)(LOC12 - ((NI) 1));
  					res_323843_3876443242 = ((NI) 0);
  					{
  						while (1) {
  							if (!(res_323843_3876443242 <= HEX3Atmp_323840_3876443242)) goto LA14;
  							i_323837_3876443242 = res_323843_3876443242;
  							result0 = canformacyclenode_323807_3876443242(marker0, (*n0).kindU.S6.sons->data[i_323837_3876443242], startid0);
  							{
  								if (!result0) goto LA17;
  								goto BeforeRet;
  							}
  							LA17: ;
  							res_323843_3876443242 += ((NI) 1);
  						} LA14: ;
  					}
  				}
  			}
  			break;
  			}
  		}
  		LA7: ;
  	}
  	LA3: ;
  	}BeforeRet: ;
  	return result0;
  }
  
  N_NIMCALL(NIM_BOOL, canformacycleaux_323801_3876443242)(Intset270030* marker0, Ttype294840* typ0, NI startid0) {
  	NIM_BOOL result0;
  	Ttype294840* t0;
  {	result0 = (NIM_BOOL)0;
  	result0 = NIM_FALSE;
  	{
  		if (!(typ0 == NIM_NIL)) goto LA3;
  		goto BeforeRet;
  	}
  	LA3: ;
  	{
  		if (!(((*typ0).flags &(1U<<((NU)(((Ttypeflag294431) 4))&31U)))!=0)) goto LA7;
  		goto BeforeRet;
  	}
  	LA7: ;
  	t0 = skiptypes_298099_850551059(typ0, IL64(211106232576000));
  	{
  		if (!(((*t0).flags &(1U<<((NU)(((Ttypeflag294431) 4))&31U)))!=0)) goto LA11;
  		goto BeforeRet;
  	}
  	LA11: ;
  	switch ((*t0).kind) {
  	case ((Ttypekind294244) 18):
  	case ((Ttypekind294244) 17):
  	case ((Ttypekind294244) 22):
  	case ((Ttypekind294244) 24):
  	case ((Ttypekind294244) 16):
  	case ((Ttypekind294244) 4):
  	case ((Ttypekind294244) 27):
  	case ((Ttypekind294244) 48):
  	{
  		{
  			NIM_BOOL LOC16;
  			LOC16 = (NIM_BOOL)0;
  			LOC16 = containsorincl_270862_2627731572(marker0, (*t0).Sup.id);
  			if (!!(LOC16)) goto LA17;
  			{
  				NI i_323911_3876443242;
  				NI HEX3Atmp_323953_3876443242;
  				NI LOC20;
  				NI res_323956_3876443242;
  				i_323911_3876443242 = (NI)0;
  				HEX3Atmp_323953_3876443242 = (NI)0;
  				LOC20 = (NI)0;
  				LOC20 = sonslen_297327_850551059(t0);
  				HEX3Atmp_323953_3876443242 = (NI)(LOC20 - ((NI) 1));
  				res_323956_3876443242 = ((NI) 0);
  				{
  					while (1) {
  						if (!(res_323956_3876443242 <= HEX3Atmp_323953_3876443242)) goto LA22;
  						i_323911_3876443242 = res_323956_3876443242;
  						result0 = canformacycleaux_323801_3876443242(marker0, (*t0).sons->data[i_323911_3876443242], startid0);
  						{
  							if (!result0) goto LA25;
  							goto BeforeRet;
  						}
  						LA25: ;
  						res_323956_3876443242 += ((NI) 1);
  					} LA22: ;
  				}
  			}
  			{
  				if (!!(((*t0).n == NIM_NIL))) goto LA29;
  				result0 = canformacyclenode_323807_3876443242(marker0, (*t0).n, startid0);
  			}
  			LA29: ;
  		}
  		goto LA14;
  		LA17: ;
  		{
  			result0 = ((*t0).Sup.id == startid0);
  		}
  		LA14: ;
  		{
  			NIM_BOOL LOC34;
  			LOC34 = (NIM_BOOL)0;
  			LOC34 = ((*t0).kind == ((Ttypekind294244) 17));
  			if (!(LOC34)) goto LA35;
  			LOC34 = !((((*t0).flags &(1U<<((NU)(((Ttypeflag294431) 2))&31U)))!=0));
  			LA35: ;
  			if (!LOC34) goto LA36;
  			result0 = NIM_TRUE;
  		}
  		LA36: ;
  	}
  	break;
  	case ((Ttypekind294244) 25):
  	{
  		result0 = ((*typ0).callconv == ((Tcallingconvention294002) 8));
  	}
  	break;
  	default:
  	{
  	}
  	break;
  	}
  	}BeforeRet: ;
  	return result0;
  }
  
  N_NIMCALL(NIM_BOOL, canformacycle_322123_3876443242)(Ttype294840* typ0) {
  	NIM_BOOL result0;
  	Intset270030 marker0;
  	result0 = (NIM_BOOL)0;
  	memset((void*)(&marker0), 0, sizeof(marker0));
  	chckNil((void*)(&marker0));
  	memset((void*)(&marker0), 0, sizeof(marker0));
  	initintset_270885_2627731572((&marker0));
  	result0 = canformacycleaux_323801_3876443242((&marker0), typ0, (*typ0).Sup.id);
  	return result0;
  }
  
  N_NIMCALL(Ttypefieldresult322145, analyseobjectwithtypefieldaux_323584_3876443242)(Ttype294840* t0, Intset270030* marker0) {
  	Ttypefieldresult322145 result0;
  	Ttypefieldresult322145 res0;
  {	result0 = (Ttypefieldresult322145)0;
  	res0 = (Ttypefieldresult322145)0;
  	result0 = ((Ttypefieldresult322145) 0);
  	{
  		if (!(t0 == NIM_NIL)) goto LA3;
  		goto BeforeRet;
  	}
  	LA3: ;
  	switch ((*t0).kind) {
  	case ((Ttypekind294244) 17):
  	{
  		{
  			if (!!(((*t0).n == NIM_NIL))) goto LA8;
  			{
  				NIM_BOOL LOC12;
  				LOC12 = (NIM_BOOL)0;
  				LOC12 = searchtypenodeforaux_323175_3876443242((*t0).n, isobjectwithtypefieldpredicate_323509_3876443242, marker0);
  				if (!LOC12) goto LA13;
  				result0 = ((Ttypefieldresult322145) 2);
  				goto BeforeRet;
  			}
  			LA13: ;
  		}
  		LA8: ;
  		{
  			NI i_323626_3876443242;
  			NI HEX3Atmp_323690_3876443242;
  			NI LOC16;
  			NI res_323693_3876443242;
  			i_323626_3876443242 = (NI)0;
  			HEX3Atmp_323690_3876443242 = (NI)0;
  			LOC16 = (NI)0;
  			LOC16 = sonslen_297327_850551059(t0);
  			HEX3Atmp_323690_3876443242 = (NI)(LOC16 - ((NI) 1));
  			res_323693_3876443242 = ((NI) 0);
  			{
  				while (1) {
  					Ttype294840* x0;
  					if (!(res_323693_3876443242 <= HEX3Atmp_323690_3876443242)) goto LA18;
  					i_323626_3876443242 = res_323693_3876443242;
  					x0 = (*t0).sons->data[i_323626_3876443242];
  					{
  						if (!!((x0 == NIM_NIL))) goto LA21;
  						x0 = skiptypes_298099_850551059(x0, IL64(211106247215360));
  					}
  					LA21: ;
  					res0 = analyseobjectwithtypefieldaux_323584_3876443242(x0, marker0);
  					{
  						if (!(res0 == ((Ttypefieldresult322145) 2))) goto LA25;
  						result0 = ((Ttypefieldresult322145) 2);
  						goto BeforeRet;
  					}
  					LA25: ;
  					{
  						if (!(res0 == ((Ttypefieldresult322145) 1))) goto LA29;
  						result0 = ((Ttypefieldresult322145) 1);
  					}
  					LA29: ;
  					res_323693_3876443242 += ((NI) 1);
  				} LA18: ;
  			}
  		}
  		{
  			if (!(result0 == ((Ttypefieldresult322145) 0))) goto LA33;
  			{
  				NIM_BOOL LOC37;
  				LOC37 = (NIM_BOOL)0;
  				LOC37 = isobjectwithtypefieldpredicate_323509_3876443242(t0);
  				if (!LOC37) goto LA38;
  				result0 = ((Ttypefieldresult322145) 1);
  			}
  			LA38: ;
  		}
  		LA33: ;
  	}
  	break;
  	case ((Ttypekind294244) 11):
  	case ((Ttypekind294244) 13):
  	case ((Ttypekind294244) 46):
  	case ((Ttypekind294244) 47):
  	{
  		Ttype294840* LOC41;
  		LOC41 = (Ttype294840*)0;
  		LOC41 = lastson_297377_850551059(t0);
  		result0 = analyseobjectwithtypefieldaux_323584_3876443242(LOC41, marker0);
  	}
  	break;
  	case ((Ttypekind294244) 16):
  	case ((Ttypekind294244) 4):
  	case ((Ttypekind294244) 18):
  	{
  		{
  			NI i_323678_3876443242;
  			NI HEX3Atmp_323698_3876443242;
  			NI LOC44;
  			NI res_323701_3876443242;
  			i_323678_3876443242 = (NI)0;
  			HEX3Atmp_323698_3876443242 = (NI)0;
  			LOC44 = (NI)0;
  			LOC44 = sonslen_297327_850551059(t0);
  			HEX3Atmp_323698_3876443242 = (NI)(LOC44 - ((NI) 1));
  			res_323701_3876443242 = ((NI) 0);
  			{
  				while (1) {
  					if (!(res_323701_3876443242 <= HEX3Atmp_323698_3876443242)) goto LA46;
  					i_323678_3876443242 = res_323701_3876443242;
  					res0 = analyseobjectwithtypefieldaux_323584_3876443242((*t0).sons->data[i_323678_3876443242], marker0);
  					{
  						if (!!((res0 == ((Ttypefieldresult322145) 0)))) goto LA49;
  						result0 = ((Ttypefieldresult322145) 2);
  						goto BeforeRet;
  					}
  					LA49: ;
  					res_323701_3876443242 += ((NI) 1);
  				} LA46: ;
  			}
  		}
  	}
  	break;
  	default:
  	{
  	}
  	break;
  	}
  	}BeforeRet: ;
  	return result0;
  }
  
  N_NIMCALL(Ttypefieldresult322145, analyseobjectwithtypefield_322149_3876443242)(Ttype294840* t0) {
  	Ttypefieldresult322145 result0;
  	Intset270030 marker0;
  	result0 = (Ttypefieldresult322145)0;
  	memset((void*)(&marker0), 0, sizeof(marker0));
  	chckNil((void*)(&marker0));
  	memset((void*)(&marker0), 0, sizeof(marker0));
  	initintset_270885_2627731572((&marker0));
  	result0 = analyseobjectwithtypefieldaux_323584_3876443242(t0, (&marker0));
  	return result0;
  }
  
  N_NIMCALL(NIM_BOOL, ishiddenpointer_323782_3876443242)(Ttype294840* t0) {
  	NIM_BOOL result0;
  	result0 = (NIM_BOOL)0;
  	result0 = ((285212672 &((NU64)1<<((NU)((*t0).kind)&63U)))!=0);
  	return result0;
  }
  
  N_NIMCALL(NIM_BOOL, containshiddenpointer_322120_3876443242)(Ttype294840* typ0) {
  	NIM_BOOL result0;
  	result0 = (NIM_BOOL)0;
  	result0 = searchtypefor_323485_3876443242(typ0, ishiddenpointer_323782_3876443242);
  	return result0;
  }
  
  static N_INLINE(NIM_BOOL, iscompiletimeonly_330706_3876443242)(Ttype294840* t0) {
  	NIM_BOOL result0;
  	result0 = (NIM_BOOL)0;
  	result0 = ((IL64(576460752303423744) &((NU64)1<<((NU)((*t0).kind)&63U)))!=0);
  	return result0;
  }
  
  N_NIMCALL(NIM_BOOL, containscompiletimeonly_330721_3876443242)(Ttype294840* t0) {
  	NIM_BOOL result0;
  {	result0 = (NIM_BOOL)0;
  	{
  		NIM_BOOL LOC3;
  		LOC3 = (NIM_BOOL)0;
  		LOC3 = iscompiletimeonly_330706_3876443242(t0);
  		if (!LOC3) goto LA4;
  		result0 = NIM_TRUE;
  		goto BeforeRet;
  	}
  	LA4: ;
  	{
  		NIM_BOOL LOC8;
  		LOC8 = (NIM_BOOL)0;
  		LOC8 = HEX3DHEX3D_330727_1689653243((*t0).sons, NIM_NIL);
  		if (!!(LOC8)) goto LA9;
  		{
  			NI i_330840_3876443242;
  			NI HEX3Atmp_330854_3876443242;
  			NI LOC12;
  			NI res_330857_3876443242;
  			i_330840_3876443242 = (NI)0;
  			HEX3Atmp_330854_3876443242 = (NI)0;
  			LOC12 = (NI)0;
  			LOC12 = sonslen_297327_850551059(t0);
  			HEX3Atmp_330854_3876443242 = (LOC12 - 1);
  			res_330857_3876443242 = ((NI) 0);
  			{
  				while (1) {
  					if (!(res_330857_3876443242 <= HEX3Atmp_330854_3876443242)) goto LA14;
  					i_330840_3876443242 = res_330857_3876443242;
  					{
  						NIM_BOOL LOC17;
  						LOC17 = (NIM_BOOL)0;
  						LOC17 = !(((*t0).sons->data[i_330840_3876443242] == NIM_NIL));
  						if (!(LOC17)) goto LA18;
  						LOC17 = iscompiletimeonly_330706_3876443242((*t0).sons->data[i_330840_3876443242]);
  						LA18: ;
  						if (!LOC17) goto LA19;
  						result0 = NIM_TRUE;
  						goto BeforeRet;
  					}
  					LA19: ;
  					res_330857_3876443242 += ((NI) 1);
  				} LA14: ;
  			}
  		}
  	}
  	LA9: ;
  	result0 = NIM_FALSE;
  	goto BeforeRet;
  	}BeforeRet: ;
  	return result0;
  }
  NIM_EXTERNC N_NOINLINE(void, compiler_typesInit000)(void) {
  }
  
  NIM_EXTERNC N_NOINLINE(void, compiler_typesDatInit000)(void) {
  static TNimNode* T3876443242_113[2];
  static TNimNode T3876443242_0[3];
  NTI326447.size = sizeof(TY326447);
  NTI326447.kind = 18;
  NTI326447.base = 0;
  NTI326447.flags = 3;
  T3876443242_113[0] = &T3876443242_0[1];
  T3876443242_0[1].kind = 1;
  T3876443242_0[1].offset = offsetof(TY326447, Field0);
  T3876443242_0[1].typ = (&NTI104);
  T3876443242_0[1].name = "Field0";
  T3876443242_113[1] = &T3876443242_0[2];
  T3876443242_0[2].kind = 1;
  T3876443242_0[2].offset = offsetof(TY326447, Field1);
  T3876443242_0[2].typ = (&NTI104);
  T3876443242_0[2].name = "Field1";
  T3876443242_0[0].len = 2; T3876443242_0[0].kind = 2; T3876443242_0[0].sons = &T3876443242_113[0];
  NTI326447.node = &T3876443242_0[0];
  NTI326446.size = sizeof(TY326446*);
  NTI326446.kind = 24;
  NTI326446.base = (&NTI326447);
  NTI326446.flags = 2;
  NTI326446.marker = T3876443242_114;
  }
  
  