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

#include <setjmp.h>

#include <string.h>

#include <stdio.h>
typedef struct Tsym190843 Tsym190843;
typedef struct Tlineinfo163338 Tlineinfo163338;
typedef struct Tcontext244023 Tcontext244023;
typedef struct Tnode190813 Tnode190813;
typedef struct Ttype190849 Ttype190849;
typedef struct NimStringDesc NimStringDesc;
typedef struct TGenericSeq TGenericSeq;
typedef struct Tident167021 Tident167021;
typedef struct Tnodeseq190807 Tnodeseq190807;
typedef struct Tpasscontext241005 Tpasscontext241005;
typedef struct TNimObject TNimObject;
typedef struct TNimType TNimType;
typedef struct TNimNode TNimNode;
typedef struct Tscope190837 Tscope190837;
typedef struct Tproccon244011 Tproccon244011;
typedef struct Tsymseq190815 Tsymseq190815;
typedef struct Intset187056 Intset187056;
typedef struct Ttrunk187052 Ttrunk187052;
typedef struct Ttrunkseq187054 Ttrunkseq187054;
typedef struct Tlinkedlist130028 Tlinkedlist130028;
typedef struct Tlistentry130022 Tlistentry130022;
typedef struct Tidtable190861 Tidtable190861;
typedef struct Tidpairseq190859 Tidpairseq190859;
typedef struct Tstrtable190817 Tstrtable190817;
typedef struct Tctx243048 Tctx243048;
typedef struct TY244141 TY244141;
typedef struct Exception Exception;
typedef struct TSafePoint TSafePoint;
typedef struct Tcell46547 Tcell46547;
typedef struct Tcellset46559 Tcellset46559;
typedef struct Tgcheap48416 Tgcheap48416;
typedef struct Tcellseq46563 Tcellseq46563;
typedef struct Tpagedesc46555 Tpagedesc46555;
typedef struct Tmemregion28410 Tmemregion28410;
typedef struct Tsmallchunk27640 Tsmallchunk27640;
typedef struct Tllchunk28404 Tllchunk28404;
typedef struct Tbigchunk27642 Tbigchunk27642;
typedef struct Tintset27617 Tintset27617;
typedef struct Ttrunk27613 Ttrunk27613;
typedef struct Tavlnode28408 Tavlnode28408;
typedef struct Tgcstat48414 Tgcstat48414;
typedef struct Tidobj167015 Tidobj167015;
typedef struct Ttypeseq190845 Ttypeseq190845;
typedef struct TY190944 TY190944;
typedef struct Tloc190827 Tloc190827;
typedef struct Ropeobj161009 Ropeobj161009;
typedef struct Tlib190831 Tlib190831;
typedef struct Ttabiter198119 Ttabiter198119;
typedef struct Tdocumentor340007 Tdocumentor340007;
typedef struct Tcandidate344209 Tcandidate344209;
typedef struct TY86545 TY86545;
typedef struct Tidpair190857 Tidpair190857;
typedef struct TY243253 TY243253;
typedef struct TY164033 TY164033;
typedef struct PprocHEX3Aobjecttype243232 PprocHEX3Aobjecttype243232;
typedef struct TY243272 TY243272;
typedef struct Tinstantiationpair244013 Tinstantiationpair244013;
typedef struct Tinstantiation190833 Tinstantiation190833;
typedef struct Tbasechunk27638 Tbasechunk27638;
typedef struct Tfreecell27630 Tfreecell27630;
typedef struct Trstgenerator311016 Trstgenerator311016;
typedef struct Stringtableobj134012 Stringtableobj134012;
typedef struct TY311034 TY311034;
typedef struct Table311052 Table311052;
typedef struct Keyvaluepairseq311055 Keyvaluepairseq311055;
typedef struct TY243233 TY243233;
typedef struct TY243239 TY243239;
typedef struct TY243273 TY243273;
typedef struct Vmargs243042 Vmargs243042;
typedef struct TY190933 TY190933;
typedef struct Keyvaluepairseq134010 Keyvaluepairseq134010;
typedef struct Ttocentry311012 Ttocentry311012;
typedef struct Trstnode296011 Trstnode296011;
typedef struct Keyvaluepair311058 Keyvaluepair311058;
typedef struct Tblock243030 Tblock243030;
typedef struct TY243213 TY243213;
typedef struct Keyvaluepair134008 Keyvaluepair134008;
typedef struct Trstnodeseq296009 Trstnodeseq296009;
struct  Tlineinfo163338  {
NI16 line;
NI16 col;
NI32 fileindex;
};
struct  TGenericSeq  {
NI len;
NI reserved;
};
struct  NimStringDesc  {
  TGenericSeq Sup;
NIM_CHAR data[SEQ_DECL_SIZE];
};
struct  Tnode190813  {
Ttype190849* typ;
Tlineinfo163338 info;
NU16 flags;
NU8 kind;
union{
struct {NI64 intval;
} S1;
struct {NF floatval;
} S2;
struct {NimStringDesc* strval;
} S3;
struct {Tsym190843* sym;
} S4;
struct {Tident167021* ident;
} S5;
struct {Tnodeseq190807* sons;
} S6;
} kindU;
NimStringDesc* comment;
};
typedef N_NIMCALL_PTR(void, TY3289) (void* p, NI op);
typedef N_NIMCALL_PTR(void*, TY3294) (void* p);
struct  TNimType  {
NI size;
NU8 kind;
NU8 flags;
TNimType* base;
TNimNode* node;
void* finalizer;
TY3289 marker;
TY3294 deepcopy;
};
struct  TNimObject  {
TNimType* m_type;
};
struct  Tpasscontext241005  {
  TNimObject Sup;
NIM_BOOL fromcache;
};
struct  Intset187056  {
NI counter;
NI max;
Ttrunk187052* head;
Ttrunkseq187054* data;
};
struct  Tlinkedlist130028  {
Tlistentry130022* head;
Tlistentry130022* tail;
NI counter;
};
struct  Tidtable190861  {
NI counter;
Tidpairseq190859* data;
};
typedef N_NIMCALL_PTR(Tnode190813*, TY244072) (Tcontext244023* c, Tnode190813* n);
typedef N_NIMCALL_PTR(Tnode190813*, TY244077) (Tcontext244023* c, Tnode190813* n, NU16 flags);
typedef N_NIMCALL_PTR(Tnode190813*, TY244085) (Tcontext244023* c, Tnode190813* n, NU16 flags);
typedef N_NIMCALL_PTR(Tnode190813*, TY244093) (Tcontext244023* c, Tnode190813* n);
typedef N_NIMCALL_PTR(Tnode190813*, TY244098) (Tcontext244023* c, Tnode190813* n, NU16 flags);
typedef N_NIMCALL_PTR(Tnode190813*, TY244106) (Tcontext244023* c, Tnode190813* n);
typedef N_NIMCALL_PTR(Tnode190813*, TY244111) (Tcontext244023* c, Tnode190813* n, Tnode190813* norig, NU32 filter);
typedef N_NIMCALL_PTR(Ttype190849*, TY244118) (Tcontext244023* c, Tnode190813* n, Ttype190849* prev);
typedef struct {
N_NIMCALL_PTR(Tnode190813*, ClPrc) (Tcontext244023* c, Tidtable190861 pt, Tnode190813* n, void* ClEnv);
void* ClEnv;
} TY244124;
typedef struct {
N_NIMCALL_PTR(Tsym190843*, ClPrc) (Tcontext244023* c, Tsym190843* fn, Tidtable190861 pt, Tlineinfo163338 info, void* ClEnv);
void* ClEnv;
} TY244130;
struct  Tstrtable190817  {
NI counter;
Tsymseq190815* data;
};
typedef N_NIMCALL_PTR(Tsym190843*, TY244146) (Tcontext244023* c, Tsym190843* dc, Ttype190849* t, Tlineinfo163338 info, NU8 op);
struct  Tcontext244023  {
  Tpasscontext241005 Sup;
Tsym190843* module;
Tscope190837* currentscope;
Tscope190837* importtable;
Tscope190837* toplevelscope;
Tproccon244011* p;
Tsymseq190815* friendmodules;
NI instcounter;
Intset187056 ambiguoussymbols;
NI intypeclass;
NI ingenericcontext;
NI inunrolledcontext;
NI incompilescontext;
NI ingenericinst;
Tsymseq190815* converters;
Tsymseq190815* patterns;
Tlinkedlist130028 optionstack;
Tidtable190861 symmapping;
Tlinkedlist130028 libs;
TY244072 semconstexpr;
TY244077 semexpr;
TY244085 semtryexpr;
TY244093 semtryconstexpr;
TY244098 semoperand;
TY244106 semconstboolexpr;
TY244111 semoverloadedcall;
TY244118 semtypenode;
TY244124 seminferredlambda;
TY244130 semgenerateinstance;
Intset187056 includedfiles;
Tstrtable190817 userpragmas;
Tctx243048* evalcontext;
Intset187056 unknownidents;
TY244141* generics;
NI lastgenericidx;
NI hloloopdetector;
NI inparallelstmt;
TY244146 insttypeboundop;
};
struct  Exception  {
  TNimObject Sup;
Exception* parent;
NCSTRING name;
NimStringDesc* message;
NimStringDesc* trace;
};
typedef struct {
N_NIMCALL_PTR(NIM_BOOL, ClPrc) (Exception* e, void* ClEnv);
void* ClEnv;
} TY15809;
struct  TSafePoint  {
TSafePoint* prev;
NI status;
jmp_buf context;
NIM_BOOL hasRaiseAction;
TY15809 raiseAction;
};
struct  TNimNode  {
NU8 kind;
NI offset;
TNimType* typ;
NCSTRING name;
NI len;
TNimNode** sons;
};
struct  Tcell46547  {
NI refcount;
TNimType* typ;
};
struct  Tcellseq46563  {
NI len;
NI cap;
Tcell46547** d;
};
struct  Tcellset46559  {
NI counter;
NI max;
Tpagedesc46555* head;
Tpagedesc46555** data;
};
typedef Tsmallchunk27640* TY28422[512];
typedef Ttrunk27613* Ttrunkbuckets27615[256];
struct  Tintset27617  {
Ttrunkbuckets27615 data;
};
struct  Tmemregion28410  {
NI minlargeobj;
NI maxlargeobj;
TY28422 freesmallchunks;
Tllchunk28404* llmem;
NI currmem;
NI maxmem;
NI freemem;
NI lastsize;
Tbigchunk27642* freechunkslist;
Tintset27617 chunkstarts;
Tavlnode28408* root;
Tavlnode28408* deleted;
Tavlnode28408* last;
Tavlnode28408* freeavlnodes;
};
struct  Tgcstat48414  {
NI stackscans;
NI cyclecollections;
NI maxthreshold;
NI maxstacksize;
NI maxstackcells;
NI cycletablesize;
NI64 maxpause;
};
struct  Tgcheap48416  {
void* stackbottom;
NI cyclethreshold;
Tcellseq46563 zct;
Tcellseq46563 decstack;
Tcellset46559 cycleroots;
Tcellseq46563 tempstack;
NI recgclock;
Tmemregion28410 region;
Tgcstat48414 stat;
};
struct  Tidobj167015  {
  TNimObject Sup;
NI id;
};
struct  Tloc190827  {
NU8 k;
NU8 s;
NU16 flags;
Ttype190849* t;
Ropeobj161009* r;
Ropeobj161009* heaproot;
};
struct  Tsym190843  {
  Tidobj167015 Sup;
NU8 kind;
union{
struct {Ttypeseq190845* typeinstcache;
Tscope190837* typscope;
} S1;
struct {TY190944* procinstcache;
Tsym190843* gcunsafetyreason;
} S2;
struct {TY190944* usedgenerics;
Tstrtable190817 tab;
} S3;
struct {Tsym190843* guard;
} S4;
} kindU;
NU16 magic;
Ttype190849* typ;
Tident167021* name;
Tlineinfo163338 info;
Tsym190843* owner;
NU32 flags;
Tnode190813* ast;
NU32 options;
NI position;
NI offset;
Tloc190827 loc;
Tlib190831* annex;
Tnode190813* constraint;
};
struct  Tscope190837  {
NI depthlevel;
Tstrtable190817 symbols;
Tnodeseq190807* usingsyms;
Tscope190837* parent;
};
struct  Ttabiter198119  {
NI h;
};
struct  Tident167021  {
  Tidobj167015 Sup;
NimStringDesc* s;
Tident167021* next;
NI h;
};
struct  Ttype190849  {
  Tidobj167015 Sup;
NU8 kind;
NU8 callconv;
NU32 flags;
Ttypeseq190845* sons;
Tnode190813* n;
Tsym190843* owner;
Tsym190843* sym;
Tsym190843* destructor;
Tsym190843* deepcopy;
Tsym190843* assignment;
NI64 size;
NI16 align;
NI16 locklevel;
Tloc190827 loc;
};
typedef struct {
N_NIMCALL_PTR(NI, ClPrc) (Tsym190843* x_351527, Tsym190843* y_351529, void* ClEnv);
void* ClEnv;
} TY351525;
typedef N_CLOSURE_PTR(NI, TMP2619) (Tsym190843* x_353264, Tsym190843* y_353266, void* ClEnv);
struct  Tcandidate344209  {
Tcontext244023* c;
NI exactmatches;
NI genericmatches;
NI subtypematches;
NI intconvmatches;
NI convmatches;
NU8 state;
Ttype190849* callee;
Tsym190843* calleesym;
NI calleescope;
Tnode190813* call;
Tidtable190861 bindings;
NIM_BOOL basetypematch;
NU8 fauxmatch;
NIM_BOOL genericconverter;
NIM_BOOL coercedistincts;
NIM_BOOL typedescmatched;
NI inheritancepenalty;
Tsymseq190815* errors;
};
typedef Ttype190849* TY349187[1];
struct TY86545 {
NimStringDesc* Field0;
NI Field1;
};
typedef N_CLOSURE_PTR(Tnode190813*, TMP2656) (Tcontext244023* c, Tidtable190861 pt, Tnode190813* n);
typedef N_CLOSURE_PTR(Tsym190843*, TMP2657) (Tcontext244023* c, Tsym190843* fn, Tidtable190861 pt, Tlineinfo163338 info);
typedef N_CLOSURE_PTR(NI, TMP2669) (Tsym190843* x_351514, Tsym190843* y_351516, void* ClEnv);
typedef N_CLOSURE_PTR(Tsym190843*, TMP3477) (Tcontext244023* c, Tsym190843* fn, Tidtable190861 pt, Tlineinfo163338 info);
struct  Tproccon244011  {
Tsym190843* owner;
Tsym190843* resultsym;
NI nestedloopcounter;
NI nestedblockcounter;
NI intrystmt;
Tproccon244011* next;
NIM_BOOL wasforwarded;
Tnode190813* bracketexpr;
};
typedef NI TY27620[8];
struct  Ttrunk187052  {
Ttrunk187052* next;
NI key;
TY27620 bits;
};
struct  Tlistentry130022  {
  TNimObject Sup;
Tlistentry130022* prev;
Tlistentry130022* next;
};
struct  Tidpair190857  {
Tidobj167015* key;
TNimObject* val;
};
struct  Tctx243048  {
  Tpasscontext241005 Sup;
TY243253* code;
TY164033* debug;
Tnode190813* globals;
Tnode190813* constants;
Ttypeseq190845* types;
Tnode190813* currentexceptiona;
Tnode190813* currentexceptionb;
NI exceptioninstr;
PprocHEX3Aobjecttype243232* prc;
Tsym190843* module;
Tnode190813* callsite;
NU8 mode;
NU8 features;
NIM_BOOL traceactive;
NI loopiterations;
Tlineinfo163338 comesfromheuristic;
TY243272* callbacks;
NimStringDesc* errorflag;
};
struct  Tinstantiationpair244013  {
Tsym190843* genericsym;
Tinstantiation190833* inst;
};
struct  Tpagedesc46555  {
Tpagedesc46555* next;
NI key;
TY27620 bits;
};
struct  Tbasechunk27638  {
NI prevsize;
NI size;
NIM_BOOL used;
};
struct  Tsmallchunk27640  {
  Tbasechunk27638 Sup;
Tsmallchunk27640* next;
Tsmallchunk27640* prev;
Tfreecell27630* freelist;
NI free;
NI acc;
NF data;
};
struct  Tllchunk28404  {
NI size;
NI acc;
Tllchunk28404* next;
};
struct  Tbigchunk27642  {
  Tbasechunk27638 Sup;
Tbigchunk27642* next;
Tbigchunk27642* prev;
NI align;
NF data;
};
struct  Ttrunk27613  {
Ttrunk27613* next;
NI key;
TY27620 bits;
};
typedef Tavlnode28408* TY28414[2];
struct  Tavlnode28408  {
TY28414 link;
NI key;
NI upperbound;
NI level;
};
struct  Ropeobj161009  {
  TNimObject Sup;
Ropeobj161009* left;
Ropeobj161009* right;
NI length;
NimStringDesc* data;
};
struct  Tlib190831  {
  Tlistentry130022 Sup;
NU8 kind;
NIM_BOOL generated;
NIM_BOOL isoverriden;
Ropeobj161009* name;
Tnode190813* path;
};
typedef N_NIMCALL_PTR(NimStringDesc*, Tfindfilehandler297023) (NimStringDesc* filename);
typedef N_NIMCALL_PTR(void, Tmsghandler297021) (NimStringDesc* filename, NI line, NI col, NU8 msgkind, NimStringDesc* arg);
typedef NimStringDesc* TY311042[5];
struct  Table311052  {
Keyvaluepairseq311055* data;
NI counter;
};
struct  Trstgenerator311016  {
  TNimObject Sup;
NU8 target;
Stringtableobj134012* config;
NI splitafter;
TY311034* tocpart;
NIM_BOOL hastoc;
NimStringDesc* theindex;
NU8 options;
Tfindfilehandler297023 findfile;
Tmsghandler297021 msghandler;
NimStringDesc* filename;
TY311042 meta;
NimStringDesc* currentsection;
Table311052 seenindexterms;
};
typedef Ropeobj161009* Tsections340005[26];
struct  Tdocumentor340007  {
  Trstgenerator311016 Sup;
Ropeobj161009* moddesc;
NI id;
Tsections340005 toc;
Tsections340005 section;
NimStringDesc* indexvalfilename;
NimStringDesc* analytics;
Stringtableobj134012* seensymbols;
};
struct TY243239 {
NIM_BOOL Field0;
NU8 Field1;
};
typedef TY243239 TY243236[256];
struct  PprocHEX3Aobjecttype243232  {
TY243233* blocks;
Tsym190843* sym;
TY243236 slots;
NI maxslots;
};
typedef struct {
N_NIMCALL_PTR(void, ClPrc) (Vmargs243042* args, void* ClEnv);
void* ClEnv;
} Vmcallback243044;
struct TY243273 {
NimStringDesc* Field0;
Vmcallback243044 Field1;
};
struct  Tinstantiation190833  {
Tsym190843* sym;
Ttypeseq190845* concretetypes;
TY190933* usedby;
};
struct  Tfreecell27630  {
Tfreecell27630* next;
NI zerofield;
};
struct  Stringtableobj134012  {
  TNimObject Sup;
NI counter;
Keyvaluepairseq134010* data;
NU8 mode;
};
struct  Ttocentry311012  {
Trstnode296011* n;
NimStringDesc* refname;
NimStringDesc* header;
};
struct Keyvaluepair311058 {
NI Field0;
NimStringDesc* Field1;
NI Field2;
};
struct  Tblock243030  {
Tsym190843* label;
TY243213* fixups;
};
struct  Vmargs243042  {
NI ra;
NI rb;
NI rc;
void* slots;
Tnode190813* currentexception;
};
struct Keyvaluepair134008 {
NimStringDesc* Field0;
NimStringDesc* Field1;
};
struct  Trstnode296011  {
NU8 kind;
NimStringDesc* text;
NI level;
Trstnodeseq296009* sons;
};
struct Tsymseq190815 {
  TGenericSeq Sup;
  Tsym190843* data[SEQ_DECL_SIZE];
};
struct Ttypeseq190845 {
  TGenericSeq Sup;
  Ttype190849* data[SEQ_DECL_SIZE];
};
struct Tnodeseq190807 {
  TGenericSeq Sup;
  Tnode190813* data[SEQ_DECL_SIZE];
};
struct Ttrunkseq187054 {
  TGenericSeq Sup;
  Ttrunk187052* data[SEQ_DECL_SIZE];
};
struct Tidpairseq190859 {
  TGenericSeq Sup;
  Tidpair190857 data[SEQ_DECL_SIZE];
};
struct TY244141 {
  TGenericSeq Sup;
  Tinstantiationpair244013 data[SEQ_DECL_SIZE];
};
struct TY190944 {
  TGenericSeq Sup;
  Tinstantiation190833* data[SEQ_DECL_SIZE];
};
struct TY243253 {
  TGenericSeq Sup;
  NU32 data[SEQ_DECL_SIZE];
};
struct TY164033 {
  TGenericSeq Sup;
  Tlineinfo163338 data[SEQ_DECL_SIZE];
};
struct TY243272 {
  TGenericSeq Sup;
  TY243273 data[SEQ_DECL_SIZE];
};
struct TY311034 {
  TGenericSeq Sup;
  Ttocentry311012 data[SEQ_DECL_SIZE];
};
struct Keyvaluepairseq311055 {
  TGenericSeq Sup;
  Keyvaluepair311058 data[SEQ_DECL_SIZE];
};
struct TY243233 {
  TGenericSeq Sup;
  Tblock243030 data[SEQ_DECL_SIZE];
};
struct TY190933 {
  TGenericSeq Sup;
  NI32 data[SEQ_DECL_SIZE];
};
struct Keyvaluepairseq134010 {
  TGenericSeq Sup;
  Keyvaluepair134008 data[SEQ_DECL_SIZE];
};
struct TY243213 {
  TGenericSeq Sup;
  NI data[SEQ_DECL_SIZE];
};
struct Trstnodeseq296009 {
  TGenericSeq Sup;
  Trstnode296011* data[SEQ_DECL_SIZE];
};
N_NIMCALL(NU8, incheckpoint_353640)(Tlineinfo163338 current);
N_NIMCALL(Tnode190813*, findclosestdot_353647)(Tnode190813* n);
static N_INLINE(NI, safelen_191125)(Tnode190813* n);
N_NIMCALL(Tnode190813*, safesemexpr_354062)(Tcontext244023* c, Tnode190813* n);
static N_INLINE(void, pushSafePoint)(TSafePoint* s);
static N_INLINE(void, popSafePoint)(void);
N_NIMCALL(NIM_BOOL, isObj)(TNimType* obj, TNimType* subclass);
static N_INLINE(Exception*, getCurrentException)(void);
static N_INLINE(void, popCurrentException)(void);
static N_INLINE(void, asgnRef)(void** dest, void* src);
static N_INLINE(void, incref_52422)(Tcell46547* c);
static N_INLINE(NIM_BOOL, canbecycleroot_50067)(Tcell46547* c);
static N_INLINE(void, rtladdcycleroot_50823)(Tcell46547* c);
N_NOINLINE(void, incl_47265)(Tcellset46559* s, Tcell46547* cell);
static N_INLINE(Tcell46547*, usrtocell_50046)(void* usr);
static N_INLINE(void, decref_52004)(Tcell46547* c);
static N_INLINE(void, rtladdzct_51604)(Tcell46547* c);
N_NOINLINE(void, addzct_50017)(Tcellseq46563* s, Tcell46547* c);
N_NIMCALL(void, reraiseException)(void);
N_NIMCALL(void, suggestfieldaccess_353428)(Tcontext244023* c, Tnode190813* n, NI* outputs);
N_NIMCALL(Tsym190843*, inittabiter_198124)(Ttabiter198119* ti, Tstrtable190817 tab);
static N_INLINE(NIM_BOOL, filtersym_351015)(Tsym190843* s);
N_NIMCALL(void, suggestwriteln_164066)(NimStringDesc* s);
N_NIMCALL(NimStringDesc*, symtostr_351005)(Tsym190843* s, NIM_BOOL islocal, NimStringDesc* section);
N_NIMCALL(NimStringDesc*, symtostr_350816)(Tsym190843* s, NIM_BOOL islocal, NimStringDesc* section, Tlineinfo163338 li);
N_NIMCALL(NimStringDesc*, copyString)(NimStringDesc* src);
N_NIMCALL(NimStringDesc*, addChar)(NimStringDesc* s, NIM_CHAR c);
N_NIMCALL(NimStringDesc*, rendertree_212058)(Tnode190813* n, NU8 renderflags);
static N_INLINE(void, appendString)(NimStringDesc* dest, NimStringDesc* src);
N_NIMCALL(NimStringDesc*, resizeString)(NimStringDesc* dest, NI addlen);
N_NIMCALL(NimStringDesc*, tofullpath_164273)(NI32 fileidx);
static N_INLINE(NI, tolinenumber_164439)(Tlineinfo163338 info);
N_NIMCALL(NimStringDesc*, nimIntToStr)(NI x);
static N_INLINE(NI, tocolumn_164449)(Tlineinfo163338 info);
N_NIMCALL(NimStringDesc*, reprEnum)(NI e_82729, TNimType* typ);
N_NIMCALL(NimStringDesc*, typetostring_220032)(Ttype190849* typ, NU8 prefer);
N_NIMCALL(NimStringDesc*, nsuEscape)(NimStringDesc* s, NimStringDesc* prefix, NimStringDesc* suffix);
N_NIMCALL(NimStringDesc*, extractdoccomment_340609)(Tsym190843* s, Tdocumentor340007* d);
N_NIMCALL(Tsym190843*, nextiter_198132)(Ttabiter198119* ti, Tstrtable190817 tab);
N_NIMCALL(void, suggesteverything_353355)(Tcontext244023* c, Tnode190813* n, NI* outputs);
N_NIMCALL(void, suggestsymlist_351267)(Tcontext244023* c, Tnode190813* list, NI* outputs);
N_NIMCALL(NI, sonslen_193403)(Tnode190813* n);
N_NIMCALL(void, suggestfield_351232)(Tcontext244023* c, Tsym190843* s, NI* outputs);
static N_INLINE(NIM_BOOL, fieldvisible_351059)(Tcontext244023* c, Tsym190843* f);
N_NIMCALL(Tsym190843*, getmodule_198243)(Tsym190843* s);
N_NIMCALL(void, suggestoperations_353035)(Tcontext244023* c, Tnode190813* n, Ttype190849* typ, NI* outputs);
N_NIMCALL(void*, newSeq)(TNimType* typ, NI len);
N_NIMCALL(TGenericSeq*, incrSeq)(TGenericSeq* seq, NI elemsize);
static N_INLINE(void, asgnRefNoCycle)(void** dest, void* src);
N_NIMCALL(void, genericSeqAssign)(void* dest, void* src_81404, TNimType* mt);
N_NIMCALL(void, sort_351518)(Tsym190843** a, NI aLen0, TY351525 cmp, NU8 order);
N_NIMCALL(NI, HEX3Aanonymous_353257)(Tsym190843* a_353208, Tsym190843* b_353210);
N_NIMCALL(NI, cmp_4717)(NimStringDesc* x, NimStringDesc* y);
static N_INLINE(NIM_BOOL, filtersymnoopr_351031)(Tsym190843* s);
N_NIMCALL(NIM_BOOL, iskeyword_212100)(Tident167021* i);
static N_INLINE(NIM_BOOL, typefits_352941)(Tcontext244023* c, Tsym190843* s, Ttype190849* firstarg);
N_NIMCALL(NI, sonslen_193351)(Ttype190849* n);
N_NIMCALL(Ttype190849*, skiptypes_194167)(Ttype190849* t, NU64 kinds);
N_NIMCALL(Ttype190849*, elemtype_220522)(Ttype190849* t);
N_NIMCALL(NIM_BOOL, argtypematches_350522)(Tcontext244023* c, Ttype190849* f, Ttype190849* a);
N_NIMCALL(void, initcandidate_344276)(Tcontext244023* ctx, Tcandidate344209* c, Ttype190849* callee);
static N_INLINE(void, initcandidateaux_344264)(Tcontext244023* ctx, Tcandidate344209* c, Ttype190849* callee);
N_NIMCALL(void, unsureAsgnRef)(void** dest, void* src);
N_NIMCALL(void, initidtable_194057)(Tidtable190861* x);
N_NIMCALL(Tnode190813*, paramtypesmatch_349556)(Tcandidate344209* m, Ttype190849* f, Ttype190849* a, Tnode190813* arg, Tnode190813* argorig);
N_NIMCALL(Tnode190813*, paramtypesmatchaux_349103)(Tcandidate344209* m, Ttype190849* f, Ttype190849* argtype_349108, Tnode190813* argsemantized, Tnode190813* argorig);
N_NIMCALL(void, assigntype_193452)(Ttype190849* dest, Ttype190849* src);
N_NIMCALL(Tnode190813*, newnodeit_192807)(NU8 kind, Tlineinfo163338 info, Ttype190849* typ);
N_NIMCALL(Ttype190849*, maketypefromexpr_244726)(Tcontext244023* c, Tnode190813* n);
N_NIMCALL(Ttype190849*, newtypes_244218)(NU8 kind, Tcontext244023* c);
static N_INLINE(void, nimGCunrefNoCycle)(void* p);
N_NIMCALL(void*, newSeqRC1)(TNimType* typ, NI len);
N_NIMCALL(NU8, typerel_345064)(Tcandidate344209* c, Ttype190849* f, Ttype190849* aorig, NIM_BOOL dobind);
static N_INLINE(void, put_344289)(Tidtable190861* t, Ttype190849* key, Ttype190849* val);
N_NIMCALL(void, idtableput_198196)(Tidtable190861* t, Tidobj167015* key, TNimObject* val);
static N_INLINE(Ttype190849*, skipintlit_238698)(Ttype190849* t);
N_NIMCALL(Ttype190849*, getsystype_238030)(NU8 kind);
N_NIMCALL(Ttype190849*, maybeskipdistinct_346517)(Ttype190849* t, Tsym190843* callee);
N_NIMCALL(NIM_BOOL, shouldskipdistinct_346425)(Tnode190813* rules, Tident167021* callident);
static N_INLINE(NI, len_191097)(Tnode190813* n);
N_NIMCALL(Tident167021*, considerquotedident_249010)(Tnode190813* n);
N_NIMCALL(Ttype190849*, base_220039)(Ttype190849* t);
N_NIMCALL(Ttype190849*, lastson_193442)(Ttype190849* n);
static N_INLINE(NIM_BOOL, sameenumtypes_225855)(Ttype190849* a, Ttype190849* b);
static N_INLINE(Tnode190813*, HEX5BHEX5D_191244)(Tnode190813* n, NI i);
N_NIMCALL(Tnode190813*, tryresolvingstaticexpr_346562)(Tcandidate344209* c, Tnode190813* n);
N_NIMCALL(Tnode190813*, replacetypesinbody_267617)(Tcontext244023* p, Tidtable190861 pt, Tnode190813* n);
N_NOINLINE(NU8, typerangerel_346234)(Ttype190849* f, Ttype190849* a);
N_NIMCALL(NI64, firstord_220004)(Ttype190849* t);
N_NIMCALL(NI64, lastord_220010)(Ttype190849* t);
N_NIMCALL(NIM_BOOL, isconvertibletorange_345238)(Ttype190849* f, Ttype190849* a);
N_NIMCALL(NU8, handlerange_345122)(Ttype190849* f, Ttype190849* a, NU8 min, NU8 max);
static N_INLINE(NIM_BOOL, isintlit_220327)(Ttype190849* t);
N_NIMCALL(NU8, handlefloatrange_345293)(Ttype190849* f, Ttype190849* a);
static N_INLINE(NIM_BOOL, isfloatlit_220367)(Ttype190849* t);
N_NIMCALL(TNimObject*, idtableget_198182)(Tidtable190861 t, Tidobj167015* key);
N_NIMCALL(Ttype190849*, newtypewithsons_244807)(Tcontext244023* c, NU8 kind, Ttypeseq190845* sons);
N_NIMCALL(Tnode190813*, newintnode_191607)(NU8 kind, NI64 intval);
N_NIMCALL(NI64, lengthord_220016)(Ttype190849* t);
static N_INLINE(NU8, allowsnil_345833)(Ttype190849* f);
N_NIMCALL(NIM_BOOL, isordinaltype_220093)(Ttype190849* t);
N_NIMCALL(void, internalerror_165218)(NimStringDesc* errmsg);
N_NIMCALL(NU8, recordrel_345668)(Tcandidate344209* c, Ttype190849* f, Ttype190849* a);
N_NIMCALL(NIM_BOOL, sametype_225092)(Ttype190849* a, Ttype190849* b, NU8 flags);
N_NIMCALL(NU8, minrel_345648)(NU8 a, NU8 b);
N_NIMCALL(void, internalerror_165199)(Tlineinfo163338 info, NimStringDesc* errmsg);
N_NIMCALL(NIM_BOOL, sameobjecttypes_225785)(Ttype190849* a, Ttype190849* b);
N_NIMCALL(NI, isobjectsubtype_345352)(Ttype190849* a, Ttype190849* f);
static N_INLINE(NIM_BOOL, samedistincttypes_225844)(Ttype190849* a, Ttype190849* b);
N_NIMCALL(NI, len_193377)(Ttype190849* n);
N_NIMCALL(NU8, proctyperel_345936)(Tcandidate344209* c, Ttype190849* f, Ttype190849* a);
N_NIMCALL(NU8, procparamtyperel_345891)(Tcandidate344209* c, Ttype190849* f_345895, Ttype190849* a);
N_NIMCALL(NIM_BOOL, ismetatype_191821)(Ttype190849* t);
N_NIMCALL(Ttype190849*, generatetypeinstance_267631)(Tcontext244023* p, Tidtable190861 pt, Tlineinfo163338 info, Ttype190849* t);
static N_INLINE(NIM_BOOL, inconsistentvartypes_345853)(Ttype190849* f, Ttype190849* a);
N_NIMCALL(NIM_BOOL, compatibleeffects_229489)(Ttype190849* formal, Ttype190849* actual);
N_NIMCALL(Ttype190849*, skipgenericalias_226119)(Ttype190849* t);
N_NIMCALL(Ttype190849*, concretetype_345074)(Tcandidate344209* c, Ttype190849* t);
N_NIMCALL(Ttype190849*, newtype_193140)(NU8 kind, Tsym190843* owner);
N_NIMCALL(void, addsonskipintlit_238731)(Ttype190849* father, Ttype190849* son);
N_NIMCALL(NimStringDesc*, rawNewString)(NI space);
N_NIMCALL(NU8, matchusertypeclass_346249)(Tcontext244023* c, Tcandidate344209* m, Ttype190849* ff, Ttype190849* a);
N_NIMCALL(Tscope190837*, openscope_249091)(Tcontext244023* c);
N_NIMCALL(Tsym190843*, newsym_191655)(NU8 symkind, Tident167021* name, Tsym190843* owner, Tlineinfo163338 info);
N_NIMCALL(Ttype190849*, maketypedesc_244681)(Tcontext244023* c, Ttype190849* typ);
N_NIMCALL(void, adddecl_249607)(Tcontext244023* c, Tsym190843* sym);
N_NIMCALL(Ttype190849*, makevartype_244642)(Tcontext244023* c, Ttype190849* basetype);
N_NIMCALL(NimStringDesc*, HEX24_165306)(TY86545 x);
N_NIMCALL(Tnode190813*, copytree_195028)(Tnode190813* src);
N_NIMCALL(void, closescope_249111)(Tcontext244023* c);
N_NIMCALL(NIM_BOOL, HEX3DHEX3D_229739)(Ttypeseq190845* x, Ttypeseq190845* y);
N_NIMCALL(NIM_BOOL, exprstructuralequivalent_219149)(Tnode190813* a, Tnode190813* b);
N_NIMCALL(void, localerror_165155)(Tlineinfo163338 info, NU16 msg, NimStringDesc* arg);
N_NIMCALL(void, incmatches_349036)(Tcandidate344209* m, NU8 r, NI convmatch);
N_NIMCALL(NIM_BOOL, isinlineiterator_348999)(Ttype190849* t);
N_NIMCALL(Tnode190813*, implicitconv_348761)(NU8 kind, Ttype190849* f, Tnode190813* arg, Tcandidate344209* m, Tcontext244023* c);
N_NIMCALL(Tnode190813*, newnodei_192351)(NU8 kind, Tlineinfo163338 info);
N_NIMCALL(NIM_BOOL, containsgenerictype_229310)(Ttype190849* t);
N_NIMCALL(Ttype190849*, getinstantiatedtype_348724)(Tcontext244023* c, Tnode190813* arg, Tcandidate344209* m, Ttype190849* f);
N_NIMCALL(Ttype190849*, errortype_245150)(Tcontext244023* c);
N_NIMCALL(void, addson_192819)(Tnode190813* father, Tnode190813* son);
N_NIMCALL(Tnode190813*, newsymnode_192338)(Tsym190843* sym, Tlineinfo163338 info);
N_NIMCALL(NIM_BOOL, isemptycontainer_229978)(Ttype190849* t);
N_NIMCALL(Tnode190813*, userconvmatch_348796)(Tcontext244023* c, Tcandidate344209* m, Ttype190849* f, Ttype190849* a, Tnode190813* arg);
N_NIMCALL(void, markused_344251)(Tlineinfo163338 info, Tsym190843* s);
N_NIMCALL(void, message_165188)(Tlineinfo163338 info, NU16 msg, NimStringDesc* arg);
static N_INLINE(void, suggestsym_353960)(Tlineinfo163338 info, Tsym190843* s);
N_NIMCALL(void, findusages_353892)(Tlineinfo163338 info, Tsym190843* s);
N_NIMCALL(NIM_BOOL, istracked_353796)(Tlineinfo163338 current, NI tokenlen);
N_NIMCALL(NIM_BOOL, HEX3DHEX3D_164789)(Tlineinfo163338 a, Tlineinfo163338 b);
N_NIMCALL(void, finddefinition_353923)(Tlineinfo163338 info, Tsym190843* s);
N_NIMCALL(void, suggestquit_164122)(void);
N_NIMCALL(Tnode190813*, newsymnode_192325)(Tsym190843* sym);
N_NIMCALL(Tnode190813*, localconvmatch_348902)(Tcontext244023* c, Tcandidate344209* m, Ttype190849* f, Ttype190849* a, Tnode190813* arg);
N_NIMCALL(void, add_191164)(Tnode190813* father, Tnode190813* son);
N_NIMCALL(void, copycandidate_344490)(Tcandidate344209* a, Tcandidate344209* b);
N_NIMCALL(void, copyidtable_192091)(Tidtable190861* dest, Tidtable190861 src);
N_NIMCALL(void, genericAssign)(void* dest, void* src, TNimType* mt);
N_NIMCALL(NI, cmpcandidates_344824)(Tcandidate344209* a, Tcandidate344209* b);
N_NIMCALL(NI, complexdisambiguation_344619)(Ttype190849* a, Ttype190849* b);
N_NIMCALL(NI, sumgeneric_344502)(Ttype190849* t_344504);
N_NIMCALL(void, suggestobject_351318)(Tcontext244023* c, Tnode190813* n, NI* outputs);
N_NIMCALL(Tnode190813*, lastson_193431)(Tnode190813* n);
N_NIMCALL(Tnode190813*, findclosestcall_353721)(Tnode190813* n);
N_NIMCALL(Tnode190813*, copynode_194640)(Tnode190813* src);
N_NIMCALL(void, suggestcall_351444)(Tcontext244023* c, Tnode190813* n_351447, Tnode190813* norig, NI* outputs);
N_NIMCALL(NI, HEX3Aanonymous_351507)(Tsym190843* a_351458, Tsym190843* b_351460);
N_NIMCALL(NIM_BOOL, namefits_351392)(Tcontext244023* c, Tsym190843* s, Tnode190813* n);
N_NIMCALL(NIM_BOOL, argsfit_351421)(Tcontext244023* c, Tsym190843* candidate, Tnode190813* n, Tnode190813* norig);
N_NIMCALL(void, initcandidate_344301)(Tcontext244023* ctx, Tcandidate344209* c, Tsym190843* callee, Tnode190813* binding, NI calleescope);
N_NIMCALL(Tsym190843*, originatingmodule_195737)(Tsym190843* s);
N_NIMCALL(Tsym190843*, skipgenericowner_195696)(Tsym190843* s);
N_NIMCALL(void, partialmatch_350434)(Tcontext244023* c, Tnode190813* n, Tnode190813* norig, Tcandidate344209* m);
N_NIMCALL(void, initintset_187927)(Intset187056* Result);
N_NOINLINE(void, chckNil)(void* p);
N_NIMCALL(void, matchesaux_350018)(Tcontext244023* c, Tnode190813* n, Tnode190813* norig, Tcandidate344209* m, Intset187056* marker);
N_NIMCALL(void, preparenamedparam_349913)(Tnode190813* a);
N_NIMCALL(Tnode190813*, newidentnode_192313)(Tident167021* ident, Tlineinfo163338 info);
N_NIMCALL(Tsym190843*, getsymfromlist_198228)(Tnode190813* list, Tident167021* ident, NI start);
N_NIMCALL(NIM_BOOL, containsorincl_187898)(Intset187056* s, NI key);
N_NIMCALL(Tnode190813*, prepareoperand_349852)(Tcontext244023* c, Ttype190849* formal, Tnode190813* a);
N_NIMCALL(NIM_BOOL, matchnodekinds_269284)(Tnode190813* p, Tnode190813* n);
N_NIMCALL(NIM_BOOL, islvalue_269263)(Tnode190813* n);
N_NIMCALL(Ttype190849*, arrayconstr_349936)(Tcontext244023* c, Tnode190813* n);
N_NIMCALL(void, rawaddson_194478)(Ttype190849* father, Ttype190849* son);
N_NIMCALL(Ttype190849*, makerangetype_245182)(Tcontext244023* c, NI64 first, NI64 last, Tlineinfo163338 info, Ttype190849* inttype);
N_NIMCALL(void, setson_349829)(Tnode190813* father, NI at, Tnode190813* son);
N_NIMCALL(TGenericSeq*, setLengthSeq)(TGenericSeq* seq, NI elemsize, NI newlen);
N_NIMCALL(Tnode190813*, prepareoperand_349893)(Tcontext244023* c, Tnode190813* a);
N_NIMCALL(void, incrindextype_349959)(Ttype190849* t);
N_NIMCALL(Ttype190849*, arrayconstr_349948)(Tcontext244023* c, Tlineinfo163338 info);
N_NIMCALL(NimStringDesc*, argtypetostring_344916)(Tnode190813* arg, NU8 prefer);
N_NIMCALL(void, suggestexpr_354070)(Tcontext244023* c, Tnode190813* node);
STRING_LITERAL(TMP2615, "\"", 1);
STRING_LITERAL(TMP2616, "sug", 3);
STRING_LITERAL(TMP2640, "forward type in typeRel()", 25);
STRING_LITERAL(TMP2641, "recordRel", 9);
STRING_LITERAL(TMP2644, "wrong instantiated type!", 24);
STRING_LITERAL(TMP2645, "cannot resolve type: ", 21);
STRING_LITERAL(TMP2649, "sigmatch.nim", 12);
NIM_CONST TY86545 TMP2648 = {((NimStringDesc*) &TMP2649),
((NI) 522)}
;
NIM_CONST TY86545 TMP2651 = {((NimStringDesc*) &TMP2649),
((NI) 1000)}
;
STRING_LITERAL(TMP2652, "", 0);
STRING_LITERAL(TMP2653, " unknown type kind ", 19);
STRING_LITERAL(TMP2654, "getInstantiatedType", 19);
STRING_LITERAL(TMP2655, "implicitConv", 12);
STRING_LITERAL(TMP2658, "use", 3);
STRING_LITERAL(TMP2659, "def", 3);
STRING_LITERAL(TMP2666, "x.state is not csMatch", 22);
STRING_LITERAL(TMP2667, "expression ", 11);
STRING_LITERAL(TMP2668, " has type ", 10);
NIM_CONST TY86545 TMP2672 = {((NimStringDesc*) &TMP2649),
((NI) 119)}
;
STRING_LITERAL(TMP2674, "matches", 7);
STRING_LITERAL(TMP2675, "con", 3);
STRING_LITERAL(TMP3003, ": ", 2);
STRING_LITERAL(TMP3004, " | ", 3);
STRING_LITERAL(TMP3005, ", ", 2);
STRING_LITERAL(TMP3476, "cannot instantiate \'deepCopy\'", 29);
Tsym190843* usagesym_353890;
Tlineinfo163338 lastlineinfo_353891;
extern Tlineinfo163338 gtrackpos_164500;
extern NU8 gidecmd_154115;
extern TSafePoint* exchandler_17243;
extern TNimType NTI163344; /* ERecoverableError */
extern Exception* currexception_17245;
extern Tnode190813* emptynode_191807;
extern Tgcheap48416 gch_48444;
extern NU32 gglobaloptions_154128;
extern TNimType NTI190441; /* TSymKind */
extern TNimType NTI190815; /* TSymSeq */
extern TNimType NTI190845; /* TTypeSeq */
extern TNimType NTI190260; /* TTypeKind */
TNimType NTI344209; /* TCandidate */
extern TNimType NTI244021; /* PContext */
extern TNimType NTI108; /* int */
TNimType NTI344205; /* TCandidateState */
extern TNimType NTI190809; /* PType */
extern TNimType NTI190811; /* PSym */
extern TNimType NTI190805; /* PNode */
extern TNimType NTI190861; /* TIdTable */
extern TNimType NTI138; /* bool */

N_NIMCALL(NU8, incheckpoint_353640)(Tlineinfo163338 current) {
	NU8 result;
{	result = 0;
	{
		if (!(current.fileindex == gtrackpos_164500.fileindex)) goto LA3;
		{
			NIM_BOOL LOC7;
			LOC7 = 0;
			LOC7 = (current.line == gtrackpos_164500.line);
			if (!(LOC7)) goto LA8;
			LOC7 = (((NI16)(current.col - gtrackpos_164500.col) > 0? ((NI16)(current.col - gtrackpos_164500.col)) : -((NI16)(current.col - gtrackpos_164500.col))) < ((NI16) 4));
			LA8: ;
			if (!LOC7) goto LA9;
			result = ((NU8) 2);
			goto BeforeRet;
		}
		LA9: ;
		{
			if (!(gtrackpos_164500.line <= current.line)) goto LA13;
			result = ((NU8) 1);
			goto BeforeRet;
		}
		LA13: ;
	}
	LA3: ;
	}BeforeRet: ;
	return result;
}

static N_INLINE(NI, safelen_191125)(Tnode190813* n) {
	NI result;
	result = 0;
	{
		NIM_BOOL LOC3;
		LOC3 = 0;
		LOC3 = ((*n).kind >= ((NU8) 0) && (*n).kind <= ((NU8) 23));
		if (LOC3) goto LA4;
		LOC3 = (*n).kindU.S6.sons == 0;
		LA4: ;
		if (!LOC3) goto LA5;
		result = ((NI) 0);
	}
	goto LA1;
	LA5: ;
	{
		result = ((*n).kindU.S6.sons ? (*n).kindU.S6.sons->Sup.len : 0);
	}
	LA1: ;
	return result;
}

N_NIMCALL(Tnode190813*, findclosestdot_353647)(Tnode190813* n) {
	Tnode190813* result;
{	result = 0;
	{
		NIM_BOOL LOC3;
		NU8 LOC5;
		LOC3 = 0;
		LOC3 = ((*n).kind == ((NU8) 45));
		if (!(LOC3)) goto LA4;
		LOC5 = 0;
		LOC5 = incheckpoint_353640((*n).info);
		LOC3 = (LOC5 == ((NU8) 2));
		LA4: ;
		if (!LOC3) goto LA6;
		result = n;
	}
	goto LA1;
	LA6: ;
	{
		{
			NI i_353687;
			NI HEX3Atmp_353702;
			NI LOC10;
			NI res_353705;
			i_353687 = 0;
			HEX3Atmp_353702 = 0;
			LOC10 = 0;
			LOC10 = safelen_191125(n);
			HEX3Atmp_353702 = (LOC10 - 1);
			res_353705 = ((NI) 0);
			{
				while (1) {
					if (!(res_353705 <= HEX3Atmp_353702)) goto LA12;
					i_353687 = res_353705;
					result = findclosestdot_353647((*n).kindU.S6.sons->data[i_353687]);
					{
						if (!!((result == NIM_NIL))) goto LA15;
						goto BeforeRet;
					}
					LA15: ;
					res_353705 += ((NI) 1);
				} LA12: ;
			}
		}
	}
	LA1: ;
	}BeforeRet: ;
	return result;
}

static N_INLINE(void, pushSafePoint)(TSafePoint* s) {
	(*s).hasRaiseAction = NIM_FALSE;
	(*s).prev = exchandler_17243;
	exchandler_17243 = s;
}

static N_INLINE(void, popSafePoint)(void) {
	exchandler_17243 = (*exchandler_17243).prev;
}

static N_INLINE(Exception*, getCurrentException)(void) {
	Exception* result;
	result = 0;
	result = currexception_17245;
	return result;
}

static N_INLINE(NIM_BOOL, canbecycleroot_50067)(Tcell46547* c) {
	NIM_BOOL result;
	result = 0;
	result = !((((*(*c).typ).flags &(1<<((((NU8) 1))&7)))!=0));
	return result;
}

static N_INLINE(void, rtladdcycleroot_50823)(Tcell46547* c) {
	{
		if (!!((((NI) ((NI)((*c).refcount & ((NI) 3)))) == ((NI) 3)))) goto LA3;
		(*c).refcount = (NI)((NI)((*c).refcount & ((NI) -4)) | ((NI) 3));
		incl_47265((&gch_48444.cycleroots), c);
	}
	LA3: ;
}

static N_INLINE(void, incref_52422)(Tcell46547* c) {
	(*c).refcount = (NI)((NU64)((*c).refcount) + (NU64)(((NI) 8)));
	{
		NIM_BOOL LOC3;
		LOC3 = 0;
		LOC3 = canbecycleroot_50067(c);
		if (!LOC3) goto LA4;
		rtladdcycleroot_50823(c);
	}
	LA4: ;
}

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

static N_INLINE(void, rtladdzct_51604)(Tcell46547* c) {
	addzct_50017((&gch_48444.zct), c);
}

static N_INLINE(void, decref_52004)(Tcell46547* c) {
	{
		(*c).refcount -= ((NI) 8);
		if (!((NU64)((*c).refcount) < (NU64)(((NI) 8)))) goto LA3;
		rtladdzct_51604(c);
	}
	goto LA1;
	LA3: ;
	{
		NIM_BOOL LOC6;
		LOC6 = 0;
		LOC6 = canbecycleroot_50067(c);
		if (!LOC6) goto LA7;
		rtladdcycleroot_50823(c);
	}
	goto LA1;
	LA7: ;
	LA1: ;
}

static N_INLINE(void, asgnRef)(void** dest, void* src) {
	{
		Tcell46547* LOC5;
		if (!!((src == NIM_NIL))) goto LA3;
		LOC5 = 0;
		LOC5 = usrtocell_50046(src);
		incref_52422(LOC5);
	}
	LA3: ;
	{
		Tcell46547* LOC10;
		if (!!(((*dest) == NIM_NIL))) goto LA8;
		LOC10 = 0;
		LOC10 = usrtocell_50046((*dest));
		decref_52004(LOC10);
	}
	LA8: ;
	(*dest) = src;
}

static N_INLINE(void, popCurrentException)(void) {
	asgnRef((void**) (&currexception_17245), (*currexception_17245).parent);
}

N_NIMCALL(Tnode190813*, safesemexpr_354062)(Tcontext244023* c, Tnode190813* n) {
	Tnode190813* volatile result;
	TSafePoint TMP1960;
	result = 0;
	pushSafePoint(&TMP1960);
	TMP1960.status = _setjmp(TMP1960.context);
	if (TMP1960.status == 0) {
		result = (*c).semexpr(c, n, 0);
		popSafePoint();
	}
	else {
		popSafePoint();
		if (isObj(getCurrentException()->Sup.m_type, (&NTI163344))) {
			TMP1960.status = 0;
			result = emptynode_191807;
			popCurrentException();
		}
	}
	if (TMP1960.status != 0) reraiseException();
	return result;
}

static N_INLINE(NIM_BOOL, filtersym_351015)(Tsym190843* s) {
	NIM_BOOL result;
	result = 0;
	result = !(((*s).kind == ((NU8) 6)));
	return result;
}

static N_INLINE(void, appendString)(NimStringDesc* dest, NimStringDesc* src) {
	memcpy(((NCSTRING) ((&(*dest).data[((*dest).Sup.len)- 0]))), ((NCSTRING) ((*src).data)), (NI)((*src).Sup.len + ((NI) 1)));
	(*dest).Sup.len += (*src).Sup.len;
}

static N_INLINE(NI, tolinenumber_164439)(Tlineinfo163338 info) {
	NI result;
	result = 0;
	result = ((NI) (info.line));
	return result;
}

static N_INLINE(NI, tocolumn_164449)(Tlineinfo163338 info) {
	NI result;
	result = 0;
	result = ((NI) (info.col));
	return result;
}

N_NIMCALL(NimStringDesc*, symtostr_350816)(Tsym190843* s, NIM_BOOL islocal, NimStringDesc* section, Tlineinfo163338 li) {
	NimStringDesc* result;
	result = 0;
	result = copyString(section);
	result = addChar(result, 9);
	{
		NimStringDesc* LOC11;
		NI LOC12;
		NimStringDesc* LOC13;
		NI LOC14;
		NimStringDesc* LOC15;
		if (!((gglobaloptions_154128 &(1<<((((NU8) 29))&31)))!=0)) goto LA3;
		{
			NimStringDesc* LOC9;
			if (!((520192 &(1<<(((*s).kind)&31)))!=0)) goto LA7;
			LOC9 = 0;
			LOC9 = rendertree_212058((*s).ast, 30);
			result = resizeString(result, LOC9->Sup.len + 0);
appendString(result, LOC9);
		}
		goto LA5;
		LA7: ;
		{
			result = resizeString(result, (*(*s).name).s->Sup.len + 0);
appendString(result, (*(*s).name).s);
		}
		LA5: ;
		result = addChar(result, 9);
		LOC11 = 0;
		LOC11 = tofullpath_164273(li.fileindex);
		result = resizeString(result, LOC11->Sup.len + 0);
appendString(result, LOC11);
		result = addChar(result, 9);
		LOC12 = 0;
		LOC12 = tolinenumber_164439(li);
		LOC13 = 0;
		LOC13 = nimIntToStr(LOC12);
		result = resizeString(result, LOC13->Sup.len + 0);
appendString(result, LOC13);
		result = addChar(result, 9);
		LOC14 = 0;
		LOC14 = tocolumn_164449(li);
		LOC15 = 0;
		LOC15 = nimIntToStr(LOC14);
		result = resizeString(result, LOC15->Sup.len + 0);
appendString(result, LOC15);
	}
	goto LA1;
	LA3: ;
	{
		NimStringDesc* LOC34;
		NI LOC35;
		NimStringDesc* LOC36;
		NI LOC37;
		NimStringDesc* LOC38;
		NimStringDesc* LOC39;
		NimStringDesc* LOC40;
		result = resizeString(result, reprEnum((*s).kind, (&NTI190441))->Sup.len + 0);
appendString(result, reprEnum((*s).kind, (&NTI190441)));
		result = addChar(result, 9);
		{
			NIM_BOOL LOC19;
			Tsym190843* ow;
			LOC19 = 0;
			LOC19 = !(islocal);
			if (!(LOC19)) goto LA20;
			LOC19 = !(((*s).kind == ((NU8) 6)));
			LA20: ;
			if (!LOC19) goto LA21;
			ow = (*s).owner;
			{
				NIM_BOOL LOC25;
				Tsym190843* ow2;
				LOC25 = 0;
				LOC25 = !(((*ow).kind == ((NU8) 6)));
				if (!(LOC25)) goto LA26;
				LOC25 = !(((*ow).owner == NIM_NIL));
				LA26: ;
				if (!LOC25) goto LA27;
				ow2 = (*ow).owner;
				result = resizeString(result, (*(*ow2).name).s->Sup.len + 0);
appendString(result, (*(*ow2).name).s);
				result = addChar(result, 46);
			}
			LA27: ;
			result = resizeString(result, (*(*ow).name).s->Sup.len + 0);
appendString(result, (*(*ow).name).s);
			result = addChar(result, 46);
		}
		LA21: ;
		result = resizeString(result, (*(*s).name).s->Sup.len + 0);
appendString(result, (*(*s).name).s);
		result = addChar(result, 9);
		{
			NimStringDesc* LOC33;
			if (!!(((*s).typ == NIM_NIL))) goto LA31;
			LOC33 = 0;
			LOC33 = typetostring_220032((*s).typ, ((NU8) 0));
			result = resizeString(result, LOC33->Sup.len + 0);
appendString(result, LOC33);
		}
		LA31: ;
		result = addChar(result, 9);
		LOC34 = 0;
		LOC34 = tofullpath_164273(li.fileindex);
		result = resizeString(result, LOC34->Sup.len + 0);
appendString(result, LOC34);
		result = addChar(result, 9);
		LOC35 = 0;
		LOC35 = tolinenumber_164439(li);
		LOC36 = 0;
		LOC36 = nimIntToStr(LOC35);
		result = resizeString(result, LOC36->Sup.len + 0);
appendString(result, LOC36);
		result = addChar(result, 9);
		LOC37 = 0;
		LOC37 = tocolumn_164449(li);
		LOC38 = 0;
		LOC38 = nimIntToStr(LOC37);
		result = resizeString(result, LOC38->Sup.len + 0);
appendString(result, LOC38);
		result = addChar(result, 9);
		LOC39 = 0;
		LOC39 = extractdoccomment_340609(s, NIM_NIL);
		LOC40 = 0;
		LOC40 = nsuEscape(LOC39, ((NimStringDesc*) &TMP2615), ((NimStringDesc*) &TMP2615));
		result = resizeString(result, LOC40->Sup.len + 0);
appendString(result, LOC40);
	}
	LA1: ;
	return result;
}

N_NIMCALL(NimStringDesc*, symtostr_351005)(Tsym190843* s, NIM_BOOL islocal, NimStringDesc* section) {
	NimStringDesc* result;
	result = 0;
	result = symtostr_350816(s, islocal, section, (*s).info);
	return result;
}

N_NIMCALL(void, suggesteverything_353355)(Tcontext244023* c, Tnode190813* n, NI* outputs) {
	NIM_BOOL islocal;
	islocal = NIM_TRUE;
	{
		Tscope190837* scope_353362;
		Tscope190837* HEX3Atmp_353403;
		Tscope190837* current_353406;
		scope_353362 = 0;
		HEX3Atmp_353403 = 0;
		HEX3Atmp_353403 = (*c).currentscope;
		current_353406 = HEX3Atmp_353403;
		{
			while (1) {
				if (!!((current_353406 == NIM_NIL))) goto LA3;
				scope_353362 = current_353406;
				{
					if (!(scope_353362 == (*c).toplevelscope)) goto LA6;
					islocal = NIM_FALSE;
				}
				LA6: ;
				{
					Tsym190843* it_353374;
					Tstrtable190817 HEX3Atmp_353397;
					Ttabiter198119 it_353400;
					Tsym190843* s_353402;
					it_353374 = 0;
					memset((void*)(&HEX3Atmp_353397), 0, sizeof(HEX3Atmp_353397));
					HEX3Atmp_353397.counter = (*scope_353362).symbols.counter;
					HEX3Atmp_353397.data = (*scope_353362).symbols.data;
					memset((void*)(&it_353400), 0, sizeof(it_353400));
					s_353402 = inittabiter_198124((&it_353400), HEX3Atmp_353397);
					{
						while (1) {
							if (!!((s_353402 == NIM_NIL))) goto LA10;
							it_353374 = s_353402;
							{
								NIM_BOOL LOC13;
								NimStringDesc* LOC16;
								LOC13 = 0;
								LOC13 = filtersym_351015(it_353374);
								if (!LOC13) goto LA14;
								LOC16 = 0;
								LOC16 = symtostr_351005(it_353374, islocal, ((NimStringDesc*) &TMP2616));
								suggestwriteln_164066(LOC16);
								(*outputs) += ((NI) 1);
							}
							LA14: ;
							s_353402 = nextiter_198132((&it_353400), HEX3Atmp_353397);
						} LA10: ;
					}
				}
				{
					if (!(scope_353362 == (*c).toplevelscope)) goto LA19;
					goto LA1;
				}
				LA19: ;
				current_353406 = (*current_353406).parent;
			} LA3: ;
		}
	} LA1: ;
}

static N_INLINE(NIM_BOOL, fieldvisible_351059)(Tcontext244023* c, Tsym190843* f) {
	NIM_BOOL result;
	NI fmoduleid;
	Tsym190843* LOC1;
	NIM_BOOL LOC2;
	result = 0;
	LOC1 = 0;
	LOC1 = getmodule_198243(f);
	fmoduleid = (*LOC1).Sup.id;
	LOC2 = 0;
	LOC2 = (((*f).flags &(1<<((((NU8) 1))&31)))!=0);
	if (LOC2) goto LA3;
	LOC2 = (fmoduleid == (*(*c).module).Sup.id);
	LA3: ;
	result = LOC2;
	{
		Tsym190843* module_351211;
		Tsymseq190815* HEX3Atmp_351214;
		NI i_351217;
		NI L_351219;
		module_351211 = 0;
		HEX3Atmp_351214 = 0;
		HEX3Atmp_351214 = (*c).friendmodules;
		i_351217 = ((NI) 0);
		L_351219 = (HEX3Atmp_351214 ? HEX3Atmp_351214->Sup.len : 0);
		{
			while (1) {
				if (!(i_351217 < L_351219)) goto LA6;
				module_351211 = HEX3Atmp_351214->data[i_351217];
				{
					if (!(fmoduleid == (*module_351211).Sup.id)) goto LA9;
					result = NIM_TRUE;
					goto LA4;
				}
				LA9: ;
				i_351217 += ((NI) 1);
			} LA6: ;
		}
	} LA4: ;
	return result;
}

N_NIMCALL(void, suggestfield_351232)(Tcontext244023* c, Tsym190843* s, NI* outputs) {
	{
		NIM_BOOL LOC3;
		NimStringDesc* LOC7;
		LOC3 = 0;
		LOC3 = filtersym_351015(s);
		if (!(LOC3)) goto LA4;
		LOC3 = fieldvisible_351059(c, s);
		LA4: ;
		if (!LOC3) goto LA5;
		LOC7 = 0;
		LOC7 = symtostr_351005(s, NIM_TRUE, ((NimStringDesc*) &TMP2616));
		suggestwriteln_164066(LOC7);
		(*outputs) += ((NI) 1);
	}
	LA5: ;
}

N_NIMCALL(void, suggestsymlist_351267)(Tcontext244023* c, Tnode190813* list, NI* outputs) {
	{
		NI i_351285;
		NI HEX3Atmp_351299;
		NI LOC2;
		NI res_351302;
		i_351285 = 0;
		HEX3Atmp_351299 = 0;
		LOC2 = 0;
		LOC2 = sonslen_193403(list);
		HEX3Atmp_351299 = (NI)(LOC2 - ((NI) 1));
		res_351302 = ((NI) 0);
		{
			while (1) {
				if (!(res_351302 <= HEX3Atmp_351299)) goto LA4;
				i_351285 = res_351302;
				{
					if (!((*(*list).kindU.S6.sons->data[i_351285]).kind == ((NU8) 3))) goto LA7;
					suggestfield_351232(c, (*(*list).kindU.S6.sons->data[i_351285]).kindU.S4.sym, outputs);
				}
				LA7: ;
				res_351302 += ((NI) 1);
			} LA4: ;
		}
	}
}

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

N_NIMCALL(NI, HEX3Aanonymous_353257)(Tsym190843* a_353208, Tsym190843* b_353210) {
	NI result;
{	result = 0;
	result = cmp_4717((*(*a_353208).name).s, (*(*b_353210).name).s);
	goto BeforeRet;
	}BeforeRet: ;
	return result;
}

static N_INLINE(NIM_BOOL, filtersymnoopr_351031)(Tsym190843* s) {
	NIM_BOOL result;
	NIM_BOOL LOC1;
	NIM_BOOL LOC2;
	NIM_BOOL LOC5;
	result = 0;
	LOC1 = 0;
	LOC2 = 0;
	LOC2 = !(((*s).kind == ((NU8) 6)));
	if (!(LOC2)) goto LA3;
	LOC2 = (((NU8)((*(*s).name).s->data[((NI) 0)])) >= ((NU8)(97)) && ((NU8)((*(*s).name).s->data[((NI) 0)])) <= ((NU8)(122)) || ((NU8)((*(*s).name).s->data[((NI) 0)])) >= ((NU8)(65)) && ((NU8)((*(*s).name).s->data[((NI) 0)])) <= ((NU8)(90)) || ((NU8)((*(*s).name).s->data[((NI) 0)])) >= ((NU8)(48)) && ((NU8)((*(*s).name).s->data[((NI) 0)])) <= ((NU8)(57)) || ((NU8)((*(*s).name).s->data[((NI) 0)])) >= ((NU8)(128)) && ((NU8)((*(*s).name).s->data[((NI) 0)])) <= ((NU8)(255)));
	LA3: ;
	LOC1 = LOC2;
	if (!(LOC1)) goto LA4;
	LOC5 = 0;
	LOC5 = iskeyword_212100((*s).name);
	LOC1 = !(LOC5);
	LA4: ;
	result = LOC1;
	return result;
}

static N_INLINE(void, initcandidateaux_344264)(Tcontext244023* ctx, Tcandidate344209* c, Ttype190849* callee) {
	unsureAsgnRef((void**) (&(*c).c), ctx);
	(*c).exactmatches = ((NI) 0);
	(*c).subtypematches = ((NI) 0);
	(*c).convmatches = ((NI) 0);
	(*c).intconvmatches = ((NI) 0);
	(*c).genericmatches = ((NI) 0);
	(*c).state = ((NU8) 0);
	unsureAsgnRef((void**) (&(*c).callee), callee);
	unsureAsgnRef((void**) (&(*c).call), NIM_NIL);
	(*c).basetypematch = NIM_FALSE;
	(*c).genericconverter = NIM_FALSE;
	(*c).inheritancepenalty = ((NI) 0);
}

N_NIMCALL(void, initcandidate_344276)(Tcontext244023* ctx, Tcandidate344209* c, Ttype190849* callee) {
	initcandidateaux_344264(ctx, c, callee);
	unsureAsgnRef((void**) (&(*c).calleesym), NIM_NIL);
	initidtable_194057((&(*c).bindings));
}

static N_INLINE(void, nimGCunrefNoCycle)(void* p) {
	Tcell46547* c;
	c = usrtocell_50046(p);
	{
		(*c).refcount -= ((NI) 8);
		if (!((NU64)((*c).refcount) < (NU64)(((NI) 8)))) goto LA3;
		rtladdzct_51604(c);
	}
	LA3: ;
}

static N_INLINE(Ttype190849*, skipintlit_238698)(Ttype190849* t) {
	Ttype190849* result;
{	result = 0;
	{
		if (!!(((*t).n == NIM_NIL))) goto LA3;
		{
			if (!((IL64(70866960384) &(IL64(1)<<(((*t).kind)&IL64(63))))!=0)) goto LA7;
			result = getsystype_238030((*t).kind);
			goto BeforeRet;
		}
		LA7: ;
	}
	LA3: ;
	result = t;
	}BeforeRet: ;
	return result;
}

static N_INLINE(void, put_344289)(Tidtable190861* t, Ttype190849* key, Ttype190849* val) {
	Tidobj167015* LOC1;
	Ttype190849* LOC2;
	TNimObject* LOC3;
	LOC1 = 0;
	LOC1 = &key->Sup;
	LOC2 = 0;
	LOC2 = skipintlit_238698(val);
	LOC3 = 0;
	LOC3 = &LOC2->Sup.Sup;
	idtableput_198196(t, LOC1, LOC3);
}

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

N_NIMCALL(NIM_BOOL, shouldskipdistinct_346425)(Tnode190813* rules, Tident167021* callident) {
	NIM_BOOL result;
{	result = 0;
	{
		if (!((*rules).kind == ((NU8) 130))) goto LA3;
		{
			Tnode190813* r_346439;
			r_346439 = 0;
			{
				NI i_346469;
				NI HEX3Atmp_346471;
				NI LOC7;
				NI res_346473;
				i_346469 = 0;
				HEX3Atmp_346471 = 0;
				LOC7 = 0;
				LOC7 = len_191097(rules);
				HEX3Atmp_346471 = (LOC7 - 1);
				res_346473 = ((NI) 0);
				{
					while (1) {
						if (!(res_346473 <= HEX3Atmp_346471)) goto LA9;
						i_346469 = res_346473;
						r_346439 = (*rules).kindU.S6.sons->data[i_346469];
						{
							Tident167021* LOC12;
							LOC12 = 0;
							LOC12 = considerquotedident_249010(r_346439);
							if (!(LOC12 == callident)) goto LA13;
							result = NIM_TRUE;
							goto BeforeRet;
						}
						LA13: ;
						res_346473 += ((NI) 1);
					} LA9: ;
				}
			}
		}
		result = NIM_FALSE;
		goto BeforeRet;
	}
	goto LA1;
	LA3: ;
	{
		{
			Tnode190813* r_346452;
			r_346452 = 0;
			{
				NI i_346480;
				NI HEX3Atmp_346482;
				NI LOC18;
				NI res_346484;
				i_346480 = 0;
				HEX3Atmp_346482 = 0;
				LOC18 = 0;
				LOC18 = len_191097(rules);
				HEX3Atmp_346482 = (LOC18 - 1);
				res_346484 = ((NI) 0);
				{
					while (1) {
						if (!(res_346484 <= HEX3Atmp_346482)) goto LA20;
						i_346480 = res_346484;
						r_346452 = (*rules).kindU.S6.sons->data[i_346480];
						{
							Tident167021* LOC23;
							LOC23 = 0;
							LOC23 = considerquotedident_249010(r_346452);
							if (!(LOC23 == callident)) goto LA24;
							result = NIM_FALSE;
							goto BeforeRet;
						}
						LA24: ;
						res_346484 += ((NI) 1);
					} LA20: ;
				}
			}
		}
		result = NIM_TRUE;
		goto BeforeRet;
	}
	LA1: ;
	}BeforeRet: ;
	return result;
}

N_NIMCALL(Ttype190849*, maybeskipdistinct_346517)(Ttype190849* t, Tsym190843* callee) {
	Ttype190849* result;
	result = 0;
	{
		NIM_BOOL LOC3;
		NIM_BOOL LOC4;
		NIM_BOOL LOC5;
		LOC3 = 0;
		LOC4 = 0;
		LOC5 = 0;
		LOC5 = !((t == NIM_NIL));
		if (!(LOC5)) goto LA6;
		LOC5 = ((*t).kind == ((NU8) 13));
		LA6: ;
		LOC4 = LOC5;
		if (!(LOC4)) goto LA7;
		LOC4 = !(((*t).n == NIM_NIL));
		LA7: ;
		LOC3 = LOC4;
		if (!(LOC3)) goto LA8;
		LOC3 = shouldskipdistinct_346425((*t).n, (*callee).name);
		LA8: ;
		if (!LOC3) goto LA9;
		result = base_220039(t);
	}
	goto LA1;
	LA9: ;
	{
		result = t;
	}
	LA1: ;
	return result;
}

static N_INLINE(NIM_BOOL, sameenumtypes_225855)(Ttype190849* a, Ttype190849* b) {
	NIM_BOOL result;
	result = 0;
	result = ((*a).Sup.id == (*b).Sup.id);
	return result;
}

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

N_NIMCALL(Tnode190813*, tryresolvingstaticexpr_346562)(Tcandidate344209* c, Tnode190813* n) {
	Tnode190813* result;
	Tnode190813* instantiated;
	result = 0;
	instantiated = replacetypesinbody_267617((*c).c, (*c).bindings, n);
	result = (*(*c).c).semexpr((*c).c, instantiated, 0);
	return result;
}

N_NOINLINE(NU8, typerangerel_346234)(Ttype190849* f, Ttype190849* a) {
	NU8 result;
	NI64 a0;
	NI64 a1;
	NI64 f0;
	NI64 f1;
	result = 0;
	a0 = firstord_220004(a);
	a1 = lastord_220010(a);
	f0 = firstord_220004(f);
	f1 = lastord_220010(f);
	{
		NIM_BOOL LOC3;
		LOC3 = 0;
		LOC3 = (a0 == f0);
		if (!(LOC3)) goto LA4;
		LOC3 = (a1 == f1);
		LA4: ;
		if (!LOC3) goto LA5;
		result = ((NU8) 9);
	}
	goto LA1;
	LA5: ;
	{
		NIM_BOOL LOC8;
		LOC8 = 0;
		LOC8 = (f0 <= a0);
		if (!(LOC8)) goto LA9;
		LOC8 = (a1 <= f1);
		LA9: ;
		if (!LOC8) goto LA10;
		result = ((NU8) 1);
	}
	goto LA1;
	LA10: ;
	{
		NIM_BOOL LOC13;
		LOC13 = 0;
		LOC13 = (a0 <= f1);
		if (!(LOC13)) goto LA14;
		LOC13 = (f0 <= a1);
		LA14: ;
		if (!LOC13) goto LA15;
		result = ((NU8) 1);
	}
	goto LA1;
	LA15: ;
	{
		result = ((NU8) 0);
	}
	LA1: ;
	return result;
}

N_NIMCALL(NIM_BOOL, isconvertibletorange_345238)(Ttype190849* f, Ttype190849* a) {
	NIM_BOOL result;
	result = 0;
	{
		NIM_BOOL LOC3;
		LOC3 = 0;
		LOC3 = ((IL64(34151432454144) &(IL64(1)<<(((*f).kind)&IL64(63))))!=0);
		if (!(LOC3)) goto LA4;
		LOC3 = ((IL64(34151432454144) &(IL64(1)<<(((*a).kind)&IL64(63))))!=0);
		LA4: ;
		if (!LOC3) goto LA5;
		result = NIM_TRUE;
	}
	goto LA1;
	LA5: ;
	{
		NIM_BOOL LOC8;
		LOC8 = 0;
		LOC8 = ((IL64(1030792151040) &(IL64(1)<<(((*f).kind)&IL64(63))))!=0);
		if (!(LOC8)) goto LA9;
		LOC8 = ((IL64(1030792151040) &(IL64(1)<<(((*a).kind)&IL64(63))))!=0);
		LA9: ;
		if (!LOC8) goto LA10;
		result = NIM_TRUE;
	}
	goto LA1;
	LA10: ;
	LA1: ;
	return result;
}

static N_INLINE(NIM_BOOL, isintlit_220327)(Ttype190849* t) {
	NIM_BOOL result;
	NIM_BOOL LOC1;
	NIM_BOOL LOC2;
	result = 0;
	LOC1 = 0;
	LOC2 = 0;
	LOC2 = ((*t).kind == ((NU8) 31));
	if (!(LOC2)) goto LA3;
	LOC2 = !(((*t).n == NIM_NIL));
	LA3: ;
	LOC1 = LOC2;
	if (!(LOC1)) goto LA4;
	LOC1 = ((*(*t).n).kind == ((NU8) 6));
	LA4: ;
	result = LOC1;
	return result;
}

N_NIMCALL(NU8, handlerange_345122)(Ttype190849* f, Ttype190849* a, NU8 min, NU8 max) {
	NU8 result;
	result = 0;
	{
		if (!((*a).kind == (*f).kind)) goto LA3;
		result = ((NU8) 9);
	}
	goto LA1;
	LA3: ;
	{
		Ttype190849* ab;
		NU8 k;
		ab = skiptypes_194167(a, 1048576);
		k = (*ab).kind;
		{
			if (!(k == (*f).kind)) goto LA8;
			result = ((NU8) 4);
		}
		goto LA6;
		LA8: ;
		{
			NIM_BOOL LOC11;
			NIM_BOOL LOC12;
			NIM_BOOL LOC13;
			NIM_BOOL LOC14;
			NI64 LOC18;
			NI64 LOC20;
			LOC11 = 0;
			LOC12 = 0;
			LOC13 = 0;
			LOC14 = 0;
			LOC14 = (k == ((NU8) 31));
			if (!(LOC14)) goto LA15;
			LOC14 = ((IL64(34149286019072) &(IL64(1)<<(((*f).kind)&IL64(63))))!=0);
			LA15: ;
			LOC13 = LOC14;
			if (!(LOC13)) goto LA16;
			LOC13 = isintlit_220327(ab);
			LA16: ;
			LOC12 = LOC13;
			if (!(LOC12)) goto LA17;
			LOC18 = 0;
			LOC18 = firstord_220004(f);
			LOC12 = (LOC18 <= (*(*ab).n).kindU.S1.intval);
			LA17: ;
			LOC11 = LOC12;
			if (!(LOC11)) goto LA19;
			LOC20 = 0;
			LOC20 = lastord_220010(f);
			LOC11 = ((*(*ab).n).kindU.S1.intval <= LOC20);
			LA19: ;
			if (!LOC11) goto LA21;
			result = ((NU8) 8);
		}
		goto LA6;
		LA21: ;
		{
			NIM_BOOL LOC24;
			LOC24 = 0;
			LOC24 = ((*f).kind == ((NU8) 31));
			if (!(LOC24)) goto LA25;
			LOC24 = ((IL64(30064771072) &(IL64(1)<<((k)&IL64(63))))!=0);
			LA25: ;
			if (!LOC24) goto LA26;
			result = ((NU8) 2);
		}
		goto LA6;
		LA26: ;
		{
			NIM_BOOL LOC29;
			LOC29 = 0;
			LOC29 = (min <= k);
			if (!(LOC29)) goto LA30;
			LOC29 = (k <= max);
			LA30: ;
			if (!LOC29) goto LA31;
			result = ((NU8) 1);
		}
		goto LA6;
		LA31: ;
		{
			NIM_BOOL LOC34;
			NIM_BOOL LOC35;
			NIM_BOOL LOC36;
			NI64 LOC39;
			Tnode190813* LOC40;
			Tnode190813* LOC42;
			NI64 LOC43;
			LOC34 = 0;
			LOC35 = 0;
			LOC36 = 0;
			LOC36 = ((*a).kind == ((NU8) 20));
			if (!(LOC36)) goto LA37;
			LOC36 = ((IL64(15459734781952) &(IL64(1)<<(((*(*a).sons->data[((NI) 0)]).kind)&IL64(63))))!=0);
			LA37: ;
			LOC35 = LOC36;
			if (!(LOC35)) goto LA38;
			LOC39 = 0;
			LOC39 = firstord_220004(f);
			LOC40 = 0;
			LOC40 = HEX5BHEX5D_191244((*a).n, ((NI) 0));
			LOC35 = (LOC39 <= (*LOC40).kindU.S1.intval);
			LA38: ;
			LOC34 = LOC35;
			if (!(LOC34)) goto LA41;
			LOC42 = 0;
			LOC42 = HEX5BHEX5D_191244((*a).n, ((NI) 1));
			LOC43 = 0;
			LOC43 = lastord_220010(f);
			LOC34 = ((*LOC42).kindU.S1.intval <= LOC43);
			LA41: ;
			if (!LOC34) goto LA44;
			result = ((NU8) 1);
		}
		goto LA6;
		LA44: ;
		{
			result = ((NU8) 0);
		}
		LA6: ;
	}
	LA1: ;
	return result;
}

static N_INLINE(NIM_BOOL, isfloatlit_220367)(Ttype190849* t) {
	NIM_BOOL result;
	NIM_BOOL LOC1;
	NIM_BOOL LOC2;
	result = 0;
	LOC1 = 0;
	LOC2 = 0;
	LOC2 = ((*t).kind == ((NU8) 36));
	if (!(LOC2)) goto LA3;
	LOC2 = !(((*t).n == NIM_NIL));
	LA3: ;
	LOC1 = LOC2;
	if (!(LOC1)) goto LA4;
	LOC1 = ((*(*t).n).kind == ((NU8) 16));
	LA4: ;
	result = LOC1;
	return result;
}

N_NIMCALL(NU8, handlefloatrange_345293)(Ttype190849* f, Ttype190849* a) {
	NU8 result;
	result = 0;
	{
		if (!((*a).kind == (*f).kind)) goto LA3;
		result = ((NU8) 9);
	}
	goto LA1;
	LA3: ;
	{
		Ttype190849* ab;
		NU8 k;
		ab = skiptypes_194167(a, 1048576);
		k = (*ab).kind;
		{
			if (!(k == (*f).kind)) goto LA8;
			result = ((NU8) 4);
		}
		goto LA6;
		LA8: ;
		{
			NIM_BOOL LOC11;
			LOC11 = 0;
			LOC11 = isfloatlit_220367(ab);
			if (!LOC11) goto LA12;
			result = ((NU8) 8);
		}
		goto LA6;
		LA12: ;
		{
			NIM_BOOL LOC15;
			LOC15 = 0;
			LOC15 = isintlit_220327(ab);
			if (!LOC15) goto LA16;
			result = ((NU8) 1);
		}
		goto LA6;
		LA16: ;
		{
			NIM_BOOL LOC19;
			LOC19 = 0;
			LOC19 = (((NU8) 36) <= k);
			if (!(LOC19)) goto LA20;
			LOC19 = (k <= ((NU8) 39));
			LA20: ;
			if (!LOC19) goto LA21;
			{
				if (!((*f).kind == ((NU8) 37))) goto LA25;
				result = ((NU8) 1);
			}
			goto LA23;
			LA25: ;
			{
				result = ((NU8) 2);
			}
			LA23: ;
		}
		goto LA6;
		LA21: ;
		{
			result = ((NU8) 0);
		}
		LA6: ;
	}
	LA1: ;
	return result;
}

static N_INLINE(NU8, allowsnil_345833)(Ttype190849* f) {
	NU8 result;
	result = 0;
	{
		if (!!((((*f).flags &(1<<((((NU8) 16))&31)))!=0))) goto LA3;
		result = ((NU8) 3);
	}
	goto LA1;
	LA3: ;
	{
		result = ((NU8) 0);
	}
	LA1: ;
	return result;
}

N_NIMCALL(NU8, minrel_345648)(NU8 a, NU8 b) {
	NU8 result;
	result = 0;
	{
		if (!(a <= b)) goto LA3;
		result = a;
	}
	goto LA1;
	LA3: ;
	{
		result = b;
	}
	LA1: ;
	return result;
}

N_NIMCALL(NU8, recordrel_345668)(Tcandidate344209* c, Ttype190849* f, Ttype190849* a) {
	NU8 result;
{	result = 0;
	result = ((NU8) 0);
	{
		NIM_BOOL LOC3;
		LOC3 = 0;
		LOC3 = sametype_225092(f, a, 0);
		if (!LOC3) goto LA4;
		result = ((NU8) 9);
	}
	goto LA1;
	LA4: ;
	{
		NI LOC7;
		NI LOC8;
		NI firstfield;
		LOC7 = 0;
		LOC7 = sonslen_193351(a);
		LOC8 = 0;
		LOC8 = sonslen_193351(f);
		if (!(LOC7 == LOC8)) goto LA9;
		result = ((NU8) 9);
		{
			if (!((*f).kind == ((NU8) 18))) goto LA13;
			firstfield = ((NI) 0);
		}
		goto LA11;
		LA13: ;
		{
			firstfield = ((NI) 1);
		}
		LA11: ;
		{
			NI i_345697;
			NI HEX3Atmp_345794;
			NI LOC17;
			NI res_345797;
			i_345697 = 0;
			HEX3Atmp_345794 = 0;
			LOC17 = 0;
			LOC17 = sonslen_193351(f);
			HEX3Atmp_345794 = (NI)(LOC17 - ((NI) 1));
			res_345797 = firstfield;
			{
				while (1) {
					NU8 m;
					if (!(res_345797 <= HEX3Atmp_345794)) goto LA19;
					i_345697 = res_345797;
					m = typerel_345064(c, (*f).sons->data[i_345697], (*a).sons->data[i_345697], NIM_TRUE);
					{
						if (!(m < ((NU8) 3))) goto LA22;
						result = ((NU8) 0);
						goto BeforeRet;
					}
					LA22: ;
					result = minrel_345648(result, m);
					res_345797 += ((NI) 1);
				} LA19: ;
			}
		}
		{
			NIM_BOOL LOC26;
			LOC26 = 0;
			LOC26 = !(((*f).n == NIM_NIL));
			if (!(LOC26)) goto LA27;
			LOC26 = !(((*a).n == NIM_NIL));
			LA27: ;
			if (!LOC26) goto LA28;
			{
				NI i_345744;
				NI HEX3Atmp_345802;
				NI LOC31;
				NI res_345805;
				i_345744 = 0;
				HEX3Atmp_345802 = 0;
				LOC31 = 0;
				LOC31 = sonslen_193403((*f).n);
				HEX3Atmp_345802 = (NI)(LOC31 - ((NI) 1));
				res_345805 = ((NI) 0);
				{
					while (1) {
						if (!(res_345805 <= HEX3Atmp_345802)) goto LA33;
						i_345744 = res_345805;
						{
							if (!!(((*(*(*f).n).kindU.S6.sons->data[i_345744]).kind == ((NU8) 3)))) goto LA36;
							internalerror_165199((*(*f).n).info, ((NimStringDesc*) &TMP2641));
						}
						goto LA34;
						LA36: ;
						{
							if (!!(((*(*(*a).n).kindU.S6.sons->data[i_345744]).kind == ((NU8) 3)))) goto LA39;
							internalerror_165199((*(*a).n).info, ((NimStringDesc*) &TMP2641));
						}
						goto LA34;
						LA39: ;
						{
							Tsym190843* x;
							Tsym190843* y;
							x = (*(*(*f).n).kindU.S6.sons->data[i_345744]).kindU.S4.sym;
							y = (*(*(*a).n).kindU.S6.sons->data[i_345744]).kindU.S4.sym;
							{
								NIM_BOOL LOC44;
								NU8 LOC46;
								LOC44 = 0;
								LOC44 = ((*f).kind == ((NU8) 17));
								if (!(LOC44)) goto LA45;
								LOC46 = 0;
								LOC46 = typerel_345064(c, (*x).typ, (*y).typ, NIM_TRUE);
								LOC44 = (LOC46 < ((NU8) 3));
								LA45: ;
								if (!LOC44) goto LA47;
								result = ((NU8) 0);
								goto BeforeRet;
							}
							LA47: ;
							{
								if (!!(((*(*x).name).Sup.id == (*(*y).name).Sup.id))) goto LA51;
								result = ((NU8) 0);
								goto BeforeRet;
							}
							LA51: ;
						}
						LA34: ;
						res_345805 += ((NI) 1);
					} LA33: ;
				}
			}
		}
		LA28: ;
	}
	goto LA1;
	LA9: ;
	LA1: ;
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NI, isobjectsubtype_345352)(Ttype190849* a, Ttype190849* f) {
	NI result;
	Ttype190849* t;
	NI depth;
	result = 0;
	t = a;
	depth = ((NI) 0);
	{
		while (1) {
			NIM_BOOL LOC3;
			NIM_BOOL LOC5;
			LOC3 = 0;
			LOC3 = !((t == NIM_NIL));
			if (!(LOC3)) goto LA4;
			LOC5 = 0;
			LOC5 = sameobjecttypes_225785(f, t);
			LOC3 = !(LOC5);
			LA4: ;
			if (!LOC3) goto LA2;
			t = (*t).sons->data[((NI) 0)];
			{
				if (!(t == NIM_NIL)) goto LA8;
				goto LA1;
			}
			LA8: ;
			t = skiptypes_194167(t, 2048);
			depth += ((NI) 1);
		} LA2: ;
	} LA1: ;
	{
		if (!!((t == NIM_NIL))) goto LA12;
		result = depth;
	}
	LA12: ;
	return result;
}

static N_INLINE(NIM_BOOL, samedistincttypes_225844)(Ttype190849* a, Ttype190849* b) {
	NIM_BOOL result;
	result = 0;
	result = sameobjecttypes_225785(a, b);
	return result;
}

static N_INLINE(NIM_BOOL, inconsistentvartypes_345853)(Ttype190849* f, Ttype190849* a) {
	NIM_BOOL result;
	NIM_BOOL LOC1;
	NIM_BOOL LOC3;
	result = 0;
	LOC1 = 0;
	LOC1 = !(((*f).kind == (*a).kind));
	if (!(LOC1)) goto LA2;
	LOC3 = 0;
	LOC3 = ((*f).kind == ((NU8) 23));
	if (LOC3) goto LA4;
	LOC3 = ((*a).kind == ((NU8) 23));
	LA4: ;
	LOC1 = LOC3;
	LA2: ;
	result = LOC1;
	return result;
}

N_NIMCALL(NU8, procparamtyperel_345891)(Tcandidate344209* c, Ttype190849* f_345895, Ttype190849* a) {
	NU8 result;
	Ttype190849* f;
{	result = 0;
	f = f_345895;
	{
		NIM_BOOL LOC3;
		NU8 reverserel;
		LOC3 = 0;
		LOC3 = ismetatype_191821(a);
		if (!LOC3) goto LA4;
		{
			NIM_BOOL LOC8;
			LOC8 = 0;
			LOC8 = ismetatype_191821(f);
			if (!LOC8) goto LA9;
			f = generatetypeinstance_267631((*c).c, (*c).bindings, (*(*c).call).info, f);
			{
				NIM_BOOL LOC13;
				LOC13 = 0;
				LOC13 = (f == NIM_NIL);
				if (LOC13) goto LA14;
				LOC13 = ismetatype_191821(f);
				LA14: ;
				if (!LOC13) goto LA15;
				result = ((NU8) 0);
				goto BeforeRet;
			}
			LA15: ;
		}
		LA9: ;
		reverserel = typerel_345064(c, a, f, NIM_TRUE);
		{
			if (!(((NU8) 7) <= reverserel)) goto LA19;
			result = ((NU8) 5);
		}
		LA19: ;
	}
	goto LA1;
	LA4: ;
	{
		result = typerel_345064(c, f, a, NIM_TRUE);
	}
	LA1: ;
	{
		NIM_BOOL LOC24;
		LOC24 = 0;
		LOC24 = (result <= ((NU8) 3));
		if (LOC24) goto LA25;
		LOC24 = inconsistentvartypes_345853(f, a);
		LA25: ;
		if (!LOC24) goto LA26;
		result = ((NU8) 0);
	}
	LA26: ;
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NU8, proctyperel_345936)(Tcandidate344209* c, Ttype190849* f, Ttype190849* a) {
	NU8 result;
{	result = 0;
	switch ((*a).kind) {
	case ((NU8) 25):
	{
		{
			NI LOC4;
			NI LOC5;
			LOC4 = 0;
			LOC4 = sonslen_193351(f);
			LOC5 = 0;
			LOC5 = sonslen_193351(a);
			if (!!((LOC4 == LOC5))) goto LA6;
			goto BeforeRet;
		}
		LA6: ;
		result = ((NU8) 9);
		{
			NI i_345968;
			NI HEX3Atmp_346212;
			NI LOC9;
			NI res_346215;
			i_345968 = 0;
			HEX3Atmp_346212 = 0;
			LOC9 = 0;
			LOC9 = sonslen_193351(f);
			HEX3Atmp_346212 = (LOC9 - 1);
			res_346215 = ((NI) 1);
			{
				while (1) {
					NU8 LOC12;
					if (!(res_346215 <= HEX3Atmp_346212)) goto LA11;
					i_345968 = res_346215;
					LOC12 = 0;
					LOC12 = procparamtyperel_345891(c, (*f).sons->data[i_345968], (*a).sons->data[i_345968]);
					result = minrel_345648(result, LOC12);
					{
						if (!(result == ((NU8) 0))) goto LA15;
						goto BeforeRet;
					}
					LA15: ;
					res_346215 += ((NI) 1);
				} LA11: ;
			}
		}
		{
			if (!!(((*f).sons->data[((NI) 0)] == NIM_NIL))) goto LA19;
			{
				NU8 LOC25;
				if (!!(((*a).sons->data[((NI) 0)] == NIM_NIL))) goto LA23;
				LOC25 = 0;
				LOC25 = procparamtyperel_345891(c, (*f).sons->data[((NI) 0)], (*a).sons->data[((NI) 0)]);
				result = minrel_345648(result, LOC25);
				{
					if (!(result == ((NU8) 0))) goto LA28;
					goto BeforeRet;
				}
				LA28: ;
			}
			goto LA21;
			LA23: ;
			{
				result = ((NU8) 0);
				goto BeforeRet;
			}
			LA21: ;
		}
		goto LA17;
		LA19: ;
		{
			if (!!(((*a).sons->data[((NI) 0)] == NIM_NIL))) goto LA32;
			result = ((NU8) 0);
			goto BeforeRet;
		}
		goto LA17;
		LA32: ;
		LA17: ;
		{
			NIM_BOOL LOC36;
			LOC36 = 0;
			LOC36 = (((*f).flags &(1<<((((NU8) 1))&31)))!=0);
			if (!(LOC36)) goto LA37;
			LOC36 = !((((*a).flags &(1<<((((NU8) 1))&31)))!=0));
			LA37: ;
			if (!LOC36) goto LA38;
			result = ((NU8) 0);
			goto BeforeRet;
		}
		goto LA34;
		LA38: ;
		{
			NIM_BOOL LOC41;
			NIM_BOOL LOC42;
			LOC41 = 0;
			LOC42 = 0;
			LOC42 = (((*f).flags &(1<<((((NU8) 7))&31)))!=0);
			if (!(LOC42)) goto LA43;
			LOC42 = (((*a).flags & 130) == 0);
			LA43: ;
			LOC41 = LOC42;
			if (!(LOC41)) goto LA44;
			LOC41 = ((gglobaloptions_154128 &(1<<((((NU8) 23))&31)))!=0);
			LA44: ;
			if (!LOC41) goto LA45;
			result = ((NU8) 0);
			goto BeforeRet;
		}
		goto LA34;
		LA45: ;
		{
			if (!!((((*f).flags & 16384) == ((*a).flags & 16384)))) goto LA48;
			result = ((NU8) 0);
			goto BeforeRet;
		}
		goto LA34;
		LA48: ;
		{
			if (!!(((*f).callconv == (*a).callconv))) goto LA51;
			{
				NIM_BOOL LOC55;
				LOC55 = 0;
				LOC55 = ((*f).callconv == ((NU8) 8));
				if (!(LOC55)) goto LA56;
				LOC55 = ((*a).callconv == ((NU8) 0));
				LA56: ;
				if (!LOC55) goto LA57;
				{
					if (!!((result == ((NU8) 5)))) goto LA61;
					result = ((NU8) 1);
				}
				goto LA59;
				LA61: ;
				{
					result = ((NU8) 6);
				}
				LA59: ;
			}
			goto LA53;
			LA57: ;
			{
				result = ((NU8) 0);
				goto BeforeRet;
			}
			LA53: ;
		}
		goto LA34;
		LA51: ;
		LA34: ;
		{
			NIM_BOOL LOC67;
			LOC67 = 0;
			LOC67 = compatibleeffects_229489(f, a);
			if (!!(LOC67)) goto LA68;
			result = ((NU8) 0);
			goto BeforeRet;
		}
		LA68: ;
	}
	break;
	case ((NU8) 5):
	{
		result = allowsnil_345833(f);
	}
	break;
	case ((NU8) 49):
	{
		{
			Ttype190849* LOC76;
			Ttype190849* LOC77;
			if (!(((*f).flags &(1<<((((NU8) 14))&31)))!=0)) goto LA74;
			LOC76 = 0;
			LOC76 = base_220039(f);
			LOC77 = 0;
			LOC77 = base_220039(a);
			result = typerel_345064(c, LOC76, LOC77, NIM_TRUE);
		}
		LA74: ;
	}
	break;
	default:
	{
	}
	break;
	}
	}BeforeRet: ;
	return result;
}

N_NIMCALL(Ttype190849*, concretetype_345074)(Tcandidate344209* c, Ttype190849* t) {
	Ttype190849* result;
	result = 0;
	switch ((*t).kind) {
	case ((NU8) 4):
	{
		result = newtype_193140(((NU8) 16), (*t).owner);
		addsonskipintlit_238731(result, (*t).sons->data[((NI) 0)]);
		addsonskipintlit_238731(result, (*t).sons->data[((NI) 1)]);
	}
	break;
	case ((NU8) 5):
	{
		result = NIM_NIL;
	}
	break;
	case ((NU8) 24):
	case ((NU8) 19):
	{
		{
			if (!((*(*t).sons->data[((NI) 0)]).kind == ((NU8) 3))) goto LA6;
			result = NIM_NIL;
		}
		goto LA4;
		LA6: ;
		{
			result = t;
		}
		LA4: ;
	}
	break;
	case ((NU8) 12):
	case ((NU8) 58):
	{
		result = t;
		{
			while (1) {
				Tidobj167015* LOC12;
				TNimObject* LOC13;
				LOC12 = 0;
				LOC12 = &t->Sup;
				LOC13 = 0;
				LOC13 = idtableget_198182((*c).bindings, LOC12);
				result = ((Ttype190849*) (LOC13));
				{
					if (!(result == NIM_NIL)) goto LA16;
					goto LA10;
				}
				LA16: ;
				{
					if (!!(((*result).kind == ((NU8) 12)))) goto LA20;
					goto LA10;
				}
				LA20: ;
			}
		} LA10: ;
	}
	break;
	case ((NU8) 9):
	{
		NimStringDesc* LOC23;
		NimStringDesc* LOC24;
		LOC23 = 0;
		LOC24 = 0;
		LOC24 = typetostring_220032(t, ((NU8) 0));
		LOC23 = rawNewString(LOC24->Sup.len + 21);
appendString(LOC23, ((NimStringDesc*) &TMP2645));
appendString(LOC23, LOC24);
		internalerror_165218(LOC23);
		result = t;
	}
	break;
	default:
	{
		result = t;
	}
	break;
	}
	return result;
}

N_NIMCALL(NU8, matchusertypeclass_346249)(Tcontext244023* c, Tcandidate344209* m, Ttype190849* ff, Ttype190849* a) {
	NU8 volatile result;
	Ttype190849* body;
	Tscope190837* LOC1;
	TSafePoint TMP2646;
{	result = 0;
	body = skiptypes_194167(ff, IL64(9007199254740992));
	LOC1 = 0;
	LOC1 = openscope_249091(c);
	(*c).intypeclass += ((NI) 1);
	pushSafePoint(&TMP2646);
	TMP2646.status = _setjmp(TMP2646.context);
	if (TMP2646.status == 0) {
		Tnode190813* checkedbody;
		Tnode190813* LOC35;
		Tnode190813* LOC36;
		{
			if (!((*ff).kind == ((NU8) 53))) goto LA5;
			{
				NI i_346295;
				NI HEX3Atmp_346377;
				NI LOC8;
				NI res_346380;
				i_346295 = 0;
				HEX3Atmp_346377 = 0;
				LOC8 = 0;
				LOC8 = len_193377(ff);
				HEX3Atmp_346377 = ((NI)(LOC8 - ((NI) 1)) - 1);
				res_346380 = ((NI) 1);
				{
					while (1) {
						Tident167021* typeparamname;
						Ttype190849* LOC11;
						Ttype190849* typ;
						Tsym190843* volatile param;
						if (!(res_346380 <= HEX3Atmp_346377)) goto LA10;
						i_346295 = res_346380;
						LOC11 = 0;
						LOC11 = base_220039(ff);
						typeparamname = (*(*(*LOC11).sons->data[(NI)(i_346295 - ((NI) 1))]).sym).name;
						typ = (*ff).sons->data[i_346295];
						param = 0;
						switch ((*typ).kind) {
						case ((NU8) 59):
						{
							param = newsym_191655(((NU8) 10), typeparamname, (*body).sym, (*(*body).sym).info);
							asgnRefNoCycle((void**) (&(*param).typ), base_220039(typ));
							asgnRefNoCycle((void**) (&(*param).ast), (*typ).n);
						}
						break;
						case ((NU8) 60):
						{
							param = newsym_191655(((NU8) 8), typeparamname, (*body).sym, (*(*body).sym).info);
							asgnRefNoCycle((void**) (&(*param).typ), typ);
						}
						break;
						default:
						{
							param = newsym_191655(((NU8) 7), typeparamname, (*body).sym, (*(*body).sym).info);
							asgnRefNoCycle((void**) (&(*param).typ), maketypedesc_244681(c, typ));
						}
						break;
						}
						adddecl_249607(c, param);
						res_346380 += ((NI) 1);
					} LA10: ;
				}
			}
		}
		LA5: ;
		{
			Tnode190813* param_346311;
			Tnode190813* HEX3Atmp_346387;
			param_346311 = 0;
			HEX3Atmp_346387 = 0;
			HEX3Atmp_346387 = HEX5BHEX5D_191244((*body).n, ((NI) 0));
			{
				NI i_346391;
				NI HEX3Atmp_346393;
				NI LOC17;
				NI res_346395;
				i_346391 = 0;
				HEX3Atmp_346393 = 0;
				LOC17 = 0;
				LOC17 = len_191097(HEX3Atmp_346387);
				HEX3Atmp_346393 = (LOC17 - 1);
				res_346395 = ((NI) 0);
				{
					while (1) {
						Tnode190813* volatile dummyname;
						Ttype190849* volatile dummytype;
						Tsym190843* dummyparam;
						if (!(res_346395 <= HEX3Atmp_346393)) goto LA19;
						i_346391 = res_346395;
						param_346311 = (*HEX3Atmp_346387).kindU.S6.sons->data[i_346391];
						dummyname = 0;
						dummytype = 0;
						{
							if (!((*param_346311).kind == ((NU8) 143))) goto LA22;
							dummyname = HEX5BHEX5D_191244(param_346311, ((NI) 0));
							{
								if (!!(((*a).kind == ((NU8) 23)))) goto LA26;
								dummytype = makevartype_244642(c, a);
							}
							goto LA24;
							LA26: ;
							{
								dummytype = a;
							}
							LA24: ;
						}
						goto LA20;
						LA22: ;
						{
							dummyname = param_346311;
							dummytype = a;
						}
						LA20: ;
						{
							NimStringDesc* LOC34;
							if (!!(((*dummyname).kind == ((NU8) 2)))) goto LA32;
							LOC34 = 0;
							LOC34 = HEX24_165306(TMP2648);
							internalerror_165218(LOC34);
						}
						LA32: ;
						dummyparam = newsym_191655(((NU8) 8), (*dummyname).kindU.S5.ident, (*body).sym, (*(*body).sym).info);
						asgnRefNoCycle((void**) (&(*dummyparam).typ), dummytype);
						adddecl_249607(c, dummyparam);
						res_346395 += ((NI) 1);
					} LA19: ;
				}
			}
		}
		LOC35 = 0;
		LOC35 = HEX5BHEX5D_191244((*body).n, ((NI) 3));
		LOC36 = 0;
		LOC36 = copytree_195028(LOC35);
		checkedbody = (*c).semtryexpr(c, LOC36, 0);
		{
			if (!(checkedbody == NIM_NIL)) goto LA39;
			result = ((NU8) 0);
			popSafePoint();
			(*c).intypeclass -= ((NI) 1);
			closescope_249111(c);
			goto BeforeRet;
		}
		LA39: ;
		result = ((NU8) 7);
		popSafePoint();
		(*c).intypeclass -= ((NI) 1);
		closescope_249111(c);
		goto BeforeRet;
		popSafePoint();
	}
	else {
		popSafePoint();
	}
	{
		(*c).intypeclass -= ((NI) 1);
		closescope_249111(c);
	}
	if (TMP2646.status != 0) reraiseException();
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NU8, typerel_345064)(Tcandidate344209* c, Ttype190849* f, Ttype190849* aorig, NIM_BOOL dobind) {
	NU8 result;
	Ttype190849* a;
	Ttype190849* LOC9;
{	result = 0;
	result = ((NU8) 0);
	{
		if (!((*f).kind == ((NU8) 6))) goto LA3;
		{
			if (!!((aorig == NIM_NIL))) goto LA7;
			put_344289((&(*c).bindings), f, aorig);
		}
		LA7: ;
		result = ((NU8) 7);
		goto BeforeRet;
	}
	LA3: ;
	LOC9 = 0;
	LOC9 = skiptypes_194167(aorig, IL64(576460752311812096));
	a = maybeskipdistinct_346517(LOC9, (*c).calleesym);
	{
		NIM_BOOL LOC12;
		Ttype190849* LOC14;
		Ttype190849* LOC17;
		LOC12 = 0;
		LOC12 = ((*a).kind == ((NU8) 11));
		if (!(LOC12)) goto LA13;
		LOC14 = 0;
		LOC14 = skiptypes_194167(f, 8388608);
		LOC12 = !(((IL64(574208952489745920) &(IL64(1)<<(((*LOC14).kind)&IL64(63))))!=0));
		LA13: ;
		if (!LOC12) goto LA15;
		LOC17 = 0;
		LOC17 = lastson_193442(a);
		result = typerel_345064(c, f, LOC17, NIM_TRUE);
		goto BeforeRet;
	}
	LA15: ;
	switch ((*a).kind) {
	case ((NU8) 56):
	{
		result = ((NU8) 7);
		{
			Ttype190849* branch_346859;
			Ttypeseq190845* HEX3Atmp_348532;
			NI i_348535;
			NI L_348537;
			branch_346859 = 0;
			HEX3Atmp_348532 = 0;
			HEX3Atmp_348532 = (*a).sons;
			i_348535 = ((NI) 0);
			L_348537 = (HEX3Atmp_348532 ? HEX3Atmp_348532->Sup.len : 0);
			{
				while (1) {
					NU8 x;
					if (!(i_348535 < L_348537)) goto LA21;
					branch_346859 = HEX3Atmp_348532->data[i_348535];
					x = typerel_345064(c, f, branch_346859, NIM_FALSE);
					{
						if (!(x == ((NU8) 0))) goto LA24;
						result = ((NU8) 0);
						goto BeforeRet;
					}
					LA24: ;
					{
						if (!(x < result)) goto LA28;
						result = x;
					}
					LA28: ;
					i_348535 += ((NI) 1);
				} LA21: ;
			}
		}
	}
	break;
	case ((NU8) 55):
	{
		{
			Ttype190849* branch_346888;
			Ttypeseq190845* HEX3Atmp_348539;
			NI i_348542;
			NI L_348544;
			branch_346888 = 0;
			HEX3Atmp_348539 = 0;
			HEX3Atmp_348539 = (*a).sons;
			i_348542 = ((NI) 0);
			L_348544 = (HEX3Atmp_348539 ? HEX3Atmp_348539->Sup.len : 0);
			{
				while (1) {
					NU8 x;
					if (!(i_348542 < L_348544)) goto LA33;
					branch_346888 = HEX3Atmp_348539->data[i_348542];
					x = typerel_345064(c, f, branch_346888, NIM_FALSE);
					{
						if (!!((x == ((NU8) 0)))) goto LA36;
						{
							if (!(((NU8) 7) <= x)) goto LA40;
							result = ((NU8) 7);
						}
						goto LA38;
						LA40: ;
						{
							result = x;
						}
						LA38: ;
						goto BeforeRet;
					}
					LA36: ;
					i_348542 += ((NI) 1);
				} LA33: ;
			}
		}
		result = ((NU8) 0);
	}
	break;
	case ((NU8) 57):
	{
		switch ((*f).kind) {
		case ((NU8) 57):
		{
			Ttype190849* LOC45;
			Ttype190849* LOC46;
			LOC45 = 0;
			LOC45 = lastson_193442(a);
			LOC46 = 0;
			LOC46 = lastson_193442(f);
			result = typerel_345064(c, LOC45, LOC46, NIM_TRUE);
			goto BeforeRet;
		}
		break;
		default:
		{
			{
				if (!((*f).kind == ((NU8) 58))) goto LA50;
				result = ((NU8) 7);
			}
			goto LA48;
			LA50: ;
			{
				result = ((NU8) 0);
			}
			LA48: ;
			goto BeforeRet;
		}
		break;
		}
	}
	break;
	case ((NU8) 58):
	{
		{
			if (!((*f).kind == ((NU8) 58))) goto LA56;
			result = ((NU8) 7);
		}
		goto LA54;
		LA56: ;
		{
			result = ((NU8) 0);
		}
		LA54: ;
		goto BeforeRet;
	}
	break;
	default:
	{
	}
	break;
	}
	switch ((*f).kind) {
	case ((NU8) 14):
	{
		{
			NIM_BOOL LOC63;
			LOC63 = 0;
			LOC63 = ((*a).kind == (*f).kind);
			if (!(LOC63)) goto LA64;
			LOC63 = sameenumtypes_225855(f, a);
			LA64: ;
			if (!LOC63) goto LA65;
			result = ((NU8) 9);
		}
		goto LA61;
		LA65: ;
		{
			Ttype190849* LOC68;
			NIM_BOOL LOC69;
			LOC68 = 0;
			LOC68 = skiptypes_194167(a, 1048576);
			LOC69 = 0;
			LOC69 = sameenumtypes_225855(f, LOC68);
			if (!LOC69) goto LA70;
			result = ((NU8) 3);
		}
		goto LA61;
		LA70: ;
		LA61: ;
	}
	break;
	case ((NU8) 1):
	case ((NU8) 2):
	{
		{
			if (!((*a).kind == (*f).kind)) goto LA75;
			result = ((NU8) 9);
		}
		goto LA73;
		LA75: ;
		{
			Ttype190849* LOC78;
			LOC78 = 0;
			LOC78 = skiptypes_194167(a, 1048576);
			if (!((*LOC78).kind == (*f).kind)) goto LA79;
			result = ((NU8) 3);
		}
		goto LA73;
		LA79: ;
		LA73: ;
	}
	break;
	case ((NU8) 20):
	{
		{
			Ttype190849* LOC91;
			Ttype190849* LOC92;
			if (!((*a).kind == (*f).kind)) goto LA84;
			{
				Ttype190849* LOC88;
				LOC88 = 0;
				LOC88 = base_220039(f);
				if (!((*LOC88).kind == ((NU8) 0))) goto LA89;
				result = ((NU8) 7);
				goto BeforeRet;
			}
			LA89: ;
			LOC91 = 0;
			LOC91 = base_220039(f);
			LOC92 = 0;
			LOC92 = base_220039(a);
			result = typerel_345064(c, LOC91, LOC92, NIM_TRUE);
			{
				if (!!(((129 &(1<<((result)&15)))!=0))) goto LA95;
				{
					NI i_346994;
					NI res_348548;
					i_346994 = 0;
					res_348548 = ((NI) 0);
					{
						while (1) {
							if (!(res_348548 <= ((NI) 1))) goto LA99;
							i_346994 = res_348548;
							{
								Tnode190813* LOC102;
								Tnode190813* LOC105;
								LOC102 = 0;
								LOC102 = HEX5BHEX5D_191244((*f).n, i_346994);
								if (!((*LOC102).kind == ((NU8) 62))) goto LA103;
								LOC105 = 0;
								LOC105 = HEX5BHEX5D_191244((*f).n, i_346994);
								asgnRefNoCycle((void**) (&(*(*f).n).kindU.S6.sons->data[i_346994]), tryresolvingstaticexpr_346562(c, LOC105));
							}
							LA103: ;
							res_348548 += ((NI) 1);
						} LA99: ;
					}
				}
				result = typerangerel_346234(f, a);
			}
			LA95: ;
		}
		goto LA82;
		LA84: ;
		{
			{
				Ttype190849* LOC109;
				LOC109 = 0;
				LOC109 = skiptypes_194167(f, 1048576);
				if (!((*LOC109).kind == (*a).kind)) goto LA110;
				result = ((NU8) 2);
			}
			goto LA107;
			LA110: ;
			{
				Ttype190849* LOC113;
				NIM_BOOL LOC114;
				LOC113 = 0;
				LOC113 = skiptypes_194167(f, 1048576);
				LOC114 = 0;
				LOC114 = isconvertibletorange_345238(LOC113, a);
				if (!LOC114) goto LA115;
				result = ((NU8) 1);
			}
			goto LA107;
			LA115: ;
			LA107: ;
		}
		LA82: ;
	}
	break;
	case ((NU8) 31):
	{
		result = handlerange_345122(f, a, ((NU8) 32), ((NU8) 34));
	}
	break;
	case ((NU8) 32):
	{
		result = handlerange_345122(f, a, ((NU8) 32), ((NU8) 32));
	}
	break;
	case ((NU8) 33):
	{
		result = handlerange_345122(f, a, ((NU8) 32), ((NU8) 33));
	}
	break;
	case ((NU8) 34):
	{
		result = handlerange_345122(f, a, ((NU8) 32), ((NU8) 34));
	}
	break;
	case ((NU8) 35):
	{
		result = handlerange_345122(f, a, ((NU8) 31), ((NU8) 35));
	}
	break;
	case ((NU8) 40):
	{
		result = handlerange_345122(f, a, ((NU8) 41), ((NU8) 43));
	}
	break;
	case ((NU8) 41):
	{
		result = handlerange_345122(f, a, ((NU8) 41), ((NU8) 41));
	}
	break;
	case ((NU8) 42):
	{
		result = handlerange_345122(f, a, ((NU8) 41), ((NU8) 42));
	}
	break;
	case ((NU8) 43):
	{
		result = handlerange_345122(f, a, ((NU8) 41), ((NU8) 43));
	}
	break;
	case ((NU8) 44):
	{
		result = handlerange_345122(f, a, ((NU8) 40), ((NU8) 44));
	}
	break;
	case ((NU8) 36):
	{
		result = handlefloatrange_345293(f, a);
	}
	break;
	case ((NU8) 37):
	{
		result = handlefloatrange_345293(f, a);
	}
	break;
	case ((NU8) 38):
	{
		result = handlefloatrange_345293(f, a);
	}
	break;
	case ((NU8) 39):
	{
		result = handlefloatrange_345293(f, a);
	}
	break;
	case ((NU8) 23):
	{
		{
			Ttype190849* LOC136;
			Ttype190849* LOC137;
			if (!((*aorig).kind == ((NU8) 23))) goto LA134;
			LOC136 = 0;
			LOC136 = base_220039(f);
			LOC137 = 0;
			LOC137 = base_220039(aorig);
			result = typerel_345064(c, LOC136, LOC137, NIM_TRUE);
		}
		goto LA132;
		LA134: ;
		{
			Ttype190849* LOC139;
			LOC139 = 0;
			LOC139 = base_220039(f);
			result = typerel_345064(c, LOC139, aorig, NIM_TRUE);
		}
		LA132: ;
	}
	break;
	case ((NU8) 16):
	case ((NU8) 4):
	{
		switch ((*a).kind) {
		case ((NU8) 16):
		case ((NU8) 4):
		{
			Ttype190849* frange;
			frange = (*f).sons->data[((NI) 0)];
			{
				Ttype190849* prev;
				Tidobj167015* LOC146;
				TNimObject* LOC147;
				if (!((*frange).kind == ((NU8) 12))) goto LA144;
				LOC146 = 0;
				LOC146 = &frange->Sup;
				LOC147 = 0;
				LOC147 = idtableget_198182((*c).bindings, LOC146);
				prev = ((Ttype190849*) (LOC147));
				{
					if (!(prev == NIM_NIL)) goto LA150;
					put_344289((&(*c).bindings), frange, (*a).sons->data[((NI) 0)]);
					frange = a;
				}
				goto LA148;
				LA150: ;
				{
					frange = prev;
				}
				LA148: ;
			}
			LA144: ;
			result = typerel_345064(c, (*f).sons->data[((NI) 1)], (*a).sons->data[((NI) 1)], NIM_TRUE);
			{
				if (!(result < ((NU8) 7))) goto LA155;
				result = ((NU8) 0);
				goto BeforeRet;
			}
			LA155: ;
			{
				NIM_BOOL LOC159;
				NIM_BOOL LOC160;
				NI LOC162;
				Tnode190813* LOC164;
				Tnode190813* len;
				Tnode190813* LOC177;
				LOC159 = 0;
				LOC160 = 0;
				LOC160 = !(((*frange).n == NIM_NIL));
				if (!(LOC160)) goto LA161;
				LOC162 = 0;
				LOC162 = len_191097((*frange).n);
				LOC160 = (((NI) 1) < LOC162);
				LA161: ;
				LOC159 = LOC160;
				if (!(LOC159)) goto LA163;
				LOC164 = 0;
				LOC164 = HEX5BHEX5D_191244((*frange).n, ((NI) 1));
				LOC159 = ((*LOC164).kind == ((NU8) 62));
				LA163: ;
				if (!LOC159) goto LA165;
				{
					Ttype190849* rangestatict;
					Tnode190813* LOC171;
					Tnode190813* LOC172;
					Tnode190813* LOC173;
					Ttype190849* replacementt;
					Ttypeseq190845* LOC174;
					TY349187 LOC175;
					NI64 inputupperbound;
					Tnode190813* LOC176;
					if (!(((*frange).flags &(1<<((((NU8) 9))&31)))!=0)) goto LA169;
					LOC171 = 0;
					LOC171 = HEX5BHEX5D_191244((*frange).n, ((NI) 1));
					LOC172 = 0;
					LOC172 = HEX5BHEX5D_191244(LOC171, ((NI) 0));
					LOC173 = 0;
					LOC173 = HEX5BHEX5D_191244(LOC172, ((NI) 1));
					rangestatict = (*LOC173).typ;
					LOC174 = 0;
					LOC174 = (Ttypeseq190845*) newSeq((&NTI190845), 1);
					memset((void*)LOC175, 0, sizeof(LOC175));
					LOC175[0] = getsystype_238030(((NU8) 31));
					asgnRefNoCycle((void**) (&LOC174->data[0]), LOC175[0]);
					replacementt = newtypewithsons_244807((*c).c, ((NU8) 59), LOC174);
					LOC176 = 0;
					LOC176 = HEX5BHEX5D_191244((*(*a).sons->data[((NI) 0)]).n, ((NI) 1));
					inputupperbound = (*LOC176).kindU.S1.intval;
					asgnRefNoCycle((void**) (&(*replacementt).n), newintnode_191607(((NU8) 6), (NI64)(inputupperbound + IL64(1))));
					put_344289((&(*c).bindings), rangestatict, replacementt);
					result = ((NU8) 7);
					goto BeforeRet;
				}
				LA169: ;
				LOC177 = 0;
				LOC177 = HEX5BHEX5D_191244((*frange).n, ((NI) 1));
				len = tryresolvingstaticexpr_346562(c, LOC177);
				{
					NIM_BOOL LOC180;
					NI64 LOC182;
					LOC180 = 0;
					LOC180 = ((*len).kind == ((NU8) 6));
					if (!(LOC180)) goto LA181;
					LOC182 = 0;
					LOC182 = lengthord_220016(a);
					LOC180 = ((NI64)((*len).kindU.S1.intval + IL64(1)) == LOC182);
					LA181: ;
					if (!LOC180) goto LA183;
					goto BeforeRet;
				}
				goto LA178;
				LA183: ;
				{
					result = ((NU8) 0);
					goto BeforeRet;
				}
				LA178: ;
			}
			goto LA157;
			LA165: ;
			{
				NI64 LOC187;
				NI64 LOC188;
				LOC187 = 0;
				LOC187 = lengthord_220016(frange);
				LOC188 = 0;
				LOC188 = lengthord_220016(a);
				if (!!((LOC187 == LOC188))) goto LA189;
				result = ((NU8) 0);
			}
			goto LA157;
			LA189: ;
			LA157: ;
		}
		break;
		default:
		{
		}
		break;
		}
	}
	break;
	case ((NU8) 27):
	case ((NU8) 48):
	{
		{
			NIM_BOOL LOC195;
			LOC195 = 0;
			LOC195 = ((*f).kind == ((NU8) 48));
			if (!(LOC195)) goto LA196;
			LOC195 = ((*(*f).sons->data[((NI) 0)]).kind == ((NU8) 6));
			LA196: ;
			if (!LOC195) goto LA197;
			goto BeforeRet;
		}
		LA197: ;
		switch ((*a).kind) {
		case ((NU8) 27):
		case ((NU8) 48):
		{
			Ttype190849* LOC200;
			Ttype190849* LOC201;
			LOC200 = 0;
			LOC200 = base_220039(f);
			LOC201 = 0;
			LOC201 = base_220039(a);
			result = typerel_345064(c, LOC200, LOC201, NIM_TRUE);
			{
				if (!(result < ((NU8) 7))) goto LA204;
				result = ((NU8) 0);
			}
			LA204: ;
		}
		break;
		case ((NU8) 4):
		{
			{
				NIM_BOOL LOC209;
				LOC209 = 0;
				LOC209 = !(((*(*f).sons->data[((NI) 0)]).kind == ((NU8) 12)));
				if (!(LOC209)) goto LA210;
				LOC209 = ((*(*a).sons->data[((NI) 1)]).kind == ((NU8) 3));
				LA210: ;
				if (!LOC209) goto LA211;
				result = ((NU8) 3);
			}
			goto LA207;
			LA211: ;
			{
				Ttype190849* LOC214;
				NU8 LOC215;
				LOC214 = 0;
				LOC214 = base_220039(f);
				LOC215 = 0;
				LOC215 = typerel_345064(c, LOC214, (*a).sons->data[((NI) 1)], NIM_TRUE);
				if (!(((NU8) 7) <= LOC215)) goto LA216;
				result = ((NU8) 3);
			}
			goto LA207;
			LA216: ;
			LA207: ;
		}
		break;
		case ((NU8) 16):
		{
			{
				NIM_BOOL LOC221;
				LOC221 = 0;
				LOC221 = !(((*(*f).sons->data[((NI) 0)]).kind == ((NU8) 12)));
				if (!(LOC221)) goto LA222;
				LOC221 = ((*(*a).sons->data[((NI) 1)]).kind == ((NU8) 3));
				LA222: ;
				if (!LOC221) goto LA223;
				result = ((NU8) 3);
			}
			goto LA219;
			LA223: ;
			{
				Ttype190849* LOC226;
				NU8 LOC227;
				LOC226 = 0;
				LOC226 = base_220039(f);
				LOC227 = 0;
				LOC227 = typerel_345064(c, LOC226, (*a).sons->data[((NI) 1)], NIM_TRUE);
				if (!(((NU8) 7) <= LOC227)) goto LA228;
				result = ((NU8) 1);
			}
			goto LA219;
			LA228: ;
			LA219: ;
		}
		break;
		case ((NU8) 24):
		{
			{
				NIM_BOOL LOC233;
				LOC233 = 0;
				LOC233 = !(((*(*f).sons->data[((NI) 0)]).kind == ((NU8) 12)));
				if (!(LOC233)) goto LA234;
				LOC233 = ((*(*a).sons->data[((NI) 0)]).kind == ((NU8) 3));
				LA234: ;
				if (!LOC233) goto LA235;
				result = ((NU8) 1);
			}
			goto LA231;
			LA235: ;
			{
				Ttype190849* LOC238;
				NU8 LOC239;
				LOC238 = 0;
				LOC238 = base_220039(f);
				LOC239 = 0;
				LOC239 = typerel_345064(c, LOC238, (*a).sons->data[((NI) 0)], NIM_TRUE);
				if (!(((NU8) 7) <= LOC239)) goto LA240;
				result = ((NU8) 1);
			}
			goto LA231;
			LA240: ;
			LA231: ;
		}
		break;
		default:
		{
		}
		break;
		}
	}
	break;
	case ((NU8) 24):
	{
		switch ((*a).kind) {
		case ((NU8) 24):
		{
			{
				NIM_BOOL LOC247;
				LOC247 = 0;
				LOC247 = !(((*(*f).sons->data[((NI) 0)]).kind == ((NU8) 12)));
				if (!(LOC247)) goto LA248;
				LOC247 = ((*(*a).sons->data[((NI) 0)]).kind == ((NU8) 3));
				LA248: ;
				if (!LOC247) goto LA249;
				result = ((NU8) 3);
			}
			goto LA245;
			LA249: ;
			{
				result = typerel_345064(c, (*f).sons->data[((NI) 0)], (*a).sons->data[((NI) 0)], NIM_TRUE);
				{
					if (!(result < ((NU8) 7))) goto LA254;
					result = ((NU8) 0);
				}
				goto LA252;
				LA254: ;
				{
					NIM_BOOL LOC257;
					LOC257 = 0;
					LOC257 = (((*f).flags &(1<<((((NU8) 16))&31)))!=0);
					if (!(LOC257)) goto LA258;
					LOC257 = !((((*a).flags &(1<<((((NU8) 16))&31)))!=0));
					LA258: ;
					if (!LOC257) goto LA259;
					result = ((NU8) 1);
				}
				goto LA252;
				LA259: ;
				LA252: ;
			}
			LA245: ;
		}
		break;
		case ((NU8) 5):
		{
			result = allowsnil_345833(f);
		}
		break;
		default:
		{
		}
		break;
		}
	}
	break;
	case ((NU8) 15):
	{
		{
			NIM_BOOL LOC266;
			Ttype190849* x;
			LOC266 = 0;
			LOC266 = isordinaltype_220093(a);
			if (!LOC266) goto LA267;
			{
				if (!((*a).kind == ((NU8) 15))) goto LA271;
				x = (*a).sons->data[((NI) 0)];
			}
			goto LA269;
			LA271: ;
			{
				x = a;
			}
			LA269: ;
			{
				if (!((*(*f).sons->data[((NI) 0)]).kind == ((NU8) 0))) goto LA276;
				result = ((NU8) 7);
			}
			goto LA274;
			LA276: ;
			{
				result = typerel_345064(c, (*f).sons->data[((NI) 0)], x, NIM_TRUE);
				{
					if (!(result < ((NU8) 7))) goto LA281;
					result = ((NU8) 0);
				}
				LA281: ;
			}
			LA274: ;
		}
		goto LA264;
		LA267: ;
		{
			if (!((*a).kind == ((NU8) 12))) goto LA284;
			result = ((NU8) 7);
		}
		goto LA264;
		LA284: ;
		LA264: ;
	}
	break;
	case ((NU8) 30):
	{
		internalerror_165218(((NimStringDesc*) &TMP2640));
	}
	break;
	case ((NU8) 5):
	{
		{
			if (!((*a).kind == (*f).kind)) goto LA290;
			result = ((NU8) 9);
		}
		LA290: ;
	}
	break;
	case ((NU8) 18):
	{
		{
			if (!((*a).kind == ((NU8) 18))) goto LA295;
			result = recordrel_345668(c, f, a);
		}
		LA295: ;
	}
	break;
	case ((NU8) 17):
	{
		{
			if (!((*a).kind == ((NU8) 17))) goto LA300;
			{
				NIM_BOOL LOC304;
				LOC304 = 0;
				LOC304 = sameobjecttypes_225785(f, a);
				if (!LOC304) goto LA305;
				result = ((NU8) 9);
			}
			goto LA302;
			LA305: ;
			{
				NI depth;
				depth = isobjectsubtype_345352(a, f);
				{
					if (!(((NI) 0) < depth)) goto LA310;
					(*c).inheritancepenalty += depth;
					result = ((NU8) 3);
				}
				LA310: ;
			}
			LA302: ;
		}
		LA300: ;
	}
	break;
	case ((NU8) 13):
	{
		{
			NIM_BOOL LOC315;
			LOC315 = 0;
			LOC315 = ((*a).kind == ((NU8) 13));
			if (!(LOC315)) goto LA316;
			LOC315 = samedistincttypes_225844(f, a);
			LA316: ;
			if (!LOC315) goto LA317;
			result = ((NU8) 9);
		}
		goto LA313;
		LA317: ;
		{
			Ttype190849* LOC322;
			if (!(*c).coercedistincts) goto LA320;
			LOC322 = 0;
			LOC322 = base_220039(f);
			result = typerel_345064(c, LOC322, a, NIM_TRUE);
		}
		goto LA313;
		LA320: ;
		LA313: ;
	}
	break;
	case ((NU8) 19):
	{
		{
			if (!((*a).kind == ((NU8) 19))) goto LA326;
			{
				NIM_BOOL LOC330;
				LOC330 = 0;
				LOC330 = !(((*(*f).sons->data[((NI) 0)]).kind == ((NU8) 12)));
				if (!(LOC330)) goto LA331;
				LOC330 = ((*(*a).sons->data[((NI) 0)]).kind == ((NU8) 3));
				LA331: ;
				if (!LOC330) goto LA332;
				result = ((NU8) 3);
			}
			goto LA328;
			LA332: ;
			{
				result = typerel_345064(c, (*f).sons->data[((NI) 0)], (*a).sons->data[((NI) 0)], NIM_TRUE);
				{
					if (!(result <= ((NU8) 1))) goto LA337;
					result = ((NU8) 0);
				}
				LA337: ;
			}
			LA328: ;
		}
		LA326: ;
	}
	break;
	case ((NU8) 21):
	case ((NU8) 22):
	{
		{
			Ttype190849* LOC359;
			Ttype190849* LOC360;
			if (!((*a).kind == (*f).kind)) goto LA342;
			{
				NI LOC346;
				NI LOC347;
				LOC346 = 0;
				LOC346 = len_193377(a);
				LOC347 = 0;
				LOC347 = len_193377(f);
				if (!(LOC346 < LOC347)) goto LA348;
				result = ((NU8) 0);
				goto BeforeRet;
			}
			LA348: ;
			{
				NI i_347412;
				NI HEX3Atmp_348553;
				NI LOC351;
				NI res_348556;
				i_347412 = 0;
				HEX3Atmp_348553 = 0;
				LOC351 = 0;
				LOC351 = len_193377(f);
				HEX3Atmp_348553 = (NI)(LOC351 - ((NI) 2));
				res_348556 = ((NI) 0);
				{
					while (1) {
						if (!(res_348556 <= HEX3Atmp_348553)) goto LA353;
						i_347412 = res_348556;
						{
							NU8 LOC356;
							LOC356 = 0;
							LOC356 = typerel_345064(c, (*f).sons->data[i_347412], (*a).sons->data[i_347412], NIM_TRUE);
							if (!(LOC356 == ((NU8) 0))) goto LA357;
							result = ((NU8) 0);
							goto BeforeRet;
						}
						LA357: ;
						res_348556 += ((NI) 1);
					} LA353: ;
				}
			}
			LOC359 = 0;
			LOC359 = lastson_193442(f);
			LOC360 = 0;
			LOC360 = lastson_193442(a);
			result = typerel_345064(c, LOC359, LOC360, NIM_TRUE);
			{
				if (!(result <= ((NU8) 1))) goto LA363;
				result = ((NU8) 0);
			}
			goto LA361;
			LA363: ;
			{
				NIM_BOOL LOC366;
				LOC366 = 0;
				LOC366 = (((*f).flags &(1<<((((NU8) 16))&31)))!=0);
				if (!(LOC366)) goto LA367;
				LOC366 = !((((*a).flags &(1<<((((NU8) 16))&31)))!=0));
				LA367: ;
				if (!LOC366) goto LA368;
				result = ((NU8) 1);
			}
			goto LA361;
			LA368: ;
			LA361: ;
		}
		goto LA340;
		LA342: ;
		{
			if (!((*a).kind == ((NU8) 5))) goto LA371;
			result = allowsnil_345833(f);
		}
		goto LA340;
		LA371: ;
		{
		}
		LA340: ;
	}
	break;
	case ((NU8) 25):
	{
		result = proctyperel_345936(c, f, a);
		{
			NIM_BOOL LOC377;
			NIM_BOOL LOC378;
			LOC377 = 0;
			LOC378 = 0;
			LOC378 = !((result == ((NU8) 0)));
			if (!(LOC378)) goto LA379;
			LOC378 = (((*f).flags &(1<<((((NU8) 16))&31)))!=0);
			LA379: ;
			LOC377 = LOC378;
			if (!(LOC377)) goto LA380;
			LOC377 = !((((*a).flags &(1<<((((NU8) 16))&31)))!=0));
			LA380: ;
			if (!LOC377) goto LA381;
			result = ((NU8) 1);
		}
		LA381: ;
	}
	break;
	case ((NU8) 26):
	{
		switch ((*a).kind) {
		case ((NU8) 26):
		{
			{
				NIM_BOOL LOC387;
				LOC387 = 0;
				LOC387 = (((*f).flags &(1<<((((NU8) 16))&31)))!=0);
				if (!(LOC387)) goto LA388;
				LOC387 = !((((*a).flags &(1<<((((NU8) 16))&31)))!=0));
				LA388: ;
				if (!LOC387) goto LA389;
				result = ((NU8) 1);
			}
			goto LA385;
			LA389: ;
			{
				result = ((NU8) 9);
			}
			LA385: ;
		}
		break;
		case ((NU8) 5):
		{
			result = allowsnil_345833(f);
		}
		break;
		case ((NU8) 25):
		{
			{
				if (!!(((*a).callconv == ((NU8) 8)))) goto LA396;
				result = ((NU8) 1);
			}
			LA396: ;
		}
		break;
		case ((NU8) 21):
		{
			{
				NI LOC401;
				LOC401 = 0;
				LOC401 = len_193377(a);
				if (!(LOC401 == ((NI) 1))) goto LA402;
				result = ((NU8) 1);
			}
			LA402: ;
		}
		break;
		case ((NU8) 29):
		{
			result = ((NU8) 1);
		}
		break;
		default:
		{
		}
		break;
		}
	}
	break;
	case ((NU8) 28):
	{
		switch ((*a).kind) {
		case ((NU8) 28):
		{
			{
				NIM_BOOL LOC410;
				LOC410 = 0;
				LOC410 = (((*f).flags &(1<<((((NU8) 16))&31)))!=0);
				if (!(LOC410)) goto LA411;
				LOC410 = !((((*a).flags &(1<<((((NU8) 16))&31)))!=0));
				LA411: ;
				if (!LOC410) goto LA412;
				result = ((NU8) 1);
			}
			goto LA408;
			LA412: ;
			{
				result = ((NU8) 9);
			}
			LA408: ;
		}
		break;
		case ((NU8) 5):
		{
			result = allowsnil_345833(f);
		}
		break;
		default:
		{
		}
		break;
		}
	}
	break;
	case ((NU8) 29):
	{
		switch ((*a).kind) {
		case ((NU8) 29):
		{
			{
				NIM_BOOL LOC421;
				LOC421 = 0;
				LOC421 = (((*f).flags &(1<<((((NU8) 16))&31)))!=0);
				if (!(LOC421)) goto LA422;
				LOC421 = !((((*a).flags &(1<<((((NU8) 16))&31)))!=0));
				LA422: ;
				if (!LOC421) goto LA423;
				result = ((NU8) 1);
			}
			goto LA419;
			LA423: ;
			{
				result = ((NU8) 9);
			}
			LA419: ;
		}
		break;
		case ((NU8) 5):
		{
			result = allowsnil_345833(f);
		}
		break;
		case ((NU8) 28):
		{
			result = ((NU8) 1);
		}
		break;
		case ((NU8) 21):
		{
			{
				NIM_BOOL LOC431;
				NI LOC432;
				LOC431 = 0;
				LOC432 = 0;
				LOC432 = len_193377(a);
				LOC431 = (LOC432 == ((NI) 1));
				if (!(LOC431)) goto LA433;
				LOC431 = ((*(*a).sons->data[((NI) 0)]).kind == ((NU8) 2));
				LA433: ;
				if (!LOC431) goto LA434;
				result = ((NU8) 1);
			}
			LA434: ;
		}
		break;
		case ((NU8) 16):
		{
			{
				NIM_BOOL LOC439;
				NIM_BOOL LOC440;
				NI64 LOC441;
				Ttype190849* LOC443;
				LOC439 = 0;
				LOC440 = 0;
				LOC441 = 0;
				LOC441 = firstord_220004((*a).sons->data[((NI) 0)]);
				LOC440 = (LOC441 == IL64(0));
				if (!(LOC440)) goto LA442;
				LOC443 = 0;
				LOC443 = skiptypes_194167((*a).sons->data[((NI) 0)], 1048576);
				LOC440 = ((IL64(66571993088) &(IL64(1)<<(((*LOC443).kind)&IL64(63))))!=0);
				LA442: ;
				LOC439 = LOC440;
				if (!(LOC439)) goto LA444;
				LOC439 = ((*(*a).sons->data[((NI) 1)]).kind == ((NU8) 2));
				LA444: ;
				if (!LOC439) goto LA445;
				result = ((NU8) 1);
			}
			LA445: ;
		}
		break;
		default:
		{
		}
		break;
		}
	}
	break;
	case ((NU8) 3):
	{
		{
			if (!((*a).kind == ((NU8) 3))) goto LA451;
			result = ((NU8) 9);
		}
		LA451: ;
	}
	break;
	case ((NU8) 11):
	{
		Ttype190849* roota;
		Ttype190849* rootf;
		roota = skipgenericalias_226119(a);
		rootf = skipgenericalias_226119(f);
		{
			NIM_BOOL LOC456;
			Ttype190849* LOC458;
			Ttype190849* LOC459;
			LOC456 = 0;
			LOC456 = ((*a).kind == ((NU8) 11));
			if (!(LOC456)) goto LA457;
			LOC458 = 0;
			LOC458 = base_220039(roota);
			LOC459 = 0;
			LOC459 = base_220039(rootf);
			LOC456 = (LOC458 == LOC459);
			LA457: ;
			if (!LOC456) goto LA460;
			{
				NI i_347629;
				NI HEX3Atmp_348561;
				NI LOC463;
				NI res_348564;
				i_347629 = 0;
				HEX3Atmp_348561 = 0;
				LOC463 = 0;
				LOC463 = sonslen_193351(rootf);
				HEX3Atmp_348561 = (NI)(LOC463 - ((NI) 2));
				res_348564 = ((NI) 1);
				{
					while (1) {
						Ttype190849* ff;
						Ttype190849* aa;
						if (!(res_348564 <= HEX3Atmp_348561)) goto LA465;
						i_347629 = res_348564;
						ff = (*rootf).sons->data[i_347629];
						aa = (*roota).sons->data[i_347629];
						result = typerel_345064(c, ff, aa, NIM_TRUE);
						{
							if (!(result == ((NU8) 0))) goto LA468;
							goto BeforeRet;
						}
						LA468: ;
						{
							NIM_BOOL LOC472;
							LOC472 = 0;
							LOC472 = ((*ff).kind == ((NU8) 20));
							if (!(LOC472)) goto LA473;
							LOC472 = !((result == ((NU8) 9)));
							LA473: ;
							if (!LOC472) goto LA474;
							result = ((NU8) 0);
							goto BeforeRet;
						}
						LA474: ;
						res_348564 += ((NI) 1);
					} LA465: ;
				}
			}
		}
		goto LA454;
		LA460: ;
		{
			Ttype190849* LOC477;
			LOC477 = 0;
			LOC477 = lastson_193442(f);
			result = typerel_345064(c, LOC477, a, NIM_TRUE);
		}
		LA454: ;
	}
	break;
	case ((NU8) 10):
	{
		Ttype190849* prev_347660;
		Tidobj167015* LOC479;
		TNimObject* LOC480;
		LOC479 = 0;
		LOC479 = &f->Sup;
		LOC480 = 0;
		LOC480 = idtableget_198182((*c).bindings, LOC479);
		prev_347660 = ((Ttype190849*) (LOC480));
		{
			Ttype190849* ff;
			if (!(prev_347660 == NIM_NIL)) goto LA483;
			{
				NIM_BOOL LOC487;
				LOC487 = 0;
				LOC487 = ((*a).kind == ((NU8) 11));
				if (!(LOC487)) goto LA488;
				LOC487 = ((*a).sons->data[((NI) 0)] == f);
				LA488: ;
				if (!LOC487) goto LA489;
				{
					Ttype190849* bound_347694;
					Ttype190849* LOC495;
					if (!dobind) goto LA493;
					LOC495 = 0;
					LOC495 = skiptypes_194167(aorig, 1048576);
					bound_347694 = skipintlit_238698(LOC495);
					{
						if (!dobind) goto LA498;
						put_344289((&(*c).bindings), f, bound_347694);
					}
					LA498: ;
				}
				LA493: ;
				result = ((NU8) 7);
				goto BeforeRet;
			}
			LA489: ;
			ff = lastson_193442(f);
			{
				if (!!((ff == NIM_NIL))) goto LA502;
				result = typerel_345064(c, ff, a, NIM_TRUE);
			}
			LA502: ;
		}
		goto LA481;
		LA483: ;
		{
			result = typerel_345064(c, prev_347660, a, NIM_TRUE);
			goto BeforeRet;
		}
		LA481: ;
	}
	break;
	case ((NU8) 9):
	{
		Ttype190849* x_347710;
		x_347710 = skipgenericalias_226119(a);
		{
			NIM_BOOL LOC508;
			LOC508 = 0;
			LOC508 = ((*x_347710).kind == ((NU8) 9));
			if (LOC508) goto LA509;
			LOC508 = !(((*(*f).sons->data[((NI) 0)]).kind == ((NU8) 10)));
			LA509: ;
			if (!LOC508) goto LA510;
		}
		goto LA506;
		LA510: ;
		{
			NIM_BOOL LOC513;
			NIM_BOOL LOC514;
			NI LOC517;
			NI LOC518;
			LOC513 = 0;
			LOC514 = 0;
			LOC514 = ((*x_347710).kind == ((NU8) 11));
			if (!(LOC514)) goto LA515;
			LOC514 = ((*f).sons->data[((NI) 0)] == (*x_347710).sons->data[((NI) 0)]);
			LA515: ;
			LOC513 = LOC514;
			if (!(LOC513)) goto LA516;
			LOC517 = 0;
			LOC517 = sonslen_193351(x_347710);
			LOC518 = 0;
			LOC518 = sonslen_193351(f);
			LOC513 = ((NI)(LOC517 - ((NI) 1)) == LOC518);
			LA516: ;
			if (!LOC513) goto LA519;
			{
				NI i_347761;
				NI HEX3Atmp_348569;
				NI LOC522;
				NI res_348572;
				i_347761 = 0;
				HEX3Atmp_348569 = 0;
				LOC522 = 0;
				LOC522 = sonslen_193351(f);
				HEX3Atmp_348569 = (NI)(LOC522 - ((NI) 1));
				res_348572 = ((NI) 1);
				{
					while (1) {
						if (!(res_348572 <= HEX3Atmp_348569)) goto LA524;
						i_347761 = res_348572;
						{
							if (!((*(*x_347710).sons->data[i_347761]).kind == ((NU8) 12))) goto LA527;
							internalerror_165218(((NimStringDesc*) &TMP2644));
						}
						goto LA525;
						LA527: ;
						{
							NU8 LOC530;
							LOC530 = 0;
							LOC530 = typerel_345064(c, (*f).sons->data[i_347761], (*x_347710).sons->data[i_347761], NIM_TRUE);
							if (!(LOC530 <= ((NU8) 3))) goto LA531;
							goto BeforeRet;
						}
						goto LA525;
						LA531: ;
						LA525: ;
						res_348572 += ((NI) 1);
					} LA524: ;
				}
			}
			result = ((NU8) 7);
		}
		goto LA506;
		LA519: ;
		{
			Ttype190849* genericbody;
			genericbody = (*f).sons->data[((NI) 0)];
			result = typerel_345064(c, genericbody, x_347710, NIM_TRUE);
			{
				if (!!((result == ((NU8) 0)))) goto LA536;
				{
					NI i_347802;
					NI HEX3Atmp_348577;
					NI LOC539;
					NI res_348580;
					i_347802 = 0;
					HEX3Atmp_348577 = 0;
					LOC539 = 0;
					LOC539 = sonslen_193351(f);
					HEX3Atmp_348577 = (NI)(LOC539 - ((NI) 1));
					res_348580 = ((NI) 1);
					{
						while (1) {
							Ttype190849* x;
							Tidobj167015* LOC542;
							TNimObject* LOC543;
							if (!(res_348580 <= HEX3Atmp_348577)) goto LA541;
							i_347802 = res_348580;
							LOC542 = 0;
							LOC542 = &(*genericbody).sons->data[(NI)(i_347802 - ((NI) 1))]->Sup;
							LOC543 = 0;
							LOC543 = idtableget_198182((*c).bindings, LOC542);
							x = ((Ttype190849*) (LOC543));
							{
								if (!(x == NIM_NIL)) goto LA546;
							}
							goto LA544;
							LA546: ;
							{
								if (!((4608 &(IL64(1)<<(((*x).kind)&IL64(63))))!=0)) goto LA549;
								internalerror_165218(((NimStringDesc*) &TMP2644));
							}
							goto LA544;
							LA549: ;
							{
								put_344289((&(*c).bindings), (*f).sons->data[i_347802], x);
							}
							LA544: ;
							res_348580 += ((NI) 1);
						} LA541: ;
					}
				}
			}
			LA536: ;
		}
		LA506: ;
	}
	break;
	case ((NU8) 55):
	{
		Ttype190849* prev_347829;
		Tidobj167015* LOC553;
		TNimObject* LOC554;
		LOC553 = 0;
		LOC553 = &f->Sup;
		LOC554 = 0;
		LOC554 = idtableget_198182((*c).bindings, LOC553);
		prev_347829 = ((Ttype190849*) (LOC554));
		{
			if (!(prev_347829 == NIM_NIL)) goto LA557;
			result = ((NU8) 9);
			{
				Ttype190849* branch_347851;
				Ttypeseq190845* HEX3Atmp_348585;
				NI i_348588;
				NI L_348590;
				branch_347851 = 0;
				HEX3Atmp_348585 = 0;
				HEX3Atmp_348585 = (*f).sons;
				i_348588 = ((NI) 0);
				L_348590 = (HEX3Atmp_348585 ? HEX3Atmp_348585->Sup.len : 0);
				{
					while (1) {
						NU8 x;
						if (!(i_348588 < L_348590)) goto LA561;
						branch_347851 = HEX3Atmp_348585->data[i_348588];
						x = typerel_345064(c, branch_347851, aorig, NIM_TRUE);
						{
							if (!(x < ((NU8) 3))) goto LA564;
							result = ((NU8) 0);
							goto BeforeRet;
						}
						LA564: ;
						{
							if (!(x < result)) goto LA568;
							result = x;
						}
						LA568: ;
						i_348588 += ((NI) 1);
					} LA561: ;
				}
			}
			{
				Ttype190849* bound_347872;
				Ttype190849* LOC574;
				if (!dobind) goto LA572;
				LOC574 = 0;
				LOC574 = skiptypes_194167(aorig, 1048576);
				bound_347872 = skipintlit_238698(LOC574);
				{
					if (!dobind) goto LA577;
					put_344289((&(*c).bindings), f, bound_347872);
				}
				LA577: ;
			}
			LA572: ;
			goto BeforeRet;
		}
		goto LA555;
		LA557: ;
		{
			result = typerel_345064(c, prev_347829, a, NIM_TRUE);
			goto BeforeRet;
		}
		LA555: ;
	}
	break;
	case ((NU8) 56):
	{
		Ttype190849* prev_347876;
		Tidobj167015* LOC581;
		TNimObject* LOC582;
		LOC581 = 0;
		LOC581 = &f->Sup;
		LOC582 = 0;
		LOC582 = idtableget_198182((*c).bindings, LOC581);
		prev_347876 = ((Ttype190849*) (LOC582));
		{
			if (!(prev_347876 == NIM_NIL)) goto LA585;
			result = ((NU8) 0);
			{
				Ttype190849* branch_347898;
				Ttypeseq190845* HEX3Atmp_348592;
				NI i_348595;
				NI L_348597;
				branch_347898 = 0;
				HEX3Atmp_348592 = 0;
				HEX3Atmp_348592 = (*f).sons;
				i_348595 = ((NI) 0);
				L_348597 = (HEX3Atmp_348592 ? HEX3Atmp_348592->Sup.len : 0);
				{
					while (1) {
						NU8 x;
						if (!(i_348595 < L_348597)) goto LA589;
						branch_347898 = HEX3Atmp_348592->data[i_348595];
						x = typerel_345064(c, branch_347898, aorig, NIM_TRUE);
						{
							if (!(result < x)) goto LA592;
							result = x;
						}
						LA592: ;
						i_348595 += ((NI) 1);
					} LA589: ;
				}
			}
			{
				if (!(((NU8) 3) <= result)) goto LA596;
				{
					Ttype190849* bound_347919;
					Ttype190849* LOC602;
					if (!dobind) goto LA600;
					LOC602 = 0;
					LOC602 = skiptypes_194167(aorig, 1048576);
					bound_347919 = skipintlit_238698(LOC602);
					{
						if (!dobind) goto LA605;
						put_344289((&(*c).bindings), f, bound_347919);
					}
					LA605: ;
				}
				LA600: ;
				goto BeforeRet;
			}
			goto LA594;
			LA596: ;
			{
				result = ((NU8) 0);
			}
			LA594: ;
		}
		goto LA583;
		LA585: ;
		{
			result = typerel_345064(c, prev_347876, a, NIM_TRUE);
			goto BeforeRet;
		}
		LA583: ;
	}
	break;
	case ((NU8) 57):
	{
		Ttype190849* prev_347923;
		Tidobj167015* LOC610;
		TNimObject* LOC611;
		LOC610 = 0;
		LOC610 = &f->Sup;
		LOC611 = 0;
		LOC611 = idtableget_198182((*c).bindings, LOC610);
		prev_347923 = ((Ttype190849*) (LOC611));
		{
			if (!(prev_347923 == NIM_NIL)) goto LA614;
			{
				Ttype190849* branch_347945;
				Ttypeseq190845* HEX3Atmp_348599;
				NI i_348602;
				NI L_348604;
				branch_347945 = 0;
				HEX3Atmp_348599 = 0;
				HEX3Atmp_348599 = (*f).sons;
				i_348602 = ((NI) 0);
				L_348604 = (HEX3Atmp_348599 ? HEX3Atmp_348599->Sup.len : 0);
				{
					while (1) {
						if (!(i_348602 < L_348604)) goto LA618;
						branch_347945 = HEX3Atmp_348599->data[i_348602];
						{
							NU8 LOC621;
							LOC621 = 0;
							LOC621 = typerel_345064(c, branch_347945, aorig, NIM_TRUE);
							if (!!((LOC621 == ((NU8) 0)))) goto LA622;
							result = ((NU8) 0);
							goto BeforeRet;
						}
						LA622: ;
						i_348602 += ((NI) 1);
					} LA618: ;
				}
			}
			{
				Ttype190849* bound_347956;
				Ttype190849* LOC628;
				if (!dobind) goto LA626;
				LOC628 = 0;
				LOC628 = skiptypes_194167(aorig, 1048576);
				bound_347956 = skipintlit_238698(LOC628);
				{
					if (!dobind) goto LA631;
					put_344289((&(*c).bindings), f, bound_347956);
				}
				LA631: ;
			}
			LA626: ;
			result = ((NU8) 7);
			goto BeforeRet;
		}
		goto LA612;
		LA614: ;
		{
			result = typerel_345064(c, prev_347923, a, NIM_TRUE);
			goto BeforeRet;
		}
		LA612: ;
	}
	break;
	case ((NU8) 58):
	{
		Ttype190849* prev_347960;
		Tidobj167015* LOC635;
		TNimObject* LOC636;
		LOC635 = 0;
		LOC635 = &f->Sup;
		LOC636 = 0;
		LOC636 = idtableget_198182((*c).bindings, LOC635);
		prev_347960 = ((Ttype190849*) (LOC636));
		{
			Ttype190849* concrete;
			if (!(prev_347960 == NIM_NIL)) goto LA639;
			concrete = concretetype_345074((&(*c)), a);
			{
				NIM_BOOL LOC643;
				LOC643 = 0;
				LOC643 = !((concrete == NIM_NIL));
				if (!(LOC643)) goto LA644;
				LOC643 = dobind;
				LA644: ;
				if (!LOC643) goto LA645;
				put_344289((&(*c).bindings), f, concrete);
			}
			LA645: ;
			result = ((NU8) 7);
			goto BeforeRet;
		}
		goto LA637;
		LA639: ;
		{
			result = typerel_345064(c, prev_347960, a, NIM_TRUE);
			goto BeforeRet;
		}
		LA637: ;
	}
	break;
	case ((NU8) 51):
	{
		Ttype190849* prev_347988;
		Tidobj167015* LOC649;
		TNimObject* LOC650;
		LOC649 = 0;
		LOC649 = &f->Sup;
		LOC650 = 0;
		LOC650 = idtableget_198182((*c).bindings, LOC649);
		prev_347988 = ((Ttype190849*) (LOC650));
		{
			NU8 targetkind;
			if (!(prev_347988 == NIM_NIL)) goto LA653;
			targetkind = (*(*f).sons->data[((NI) 0)]).kind;
			{
				NIM_BOOL LOC657;
				Ttype190849* LOC658;
				NIM_BOOL LOC660;
				LOC657 = 0;
				LOC658 = 0;
				LOC658 = skiptypes_194167(a, 1050624);
				LOC657 = (targetkind == (*LOC658).kind);
				if (LOC657) goto LA659;
				LOC660 = 0;
				LOC660 = ((100663296 &(IL64(1)<<((targetkind)&IL64(63))))!=0);
				if (!(LOC660)) goto LA661;
				LOC660 = ((*a).kind == ((NU8) 5));
				LA661: ;
				LOC657 = LOC660;
				LA659: ;
				if (!LOC657) goto LA662;
				put_344289((&(*c).bindings), f, a);
				result = ((NU8) 7);
				goto BeforeRet;
			}
			goto LA655;
			LA662: ;
			{
				result = ((NU8) 0);
				goto BeforeRet;
			}
			LA655: ;
		}
		goto LA651;
		LA653: ;
		{
			result = typerel_345064(c, prev_347988, a, NIM_TRUE);
			goto BeforeRet;
		}
		LA651: ;
	}
	break;
	case ((NU8) 52):
	case ((NU8) 53):
	{
		Ttype190849* prev_348034;
		Tidobj167015* LOC667;
		TNimObject* LOC668;
		LOC667 = 0;
		LOC667 = &f->Sup;
		LOC668 = 0;
		LOC668 = idtableget_198182((*c).bindings, LOC667);
		prev_348034 = ((Ttype190849*) (LOC668));
		{
			if (!(prev_348034 == NIM_NIL)) goto LA671;
			result = matchusertypeclass_346249((*c).c, c, f, aorig);
			{
				if (!(result == ((NU8) 7))) goto LA675;
				put_344289((&(*c).bindings), f, a);
			}
			LA675: ;
		}
		goto LA669;
		LA671: ;
		{
			result = typerel_345064(c, prev_348034, a, NIM_TRUE);
			goto BeforeRet;
		}
		LA669: ;
	}
	break;
	case ((NU8) 54):
	{
		Ttype190849* prev_348058;
		Tidobj167015* LOC679;
		TNimObject* LOC680;
		LOC679 = 0;
		LOC679 = &f->Sup;
		LOC680 = 0;
		LOC680 = idtableget_198182((*c).bindings, LOC679);
		prev_348058 = ((Ttype190849*) (LOC680));
		{
			if (!(prev_348058 == NIM_NIL)) goto LA683;
			{
				NU8 LOC687;
				LOC687 = 0;
				LOC687 = typerel_345064(c, (*f).sons->data[((NI) 1)], a, NIM_TRUE);
				if (!!((LOC687 == ((NU8) 0)))) goto LA688;
				put_344289((&(*c).bindings), f, a);
				result = ((NU8) 7);
				goto BeforeRet;
			}
			goto LA685;
			LA688: ;
			{
				result = ((NU8) 0);
				goto BeforeRet;
			}
			LA685: ;
		}
		goto LA681;
		LA683: ;
		{
			result = typerel_345064(c, prev_348058, a, NIM_TRUE);
			goto BeforeRet;
		}
		LA681: ;
	}
	break;
	case ((NU8) 12):
	{
		Ttype190849* x;
		Tidobj167015* LOC693;
		TNimObject* LOC694;
		LOC693 = 0;
		LOC693 = &f->Sup;
		LOC694 = 0;
		LOC694 = idtableget_198182((*c).bindings, LOC693);
		x = ((Ttype190849*) (LOC694));
		{
			if (!(x == NIM_NIL)) goto LA697;
			{
				NIM_BOOL LOC701;
				NIM_BOOL LOC702;
				LOC701 = 0;
				LOC702 = 0;
				LOC702 = ((*(*c).callee).kind == ((NU8) 10));
				if (!(LOC702)) goto LA703;
				LOC702 = ((*f).kind == ((NU8) 12));
				LA703: ;
				LOC701 = LOC702;
				if (!(LOC701)) goto LA704;
				LOC701 = !((*c).typedescmatched);
				LA704: ;
				if (!LOC701) goto LA705;
				{
					if (!(((*a).flags &(1<<((((NU8) 25))&31)))!=0)) goto LA709;
					result = ((NU8) 7);
				}
				goto LA707;
				LA709: ;
				{
					if (!((*a).kind == ((NU8) 8))) goto LA712;
					{
						NI LOC716;
						LOC716 = 0;
						LOC716 = sonslen_193351(f);
						if (!(LOC716 == ((NI) 0))) goto LA717;
						result = ((NU8) 7);
					}
					goto LA714;
					LA717: ;
					{
						Ttype190849* aa;
						Ttype190849* LOC733;
						{
							NIM_BOOL LOC722;
							NIM_BOOL LOC723;
							NimStringDesc* LOC727;
							LOC722 = 0;
							LOC723 = 0;
							LOC723 = HEX3DHEX3D_229739((*a).sons, NIM_NIL);
							LOC722 = !(LOC723);
							if (!(LOC722)) goto LA724;
							LOC722 = (((NI) 0) < ((*a).sons ? (*a).sons->Sup.len : 0));
							LA724: ;
							if (!!(LOC722)) goto LA725;
							LOC727 = 0;
							LOC727 = HEX24_165306(TMP2651);
							internalerror_165218(LOC727);
						}
						LA725: ;
						(*c).typedescmatched = NIM_TRUE;
						aa = a;
						{
							while (1) {
								NIM_BOOL LOC730;
								NI LOC732;
								LOC730 = 0;
								LOC730 = ((4352 &(IL64(1)<<(((*aa).kind)&IL64(63))))!=0);
								if (!(LOC730)) goto LA731;
								LOC732 = 0;
								LOC732 = len_193377(aa);
								LOC730 = (((NI) 0) < LOC732);
								LA731: ;
								if (!LOC730) goto LA729;
								aa = lastson_193442(aa);
							} LA729: ;
						}
						LOC733 = 0;
						LOC733 = base_220039(f);
						result = typerel_345064(c, LOC733, aa, NIM_TRUE);
						{
							if (!(((NU8) 7) < result)) goto LA736;
							result = ((NU8) 7);
						}
						LA736: ;
					}
					LA714: ;
				}
				goto LA707;
				LA712: ;
				{
					result = ((NU8) 0);
				}
				LA707: ;
			}
			goto LA699;
			LA705: ;
			{
				{
					NIM_BOOL LOC742;
					NI LOC743;
					Ttype190849* LOC747;
					LOC742 = 0;
					LOC743 = 0;
					LOC743 = sonslen_193351(f);
					LOC742 = (((NI) 0) < LOC743);
					if (!(LOC742)) goto LA744;
					LOC742 = !(((*(*f).sons->data[((NI) 0)]).kind == ((NU8) 0)));
					LA744: ;
					if (!LOC742) goto LA745;
					LOC747 = 0;
					LOC747 = lastson_193442(f);
					result = typerel_345064(c, LOC747, a, NIM_TRUE);
					{
						NIM_BOOL LOC750;
						Ttype190849* concrete;
						LOC750 = 0;
						LOC750 = dobind;
						if (!(LOC750)) goto LA751;
						LOC750 = !(((129 &(1<<((result)&15)))!=0));
						LA751: ;
						if (!LOC750) goto LA752;
						concrete = concretetype_345074((&(*c)), a);
						{
							if (!(concrete == NIM_NIL)) goto LA756;
							result = ((NU8) 0);
							goto BeforeRet;
						}
						LA756: ;
						put_344289((&(*c).bindings), f, concrete);
					}
					LA752: ;
				}
				goto LA740;
				LA745: ;
				{
					result = ((NU8) 7);
				}
				LA740: ;
			}
			LA699: ;
			{
				Ttype190849* concrete;
				if (!(result == ((NU8) 7))) goto LA761;
				concrete = a;
				{
					if (!(((*a).flags &(1<<((((NU8) 25))&31)))!=0)) goto LA765;
					(*(*a).sym).kind = ((NU8) 7);
					(*a).flags &= ~(((NI32)1) << ((((NU8) 25)) % (sizeof(NI32)*8)));
				}
				goto LA763;
				LA765: ;
				{
					concrete = concretetype_345074((&(*c)), a);
					{
						if (!(concrete == NIM_NIL)) goto LA770;
						result = ((NU8) 0);
						goto BeforeRet;
					}
					LA770: ;
				}
				LA763: ;
				{
					if (!dobind) goto LA774;
					put_344289((&(*c).bindings), f, concrete);
				}
				LA774: ;
			}
			goto LA759;
			LA761: ;
			{
				if (!(((NU8) 7) < result)) goto LA777;
				result = ((NU8) 7);
			}
			goto LA759;
			LA777: ;
			LA759: ;
		}
		goto LA695;
		LA697: ;
		{
			if (!((*a).kind == ((NU8) 3))) goto LA780;
			result = ((NU8) 7);
		}
		goto LA695;
		LA780: ;
		{
			if (!((*x).kind == ((NU8) 12))) goto LA783;
			result = ((NU8) 7);
		}
		goto LA695;
		LA783: ;
		{
			result = typerel_345064(c, x, a, NIM_TRUE);
			{
				if (!(((NU8) 7) < result)) goto LA788;
				result = ((NU8) 7);
			}
			LA788: ;
		}
		LA695: ;
	}
	break;
	case ((NU8) 59):
	{
		Ttype190849* prev;
		Tidobj167015* LOC791;
		TNimObject* LOC792;
		LOC791 = 0;
		LOC791 = &f->Sup;
		LOC792 = 0;
		LOC792 = idtableget_198182((*c).bindings, LOC791);
		prev = ((Ttype190849*) (LOC792));
		{
			if (!(prev == NIM_NIL)) goto LA795;
			{
				Ttype190849* LOC801;
				if (!((*aorig).kind == ((NU8) 59))) goto LA799;
				LOC801 = 0;
				LOC801 = lastson_193442(f);
				result = typerel_345064(c, LOC801, a, NIM_TRUE);
				{
					NIM_BOOL LOC804;
					LOC804 = 0;
					LOC804 = !((result == ((NU8) 0)));
					if (!(LOC804)) goto LA805;
					LOC804 = !(((*f).n == NIM_NIL));
					LA805: ;
					if (!LOC804) goto LA806;
					{
						NIM_BOOL LOC810;
						LOC810 = 0;
						LOC810 = exprstructuralequivalent_219149((*f).n, (*aorig).n);
						if (!!(LOC810)) goto LA811;
						result = ((NU8) 0);
					}
					LA811: ;
				}
				LA806: ;
				{
					if (!!((result == ((NU8) 0)))) goto LA815;
					put_344289((&(*c).bindings), f, aorig);
				}
				LA815: ;
			}
			goto LA797;
			LA799: ;
			{
				result = ((NU8) 0);
			}
			LA797: ;
		}
		goto LA793;
		LA795: ;
		{
			if (!((*prev).kind == ((NU8) 59))) goto LA819;
			{
				Ttype190849* LOC825;
				if (!((*aorig).kind == ((NU8) 59))) goto LA823;
				LOC825 = 0;
				LOC825 = lastson_193442(prev);
				result = typerel_345064(c, LOC825, a, NIM_TRUE);
				{
					NIM_BOOL LOC828;
					LOC828 = 0;
					LOC828 = !((result == ((NU8) 0)));
					if (!(LOC828)) goto LA829;
					LOC828 = !(((*prev).n == NIM_NIL));
					LA829: ;
					if (!LOC828) goto LA830;
					{
						NIM_BOOL LOC834;
						LOC834 = 0;
						LOC834 = exprstructuralequivalent_219149((*prev).n, (*aorig).n);
						if (!!(LOC834)) goto LA835;
						result = ((NU8) 0);
					}
					LA835: ;
				}
				LA830: ;
			}
			goto LA821;
			LA823: ;
			{
				result = ((NU8) 0);
			}
			LA821: ;
		}
		goto LA793;
		LA819: ;
		{
			result = ((NU8) 0);
		}
		LA793: ;
	}
	break;
	case ((NU8) 8):
	{
		Ttype190849* prev;
		Tidobj167015* LOC840;
		TNimObject* LOC841;
		LOC840 = 0;
		LOC840 = &f->Sup;
		LOC841 = 0;
		LOC841 = idtableget_198182((*c).bindings, LOC840);
		prev = ((Ttype190849*) (LOC841));
		{
			if (!(prev == NIM_NIL)) goto LA844;
			{
				if (!!(((*a).kind == ((NU8) 8)))) goto LA848;
				result = ((NU8) 0);
				goto BeforeRet;
			}
			LA848: ;
			{
				Ttype190849* LOC852;
				LOC852 = 0;
				LOC852 = base_220039(f);
				if (!((*LOC852).kind == ((NU8) 0))) goto LA853;
				result = ((NU8) 7);
			}
			goto LA850;
			LA853: ;
			{
				Ttype190849* LOC856;
				Ttype190849* LOC857;
				LOC856 = 0;
				LOC856 = base_220039(f);
				LOC857 = 0;
				LOC857 = base_220039(a);
				result = typerel_345064(c, LOC856, LOC857, NIM_TRUE);
			}
			LA850: ;
			{
				if (!!((result == ((NU8) 0)))) goto LA860;
				put_344289((&(*c).bindings), f, a);
			}
			LA860: ;
		}
		goto LA842;
		LA844: ;
		{
			{
				Ttype190849* LOC867;
				if (!(((*f).flags &(1<<((((NU8) 9))&31)))!=0)) goto LA865;
				LOC867 = 0;
				LOC867 = base_220039(prev);
				result = typerel_345064(c, LOC867, a, NIM_TRUE);
			}
			goto LA863;
			LA865: ;
			{
				Ttype190849* LOC871;
				Ttype190849* LOC872;
				if (!((*a).kind == ((NU8) 8))) goto LA869;
				LOC871 = 0;
				LOC871 = base_220039(prev);
				LOC872 = 0;
				LOC872 = base_220039(a);
				result = typerel_345064(c, LOC871, LOC872, NIM_TRUE);
			}
			goto LA863;
			LA869: ;
			{
				result = ((NU8) 0);
			}
			LA863: ;
		}
		LA842: ;
	}
	break;
	case ((NU8) 49):
	{
		{
			NIM_BOOL LOC877;
			NIM_BOOL LOC879;
			Ttype190849* LOC883;
			Ttype190849* LOC884;
			LOC877 = 0;
			LOC877 = ((*a).kind == ((NU8) 49));
			if (LOC877) goto LA878;
			LOC879 = 0;
			LOC879 = ((*a).kind == ((NU8) 25));
			if (!(LOC879)) goto LA880;
			LOC879 = (((*a).flags &(1<<((((NU8) 14))&31)))!=0);
			LA880: ;
			LOC877 = LOC879;
			LA878: ;
			if (!LOC877) goto LA881;
			LOC883 = 0;
			LOC883 = base_220039(f);
			LOC884 = 0;
			LOC884 = base_220039(a);
			result = typerel_345064(c, LOC883, LOC884, NIM_TRUE);
		}
		goto LA875;
		LA881: ;
		{
			result = ((NU8) 0);
		}
		LA875: ;
	}
	break;
	case ((NU8) 7):
	{
		result = ((NU8) 7);
	}
	break;
	case ((NU8) 50):
	{
		result = ((NU8) 9);
	}
	break;
	case ((NU8) 60):
	{
		Tnode190813* reevaluated;
		{
			NIM_BOOL LOC891;
			LOC891 = 0;
			LOC891 = ((*f).n == NIM_NIL);
			if (LOC891) goto LA892;
			LOC891 = ((*(*f).n).kind == ((NU8) 1));
			LA892: ;
			if (!LOC891) goto LA893;
			result = ((NU8) 7);
			goto BeforeRet;
		}
		LA893: ;
		reevaluated = tryresolvingstaticexpr_346562(c, (*f).n);
		switch ((*(*reevaluated).typ).kind) {
		case ((NU8) 8):
		{
			Ttype190849* LOC896;
			LOC896 = 0;
			LOC896 = base_220039((*reevaluated).typ);
			result = typerel_345064(c, a, LOC896, NIM_TRUE);
		}
		break;
		case ((NU8) 59):
		{
			Ttype190849* LOC898;
			LOC898 = 0;
			LOC898 = base_220039((*reevaluated).typ);
			result = typerel_345064(c, a, LOC898, NIM_TRUE);
			{
				NIM_BOOL LOC901;
				LOC901 = 0;
				LOC901 = !((result == ((NU8) 0)));
				if (!(LOC901)) goto LA902;
				LOC901 = !(((*(*reevaluated).typ).n == NIM_NIL));
				LA902: ;
				if (!LOC901) goto LA903;
				{
					NIM_BOOL LOC907;
					LOC907 = 0;
					LOC907 = exprstructuralequivalent_219149((*aorig).n, (*(*reevaluated).typ).n);
					if (!!(LOC907)) goto LA908;
					result = ((NU8) 0);
				}
				LA908: ;
			}
			LA903: ;
		}
		break;
		default:
		{
			localerror_165155((*(*f).n).info, ((NU16) 63), ((NimStringDesc*) &TMP2652));
			result = ((NU8) 0);
		}
		break;
		}
	}
	break;
	case ((NU8) 0):
	{
		{
			if (!((*a).kind == ((NU8) 0))) goto LA914;
			result = ((NU8) 9);
		}
		LA914: ;
	}
	break;
	default:
	{
		NimStringDesc* LOC917;
		LOC917 = 0;
		LOC917 = rawNewString(reprEnum((*f).kind, (&NTI190260))->Sup.len + 19);
appendString(LOC917, ((NimStringDesc*) &TMP2653));
appendString(LOC917, reprEnum((*f).kind, (&NTI190260)));
		internalerror_165218(LOC917);
	}
	break;
	}
	}BeforeRet: ;
	return result;
}

N_NIMCALL(void, incmatches_349036)(Tcandidate344209* m, NU8 r, NI convmatch) {
	switch (r) {
	case ((NU8) 1):
	case ((NU8) 2):
	{
		(*m).convmatches += convmatch;
	}
	break;
	case ((NU8) 3):
	case ((NU8) 4):
	{
		(*m).subtypematches += ((NI) 1);
	}
	break;
	case ((NU8) 7):
	case ((NU8) 5):
	{
		(*m).genericmatches += ((NI) 1);
	}
	break;
	case ((NU8) 8):
	{
		(*m).intconvmatches += ((NI) 256);
	}
	break;
	case ((NU8) 6):
	{
		(*m).convmatches += ((NI) 1);
	}
	break;
	case ((NU8) 9):
	{
		(*m).exactmatches += ((NI) 1);
	}
	break;
	case ((NU8) 0):
	{
	}
	break;
	}
}

N_NIMCALL(NIM_BOOL, isinlineiterator_348999)(Ttype190849* t) {
	NIM_BOOL result;
	NIM_BOOL LOC1;
	NIM_BOOL LOC3;
	Ttype190849* LOC5;
	result = 0;
	LOC1 = 0;
	LOC1 = ((*t).kind == ((NU8) 49));
	if (LOC1) goto LA2;
	LOC3 = 0;
	LOC3 = ((*t).kind == ((NU8) 51));
	if (!(LOC3)) goto LA4;
	LOC5 = 0;
	LOC5 = base_220039(t);
	LOC3 = ((*LOC5).kind == ((NU8) 49));
	LA4: ;
	LOC1 = LOC3;
	LA2: ;
	result = LOC1;
	return result;
}

N_NIMCALL(Ttype190849*, getinstantiatedtype_348724)(Tcontext244023* c, Tnode190813* arg, Tcandidate344209* m, Ttype190849* f) {
	Ttype190849* result;
	Tidobj167015* LOC1;
	TNimObject* LOC2;
	result = 0;
	LOC1 = 0;
	LOC1 = &f->Sup;
	LOC2 = 0;
	LOC2 = idtableget_198182((*m).bindings, LOC1);
	result = ((Ttype190849*) (LOC2));
	{
		if (!(result == NIM_NIL)) goto LA5;
		result = generatetypeinstance_267631(c, (*m).bindings, (*arg).info, f);
	}
	LA5: ;
	{
		if (!(result == NIM_NIL)) goto LA9;
		internalerror_165199((*arg).info, ((NimStringDesc*) &TMP2654));
		result = errortype_245150(c);
	}
	LA9: ;
	return result;
}

N_NIMCALL(Tnode190813*, implicitconv_348761)(NU8 kind, Ttype190849* f, Tnode190813* arg, Tcandidate344209* m, Tcontext244023* c) {
	Tnode190813* result;
	result = 0;
	result = newnodei_192351(kind, (*arg).info);
	{
		NIM_BOOL LOC3;
		LOC3 = 0;
		LOC3 = containsgenerictype_229310(f);
		if (!LOC3) goto LA4;
		{
			if (!!(!(((*m).fauxmatch == ((NU8) 0))))) goto LA8;
			asgnRefNoCycle((void**) (&(*result).typ), getinstantiatedtype_348724(c, arg, m, f));
		}
		goto LA6;
		LA8: ;
		{
			asgnRefNoCycle((void**) (&(*result).typ), errortype_245150(c));
		}
		LA6: ;
	}
	goto LA1;
	LA4: ;
	{
		asgnRefNoCycle((void**) (&(*result).typ), f);
	}
	LA1: ;
	{
		if (!((*result).typ == NIM_NIL)) goto LA14;
		internalerror_165199((*arg).info, ((NimStringDesc*) &TMP2655));
	}
	LA14: ;
	addson_192819(result, emptynode_191807);
	addson_192819(result, arg);
	return result;
}

N_NIMCALL(NIM_BOOL, istracked_353796)(Tlineinfo163338 current, NI tokenlen) {
	NIM_BOOL result;
{	result = 0;
	{
		if (!(current.fileindex == gtrackpos_164500.fileindex)) goto LA3;
		{
			NI16 col;
			if (!(current.line == gtrackpos_164500.line)) goto LA7;
			col = gtrackpos_164500.col;
			{
				NIM_BOOL LOC11;
				LOC11 = 0;
				LOC11 = (current.col <= col);
				if (!(LOC11)) goto LA12;
				LOC11 = (((NI) (col)) <= (NI)((NI)(((NI) (current.col)) + tokenlen) - ((NI) 1)));
				LA12: ;
				if (!LOC11) goto LA13;
				result = NIM_TRUE;
				goto BeforeRet;
			}
			LA13: ;
		}
		LA7: ;
	}
	LA3: ;
	}BeforeRet: ;
	return result;
}

N_NIMCALL(void, findusages_353892)(Tlineinfo163338 info, Tsym190843* s) {
	{
		NIM_BOOL LOC3;
		NimStringDesc* LOC7;
		LOC3 = 0;
		LOC3 = (usagesym_353890 == NIM_NIL);
		if (!(LOC3)) goto LA4;
		LOC3 = istracked_353796(info, ((*(*s).name).s ? (*(*s).name).s->Sup.len : 0));
		LA4: ;
		if (!LOC3) goto LA5;
		asgnRefNoCycle((void**) (&usagesym_353890), s);
		LOC7 = 0;
		LOC7 = symtostr_351005(s, NIM_FALSE, ((NimStringDesc*) &TMP2658));
		suggestwriteln_164066(LOC7);
	}
	goto LA1;
	LA5: ;
	{
		if (!(s == usagesym_353890)) goto LA9;
		{
			NIM_BOOL LOC13;
			NimStringDesc* LOC16;
			LOC13 = 0;
			LOC13 = HEX3DHEX3D_164789(lastlineinfo_353891, info);
			if (!!(LOC13)) goto LA14;
			LOC16 = 0;
			LOC16 = symtostr_350816(s, NIM_FALSE, ((NimStringDesc*) &TMP2658), info);
			suggestwriteln_164066(LOC16);
		}
		LA14: ;
		lastlineinfo_353891 = info;
	}
	goto LA1;
	LA9: ;
	LA1: ;
}

N_NIMCALL(void, finddefinition_353923)(Tlineinfo163338 info, Tsym190843* s) {
{	{
		if (!s == 0) goto LA3;
		goto BeforeRet;
	}
	LA3: ;
	{
		NIM_BOOL LOC7;
		NimStringDesc* LOC10;
		LOC7 = 0;
		LOC7 = istracked_353796(info, ((*(*s).name).s ? (*(*s).name).s->Sup.len : 0));
		if (!LOC7) goto LA8;
		LOC10 = 0;
		LOC10 = symtostr_351005(s, NIM_FALSE, ((NimStringDesc*) &TMP2659));
		suggestwriteln_164066(LOC10);
		suggestquit_164122();
	}
	LA8: ;
	}BeforeRet: ;
}

static N_INLINE(void, suggestsym_353960)(Tlineinfo163338 info, Tsym190843* s) {
	{
		if (!(gidecmd_154115 == ((NU8) 4))) goto LA3;
		findusages_353892(info, s);
	}
	goto LA1;
	LA3: ;
	{
		if (!(gidecmd_154115 == ((NU8) 3))) goto LA6;
		finddefinition_353923(info, s);
	}
	goto LA1;
	LA6: ;
	LA1: ;
}

N_NIMCALL(void, markused_344251)(Tlineinfo163338 info, Tsym190843* s) {
	(*s).flags |= ((NI32)1)<<((((NU8) 0))%(sizeof(NI32)*8));
	{
		if (!!(((1572864 & (*s).flags) == 0))) goto LA3;
		{
			if (!(((*s).flags &(1<<((((NU8) 19))&31)))!=0)) goto LA7;
			message_165188(info, ((NU16) 234), (*(*s).name).s);
		}
		LA7: ;
		{
			if (!(((*s).flags &(1<<((((NU8) 20))&31)))!=0)) goto LA11;
			localerror_165155(info, ((NU16) 221), (*(*s).name).s);
		}
		LA11: ;
	}
	LA3: ;
	suggestsym_353960(info, s);
}

N_NIMCALL(Tnode190813*, userconvmatch_348796)(Tcontext244023* c, Tcandidate344209* m, Ttype190849* f, Ttype190849* a, Tnode190813* arg) {
	Tnode190813* result;
{	result = 0;
	result = NIM_NIL;
	{
		NI i_348825;
		NI HEX3Atmp_348877;
		NI res_348880;
		i_348825 = 0;
		HEX3Atmp_348877 = 0;
		HEX3Atmp_348877 = (NI)(((*c).converters ? (*c).converters->Sup.len : 0) - ((NI) 1));
		res_348880 = ((NI) 0);
		{
			while (1) {
				if (!(res_348880 <= HEX3Atmp_348877)) goto LA3;
				i_348825 = res_348880;
				{
					Ttype190849* src;
					Ttype190849* dest;
					NU8 srca;
					NIM_BOOL destisgeneric;
					NU8 fdest;
					src = (*(*(*c).converters->data[i_348825]).typ).sons->data[((NI) 1)];
					dest = (*(*(*c).converters->data[i_348825]).typ).sons->data[((NI) 0)];
					srca = typerel_345064(m, src, a, NIM_TRUE);
					{
						if (!!(((640 &(1<<((srca)&15)))!=0))) goto LA7;
						goto LA4;
					}
					LA7: ;
					destisgeneric = containsgenerictype_229310(dest);
					{
						if (!destisgeneric) goto LA11;
						dest = generatetypeinstance_267631(c, (*m).bindings, (*arg).info, dest);
					}
					LA11: ;
					fdest = typerel_345064(m, f, dest, NIM_TRUE);
					{
						Tnode190813* s;
						Tnode190813* LOC17;
						NIM_BOOL LOC18;
						if (!((640 &(1<<((fdest)&15)))!=0)) goto LA15;
						markused_344251((*arg).info, (*c).converters->data[i_348825]);
						s = newsymnode_192325((*c).converters->data[i_348825]);
						asgnRefNoCycle((void**) (&(*s).typ), (*(*c).converters->data[i_348825]).typ);
						(*s).info = (*arg).info;
						result = newnodeit_192807(((NU8) 32), (*arg).info, dest);
						addson_192819(result, s);
						LOC17 = 0;
						LOC17 = copytree_195028(arg);
						addson_192819(result, LOC17);
						(*m).convmatches += ((NI) 1);
						LOC18 = 0;
						LOC18 = (srca == ((NU8) 7));
						if (LOC18) goto LA19;
						LOC18 = destisgeneric;
						LA19: ;
						(*m).genericconverter = LOC18;
						goto BeforeRet;
					}
					LA15: ;
				} LA4: ;
				res_348880 += ((NI) 1);
			} LA3: ;
		}
	}
	}BeforeRet: ;
	return result;
}

N_NIMCALL(Tnode190813*, localconvmatch_348902)(Tcontext244023* c, Tcandidate344209* m, Ttype190849* f, Ttype190849* a, Tnode190813* arg) {
	Tnode190813* result;
	Tnode190813* call;
	Tnode190813* LOC11;
	Tnode190813* LOC12;
{	result = 0;
	{
		if (!(*arg).typ == 0) goto LA3;
		result = NIM_NIL;
		goto BeforeRet;
	}
	LA3: ;
	{
		NIM_BOOL LOC7;
		LOC7 = 0;
		LOC7 = (f == (*arg).typ);
		if (!(LOC7)) goto LA8;
		LOC7 = ((*arg).kind == ((NU8) 58));
		LA8: ;
		if (!LOC7) goto LA9;
		result = arg;
		goto BeforeRet;
	}
	LA9: ;
	call = newnodei_192351(((NU8) 27), (*arg).info);
	LOC11 = 0;
	LOC11 = copytree_195028((*f).n);
	add_191164(call, LOC11);
	LOC12 = 0;
	LOC12 = copytree_195028(arg);
	add_191164(call, LOC12);
	result = (*c).semoverloadedcall(c, call, call, 520192);
	{
		NU8 r;
		if (!!((result == NIM_NIL))) goto LA15;
		r = typerel_345064(m, (*f).sons->data[((NI) 0)], (*result).typ, NIM_TRUE);
		{
			if (!(r < ((NU8) 7))) goto LA19;
			result = NIM_NIL;
			goto BeforeRet;
		}
		LA19: ;
		{
			if (!((*result).kind == ((NU8) 27))) goto LA23;
			(*result).kind = ((NU8) 32);
		}
		LA23: ;
		(*m).convmatches += ((NI) 1);
		{
			Ttype190849* LOC29;
			if (!(r == ((NU8) 7))) goto LA27;
			LOC29 = 0;
			LOC29 = base_220039(f);
			asgnRefNoCycle((void**) (&(*result).typ), getinstantiatedtype_348724(c, arg, (&(*m)), LOC29));
		}
		LA27: ;
		(*m).basetypematch = NIM_TRUE;
	}
	LA15: ;
	}BeforeRet: ;
	return result;
}

N_NIMCALL(Tnode190813*, paramtypesmatchaux_349103)(Tcandidate344209* m, Ttype190849* f, Ttype190849* argtype_349108, Tnode190813* argsemantized, Tnode190813* argorig) {
	Tnode190813* result;
	Ttype190849* fmaybestatic;
	Tnode190813* arg;
	Ttype190849* argtype;
	Tcontext244023* c;
	Ttype190849* a;
	NU8 r;
{	result = 0;
	fmaybestatic = skiptypes_194167(f, 8192);
	arg = argsemantized;
	argtype = argtype_349108;
	c = (*m).c;
	{
		if (!(((*fmaybestatic).flags &(1<<((((NU8) 22))&31)))!=0)) goto LA3;
		{
			NIM_BOOL LOC7;
			LOC7 = 0;
			LOC7 = ((*argtype).kind == ((NU8) 12));
			if (!(LOC7)) goto LA8;
			LOC7 = (((*argtype).flags &(1<<((((NU8) 25))&31)))!=0);
			LA8: ;
			if (!LOC7) goto LA9;
			assigntype_193452(argtype, f);
			result = argsemantized;
			goto BeforeRet;
		}
		LA9: ;
		{
			if (!((*argtype).kind == ((NU8) 59))) goto LA13;
			{
				NIM_BOOL LOC17;
				Ttype190849* LOC21;
				LOC17 = 0;
				LOC17 = ((*(*m).callee).kind == ((NU8) 10));
				if (!(LOC17)) goto LA18;
				LOC17 = !((((*argtype).flags &(1<<((((NU8) 23))&31)))!=0));
				LA18: ;
				if (!LOC17) goto LA19;
				LOC21 = 0;
				LOC21 = maketypefromexpr_244726(c, arg);
				result = newnodeit_192807(((NU8) 4), (*argorig).info, LOC21);
				goto BeforeRet;
			}
			LA19: ;
		}
		goto LA11;
		LA13: ;
		{
			Tnode190813* evaluated;
			evaluated = (*c).semtryconstexpr(c, arg);
			{
				TY349187 LOC27;
				if (!!((evaluated == NIM_NIL))) goto LA25;
				asgnRefNoCycle((void**) (&(*arg).typ), newtypes_244218(((NU8) 59), c));
				if ((*(*arg).typ).sons) nimGCunrefNoCycle((*(*arg).typ).sons);
				(*(*arg).typ).sons = (Ttypeseq190845*) newSeqRC1((&NTI190845), 1);
				memset((void*)LOC27, 0, sizeof(LOC27));
				LOC27[0] = (*evaluated).typ;
				asgnRefNoCycle((void**) (&(*(*arg).typ).sons->data[0]), LOC27[0]);
				asgnRefNoCycle((void**) (&(*(*arg).typ).n), evaluated);
				argtype = (*arg).typ;
			}
			LA25: ;
		}
		LA11: ;
	}
	LA3: ;
	{
		if (!(((NI) 0) < (*c).intypeclass)) goto LA30;
		a = skiptypes_194167(argtype, IL64(2305843009213694208));
	}
	goto LA28;
	LA30: ;
	{
		a = argtype;
	}
	LA28: ;
	r = typerel_345064(m, f, a, NIM_TRUE);
	{
		NIM_BOOL LOC35;
		NIM_BOOL LOC36;
		LOC35 = 0;
		LOC36 = 0;
		LOC36 = !((r == ((NU8) 0)));
		if (!(LOC36)) goto LA37;
		LOC36 = !(((*m).calleesym == NIM_NIL));
		LA37: ;
		LOC35 = LOC36;
		if (!(LOC35)) goto LA38;
		LOC35 = ((393216 &(1<<(((*(*m).calleesym).kind)&31)))!=0);
		LA38: ;
		if (!LOC35) goto LA39;
		incmatches_349036(m, r, ((NI) 1));
		{
			if (!((*f).kind == ((NU8) 7))) goto LA43;
			result = arg;
			goto BeforeRet;
		}
		goto LA41;
		LA43: ;
		{
			if (!((*f).kind == ((NU8) 8))) goto LA46;
			result = arg;
			goto BeforeRet;
		}
		goto LA41;
		LA46: ;
		{
			if (!((*f).kind == ((NU8) 59))) goto LA49;
			result = (*(*arg).typ).n;
			goto BeforeRet;
		}
		goto LA41;
		LA49: ;
		{
			result = argsemantized;
			goto BeforeRet;
		}
		LA41: ;
	}
	LA39: ;
	{
		NIM_BOOL LOC54;
		Ttype190849* inlined;
		TY349187 LOC58;
		LOC54 = 0;
		LOC54 = !((r == ((NU8) 0)));
		if (!(LOC54)) goto LA55;
		LOC54 = isinlineiterator_348999(f);
		LA55: ;
		if (!LOC54) goto LA56;
		inlined = newtypes_244218(((NU8) 59), c);
		if ((*inlined).sons) nimGCunrefNoCycle((*inlined).sons);
		(*inlined).sons = (Ttypeseq190845*) newSeqRC1((&NTI190845), 1);
		memset((void*)LOC58, 0, sizeof(LOC58));
		LOC58[0] = argtype;
		asgnRefNoCycle((void**) (&(*inlined).sons->data[0]), LOC58[0]);
		asgnRefNoCycle((void**) (&(*inlined).n), argsemantized);
		put_344289((&(*m).bindings), f, inlined);
		result = argsemantized;
		goto BeforeRet;
	}
	LA56: ;
	switch (r) {
	case ((NU8) 1):
	{
		(*m).convmatches += ((NI) 1);
		result = implicitconv_348761(((NU8) 58), f, arg, (&(*m)), c);
	}
	break;
	case ((NU8) 2):
	{
		(*m).intconvmatches += ((NI) 1);
		result = implicitconv_348761(((NU8) 58), f, arg, (&(*m)), c);
	}
	break;
	case ((NU8) 3):
	{
		(*m).subtypematches += ((NI) 1);
		result = implicitconv_348761(((NU8) 59), f, arg, (&(*m)), c);
	}
	break;
	case ((NU8) 4):
	{
		(*m).subtypematches += ((NI) 1);
		{
			if (!((*f).kind == ((NU8) 23))) goto LA65;
			result = arg;
		}
		goto LA63;
		LA65: ;
		{
			result = implicitconv_348761(((NU8) 58), f, arg, (&(*m)), c);
		}
		LA63: ;
	}
	break;
	case ((NU8) 5):
	case ((NU8) 6):
	{
		{
			if (!((*arg).kind >= ((NU8) 51) && (*arg).kind <= ((NU8) 52) || (*arg).kind == ((NU8) 79) || (*arg).kind == ((NU8) 84))) goto LA71;
			result = (*c).seminferredlambda.ClEnv? (*c).seminferredlambda.ClPrc(c, (*m).bindings, arg, (*c).seminferredlambda.ClEnv):((TMP2656)((*c).seminferredlambda.ClPrc))(c, (*m).bindings, arg);
		}
		goto LA69;
		LA71: ;
		{
			Tsym190843* inferred;
			inferred = (*c).semgenerateinstance.ClEnv? (*c).semgenerateinstance.ClPrc(c, (*arg).kindU.S4.sym, (*m).bindings, (*arg).info, (*c).semgenerateinstance.ClEnv):((TMP2657)((*c).semgenerateinstance.ClPrc))(c, (*arg).kindU.S4.sym, (*m).bindings, (*arg).info);
			result = newsymnode_192338(inferred, (*arg).info);
		}
		LA69: ;
		{
			if (!(r == ((NU8) 6))) goto LA76;
			(*m).convmatches += ((NI) 1);
			result = implicitconv_348761(((NU8) 58), f, result, (&(*m)), c);
		}
		goto LA74;
		LA76: ;
		{
			(*m).genericmatches += ((NI) 1);
		}
		LA74: ;
	}
	break;
	case ((NU8) 7):
	{
		(*m).genericmatches += ((NI) 1);
		{
			if (!((*arg).typ == NIM_NIL)) goto LA82;
			result = arg;
		}
		goto LA80;
		LA82: ;
		{
			Ttype190849* LOC85;
			LOC85 = 0;
			LOC85 = skiptypes_194167((*arg).typ, IL64(211106240964608));
			if (!((*LOC85).kind == ((NU8) 18))) goto LA86;
			result = implicitconv_348761(((NU8) 59), f, arg, (&(*m)), c);
		}
		goto LA80;
		LA86: ;
		{
			NIM_BOOL LOC89;
			LOC89 = 0;
			LOC89 = isemptycontainer_229978((*arg).typ);
			if (!LOC89) goto LA90;
			result = copytree_195028(arg);
			asgnRefNoCycle((void**) (&(*result).typ), getinstantiatedtype_348724(c, arg, (&(*m)), f));
		}
		goto LA80;
		LA90: ;
		{
			result = arg;
		}
		LA80: ;
	}
	break;
	case ((NU8) 8):
	{
		(*m).intconvmatches += ((NI) 256);
		result = implicitconv_348761(((NU8) 58), f, arg, (&(*m)), c);
	}
	break;
	case ((NU8) 9):
	{
		(*m).exactmatches += ((NI) 1);
		result = arg;
		{
			Ttype190849* LOC97;
			LOC97 = 0;
			LOC97 = skiptypes_194167(f, IL64(211106240964608));
			if (!((262144 &(IL64(1)<<(((*LOC97).kind)&IL64(63))))!=0)) goto LA98;
			result = implicitconv_348761(((NU8) 59), f, arg, (&(*m)), c);
		}
		LA98: ;
	}
	break;
	case ((NU8) 0):
	{
		{
			if (!((IL64(1154047404513689600) &(IL64(1)<<(((*a).kind)&IL64(63))))!=0)) goto LA103;
			(*m).genericmatches += ((NI) 1);
			(*m).fauxmatch = (*a).kind;
			result = arg;
			goto BeforeRet;
		}
		LA103: ;
		result = userconvmatch_348796(c, m, f, a, arg);
		{
			NIM_BOOL LOC107;
			LOC107 = 0;
			LOC107 = (result == NIM_NIL);
			if (!(LOC107)) goto LA108;
			LOC107 = ((*f).kind == ((NU8) 48));
			LA108: ;
			if (!LOC107) goto LA109;
			{
				if (!!(((*f).n == NIM_NIL))) goto LA113;
				result = localconvmatch_348902(c, m, f, a, arg);
			}
			goto LA111;
			LA113: ;
			{
				Ttype190849* LOC116;
				LOC116 = 0;
				LOC116 = base_220039(f);
				r = typerel_345064(m, LOC116, a, NIM_TRUE);
				{
					if (!(((NU8) 7) <= r)) goto LA119;
					(*m).convmatches += ((NI) 1);
					result = copytree_195028(arg);
					{
						Ttype190849* LOC125;
						if (!(r == ((NU8) 7))) goto LA123;
						LOC125 = 0;
						LOC125 = base_220039(f);
						asgnRefNoCycle((void**) (&(*result).typ), getinstantiatedtype_348724(c, arg, (&(*m)), LOC125));
					}
					LA123: ;
					(*m).basetypematch = NIM_TRUE;
				}
				goto LA117;
				LA119: ;
				{
					Ttype190849* LOC127;
					LOC127 = 0;
					LOC127 = base_220039(f);
					result = userconvmatch_348796(c, m, LOC127, a, arg);
				}
				LA117: ;
			}
			LA111: ;
		}
		LA109: ;
	}
	break;
	}
	}BeforeRet: ;
	return result;
}

N_NIMCALL(void, copycandidate_344490)(Tcandidate344209* a, Tcandidate344209* b) {
	unsureAsgnRef((void**) (&(*a).c), (*b).c);
	(*a).exactmatches = (*b).exactmatches;
	(*a).subtypematches = (*b).subtypematches;
	(*a).convmatches = (*b).convmatches;
	(*a).intconvmatches = (*b).intconvmatches;
	(*a).genericmatches = (*b).genericmatches;
	(*a).state = (*b).state;
	unsureAsgnRef((void**) (&(*a).callee), (*b).callee);
	unsureAsgnRef((void**) (&(*a).calleesym), (*b).calleesym);
	unsureAsgnRef((void**) (&(*a).call), copytree_195028((*b).call));
	(*a).basetypematch = (*b).basetypematch;
	copyidtable_192091((&(*a).bindings), (*b).bindings);
}

N_NIMCALL(NI, sumgeneric_344502)(Ttype190849* t_344504) {
	NI result;
	Ttype190849* t;
	NI isvar;
{	result = 0;
	t = t_344504;
	isvar = ((NI) 1);
	{
		while (1) {
			switch ((*t).kind) {
			case ((NU8) 11):
			case ((NU8) 16):
			case ((NU8) 22):
			case ((NU8) 21):
			case ((NU8) 13):
			case ((NU8) 4):
			case ((NU8) 27):
			case ((NU8) 48):
			case ((NU8) 19):
			case ((NU8) 20):
			case ((NU8) 24):
			case ((NU8) 10):
			{
				t = lastson_193442(t);
				result += ((NI) 1);
			}
			break;
			case ((NU8) 23):
			{
				t = (*t).sons->data[((NI) 0)];
				result += ((NI) 1);
				isvar += ((NI) 1);
			}
			break;
			case ((NU8) 9):
			case ((NU8) 18):
			{
				result += ((NI) (((*t).kind == ((NU8) 9))));
				{
					NI i_344579;
					NI HEX3Atmp_344591;
					NI LOC7;
					NI res_344594;
					i_344579 = 0;
					HEX3Atmp_344591 = 0;
					LOC7 = 0;
					LOC7 = len_193377(t);
					HEX3Atmp_344591 = (LOC7 - 1);
					res_344594 = ((NI) 0);
					{
						while (1) {
							NI LOC10;
							if (!(res_344594 <= HEX3Atmp_344591)) goto LA9;
							i_344579 = res_344594;
							LOC10 = 0;
							LOC10 = sumgeneric_344502((*t).sons->data[i_344579]);
							result += LOC10;
							res_344594 += ((NI) 1);
						} LA9: ;
					}
				}
				goto LA1;
			}
			break;
			case ((NU8) 12):
			case ((NU8) 6):
			case ((NU8) 59):
			case ((NU8) 7):
			case ((NU8) 8):
			{
				goto LA1;
			}
			break;
			case ((NU8) 1):
			case ((NU8) 2):
			case ((NU8) 14):
			case ((NU8) 17):
			case ((NU8) 25):
			case ((NU8) 26):
			case ((NU8) 28):
			case ((NU8) 29):
			case ((NU8) 31) ... ((NU8) 35):
			case ((NU8) 36) ... ((NU8) 39):
			case ((NU8) 40) ... ((NU8) 44):
			{
				result = isvar;
				goto BeforeRet;
			}
			break;
			default:
			{
				result = ((NI) 0);
				goto BeforeRet;
			}
			break;
			}
		}
	} LA1: ;
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NI, complexdisambiguation_344619)(Ttype190849* a, Ttype190849* b) {
	NI result;
	NI winner;
{	result = 0;
	winner = ((NI) 0);
	{
		NI i_344647;
		NI HEX3Atmp_344802;
		NI LOC2;
		NI LOC3;
		NI res_344805;
		i_344647 = 0;
		HEX3Atmp_344802 = 0;
		LOC2 = 0;
		LOC2 = len_193377(a);
		LOC3 = 0;
		LOC3 = len_193377(b);
		HEX3Atmp_344802 = (((LOC2 <= LOC3) ? LOC2 : LOC3) - 1);
		res_344805 = ((NI) 1);
		{
			while (1) {
				NI x;
				NI y;
				if (!(res_344805 <= HEX3Atmp_344802)) goto LA5;
				i_344647 = res_344805;
				x = sumgeneric_344502((*a).sons->data[i_344647]);
				y = sumgeneric_344502((*b).sons->data[i_344647]);
				{
					if (!!((x == y))) goto LA8;
					{
						if (!(winner == ((NI) 0))) goto LA12;
						{
							if (!(y < x)) goto LA16;
							winner = ((NI) 1);
						}
						goto LA14;
						LA16: ;
						{
							winner = ((NI) -1);
						}
						LA14: ;
					}
					goto LA10;
					LA12: ;
					{
						if (!(y < x)) goto LA20;
						{
							if (!!((winner == ((NI) 1)))) goto LA24;
							result = ((NI) 0);
							goto BeforeRet;
						}
						LA24: ;
					}
					goto LA10;
					LA20: ;
					{
						{
							if (!!((winner == ((NI) -1)))) goto LA29;
							result = ((NI) 0);
							goto BeforeRet;
						}
						LA29: ;
					}
					LA10: ;
				}
				LA8: ;
				res_344805 += ((NI) 1);
			} LA5: ;
		}
	}
	result = winner;
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NI, cmpcandidates_344824)(Tcandidate344209* a, Tcandidate344209* b) {
	NI result;
{	result = 0;
	result = (NI)((*a).exactmatches - (*b).exactmatches);
	{
		if (!!((result == ((NI) 0)))) goto LA3;
		goto BeforeRet;
	}
	LA3: ;
	result = (NI)((*a).genericmatches - (*b).genericmatches);
	{
		if (!!((result == ((NI) 0)))) goto LA7;
		goto BeforeRet;
	}
	LA7: ;
	result = (NI)((*a).subtypematches - (*b).subtypematches);
	{
		if (!!((result == ((NI) 0)))) goto LA11;
		goto BeforeRet;
	}
	LA11: ;
	result = (NI)((*a).intconvmatches - (*b).intconvmatches);
	{
		if (!!((result == ((NI) 0)))) goto LA15;
		goto BeforeRet;
	}
	LA15: ;
	result = (NI)((*a).convmatches - (*b).convmatches);
	{
		if (!!((result == ((NI) 0)))) goto LA19;
		goto BeforeRet;
	}
	LA19: ;
	result = (NI)((*a).calleescope - (*b).calleescope);
	{
		if (!!((result == ((NI) 0)))) goto LA23;
		goto BeforeRet;
	}
	LA23: ;
	result = (NI)((*b).inheritancepenalty - (*a).inheritancepenalty);
	{
		if (!!((result == ((NI) 0)))) goto LA27;
		goto BeforeRet;
	}
	LA27: ;
	result = complexdisambiguation_344619((*a).callee, (*b).callee);
	}BeforeRet: ;
	return result;
}

N_NIMCALL(Tnode190813*, paramtypesmatch_349556)(Tcandidate344209* m, Ttype190849* f, Ttype190849* a, Tnode190813* arg, Tnode190813* argorig) {
	Tnode190813* result;
	result = 0;
	{
		NIM_BOOL LOC3;
		LOC3 = 0;
		LOC3 = (arg == NIM_NIL);
		if (LOC3) goto LA4;
		LOC3 = !(((*arg).kind == ((NU8) 56) || (*arg).kind == ((NU8) 57)));
		LA4: ;
		if (!LOC3) goto LA5;
		result = paramtypesmatchaux_349103(m, f, a, arg, argorig);
	}
	goto LA1;
	LA5: ;
	{
		Tcontext244023* c;
		Tcandidate344209 x;
		Tcandidate344209 y;
		Tcandidate344209 z;
		NI best;
		c = (*m).c;
		memset((void*)(&x), 0, sizeof(x));
		memset((void*)(&y), 0, sizeof(y));
		memset((void*)(&z), 0, sizeof(z));
		initcandidate_344276(c, (&x), (*m).callee);
		initcandidate_344276(c, (&y), (*m).callee);
		initcandidate_344276(c, (&z), (*m).callee);
		x.calleesym = (*m).calleesym;
		y.calleesym = (*m).calleesym;
		z.calleesym = (*m).calleesym;
		best = ((NI) -1);
		{
			NI i_349607;
			NI HEX3Atmp_349807;
			NI LOC9;
			NI res_349810;
			i_349607 = 0;
			HEX3Atmp_349807 = 0;
			LOC9 = 0;
			LOC9 = sonslen_193403(arg);
			HEX3Atmp_349807 = (NI)(LOC9 - ((NI) 1));
			res_349810 = ((NI) 0);
			{
				while (1) {
					if (!(res_349810 <= HEX3Atmp_349807)) goto LA11;
					i_349607 = res_349810;
					{
						NU8 r;
						if (!((126976 &(1<<(((*(*(*arg).kindU.S6.sons->data[i_349607]).kindU.S4.sym).kind)&31)))!=0)) goto LA14;
						copycandidate_344490((&z), (&(*m)));
						z.callee = (*(*arg).kindU.S6.sons->data[i_349607]).typ;
						z.calleesym = (*(*arg).kindU.S6.sons->data[i_349607]).kindU.S4.sym;
						r = typerel_345064((&z), f, (*(*arg).kindU.S6.sons->data[i_349607]).typ, NIM_TRUE);
						incmatches_349036((&z), r, ((NI) 2));
						{
							if (!!((r == ((NU8) 0)))) goto LA18;
							z.state = ((NU8) 1);
							switch (x.state) {
							case ((NU8) 0):
							case ((NU8) 2):
							{
								genericAssign((void*)(&x), (void*)(&z), (&NTI344209));
								best = i_349607;
							}
							break;
							case ((NU8) 1):
							{
								NI cmp;
								cmp = cmpcandidates_344824((&x), (&z));
								{
									if (!(cmp < ((NI) 0))) goto LA24;
									best = i_349607;
									genericAssign((void*)(&x), (void*)(&z), (&NTI344209));
								}
								goto LA22;
								LA24: ;
								{
									if (!(cmp == ((NI) 0))) goto LA27;
									genericAssign((void*)(&y), (void*)(&z), (&NTI344209));
								}
								goto LA22;
								LA27: ;
								LA22: ;
							}
							break;
							}
						}
						LA18: ;
					}
					LA14: ;
					res_349810 += ((NI) 1);
				} LA11: ;
			}
		}
		{
			if (!(x.state == ((NU8) 0))) goto LA31;
			result = NIM_NIL;
		}
		goto LA29;
		LA31: ;
		{
			NIM_BOOL LOC34;
			NI LOC36;
			LOC34 = 0;
			LOC34 = (y.state == ((NU8) 1));
			if (!(LOC34)) goto LA35;
			LOC36 = 0;
			LOC36 = cmpcandidates_344824((&x), (&y));
			LOC34 = (LOC36 == ((NI) 0));
			LA35: ;
			if (!LOC34) goto LA37;
			{
				if (!!((x.state == ((NU8) 1)))) goto LA41;
				internalerror_165199((*arg).info, ((NimStringDesc*) &TMP2666));
			}
			LA41: ;
			{
				if (!((*f).kind == ((NU8) 6))) goto LA45;
				result = arg;
			}
			goto LA43;
			LA45: ;
			{
				result = NIM_NIL;
			}
			LA43: ;
		}
		goto LA29;
		LA37: ;
		{
			markused_344251((*arg).info, (*(*arg).kindU.S6.sons->data[best]).kindU.S4.sym);
			result = paramtypesmatchaux_349103(m, f, (*(*arg).kindU.S6.sons->data[best]).typ, (*arg).kindU.S6.sons->data[best], argorig);
		}
		LA29: ;
	}
	LA1: ;
	return result;
}

N_NIMCALL(NIM_BOOL, argtypematches_350522)(Tcontext244023* c, Ttype190849* f, Ttype190849* a) {
	NIM_BOOL result;
	Tcandidate344209 m;
	Tnode190813* res;
	result = 0;
	memset((void*)(&m), 0, sizeof(m));
	initcandidate_344276(c, (&m), f);
	res = paramtypesmatch_349556((&m), f, a, emptynode_191807, NIM_NIL);
	result = !((res == NIM_NIL));
	return result;
}

static N_INLINE(NIM_BOOL, typefits_352941)(Tcontext244023* c, Tsym190843* s, Ttype190849* firstarg) {
	NIM_BOOL result;
{	result = 0;
	{
		NIM_BOOL LOC3;
		NIM_BOOL LOC4;
		NI LOC6;
		Tsym190843* m;
		LOC3 = 0;
		LOC4 = 0;
		LOC4 = !(((*s).typ == NIM_NIL));
		if (!(LOC4)) goto LA5;
		LOC6 = 0;
		LOC6 = sonslen_193351((*s).typ);
		LOC4 = (((NI) 1) < LOC6);
		LA5: ;
		LOC3 = LOC4;
		if (!(LOC3)) goto LA7;
		LOC3 = !(((*(*s).typ).sons->data[((NI) 1)] == NIM_NIL));
		LA7: ;
		if (!LOC3) goto LA8;
		m = getmodule_198243(s);
		{
			NIM_BOOL LOC12;
			Ttype190849* exp;
			LOC12 = 0;
			LOC12 = !((m == NIM_NIL));
			if (!(LOC12)) goto LA13;
			LOC12 = (((*m).flags &(1<<((((NU8) 13))&31)))!=0);
			LA13: ;
			if (!LOC12) goto LA14;
			{
				if (!((*s).kind == ((NU8) 7))) goto LA18;
				goto BeforeRet;
			}
			LA18: ;
			exp = skiptypes_194167((*(*s).typ).sons->data[((NI) 1)], 8390656);
			{
				if (!((*exp).kind == ((NU8) 48))) goto LA22;
				exp = elemtype_220522(exp);
			}
			LA22: ;
			{
				if (!((IL64(288230376151716032) &(IL64(1)<<(((*exp).kind)&IL64(63))))!=0)) goto LA26;
				goto BeforeRet;
			}
			LA26: ;
		}
		LA14: ;
		result = argtypematches_350522(c, (*(*s).typ).sons->data[((NI) 1)], firstarg);
	}
	LA8: ;
	}BeforeRet: ;
	return result;
}

N_NIMCALL(void, suggestoperations_353035)(Tcontext244023* c, Tnode190813* n, Ttype190849* typ, NI* outputs) {
	NIM_BOOL islocal_353202;
	islocal_353202 = NIM_TRUE;
	{
		Tscope190837* scope_353204;
		Tscope190837* HEX3Atmp_353318;
		Tscope190837* current_353321;
		scope_353204 = 0;
		HEX3Atmp_353318 = 0;
		HEX3Atmp_353318 = (*c).currentscope;
		current_353321 = HEX3Atmp_353318;
		{
			while (1) {
				Tsymseq190815* entries_353206;
				Tsymseq190815* result_353225;
				TY351525 LOC11;
				if (!!((current_353321 == NIM_NIL))) goto LA3;
				scope_353204 = current_353321;
				{
					if (!(scope_353204 == (*c).toplevelscope)) goto LA6;
					islocal_353202 = NIM_FALSE;
				}
				LA6: ;
				result_353225 = (Tsymseq190815*) newSeq((&NTI190815), 0);
				{
					Tsym190843* x_353227;
					Tstrtable190817 HEX3Atmp_353306;
					Ttabiter198119 it_353309;
					Tsym190843* s_353311;
					x_353227 = 0;
					memset((void*)(&HEX3Atmp_353306), 0, sizeof(HEX3Atmp_353306));
					HEX3Atmp_353306.counter = (*scope_353204).symbols.counter;
					HEX3Atmp_353306.data = (*scope_353204).symbols.data;
					memset((void*)(&it_353309), 0, sizeof(it_353309));
					s_353311 = inittabiter_198124((&it_353309), HEX3Atmp_353306);
					{
						while (1) {
							if (!!((s_353311 == NIM_NIL))) goto LA10;
							x_353227 = s_353311;
							result_353225 = (Tsymseq190815*) incrSeq(&(result_353225)->Sup, sizeof(Tsym190843*));
							asgnRefNoCycle((void**) (&result_353225->data[result_353225->Sup.len-1]), x_353227);
							s_353311 = nextiter_198132((&it_353309), HEX3Atmp_353306);
						} LA10: ;
					}
				}
				genericSeqAssign((&entries_353206), result_353225, (&NTI190815));
				memset((void*)(&LOC11), 0, sizeof(LOC11));
				LOC11.ClPrc = ((TMP2619) (HEX3Aanonymous_353257)); LOC11.ClEnv = NIM_NIL;
				sort_351518(entries_353206->data, entries_353206->Sup.len, LOC11, ((NU8) 1));
				{
					Tsym190843* item_353212;
					NI i_353315;
					NI L_353317;
					item_353212 = 0;
					i_353315 = ((NI) 0);
					L_353317 = (entries_353206 ? entries_353206->Sup.len : 0);
					{
						while (1) {
							Tsym190843* it;
							if (!(i_353315 < L_353317)) goto LA14;
							item_353212 = entries_353206->data[i_353315];
							it = item_353212;
							{
								NIM_BOOL LOC17;
								NimStringDesc* LOC21;
								LOC17 = 0;
								LOC17 = filtersymnoopr_351031(it);
								if (!(LOC17)) goto LA18;
								LOC17 = typefits_352941(c, it, typ);
								LA18: ;
								if (!LOC17) goto LA19;
								LOC21 = 0;
								LOC21 = symtostr_351005(it, islocal_353202, ((NimStringDesc*) &TMP2616));
								suggestwriteln_164066(LOC21);
								(*outputs) += ((NI) 1);
							}
							LA19: ;
							i_353315 += ((NI) 1);
						} LA14: ;
					}
				}
				current_353321 = (*current_353321).parent;
			} LA3: ;
		}
	}
}

N_NIMCALL(void, suggestobject_351318)(Tcontext244023* c, Tnode190813* n, NI* outputs) {
	switch ((*n).kind) {
	case ((NU8) 138):
	{
		{
			NI i_351336;
			NI HEX3Atmp_351356;
			NI LOC3;
			NI res_351359;
			i_351336 = 0;
			HEX3Atmp_351356 = 0;
			LOC3 = 0;
			LOC3 = sonslen_193403(n);
			HEX3Atmp_351356 = (NI)(LOC3 - ((NI) 1));
			res_351359 = ((NI) 0);
			{
				while (1) {
					if (!(res_351359 <= HEX3Atmp_351356)) goto LA5;
					i_351336 = res_351359;
					suggestobject_351318(c, (*n).kindU.S6.sons->data[i_351336], outputs);
					res_351359 += ((NI) 1);
				} LA5: ;
			}
		}
	}
	break;
	case ((NU8) 139):
	{
		NI L;
		L = sonslen_193403(n);
		{
			if (!(((NI) 0) < L)) goto LA9;
			suggestobject_351318(c, (*n).kindU.S6.sons->data[((NI) 0)], outputs);
			{
				NI i_351352;
				NI HEX3Atmp_351364;
				NI res_351367;
				i_351352 = 0;
				HEX3Atmp_351364 = 0;
				HEX3Atmp_351364 = (NI)(L - ((NI) 1));
				res_351367 = ((NI) 1);
				{
					while (1) {
						Tnode190813* LOC14;
						if (!(res_351367 <= HEX3Atmp_351364)) goto LA13;
						i_351352 = res_351367;
						LOC14 = 0;
						LOC14 = lastson_193431((*n).kindU.S6.sons->data[i_351352]);
						suggestobject_351318(c, LOC14, outputs);
						res_351367 += ((NI) 1);
					} LA13: ;
				}
			}
		}
		LA9: ;
	}
	break;
	case ((NU8) 3):
	{
		suggestfield_351232(c, (*n).kindU.S4.sym, outputs);
	}
	break;
	default:
	{
	}
	break;
	}
}

N_NIMCALL(void, suggestfieldaccess_353428)(Tcontext244023* c, Tnode190813* n, NI* outputs) {
	Ttype190849* typ;
	typ = (*n).typ;
	{
		if (!(typ == NIM_NIL)) goto LA3;
		{
			NIM_BOOL LOC7;
			LOC7 = 0;
			LOC7 = ((*n).kind == ((NU8) 3));
			if (!(LOC7)) goto LA8;
			LOC7 = ((*(*n).kindU.S4.sym).kind == ((NU8) 6));
			LA8: ;
			if (!LOC7) goto LA9;
			{
				if (!((*n).kindU.S4.sym == (*c).module)) goto LA13;
				{
					Tsym190843* it_353478;
					Tstrtable190817 HEX3Atmp_353587;
					Ttabiter198119 it_353590;
					Tsym190843* s_353592;
					it_353478 = 0;
					memset((void*)(&HEX3Atmp_353587), 0, sizeof(HEX3Atmp_353587));
					HEX3Atmp_353587.counter = (*(*c).toplevelscope).symbols.counter;
					HEX3Atmp_353587.data = (*(*c).toplevelscope).symbols.data;
					memset((void*)(&it_353590), 0, sizeof(it_353590));
					s_353592 = inittabiter_198124((&it_353590), HEX3Atmp_353587);
					{
						while (1) {
							if (!!((s_353592 == NIM_NIL))) goto LA17;
							it_353478 = s_353592;
							{
								NIM_BOOL LOC20;
								NimStringDesc* LOC23;
								LOC20 = 0;
								LOC20 = filtersym_351015(it_353478);
								if (!LOC20) goto LA21;
								LOC23 = 0;
								LOC23 = symtostr_351005(it_353478, NIM_FALSE, ((NimStringDesc*) &TMP2616));
								suggestwriteln_164066(LOC23);
								(*outputs) += ((NI) 1);
							}
							LA21: ;
							s_353592 = nextiter_198132((&it_353590), HEX3Atmp_353587);
						} LA17: ;
					}
				}
			}
			goto LA11;
			LA13: ;
			{
				{
					Tsym190843* it_353490;
					Tstrtable190817 HEX3Atmp_353594;
					Ttabiter198119 it_353597;
					Tsym190843* s_353599;
					it_353490 = 0;
					memset((void*)(&HEX3Atmp_353594), 0, sizeof(HEX3Atmp_353594));
					HEX3Atmp_353594.counter = (*(*n).kindU.S4.sym).kindU.S3.tab.counter;
					HEX3Atmp_353594.data = (*(*n).kindU.S4.sym).kindU.S3.tab.data;
					memset((void*)(&it_353597), 0, sizeof(it_353597));
					s_353599 = inittabiter_198124((&it_353597), HEX3Atmp_353594);
					{
						while (1) {
							if (!!((s_353599 == NIM_NIL))) goto LA27;
							it_353490 = s_353599;
							{
								NIM_BOOL LOC30;
								NimStringDesc* LOC33;
								LOC30 = 0;
								LOC30 = filtersym_351015(it_353490);
								if (!LOC30) goto LA31;
								LOC33 = 0;
								LOC33 = symtostr_351005(it_353490, NIM_FALSE, ((NimStringDesc*) &TMP2616));
								suggestwriteln_164066(LOC33);
								(*outputs) += ((NI) 1);
							}
							LA31: ;
							s_353599 = nextiter_198132((&it_353597), HEX3Atmp_353594);
						} LA27: ;
					}
				}
			}
			LA11: ;
		}
		goto LA5;
		LA9: ;
		{
			suggesteverything_353355(c, n, outputs);
		}
		LA5: ;
	}
	goto LA1;
	LA3: ;
	{
		NIM_BOOL LOC36;
		NIM_BOOL LOC37;
		Ttype190849* t;
		LOC36 = 0;
		LOC37 = 0;
		LOC37 = ((*typ).kind == ((NU8) 14));
		if (!(LOC37)) goto LA38;
		LOC37 = ((*n).kind == ((NU8) 3));
		LA38: ;
		LOC36 = LOC37;
		if (!(LOC36)) goto LA39;
		LOC36 = ((*(*n).kindU.S4.sym).kind == ((NU8) 7));
		LA39: ;
		if (!LOC36) goto LA40;
		t = typ;
		{
			while (1) {
				if (!!((t == NIM_NIL))) goto LA43;
				suggestsymlist_351267(c, (*t).n, outputs);
				t = (*t).sons->data[((NI) 0)];
			} LA43: ;
		}
		suggestoperations_353035(c, n, typ, outputs);
	}
	goto LA1;
	LA40: ;
	{
		typ = skiptypes_194167(typ, 14682112);
		{
			Ttype190849* t;
			if (!((*typ).kind == ((NU8) 17))) goto LA47;
			t = typ;
			{
				while (1) {
					suggestobject_351318(c, (*t).n, outputs);
					{
						if (!((*t).sons->data[((NI) 0)] == NIM_NIL)) goto LA53;
						goto LA49;
					}
					LA53: ;
					t = skiptypes_194167((*t).sons->data[((NI) 0)], 2048);
				}
			} LA49: ;
			suggestoperations_353035(c, n, typ, outputs);
		}
		goto LA45;
		LA47: ;
		{
			NIM_BOOL LOC56;
			LOC56 = 0;
			LOC56 = ((*typ).kind == ((NU8) 18));
			if (!(LOC56)) goto LA57;
			LOC56 = !(((*typ).n == NIM_NIL));
			LA57: ;
			if (!LOC56) goto LA58;
			suggestsymlist_351267(c, (*typ).n, outputs);
			suggestoperations_353035(c, n, typ, outputs);
		}
		goto LA45;
		LA58: ;
		{
			suggestoperations_353035(c, n, typ, outputs);
		}
		LA45: ;
	}
	LA1: ;
}

N_NIMCALL(Tnode190813*, findclosestcall_353721)(Tnode190813* n) {
	Tnode190813* result;
{	result = 0;
	{
		NIM_BOOL LOC3;
		NU8 LOC5;
		LOC3 = 0;
		LOC3 = ((*n).kind == ((NU8) 27) || (*n).kind == ((NU8) 29) || (*n).kind == ((NU8) 30) || (*n).kind == ((NU8) 31) || (*n).kind == ((NU8) 26) || (*n).kind == ((NU8) 28) || (*n).kind == ((NU8) 32));
		if (!(LOC3)) goto LA4;
		LOC5 = 0;
		LOC5 = incheckpoint_353640((*n).info);
		LOC3 = (LOC5 == ((NU8) 2));
		LA4: ;
		if (!LOC3) goto LA6;
		result = n;
	}
	goto LA1;
	LA6: ;
	{
		{
			NI i_353762;
			NI HEX3Atmp_353777;
			NI LOC10;
			NI res_353780;
			i_353762 = 0;
			HEX3Atmp_353777 = 0;
			LOC10 = 0;
			LOC10 = safelen_191125(n);
			HEX3Atmp_353777 = (LOC10 - 1);
			res_353780 = ((NI) 0);
			{
				while (1) {
					if (!(res_353780 <= HEX3Atmp_353777)) goto LA12;
					i_353762 = res_353780;
					result = findclosestcall_353721((*n).kindU.S6.sons->data[i_353762]);
					{
						if (!!((result == NIM_NIL))) goto LA15;
						goto BeforeRet;
					}
					LA15: ;
					res_353780 += ((NI) 1);
				} LA12: ;
			}
		}
	}
	LA1: ;
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NI, HEX3Aanonymous_351507)(Tsym190843* a_351458, Tsym190843* b_351460) {
	NI result;
{	result = 0;
	result = cmp_4717((*(*a_351458).name).s, (*(*b_351460).name).s);
	goto BeforeRet;
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NIM_BOOL, namefits_351392)(Tcontext244023* c, Tsym190843* s, Tnode190813* n) {
	NIM_BOOL result;
	Tnode190813* op;
	Tident167021* opr;
{	result = 0;
	op = (*n).kindU.S6.sons->data[((NI) 0)];
	{
		if (!((*op).kind == ((NU8) 57) || (*op).kind == ((NU8) 56))) goto LA3;
		op = (*op).kindU.S6.sons->data[((NI) 0)];
	}
	LA3: ;
	opr = 0;
	switch ((*op).kind) {
	case ((NU8) 3):
	{
		opr = (*(*op).kindU.S4.sym).name;
	}
	break;
	case ((NU8) 2):
	{
		opr = (*op).kindU.S5.ident;
	}
	break;
	default:
	{
		result = NIM_FALSE;
		goto BeforeRet;
	}
	break;
	}
	result = ((*opr).Sup.id == (*(*s).name).Sup.id);
	}BeforeRet: ;
	return result;
}

N_NIMCALL(void, initcandidate_344301)(Tcontext244023* ctx, Tcandidate344209* c, Tsym190843* callee, Tnode190813* binding, NI calleescope) {
	initcandidateaux_344264(ctx, c, (*callee).typ);
	unsureAsgnRef((void**) (&(*c).calleesym), callee);
	{
		NIM_BOOL LOC3;
		LOC3 = 0;
		LOC3 = ((520192 &(1<<(((*callee).kind)&31)))!=0);
		if (!(LOC3)) goto LA4;
		LOC3 = (calleescope == ((NI) -1));
		LA4: ;
		if (!LOC3) goto LA5;
		{
			Tsym190843* LOC9;
			Tsym190843* owner;
			LOC9 = 0;
			LOC9 = originatingmodule_195737(callee);
			if (!(LOC9 == (*ctx).module)) goto LA10;
			(*c).calleescope = ((NI) 2);
			owner = callee;
			{
				while (1) {
					owner = skipgenericowner_195696(owner);
					{
						if (!((*owner).kind == ((NU8) 6))) goto LA16;
						goto LA12;
					}
					LA16: ;
					(*c).calleescope += ((NI) 1);
				}
			} LA12: ;
		}
		goto LA7;
		LA10: ;
		{
			(*c).calleescope = ((NI) 1);
		}
		LA7: ;
	}
	goto LA1;
	LA5: ;
	{
		(*c).calleescope = calleescope;
	}
	LA1: ;
	initidtable_194057((&(*c).bindings));
	genericSeqAssign((&(*c).errors), NIM_NIL, (&NTI190815));
	{
		NIM_BOOL LOC22;
		Tnode190813* typeparams;
		LOC22 = 0;
		LOC22 = !((binding == NIM_NIL));
		if (!(LOC22)) goto LA23;
		LOC22 = ((520192 &(1<<(((*callee).kind)&31)))!=0);
		LA23: ;
		if (!LOC22) goto LA24;
		typeparams = HEX5BHEX5D_191244((*callee).ast, ((NI) 2));
		{
			NI i_344391;
			NI HEX3Atmp_344436;
			NI LOC27;
			NI LOC28;
			NI res_344439;
			i_344391 = 0;
			HEX3Atmp_344436 = 0;
			LOC27 = 0;
			LOC27 = sonslen_193403(typeparams);
			LOC28 = 0;
			LOC28 = sonslen_193403(binding);
			HEX3Atmp_344436 = ((LOC27 <= (NI)(LOC28 - ((NI) 1))) ? LOC27 : (NI)(LOC28 - ((NI) 1)));
			res_344439 = ((NI) 1);
			{
				while (1) {
					Ttype190849* formaltypeparam;
					Ttype190849* bound;
					Tnode190813* LOC31;
					if (!(res_344439 <= HEX3Atmp_344436)) goto LA30;
					i_344391 = res_344439;
					formaltypeparam = (*(*typeparams).kindU.S6.sons->data[(NI)(i_344391 - ((NI) 1))]).typ;
					LOC31 = 0;
					LOC31 = HEX5BHEX5D_191244(binding, i_344391);
					bound = (*LOC31).typ;
					{
						NimStringDesc* LOC36;
						if (!!(!((bound == NIM_NIL)))) goto LA34;
						LOC36 = 0;
						LOC36 = HEX24_165306(TMP2672);
						internalerror_165218(LOC36);
					}
					LA34: ;
					{
						if (!((*formaltypeparam).kind == ((NU8) 8))) goto LA39;
						{
							if (!!(((*bound).kind == ((NU8) 8)))) goto LA43;
							bound = maketypedesc_244681(ctx, bound);
						}
						LA43: ;
					}
					goto LA37;
					LA39: ;
					{
						bound = skiptypes_194167(bound, 256);
					}
					LA37: ;
					put_344289((&(*c).bindings), formaltypeparam, bound);
					res_344439 += ((NI) 1);
				} LA30: ;
			}
		}
	}
	LA24: ;
}

N_NIMCALL(void, preparenamedparam_349913)(Tnode190813* a) {
	{
		Tlineinfo163338 info;
		Tident167021* LOC5;
		if (!!(((*(*a).kindU.S6.sons->data[((NI) 0)]).kind == ((NU8) 2)))) goto LA3;
		info = (*(*a).kindU.S6.sons->data[((NI) 0)]).info;
		LOC5 = 0;
		LOC5 = considerquotedident_249010((*a).kindU.S6.sons->data[((NI) 0)]);
		asgnRefNoCycle((void**) (&(*a).kindU.S6.sons->data[((NI) 0)]), newidentnode_192313(LOC5, info));
	}
	LA3: ;
}

N_NIMCALL(Tnode190813*, prepareoperand_349852)(Tcontext244023* c, Ttype190849* formal, Tnode190813* a) {
	Tnode190813* result;
	result = 0;
	{
		NIM_BOOL LOC3;
		NI LOC5;
		LOC3 = 0;
		LOC3 = ((*formal).kind == ((NU8) 6));
		if (!(LOC3)) goto LA4;
		LOC5 = 0;
		LOC5 = len_193377(formal);
		LOC3 = !((LOC5 == ((NI) 1)));
		LA4: ;
		if (!LOC3) goto LA6;
		result = a;
	}
	goto LA1;
	LA6: ;
	{
		NU16 flags;
		if (!(*a).typ == 0) goto LA9;
		{
			if (!((*formal).kind == ((NU8) 49))) goto LA13;
			flags = 34;
		}
		goto LA11;
		LA13: ;
		{
			flags = 48;
		}
		LA11: ;
		result = (*c).semoperand(c, a, flags);
	}
	goto LA1;
	LA9: ;
	{
		result = a;
	}
	LA1: ;
	return result;
}

N_NIMCALL(Ttype190849*, arrayconstr_349936)(Tcontext244023* c, Tnode190813* n) {
	Ttype190849* result;
	Ttype190849* LOC1;
	Ttype190849* LOC2;
	Ttype190849* LOC3;
	result = 0;
	result = newtypes_244218(((NU8) 4), c);
	LOC1 = 0;
	LOC1 = getsystype_238030(((NU8) 31));
	LOC2 = 0;
	LOC2 = makerangetype_245182(c, IL64(0), IL64(0), (*n).info, LOC1);
	rawaddson_194478(result, LOC2);
	LOC3 = 0;
	LOC3 = skiptypes_194167((*n).typ, 8423424);
	addsonskipintlit_238731(result, LOC3);
	return result;
}

N_NIMCALL(void, setson_349829)(Tnode190813* father, NI at, Tnode190813* son) {
	{
		NI LOC3;
		LOC3 = 0;
		LOC3 = sonslen_193403(father);
		if (!(LOC3 <= at)) goto LA4;
		(*father).kindU.S6.sons = (Tnodeseq190807*) setLengthSeq(&((*father).kindU.S6.sons)->Sup, sizeof(Tnode190813*), ((NI) ((NI)(at + ((NI) 1)))));
	}
	LA4: ;
	asgnRefNoCycle((void**) (&(*father).kindU.S6.sons->data[at]), son);
}

N_NIMCALL(Tnode190813*, prepareoperand_349893)(Tcontext244023* c, Tnode190813* a) {
	Tnode190813* result;
	result = 0;
	{
		if (!(*a).typ == 0) goto LA3;
		result = (*c).semoperand(c, a, 32);
	}
	goto LA1;
	LA3: ;
	{
		result = a;
	}
	LA1: ;
	return result;
}

N_NIMCALL(void, incrindextype_349959)(Ttype190849* t) {
	(*(*(*(*t).sons->data[((NI) 0)]).n).kindU.S6.sons->data[((NI) 1)]).kindU.S1.intval += ((NI) 1);
}

N_NIMCALL(void, matchesaux_350018)(Tcontext244023* c, Tnode190813* n, Tnode190813* norig, Tcandidate344209* m, Intset187056* marker) {
	NI f;
	NI a;
	NI formallen;
	Tnode190813* LOC6;
	Tnode190813* container;
	Tsym190843* formal;
{	{
		if (!!(((*(*m).callee).kind == ((NU8) 10)))) goto LA3;
		f = ((NI) 1);
	}
	goto LA1;
	LA3: ;
	{
		f = ((NI) 0);
	}
	LA1: ;
	a = ((NI) 1);
	(*m).state = ((NU8) 1);
	unsureAsgnRef((void**) (&(*m).call), newnodei_192351((*n).kind, (*n).info));
	asgnRefNoCycle((void**) (&(*(*m).call).typ), base_220039((*m).callee));
	formallen = len_191097((*(*m).callee).n);
	LOC6 = 0;
	LOC6 = copytree_195028((*n).kindU.S6.sons->data[((NI) 0)]);
	addson_192819((*m).call, LOC6);
	container = NIM_NIL;
	formal = NIM_NIL;
	{
		while (1) {
			NI LOC9;
			LOC9 = 0;
			LOC9 = len_191097(n);
			if (!(a < LOC9)) goto LA8;
			{
				Tnode190813* arg;
				if (!((*(*n).kindU.S6.sons->data[a]).kind == ((NU8) 33))) goto LA12;
				preparenamedparam_349913((*n).kindU.S6.sons->data[a]);
				{
					if (!!(((*(*(*n).kindU.S6.sons->data[a]).kindU.S6.sons->data[((NI) 0)]).kind == ((NU8) 2)))) goto LA16;
					localerror_165155((*(*n).kindU.S6.sons->data[a]).info, ((NU16) 159), ((NimStringDesc*) &TMP2652));
					(*m).state = ((NU8) 2);
					goto BeforeRet;
				}
				LA16: ;
				formal = getsymfromlist_198228((*(*m).callee).n, (*(*(*n).kindU.S6.sons->data[a]).kindU.S6.sons->data[((NI) 0)]).kindU.S5.ident, ((NI) 1));
				{
					if (!(formal == NIM_NIL)) goto LA20;
					(*m).state = ((NU8) 2);
					goto BeforeRet;
				}
				LA20: ;
				{
					NIM_BOOL LOC24;
					LOC24 = 0;
					LOC24 = containsorincl_187898(marker, (*formal).position);
					if (!LOC24) goto LA25;
					localerror_165155((*(*n).kindU.S6.sons->data[a]).info, ((NU16) 143), (*(*formal).name).s);
					(*m).state = ((NU8) 2);
					goto BeforeRet;
				}
				LA25: ;
				(*m).basetypematch = NIM_FALSE;
				asgnRefNoCycle((void**) (&(*(*n).kindU.S6.sons->data[a]).kindU.S6.sons->data[((NI) 1)]), prepareoperand_349852(c, (*formal).typ, (*(*n).kindU.S6.sons->data[a]).kindU.S6.sons->data[((NI) 1)]));
				asgnRefNoCycle((void**) (&(*(*n).kindU.S6.sons->data[a]).typ), (*(*(*n).kindU.S6.sons->data[a]).kindU.S6.sons->data[((NI) 1)]).typ);
				arg = paramtypesmatch_349556(m, (*formal).typ, (*(*n).kindU.S6.sons->data[a]).typ, (*(*n).kindU.S6.sons->data[a]).kindU.S6.sons->data[((NI) 1)], (*(*norig).kindU.S6.sons->data[a]).kindU.S6.sons->data[((NI) 1)]);
				{
					if (!(arg == NIM_NIL)) goto LA29;
					(*m).state = ((NU8) 2);
					goto BeforeRet;
				}
				LA29: ;
				{
					if (!!((*formal).constraint == 0)) goto LA33;
					{
						NIM_BOOL LOC37;
						LOC37 = 0;
						LOC37 = matchnodekinds_269284((*formal).constraint, (*(*n).kindU.S6.sons->data[a]).kindU.S6.sons->data[((NI) 1)]);
						if (!LOC37) goto LA38;
						(*m).genericmatches += ((NI) 100);
					}
					goto LA35;
					LA38: ;
					{
						(*m).state = ((NU8) 2);
						goto BeforeRet;
					}
					LA35: ;
				}
				LA33: ;
				{
					if (!((*(*formal).typ).kind == ((NU8) 23))) goto LA43;
					{
						NIM_BOOL LOC47;
						LOC47 = 0;
						LOC47 = islvalue_269263((*(*n).kindU.S6.sons->data[a]).kindU.S6.sons->data[((NI) 1)]);
						if (!!(LOC47)) goto LA48;
						(*m).state = ((NU8) 2);
						goto BeforeRet;
					}
					LA48: ;
				}
				LA43: ;
				{
					Ttype190849* LOC54;
					if (!(*m).basetypematch) goto LA52;
					LOC54 = 0;
					LOC54 = arrayconstr_349936(c, arg);
					container = newnodeit_192807(((NU8) 41), (*(*n).kindU.S6.sons->data[a]).info, LOC54);
					addson_192819(container, arg);
					setson_349829((*m).call, (NI)((*formal).position + ((NI) 1)), container);
					{
						if (!!((f == (NI)(formallen - ((NI) 1))))) goto LA57;
						container = NIM_NIL;
					}
					LA57: ;
				}
				goto LA50;
				LA52: ;
				{
					setson_349829((*m).call, (NI)((*formal).position + ((NI) 1)), arg);
				}
				LA50: ;
				f += ((NI) 1);
			}
			goto LA10;
			LA12: ;
			{
				{
					if (!(formallen <= f)) goto LA63;
					{
						if (!(((*(*m).callee).flags &(1<<((((NU8) 0))&31)))!=0)) goto LA67;
						asgnRefNoCycle((void**) (&(*n).kindU.S6.sons->data[a]), prepareoperand_349893(c, (*n).kindU.S6.sons->data[a]));
						{
							Ttype190849* LOC71;
							Ttype190849* LOC74;
							Tnode190813* LOC75;
							Tnode190813* LOC76;
							LOC71 = 0;
							LOC71 = skiptypes_194167((*(*n).kindU.S6.sons->data[a]).typ, IL64(211106240964608));
							if (!((*LOC71).kind == ((NU8) 28))) goto LA72;
							LOC74 = 0;
							LOC74 = getsystype_238030(((NU8) 29));
							LOC75 = 0;
							LOC75 = copytree_195028((*n).kindU.S6.sons->data[a]);
							LOC76 = 0;
							LOC76 = implicitconv_348761(((NU8) 58), LOC74, LOC75, (&(*m)), c);
							addson_192819((*m).call, LOC76);
						}
						goto LA69;
						LA72: ;
						{
							Tnode190813* LOC78;
							LOC78 = 0;
							LOC78 = copytree_195028((*n).kindU.S6.sons->data[a]);
							addson_192819((*m).call, LOC78);
						}
						LA69: ;
					}
					goto LA65;
					LA67: ;
					{
						NIM_BOOL LOC80;
						Tnode190813* arg;
						LOC80 = 0;
						LOC80 = !((formal == NIM_NIL));
						if (!(LOC80)) goto LA81;
						LOC80 = ((*(*formal).typ).kind == ((NU8) 48));
						LA81: ;
						if (!LOC80) goto LA82;
						(*m).basetypematch = NIM_FALSE;
						asgnRefNoCycle((void**) (&(*n).kindU.S6.sons->data[a]), prepareoperand_349852(c, (*formal).typ, (*n).kindU.S6.sons->data[a]));
						arg = paramtypesmatch_349556(m, (*formal).typ, (*(*n).kindU.S6.sons->data[a]).typ, (*n).kindU.S6.sons->data[a], (*norig).kindU.S6.sons->data[a]);
						{
							NIM_BOOL LOC86;
							NIM_BOOL LOC87;
							LOC86 = 0;
							LOC87 = 0;
							LOC87 = !((arg == NIM_NIL));
							if (!(LOC87)) goto LA88;
							LOC87 = (*m).basetypematch;
							LA88: ;
							LOC86 = LOC87;
							if (!(LOC86)) goto LA89;
							LOC86 = !((container == NIM_NIL));
							LA89: ;
							if (!LOC86) goto LA90;
							addson_192819(container, arg);
							incrindextype_349959((*container).typ);
						}
						goto LA84;
						LA90: ;
						{
							(*m).state = ((NU8) 2);
							goto BeforeRet;
						}
						LA84: ;
					}
					goto LA65;
					LA82: ;
					{
						(*m).state = ((NU8) 2);
						goto BeforeRet;
					}
					LA65: ;
				}
				goto LA61;
				LA63: ;
				{
					Tnode190813* arg;
					{
						if (!!(((*(*(*(*m).callee).n).kindU.S6.sons->data[f]).kind == ((NU8) 3)))) goto LA97;
						internalerror_165199((*(*n).kindU.S6.sons->data[a]).info, ((NimStringDesc*) &TMP2674));
						goto BeforeRet;
					}
					LA97: ;
					formal = (*(*(*(*m).callee).n).kindU.S6.sons->data[f]).kindU.S4.sym;
					{
						NIM_BOOL LOC101;
						LOC101 = 0;
						LOC101 = containsorincl_187898(marker, (*formal).position);
						if (!(LOC101)) goto LA102;
						LOC101 = container == 0;
						LA102: ;
						if (!LOC101) goto LA103;
						localerror_165155((*(*n).kindU.S6.sons->data[a]).info, ((NU16) 143), (*(*formal).name).s);
						(*m).state = ((NU8) 2);
						goto BeforeRet;
					}
					LA103: ;
					(*m).basetypematch = NIM_FALSE;
					asgnRefNoCycle((void**) (&(*n).kindU.S6.sons->data[a]), prepareoperand_349852(c, (*formal).typ, (*n).kindU.S6.sons->data[a]));
					arg = paramtypesmatch_349556(m, (*formal).typ, (*(*n).kindU.S6.sons->data[a]).typ, (*n).kindU.S6.sons->data[a], (*norig).kindU.S6.sons->data[a]);
					{
						if (!(arg == NIM_NIL)) goto LA107;
						(*m).state = ((NU8) 2);
						goto BeforeRet;
					}
					LA107: ;
					{
						Tnode190813* LOC119;
						NI LOC120;
						if (!(*m).basetypematch) goto LA111;
						{
							Ttype190849* LOC117;
							if (!container == 0) goto LA115;
							LOC117 = 0;
							LOC117 = arrayconstr_349936(c, arg);
							container = newnodeit_192807(((NU8) 41), (*(*n).kindU.S6.sons->data[a]).info, LOC117);
						}
						goto LA113;
						LA115: ;
						{
							incrindextype_349959((*container).typ);
						}
						LA113: ;
						addson_192819(container, arg);
						LOC119 = 0;
						LOC119 = implicitconv_348761(((NU8) 58), (*formal).typ, container, (&(*m)), c);
						setson_349829((*m).call, (NI)((*formal).position + ((NI) 1)), LOC119);
						LOC120 = 0;
						LOC120 = len_191097(n);
						f = ((f >= (NI)((NI)((NI)(formallen - LOC120) + a) + ((NI) 1))) ? f : (NI)((NI)((NI)(formallen - LOC120) + a) + ((NI) 1)));
					}
					goto LA109;
					LA111: ;
					{
						setson_349829((*m).call, (NI)((*formal).position + ((NI) 1)), arg);
						f += ((NI) 1);
						container = NIM_NIL;
					}
					LA109: ;
				}
				LA61: ;
				{
					if (!!((*formal).constraint == 0)) goto LA124;
					{
						NIM_BOOL LOC128;
						LOC128 = 0;
						LOC128 = matchnodekinds_269284((*formal).constraint, (*n).kindU.S6.sons->data[a]);
						if (!LOC128) goto LA129;
						(*m).genericmatches += ((NI) 100);
					}
					goto LA126;
					LA129: ;
					{
						(*m).state = ((NU8) 2);
						goto BeforeRet;
					}
					LA126: ;
				}
				LA124: ;
				{
					if (!((*(*formal).typ).kind == ((NU8) 23))) goto LA134;
					{
						NIM_BOOL LOC138;
						LOC138 = 0;
						LOC138 = islvalue_269263((*n).kindU.S6.sons->data[a]);
						if (!!(LOC138)) goto LA139;
						(*m).state = ((NU8) 2);
						goto BeforeRet;
					}
					LA139: ;
				}
				LA134: ;
			}
			LA10: ;
			a += ((NI) 1);
		} LA8: ;
	}
	}BeforeRet: ;
}

N_NIMCALL(void, partialmatch_350434)(Tcontext244023* c, Tnode190813* n, Tnode190813* norig, Tcandidate344209* m) {
	Intset187056 marker;
	memset((void*)(&marker), 0, sizeof(marker));
	chckNil((void*)(&marker));
	memset((void*)(&marker), 0, sizeof(marker));
	initintset_187927((&marker));
	matchesaux_350018(c, n, norig, m, (&marker));
}

N_NIMCALL(NIM_BOOL, argsfit_351421)(Tcontext244023* c, Tsym190843* candidate, Tnode190813* n, Tnode190813* norig) {
	NIM_BOOL result;
	result = 0;
	switch ((*candidate).kind) {
	case ((NU8) 12):
	case ((NU8) 13):
	case ((NU8) 14):
	case ((NU8) 15):
	case ((NU8) 16):
	case ((NU8) 6):
	case ((NU8) 18):
	case ((NU8) 17):
	{
		Tcandidate344209 m;
		memset((void*)(&m), 0, sizeof(m));
		initcandidate_344301(c, (&m), candidate, NIM_NIL, ((NI) -1));
		partialmatch_350434(c, n, norig, (&m));
		result = !((m.state == ((NU8) 2)));
	}
	break;
	default:
	{
		result = NIM_FALSE;
	}
	break;
	}
	return result;
}

N_NIMCALL(void, suggestcall_351444)(Tcontext244023* c, Tnode190813* n_351447, Tnode190813* norig, NI* outputs) {
	NIM_BOOL islocal_351452;
	islocal_351452 = NIM_TRUE;
	{
		Tscope190837* scope_351454;
		Tscope190837* HEX3Atmp_352904;
		Tscope190837* current_352907;
		scope_351454 = 0;
		HEX3Atmp_352904 = 0;
		HEX3Atmp_352904 = (*c).currentscope;
		current_352907 = HEX3Atmp_352904;
		{
			while (1) {
				Tsymseq190815* entries_351456;
				Tsymseq190815* result_351475;
				TY351525 LOC11;
				if (!!((current_352907 == NIM_NIL))) goto LA3;
				scope_351454 = current_352907;
				{
					if (!(scope_351454 == (*c).toplevelscope)) goto LA6;
					islocal_351452 = NIM_FALSE;
				}
				LA6: ;
				result_351475 = (Tsymseq190815*) newSeq((&NTI190815), 0);
				{
					Tsym190843* x_351477;
					Tstrtable190817 HEX3Atmp_352892;
					Ttabiter198119 it_352895;
					Tsym190843* s_352897;
					x_351477 = 0;
					memset((void*)(&HEX3Atmp_352892), 0, sizeof(HEX3Atmp_352892));
					HEX3Atmp_352892.counter = (*scope_351454).symbols.counter;
					HEX3Atmp_352892.data = (*scope_351454).symbols.data;
					memset((void*)(&it_352895), 0, sizeof(it_352895));
					s_352897 = inittabiter_198124((&it_352895), HEX3Atmp_352892);
					{
						while (1) {
							if (!!((s_352897 == NIM_NIL))) goto LA10;
							x_351477 = s_352897;
							result_351475 = (Tsymseq190815*) incrSeq(&(result_351475)->Sup, sizeof(Tsym190843*));
							asgnRefNoCycle((void**) (&result_351475->data[result_351475->Sup.len-1]), x_351477);
							s_352897 = nextiter_198132((&it_352895), HEX3Atmp_352892);
						} LA10: ;
					}
				}
				genericSeqAssign((&entries_351456), result_351475, (&NTI190815));
				memset((void*)(&LOC11), 0, sizeof(LOC11));
				LOC11.ClPrc = ((TMP2669) (HEX3Aanonymous_351507)); LOC11.ClEnv = NIM_NIL;
				sort_351518(entries_351456->data, entries_351456->Sup.len, LOC11, ((NU8) 1));
				{
					Tsym190843* item_351462;
					NI i_352901;
					NI L_352903;
					item_351462 = 0;
					i_352901 = ((NI) 0);
					L_352903 = (entries_351456 ? entries_351456->Sup.len : 0);
					{
						while (1) {
							Tsym190843* it;
							if (!(i_352901 < L_352903)) goto LA14;
							item_351462 = entries_351456->data[i_352901];
							it = item_351462;
							{
								NIM_BOOL LOC17;
								NIM_BOOL LOC18;
								NimStringDesc* LOC23;
								LOC17 = 0;
								LOC18 = 0;
								LOC18 = filtersym_351015(it);
								if (!(LOC18)) goto LA19;
								LOC18 = namefits_351392(c, it, n_351447);
								LA19: ;
								LOC17 = LOC18;
								if (!(LOC17)) goto LA20;
								LOC17 = argsfit_351421(c, it, n_351447, norig);
								LA20: ;
								if (!LOC17) goto LA21;
								LOC23 = 0;
								LOC23 = symtostr_351005(it, islocal_351452, ((NimStringDesc*) &TMP2675));
								suggestwriteln_164066(LOC23);
								(*outputs) += ((NI) 1);
							}
							LA21: ;
							i_352901 += ((NI) 1);
						} LA14: ;
					}
				}
				current_352907 = (*current_352907).parent;
			} LA3: ;
		}
	}
}

N_NIMCALL(void, suggestexpr_354070)(Tcontext244023* c, Tnode190813* node) {
	NI outputs;
{	{
		NU8 cp;
		if (!!((((*node).flags &(1<<((((NU8) 13))&15)))!=0))) goto LA3;
		{
			if (!(gtrackpos_164500.line < ((NI16) 0))) goto LA7;
			goto BeforeRet;
		}
		LA7: ;
		cp = incheckpoint_353640((*node).info);
		{
			if (!(cp == ((NU8) 0))) goto LA11;
			goto BeforeRet;
		}
		LA11: ;
	}
	LA3: ;
	outputs = ((NI) 0);
	{
		if (!(((NI) 0) < (*c).incompilescontext)) goto LA15;
		goto BeforeRet;
	}
	LA15: ;
	(*c).incompilescontext += ((NI) 1);
	{
		Tnode190813* n;
		if (!(gidecmd_154115 == ((NU8) 1))) goto LA19;
		{
			if (!(((*node).flags &(1<<((((NU8) 13))&15)))!=0)) goto LA23;
			n = node;
		}
		goto LA21;
		LA23: ;
		{
			n = findclosestdot_353647(node);
		}
		LA21: ;
		{
			if (!(n == NIM_NIL)) goto LA28;
			n = node;
		}
		LA28: ;
		{
			Tnode190813* obj;
			if (!((*n).kind == ((NU8) 45))) goto LA32;
			obj = safesemexpr_354062(c, (*n).kindU.S6.sons->data[((NI) 0)]);
			suggestfieldaccess_353428(c, obj, (&outputs));
			{
				NimStringDesc* LOC38;
				NimStringDesc* LOC39;
				if (!((gglobaloptions_154128 &(1<<((((NU8) 28))&31)))!=0)) goto LA36;
				LOC38 = 0;
				LOC38 = rendertree_212058(obj, 0);
				LOC39 = 0;
				LOC39 = typetostring_220032((*obj).typ, ((NU8) 0));
				printf("%s%s%s%s\012", ((NimStringDesc*) &TMP2667)? (((NimStringDesc*) &TMP2667))->data:"nil", LOC38? (LOC38)->data:"nil", ((NimStringDesc*) &TMP2668)? (((NimStringDesc*) &TMP2668))->data:"nil", LOC39? (LOC39)->data:"nil");
			}
			LA36: ;
		}
		goto LA30;
		LA32: ;
		{
			suggesteverything_353355(c, n, (&outputs));
		}
		LA30: ;
	}
	goto LA17;
	LA19: ;
	{
		Tnode190813* n;
		if (!(gidecmd_154115 == ((NU8) 2))) goto LA42;
		{
			if (!(((*node).flags &(1<<((((NU8) 13))&15)))!=0)) goto LA46;
			n = node;
		}
		goto LA44;
		LA46: ;
		{
			n = findclosestcall_353721(node);
		}
		LA44: ;
		{
			if (!(n == NIM_NIL)) goto LA51;
			n = node;
		}
		LA51: ;
		{
			Tnode190813* a;
			Tnode190813* x_354205;
			if (!((*n).kind == ((NU8) 27) || (*n).kind == ((NU8) 29) || (*n).kind == ((NU8) 30) || (*n).kind == ((NU8) 31) || (*n).kind == ((NU8) 26) || (*n).kind == ((NU8) 28) || (*n).kind == ((NU8) 32))) goto LA55;
			a = copynode_194640(n);
			x_354205 = safesemexpr_354062(c, (*n).kindU.S6.sons->data[((NI) 0)]);
			{
				NIM_BOOL LOC59;
				LOC59 = 0;
				LOC59 = ((*x_354205).kind == ((NU8) 1));
				if (LOC59) goto LA60;
				LOC59 = ((*x_354205).typ == NIM_NIL);
				LA60: ;
				if (!LOC59) goto LA61;
				x_354205 = (*n).kindU.S6.sons->data[((NI) 0)];
			}
			LA61: ;
			addson_192819(a, x_354205);
			{
				NI i_354238;
				NI HEX3Atmp_354282;
				NI LOC64;
				NI res_354285;
				i_354238 = 0;
				HEX3Atmp_354282 = 0;
				LOC64 = 0;
				LOC64 = sonslen_193403(n);
				HEX3Atmp_354282 = (NI)(LOC64 - ((NI) 1));
				res_354285 = ((NI) 1);
				{
					while (1) {
						Tnode190813* x;
						if (!(res_354285 <= HEX3Atmp_354282)) goto LA66;
						i_354238 = res_354285;
						x = safesemexpr_354062(c, (*n).kindU.S6.sons->data[i_354238]);
						{
							NIM_BOOL LOC69;
							LOC69 = 0;
							LOC69 = ((*x).kind == ((NU8) 1));
							if (LOC69) goto LA70;
							LOC69 = ((*x).typ == NIM_NIL);
							LA70: ;
							if (!LOC69) goto LA71;
							goto LA63;
						}
						LA71: ;
						addson_192819(a, x);
						res_354285 += ((NI) 1);
					} LA66: ;
				}
			} LA63: ;
			suggestcall_351444(c, a, n, (&outputs));
		}
		LA55: ;
	}
	goto LA17;
	LA42: ;
	LA17: ;
	(*c).incompilescontext -= ((NI) 1);
	{
		NIM_BOOL LOC75;
		LOC75 = 0;
		LOC75 = (((NI) 0) < outputs);
		if (!(LOC75)) goto LA76;
		LOC75 = !((gidecmd_154115 == ((NU8) 4)));
		LA76: ;
		if (!LOC75) goto LA77;
		suggestquit_164122();
	}
	LA77: ;
	}BeforeRet: ;
}

N_NIMCALL(void, newcandidate_344478)(Tcontext244023* ctx, Ttype190849* callee, Tcandidate344209* Result) {
	initcandidate_344276(ctx, Result, callee);
}

N_NIMCALL(Ttype190849*, arrayconstr_349948)(Tcontext244023* c, Tlineinfo163338 info) {
	Ttype190849* result;
	Ttype190849* LOC1;
	Ttype190849* LOC2;
	Ttype190849* LOC3;
	result = 0;
	result = newtypes_244218(((NU8) 4), c);
	LOC1 = 0;
	LOC1 = getsystype_238030(((NU8) 31));
	LOC2 = 0;
	LOC2 = makerangetype_245182(c, IL64(0), IL64(-1), info, LOC1);
	rawaddson_194478(result, LOC2);
	LOC3 = 0;
	LOC3 = newtypes_244218(((NU8) 3), c);
	rawaddson_194478(result, LOC3);
	return result;
}

N_NIMCALL(void, matches_350449)(Tcontext244023* c, Tnode190813* n, Tnode190813* norig, Tcandidate344209* m) {
	Intset187056 marker;
	NI f;
{	memset((void*)(&marker), 0, sizeof(marker));
	chckNil((void*)(&marker));
	memset((void*)(&marker), 0, sizeof(marker));
	initintset_187927((&marker));
	matchesaux_350018(c, n, norig, m, (&marker));
	{
		if (!((*m).state == ((NU8) 2))) goto LA3;
		goto BeforeRet;
	}
	LA3: ;
	f = ((NI) 1);
	{
		while (1) {
			NI LOC7;
			Tsym190843* formal;
			LOC7 = 0;
			LOC7 = sonslen_193403((*(*m).callee).n);
			if (!(f < LOC7)) goto LA6;
			formal = (*(*(*(*m).callee).n).kindU.S6.sons->data[f]).kindU.S4.sym;
			{
				NIM_BOOL LOC10;
				LOC10 = 0;
				LOC10 = containsorincl_187898((&marker), (*formal).position);
				if (!!(LOC10)) goto LA11;
				{
					if (!((*formal).ast == NIM_NIL)) goto LA15;
					{
						Tnode190813* container;
						Ttype190849* LOC21;
						Tnode190813* LOC22;
						if (!((*(*formal).typ).kind == ((NU8) 48))) goto LA19;
						LOC21 = 0;
						LOC21 = arrayconstr_349948(c, (*n).info);
						container = newnodeit_192807(((NU8) 41), (*n).info, LOC21);
						LOC22 = 0;
						LOC22 = implicitconv_348761(((NU8) 58), (*formal).typ, container, (&(*m)), c);
						addson_192819((*m).call, LOC22);
					}
					goto LA17;
					LA19: ;
					{
						(*m).state = ((NU8) 2);
						goto LA5;
					}
					LA17: ;
				}
				goto LA13;
				LA15: ;
				{
					Tnode190813* LOC25;
					LOC25 = 0;
					LOC25 = copytree_195028((*formal).ast);
					setson_349829((*m).call, (NI)((*formal).position + ((NI) 1)), LOC25);
				}
				LA13: ;
			}
			LA11: ;
			f += ((NI) 1);
		} LA6: ;
	} LA5: ;
	}BeforeRet: ;
}

N_NIMCALL(NimStringDesc*, argtypetostring_344916)(Tnode190813* arg, NU8 prefer) {
	NimStringDesc* result;
	result = 0;
	{
		Tnode190813* LOC5;
		if (!((*arg).kind == ((NU8) 56) || (*arg).kind == ((NU8) 57))) goto LA3;
		LOC5 = 0;
		LOC5 = HEX5BHEX5D_191244(arg, ((NI) 0));
		result = typetostring_220032((*LOC5).typ, prefer);
		{
			NI i_344950;
			NI HEX3Atmp_344952;
			NI LOC7;
			NI res_344955;
			i_344950 = 0;
			HEX3Atmp_344952 = 0;
			LOC7 = 0;
			LOC7 = len_191097(arg);
			HEX3Atmp_344952 = (LOC7 - 1);
			res_344955 = ((NI) 1);
			{
				while (1) {
					Tnode190813* LOC10;
					NimStringDesc* LOC11;
					if (!(res_344955 <= HEX3Atmp_344952)) goto LA9;
					i_344950 = res_344955;
					result = resizeString(result, 3);
appendString(result, ((NimStringDesc*) &TMP3004));
					LOC10 = 0;
					LOC10 = HEX5BHEX5D_191244(arg, i_344950);
					LOC11 = 0;
					LOC11 = typetostring_220032((*LOC10).typ, prefer);
					result = resizeString(result, LOC11->Sup.len + 0);
appendString(result, LOC11);
					res_344955 += ((NI) 1);
				} LA9: ;
			}
		}
	}
	goto LA1;
	LA3: ;
	{
		result = typetostring_220032((*arg).typ, prefer);
	}
	LA1: ;
	return result;
}

N_NIMCALL(NimStringDesc*, describeargs_344974)(Tcontext244023* c, Tnode190813* n, NI startidx, NU8 prefer) {
	NimStringDesc* result;
{	result = 0;
	result = copyString(((NimStringDesc*) &TMP2652));
	{
		NI i_344994;
		NI HEX3Atmp_345042;
		NI LOC2;
		NI res_345045;
		i_344994 = 0;
		HEX3Atmp_345042 = 0;
		LOC2 = 0;
		LOC2 = len_191097(n);
		HEX3Atmp_345042 = (NI)(LOC2 - ((NI) 1));
		res_345045 = startidx;
		{
			while (1) {
				Tnode190813* arg;
				NimStringDesc* LOC23;
				if (!(res_345045 <= HEX3Atmp_345042)) goto LA4;
				i_344994 = res_345045;
				arg = (*n).kindU.S6.sons->data[i_344994];
				{
					NimStringDesc* LOC9;
					if (!((*(*n).kindU.S6.sons->data[i_344994]).kind == ((NU8) 33))) goto LA7;
					LOC9 = 0;
					LOC9 = rendertree_212058((*(*n).kindU.S6.sons->data[i_344994]).kindU.S6.sons->data[((NI) 0)], 0);
					result = resizeString(result, LOC9->Sup.len + 0);
appendString(result, LOC9);
					result = resizeString(result, 2);
appendString(result, ((NimStringDesc*) &TMP3003));
					{
						if (!(*arg).typ == 0) goto LA12;
						arg = (*c).semoperand(c, (*(*n).kindU.S6.sons->data[i_344994]).kindU.S6.sons->data[((NI) 1)], 0);
						asgnRefNoCycle((void**) (&(*(*n).kindU.S6.sons->data[i_344994]).typ), (*arg).typ);
						asgnRefNoCycle((void**) (&(*(*n).kindU.S6.sons->data[i_344994]).kindU.S6.sons->data[((NI) 1)]), arg);
					}
					LA12: ;
				}
				goto LA5;
				LA7: ;
				{
					{
						if (!(*arg).typ == 0) goto LA17;
						arg = (*c).semoperand(c, (*n).kindU.S6.sons->data[i_344994], 0);
						asgnRefNoCycle((void**) (&(*n).kindU.S6.sons->data[i_344994]), arg);
					}
					LA17: ;
				}
				LA5: ;
				{
					if (!((*(*arg).typ).kind == ((NU8) 50))) goto LA21;
					goto BeforeRet;
				}
				LA21: ;
				LOC23 = 0;
				LOC23 = argtypetostring_344916(arg, prefer);
				result = resizeString(result, LOC23->Sup.len + 0);
appendString(result, LOC23);
				{
					NI LOC26;
					LOC26 = 0;
					LOC26 = sonslen_193403(n);
					if (!!((i_344994 == (NI)(LOC26 - ((NI) 1))))) goto LA27;
					result = resizeString(result, 2);
appendString(result, ((NimStringDesc*) &TMP3005));
				}
				LA27: ;
				res_345045 += ((NI) 1);
			} LA4: ;
		}
	}
	}BeforeRet: ;
	return result;
}

N_NIMCALL(Tnode190813*, usesym_354055)(Tsym190843* sym) {
	Tnode190813* result;
	result = 0;
	result = newsymnode_192325(sym);
	markused_344251((*result).info, sym);
	return result;
}

N_NIMCALL(void, semfinishoperands_350385)(Tcontext244023* c, Tnode190813* n) {
	{
		NI i_350408;
		NI HEX3Atmp_350412;
		NI LOC2;
		NI res_350415;
		i_350408 = 0;
		HEX3Atmp_350412 = 0;
		LOC2 = 0;
		LOC2 = len_191097(n);
		HEX3Atmp_350412 = (LOC2 - 1);
		res_350415 = ((NI) 1);
		{
			while (1) {
				if (!(res_350415 <= HEX3Atmp_350412)) goto LA4;
				i_350408 = res_350415;
				asgnRefNoCycle((void**) (&(*n).kindU.S6.sons->data[i_350408]), prepareoperand_349893(c, (*n).kindU.S6.sons->data[i_350408]));
				res_350415 += ((NI) 1);
			} LA4: ;
		}
	}
}

N_NIMCALL(NU8, cmptypes_348708)(Tcontext244023* c, Ttype190849* f, Ttype190849* a) {
	NU8 result;
	Tcandidate344209 m;
	result = 0;
	memset((void*)(&m), 0, sizeof(m));
	initcandidate_344276(c, (&m), f);
	result = typerel_345064((&m), f, a, NIM_TRUE);
	return result;
}

N_NIMCALL(void, suggeststmt_354301)(Tcontext244023* c, Tnode190813* n) {
	suggestexpr_354070(c, n);
}

N_NIMCALL(Tsym190843*, insttypeboundop_350551)(Tcontext244023* c, Tsym190843* dc, Ttype190849* t, Tlineinfo163338 info, NU8 op) {
	Tsym190843* result;
	Tcandidate344209 m;
	Ttype190849* f;
	result = 0;
	memset((void*)(&m), 0, sizeof(m));
	initcandidate_344276(c, (&m), (*dc).typ);
	f = (*(*dc).typ).sons->data[((NI) 1)];
	{
		if (!(op == ((NU8) 1))) goto LA3;
		{
			if (!((6291456 &(IL64(1)<<(((*f).kind)&IL64(63))))!=0)) goto LA7;
			f = lastson_193442(f);
		}
		LA7: ;
	}
	goto LA1;
	LA3: ;
	{
		{
			if (!((*f).kind == ((NU8) 23))) goto LA12;
			f = lastson_193442(f);
		}
		LA12: ;
	}
	LA1: ;
	{
		NU8 LOC16;
		LOC16 = 0;
		LOC16 = typerel_345064((&m), f, t, NIM_TRUE);
		if (!(LOC16 == ((NU8) 0))) goto LA17;
		localerror_165155(info, ((NU16) 4), ((NimStringDesc*) &TMP3476));
	}
	goto LA14;
	LA17: ;
	{
		result = (*c).semgenerateinstance.ClEnv? (*c).semgenerateinstance.ClPrc(c, dc, m.bindings, info, (*c).semgenerateinstance.ClEnv):((TMP3477)((*c).semgenerateinstance.ClPrc))(c, dc, m.bindings, info);
	}
	LA14: ;
	return result;
}
NIM_EXTERNC N_NOINLINE(void, nimsrc_sigmatchInit)(void) {
}

NIM_EXTERNC N_NOINLINE(void, nimsrc_sigmatchDatInit)(void) {
static TNimNode* TMP2662[19];
static TNimNode* TMP2663[3];
NI TMP2665;
static char* NIM_CONST TMP2664[3] = {
"csEmpty", 
"csMatch", 
"csNoMatch"};
static TNimNode TMP872[24];
NTI344209.size = sizeof(Tcandidate344209);
NTI344209.kind = 18;
NTI344209.base = 0;
TMP2662[0] = &TMP872[1];
TMP872[1].kind = 1;
TMP872[1].offset = offsetof(Tcandidate344209, c);
TMP872[1].typ = (&NTI244021);
TMP872[1].name = "c";
TMP2662[1] = &TMP872[2];
TMP872[2].kind = 1;
TMP872[2].offset = offsetof(Tcandidate344209, exactmatches);
TMP872[2].typ = (&NTI108);
TMP872[2].name = "exactMatches";
TMP2662[2] = &TMP872[3];
TMP872[3].kind = 1;
TMP872[3].offset = offsetof(Tcandidate344209, genericmatches);
TMP872[3].typ = (&NTI108);
TMP872[3].name = "genericMatches";
TMP2662[3] = &TMP872[4];
TMP872[4].kind = 1;
TMP872[4].offset = offsetof(Tcandidate344209, subtypematches);
TMP872[4].typ = (&NTI108);
TMP872[4].name = "subtypeMatches";
TMP2662[4] = &TMP872[5];
TMP872[5].kind = 1;
TMP872[5].offset = offsetof(Tcandidate344209, intconvmatches);
TMP872[5].typ = (&NTI108);
TMP872[5].name = "intConvMatches";
TMP2662[5] = &TMP872[6];
TMP872[6].kind = 1;
TMP872[6].offset = offsetof(Tcandidate344209, convmatches);
TMP872[6].typ = (&NTI108);
TMP872[6].name = "convMatches";
TMP2662[6] = &TMP872[7];
NTI344205.size = sizeof(NU8);
NTI344205.kind = 14;
NTI344205.base = 0;
NTI344205.flags = 3;
for (TMP2665 = 0; TMP2665 < 3; TMP2665++) {
TMP872[TMP2665+8].kind = 1;
TMP872[TMP2665+8].offset = TMP2665;
TMP872[TMP2665+8].name = TMP2664[TMP2665];
TMP2663[TMP2665] = &TMP872[TMP2665+8];
}
TMP872[11].len = 3; TMP872[11].kind = 2; TMP872[11].sons = &TMP2663[0];
NTI344205.node = &TMP872[11];
TMP872[7].kind = 1;
TMP872[7].offset = offsetof(Tcandidate344209, state);
TMP872[7].typ = (&NTI344205);
TMP872[7].name = "state";
TMP2662[7] = &TMP872[12];
TMP872[12].kind = 1;
TMP872[12].offset = offsetof(Tcandidate344209, callee);
TMP872[12].typ = (&NTI190809);
TMP872[12].name = "callee";
TMP2662[8] = &TMP872[13];
TMP872[13].kind = 1;
TMP872[13].offset = offsetof(Tcandidate344209, calleesym);
TMP872[13].typ = (&NTI190811);
TMP872[13].name = "calleeSym";
TMP2662[9] = &TMP872[14];
TMP872[14].kind = 1;
TMP872[14].offset = offsetof(Tcandidate344209, calleescope);
TMP872[14].typ = (&NTI108);
TMP872[14].name = "calleeScope";
TMP2662[10] = &TMP872[15];
TMP872[15].kind = 1;
TMP872[15].offset = offsetof(Tcandidate344209, call);
TMP872[15].typ = (&NTI190805);
TMP872[15].name = "call";
TMP2662[11] = &TMP872[16];
TMP872[16].kind = 1;
TMP872[16].offset = offsetof(Tcandidate344209, bindings);
TMP872[16].typ = (&NTI190861);
TMP872[16].name = "bindings";
TMP2662[12] = &TMP872[17];
TMP872[17].kind = 1;
TMP872[17].offset = offsetof(Tcandidate344209, basetypematch);
TMP872[17].typ = (&NTI138);
TMP872[17].name = "baseTypeMatch";
TMP2662[13] = &TMP872[18];
TMP872[18].kind = 1;
TMP872[18].offset = offsetof(Tcandidate344209, fauxmatch);
TMP872[18].typ = (&NTI190260);
TMP872[18].name = "fauxMatch";
TMP2662[14] = &TMP872[19];
TMP872[19].kind = 1;
TMP872[19].offset = offsetof(Tcandidate344209, genericconverter);
TMP872[19].typ = (&NTI138);
TMP872[19].name = "genericConverter";
TMP2662[15] = &TMP872[20];
TMP872[20].kind = 1;
TMP872[20].offset = offsetof(Tcandidate344209, coercedistincts);
TMP872[20].typ = (&NTI138);
TMP872[20].name = "coerceDistincts";
TMP2662[16] = &TMP872[21];
TMP872[21].kind = 1;
TMP872[21].offset = offsetof(Tcandidate344209, typedescmatched);
TMP872[21].typ = (&NTI138);
TMP872[21].name = "typedescMatched";
TMP2662[17] = &TMP872[22];
TMP872[22].kind = 1;
TMP872[22].offset = offsetof(Tcandidate344209, inheritancepenalty);
TMP872[22].typ = (&NTI108);
TMP872[22].name = "inheritancePenalty";
TMP2662[18] = &TMP872[23];
TMP872[23].kind = 1;
TMP872[23].offset = offsetof(Tcandidate344209, errors);
TMP872[23].typ = (&NTI190815);
TMP872[23].name = "errors";
TMP872[0].len = 19; TMP872[0].kind = 2; TMP872[0].sons = &TMP2662[0];
NTI344209.node = &TMP872[0];
}

