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

#include "nimbase.h"
#include <setjmp.h>
#include <string.h>
#include <stdio.h>
typedef struct Suggest394010 Suggest394010;
typedef struct Tsym224841 Tsym224841;
typedef struct Tlineinfo189352 Tlineinfo189352;
typedef struct Tcontext279023 Tcontext279023;
typedef struct Tnode224809 Tnode224809;
typedef struct Ttype224847 Ttype224847;
typedef struct NimStringDesc NimStringDesc;
typedef struct TGenericSeq TGenericSeq;
typedef struct Tident197021 Tident197021;
typedef struct Tnodeseq224803 Tnodeseq224803;
typedef struct Tpasscontext276005 Tpasscontext276005;
typedef struct TNimObject TNimObject;
typedef struct TNimType TNimType;
typedef struct TNimNode TNimNode;
typedef struct Tscope224835 Tscope224835;
typedef struct Tproccon279011 Tproccon279011;
typedef struct Tsymseq224811 Tsymseq224811;
typedef struct Intset221056 Intset221056;
typedef struct Trunk221052 Trunk221052;
typedef struct Trunkseq221054 Trunkseq221054;
typedef struct Tlinkedlist140028 Tlinkedlist140028;
typedef struct Tlistentry140022 Tlistentry140022;
typedef struct Tidtable224859 Tidtable224859;
typedef struct Tidpairseq224857 Tidpairseq224857;
typedef struct Tstrtable224813 Tstrtable224813;
typedef struct Tctx278048 Tctx278048;
typedef struct TY279143 TY279143;
typedef struct Exception Exception;
typedef struct TSafePoint TSafePoint;
typedef struct Cell48947 Cell48947;
typedef struct Cellset48959 Cellset48959;
typedef struct Gcheap51018 Gcheap51018;
typedef struct Gcstack51016 Gcstack51016;
typedef struct Cellseq48963 Cellseq48963;
typedef struct Pagedesc48955 Pagedesc48955;
typedef struct Memregion30891 Memregion30891;
typedef struct Smallchunk30843 Smallchunk30843;
typedef struct Llchunk30885 Llchunk30885;
typedef struct Bigchunk30845 Bigchunk30845;
typedef struct Intset30817 Intset30817;
typedef struct Trunk30813 Trunk30813;
typedef struct Avlnode30889 Avlnode30889;
typedef struct Gcstat51014 Gcstat51014;
typedef struct Tidobj197015 Tidobj197015;
typedef struct Ttypeseq224843 Ttypeseq224843;
typedef struct TY224944 TY224944;
typedef struct Tloc224823 Tloc224823;
typedef struct Ropeobj175009 Ropeobj175009;
typedef struct Tlib224827 Tlib224827;
typedef struct Ttabiter232119 Ttabiter232119;
typedef struct TY130408 TY130408;
typedef struct Tdocumentor383007 Tdocumentor383007;
typedef struct Tcandidate387209 Tcandidate387209;
typedef struct TY90959 TY90959;
typedef struct Tidpair224855 Tidpair224855;
typedef struct TY278254 TY278254;
typedef struct TY190417 TY190417;
typedef struct PprocHEX3Aobjecttype278233 PprocHEX3Aobjecttype278233;
typedef struct TY278273 TY278273;
typedef struct Tinstantiationpair279013 Tinstantiationpair279013;
typedef struct Tinstantiation224831 Tinstantiation224831;
typedef struct Basechunk30841 Basechunk30841;
typedef struct Freecell30833 Freecell30833;
typedef struct Rstgenerator346016 Rstgenerator346016;
typedef struct Stringtableobj145212 Stringtableobj145212;
typedef struct TY346035 TY346035;
typedef struct Table346053 Table346053;
typedef struct Keyvaluepairseq346056 Keyvaluepairseq346056;
typedef struct TY278234 TY278234;
typedef struct TY278239 TY278239;
typedef struct TY278274 TY278274;
typedef struct Vmargs278042 Vmargs278042;
typedef struct TY224932 TY224932;
typedef struct Keyvaluepairseq145210 Keyvaluepairseq145210;
typedef struct Tocentry346012 Tocentry346012;
typedef struct Rstnode331011 Rstnode331011;
typedef struct Keyvaluepair346059 Keyvaluepair346059;
typedef struct Tblock278030 Tblock278030;
typedef struct TY278214 TY278214;
typedef struct Keyvaluepair145208 Keyvaluepair145208;
typedef struct Rstnodeseq331009 Rstnodeseq331009;
typedef struct {
N_NIMCALL_PTR(void, ClPrc) (Suggest394010* result, void* ClEnv);
void* ClEnv;
} TY394020;
struct  Tlineinfo189352  {
NI16 line;
NI16 col;
NI32 fileindex;
};
struct  TGenericSeq  {
NI len;
NI reserved;
};
struct  NimStringDesc  {
  TGenericSeq Sup;
NIM_CHAR data[SEQ_DECL_SIZE];
};
struct  Tnode224809  {
Ttype224847* typ;
Tlineinfo189352 info;
NU16 flags;
NU8 kind;
union{
struct {NI64 intval;
} S1;
struct {NF floatval;
} S2;
struct {NimStringDesc* strval;
} S3;
struct {Tsym224841* sym;
} S4;
struct {Tident197021* ident;
} S5;
struct {Tnodeseq224803* sons;
} S6;
} kindU;
NimStringDesc* comment;
};
typedef N_NIMCALL_PTR(void, TY3889) (void* p, NI op);
typedef N_NIMCALL_PTR(void*, TY3894) (void* p);
struct  TNimType  {
NI size;
NU8 kind;
NU8 flags;
TNimType* base;
TNimNode* node;
void* finalizer;
TY3889 marker;
TY3894 deepcopy;
};
struct  TNimObject  {
TNimType* m_type;
};
struct  Tpasscontext276005  {
  TNimObject Sup;
NIM_BOOL fromcache;
};
struct  Intset221056  {
NI counter;
NI max;
Trunk221052* head;
Trunkseq221054* data;
};
struct  Tlinkedlist140028  {
Tlistentry140022* head;
Tlistentry140022* tail;
NI counter;
};
struct  Tidtable224859  {
NI counter;
Tidpairseq224857* data;
};
typedef N_NIMCALL_PTR(Tnode224809*, TY279074) (Tcontext279023* c, Tnode224809* n);
typedef N_NIMCALL_PTR(Tnode224809*, TY279079) (Tcontext279023* c, Tnode224809* n, NU16 flags);
typedef N_NIMCALL_PTR(Tnode224809*, TY279087) (Tcontext279023* c, Tnode224809* n, NU16 flags);
typedef N_NIMCALL_PTR(Tnode224809*, TY279095) (Tcontext279023* c, Tnode224809* n);
typedef N_NIMCALL_PTR(Tnode224809*, TY279100) (Tcontext279023* c, Tnode224809* n, NU16 flags);
typedef N_NIMCALL_PTR(Tnode224809*, TY279108) (Tcontext279023* c, Tnode224809* n);
typedef N_NIMCALL_PTR(Tnode224809*, TY279113) (Tcontext279023* c, Tnode224809* n, Tnode224809* norig, NU32 filter);
typedef N_NIMCALL_PTR(Ttype224847*, TY279120) (Tcontext279023* c, Tnode224809* n, Ttype224847* prev);
typedef struct {
N_NIMCALL_PTR(Tnode224809*, ClPrc) (Tcontext279023* c, Tidtable224859 pt, Tnode224809* n, void* ClEnv);
void* ClEnv;
} TY279126;
typedef struct {
N_NIMCALL_PTR(Tsym224841*, ClPrc) (Tcontext279023* c, Tsym224841* fn, Tidtable224859 pt, Tlineinfo189352 info, void* ClEnv);
void* ClEnv;
} TY279132;
struct  Tstrtable224813  {
NI counter;
Tsymseq224811* data;
};
typedef N_NIMCALL_PTR(Tsym224841*, TY279148) (Tcontext279023* c, Tsym224841* dc, Ttype224847* t, Tlineinfo189352 info, NU8 op);
struct  Tcontext279023  {
  Tpasscontext276005 Sup;
Tsym224841* module;
Tscope224835* currentscope;
Tscope224835* importtable;
Tscope224835* toplevelscope;
Tproccon279011* p;
Tsymseq224811* friendmodules;
NI instcounter;
Intset221056 ambiguoussymbols;
NI intypeclass;
NI ingenericcontext;
NI inunrolledcontext;
NI compilescontextid;
NI compilescontextidgenerator;
NI ingenericinst;
Tsymseq224811* converters;
Tsymseq224811* patterns;
Tlinkedlist140028 optionstack;
Tidtable224859 symmapping;
Tlinkedlist140028 libs;
TY279074 semconstexpr;
TY279079 semexpr;
TY279087 semtryexpr;
TY279095 semtryconstexpr;
TY279100 semoperand;
TY279108 semconstboolexpr;
TY279113 semoverloadedcall;
TY279120 semtypenode;
TY279126 seminferredlambda;
TY279132 semgenerateinstance;
Intset221056 includedfiles;
Tstrtable224813 userpragmas;
Tctx278048* evalcontext;
Intset221056 unknownidents;
TY279143* generics;
NI lastgenericidx;
NI hloloopdetector;
NI inparallelstmt;
TY279148 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;
} TY19211;
struct  TSafePoint  {
TSafePoint* prev;
NI status;
jmp_buf context;
NIM_BOOL hasRaiseAction;
TY19211 raiseAction;
};
struct  TNimNode  {
NU8 kind;
NI offset;
TNimType* typ;
NCSTRING name;
NI len;
TNimNode** sons;
};
struct  Cell48947  {
NI refcount;
TNimType* typ;
};
struct  Cellseq48963  {
NI len;
NI cap;
Cell48947** d;
};
struct  Cellset48959  {
NI counter;
NI max;
Pagedesc48955* head;
Pagedesc48955** data;
};
typedef Smallchunk30843* TY30906[512];
typedef Trunk30813* Trunkbuckets30815[256];
struct  Intset30817  {
Trunkbuckets30815 data;
};
struct  Memregion30891  {
NI minlargeobj;
NI maxlargeobj;
TY30906 freesmallchunks;
Llchunk30885* llmem;
NI currmem;
NI maxmem;
NI freemem;
NI lastsize;
Bigchunk30845* freechunkslist;
Intset30817 chunkstarts;
Avlnode30889* root;
Avlnode30889* deleted;
Avlnode30889* last;
Avlnode30889* freeavlnodes;
};
struct  Gcstat51014  {
NI stackscans;
NI cyclecollections;
NI maxthreshold;
NI maxstacksize;
NI maxstackcells;
NI cycletablesize;
NI64 maxpause;
};
struct  Gcheap51018  {
Gcstack51016* stack;
void* stackbottom;
NI cyclethreshold;
Cellseq48963 zct;
Cellseq48963 decstack;
Cellset48959 cycleroots;
Cellseq48963 tempstack;
NI recgclock;
Memregion30891 region;
Gcstat51014 stat;
};
struct  Tidobj197015  {
  TNimObject Sup;
NI id;
};
struct  Tloc224823  {
NU8 k;
NU8 s;
NU16 flags;
Ttype224847* t;
Ropeobj175009* r;
Ropeobj175009* heaproot;
};
struct  Tsym224841  {
  Tidobj197015 Sup;
NU8 kind;
union{
struct {Ttypeseq224843* typeinstcache;
Tscope224835* typscope;
} S1;
struct {TY224944* procinstcache;
Tsym224841* gcunsafetyreason;
} S2;
struct {TY224944* usedgenerics;
Tstrtable224813 tab;
} S3;
struct {Tsym224841* guard;
NI bitsize;
} S4;
} kindU;
NU8 magic;
Ttype224847* typ;
Tident197021* name;
Tlineinfo189352 info;
Tsym224841* owner;
NU32 flags;
Tnode224809* ast;
NU32 options;
NI position;
NI offset;
Tloc224823 loc;
Tlib224827* annex;
Tnode224809* constraint;
};
struct  Tscope224835  {
NI depthlevel;
Tstrtable224813 symbols;
Tnodeseq224803* usingsyms;
Tscope224835* parent;
};
struct  Ttabiter232119  {
NI h;
};
typedef N_CLOSURE_PTR(void, TMP2063) (Suggest394010* result);
struct  Suggest394010  {
NU8 section;
TY130408* qualifiedpath;
NimStringDesc* filepath;
NI line;
NI column;
NimStringDesc* doc;
NU8 symkind;
NimStringDesc* forth;
};
struct  Tident197021  {
  Tidobj197015 Sup;
NimStringDesc* s;
Tident197021* next;
NI h;
};
struct  Ttype224847  {
  Tidobj197015 Sup;
NU8 kind;
NU8 callconv;
NU32 flags;
Ttypeseq224843* sons;
Tnode224809* n;
Tsym224841* owner;
Tsym224841* sym;
Tsym224841* destructor;
Tsym224841* deepcopy;
Tsym224841* assignment;
NI64 size;
NI16 align;
NI16 locklevel;
Tloc224823 loc;
};
typedef struct {
N_NIMCALL_PTR(NI, ClPrc) (Tsym224841* x_395050, Tsym224841* y_395052, void* ClEnv);
void* ClEnv;
} TY395048;
typedef N_CLOSURE_PTR(NI, TMP2733) (Tsym224841* x_397037, Tsym224841* y_397039, void* ClEnv);
struct  Tcandidate387209  {
Tcontext279023* c;
NI exactmatches;
NI genericmatches;
NI subtypematches;
NI intconvmatches;
NI convmatches;
NU8 state;
Ttype224847* callee;
Tsym224841* calleesym;
NI calleescope;
Tnode224809* call;
Tidtable224859 bindings;
NIM_BOOL basetypematch;
NU8 fauxmatch;
NIM_BOOL genericconverter;
NIM_BOOL coercedistincts;
NIM_BOOL typedescmatched;
NIM_BOOL isnocall;
NI inheritancepenalty;
Tsymseq224811* errors;
};
typedef Ttype224847* TY392275[1];
struct TY90959 {
NimStringDesc* Field0;
NI Field1;
};
typedef N_CLOSURE_PTR(Tnode224809*, TMP2768) (Tcontext279023* c, Tidtable224859 pt, Tnode224809* n);
typedef N_CLOSURE_PTR(Tsym224841*, TMP2769) (Tcontext279023* c, Tsym224841* fn, Tidtable224859 pt, Tlineinfo189352 info);
typedef N_CLOSURE_PTR(Tnode224809*, TMP2772) (Tcontext279023* c, Tidtable224859 pt, Tnode224809* n);
typedef N_CLOSURE_PTR(Tsym224841*, TMP2773) (Tcontext279023* c, Tsym224841* fn, Tidtable224859 pt, Tlineinfo189352 info);
typedef N_CLOSURE_PTR(NI, TMP2783) (Tsym224841* x_395037, Tsym224841* y_395039, void* ClEnv);
typedef N_CLOSURE_PTR(Tsym224841*, TMP3635) (Tcontext279023* c, Tsym224841* fn, Tidtable224859 pt, Tlineinfo189352 info);
struct  Tproccon279011  {
Tsym224841* owner;
Tsym224841* resultsym;
NI nestedloopcounter;
NI nestedblockcounter;
NI intrystmt;
Tproccon279011* next;
NIM_BOOL wasforwarded;
Tnode224809* bracketexpr;
};
typedef NI TY30822[8];
struct  Trunk221052  {
Trunk221052* next;
NI key;
TY30822 bits;
};
struct  Tlistentry140022  {
  TNimObject Sup;
Tlistentry140022* prev;
Tlistentry140022* next;
};
struct  Tidpair224855  {
Tidobj197015* key;
TNimObject* val;
};
struct  Tctx278048  {
  Tpasscontext276005 Sup;
TY278254* code;
TY190417* debug;
Tnode224809* globals;
Tnode224809* constants;
Ttypeseq224843* types;
Tnode224809* currentexceptiona;
Tnode224809* currentexceptionb;
NI exceptioninstr;
PprocHEX3Aobjecttype278233* prc;
Tsym224841* module;
Tnode224809* callsite;
NU8 mode;
NU8 features;
NIM_BOOL traceactive;
NI loopiterations;
Tlineinfo189352 comesfromheuristic;
TY278273* callbacks;
NimStringDesc* errorflag;
};
struct  Tinstantiationpair279013  {
Tsym224841* genericsym;
Tinstantiation224831* inst;
};
struct  Gcstack51016  {
Gcstack51016* prev;
Gcstack51016* next;
void* starts;
void* pos;
NI maxstacksize;
};
struct  Pagedesc48955  {
Pagedesc48955* next;
NI key;
TY30822 bits;
};
struct  Basechunk30841  {
NI prevsize;
NI size;
NIM_BOOL used;
};
struct  Smallchunk30843  {
  Basechunk30841 Sup;
Smallchunk30843* next;
Smallchunk30843* prev;
Freecell30833* freelist;
NI free;
NI acc;
NF data;
};
struct  Llchunk30885  {
NI size;
NI acc;
Llchunk30885* next;
};
struct  Bigchunk30845  {
  Basechunk30841 Sup;
Bigchunk30845* next;
Bigchunk30845* prev;
NI align;
NF data;
};
struct  Trunk30813  {
Trunk30813* next;
NI key;
TY30822 bits;
};
typedef Avlnode30889* TY30896[2];
struct  Avlnode30889  {
TY30896 link;
NI key;
NI upperbound;
NI level;
};
struct  Ropeobj175009  {
  TNimObject Sup;
Ropeobj175009* left;
Ropeobj175009* right;
NI length;
NimStringDesc* data;
};
struct  Tlib224827  {
  Tlistentry140022 Sup;
NU8 kind;
NIM_BOOL generated;
NIM_BOOL isoverriden;
Ropeobj175009* name;
Tnode224809* path;
};
typedef N_NIMCALL_PTR(NimStringDesc*, Findfilehandler332023) (NimStringDesc* filename);
typedef N_NIMCALL_PTR(void, Msghandler332021) (NimStringDesc* filename, NI line, NI col, NU8 msgkind, NimStringDesc* arg);
typedef NimStringDesc* TY346045[5];
struct  Table346053  {
Keyvaluepairseq346056* data;
NI counter;
};
struct  Rstgenerator346016  {
  TNimObject Sup;
NU8 target;
Stringtableobj145212* config;
NI splitafter;
NI listingcounter;
TY346035* tocpart;
NIM_BOOL hastoc;
NimStringDesc* theindex;
NU8 options;
Findfilehandler332023 findfile;
Msghandler332021 msghandler;
NimStringDesc* filename;
TY346045 meta;
NimStringDesc* currentsection;
Table346053 seenindexterms;
};
typedef Ropeobj175009* Tsections383005[26];
struct  Tdocumentor383007  {
  Rstgenerator346016 Sup;
Ropeobj175009* moddesc;
NI id;
Tsections383005 toc;
Tsections383005 section;
NimStringDesc* indexvalfilename;
NimStringDesc* analytics;
Stringtableobj145212* seensymbols;
};
struct TY278239 {
NIM_BOOL Field0;
NU8 Field1;
};
typedef TY278239 TY278242[256];
struct  PprocHEX3Aobjecttype278233  {
TY278234* blocks;
Tsym224841* sym;
TY278242 slots;
NI maxslots;
};
typedef struct {
N_NIMCALL_PTR(void, ClPrc) (Vmargs278042* args, void* ClEnv);
void* ClEnv;
} Vmcallback278044;
struct TY278274 {
NimStringDesc* Field0;
Vmcallback278044 Field1;
};
struct  Tinstantiation224831  {
Tsym224841* sym;
Ttypeseq224843* concretetypes;
TY224932* usedby;
NI compilesid;
};
struct  Freecell30833  {
Freecell30833* next;
NI zerofield;
};
struct  Stringtableobj145212  {
  TNimObject Sup;
NI counter;
Keyvaluepairseq145210* data;
NU8 mode;
};
struct  Tocentry346012  {
Rstnode331011* n;
NimStringDesc* refname;
NimStringDesc* header;
};
struct Keyvaluepair346059 {
NI Field0;
NimStringDesc* Field1;
NI Field2;
};
struct  Tblock278030  {
Tsym224841* label;
TY278214* fixups;
};
struct  Vmargs278042  {
NI ra;
NI rb;
NI rc;
void* slots;
Tnode224809* currentexception;
};
struct Keyvaluepair145208 {
NimStringDesc* Field0;
NimStringDesc* Field1;
};
struct  Rstnode331011  {
NU8 kind;
NimStringDesc* text;
NI level;
Rstnodeseq331009* sons;
};
struct TY130408 {
  TGenericSeq Sup;
  NimStringDesc* data[SEQ_DECL_SIZE];
};
struct Tsymseq224811 {
  TGenericSeq Sup;
  Tsym224841* data[SEQ_DECL_SIZE];
};
struct Ttypeseq224843 {
  TGenericSeq Sup;
  Ttype224847* data[SEQ_DECL_SIZE];
};
struct Tnodeseq224803 {
  TGenericSeq Sup;
  Tnode224809* data[SEQ_DECL_SIZE];
};
struct Trunkseq221054 {
  TGenericSeq Sup;
  Trunk221052* data[SEQ_DECL_SIZE];
};
struct Tidpairseq224857 {
  TGenericSeq Sup;
  Tidpair224855 data[SEQ_DECL_SIZE];
};
struct TY279143 {
  TGenericSeq Sup;
  Tinstantiationpair279013 data[SEQ_DECL_SIZE];
};
struct TY224944 {
  TGenericSeq Sup;
  Tinstantiation224831* data[SEQ_DECL_SIZE];
};
struct TY278254 {
  TGenericSeq Sup;
  NU32 data[SEQ_DECL_SIZE];
};
struct TY190417 {
  TGenericSeq Sup;
  Tlineinfo189352 data[SEQ_DECL_SIZE];
};
struct TY278273 {
  TGenericSeq Sup;
  TY278274 data[SEQ_DECL_SIZE];
};
struct TY346035 {
  TGenericSeq Sup;
  Tocentry346012 data[SEQ_DECL_SIZE];
};
struct Keyvaluepairseq346056 {
  TGenericSeq Sup;
  Keyvaluepair346059 data[SEQ_DECL_SIZE];
};
struct TY278234 {
  TGenericSeq Sup;
  Tblock278030 data[SEQ_DECL_SIZE];
};
struct TY224932 {
  TGenericSeq Sup;
  NI32 data[SEQ_DECL_SIZE];
};
struct Keyvaluepairseq145210 {
  TGenericSeq Sup;
  Keyvaluepair145208 data[SEQ_DECL_SIZE];
};
struct TY278214 {
  TGenericSeq Sup;
  NI data[SEQ_DECL_SIZE];
};
struct Rstnodeseq331009 {
  TGenericSeq Sup;
  Rstnode331011* data[SEQ_DECL_SIZE];
};
N_NIMCALL(NU8, incheckpoint_397413)(Tlineinfo189352 current);
N_NIMCALL(Tnode224809*, findclosestdot_397420)(Tnode224809* n);
static N_INLINE(NI, safelen_225126)(Tnode224809* n);
N_NIMCALL(Tnode224809*, safesemexpr_397857)(Tcontext279023* c, Tnode224809* 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_55022)(Cell48947* c);
static N_INLINE(NIM_BOOL, canbecycleroot_52667)(Cell48947* c);
static N_INLINE(void, rtladdcycleroot_53423)(Cell48947* c);
N_NOINLINE(void, incl_49665)(Cellset48959* s, Cell48947* cell);
static N_INLINE(Cell48947*, usrtocell_52646)(void* usr);
static N_INLINE(void, decref_54604)(Cell48947* c);
static N_INLINE(void, rtladdzct_54204)(Cell48947* c);
N_NOINLINE(void, addzct_52617)(Cellseq48963* s, Cell48947* c);
N_NIMCALL(void, reraiseException)(void);
N_NIMCALL(void, suggestfieldaccess_397201)(Tcontext279023* c, Tnode224809* n, NI* outputs);
N_NIMCALL(Tsym224841*, inittabiter_232124)(Ttabiter232119* ti, Tstrtable224813 tab);
static N_INLINE(NIM_BOOL, filtersym_394427)(Tsym224841* s);
N_NIMCALL(void, suggestresult_394414)(Suggest394010* s);
N_NIMCALL(void, suggestwriteln_190450)(NimStringDesc* s);
N_NIMCALL(NimStringDesc*, HEX24_394205)(Suggest394010* suggest);
N_NIMCALL(NimStringDesc*, HEX24_167755)(NU8 c);
N_NIMCALL(NimStringDesc*, addChar)(NimStringDesc* s, NIM_CHAR c);
N_NIMCALL(NimStringDesc*, reprEnum)(NI e_86859, TNimType* typ);
static N_INLINE(void, appendString)(NimStringDesc* dest, NimStringDesc* src);
N_NIMCALL(NimStringDesc*, resizeString)(NimStringDesc* dest, NI addlen);
N_NIMCALL(NimStringDesc*, nsuJoinSep)(NimStringDesc** a, NI aLen0, NimStringDesc* sep);
N_NIMCALL(NimStringDesc*, nimIntToStr)(NI x);
N_NIMCALL(NimStringDesc*, nsuEscape)(NimStringDesc* s, NimStringDesc* prefix, NimStringDesc* suffix);
N_NIMCALL(void, symtosuggest_394404)(Tsym224841* s, NIM_BOOL islocal, NimStringDesc* section, Suggest394010* Result);
N_NIMCALL(void, symtosuggest_394027)(Tsym224841* s, NIM_BOOL islocal, NimStringDesc* section, Tlineinfo189352 li, Suggest394010* Result);
N_NIMCALL(NU8, parseidecmd_167745)(NimStringDesc* s);
N_NIMCALL(NimStringDesc*, tofullpath_190662)(NI32 fileidx);
N_NIMCALL(void, unsureAsgnRef)(void** dest, void* src);
static N_INLINE(NI, tolinenumber_190839)(Tlineinfo189352 info);
static N_INLINE(NI, tocolumn_190849)(Tlineinfo189352 info);
N_NIMCALL(void*, newSeq)(TNimType* typ, NI len);
N_NIMCALL(TGenericSeq*, incrSeqV2)(TGenericSeq* seq, NI elemsize);
N_NIMCALL(NimStringDesc*, copyStringRC1)(NimStringDesc* src);
static N_INLINE(void, nimGCunrefNoCycle)(void* p);
N_NIMCALL(NimStringDesc*, typetostring_254032)(Ttype224847* typ, NU8 prefer);
N_NIMCALL(NimStringDesc*, copyString)(NimStringDesc* src);
N_NIMCALL(NimStringDesc*, extractdoccomment_383609)(Tsym224841* s, Tdocumentor383007* d);
N_NOINLINE(void, chckNil)(void* p);
N_NIMCALL(void, genericReset)(void* dest, TNimType* mt);
N_NIMCALL(Tsym224841*, nextiter_232132)(Ttabiter232119* ti, Tstrtable224813 tab);
N_NIMCALL(void, suggesteverything_397128)(Tcontext279023* c, Tnode224809* n, NI* outputs);
N_NIMCALL(void, suggestsymlist_394667)(Tcontext279023* c, Tnode224809* list, NI* outputs);
N_NIMCALL(NI, sonslen_227387)(Tnode224809* n);
N_NIMCALL(void, suggestfield_394632)(Tcontext279023* c, Tsym224841* s, NI* outputs);
static N_INLINE(NIM_BOOL, fieldvisible_394471)(Tcontext279023* c, Tsym224841* f);
N_NIMCALL(Tsym224841*, getmodule_232243)(Tsym224841* s);
N_NIMCALL(void, suggestoperations_396636)(Tcontext279023* c, Tnode224809* n, Ttype224847* typ, NI* outputs);
static N_INLINE(void, asgnRefNoCycle)(void** dest, void* src);
N_NIMCALL(void, genericSeqAssign)(void* dest, void* src_85804, TNimType* mt);
N_NIMCALL(void, sort_395041)(Tsym224841** a, NI aLen0, TY395048 cmp, NU8 order);
N_NIMCALL(NI, HEX3Aanonymous_397030)(Tsym224841* a_396808, Tsym224841* b_396810);
N_NIMCALL(NI, cmp_6577)(NimStringDesc* x, NimStringDesc* y);
static N_INLINE(NIM_BOOL, filtersymnoopr_394443)(Tsym224841* s);
N_NIMCALL(NIM_BOOL, iskeyword_246101)(Tident197021* i);
static N_INLINE(NIM_BOOL, typefits_396542)(Tcontext279023* c, Tsym224841* s, Ttype224847* firstarg);
N_NIMCALL(NI, sonslen_227351)(Ttype224847* n);
N_NIMCALL(Ttype224847*, skiptypes_228167)(Ttype224847* t, NU64 kinds);
N_NIMCALL(Ttype224847*, elemtype_254522)(Ttype224847* t);
N_NIMCALL(NIM_BOOL, argtypematches_393817)(Tcontext279023* c, Ttype224847* f, Ttype224847* a);
N_NIMCALL(void, initcandidate_387278)(Tcontext279023* ctx, Tcandidate387209* c, Ttype224847* callee);
static N_INLINE(void, initcandidateaux_387266)(Tcontext279023* ctx, Tcandidate387209* c, Ttype224847* callee);
N_NIMCALL(void, initidtable_228057)(Tidtable224859* x);
N_NIMCALL(Tnode224809*, paramtypesmatch_392733)(Tcandidate387209* m, Ttype224847* f, Ttype224847* a, Tnode224809* arg, Tnode224809* argorig);
N_NIMCALL(Tnode224809*, paramtypesmatchaux_392191)(Tcandidate387209* m, Ttype224847* f, Ttype224847* argtype_392196, Tnode224809* argsemantized, Tnode224809* argorig);
N_NIMCALL(void, assigntype_227445)(Ttype224847* dest, Ttype224847* src);
N_NIMCALL(Tnode224809*, newnodeit_226807)(NU8 kind, Tlineinfo189352 info, Ttype224847* typ);
N_NIMCALL(Ttype224847*, maketypefromexpr_279728)(Tcontext279023* c, Tnode224809* n);
N_NIMCALL(Ttype224847*, newtypes_279220)(NU8 kind, Tcontext279023* c);
N_NIMCALL(void*, newSeqRC1)(TNimType* typ, NI len);
N_NIMCALL(NU8, typerel_388064)(Tcandidate387209* c, Ttype224847* f, Ttype224847* aorig, NIM_BOOL dobind);
static N_INLINE(void, put_387291)(Tidtable224859* t, Ttype224847* key, Ttype224847* val);
N_NIMCALL(void, idtableput_232196)(Tidtable224859* t, Tidobj197015* key, TNimObject* val);
static N_INLINE(Ttype224847*, skipintlit_273698)(Ttype224847* t);
N_NIMCALL(Ttype224847*, getsystype_273190)(NU8 kind);
N_NIMCALL(Ttype224847*, maybeskipdistinct_389517)(Ttype224847* t, Tsym224841* callee);
N_NIMCALL(NIM_BOOL, shouldskipdistinct_389425)(Tnode224809* rules, Tident197021* callident);
static N_INLINE(NI, len_225098)(Tnode224809* n);
N_NIMCALL(Tident197021*, considerquotedident_285010)(Tnode224809* n);
N_NIMCALL(Ttype224847*, base_254039)(Ttype224847* t);
N_NIMCALL(Ttype224847*, lastson_227426)(Ttype224847* n);
static N_INLINE(NIM_BOOL, sameenumtypes_259855)(Ttype224847* a, Ttype224847* b);
static N_INLINE(Tnode224809*, HEX5BHEX5D_225244)(Tnode224809* n, NI i);
N_NIMCALL(Tnode224809*, tryresolvingstaticexpr_389562)(Tcandidate387209* c, Tnode224809* n);
N_NIMCALL(Tnode224809*, replacetypesinbody_303862)(Tcontext279023* p, Tidtable224859 pt, Tnode224809* n, Tsym224841* owner);
N_NOINLINE(NU8, typerangerel_389234)(Ttype224847* f, Ttype224847* a);
N_NIMCALL(NI64, firstord_254004)(Ttype224847* t);
N_NIMCALL(NI64, lastord_254010)(Ttype224847* t);
N_NIMCALL(NIM_BOOL, isconvertibletorange_388238)(Ttype224847* f, Ttype224847* a);
N_NIMCALL(NU8, handlerange_388122)(Ttype224847* f, Ttype224847* a, NU8 min, NU8 max);
static N_INLINE(NIM_BOOL, isintlit_254327)(Ttype224847* t);
N_NIMCALL(NU8, handlefloatrange_388293)(Ttype224847* f, Ttype224847* a);
static N_INLINE(NIM_BOOL, isfloatlit_254367)(Ttype224847* t);
N_NIMCALL(TNimObject*, idtableget_232182)(Tidtable224859 t, Tidobj197015* key);
N_NIMCALL(Ttype224847*, newtypewithsons_279807)(Tcontext279023* c, NU8 kind, Ttypeseq224843* sons);
N_NIMCALL(Tnode224809*, newintnode_225607)(NU8 kind, NI64 intval);
N_NIMCALL(NI64, lengthord_254016)(Ttype224847* t);
N_NIMCALL(NI, len_227369)(Ttype224847* n);
static N_INLINE(NU8, allowsnil_388833)(Ttype224847* f);
N_NIMCALL(NIM_BOOL, isordinaltype_254093)(Ttype224847* t);
N_NIMCALL(void, internalerror_195191)(NimStringDesc* errmsg);
N_NIMCALL(NU8, recordrel_388668)(Tcandidate387209* c, Ttype224847* f, Ttype224847* a);
N_NIMCALL(NIM_BOOL, sametype_259092)(Ttype224847* a, Ttype224847* b, NU8 flags);
N_NIMCALL(NU8, minrel_388648)(NU8 a, NU8 b);
N_NIMCALL(void, internalerror_195172)(Tlineinfo189352 info, NimStringDesc* errmsg);
N_NIMCALL(NIM_BOOL, sameobjecttypes_259785)(Ttype224847* a, Ttype224847* b);
N_NIMCALL(NI, isobjectsubtype_388352)(Ttype224847* a, Ttype224847* f);
static N_INLINE(NIM_BOOL, samedistincttypes_259844)(Ttype224847* a, Ttype224847* b);
N_NIMCALL(NU8, proctyperel_388950)(Tcandidate387209* c, Ttype224847* f, Ttype224847* a);
N_NIMCALL(NU8, procparamtyperel_388891)(Tcandidate387209* c, Ttype224847* f_388895, Ttype224847* a_388896);
N_NIMCALL(NIM_BOOL, ismetatype_225821)(Ttype224847* t);
N_NIMCALL(Ttype224847*, generatetypeinstance_303894)(Tcontext279023* p, Tidtable224859 pt, Tlineinfo189352 info, Ttype224847* t);
static N_INLINE(NIM_BOOL, inconsistentvartypes_388853)(Ttype224847* f, Ttype224847* a);
N_NIMCALL(NIM_BOOL, compatibleeffects_263489)(Ttype224847* formal, Ttype224847* actual);
N_NIMCALL(Ttype224847*, skipgenericalias_260119)(Ttype224847* t);
N_NIMCALL(Ttype224847*, concretetype_388074)(Tcandidate387209* c, Ttype224847* t);
N_NIMCALL(Ttype224847*, newtype_227140)(NU8 kind, Tsym224841* owner);
N_NIMCALL(void, addsonskipintlit_273731)(Ttype224847* father, Ttype224847* son);
N_NIMCALL(NimStringDesc*, rawNewString)(NI space);
N_NIMCALL(NU8, matchusertypeclass_389249)(Tcontext279023* c, Tcandidate387209* m, Ttype224847* ff, Ttype224847* a);
N_NIMCALL(void, localerror_195139)(Tlineinfo189352 info, NimStringDesc* arg);
N_NIMCALL(NimStringDesc*, HEX24_246090)(Tnode224809* n);
N_NIMCALL(Tscope224835*, openscope_285091)(Tcontext279023* c);
N_NIMCALL(Tsym224841*, newsym_225655)(NU8 symkind, Tident197021* name, Tsym224841* owner, Tlineinfo189352 info);
N_NIMCALL(Ttype224847*, maketypedesc_279683)(Tcontext279023* c, Ttype224847* typ);
N_NIMCALL(void, adddecl_285607)(Tcontext279023* c, Tsym224841* sym);
N_NIMCALL(Ttype224847*, makevartype_279644)(Tcontext279023* c, Ttype224847* basetype);
N_NIMCALL(NimStringDesc*, HEX24_195279)(TY90959 x);
N_NIMCALL(Tnode224809*, copytree_229028)(Tnode224809* src);
N_NIMCALL(void, closescope_285111)(Tcontext279023* c);
N_NIMCALL(NIM_BOOL, HEX3DHEX3D_263739)(Ttypeseq224843* x, Ttypeseq224843* y);
N_NIMCALL(NIM_BOOL, exprstructuralequivalent_253149)(Tnode224809* a, Tnode224809* b, NIM_BOOL strictsymequality);
N_NIMCALL(void, localerror_195128)(Tlineinfo189352 info, NU16 msg, NimStringDesc* arg);
N_NIMCALL(void, incmatches_392124)(Tcandidate387209* m, NU8 r, NI convmatch);
N_NIMCALL(NIM_BOOL, isinlineiterator_392087)(Ttype224847* t);
N_NIMCALL(Tnode224809*, newsymnode_226338)(Tsym224841* sym, Tlineinfo189352 info);
N_NIMCALL(Tnode224809*, implicitconv_391849)(NU8 kind, Ttype224847* f, Tnode224809* arg, Tcandidate387209* m, Tcontext279023* c);
N_NIMCALL(Tnode224809*, newnodei_226351)(NU8 kind, Tlineinfo189352 info);
N_NIMCALL(NIM_BOOL, containsgenerictype_263310)(Ttype224847* t);
N_NIMCALL(Ttype224847*, getinstantiatedtype_391812)(Tcontext279023* c, Tnode224809* arg, Tcandidate387209* m, Ttype224847* f);
N_NIMCALL(Ttype224847*, errortype_280161)(Tcontext279023* c);
N_NIMCALL(void, addson_226819)(Tnode224809* father, Tnode224809* son);
N_NIMCALL(NIM_BOOL, isemptycontainer_263978)(Ttype224847* t);
N_NIMCALL(Tnode224809*, userconvmatch_391884)(Tcontext279023* c, Tcandidate387209* m, Ttype224847* f, Ttype224847* a, Tnode224809* arg);
N_NIMCALL(void, markused_387253)(Tlineinfo189352 info, Tsym224841* s);
N_NIMCALL(void, message_195161)(Tlineinfo189352 info, NU16 msg, NimStringDesc* arg);
static N_INLINE(void, suggestsym_397733)(Tlineinfo189352 info, Tsym224841* s);
N_NIMCALL(void, findusages_397665)(Tlineinfo189352 info, Tsym224841* s);
N_NIMCALL(NIM_BOOL, istracked_397569)(Tlineinfo189352 current, NI tokenlen);
N_NIMCALL(NIM_BOOL, HEX3DHEX3D_192255)(Tlineinfo189352 a, Tlineinfo189352 b);
N_NIMCALL(void, finddefinition_397696)(Tlineinfo189352 info, Tsym224841* s);
N_NIMCALL(void, suggestquit_190506)(void);
N_NIMCALL(Tnode224809*, newsymnode_226325)(Tsym224841* sym);
N_NIMCALL(Tnode224809*, localconvmatch_391990)(Tcontext279023* c, Tcandidate387209* m, Ttype224847* f, Ttype224847* a, Tnode224809* arg);
N_NIMCALL(void, add_225165)(Tnode224809* father, Tnode224809* son);
N_NIMCALL(void, copycandidate_387492)(Tcandidate387209* a, Tcandidate387209* b);
N_NIMCALL(void, copyidtable_226091)(Tidtable224859* dest, Tidtable224859 src);
N_NIMCALL(void, genericAssign)(void* dest, void* src, TNimType* mt);
N_NIMCALL(NI, cmpcandidates_387824)(Tcandidate387209* a, Tcandidate387209* b);
N_NIMCALL(NI, complexdisambiguation_387639)(Ttype224847* a, Ttype224847* b);
N_NIMCALL(NI, sumgeneric_387504)(Ttype224847* t_387506);
N_NIMCALL(void, suggestobject_394718)(Tcontext279023* c, Tnode224809* n, NI* outputs);
N_NIMCALL(Tnode224809*, lastson_227406)(Tnode224809* n);
N_NIMCALL(NimStringDesc*, rendertree_246059)(Tnode224809* n, NU8 renderflags);
N_NIMCALL(Tnode224809*, findclosestcall_397494)(Tnode224809* n);
N_NIMCALL(Tnode224809*, copynode_228660)(Tnode224809* src);
N_NIMCALL(void, suggestcall_394844)(Tcontext279023* c, Tnode224809* n, Tnode224809* norig, NI* outputs);
N_NIMCALL(NI, HEX3Aanonymous_395030)(Tsym224841* a_394858, Tsym224841* b_394860);
N_NIMCALL(NIM_BOOL, namefits_394792)(Tcontext279023* c, Tsym224841* s, Tnode224809* n);
N_NIMCALL(NIM_BOOL, argsfit_394821)(Tcontext279023* c, Tsym224841* candidate, Tnode224809* n, Tnode224809* norig);
N_NIMCALL(void, initcandidate_387303)(Tcontext279023* ctx, Tcandidate387209* c, Tsym224841* callee, Tnode224809* binding, NI calleescope);
N_NIMCALL(Tsym224841*, originatingmodule_229736)(Tsym224841* s);
N_NIMCALL(Tsym224841*, skipgenericowner_229695)(Tsym224841* s);
N_NIMCALL(void, partialmatch_393705)(Tcontext279023* c, Tnode224809* n, Tnode224809* norig, Tcandidate387209* m);
N_NIMCALL(void, initintset_221927)(Intset221056* Result);
N_NIMCALL(void, matchesaux_393231)(Tcontext279023* c, Tnode224809* n, Tnode224809* norig, Tcandidate387209* m, Intset221056* marker);
N_NIMCALL(Ttype224847*, arrayconstr_393148)(Tcontext279023* c, Tlineinfo189352 info);
N_NIMCALL(void, rawaddson_228498)(Ttype224847* father, Ttype224847* son);
N_NIMCALL(Ttype224847*, makerangetype_280193)(Tcontext279023* c, NI64 first, NI64 last, Tlineinfo189352 info, Ttype224847* inttype);
N_NIMCALL(void, setson_393029)(Tnode224809* father, NI at, Tnode224809* son);
N_NIMCALL(TGenericSeq*, setLengthSeq)(TGenericSeq* seq, NI elemsize, NI newlen);
N_NIMCALL(void, incrindextype_393159)(Ttype224847* t);
N_NIMCALL(void, preparenamedparam_393113)(Tnode224809* a);
N_NIMCALL(Tnode224809*, newidentnode_226313)(Tident197021* ident, Tlineinfo189352 info);
N_NIMCALL(Tsym224841*, getsymfromlist_232228)(Tnode224809* list, Tident197021* ident, NI start);
N_NIMCALL(NIM_BOOL, containsorincl_221898)(Intset221056* s, NI key);
N_NIMCALL(Tnode224809*, prepareoperand_393052)(Tcontext279023* c, Ttype224847* formal, Tnode224809* a);
N_NIMCALL(NIM_BOOL, matchnodekinds_305302)(Tnode224809* p, Tnode224809* n);
N_NIMCALL(NIM_BOOL, islvalue_305281)(Tnode224809* n);
N_NIMCALL(Ttype224847*, arrayconstr_393136)(Tcontext279023* c, Tnode224809* n);
N_NIMCALL(Tnode224809*, prepareoperand_393093)(Tcontext279023* c, Tnode224809* a);
N_NIMCALL(NimStringDesc*, argtypetostring_387916)(Tnode224809* arg, NU8 prefer);
N_NIMCALL(void, suggestexpr_397865)(Tcontext279023* c, Tnode224809* node);
STRING_LITERAL(TMP2071, ".", 1);
STRING_LITERAL(TMP2076, "\"", 1);
STRING_LITERAL(TMP2200, "", 0);
STRING_LITERAL(TMP2754, "forward type in typeRel()", 25);
STRING_LITERAL(TMP2755, "recordRel", 9);
STRING_LITERAL(TMP2758, "wrong instantiated type!", 24);
STRING_LITERAL(TMP2759, "cannot resolve type: ", 21);
STRING_LITERAL(TMP2760, " too nested for type matching", 29);
STRING_LITERAL(TMP2764, "compiler/sigmatch.nim", 21);
NIM_CONST TY90959 TMP2763 = {((NimStringDesc*) &TMP2764),
((NI) 562)}
;
NIM_CONST TY90959 TMP2766 = {((NimStringDesc*) &TMP2764),
((NI) 1058)}
;
STRING_LITERAL(TMP2767, " unknown type kind ", 19);
STRING_LITERAL(TMP2770, "getInstantiatedType", 19);
STRING_LITERAL(TMP2771, "implicitConv", 12);
STRING_LITERAL(TMP2780, "x.state is not csMatch", 22);
STRING_LITERAL(TMP2781, "expression ", 11);
STRING_LITERAL(TMP2782, " has type ", 10);
NIM_CONST TY90959 TMP2786 = {((NimStringDesc*) &TMP2764),
((NI) 124)}
;
STRING_LITERAL(TMP2788, "matches", 7);
STRING_LITERAL(TMP3132, ": ", 2);
STRING_LITERAL(TMP3133, " | ", 3);
STRING_LITERAL(TMP3134, ", ", 2);
STRING_LITERAL(TMP3634, "cannot instantiate \'deepCopy\'", 29);
TY394020 suggestionresulthook_394023;
Tsym224841* usagesym_397663;
Tlineinfo189352 lastlineinfo_397664;
extern Tlineinfo189352 gtrackpos_190901;
extern NU8 gidecmd_166119;
extern TSafePoint* exchandler_20843;
extern TNimType NTI189358; /* ERecoverableError */
extern Exception* currexception_20845;
extern Tnode224809* emptynode_225807;
extern Gcheap51018 gch_51059;
extern TNimType NTI224441; /* TSymKind */
extern NU32 gglobaloptions_166132;
extern TNimType NTI130408; /* seq[string] */
TNimType NTI394010; /* Suggest */
extern TNimType NTI166029; /* IdeCmd */
extern TNimType NTI149; /* string */
extern TNimType NTI108; /* int */
extern TNimType NTI224811; /* TSymSeq */
extern TNimType NTI224843; /* TTypeSeq */
extern TNimType NTI224262; /* TTypeKind */
TNimType NTI387209; /* TCandidate */
extern TNimType NTI279021; /* PContext */
TNimType NTI387205; /* TCandidateState */
extern TNimType NTI224805; /* PType */
extern TNimType NTI224807; /* PSym */
extern TNimType NTI224801; /* PNode */
extern TNimType NTI224859; /* TIdTable */
extern TNimType NTI138; /* bool */

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

static N_INLINE(NI, safelen_225126)(Tnode224809* 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(Tnode224809*, findclosestdot_397420)(Tnode224809* n) {
	Tnode224809* result;
{	result = 0;
	{
		NIM_BOOL LOC3;
		NU8 LOC5;
		LOC3 = 0;
		LOC3 = ((*n).kind == ((NU8) 45));
		if (!(LOC3)) goto LA4;
		LOC5 = 0;
		LOC5 = incheckpoint_397413((*n).info);
		LOC3 = (LOC5 == ((NU8) 2));
		LA4: ;
		if (!LOC3) goto LA6;
		result = n;
	}
	goto LA1;
	LA6: ;
	{
		{
			NI i_397460;
			NI HEX3Atmp_397475;
			NI LOC10;
			NI res_397478;
			i_397460 = 0;
			HEX3Atmp_397475 = 0;
			LOC10 = 0;
			LOC10 = safelen_225126(n);
			HEX3Atmp_397475 = (LOC10 - 1);
			res_397478 = ((NI) 0);
			{
				while (1) {
					if (!(res_397478 <= HEX3Atmp_397475)) goto LA12;
					i_397460 = res_397478;
					result = findclosestdot_397420((*n).kindU.S6.sons->data[i_397460]);
					{
						if (!!((result == NIM_NIL))) goto LA15;
						goto BeforeRet;
					}
					LA15: ;
					res_397478 += ((NI) 1);
				} LA12: ;
			}
		}
	}
	LA1: ;
	}BeforeRet: ;
	return result;
}

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

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

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

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

static N_INLINE(void, rtladdcycleroot_53423)(Cell48947* c) {
	{
		if (!!((((NI) ((NI)((*c).refcount & ((NI) 3)))) == ((NI) 3)))) goto LA3;
		(*c).refcount = (NI)((NI)((*c).refcount & ((NI) -4)) | ((NI) 3));
		incl_49665((&gch_51059.cycleroots), c);
	}
	LA3: ;
}

static N_INLINE(void, incref_55022)(Cell48947* c) {
	(*c).refcount = (NI)((NU64)((*c).refcount) + (NU64)(((NI) 8)));
	{
		NIM_BOOL LOC3;
		LOC3 = 0;
		LOC3 = canbecycleroot_52667(c);
		if (!LOC3) goto LA4;
		rtladdcycleroot_53423(c);
	}
	LA4: ;
}

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

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

static N_INLINE(void, decref_54604)(Cell48947* c) {
	{
		(*c).refcount -= ((NI) 8);
		if (!((NU64)((*c).refcount) < (NU64)(((NI) 8)))) goto LA3;
		rtladdzct_54204(c);
	}
	goto LA1;
	LA3: ;
	{
		NIM_BOOL LOC6;
		LOC6 = 0;
		LOC6 = canbecycleroot_52667(c);
		if (!LOC6) goto LA7;
		rtladdcycleroot_53423(c);
	}
	goto LA1;
	LA7: ;
	LA1: ;
}

static N_INLINE(void, asgnRef)(void** dest, void* src) {
	{
		Cell48947* LOC5;
		if (!!((src == NIM_NIL))) goto LA3;
		LOC5 = 0;
		LOC5 = usrtocell_52646(src);
		incref_55022(LOC5);
	}
	LA3: ;
	{
		Cell48947* LOC10;
		if (!!(((*dest) == NIM_NIL))) goto LA8;
		LOC10 = 0;
		LOC10 = usrtocell_52646((*dest));
		decref_54604(LOC10);
	}
	LA8: ;
	(*dest) = src;
}

static N_INLINE(void, popCurrentException)(void) {
	asgnRef((void**) (&currexception_20845), NIM_NIL);
}

N_NIMCALL(Tnode224809*, safesemexpr_397857)(Tcontext279023* c, Tnode224809* n) {
	Tnode224809* volatile result;
	TSafePoint TMP2062;
	result = 0;
	pushSafePoint(&TMP2062);
	TMP2062.status = _setjmp(TMP2062.context);
	if (TMP2062.status == 0) {
		result = (*c).semexpr(c, n, 0);
		popSafePoint();
	}
	else {
		popSafePoint();
		if (isObj(getCurrentException()->Sup.m_type, (&NTI189358))) {
			TMP2062.status = 0;
			result = emptynode_225807;
			popCurrentException();
		}
	}
	if (TMP2062.status != 0) reraiseException();
	return result;
}

static N_INLINE(NIM_BOOL, filtersym_394427)(Tsym224841* 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;
}

N_NIMCALL(NimStringDesc*, HEX24_394205)(Suggest394010* suggest) {
	NimStringDesc* result;
	NimStringDesc* LOC1;
	NimStringDesc* LOC2;
	NimStringDesc* LOC3;
	NimStringDesc* LOC4;
	result = 0;
	result = HEX24_167755((*suggest).section);
	result = addChar(result, 9);
	result = resizeString(result, reprEnum((*suggest).symkind, (&NTI224441))->Sup.len + 0);
appendString(result, reprEnum((*suggest).symkind, (&NTI224441)));
	result = addChar(result, 9);
	LOC1 = 0;
	LOC1 = nsuJoinSep((*suggest).qualifiedpath->data, (*suggest).qualifiedpath->Sup.len, ((NimStringDesc*) &TMP2071));
	result = resizeString(result, LOC1->Sup.len + 0);
appendString(result, LOC1);
	result = addChar(result, 9);
	result = resizeString(result, (*suggest).forth->Sup.len + 0);
appendString(result, (*suggest).forth);
	result = addChar(result, 9);
	result = resizeString(result, (*suggest).filepath->Sup.len + 0);
appendString(result, (*suggest).filepath);
	result = addChar(result, 9);
	LOC2 = 0;
	LOC2 = nimIntToStr((*suggest).line);
	result = resizeString(result, LOC2->Sup.len + 0);
appendString(result, LOC2);
	result = addChar(result, 9);
	LOC3 = 0;
	LOC3 = nimIntToStr((*suggest).column);
	result = resizeString(result, LOC3->Sup.len + 0);
appendString(result, LOC3);
	result = addChar(result, 9);
	LOC4 = 0;
	LOC4 = nsuEscape((*suggest).doc, ((NimStringDesc*) &TMP2076), ((NimStringDesc*) &TMP2076));
	result = resizeString(result, LOC4->Sup.len + 0);
appendString(result, LOC4);
	return result;
}

N_NIMCALL(void, suggestresult_394414)(Suggest394010* s) {
	{
		if (!!(suggestionresulthook_394023.ClPrc == 0)) goto LA3;
		suggestionresulthook_394023.ClEnv? suggestionresulthook_394023.ClPrc(s, suggestionresulthook_394023.ClEnv):((TMP2063)(suggestionresulthook_394023.ClPrc))(s);
	}
	goto LA1;
	LA3: ;
	{
		NimStringDesc* LOC6;
		LOC6 = 0;
		LOC6 = HEX24_394205(s);
		suggestwriteln_190450(LOC6);
	}
	LA1: ;
}

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

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

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

N_NIMCALL(void, symtosuggest_394027)(Tsym224841* s, NIM_BOOL islocal, NimStringDesc* section, Tlineinfo189352 li, Suggest394010* Result) {
	(*Result).section = parseidecmd_167745(section);
	{
		if (!((gglobaloptions_166132 &(1<<((((NU8) 30))&31)))!=0)) goto LA3;
		(*Result).symkind = (*s).kind;
		unsureAsgnRef((void**) (&(*Result).filepath), tofullpath_190662(li.fileindex));
		(*Result).line = tolinenumber_190839(li);
		(*Result).column = tocolumn_190849(li);
	}
	goto LA1;
	LA3: ;
	{
		NimStringDesc* LOC20;
		(*Result).symkind = (*s).kind;
		unsureAsgnRef((void**) (&(*Result).qualifiedpath), (TY130408*) newSeq((&NTI130408), 0));
		{
			NIM_BOOL LOC8;
			Tsym224841* ow;
			NimStringDesc* LOC19;
			LOC8 = 0;
			LOC8 = !(islocal);
			if (!(LOC8)) goto LA9;
			LOC8 = !(((*s).kind == ((NU8) 6)));
			LA9: ;
			if (!LOC8) goto LA10;
			ow = (*s).owner;
			{
				NIM_BOOL LOC14;
				Tsym224841* ow2;
				NimStringDesc* LOC18;
				LOC14 = 0;
				LOC14 = !(((*ow).kind == ((NU8) 6)));
				if (!(LOC14)) goto LA15;
				LOC14 = !(((*ow).owner == NIM_NIL));
				LA15: ;
				if (!LOC14) goto LA16;
				ow2 = (*ow).owner;
				(*Result).qualifiedpath = (TY130408*) incrSeqV2(&((*Result).qualifiedpath)->Sup, sizeof(NimStringDesc*));
				LOC18 = 0;
				LOC18 = (*Result).qualifiedpath->data[(*Result).qualifiedpath->Sup.len]; (*Result).qualifiedpath->data[(*Result).qualifiedpath->Sup.len] = copyStringRC1((*(*ow2).name).s);
				if (LOC18) nimGCunrefNoCycle(LOC18);
				++(*Result).qualifiedpath->Sup.len;
			}
			LA16: ;
			(*Result).qualifiedpath = (TY130408*) incrSeqV2(&((*Result).qualifiedpath)->Sup, sizeof(NimStringDesc*));
			LOC19 = 0;
			LOC19 = (*Result).qualifiedpath->data[(*Result).qualifiedpath->Sup.len]; (*Result).qualifiedpath->data[(*Result).qualifiedpath->Sup.len] = copyStringRC1((*(*ow).name).s);
			if (LOC19) nimGCunrefNoCycle(LOC19);
			++(*Result).qualifiedpath->Sup.len;
		}
		LA10: ;
		(*Result).qualifiedpath = (TY130408*) incrSeqV2(&((*Result).qualifiedpath)->Sup, sizeof(NimStringDesc*));
		LOC20 = 0;
		LOC20 = (*Result).qualifiedpath->data[(*Result).qualifiedpath->Sup.len]; (*Result).qualifiedpath->data[(*Result).qualifiedpath->Sup.len] = copyStringRC1((*(*s).name).s);
		if (LOC20) nimGCunrefNoCycle(LOC20);
		++(*Result).qualifiedpath->Sup.len;
		{
			if (!!(((*s).typ == NIM_NIL))) goto LA23;
			unsureAsgnRef((void**) (&(*Result).forth), typetostring_254032((*s).typ, ((NU8) 0)));
		}
		goto LA21;
		LA23: ;
		{
			unsureAsgnRef((void**) (&(*Result).forth), copyString(((NimStringDesc*) &TMP2200)));
		}
		LA21: ;
		unsureAsgnRef((void**) (&(*Result).filepath), tofullpath_190662(li.fileindex));
		(*Result).line = tolinenumber_190839(li);
		(*Result).column = tocolumn_190849(li);
		unsureAsgnRef((void**) (&(*Result).doc), extractdoccomment_383609(s, NIM_NIL));
	}
	LA1: ;
}

N_NIMCALL(void, symtosuggest_394404)(Tsym224841* s, NIM_BOOL islocal, NimStringDesc* section, Suggest394010* Result) {
	chckNil((void*)Result);
	genericReset((void*)Result, (&NTI394010));
	symtosuggest_394027(s, islocal, section, (*s).info, Result);
}

N_NIMCALL(void, suggesteverything_397128)(Tcontext279023* c, Tnode224809* n, NI* outputs) {
	NIM_BOOL islocal;
	islocal = NIM_TRUE;
	{
		Tscope224835* scope_397135;
		Tscope224835* HEX3Atmp_397176;
		Tscope224835* current_397179;
		scope_397135 = 0;
		HEX3Atmp_397176 = 0;
		HEX3Atmp_397176 = (*c).currentscope;
		current_397179 = HEX3Atmp_397176;
		{
			while (1) {
				if (!!((current_397179 == NIM_NIL))) goto LA3;
				scope_397135 = current_397179;
				{
					if (!(scope_397135 == (*c).toplevelscope)) goto LA6;
					islocal = NIM_FALSE;
				}
				LA6: ;
				{
					Tsym224841* it_397147;
					Tstrtable224813 HEX3Atmp_397170;
					Ttabiter232119 it_397173;
					Tsym224841* s_397175;
					it_397147 = 0;
					memset((void*)(&HEX3Atmp_397170), 0, sizeof(HEX3Atmp_397170));
					HEX3Atmp_397170.counter = (*scope_397135).symbols.counter;
					HEX3Atmp_397170.data = (*scope_397135).symbols.data;
					memset((void*)(&it_397173), 0, sizeof(it_397173));
					s_397175 = inittabiter_232124((&it_397173), HEX3Atmp_397170);
					{
						while (1) {
							if (!!((s_397175 == NIM_NIL))) goto LA10;
							it_397147 = s_397175;
							{
								NIM_BOOL LOC13;
								NimStringDesc* LOC16;
								Suggest394010 LOC17;
								LOC13 = 0;
								LOC13 = filtersym_394427(it_397147);
								if (!LOC13) goto LA14;
								LOC16 = 0;
								LOC16 = HEX24_167755(((NU8) 1));
								memset((void*)(&LOC17), 0, sizeof(LOC17));
								symtosuggest_394404(it_397147, islocal, LOC16, (&LOC17));
								suggestresult_394414((&LOC17));
								(*outputs) += ((NI) 1);
							}
							LA14: ;
							s_397175 = nextiter_232132((&it_397173), HEX3Atmp_397170);
						} LA10: ;
					}
				}
				{
					if (!(scope_397135 == (*c).toplevelscope)) goto LA20;
					goto LA1;
				}
				LA20: ;
				current_397179 = (*current_397179).parent;
			} LA3: ;
		}
	} LA1: ;
}

static N_INLINE(NIM_BOOL, fieldvisible_394471)(Tcontext279023* c, Tsym224841* f) {
	NIM_BOOL result;
	NI fmoduleid;
	Tsym224841* LOC1;
	NIM_BOOL LOC2;
	result = 0;
	LOC1 = 0;
	LOC1 = getmodule_232243(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;
	{
		Tsym224841* module_394611;
		Tsymseq224811* HEX3Atmp_394614;
		NI i_394617;
		NI L_394619;
		module_394611 = 0;
		HEX3Atmp_394614 = 0;
		HEX3Atmp_394614 = (*c).friendmodules;
		i_394617 = ((NI) 0);
		L_394619 = (HEX3Atmp_394614 ? HEX3Atmp_394614->Sup.len : 0);
		{
			while (1) {
				if (!(i_394617 < L_394619)) goto LA6;
				module_394611 = HEX3Atmp_394614->data[i_394617];
				{
					if (!(fmoduleid == (*module_394611).Sup.id)) goto LA9;
					result = NIM_TRUE;
					goto LA4;
				}
				LA9: ;
				i_394617 += ((NI) 1);
			} LA6: ;
		}
	} LA4: ;
	return result;
}

N_NIMCALL(void, suggestfield_394632)(Tcontext279023* c, Tsym224841* s, NI* outputs) {
	{
		NIM_BOOL LOC3;
		NimStringDesc* LOC7;
		Suggest394010 LOC8;
		LOC3 = 0;
		LOC3 = filtersym_394427(s);
		if (!(LOC3)) goto LA4;
		LOC3 = fieldvisible_394471(c, s);
		LA4: ;
		if (!LOC3) goto LA5;
		LOC7 = 0;
		LOC7 = HEX24_167755(((NU8) 1));
		memset((void*)(&LOC8), 0, sizeof(LOC8));
		symtosuggest_394404(s, NIM_TRUE, LOC7, (&LOC8));
		suggestresult_394414((&LOC8));
		(*outputs) += ((NI) 1);
	}
	LA5: ;
}

N_NIMCALL(void, suggestsymlist_394667)(Tcontext279023* c, Tnode224809* list, NI* outputs) {
	{
		NI i_394685;
		NI HEX3Atmp_394699;
		NI LOC2;
		NI res_394702;
		i_394685 = 0;
		HEX3Atmp_394699 = 0;
		LOC2 = 0;
		LOC2 = sonslen_227387(list);
		HEX3Atmp_394699 = (NI)(LOC2 - ((NI) 1));
		res_394702 = ((NI) 0);
		{
			while (1) {
				if (!(res_394702 <= HEX3Atmp_394699)) goto LA4;
				i_394685 = res_394702;
				{
					if (!((*(*list).kindU.S6.sons->data[i_394685]).kind == ((NU8) 3))) goto LA7;
					suggestfield_394632(c, (*(*list).kindU.S6.sons->data[i_394685]).kindU.S4.sym, outputs);
				}
				LA7: ;
				res_394702 += ((NI) 1);
			} LA4: ;
		}
	}
}

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

N_NIMCALL(NI, HEX3Aanonymous_397030)(Tsym224841* a_396808, Tsym224841* b_396810) {
	NI result;
{	result = 0;
	result = cmp_6577((*(*a_396808).name).s, (*(*b_396810).name).s);
	goto BeforeRet;
	}BeforeRet: ;
	return result;
}

static N_INLINE(NIM_BOOL, filtersymnoopr_394443)(Tsym224841* 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_246101((*s).name);
	LOC1 = !(LOC5);
	LA4: ;
	result = LOC1;
	return result;
}

static N_INLINE(void, initcandidateaux_387266)(Tcontext279023* ctx, Tcandidate387209* c, Ttype224847* 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_387278)(Tcontext279023* ctx, Tcandidate387209* c, Ttype224847* callee) {
	initcandidateaux_387266(ctx, c, callee);
	unsureAsgnRef((void**) (&(*c).calleesym), NIM_NIL);
	initidtable_228057((&(*c).bindings));
}

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

static N_INLINE(void, put_387291)(Tidtable224859* t, Ttype224847* key, Ttype224847* val) {
	Tidobj197015* LOC1;
	Ttype224847* LOC2;
	TNimObject* LOC3;
	LOC1 = 0;
	LOC1 = &key->Sup;
	LOC2 = 0;
	LOC2 = skipintlit_273698(val);
	LOC3 = 0;
	LOC3 = &LOC2->Sup.Sup;
	idtableput_232196(t, LOC1, LOC3);
}

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

N_NIMCALL(NIM_BOOL, shouldskipdistinct_389425)(Tnode224809* rules, Tident197021* callident) {
	NIM_BOOL result;
{	result = 0;
	{
		if (!((*rules).kind == ((NU8) 130))) goto LA3;
		{
			Tnode224809* r_389439;
			r_389439 = 0;
			{
				NI i_389469;
				NI HEX3Atmp_389471;
				NI LOC7;
				NI res_389473;
				i_389469 = 0;
				HEX3Atmp_389471 = 0;
				LOC7 = 0;
				LOC7 = len_225098(rules);
				HEX3Atmp_389471 = (LOC7 - 1);
				res_389473 = ((NI) 0);
				{
					while (1) {
						if (!(res_389473 <= HEX3Atmp_389471)) goto LA9;
						i_389469 = res_389473;
						r_389439 = (*rules).kindU.S6.sons->data[i_389469];
						{
							Tident197021* LOC12;
							LOC12 = 0;
							LOC12 = considerquotedident_285010(r_389439);
							if (!(LOC12 == callident)) goto LA13;
							result = NIM_TRUE;
							goto BeforeRet;
						}
						LA13: ;
						res_389473 += ((NI) 1);
					} LA9: ;
				}
			}
		}
		result = NIM_FALSE;
		goto BeforeRet;
	}
	goto LA1;
	LA3: ;
	{
		{
			Tnode224809* r_389452;
			r_389452 = 0;
			{
				NI i_389480;
				NI HEX3Atmp_389482;
				NI LOC18;
				NI res_389484;
				i_389480 = 0;
				HEX3Atmp_389482 = 0;
				LOC18 = 0;
				LOC18 = len_225098(rules);
				HEX3Atmp_389482 = (LOC18 - 1);
				res_389484 = ((NI) 0);
				{
					while (1) {
						if (!(res_389484 <= HEX3Atmp_389482)) goto LA20;
						i_389480 = res_389484;
						r_389452 = (*rules).kindU.S6.sons->data[i_389480];
						{
							Tident197021* LOC23;
							LOC23 = 0;
							LOC23 = considerquotedident_285010(r_389452);
							if (!(LOC23 == callident)) goto LA24;
							result = NIM_FALSE;
							goto BeforeRet;
						}
						LA24: ;
						res_389484 += ((NI) 1);
					} LA20: ;
				}
			}
		}
		result = NIM_TRUE;
		goto BeforeRet;
	}
	LA1: ;
	}BeforeRet: ;
	return result;
}

N_NIMCALL(Ttype224847*, maybeskipdistinct_389517)(Ttype224847* t, Tsym224841* callee) {
	Ttype224847* 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_389425((*t).n, (*callee).name);
		LA8: ;
		if (!LOC3) goto LA9;
		result = base_254039(t);
	}
	goto LA1;
	LA9: ;
	{
		result = t;
	}
	LA1: ;
	return result;
}

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

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

N_NIMCALL(Tnode224809*, tryresolvingstaticexpr_389562)(Tcandidate387209* c, Tnode224809* n) {
	Tnode224809* result;
	Tnode224809* instantiated;
	result = 0;
	instantiated = replacetypesinbody_303862((*c).c, (*c).bindings, n, NIM_NIL);
	result = (*(*c).c).semexpr((*c).c, instantiated, 0);
	return result;
}

N_NOINLINE(NU8, typerangerel_389234)(Ttype224847* f, Ttype224847* a) {
	NU8 result;
	NI64 a0;
	NI64 a1;
	NI64 f0;
	NI64 f1;
	result = 0;
	a0 = firstord_254004(a);
	a1 = lastord_254010(a);
	f0 = firstord_254004(f);
	f1 = lastord_254010(f);
	{
		NIM_BOOL LOC3;
		LOC3 = 0;
		LOC3 = (a0 == f0);
		if (!(LOC3)) goto LA4;
		LOC3 = (a1 == f1);
		LA4: ;
		if (!LOC3) goto LA5;
		result = ((NU8) 10);
	}
	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_388238)(Ttype224847* f, Ttype224847* 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_254327)(Ttype224847* t) {
	NIM_BOOL result;
	NIM_BOOL LOC1;
	NIM_BOOL LOC2;
	result = 0;
	LOC1 = 0;
	LOC2 = 0;
	LOC2 = ((*t).kind == ((NU8) 31));
	if (!(LOC2)) goto LA3;
	LOC2 = !(((*t).n == NIM_NIL));
	LA3: ;
	LOC1 = LOC2;
	if (!(LOC1)) goto LA4;
	LOC1 = ((*(*t).n).kind == ((NU8) 6));
	LA4: ;
	result = LOC1;
	return result;
}

N_NIMCALL(NU8, handlerange_388122)(Ttype224847* f, Ttype224847* a, NU8 min, NU8 max) {
	NU8 result;
	result = 0;
	{
		if (!((*a).kind == (*f).kind)) goto LA3;
		result = ((NU8) 10);
	}
	goto LA1;
	LA3: ;
	{
		Ttype224847* ab;
		NU8 k;
		ab = skiptypes_228167(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_254327(ab);
			LA16: ;
			LOC12 = LOC13;
			if (!(LOC12)) goto LA17;
			LOC18 = 0;
			LOC18 = firstord_254004(f);
			LOC12 = (LOC18 <= (*(*ab).n).kindU.S1.intval);
			LA17: ;
			LOC11 = LOC12;
			if (!(LOC11)) goto LA19;
			LOC20 = 0;
			LOC20 = lastord_254010(f);
			LOC11 = ((*(*ab).n).kindU.S1.intval <= LOC20);
			LA19: ;
			if (!LOC11) goto LA21;
			result = ((NU8) 9);
		}
		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;
			Tnode224809* LOC40;
			Tnode224809* 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_254004(f);
			LOC40 = 0;
			LOC40 = HEX5BHEX5D_225244((*a).n, ((NI) 0));
			LOC35 = (LOC39 <= (*LOC40).kindU.S1.intval);
			LA38: ;
			LOC34 = LOC35;
			if (!(LOC34)) goto LA41;
			LOC42 = 0;
			LOC42 = HEX5BHEX5D_225244((*a).n, ((NI) 1));
			LOC43 = 0;
			LOC43 = lastord_254010(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_254367)(Ttype224847* 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_388293)(Ttype224847* f, Ttype224847* a) {
	NU8 result;
	result = 0;
	{
		if (!((*a).kind == (*f).kind)) goto LA3;
		result = ((NU8) 10);
	}
	goto LA1;
	LA3: ;
	{
		Ttype224847* ab;
		NU8 k;
		ab = skiptypes_228167(a, 1048576);
		k = (*ab).kind;
		{
			if (!(k == (*f).kind)) goto LA8;
			result = ((NU8) 4);
		}
		goto LA6;
		LA8: ;
		{
			NIM_BOOL LOC11;
			LOC11 = 0;
			LOC11 = isfloatlit_254367(ab);
			if (!LOC11) goto LA12;
			result = ((NU8) 9);
		}
		goto LA6;
		LA12: ;
		{
			NIM_BOOL LOC15;
			LOC15 = 0;
			LOC15 = isintlit_254327(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_388833)(Ttype224847* 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_388648)(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_388668)(Tcandidate387209* c, Ttype224847* f, Ttype224847* a) {
	NU8 result;
{	result = 0;
	result = ((NU8) 0);
	{
		NIM_BOOL LOC3;
		LOC3 = 0;
		LOC3 = sametype_259092(f, a, 0);
		if (!LOC3) goto LA4;
		result = ((NU8) 10);
	}
	goto LA1;
	LA4: ;
	{
		NI LOC7;
		NI LOC8;
		NI firstfield;
		LOC7 = 0;
		LOC7 = sonslen_227351(a);
		LOC8 = 0;
		LOC8 = sonslen_227351(f);
		if (!(LOC7 == LOC8)) goto LA9;
		result = ((NU8) 10);
		{
			if (!((*f).kind == ((NU8) 18))) goto LA13;
			firstfield = ((NI) 0);
		}
		goto LA11;
		LA13: ;
		{
			firstfield = ((NI) 1);
		}
		LA11: ;
		{
			NI i_388697;
			NI HEX3Atmp_388794;
			NI LOC17;
			NI res_388797;
			i_388697 = 0;
			HEX3Atmp_388794 = 0;
			LOC17 = 0;
			LOC17 = sonslen_227351(f);
			HEX3Atmp_388794 = (NI)(LOC17 - ((NI) 1));
			res_388797 = firstfield;
			{
				while (1) {
					NU8 m;
					if (!(res_388797 <= HEX3Atmp_388794)) goto LA19;
					i_388697 = res_388797;
					m = typerel_388064(c, (*f).sons->data[i_388697], (*a).sons->data[i_388697], NIM_TRUE);
					{
						if (!(m < ((NU8) 3))) goto LA22;
						result = ((NU8) 0);
						goto BeforeRet;
					}
					LA22: ;
					result = minrel_388648(result, m);
					res_388797 += ((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_388744;
				NI HEX3Atmp_388802;
				NI LOC31;
				NI res_388805;
				i_388744 = 0;
				HEX3Atmp_388802 = 0;
				LOC31 = 0;
				LOC31 = sonslen_227387((*f).n);
				HEX3Atmp_388802 = (NI)(LOC31 - ((NI) 1));
				res_388805 = ((NI) 0);
				{
					while (1) {
						if (!(res_388805 <= HEX3Atmp_388802)) goto LA33;
						i_388744 = res_388805;
						{
							if (!!(((*(*(*f).n).kindU.S6.sons->data[i_388744]).kind == ((NU8) 3)))) goto LA36;
							internalerror_195172((*(*f).n).info, ((NimStringDesc*) &TMP2755));
						}
						goto LA34;
						LA36: ;
						{
							if (!!(((*(*(*a).n).kindU.S6.sons->data[i_388744]).kind == ((NU8) 3)))) goto LA39;
							internalerror_195172((*(*a).n).info, ((NimStringDesc*) &TMP2755));
						}
						goto LA34;
						LA39: ;
						{
							Tsym224841* x;
							Tsym224841* y;
							x = (*(*(*f).n).kindU.S6.sons->data[i_388744]).kindU.S4.sym;
							y = (*(*(*a).n).kindU.S6.sons->data[i_388744]).kindU.S4.sym;
							{
								NIM_BOOL LOC44;
								NU8 LOC46;
								LOC44 = 0;
								LOC44 = ((*f).kind == ((NU8) 17));
								if (!(LOC44)) goto LA45;
								LOC46 = 0;
								LOC46 = typerel_388064(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_388805 += ((NI) 1);
					} LA33: ;
				}
			}
		}
		LA28: ;
	}
	goto LA1;
	LA9: ;
	LA1: ;
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NI, isobjectsubtype_388352)(Ttype224847* a, Ttype224847* f) {
	NI result;
	Ttype224847* 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_259785(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_228167(t, 2048);
			depth += ((NI) 1);
		} LA2: ;
	} LA1: ;
	{
		if (!!((t == NIM_NIL))) goto LA12;
		result = depth;
	}
	LA12: ;
	return result;
}

static N_INLINE(NIM_BOOL, samedistincttypes_259844)(Ttype224847* a, Ttype224847* b) {
	NIM_BOOL result;
	result = 0;
	result = sameobjecttypes_259785(a, b);
	return result;
}

static N_INLINE(NIM_BOOL, inconsistentvartypes_388853)(Ttype224847* f, Ttype224847* 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_388891)(Tcandidate387209* c, Ttype224847* f_388895, Ttype224847* a_388896) {
	NU8 result;
	Ttype224847* f;
	Ttype224847* a;
{	result = 0;
	f = f_388895;
	a = a_388896;
	{
		NIM_BOOL LOC3;
		Ttype224847* aresolved;
		Tidobj197015* LOC6;
		TNimObject* LOC7;
		LOC3 = 0;
		LOC3 = ismetatype_225821(a);
		if (!LOC3) goto LA4;
		LOC6 = 0;
		LOC6 = &a->Sup;
		LOC7 = 0;
		LOC7 = idtableget_232182((*c).bindings, LOC6);
		aresolved = ((Ttype224847*) (LOC7));
		{
			if (!!((aresolved == NIM_NIL))) goto LA10;
			a = aresolved;
		}
		LA10: ;
	}
	LA4: ;
	{
		NIM_BOOL LOC14;
		NU8 reverserel;
		LOC14 = 0;
		LOC14 = ismetatype_225821(a);
		if (!LOC14) goto LA15;
		{
			NIM_BOOL LOC19;
			LOC19 = 0;
			LOC19 = ismetatype_225821(f);
			if (!LOC19) goto LA20;
			f = generatetypeinstance_303894((*c).c, (*c).bindings, (*(*c).call).info, f);
			{
				NIM_BOOL LOC24;
				LOC24 = 0;
				LOC24 = (f == NIM_NIL);
				if (LOC24) goto LA25;
				LOC24 = ismetatype_225821(f);
				LA25: ;
				if (!LOC24) goto LA26;
				result = ((NU8) 5);
				goto BeforeRet;
			}
			LA26: ;
		}
		LA20: ;
		reverserel = typerel_388064(c, a, f, NIM_TRUE);
		{
			if (!(((NU8) 8) <= reverserel)) goto LA30;
			result = ((NU8) 6);
		}
		LA30: ;
	}
	goto LA12;
	LA15: ;
	{
		result = typerel_388064(c, f, a, NIM_TRUE);
	}
	LA12: ;
	{
		NIM_BOOL LOC35;
		LOC35 = 0;
		LOC35 = (result <= ((NU8) 3));
		if (LOC35) goto LA36;
		LOC35 = inconsistentvartypes_388853(f, a);
		LA36: ;
		if (!LOC35) goto LA37;
		result = ((NU8) 0);
	}
	LA37: ;
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NU8, proctyperel_388950)(Tcandidate387209* c, Ttype224847* f, Ttype224847* a) {
	NU8 result;
{	result = 0;
	switch ((*a).kind) {
	case ((NU8) 25):
	{
		{
			NI LOC4;
			NI LOC5;
			LOC4 = 0;
			LOC4 = sonslen_227351(f);
			LOC5 = 0;
			LOC5 = sonslen_227351(a);
			if (!!((LOC4 == LOC5))) goto LA6;
			goto BeforeRet;
		}
		LA6: ;
		result = ((NU8) 10);
		{
			NI i_388982;
			NI HEX3Atmp_389212;
			NI LOC9;
			NI res_389215;
			i_388982 = 0;
			HEX3Atmp_389212 = 0;
			LOC9 = 0;
			LOC9 = sonslen_227351(f);
			HEX3Atmp_389212 = (LOC9 - 1);
			res_389215 = ((NI) 1);
			{
				while (1) {
					NU8 LOC12;
					if (!(res_389215 <= HEX3Atmp_389212)) goto LA11;
					i_388982 = res_389215;
					LOC12 = 0;
					LOC12 = procparamtyperel_388891(c, (*f).sons->data[i_388982], (*a).sons->data[i_388982]);
					result = minrel_388648(result, LOC12);
					{
						if (!(result == ((NU8) 0))) goto LA15;
						goto BeforeRet;
					}
					LA15: ;
					res_389215 += ((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_388891(c, (*f).sons->data[((NI) 0)], (*a).sons->data[((NI) 0)]);
				result = minrel_388648(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_166132 &(1<<((((NU8) 24))&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) 6))) goto LA61;
					result = ((NU8) 7);
				}
				goto LA59;
				LA61: ;
				{
					if (!(result == ((NU8) 5))) goto LA64;
					result = ((NU8) 5);
				}
				goto LA59;
				LA64: ;
				{
					result = ((NU8) 1);
				}
				LA59: ;
			}
			goto LA53;
			LA57: ;
			{
				result = ((NU8) 0);
				goto BeforeRet;
			}
			LA53: ;
		}
		goto LA34;
		LA51: ;
		LA34: ;
		{
			NIM_BOOL LOC70;
			LOC70 = 0;
			LOC70 = compatibleeffects_263489(f, a);
			if (!!(LOC70)) goto LA71;
			result = ((NU8) 0);
			goto BeforeRet;
		}
		LA71: ;
	}
	break;
	case ((NU8) 5):
	{
		result = allowsnil_388833(f);
	}
	break;
	case ((NU8) 49):
	{
		{
			Ttype224847* LOC79;
			Ttype224847* LOC80;
			if (!(((*f).flags &(1<<((((NU8) 14))&31)))!=0)) goto LA77;
			LOC79 = 0;
			LOC79 = base_254039(f);
			LOC80 = 0;
			LOC80 = base_254039(a);
			result = typerel_388064(c, LOC79, LOC80, NIM_TRUE);
		}
		LA77: ;
	}
	break;
	default:
	{
	}
	break;
	}
	}BeforeRet: ;
	return result;
}

N_NIMCALL(Ttype224847*, concretetype_388074)(Tcandidate387209* c, Ttype224847* t) {
	Ttype224847* result;
	result = 0;
	switch ((*t).kind) {
	case ((NU8) 4):
	{
		result = newtype_227140(((NU8) 16), (*t).owner);
		addsonskipintlit_273731(result, (*t).sons->data[((NI) 0)]);
		addsonskipintlit_273731(result, (*t).sons->data[((NI) 1)]);
	}
	break;
	case ((NU8) 5):
	{
		result = NIM_NIL;
	}
	break;
	case ((NU8) 8):
	{
		{
			if (!(*c).isnocall) goto LA6;
			result = t;
		}
		goto LA4;
		LA6: ;
		{
			result = NIM_NIL;
		}
		LA4: ;
	}
	break;
	case ((NU8) 24):
	case ((NU8) 19):
	{
		{
			if (!((*(*t).sons->data[((NI) 0)]).kind == ((NU8) 3))) goto LA12;
			result = NIM_NIL;
		}
		goto LA10;
		LA12: ;
		{
			result = t;
		}
		LA10: ;
	}
	break;
	case ((NU8) 12):
	case ((NU8) 58):
	{
		result = t;
		{
			while (1) {
				Tidobj197015* LOC18;
				TNimObject* LOC19;
				LOC18 = 0;
				LOC18 = &t->Sup;
				LOC19 = 0;
				LOC19 = idtableget_232182((*c).bindings, LOC18);
				result = ((Ttype224847*) (LOC19));
				{
					if (!(result == NIM_NIL)) goto LA22;
					goto LA16;
				}
				LA22: ;
				{
					if (!!(((*result).kind == ((NU8) 12)))) goto LA26;
					goto LA16;
				}
				LA26: ;
			}
		} LA16: ;
	}
	break;
	case ((NU8) 9):
	{
		NimStringDesc* LOC29;
		NimStringDesc* LOC30;
		LOC29 = 0;
		LOC30 = 0;
		LOC30 = typetostring_254032(t, ((NU8) 0));
		LOC29 = rawNewString(LOC30->Sup.len + 21);
appendString(LOC29, ((NimStringDesc*) &TMP2759));
appendString(LOC29, LOC30);
		internalerror_195191(LOC29);
		result = t;
	}
	break;
	default:
	{
		result = t;
	}
	break;
	}
	return result;
}

N_NIMCALL(NU8, matchusertypeclass_389249)(Tcontext279023* c, Tcandidate387209* m, Ttype224847* ff, Ttype224847* a) {
	NU8 volatile result;
	Ttype224847* body;
	Tscope224835* LOC9;
	TSafePoint TMP2761;
{	result = 0;
	body = skiptypes_228167(ff, IL64(9007199254740992));
	{
		Tnode224809* LOC5;
		NimStringDesc* LOC6;
		Tnode224809* LOC7;
		NimStringDesc* LOC8;
		if (!(((NI) 20) < (*c).intypeclass)) goto LA3;
		LOC5 = 0;
		LOC5 = HEX5BHEX5D_225244((*body).n, ((NI) 3));
		LOC6 = 0;
		LOC7 = 0;
		LOC7 = HEX5BHEX5D_225244((*body).n, ((NI) 3));
		LOC8 = 0;
		LOC8 = HEX24_246090(LOC7);
		LOC6 = rawNewString(LOC8->Sup.len + 29);
appendString(LOC6, LOC8);
appendString(LOC6, ((NimStringDesc*) &TMP2760));
		localerror_195139((*LOC5).info, LOC6);
		result = ((NU8) 0);
		goto BeforeRet;
	}
	LA3: ;
	LOC9 = 0;
	LOC9 = openscope_285091(c);
	(*c).intypeclass += ((NI) 1);
	pushSafePoint(&TMP2761);
	TMP2761.status = _setjmp(TMP2761.context);
	if (TMP2761.status == 0) {
		Tnode224809* checkedbody;
		Tnode224809* LOC43;
		Tnode224809* LOC44;
		{
			if (!((*ff).kind == ((NU8) 53))) goto LA13;
			{
				NI i_389304;
				NI HEX3Atmp_389377;
				NI LOC16;
				NI res_389380;
				i_389304 = 0;
				HEX3Atmp_389377 = 0;
				LOC16 = 0;
				LOC16 = len_227369(ff);
				HEX3Atmp_389377 = ((NI)(LOC16 - ((NI) 1)) - 1);
				res_389380 = ((NI) 1);
				{
					while (1) {
						Tident197021* typeparamname;
						Ttype224847* LOC19;
						Ttype224847* typ;
						Tsym224841* volatile param;
						if (!(res_389380 <= HEX3Atmp_389377)) goto LA18;
						i_389304 = res_389380;
						LOC19 = 0;
						LOC19 = base_254039(ff);
						typeparamname = (*(*(*LOC19).sons->data[(NI)(i_389304 - ((NI) 1))]).sym).name;
						typ = (*ff).sons->data[i_389304];
						param = 0;
						switch ((*typ).kind) {
						case ((NU8) 59):
						{
							param = newsym_225655(((NU8) 10), typeparamname, (*body).sym, (*(*body).sym).info);
							asgnRefNoCycle((void**) (&(*param).typ), base_254039(typ));
							asgnRefNoCycle((void**) (&(*param).ast), (*typ).n);
						}
						break;
						case ((NU8) 60):
						{
							param = newsym_225655(((NU8) 8), typeparamname, (*body).sym, (*(*body).sym).info);
							asgnRefNoCycle((void**) (&(*param).typ), typ);
						}
						break;
						default:
						{
							param = newsym_225655(((NU8) 7), typeparamname, (*body).sym, (*(*body).sym).info);
							asgnRefNoCycle((void**) (&(*param).typ), maketypedesc_279683(c, typ));
						}
						break;
						}
						adddecl_285607(c, param);
						res_389380 += ((NI) 1);
					} LA18: ;
				}
			}
		}
		LA13: ;
		{
			Tnode224809* param_389320;
			Tnode224809* HEX3Atmp_389387;
			param_389320 = 0;
			HEX3Atmp_389387 = 0;
			HEX3Atmp_389387 = HEX5BHEX5D_225244((*body).n, ((NI) 0));
			{
				NI i_389391;
				NI HEX3Atmp_389393;
				NI LOC25;
				NI res_389395;
				i_389391 = 0;
				HEX3Atmp_389393 = 0;
				LOC25 = 0;
				LOC25 = len_225098(HEX3Atmp_389387);
				HEX3Atmp_389393 = (LOC25 - 1);
				res_389395 = ((NI) 0);
				{
					while (1) {
						Tnode224809* volatile dummyname;
						Ttype224847* volatile dummytype;
						Tsym224841* dummyparam;
						if (!(res_389395 <= HEX3Atmp_389393)) goto LA27;
						i_389391 = res_389395;
						param_389320 = (*HEX3Atmp_389387).kindU.S6.sons->data[i_389391];
						dummyname = 0;
						dummytype = 0;
						{
							if (!((*param_389320).kind == ((NU8) 143))) goto LA30;
							dummyname = HEX5BHEX5D_225244(param_389320, ((NI) 0));
							{
								if (!!(((*a).kind == ((NU8) 23)))) goto LA34;
								dummytype = makevartype_279644(c, a);
							}
							goto LA32;
							LA34: ;
							{
								dummytype = a;
							}
							LA32: ;
						}
						goto LA28;
						LA30: ;
						{
							dummyname = param_389320;
							dummytype = a;
						}
						LA28: ;
						{
							NimStringDesc* LOC42;
							if (!!(((*dummyname).kind == ((NU8) 2)))) goto LA40;
							LOC42 = 0;
							LOC42 = HEX24_195279(TMP2763);
							internalerror_195191(LOC42);
						}
						LA40: ;
						dummyparam = newsym_225655(((NU8) 8), (*dummyname).kindU.S5.ident, (*body).sym, (*(*body).sym).info);
						asgnRefNoCycle((void**) (&(*dummyparam).typ), dummytype);
						adddecl_285607(c, dummyparam);
						res_389395 += ((NI) 1);
					} LA27: ;
				}
			}
		}
		LOC43 = 0;
		LOC43 = HEX5BHEX5D_225244((*body).n, ((NI) 3));
		LOC44 = 0;
		LOC44 = copytree_229028(LOC43);
		checkedbody = (*c).semtryexpr(c, LOC44, 0);
		{
			if (!(checkedbody == NIM_NIL)) goto LA47;
			result = ((NU8) 0);
			popSafePoint();
			(*c).intypeclass -= ((NI) 1);
			closescope_285111(c);
			goto BeforeRet;
		}
		LA47: ;
		result = ((NU8) 8);
		popSafePoint();
		(*c).intypeclass -= ((NI) 1);
		closescope_285111(c);
		goto BeforeRet;
		popSafePoint();
	}
	else {
		popSafePoint();
	}
	{
		(*c).intypeclass -= ((NI) 1);
		closescope_285111(c);
	}
	if (TMP2761.status != 0) reraiseException();
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NU8, typerel_388064)(Tcandidate387209* c, Ttype224847* f, Ttype224847* aorig, NIM_BOOL dobind) {
	NU8 result;
	Ttype224847* a;
	Ttype224847* LOC9;
{	result = 0;
	result = ((NU8) 0);
	{
		if (!((*f).kind == ((NU8) 6))) goto LA3;
		{
			if (!!((aorig == NIM_NIL))) goto LA7;
			put_387291((&(*c).bindings), f, aorig);
		}
		LA7: ;
		result = ((NU8) 8);
		goto BeforeRet;
	}
	LA3: ;
	LOC9 = 0;
	LOC9 = skiptypes_228167(aorig, IL64(576460752311812096));
	a = maybeskipdistinct_389517(LOC9, (*c).calleesym);
	{
		NIM_BOOL LOC12;
		Ttype224847* LOC14;
		Ttype224847* LOC17;
		LOC12 = 0;
		LOC12 = ((*a).kind == ((NU8) 11));
		if (!(LOC12)) goto LA13;
		LOC14 = 0;
		LOC14 = skiptypes_228167(f, 8388608);
		LOC12 = !(((IL64(574208952489745920) &(IL64(1)<<(((*LOC14).kind)&IL64(63))))!=0));
		LA13: ;
		if (!LOC12) goto LA15;
		LOC17 = 0;
		LOC17 = lastson_227426(a);
		result = typerel_388064(c, f, LOC17, NIM_TRUE);
		goto BeforeRet;
	}
	LA15: ;
	switch ((*a).kind) {
	case ((NU8) 56):
	{
		result = ((NU8) 8);
		{
			Ttype224847* branch_389859;
			Ttypeseq224843* HEX3Atmp_391620;
			NI i_391623;
			NI L_391625;
			branch_389859 = 0;
			HEX3Atmp_391620 = 0;
			HEX3Atmp_391620 = (*a).sons;
			i_391623 = ((NI) 0);
			L_391625 = (HEX3Atmp_391620 ? HEX3Atmp_391620->Sup.len : 0);
			{
				while (1) {
					NU8 x;
					if (!(i_391623 < L_391625)) goto LA21;
					branch_389859 = HEX3Atmp_391620->data[i_391623];
					x = typerel_388064(c, f, branch_389859, NIM_FALSE);
					{
						if (!(x == ((NU8) 0))) goto LA24;
						result = ((NU8) 0);
						goto BeforeRet;
					}
					LA24: ;
					{
						if (!(x < result)) goto LA28;
						result = x;
					}
					LA28: ;
					i_391623 += ((NI) 1);
				} LA21: ;
			}
		}
	}
	break;
	case ((NU8) 55):
	{
		{
			Ttype224847* branch_389888;
			Ttypeseq224843* HEX3Atmp_391627;
			NI i_391630;
			NI L_391632;
			branch_389888 = 0;
			HEX3Atmp_391627 = 0;
			HEX3Atmp_391627 = (*a).sons;
			i_391630 = ((NI) 0);
			L_391632 = (HEX3Atmp_391627 ? HEX3Atmp_391627->Sup.len : 0);
			{
				while (1) {
					NU8 x;
					if (!(i_391630 < L_391632)) goto LA33;
					branch_389888 = HEX3Atmp_391627->data[i_391630];
					x = typerel_388064(c, f, branch_389888, NIM_FALSE);
					{
						if (!!((x == ((NU8) 0)))) goto LA36;
						{
							if (!(((NU8) 8) <= x)) goto LA40;
							result = ((NU8) 8);
						}
						goto LA38;
						LA40: ;
						{
							result = x;
						}
						LA38: ;
						goto BeforeRet;
					}
					LA36: ;
					i_391630 += ((NI) 1);
				} LA33: ;
			}
		}
		result = ((NU8) 0);
	}
	break;
	case ((NU8) 57):
	{
		switch ((*f).kind) {
		case ((NU8) 57):
		{
			Ttype224847* LOC45;
			Ttype224847* LOC46;
			LOC45 = 0;
			LOC45 = lastson_227426(a);
			LOC46 = 0;
			LOC46 = lastson_227426(f);
			result = typerel_388064(c, LOC45, LOC46, NIM_TRUE);
			goto BeforeRet;
		}
		break;
		default:
		{
			{
				if (!((*f).kind == ((NU8) 58))) goto LA50;
				result = ((NU8) 8);
			}
			goto LA48;
			LA50: ;
			{
				result = ((NU8) 0);
			}
			LA48: ;
			goto BeforeRet;
		}
		break;
		}
	}
	break;
	case ((NU8) 58):
	{
		{
			if (!((*f).kind == ((NU8) 58))) goto LA56;
			result = ((NU8) 8);
		}
		goto LA54;
		LA56: ;
		{
			result = ((NU8) 0);
		}
		LA54: ;
		goto BeforeRet;
	}
	break;
	case ((NU8) 52):
	case ((NU8) 53):
	{
		NU8 x;
		x = typerel_388064(c, a, f, NIM_FALSE);
		{
			if (!(((NU8) 8) <= x)) goto LA62;
			result = ((NU8) 8);
			goto BeforeRet;
		}
		LA62: ;
	}
	break;
	default:
	{
	}
	break;
	}
	switch ((*f).kind) {
	case ((NU8) 14):
	{
		{
			NIM_BOOL LOC68;
			LOC68 = 0;
			LOC68 = ((*a).kind == (*f).kind);
			if (!(LOC68)) goto LA69;
			LOC68 = sameenumtypes_259855(f, a);
			LA69: ;
			if (!LOC68) goto LA70;
			result = ((NU8) 10);
		}
		goto LA66;
		LA70: ;
		{
			Ttype224847* LOC73;
			NIM_BOOL LOC74;
			LOC73 = 0;
			LOC73 = skiptypes_228167(a, 1048576);
			LOC74 = 0;
			LOC74 = sameenumtypes_259855(f, LOC73);
			if (!LOC74) goto LA75;
			result = ((NU8) 3);
		}
		goto LA66;
		LA75: ;
		LA66: ;
	}
	break;
	case ((NU8) 1):
	case ((NU8) 2):
	{
		{
			if (!((*a).kind == (*f).kind)) goto LA80;
			result = ((NU8) 10);
		}
		goto LA78;
		LA80: ;
		{
			Ttype224847* LOC83;
			LOC83 = 0;
			LOC83 = skiptypes_228167(a, 1048576);
			if (!((*LOC83).kind == (*f).kind)) goto LA84;
			result = ((NU8) 3);
		}
		goto LA78;
		LA84: ;
		LA78: ;
	}
	break;
	case ((NU8) 20):
	{
		{
			Ttype224847* LOC96;
			Ttype224847* LOC97;
			if (!((*a).kind == (*f).kind)) goto LA89;
			{
				Ttype224847* LOC93;
				LOC93 = 0;
				LOC93 = base_254039(f);
				if (!((*LOC93).kind == ((NU8) 0))) goto LA94;
				result = ((NU8) 8);
				goto BeforeRet;
			}
			LA94: ;
			LOC96 = 0;
			LOC96 = base_254039(f);
			LOC97 = 0;
			LOC97 = base_254039(a);
			result = typerel_388064(c, LOC96, LOC97, NIM_TRUE);
			{
				if (!!(((257 &(1<<((result)&15)))!=0))) goto LA100;
				{
					NI i_390004;
					NI res_391636;
					i_390004 = 0;
					res_391636 = ((NI) 0);
					{
						while (1) {
							if (!(res_391636 <= ((NI) 1))) goto LA104;
							i_390004 = res_391636;
							{
								Tnode224809* LOC107;
								Tnode224809* LOC110;
								LOC107 = 0;
								LOC107 = HEX5BHEX5D_225244((*f).n, i_390004);
								if (!((*LOC107).kind == ((NU8) 62))) goto LA108;
								LOC110 = 0;
								LOC110 = HEX5BHEX5D_225244((*f).n, i_390004);
								asgnRefNoCycle((void**) (&(*(*f).n).kindU.S6.sons->data[i_390004]), tryresolvingstaticexpr_389562(c, LOC110));
							}
							LA108: ;
							res_391636 += ((NI) 1);
						} LA104: ;
					}
				}
				result = typerangerel_389234(f, a);
			}
			LA100: ;
		}
		goto LA87;
		LA89: ;
		{
			{
				Ttype224847* LOC114;
				LOC114 = 0;
				LOC114 = skiptypes_228167(f, 1048576);
				if (!((*LOC114).kind == (*a).kind)) goto LA115;
				result = ((NU8) 2);
			}
			goto LA112;
			LA115: ;
			{
				Ttype224847* LOC118;
				NIM_BOOL LOC119;
				LOC118 = 0;
				LOC118 = skiptypes_228167(f, 1048576);
				LOC119 = 0;
				LOC119 = isconvertibletorange_388238(LOC118, a);
				if (!LOC119) goto LA120;
				result = ((NU8) 1);
			}
			goto LA112;
			LA120: ;
			LA112: ;
		}
		LA87: ;
	}
	break;
	case ((NU8) 31):
	{
		result = handlerange_388122(f, a, ((NU8) 32), ((NU8) 34));
	}
	break;
	case ((NU8) 32):
	{
		result = handlerange_388122(f, a, ((NU8) 32), ((NU8) 32));
	}
	break;
	case ((NU8) 33):
	{
		result = handlerange_388122(f, a, ((NU8) 32), ((NU8) 33));
	}
	break;
	case ((NU8) 34):
	{
		result = handlerange_388122(f, a, ((NU8) 32), ((NU8) 34));
	}
	break;
	case ((NU8) 35):
	{
		result = handlerange_388122(f, a, ((NU8) 31), ((NU8) 35));
	}
	break;
	case ((NU8) 40):
	{
		result = handlerange_388122(f, a, ((NU8) 41), ((NU8) 43));
	}
	break;
	case ((NU8) 41):
	{
		result = handlerange_388122(f, a, ((NU8) 41), ((NU8) 41));
	}
	break;
	case ((NU8) 42):
	{
		result = handlerange_388122(f, a, ((NU8) 41), ((NU8) 42));
	}
	break;
	case ((NU8) 43):
	{
		result = handlerange_388122(f, a, ((NU8) 41), ((NU8) 43));
	}
	break;
	case ((NU8) 44):
	{
		result = handlerange_388122(f, a, ((NU8) 40), ((NU8) 44));
	}
	break;
	case ((NU8) 36):
	{
		result = handlefloatrange_388293(f, a);
	}
	break;
	case ((NU8) 37):
	{
		result = handlefloatrange_388293(f, a);
	}
	break;
	case ((NU8) 38):
	{
		result = handlefloatrange_388293(f, a);
	}
	break;
	case ((NU8) 39):
	{
		result = handlefloatrange_388293(f, a);
	}
	break;
	case ((NU8) 23):
	{
		{
			Ttype224847* LOC141;
			Ttype224847* LOC142;
			if (!((*aorig).kind == ((NU8) 23))) goto LA139;
			LOC141 = 0;
			LOC141 = base_254039(f);
			LOC142 = 0;
			LOC142 = base_254039(aorig);
			result = typerel_388064(c, LOC141, LOC142, NIM_TRUE);
		}
		goto LA137;
		LA139: ;
		{
			Ttype224847* LOC144;
			LOC144 = 0;
			LOC144 = base_254039(f);
			result = typerel_388064(c, LOC144, aorig, NIM_TRUE);
		}
		LA137: ;
	}
	break;
	case ((NU8) 16):
	case ((NU8) 4):
	{
		switch ((*a).kind) {
		case ((NU8) 16):
		case ((NU8) 4):
		{
			Ttype224847* frange;
			frange = (*f).sons->data[((NI) 0)];
			{
				Ttype224847* prev;
				Tidobj197015* LOC151;
				TNimObject* LOC152;
				if (!((*frange).kind == ((NU8) 12))) goto LA149;
				LOC151 = 0;
				LOC151 = &frange->Sup;
				LOC152 = 0;
				LOC152 = idtableget_232182((*c).bindings, LOC151);
				prev = ((Ttype224847*) (LOC152));
				{
					if (!(prev == NIM_NIL)) goto LA155;
					put_387291((&(*c).bindings), frange, (*a).sons->data[((NI) 0)]);
					frange = a;
				}
				goto LA153;
				LA155: ;
				{
					frange = prev;
				}
				LA153: ;
			}
			LA149: ;
			result = typerel_388064(c, (*f).sons->data[((NI) 1)], (*a).sons->data[((NI) 1)], NIM_TRUE);
			{
				if (!(result < ((NU8) 8))) goto LA160;
				result = ((NU8) 0);
				goto BeforeRet;
			}
			LA160: ;
			{
				NIM_BOOL LOC164;
				NIM_BOOL LOC165;
				NI LOC167;
				Tnode224809* LOC169;
				Tnode224809* len;
				Tnode224809* LOC182;
				LOC164 = 0;
				LOC165 = 0;
				LOC165 = !(((*frange).n == NIM_NIL));
				if (!(LOC165)) goto LA166;
				LOC167 = 0;
				LOC167 = len_225098((*frange).n);
				LOC165 = (((NI) 1) < LOC167);
				LA166: ;
				LOC164 = LOC165;
				if (!(LOC164)) goto LA168;
				LOC169 = 0;
				LOC169 = HEX5BHEX5D_225244((*frange).n, ((NI) 1));
				LOC164 = ((*LOC169).kind == ((NU8) 62));
				LA168: ;
				if (!LOC164) goto LA170;
				{
					Ttype224847* rangestatict;
					Tnode224809* LOC176;
					Tnode224809* LOC177;
					Tnode224809* LOC178;
					Ttype224847* replacementt;
					Ttypeseq224843* LOC179;
					TY392275 LOC180;
					NI64 inputupperbound;
					Tnode224809* LOC181;
					if (!(((*frange).flags &(1<<((((NU8) 9))&31)))!=0)) goto LA174;
					LOC176 = 0;
					LOC176 = HEX5BHEX5D_225244((*frange).n, ((NI) 1));
					LOC177 = 0;
					LOC177 = HEX5BHEX5D_225244(LOC176, ((NI) 0));
					LOC178 = 0;
					LOC178 = HEX5BHEX5D_225244(LOC177, ((NI) 1));
					rangestatict = (*LOC178).typ;
					LOC179 = 0;
					LOC179 = (Ttypeseq224843*) newSeq((&NTI224843), 1);
					memset((void*)LOC180, 0, sizeof(LOC180));
					LOC180[0] = getsystype_273190(((NU8) 31));
					asgnRefNoCycle((void**) (&LOC179->data[0]), LOC180[0]);
					replacementt = newtypewithsons_279807((*c).c, ((NU8) 59), LOC179);
					LOC181 = 0;
					LOC181 = HEX5BHEX5D_225244((*(*a).sons->data[((NI) 0)]).n, ((NI) 1));
					inputupperbound = (*LOC181).kindU.S1.intval;
					asgnRefNoCycle((void**) (&(*replacementt).n), newintnode_225607(((NU8) 6), (NI64)(inputupperbound + IL64(1))));
					put_387291((&(*c).bindings), rangestatict, replacementt);
					result = ((NU8) 8);
					goto BeforeRet;
				}
				LA174: ;
				LOC182 = 0;
				LOC182 = HEX5BHEX5D_225244((*frange).n, ((NI) 1));
				len = tryresolvingstaticexpr_389562(c, LOC182);
				{
					NIM_BOOL LOC185;
					NI64 LOC187;
					LOC185 = 0;
					LOC185 = ((*len).kind == ((NU8) 6));
					if (!(LOC185)) goto LA186;
					LOC187 = 0;
					LOC187 = lengthord_254016(a);
					LOC185 = ((NI64)((*len).kindU.S1.intval + IL64(1)) == LOC187);
					LA186: ;
					if (!LOC185) goto LA188;
					goto BeforeRet;
				}
				goto LA183;
				LA188: ;
				{
					result = ((NU8) 0);
					goto BeforeRet;
				}
				LA183: ;
			}
			goto LA162;
			LA170: ;
			{
				NI64 LOC192;
				NI64 LOC193;
				LOC192 = 0;
				LOC192 = lengthord_254016(frange);
				LOC193 = 0;
				LOC193 = lengthord_254016(a);
				if (!!((LOC192 == LOC193))) goto LA194;
				result = ((NU8) 0);
			}
			goto LA162;
			LA194: ;
			LA162: ;
		}
		break;
		default:
		{
		}
		break;
		}
	}
	break;
	case ((NU8) 27):
	case ((NU8) 48):
	{
		{
			if (!((*f).kind == ((NU8) 48))) goto LA200;
			{
				if (!(((*(*f).sons->data[((NI) 0)]).flags &(1<<((((NU8) 0))&31)))!=0)) goto LA204;
				{
					if (!((*(*f).sons->data[((NI) 0)]).kind == ((NU8) 6))) goto LA208;
					goto BeforeRet;
				}
				LA208: ;
			}
			goto LA202;
			LA204: ;
			{
				if (!((*(*f).sons->data[((NI) 0)]).kind == ((NU8) 7))) goto LA211;
				goto BeforeRet;
			}
			goto LA202;
			LA211: ;
			LA202: ;
		}
		LA200: ;
		switch ((*a).kind) {
		case ((NU8) 27):
		case ((NU8) 48):
		{
			Ttype224847* LOC214;
			Ttype224847* LOC215;
			LOC214 = 0;
			LOC214 = base_254039(f);
			LOC215 = 0;
			LOC215 = base_254039(a);
			result = typerel_388064(c, LOC214, LOC215, NIM_TRUE);
			{
				if (!(result < ((NU8) 8))) goto LA218;
				result = ((NU8) 0);
			}
			LA218: ;
		}
		break;
		case ((NU8) 4):
		{
			{
				NIM_BOOL LOC223;
				LOC223 = 0;
				LOC223 = !(((*(*f).sons->data[((NI) 0)]).kind == ((NU8) 12)));
				if (!(LOC223)) goto LA224;
				LOC223 = ((*(*a).sons->data[((NI) 1)]).kind == ((NU8) 3));
				LA224: ;
				if (!LOC223) goto LA225;
				result = ((NU8) 3);
			}
			goto LA221;
			LA225: ;
			{
				Ttype224847* LOC228;
				NU8 LOC229;
				LOC228 = 0;
				LOC228 = base_254039(f);
				LOC229 = 0;
				LOC229 = typerel_388064(c, LOC228, (*a).sons->data[((NI) 1)], NIM_TRUE);
				if (!(((NU8) 8) <= LOC229)) goto LA230;
				result = ((NU8) 3);
			}
			goto LA221;
			LA230: ;
			LA221: ;
		}
		break;
		case ((NU8) 16):
		{
			{
				NIM_BOOL LOC235;
				LOC235 = 0;
				LOC235 = !(((*(*f).sons->data[((NI) 0)]).kind == ((NU8) 12)));
				if (!(LOC235)) goto LA236;
				LOC235 = ((*(*a).sons->data[((NI) 1)]).kind == ((NU8) 3));
				LA236: ;
				if (!LOC235) goto LA237;
				result = ((NU8) 3);
			}
			goto LA233;
			LA237: ;
			{
				Ttype224847* LOC240;
				NU8 LOC241;
				LOC240 = 0;
				LOC240 = base_254039(f);
				LOC241 = 0;
				LOC241 = typerel_388064(c, LOC240, (*a).sons->data[((NI) 1)], NIM_TRUE);
				if (!(((NU8) 8) <= LOC241)) goto LA242;
				result = ((NU8) 1);
			}
			goto LA233;
			LA242: ;
			LA233: ;
		}
		break;
		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) 1);
			}
			goto LA245;
			LA249: ;
			{
				Ttype224847* LOC252;
				NU8 LOC253;
				LOC252 = 0;
				LOC252 = base_254039(f);
				LOC253 = 0;
				LOC253 = typerel_388064(c, LOC252, (*a).sons->data[((NI) 0)], NIM_TRUE);
				if (!(((NU8) 8) <= LOC253)) goto LA254;
				result = ((NU8) 1);
			}
			goto LA245;
			LA254: ;
			LA245: ;
		}
		break;
		case ((NU8) 28):
		{
			{
				if (!((*f).kind == ((NU8) 27))) goto LA259;
				{
					if (!((*(*f).sons->data[((NI) 0)]).kind == ((NU8) 2))) goto LA263;
					result = ((NU8) 1);
				}
				goto LA261;
				LA263: ;
				{
					NIM_BOOL LOC266;
					NIM_BOOL LOC267;
					NI LOC269;
					Ttype224847* LOC271;
					Ttype224847* LOC272;
					NU8 LOC273;
					LOC266 = 0;
					LOC267 = 0;
					LOC267 = ((*(*f).sons->data[((NI) 0)]).kind == ((NU8) 12));
					if (!(LOC267)) goto LA268;
					LOC269 = 0;
					LOC269 = len_227369(a);
					LOC267 = (((NI) 0) < LOC269);
					LA268: ;
					LOC266 = LOC267;
					if (!(LOC266)) goto LA270;
					LOC271 = 0;
					LOC271 = base_254039(f);
					LOC272 = 0;
					LOC272 = base_254039(a);
					LOC273 = 0;
					LOC273 = typerel_388064(c, LOC271, LOC272, NIM_TRUE);
					LOC266 = (((NU8) 8) <= LOC273);
					LA270: ;
					if (!LOC266) goto LA274;
					result = ((NU8) 1);
				}
				goto LA261;
				LA274: ;
				LA261: ;
			}
			LA259: ;
		}
		break;
		default:
		{
		}
		break;
		}
	}
	break;
	case ((NU8) 24):
	{
		switch ((*a).kind) {
		case ((NU8) 24):
		{
			{
				NIM_BOOL LOC281;
				LOC281 = 0;
				LOC281 = !(((*(*f).sons->data[((NI) 0)]).kind == ((NU8) 12)));
				if (!(LOC281)) goto LA282;
				LOC281 = ((*(*a).sons->data[((NI) 0)]).kind == ((NU8) 3));
				LA282: ;
				if (!LOC281) goto LA283;
				result = ((NU8) 3);
			}
			goto LA279;
			LA283: ;
			{
				result = typerel_388064(c, (*f).sons->data[((NI) 0)], (*a).sons->data[((NI) 0)], NIM_TRUE);
				{
					if (!(result < ((NU8) 8))) goto LA288;
					result = ((NU8) 0);
				}
				goto LA286;
				LA288: ;
				{
					NIM_BOOL LOC291;
					LOC291 = 0;
					LOC291 = (((*f).flags &(1<<((((NU8) 16))&31)))!=0);
					if (!(LOC291)) goto LA292;
					LOC291 = !((((*a).flags &(1<<((((NU8) 16))&31)))!=0));
					LA292: ;
					if (!LOC291) goto LA293;
					result = ((NU8) 1);
				}
				goto LA286;
				LA293: ;
				LA286: ;
			}
			LA279: ;
		}
		break;
		case ((NU8) 5):
		{
			result = allowsnil_388833(f);
		}
		break;
		default:
		{
		}
		break;
		}
	}
	break;
	case ((NU8) 15):
	{
		{
			NIM_BOOL LOC300;
			Ttype224847* x;
			LOC300 = 0;
			LOC300 = isordinaltype_254093(a);
			if (!LOC300) goto LA301;
			{
				if (!((*a).kind == ((NU8) 15))) goto LA305;
				x = (*a).sons->data[((NI) 0)];
			}
			goto LA303;
			LA305: ;
			{
				x = a;
			}
			LA303: ;
			{
				if (!((*(*f).sons->data[((NI) 0)]).kind == ((NU8) 0))) goto LA310;
				result = ((NU8) 8);
			}
			goto LA308;
			LA310: ;
			{
				result = typerel_388064(c, (*f).sons->data[((NI) 0)], x, NIM_TRUE);
				{
					if (!(result < ((NU8) 8))) goto LA315;
					result = ((NU8) 0);
				}
				LA315: ;
			}
			LA308: ;
		}
		goto LA298;
		LA301: ;
		{
			if (!((*a).kind == ((NU8) 12))) goto LA318;
			result = ((NU8) 8);
		}
		goto LA298;
		LA318: ;
		LA298: ;
	}
	break;
	case ((NU8) 30):
	{
		internalerror_195191(((NimStringDesc*) &TMP2754));
	}
	break;
	case ((NU8) 5):
	{
		{
			if (!((*a).kind == (*f).kind)) goto LA324;
			result = ((NU8) 10);
		}
		LA324: ;
	}
	break;
	case ((NU8) 18):
	{
		{
			if (!((*a).kind == ((NU8) 18))) goto LA329;
			result = recordrel_388668(c, f, a);
		}
		LA329: ;
	}
	break;
	case ((NU8) 17):
	{
		{
			if (!((*a).kind == ((NU8) 17))) goto LA334;
			{
				NIM_BOOL LOC338;
				LOC338 = 0;
				LOC338 = sameobjecttypes_259785(f, a);
				if (!LOC338) goto LA339;
				result = ((NU8) 10);
			}
			goto LA336;
			LA339: ;
			{
				NI depth;
				depth = isobjectsubtype_388352(a, f);
				{
					if (!(((NI) 0) < depth)) goto LA344;
					(*c).inheritancepenalty += depth;
					result = ((NU8) 3);
				}
				LA344: ;
			}
			LA336: ;
		}
		LA334: ;
	}
	break;
	case ((NU8) 13):
	{
		{
			NIM_BOOL LOC349;
			LOC349 = 0;
			LOC349 = ((*a).kind == ((NU8) 13));
			if (!(LOC349)) goto LA350;
			LOC349 = samedistincttypes_259844(f, a);
			LA350: ;
			if (!LOC349) goto LA351;
			result = ((NU8) 10);
		}
		goto LA347;
		LA351: ;
		{
			Ttype224847* LOC356;
			if (!(*c).coercedistincts) goto LA354;
			LOC356 = 0;
			LOC356 = base_254039(f);
			result = typerel_388064(c, LOC356, a, NIM_TRUE);
		}
		goto LA347;
		LA354: ;
		LA347: ;
	}
	break;
	case ((NU8) 19):
	{
		{
			if (!((*a).kind == ((NU8) 19))) goto LA360;
			{
				NIM_BOOL LOC364;
				LOC364 = 0;
				LOC364 = !(((*(*f).sons->data[((NI) 0)]).kind == ((NU8) 12)));
				if (!(LOC364)) goto LA365;
				LOC364 = ((*(*a).sons->data[((NI) 0)]).kind == ((NU8) 3));
				LA365: ;
				if (!LOC364) goto LA366;
				result = ((NU8) 3);
			}
			goto LA362;
			LA366: ;
			{
				result = typerel_388064(c, (*f).sons->data[((NI) 0)], (*a).sons->data[((NI) 0)], NIM_TRUE);
				{
					if (!(result <= ((NU8) 1))) goto LA371;
					result = ((NU8) 0);
				}
				LA371: ;
			}
			LA362: ;
		}
		LA360: ;
	}
	break;
	case ((NU8) 21):
	case ((NU8) 22):
	{
		{
			Ttype224847* LOC393;
			Ttype224847* LOC394;
			if (!((*a).kind == (*f).kind)) goto LA376;
			{
				NI LOC380;
				NI LOC381;
				LOC380 = 0;
				LOC380 = len_227369(a);
				LOC381 = 0;
				LOC381 = len_227369(f);
				if (!(LOC380 < LOC381)) goto LA382;
				result = ((NU8) 0);
				goto BeforeRet;
			}
			LA382: ;
			{
				NI i_390477;
				NI HEX3Atmp_391641;
				NI LOC385;
				NI res_391644;
				i_390477 = 0;
				HEX3Atmp_391641 = 0;
				LOC385 = 0;
				LOC385 = len_227369(f);
				HEX3Atmp_391641 = (NI)(LOC385 - ((NI) 2));
				res_391644 = ((NI) 0);
				{
					while (1) {
						if (!(res_391644 <= HEX3Atmp_391641)) goto LA387;
						i_390477 = res_391644;
						{
							NU8 LOC390;
							LOC390 = 0;
							LOC390 = typerel_388064(c, (*f).sons->data[i_390477], (*a).sons->data[i_390477], NIM_TRUE);
							if (!(LOC390 == ((NU8) 0))) goto LA391;
							result = ((NU8) 0);
							goto BeforeRet;
						}
						LA391: ;
						res_391644 += ((NI) 1);
					} LA387: ;
				}
			}
			LOC393 = 0;
			LOC393 = lastson_227426(f);
			LOC394 = 0;
			LOC394 = lastson_227426(a);
			result = typerel_388064(c, LOC393, LOC394, NIM_TRUE);
			{
				if (!(result <= ((NU8) 1))) goto LA397;
				result = ((NU8) 0);
			}
			goto LA395;
			LA397: ;
			{
				NIM_BOOL LOC400;
				LOC400 = 0;
				LOC400 = (((*f).flags &(1<<((((NU8) 16))&31)))!=0);
				if (!(LOC400)) goto LA401;
				LOC400 = !((((*a).flags &(1<<((((NU8) 16))&31)))!=0));
				LA401: ;
				if (!LOC400) goto LA402;
				result = ((NU8) 1);
			}
			goto LA395;
			LA402: ;
			LA395: ;
		}
		goto LA374;
		LA376: ;
		{
			if (!((*a).kind == ((NU8) 5))) goto LA405;
			result = allowsnil_388833(f);
		}
		goto LA374;
		LA405: ;
		{
		}
		LA374: ;
	}
	break;
	case ((NU8) 25):
	{
		result = proctyperel_388950(c, f, a);
		{
			NIM_BOOL LOC411;
			NIM_BOOL LOC412;
			LOC411 = 0;
			LOC412 = 0;
			LOC412 = !((result == ((NU8) 0)));
			if (!(LOC412)) goto LA413;
			LOC412 = (((*f).flags &(1<<((((NU8) 16))&31)))!=0);
			LA413: ;
			LOC411 = LOC412;
			if (!(LOC411)) goto LA414;
			LOC411 = !((((*a).flags &(1<<((((NU8) 16))&31)))!=0));
			LA414: ;
			if (!LOC411) goto LA415;
			result = ((NU8) 1);
		}
		LA415: ;
	}
	break;
	case ((NU8) 26):
	{
		switch ((*a).kind) {
		case ((NU8) 26):
		{
			{
				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) 10);
			}
			LA419: ;
		}
		break;
		case ((NU8) 5):
		{
			result = allowsnil_388833(f);
		}
		break;
		case ((NU8) 25):
		{
			{
				if (!!(((*a).callconv == ((NU8) 8)))) goto LA430;
				result = ((NU8) 1);
			}
			LA430: ;
		}
		break;
		case ((NU8) 21):
		{
			{
				NI LOC435;
				LOC435 = 0;
				LOC435 = len_227369(a);
				if (!(LOC435 == ((NI) 1))) goto LA436;
				result = ((NU8) 1);
			}
			LA436: ;
		}
		break;
		case ((NU8) 29):
		{
			result = ((NU8) 1);
		}
		break;
		default:
		{
		}
		break;
		}
	}
	break;
	case ((NU8) 28):
	{
		switch ((*a).kind) {
		case ((NU8) 28):
		{
			{
				NIM_BOOL LOC444;
				LOC444 = 0;
				LOC444 = (((*f).flags &(1<<((((NU8) 16))&31)))!=0);
				if (!(LOC444)) goto LA445;
				LOC444 = !((((*a).flags &(1<<((((NU8) 16))&31)))!=0));
				LA445: ;
				if (!LOC444) goto LA446;
				result = ((NU8) 1);
			}
			goto LA442;
			LA446: ;
			{
				result = ((NU8) 10);
			}
			LA442: ;
		}
		break;
		case ((NU8) 5):
		{
			result = allowsnil_388833(f);
		}
		break;
		default:
		{
		}
		break;
		}
	}
	break;
	case ((NU8) 29):
	{
		switch ((*a).kind) {
		case ((NU8) 29):
		{
			{
				NIM_BOOL LOC455;
				LOC455 = 0;
				LOC455 = (((*f).flags &(1<<((((NU8) 16))&31)))!=0);
				if (!(LOC455)) goto LA456;
				LOC455 = !((((*a).flags &(1<<((((NU8) 16))&31)))!=0));
				LA456: ;
				if (!LOC455) goto LA457;
				result = ((NU8) 1);
			}
			goto LA453;
			LA457: ;
			{
				result = ((NU8) 10);
			}
			LA453: ;
		}
		break;
		case ((NU8) 5):
		{
			result = allowsnil_388833(f);
		}
		break;
		case ((NU8) 28):
		{
			result = ((NU8) 1);
		}
		break;
		case ((NU8) 21):
		{
			{
				NIM_BOOL LOC465;
				NI LOC466;
				LOC465 = 0;
				LOC466 = 0;
				LOC466 = len_227369(a);
				LOC465 = (LOC466 == ((NI) 1));
				if (!(LOC465)) goto LA467;
				LOC465 = ((*(*a).sons->data[((NI) 0)]).kind == ((NU8) 2));
				LA467: ;
				if (!LOC465) goto LA468;
				result = ((NU8) 1);
			}
			LA468: ;
		}
		break;
		case ((NU8) 16):
		{
			{
				NIM_BOOL LOC473;
				NIM_BOOL LOC474;
				NI64 LOC475;
				Ttype224847* LOC477;
				LOC473 = 0;
				LOC474 = 0;
				LOC475 = 0;
				LOC475 = firstord_254004((*a).sons->data[((NI) 0)]);
				LOC474 = (LOC475 == IL64(0));
				if (!(LOC474)) goto LA476;
				LOC477 = 0;
				LOC477 = skiptypes_228167((*a).sons->data[((NI) 0)], 1048576);
				LOC474 = ((IL64(66571993088) &(IL64(1)<<(((*LOC477).kind)&IL64(63))))!=0);
				LA476: ;
				LOC473 = LOC474;
				if (!(LOC473)) goto LA478;
				LOC473 = ((*(*a).sons->data[((NI) 1)]).kind == ((NU8) 2));
				LA478: ;
				if (!LOC473) goto LA479;
				result = ((NU8) 1);
			}
			LA479: ;
		}
		break;
		default:
		{
		}
		break;
		}
	}
	break;
	case ((NU8) 3):
	{
		{
			if (!((*a).kind == ((NU8) 3))) goto LA485;
			result = ((NU8) 10);
		}
		LA485: ;
	}
	break;
	case ((NU8) 11):
	{
		Ttype224847* roota;
		Ttype224847* rootf;
		roota = skipgenericalias_260119(a);
		rootf = skipgenericalias_260119(f);
		{
			NIM_BOOL LOC490;
			Ttype224847* LOC492;
			Ttype224847* LOC493;
			LOC490 = 0;
			LOC490 = ((*a).kind == ((NU8) 11));
			if (!(LOC490)) goto LA491;
			LOC492 = 0;
			LOC492 = base_254039(roota);
			LOC493 = 0;
			LOC493 = base_254039(rootf);
			LOC490 = (LOC492 == LOC493);
			LA491: ;
			if (!LOC490) goto LA494;
			{
				NI i_390694;
				NI HEX3Atmp_391649;
				NI LOC497;
				NI res_391652;
				i_390694 = 0;
				HEX3Atmp_391649 = 0;
				LOC497 = 0;
				LOC497 = sonslen_227351(rootf);
				HEX3Atmp_391649 = (NI)(LOC497 - ((NI) 2));
				res_391652 = ((NI) 1);
				{
					while (1) {
						Ttype224847* ff;
						Ttype224847* aa;
						if (!(res_391652 <= HEX3Atmp_391649)) goto LA499;
						i_390694 = res_391652;
						ff = (*rootf).sons->data[i_390694];
						aa = (*roota).sons->data[i_390694];
						result = typerel_388064(c, ff, aa, NIM_TRUE);
						{
							if (!(result == ((NU8) 0))) goto LA502;
							goto BeforeRet;
						}
						LA502: ;
						{
							NIM_BOOL LOC506;
							LOC506 = 0;
							LOC506 = ((*ff).kind == ((NU8) 20));
							if (!(LOC506)) goto LA507;
							LOC506 = !((result == ((NU8) 10)));
							LA507: ;
							if (!LOC506) goto LA508;
							result = ((NU8) 0);
							goto BeforeRet;
						}
						LA508: ;
						res_391652 += ((NI) 1);
					} LA499: ;
				}
			}
		}
		goto LA488;
		LA494: ;
		{
			Ttype224847* LOC511;
			LOC511 = 0;
			LOC511 = lastson_227426(f);
			result = typerel_388064(c, LOC511, a, NIM_TRUE);
		}
		LA488: ;
	}
	break;
	case ((NU8) 10):
	{
		Ttype224847* prev_390725;
		Tidobj197015* LOC513;
		TNimObject* LOC514;
		LOC513 = 0;
		LOC513 = &f->Sup;
		LOC514 = 0;
		LOC514 = idtableget_232182((*c).bindings, LOC513);
		prev_390725 = ((Ttype224847*) (LOC514));
		{
			Ttype224847* ff;
			if (!(prev_390725 == NIM_NIL)) goto LA517;
			{
				NIM_BOOL LOC521;
				LOC521 = 0;
				LOC521 = ((*a).kind == ((NU8) 11));
				if (!(LOC521)) goto LA522;
				LOC521 = ((*a).sons->data[((NI) 0)] == f);
				LA522: ;
				if (!LOC521) goto LA523;
				{
					Ttype224847* bound_390759;
					Ttype224847* LOC529;
					if (!dobind) goto LA527;
					LOC529 = 0;
					LOC529 = skiptypes_228167(aorig, 1048576);
					bound_390759 = skipintlit_273698(LOC529);
					{
						if (!dobind) goto LA532;
						put_387291((&(*c).bindings), f, bound_390759);
					}
					LA532: ;
				}
				LA527: ;
				result = ((NU8) 8);
				goto BeforeRet;
			}
			LA523: ;
			ff = lastson_227426(f);
			{
				if (!!((ff == NIM_NIL))) goto LA536;
				result = typerel_388064(c, ff, a, NIM_TRUE);
			}
			LA536: ;
		}
		goto LA515;
		LA517: ;
		{
			result = typerel_388064(c, prev_390725, a, NIM_TRUE);
			goto BeforeRet;
		}
		LA515: ;
	}
	break;
	case ((NU8) 9):
	{
		Ttype224847* x_390775;
		x_390775 = skipgenericalias_260119(a);
		{
			NIM_BOOL LOC542;
			LOC542 = 0;
			LOC542 = ((*x_390775).kind == ((NU8) 9));
			if (LOC542) goto LA543;
			LOC542 = !(((*(*f).sons->data[((NI) 0)]).kind == ((NU8) 10)));
			LA543: ;
			if (!LOC542) goto LA544;
		}
		goto LA540;
		LA544: ;
		{
			NIM_BOOL LOC547;
			NIM_BOOL LOC548;
			NI LOC551;
			NI LOC552;
			LOC547 = 0;
			LOC548 = 0;
			LOC548 = ((*x_390775).kind == ((NU8) 11));
			if (!(LOC548)) goto LA549;
			LOC548 = ((*f).sons->data[((NI) 0)] == (*x_390775).sons->data[((NI) 0)]);
			LA549: ;
			LOC547 = LOC548;
			if (!(LOC547)) goto LA550;
			LOC551 = 0;
			LOC551 = sonslen_227351(x_390775);
			LOC552 = 0;
			LOC552 = sonslen_227351(f);
			LOC547 = ((NI)(LOC551 - ((NI) 1)) == LOC552);
			LA550: ;
			if (!LOC547) goto LA553;
			{
				NI i_390826;
				NI HEX3Atmp_391657;
				NI LOC556;
				NI res_391660;
				i_390826 = 0;
				HEX3Atmp_391657 = 0;
				LOC556 = 0;
				LOC556 = sonslen_227351(f);
				HEX3Atmp_391657 = (NI)(LOC556 - ((NI) 1));
				res_391660 = ((NI) 1);
				{
					while (1) {
						if (!(res_391660 <= HEX3Atmp_391657)) goto LA558;
						i_390826 = res_391660;
						{
							if (!((*(*x_390775).sons->data[i_390826]).kind == ((NU8) 12))) goto LA561;
							internalerror_195191(((NimStringDesc*) &TMP2758));
						}
						goto LA559;
						LA561: ;
						{
							NU8 LOC564;
							LOC564 = 0;
							LOC564 = typerel_388064(c, (*f).sons->data[i_390826], (*x_390775).sons->data[i_390826], NIM_TRUE);
							if (!(LOC564 <= ((NU8) 3))) goto LA565;
							goto BeforeRet;
						}
						goto LA559;
						LA565: ;
						LA559: ;
						res_391660 += ((NI) 1);
					} LA558: ;
				}
			}
			result = ((NU8) 8);
		}
		goto LA540;
		LA553: ;
		{
			Ttype224847* genericbody;
			genericbody = (*f).sons->data[((NI) 0)];
			result = typerel_388064(c, genericbody, x_390775, NIM_TRUE);
			{
				if (!!((result == ((NU8) 0)))) goto LA570;
				{
					NI i_390867;
					NI HEX3Atmp_391665;
					NI LOC573;
					NI res_391668;
					i_390867 = 0;
					HEX3Atmp_391665 = 0;
					LOC573 = 0;
					LOC573 = sonslen_227351(f);
					HEX3Atmp_391665 = (NI)(LOC573 - ((NI) 1));
					res_391668 = ((NI) 1);
					{
						while (1) {
							Ttype224847* x;
							Tidobj197015* LOC576;
							TNimObject* LOC577;
							if (!(res_391668 <= HEX3Atmp_391665)) goto LA575;
							i_390867 = res_391668;
							LOC576 = 0;
							LOC576 = &(*genericbody).sons->data[(NI)(i_390867 - ((NI) 1))]->Sup;
							LOC577 = 0;
							LOC577 = idtableget_232182((*c).bindings, LOC576);
							x = ((Ttype224847*) (LOC577));
							{
								if (!(x == NIM_NIL)) goto LA580;
							}
							goto LA578;
							LA580: ;
							{
								if (!((4608 &(IL64(1)<<(((*x).kind)&IL64(63))))!=0)) goto LA583;
								internalerror_195191(((NimStringDesc*) &TMP2758));
							}
							goto LA578;
							LA583: ;
							{
								put_387291((&(*c).bindings), (*f).sons->data[i_390867], x);
							}
							LA578: ;
							res_391668 += ((NI) 1);
						} LA575: ;
					}
				}
			}
			LA570: ;
		}
		LA540: ;
	}
	break;
	case ((NU8) 55):
	{
		Ttype224847* prev_390894;
		Tidobj197015* LOC587;
		TNimObject* LOC588;
		LOC587 = 0;
		LOC587 = &f->Sup;
		LOC588 = 0;
		LOC588 = idtableget_232182((*c).bindings, LOC587);
		prev_390894 = ((Ttype224847*) (LOC588));
		{
			if (!(prev_390894 == NIM_NIL)) goto LA591;
			result = ((NU8) 10);
			{
				Ttype224847* branch_390916;
				Ttypeseq224843* HEX3Atmp_391673;
				NI i_391676;
				NI L_391678;
				branch_390916 = 0;
				HEX3Atmp_391673 = 0;
				HEX3Atmp_391673 = (*f).sons;
				i_391676 = ((NI) 0);
				L_391678 = (HEX3Atmp_391673 ? HEX3Atmp_391673->Sup.len : 0);
				{
					while (1) {
						NU8 x;
						if (!(i_391676 < L_391678)) goto LA595;
						branch_390916 = HEX3Atmp_391673->data[i_391676];
						x = typerel_388064(c, branch_390916, aorig, NIM_TRUE);
						{
							if (!(x < ((NU8) 3))) goto LA598;
							result = ((NU8) 0);
							goto BeforeRet;
						}
						LA598: ;
						{
							if (!(x < result)) goto LA602;
							result = x;
						}
						LA602: ;
						i_391676 += ((NI) 1);
					} LA595: ;
				}
			}
			{
				Ttype224847* bound_390937;
				Ttype224847* LOC608;
				if (!dobind) goto LA606;
				LOC608 = 0;
				LOC608 = skiptypes_228167(aorig, 1048576);
				bound_390937 = skipintlit_273698(LOC608);
				{
					if (!dobind) goto LA611;
					put_387291((&(*c).bindings), f, bound_390937);
				}
				LA611: ;
			}
			LA606: ;
			goto BeforeRet;
		}
		goto LA589;
		LA591: ;
		{
			result = typerel_388064(c, prev_390894, a, NIM_TRUE);
			goto BeforeRet;
		}
		LA589: ;
	}
	break;
	case ((NU8) 56):
	{
		Ttype224847* prev_390941;
		Tidobj197015* LOC615;
		TNimObject* LOC616;
		LOC615 = 0;
		LOC615 = &f->Sup;
		LOC616 = 0;
		LOC616 = idtableget_232182((*c).bindings, LOC615);
		prev_390941 = ((Ttype224847*) (LOC616));
		{
			if (!(prev_390941 == NIM_NIL)) goto LA619;
			result = ((NU8) 0);
			{
				Ttype224847* branch_390963;
				Ttypeseq224843* HEX3Atmp_391680;
				NI i_391683;
				NI L_391685;
				branch_390963 = 0;
				HEX3Atmp_391680 = 0;
				HEX3Atmp_391680 = (*f).sons;
				i_391683 = ((NI) 0);
				L_391685 = (HEX3Atmp_391680 ? HEX3Atmp_391680->Sup.len : 0);
				{
					while (1) {
						NU8 x;
						if (!(i_391683 < L_391685)) goto LA623;
						branch_390963 = HEX3Atmp_391680->data[i_391683];
						x = typerel_388064(c, branch_390963, aorig, NIM_TRUE);
						{
							if (!(result < x)) goto LA626;
							result = x;
						}
						LA626: ;
						i_391683 += ((NI) 1);
					} LA623: ;
				}
			}
			{
				if (!(((NU8) 3) <= result)) goto LA630;
				{
					Ttype224847* bound_390984;
					Ttype224847* LOC636;
					if (!dobind) goto LA634;
					LOC636 = 0;
					LOC636 = skiptypes_228167(aorig, 1048576);
					bound_390984 = skipintlit_273698(LOC636);
					{
						if (!dobind) goto LA639;
						put_387291((&(*c).bindings), f, bound_390984);
					}
					LA639: ;
				}
				LA634: ;
				goto BeforeRet;
			}
			goto LA628;
			LA630: ;
			{
				result = ((NU8) 0);
			}
			LA628: ;
		}
		goto LA617;
		LA619: ;
		{
			result = typerel_388064(c, prev_390941, a, NIM_TRUE);
			goto BeforeRet;
		}
		LA617: ;
	}
	break;
	case ((NU8) 57):
	{
		Ttype224847* prev_390988;
		Tidobj197015* LOC644;
		TNimObject* LOC645;
		LOC644 = 0;
		LOC644 = &f->Sup;
		LOC645 = 0;
		LOC645 = idtableget_232182((*c).bindings, LOC644);
		prev_390988 = ((Ttype224847*) (LOC645));
		{
			if (!(prev_390988 == NIM_NIL)) goto LA648;
			{
				Ttype224847* branch_391010;
				Ttypeseq224843* HEX3Atmp_391687;
				NI i_391690;
				NI L_391692;
				branch_391010 = 0;
				HEX3Atmp_391687 = 0;
				HEX3Atmp_391687 = (*f).sons;
				i_391690 = ((NI) 0);
				L_391692 = (HEX3Atmp_391687 ? HEX3Atmp_391687->Sup.len : 0);
				{
					while (1) {
						if (!(i_391690 < L_391692)) goto LA652;
						branch_391010 = HEX3Atmp_391687->data[i_391690];
						{
							NU8 LOC655;
							LOC655 = 0;
							LOC655 = typerel_388064(c, branch_391010, aorig, NIM_TRUE);
							if (!!((LOC655 == ((NU8) 0)))) goto LA656;
							result = ((NU8) 0);
							goto BeforeRet;
						}
						LA656: ;
						i_391690 += ((NI) 1);
					} LA652: ;
				}
			}
			{
				Ttype224847* bound_391021;
				Ttype224847* LOC662;
				if (!dobind) goto LA660;
				LOC662 = 0;
				LOC662 = skiptypes_228167(aorig, 1048576);
				bound_391021 = skipintlit_273698(LOC662);
				{
					if (!dobind) goto LA665;
					put_387291((&(*c).bindings), f, bound_391021);
				}
				LA665: ;
			}
			LA660: ;
			result = ((NU8) 8);
			goto BeforeRet;
		}
		goto LA646;
		LA648: ;
		{
			result = typerel_388064(c, prev_390988, a, NIM_TRUE);
			goto BeforeRet;
		}
		LA646: ;
	}
	break;
	case ((NU8) 58):
	{
		Ttype224847* prev_391025;
		Tidobj197015* LOC669;
		TNimObject* LOC670;
		LOC669 = 0;
		LOC669 = &f->Sup;
		LOC670 = 0;
		LOC670 = idtableget_232182((*c).bindings, LOC669);
		prev_391025 = ((Ttype224847*) (LOC670));
		{
			Ttype224847* concrete;
			if (!(prev_391025 == NIM_NIL)) goto LA673;
			concrete = concretetype_388074((&(*c)), a);
			{
				NIM_BOOL LOC677;
				LOC677 = 0;
				LOC677 = !((concrete == NIM_NIL));
				if (!(LOC677)) goto LA678;
				LOC677 = dobind;
				LA678: ;
				if (!LOC677) goto LA679;
				put_387291((&(*c).bindings), f, concrete);
			}
			LA679: ;
			result = ((NU8) 8);
			goto BeforeRet;
		}
		goto LA671;
		LA673: ;
		{
			result = typerel_388064(c, prev_391025, a, NIM_TRUE);
			goto BeforeRet;
		}
		LA671: ;
	}
	break;
	case ((NU8) 51):
	{
		Ttype224847* prev_391053;
		Tidobj197015* LOC683;
		TNimObject* LOC684;
		LOC683 = 0;
		LOC683 = &f->Sup;
		LOC684 = 0;
		LOC684 = idtableget_232182((*c).bindings, LOC683);
		prev_391053 = ((Ttype224847*) (LOC684));
		{
			NU8 targetkind;
			if (!(prev_391053 == NIM_NIL)) goto LA687;
			targetkind = (*(*f).sons->data[((NI) 0)]).kind;
			{
				NIM_BOOL LOC691;
				Ttype224847* LOC692;
				NIM_BOOL LOC694;
				LOC691 = 0;
				LOC692 = 0;
				LOC692 = skiptypes_228167(a, 1050624);
				LOC691 = (targetkind == (*LOC692).kind);
				if (LOC691) goto LA693;
				LOC694 = 0;
				LOC694 = ((100663296 &(IL64(1)<<((targetkind)&IL64(63))))!=0);
				if (!(LOC694)) goto LA695;
				LOC694 = ((*a).kind == ((NU8) 5));
				LA695: ;
				LOC691 = LOC694;
				LA693: ;
				if (!LOC691) goto LA696;
				put_387291((&(*c).bindings), f, a);
				result = ((NU8) 8);
				goto BeforeRet;
			}
			goto LA689;
			LA696: ;
			{
				result = ((NU8) 0);
				goto BeforeRet;
			}
			LA689: ;
		}
		goto LA685;
		LA687: ;
		{
			result = typerel_388064(c, prev_391053, a, NIM_TRUE);
			goto BeforeRet;
		}
		LA685: ;
	}
	break;
	case ((NU8) 52):
	case ((NU8) 53):
	{
		Ttype224847* prev_391099;
		Tidobj197015* LOC701;
		TNimObject* LOC702;
		LOC701 = 0;
		LOC701 = &f->Sup;
		LOC702 = 0;
		LOC702 = idtableget_232182((*c).bindings, LOC701);
		prev_391099 = ((Ttype224847*) (LOC702));
		{
			if (!(prev_391099 == NIM_NIL)) goto LA705;
			result = matchusertypeclass_389249((*c).c, c, f, aorig);
			{
				if (!(result == ((NU8) 8))) goto LA709;
				put_387291((&(*c).bindings), f, a);
			}
			LA709: ;
		}
		goto LA703;
		LA705: ;
		{
			result = typerel_388064(c, prev_391099, a, NIM_TRUE);
			goto BeforeRet;
		}
		LA703: ;
	}
	break;
	case ((NU8) 54):
	{
		Ttype224847* prev_391123;
		Tidobj197015* LOC713;
		TNimObject* LOC714;
		LOC713 = 0;
		LOC713 = &f->Sup;
		LOC714 = 0;
		LOC714 = idtableget_232182((*c).bindings, LOC713);
		prev_391123 = ((Ttype224847*) (LOC714));
		{
			if (!(prev_391123 == NIM_NIL)) goto LA717;
			{
				NU8 LOC721;
				LOC721 = 0;
				LOC721 = typerel_388064(c, (*f).sons->data[((NI) 1)], a, NIM_TRUE);
				if (!!((LOC721 == ((NU8) 0)))) goto LA722;
				put_387291((&(*c).bindings), f, a);
				result = ((NU8) 8);
				goto BeforeRet;
			}
			goto LA719;
			LA722: ;
			{
				result = ((NU8) 0);
				goto BeforeRet;
			}
			LA719: ;
		}
		goto LA715;
		LA717: ;
		{
			result = typerel_388064(c, prev_391123, a, NIM_TRUE);
			goto BeforeRet;
		}
		LA715: ;
	}
	break;
	case ((NU8) 12):
	{
		Ttype224847* x;
		Tidobj197015* LOC727;
		TNimObject* LOC728;
		LOC727 = 0;
		LOC727 = &f->Sup;
		LOC728 = 0;
		LOC728 = idtableget_232182((*c).bindings, LOC727);
		x = ((Ttype224847*) (LOC728));
		{
			if (!(x == NIM_NIL)) goto LA731;
			{
				NIM_BOOL LOC735;
				NIM_BOOL LOC736;
				LOC735 = 0;
				LOC736 = 0;
				LOC736 = ((*(*c).callee).kind == ((NU8) 10));
				if (!(LOC736)) goto LA737;
				LOC736 = ((*f).kind == ((NU8) 12));
				LA737: ;
				LOC735 = LOC736;
				if (!(LOC735)) goto LA738;
				LOC735 = !((*c).typedescmatched);
				LA738: ;
				if (!LOC735) goto LA739;
				{
					if (!(((*a).flags &(1<<((((NU8) 25))&31)))!=0)) goto LA743;
					result = ((NU8) 8);
				}
				goto LA741;
				LA743: ;
				{
					if (!((*a).kind == ((NU8) 8))) goto LA746;
					{
						NI LOC750;
						LOC750 = 0;
						LOC750 = sonslen_227351(f);
						if (!(LOC750 == ((NI) 0))) goto LA751;
						result = ((NU8) 8);
					}
					goto LA748;
					LA751: ;
					{
						Ttype224847* aa;
						Ttype224847* LOC767;
						{
							NIM_BOOL LOC756;
							NIM_BOOL LOC757;
							NimStringDesc* LOC761;
							LOC756 = 0;
							LOC757 = 0;
							LOC757 = HEX3DHEX3D_263739((*a).sons, NIM_NIL);
							LOC756 = !(LOC757);
							if (!(LOC756)) goto LA758;
							LOC756 = (((NI) 0) < ((*a).sons ? (*a).sons->Sup.len : 0));
							LA758: ;
							if (!!(LOC756)) goto LA759;
							LOC761 = 0;
							LOC761 = HEX24_195279(TMP2766);
							internalerror_195191(LOC761);
						}
						LA759: ;
						(*c).typedescmatched = NIM_TRUE;
						aa = a;
						{
							while (1) {
								NIM_BOOL LOC764;
								NI LOC766;
								LOC764 = 0;
								LOC764 = ((4352 &(IL64(1)<<(((*aa).kind)&IL64(63))))!=0);
								if (!(LOC764)) goto LA765;
								LOC766 = 0;
								LOC766 = len_227369(aa);
								LOC764 = (((NI) 0) < LOC766);
								LA765: ;
								if (!LOC764) goto LA763;
								aa = lastson_227426(aa);
							} LA763: ;
						}
						LOC767 = 0;
						LOC767 = base_254039(f);
						result = typerel_388064(c, LOC767, aa, NIM_TRUE);
						{
							if (!(((NU8) 8) < result)) goto LA770;
							result = ((NU8) 8);
						}
						LA770: ;
					}
					LA748: ;
				}
				goto LA741;
				LA746: ;
				{
					result = ((NU8) 0);
				}
				LA741: ;
			}
			goto LA733;
			LA739: ;
			{
				{
					NIM_BOOL LOC776;
					NI LOC777;
					Ttype224847* LOC781;
					LOC776 = 0;
					LOC777 = 0;
					LOC777 = sonslen_227351(f);
					LOC776 = (((NI) 0) < LOC777);
					if (!(LOC776)) goto LA778;
					LOC776 = !(((*(*f).sons->data[((NI) 0)]).kind == ((NU8) 0)));
					LA778: ;
					if (!LOC776) goto LA779;
					LOC781 = 0;
					LOC781 = lastson_227426(f);
					result = typerel_388064(c, LOC781, a, NIM_TRUE);
					{
						NIM_BOOL LOC784;
						Ttype224847* concrete;
						LOC784 = 0;
						LOC784 = dobind;
						if (!(LOC784)) goto LA785;
						LOC784 = !(((257 &(1<<((result)&15)))!=0));
						LA785: ;
						if (!LOC784) goto LA786;
						concrete = concretetype_388074((&(*c)), a);
						{
							if (!(concrete == NIM_NIL)) goto LA790;
							result = ((NU8) 0);
							goto BeforeRet;
						}
						LA790: ;
						put_387291((&(*c).bindings), f, concrete);
					}
					LA786: ;
				}
				goto LA774;
				LA779: ;
				{
					result = ((NU8) 8);
				}
				LA774: ;
			}
			LA733: ;
			{
				Ttype224847* concrete;
				if (!(result == ((NU8) 8))) goto LA795;
				concrete = a;
				{
					if (!(((*a).flags &(1<<((((NU8) 25))&31)))!=0)) goto LA799;
					(*(*a).sym).kind = ((NU8) 7);
					(*a).flags &= ~(((NU32)1) << ((((NU8) 25)) % (sizeof(NU32)*8)));
				}
				goto LA797;
				LA799: ;
				{
					concrete = concretetype_388074((&(*c)), a);
					{
						if (!(concrete == NIM_NIL)) goto LA804;
						result = ((NU8) 0);
						goto BeforeRet;
					}
					LA804: ;
				}
				LA797: ;
				{
					if (!dobind) goto LA808;
					put_387291((&(*c).bindings), f, concrete);
				}
				LA808: ;
			}
			goto LA793;
			LA795: ;
			{
				if (!(((NU8) 8) < result)) goto LA811;
				result = ((NU8) 8);
			}
			goto LA793;
			LA811: ;
			LA793: ;
		}
		goto LA729;
		LA731: ;
		{
			if (!((*a).kind == ((NU8) 3))) goto LA814;
			result = ((NU8) 8);
		}
		goto LA729;
		LA814: ;
		{
			if (!((*x).kind == ((NU8) 12))) goto LA817;
			result = ((NU8) 8);
		}
		goto LA729;
		LA817: ;
		{
			result = typerel_388064(c, x, a, NIM_TRUE);
			{
				if (!(((NU8) 8) < result)) goto LA822;
				result = ((NU8) 8);
			}
			LA822: ;
		}
		LA729: ;
	}
	break;
	case ((NU8) 59):
	{
		Ttype224847* prev;
		Tidobj197015* LOC825;
		TNimObject* LOC826;
		LOC825 = 0;
		LOC825 = &f->Sup;
		LOC826 = 0;
		LOC826 = idtableget_232182((*c).bindings, LOC825);
		prev = ((Ttype224847*) (LOC826));
		{
			if (!(prev == NIM_NIL)) goto LA829;
			{
				Ttype224847* LOC835;
				if (!((*aorig).kind == ((NU8) 59))) goto LA833;
				LOC835 = 0;
				LOC835 = lastson_227426(f);
				result = typerel_388064(c, LOC835, a, NIM_TRUE);
				{
					NIM_BOOL LOC838;
					LOC838 = 0;
					LOC838 = !((result == ((NU8) 0)));
					if (!(LOC838)) goto LA839;
					LOC838 = !(((*f).n == NIM_NIL));
					LA839: ;
					if (!LOC838) goto LA840;
					{
						NIM_BOOL LOC844;
						LOC844 = 0;
						LOC844 = exprstructuralequivalent_253149((*f).n, (*aorig).n, NIM_FALSE);
						if (!!(LOC844)) goto LA845;
						result = ((NU8) 0);
					}
					LA845: ;
				}
				LA840: ;
				{
					if (!!((result == ((NU8) 0)))) goto LA849;
					put_387291((&(*c).bindings), f, aorig);
				}
				LA849: ;
			}
			goto LA831;
			LA833: ;
			{
				result = ((NU8) 0);
			}
			LA831: ;
		}
		goto LA827;
		LA829: ;
		{
			if (!((*prev).kind == ((NU8) 59))) goto LA853;
			{
				Ttype224847* LOC859;
				if (!((*aorig).kind == ((NU8) 59))) goto LA857;
				LOC859 = 0;
				LOC859 = lastson_227426(prev);
				result = typerel_388064(c, LOC859, a, NIM_TRUE);
				{
					NIM_BOOL LOC862;
					LOC862 = 0;
					LOC862 = !((result == ((NU8) 0)));
					if (!(LOC862)) goto LA863;
					LOC862 = !(((*prev).n == NIM_NIL));
					LA863: ;
					if (!LOC862) goto LA864;
					{
						NIM_BOOL LOC868;
						LOC868 = 0;
						LOC868 = exprstructuralequivalent_253149((*prev).n, (*aorig).n, NIM_FALSE);
						if (!!(LOC868)) goto LA869;
						result = ((NU8) 0);
					}
					LA869: ;
				}
				LA864: ;
			}
			goto LA855;
			LA857: ;
			{
				result = ((NU8) 0);
			}
			LA855: ;
		}
		goto LA827;
		LA853: ;
		{
			result = ((NU8) 0);
		}
		LA827: ;
	}
	break;
	case ((NU8) 8):
	{
		Ttype224847* prev;
		Tidobj197015* LOC874;
		TNimObject* LOC875;
		LOC874 = 0;
		LOC874 = &f->Sup;
		LOC875 = 0;
		LOC875 = idtableget_232182((*c).bindings, LOC874);
		prev = ((Ttype224847*) (LOC875));
		{
			if (!(prev == NIM_NIL)) goto LA878;
			{
				if (!!(((*a).kind == ((NU8) 8)))) goto LA882;
				result = ((NU8) 0);
				goto BeforeRet;
			}
			LA882: ;
			{
				Ttype224847* LOC886;
				LOC886 = 0;
				LOC886 = base_254039(f);
				if (!((*LOC886).kind == ((NU8) 0))) goto LA887;
				result = ((NU8) 8);
			}
			goto LA884;
			LA887: ;
			{
				Ttype224847* LOC890;
				Ttype224847* LOC891;
				LOC890 = 0;
				LOC890 = base_254039(f);
				LOC891 = 0;
				LOC891 = base_254039(a);
				result = typerel_388064(c, LOC890, LOC891, NIM_TRUE);
			}
			LA884: ;
			{
				if (!!((result == ((NU8) 0)))) goto LA894;
				put_387291((&(*c).bindings), f, a);
			}
			LA894: ;
		}
		goto LA876;
		LA878: ;
		{
			{
				Ttype224847* LOC901;
				if (!(((*f).flags &(1<<((((NU8) 9))&31)))!=0)) goto LA899;
				LOC901 = 0;
				LOC901 = base_254039(prev);
				result = typerel_388064(c, LOC901, a, NIM_TRUE);
			}
			goto LA897;
			LA899: ;
			{
				Ttype224847* LOC905;
				Ttype224847* LOC906;
				if (!((*a).kind == ((NU8) 8))) goto LA903;
				LOC905 = 0;
				LOC905 = base_254039(prev);
				LOC906 = 0;
				LOC906 = base_254039(a);
				result = typerel_388064(c, LOC905, LOC906, NIM_TRUE);
			}
			goto LA897;
			LA903: ;
			{
				result = ((NU8) 0);
			}
			LA897: ;
		}
		LA876: ;
	}
	break;
	case ((NU8) 49):
	{
		{
			NIM_BOOL LOC911;
			NIM_BOOL LOC913;
			Ttype224847* LOC917;
			Ttype224847* LOC918;
			LOC911 = 0;
			LOC911 = ((*a).kind == ((NU8) 49));
			if (LOC911) goto LA912;
			LOC913 = 0;
			LOC913 = ((*a).kind == ((NU8) 25));
			if (!(LOC913)) goto LA914;
			LOC913 = (((*a).flags &(1<<((((NU8) 14))&31)))!=0);
			LA914: ;
			LOC911 = LOC913;
			LA912: ;
			if (!LOC911) goto LA915;
			LOC917 = 0;
			LOC917 = base_254039(f);
			LOC918 = 0;
			LOC918 = base_254039(a);
			result = typerel_388064(c, LOC917, LOC918, NIM_TRUE);
		}
		goto LA909;
		LA915: ;
		{
			result = ((NU8) 0);
		}
		LA909: ;
	}
	break;
	case ((NU8) 7):
	{
		{
			NIM_BOOL LOC923;
			LOC923 = 0;
			LOC923 = !((aorig == NIM_NIL));
			if (!(LOC923)) goto LA924;
			LOC923 = !((((*f).flags &(1<<((((NU8) 0))&31)))!=0));
			LA924: ;
			if (!LOC923) goto LA925;
			put_387291((&(*c).bindings), f, aorig);
		}
		LA925: ;
		result = ((NU8) 8);
	}
	break;
	case ((NU8) 50):
	{
		result = ((NU8) 10);
	}
	break;
	case ((NU8) 60):
	{
		Tnode224809* reevaluated;
		{
			NIM_BOOL LOC931;
			LOC931 = 0;
			LOC931 = ((*f).n == NIM_NIL);
			if (LOC931) goto LA932;
			LOC931 = ((*(*f).n).kind == ((NU8) 1));
			LA932: ;
			if (!LOC931) goto LA933;
			result = ((NU8) 8);
			goto BeforeRet;
		}
		LA933: ;
		reevaluated = tryresolvingstaticexpr_389562(c, (*f).n);
		switch ((*(*reevaluated).typ).kind) {
		case ((NU8) 8):
		{
			Ttype224847* LOC936;
			LOC936 = 0;
			LOC936 = base_254039((*reevaluated).typ);
			result = typerel_388064(c, a, LOC936, NIM_TRUE);
		}
		break;
		case ((NU8) 59):
		{
			Ttype224847* LOC938;
			LOC938 = 0;
			LOC938 = base_254039((*reevaluated).typ);
			result = typerel_388064(c, a, LOC938, NIM_TRUE);
			{
				NIM_BOOL LOC941;
				LOC941 = 0;
				LOC941 = !((result == ((NU8) 0)));
				if (!(LOC941)) goto LA942;
				LOC941 = !(((*(*reevaluated).typ).n == NIM_NIL));
				LA942: ;
				if (!LOC941) goto LA943;
				{
					NIM_BOOL LOC947;
					LOC947 = 0;
					LOC947 = exprstructuralequivalent_253149((*aorig).n, (*(*reevaluated).typ).n, NIM_FALSE);
					if (!!(LOC947)) goto LA948;
					result = ((NU8) 0);
				}
				LA948: ;
			}
			LA943: ;
		}
		break;
		default:
		{
			localerror_195128((*(*f).n).info, ((NU16) 67), ((NimStringDesc*) &TMP2200));
			result = ((NU8) 0);
		}
		break;
		}
	}
	break;
	case ((NU8) 0):
	{
		{
			if (!((*a).kind == ((NU8) 0))) goto LA954;
			result = ((NU8) 10);
		}
		LA954: ;
	}
	break;
	default:
	{
		NimStringDesc* LOC957;
		LOC957 = 0;
		LOC957 = rawNewString(reprEnum((*f).kind, (&NTI224262))->Sup.len + 19);
appendString(LOC957, ((NimStringDesc*) &TMP2767));
appendString(LOC957, reprEnum((*f).kind, (&NTI224262)));
		internalerror_195191(LOC957);
	}
	break;
	}
	}BeforeRet: ;
	return result;
}

N_NIMCALL(void, incmatches_392124)(Tcandidate387209* 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) 8):
	case ((NU8) 6):
	case ((NU8) 5):
	{
		(*m).genericmatches += ((NI) 1);
	}
	break;
	case ((NU8) 9):
	{
		(*m).intconvmatches += ((NI) 256);
	}
	break;
	case ((NU8) 7):
	{
		(*m).convmatches += ((NI) 1);
	}
	break;
	case ((NU8) 10):
	{
		(*m).exactmatches += ((NI) 1);
	}
	break;
	case ((NU8) 0):
	{
	}
	break;
	}
}

N_NIMCALL(NIM_BOOL, isinlineiterator_392087)(Ttype224847* t) {
	NIM_BOOL result;
	NIM_BOOL LOC1;
	NIM_BOOL LOC3;
	Ttype224847* 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_254039(t);
	LOC3 = ((*LOC5).kind == ((NU8) 49));
	LA4: ;
	LOC1 = LOC3;
	LA2: ;
	result = LOC1;
	return result;
}

N_NIMCALL(Ttype224847*, getinstantiatedtype_391812)(Tcontext279023* c, Tnode224809* arg, Tcandidate387209* m, Ttype224847* f) {
	Ttype224847* result;
	Tidobj197015* LOC1;
	TNimObject* LOC2;
	result = 0;
	LOC1 = 0;
	LOC1 = &f->Sup;
	LOC2 = 0;
	LOC2 = idtableget_232182((*m).bindings, LOC1);
	result = ((Ttype224847*) (LOC2));
	{
		if (!(result == NIM_NIL)) goto LA5;
		result = generatetypeinstance_303894(c, (*m).bindings, (*arg).info, f);
	}
	LA5: ;
	{
		if (!(result == NIM_NIL)) goto LA9;
		internalerror_195172((*arg).info, ((NimStringDesc*) &TMP2770));
		result = errortype_280161(c);
	}
	LA9: ;
	return result;
}

N_NIMCALL(Tnode224809*, implicitconv_391849)(NU8 kind, Ttype224847* f, Tnode224809* arg, Tcandidate387209* m, Tcontext279023* c) {
	Tnode224809* result;
	result = 0;
	result = newnodei_226351(kind, (*arg).info);
	{
		NIM_BOOL LOC3;
		LOC3 = 0;
		LOC3 = containsgenerictype_263310(f);
		if (!LOC3) goto LA4;
		{
			if (!!(!(((*m).fauxmatch == ((NU8) 0))))) goto LA8;
			asgnRefNoCycle((void**) (&(*result).typ), getinstantiatedtype_391812(c, arg, m, f));
		}
		goto LA6;
		LA8: ;
		{
			asgnRefNoCycle((void**) (&(*result).typ), errortype_280161(c));
		}
		LA6: ;
	}
	goto LA1;
	LA4: ;
	{
		asgnRefNoCycle((void**) (&(*result).typ), f);
	}
	LA1: ;
	{
		if (!((*result).typ == NIM_NIL)) goto LA14;
		internalerror_195172((*arg).info, ((NimStringDesc*) &TMP2771));
	}
	LA14: ;
	addson_226819(result, emptynode_225807);
	addson_226819(result, arg);
	return result;
}

N_NIMCALL(NIM_BOOL, istracked_397569)(Tlineinfo189352 current, NI tokenlen) {
	NIM_BOOL result;
{	result = 0;
	{
		if (!(current.fileindex == gtrackpos_190901.fileindex)) goto LA3;
		{
			NI16 col;
			if (!(current.line == gtrackpos_190901.line)) goto LA7;
			col = gtrackpos_190901.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_397665)(Tlineinfo189352 info, Tsym224841* s) {
	{
		NIM_BOOL LOC3;
		NimStringDesc* LOC7;
		Suggest394010 LOC8;
		LOC3 = 0;
		LOC3 = (usagesym_397663 == NIM_NIL);
		if (!(LOC3)) goto LA4;
		LOC3 = istracked_397569(info, ((*(*s).name).s ? (*(*s).name).s->Sup.len : 0));
		LA4: ;
		if (!LOC3) goto LA5;
		asgnRefNoCycle((void**) (&usagesym_397663), s);
		LOC7 = 0;
		LOC7 = HEX24_167755(((NU8) 4));
		memset((void*)(&LOC8), 0, sizeof(LOC8));
		symtosuggest_394404(s, NIM_FALSE, LOC7, (&LOC8));
		suggestresult_394414((&LOC8));
	}
	goto LA1;
	LA5: ;
	{
		if (!(s == usagesym_397663)) goto LA10;
		{
			NIM_BOOL LOC14;
			NimStringDesc* LOC17;
			Suggest394010 LOC18;
			LOC14 = 0;
			LOC14 = HEX3DHEX3D_192255(lastlineinfo_397664, info);
			if (!!(LOC14)) goto LA15;
			LOC17 = 0;
			LOC17 = HEX24_167755(((NU8) 4));
			memset((void*)(&LOC18), 0, sizeof(LOC18));
			symtosuggest_394027(s, NIM_FALSE, LOC17, info, (&LOC18));
			suggestresult_394414((&LOC18));
		}
		LA15: ;
		lastlineinfo_397664 = info;
	}
	goto LA1;
	LA10: ;
	LA1: ;
}

N_NIMCALL(void, finddefinition_397696)(Tlineinfo189352 info, Tsym224841* s) {
{	{
		if (!s == 0) goto LA3;
		goto BeforeRet;
	}
	LA3: ;
	{
		NIM_BOOL LOC7;
		NimStringDesc* LOC10;
		Suggest394010 LOC11;
		LOC7 = 0;
		LOC7 = istracked_397569(info, ((*(*s).name).s ? (*(*s).name).s->Sup.len : 0));
		if (!LOC7) goto LA8;
		LOC10 = 0;
		LOC10 = HEX24_167755(((NU8) 3));
		memset((void*)(&LOC11), 0, sizeof(LOC11));
		symtosuggest_394404(s, NIM_FALSE, LOC10, (&LOC11));
		suggestresult_394414((&LOC11));
		suggestquit_190506();
	}
	LA8: ;
	}BeforeRet: ;
}

static N_INLINE(void, suggestsym_397733)(Tlineinfo189352 info, Tsym224841* s) {
	{
		if (!(gidecmd_166119 == ((NU8) 4))) goto LA3;
		findusages_397665(info, s);
	}
	goto LA1;
	LA3: ;
	{
		if (!(gidecmd_166119 == ((NU8) 3))) goto LA6;
		finddefinition_397696(info, s);
	}
	goto LA1;
	LA6: ;
	{
		NIM_BOOL LOC9;
		LOC9 = 0;
		LOC9 = (gidecmd_166119 == ((NU8) 5));
		if (!(LOC9)) goto LA10;
		LOC9 = !((s == NIM_NIL));
		LA10: ;
		if (!LOC9) goto LA11;
		{
			NIM_BOOL LOC15;
			NimStringDesc* LOC18;
			Suggest394010 LOC19;
			LOC15 = 0;
			LOC15 = istracked_397569(info, ((*(*s).name).s ? (*(*s).name).s->Sup.len : 0));
			if (!LOC15) goto LA16;
			LOC18 = 0;
			LOC18 = HEX24_167755(((NU8) 3));
			memset((void*)(&LOC19), 0, sizeof(LOC19));
			symtosuggest_394404(s, NIM_FALSE, LOC18, (&LOC19));
			suggestresult_394414((&LOC19));
		}
		LA16: ;
		findusages_397665(info, s);
	}
	goto LA1;
	LA11: ;
	LA1: ;
}

N_NIMCALL(void, markused_387253)(Tlineinfo189352 info, Tsym224841* s) {
	(*s).flags |= ((NU32)1)<<((((NU8) 0))%(sizeof(NU32)*8));
	{
		if (!!(((1572864 & (*s).flags) == 0))) goto LA3;
		{
			if (!(((*s).flags &(1<<((((NU8) 19))&31)))!=0)) goto LA7;
			message_195161(info, ((NU16) 241), (*(*s).name).s);
		}
		LA7: ;
		{
			if (!(((*s).flags &(1<<((((NU8) 20))&31)))!=0)) goto LA11;
			localerror_195128(info, ((NU16) 226), (*(*s).name).s);
		}
		LA11: ;
	}
	LA3: ;
	suggestsym_397733(info, s);
}

N_NIMCALL(Tnode224809*, userconvmatch_391884)(Tcontext279023* c, Tcandidate387209* m, Ttype224847* f, Ttype224847* a, Tnode224809* arg) {
	Tnode224809* result;
{	result = 0;
	result = NIM_NIL;
	{
		NI i_391913;
		NI HEX3Atmp_391965;
		NI res_391968;
		i_391913 = 0;
		HEX3Atmp_391965 = 0;
		HEX3Atmp_391965 = (NI)(((*c).converters ? (*c).converters->Sup.len : 0) - ((NI) 1));
		res_391968 = ((NI) 0);
		{
			while (1) {
				if (!(res_391968 <= HEX3Atmp_391965)) goto LA3;
				i_391913 = res_391968;
				{
					Ttype224847* src;
					Ttype224847* dest;
					NU8 srca;
					NIM_BOOL destisgeneric;
					NU8 fdest;
					src = (*(*(*c).converters->data[i_391913]).typ).sons->data[((NI) 1)];
					dest = (*(*(*c).converters->data[i_391913]).typ).sons->data[((NI) 0)];
					srca = typerel_388064(m, src, a, NIM_TRUE);
					{
						if (!!(((1280 &(1<<((srca)&15)))!=0))) goto LA7;
						goto LA4;
					}
					LA7: ;
					destisgeneric = containsgenerictype_263310(dest);
					{
						if (!destisgeneric) goto LA11;
						dest = generatetypeinstance_303894(c, (*m).bindings, (*arg).info, dest);
					}
					LA11: ;
					fdest = typerel_388064(m, f, dest, NIM_TRUE);
					{
						Tnode224809* s;
						Tnode224809* LOC17;
						NIM_BOOL LOC18;
						if (!((1280 &(1<<((fdest)&15)))!=0)) goto LA15;
						markused_387253((*arg).info, (*c).converters->data[i_391913]);
						s = newsymnode_226325((*c).converters->data[i_391913]);
						asgnRefNoCycle((void**) (&(*s).typ), (*(*c).converters->data[i_391913]).typ);
						(*s).info = (*arg).info;
						result = newnodeit_226807(((NU8) 32), (*arg).info, dest);
						addson_226819(result, s);
						LOC17 = 0;
						LOC17 = copytree_229028(arg);
						addson_226819(result, LOC17);
						(*m).convmatches += ((NI) 1);
						LOC18 = 0;
						LOC18 = (srca == ((NU8) 8));
						if (LOC18) goto LA19;
						LOC18 = destisgeneric;
						LA19: ;
						(*m).genericconverter = LOC18;
						goto BeforeRet;
					}
					LA15: ;
				} LA4: ;
				res_391968 += ((NI) 1);
			} LA3: ;
		}
	}
	}BeforeRet: ;
	return result;
}

N_NIMCALL(Tnode224809*, localconvmatch_391990)(Tcontext279023* c, Tcandidate387209* m, Ttype224847* f, Ttype224847* a, Tnode224809* arg) {
	Tnode224809* result;
	Tnode224809* call;
	Tnode224809* LOC11;
	Tnode224809* 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_226351(((NU8) 27), (*arg).info);
	LOC11 = 0;
	LOC11 = copytree_229028((*f).n);
	add_225165(call, LOC11);
	LOC12 = 0;
	LOC12 = copytree_229028(arg);
	add_225165(call, LOC12);
	result = (*c).semoverloadedcall(c, call, call, 520192);
	{
		NU8 r;
		if (!!((result == NIM_NIL))) goto LA15;
		r = typerel_388064(m, (*f).sons->data[((NI) 0)], (*result).typ, NIM_TRUE);
		{
			if (!(r < ((NU8) 8))) goto LA19;
			result = NIM_NIL;
			goto BeforeRet;
		}
		LA19: ;
		{
			if (!((*result).kind == ((NU8) 27))) goto LA23;
			(*result).kind = ((NU8) 32);
		}
		LA23: ;
		(*m).convmatches += ((NI) 1);
		{
			Ttype224847* LOC29;
			if (!(r == ((NU8) 8))) goto LA27;
			LOC29 = 0;
			LOC29 = base_254039(f);
			asgnRefNoCycle((void**) (&(*result).typ), getinstantiatedtype_391812(c, arg, (&(*m)), LOC29));
		}
		LA27: ;
		(*m).basetypematch = NIM_TRUE;
	}
	LA15: ;
	}BeforeRet: ;
	return result;
}

N_NIMCALL(Tnode224809*, paramtypesmatchaux_392191)(Tcandidate387209* m, Ttype224847* f, Ttype224847* argtype_392196, Tnode224809* argsemantized, Tnode224809* argorig) {
	Tnode224809* result;
	Ttype224847* fmaybestatic;
	Tnode224809* arg;
	Ttype224847* argtype;
	Tcontext279023* c;
	Ttype224847* a;
	NU8 r;
	NI bothmetacounter;
	NI lastbindingslength;
{	result = 0;
	fmaybestatic = skiptypes_228167(f, 8192);
	arg = argsemantized;
	argtype = argtype_392196;
	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_227445(argtype, f);
			result = argsemantized;
			goto BeforeRet;
		}
		LA9: ;
		{
			if (!((*argtype).kind == ((NU8) 59))) goto LA13;
			{
				NIM_BOOL LOC17;
				Ttype224847* 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_279728(c, arg);
				result = newnodeit_226807(((NU8) 4), (*argorig).info, LOC21);
				goto BeforeRet;
			}
			LA19: ;
		}
		goto LA11;
		LA13: ;
		{
			Tnode224809* evaluated;
			evaluated = (*c).semtryconstexpr(c, arg);
			{
				TY392275 LOC27;
				if (!!((evaluated == NIM_NIL))) goto LA25;
				asgnRefNoCycle((void**) (&(*arg).typ), newtypes_279220(((NU8) 59), c));
				if ((*(*arg).typ).sons) nimGCunrefNoCycle((*(*arg).typ).sons);
				(*(*arg).typ).sons = (Ttypeseq224843*) newSeqRC1((&NTI224843), 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_228167(argtype, IL64(2305843009213694208));
	}
	goto LA28;
	LA30: ;
	{
		a = argtype;
	}
	LA28: ;
	r = typerel_388064(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_392124(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;
		Ttype224847* inlined;
		TY392275 LOC58;
		LOC54 = 0;
		LOC54 = !((r == ((NU8) 0)));
		if (!(LOC54)) goto LA55;
		LOC54 = isinlineiterator_392087(f);
		LA55: ;
		if (!LOC54) goto LA56;
		inlined = newtypes_279220(((NU8) 59), c);
		if ((*inlined).sons) nimGCunrefNoCycle((*inlined).sons);
		(*inlined).sons = (Ttypeseq224843*) newSeqRC1((&NTI224843), 1);
		memset((void*)LOC58, 0, sizeof(LOC58));
		LOC58[0] = argtype;
		asgnRefNoCycle((void**) (&(*inlined).sons->data[0]), LOC58[0]);
		asgnRefNoCycle((void**) (&(*inlined).n), argsemantized);
		put_387291((&(*m).bindings), f, inlined);
		result = argsemantized;
		goto BeforeRet;
	}
	LA56: ;
	bothmetacounter = ((NI) 0);
	lastbindingslength = ((NI) -1);
	{
		while (1) {
			NIM_BOOL LOC61;
			NIM_BOOL LOC62;
			LOC61 = 0;
			LOC62 = 0;
			LOC62 = (r == ((NU8) 5));
			if (!(LOC62)) goto LA63;
			LOC62 = !((lastbindingslength == (*m).bindings.counter));
			LA63: ;
			LOC61 = LOC62;
			if (!(LOC61)) goto LA64;
			LOC61 = (bothmetacounter < ((NI) 100));
			LA64: ;
			if (!LOC61) goto LA60;
			lastbindingslength = (*m).bindings.counter;
			bothmetacounter += ((NI) 1);
			{
				if (!((*arg).kind >= ((NU8) 51) && (*arg).kind <= ((NU8) 52) || (*arg).kind == ((NU8) 79) || (*arg).kind == ((NU8) 84))) goto LA67;
				result = (*c).seminferredlambda.ClEnv? (*c).seminferredlambda.ClPrc(c, (*m).bindings, arg, (*c).seminferredlambda.ClEnv):((TMP2768)((*c).seminferredlambda.ClPrc))(c, (*m).bindings, arg);
			}
			goto LA65;
			LA67: ;
			{
				if (!!(((*arg).kind == ((NU8) 3)))) goto LA70;
				result = NIM_NIL;
				goto BeforeRet;
			}
			goto LA65;
			LA70: ;
			{
				Tsym224841* inferred;
				inferred = (*c).semgenerateinstance.ClEnv? (*c).semgenerateinstance.ClPrc(c, (*arg).kindU.S4.sym, (*m).bindings, (*arg).info, (*c).semgenerateinstance.ClEnv):((TMP2769)((*c).semgenerateinstance.ClPrc))(c, (*arg).kindU.S4.sym, (*m).bindings, (*arg).info);
				result = newsymnode_226338(inferred, (*arg).info);
			}
			LA65: ;
			(*m).convmatches += ((NI) 1);
			arg = result;
			r = typerel_388064(m, f, (*arg).typ, NIM_TRUE);
		} LA60: ;
	}
	switch (r) {
	case ((NU8) 1):
	{
		(*m).convmatches += ((NI) 1);
		result = implicitconv_391849(((NU8) 58), f, arg, (&(*m)), c);
	}
	break;
	case ((NU8) 2):
	{
		(*m).intconvmatches += ((NI) 1);
		result = implicitconv_391849(((NU8) 58), f, arg, (&(*m)), c);
	}
	break;
	case ((NU8) 3):
	{
		(*m).subtypematches += ((NI) 1);
		{
			if (!((*f).kind == ((NU8) 8))) goto LA78;
			result = arg;
		}
		goto LA76;
		LA78: ;
		{
			result = implicitconv_391849(((NU8) 59), f, arg, (&(*m)), c);
		}
		LA76: ;
	}
	break;
	case ((NU8) 4):
	{
		(*m).subtypematches += ((NI) 1);
		{
			if (!((*f).kind == ((NU8) 23))) goto LA84;
			result = arg;
		}
		goto LA82;
		LA84: ;
		{
			result = implicitconv_391849(((NU8) 58), f, arg, (&(*m)), c);
		}
		LA82: ;
	}
	break;
	case ((NU8) 6):
	case ((NU8) 7):
	{
		{
			if (!((*arg).kind >= ((NU8) 51) && (*arg).kind <= ((NU8) 52) || (*arg).kind == ((NU8) 79) || (*arg).kind == ((NU8) 84))) goto LA90;
			result = (*c).seminferredlambda.ClEnv? (*c).seminferredlambda.ClPrc(c, (*m).bindings, arg, (*c).seminferredlambda.ClEnv):((TMP2772)((*c).seminferredlambda.ClPrc))(c, (*m).bindings, arg);
		}
		goto LA88;
		LA90: ;
		{
			if (!!(((*arg).kind == ((NU8) 3)))) goto LA93;
			result = NIM_NIL;
			goto BeforeRet;
		}
		goto LA88;
		LA93: ;
		{
			Tsym224841* inferred;
			inferred = (*c).semgenerateinstance.ClEnv? (*c).semgenerateinstance.ClPrc(c, (*arg).kindU.S4.sym, (*m).bindings, (*arg).info, (*c).semgenerateinstance.ClEnv):((TMP2773)((*c).semgenerateinstance.ClPrc))(c, (*arg).kindU.S4.sym, (*m).bindings, (*arg).info);
			result = newsymnode_226338(inferred, (*arg).info);
		}
		LA88: ;
		{
			if (!(r == ((NU8) 7))) goto LA98;
			(*m).convmatches += ((NI) 1);
			result = implicitconv_391849(((NU8) 58), f, result, (&(*m)), c);
		}
		goto LA96;
		LA98: ;
		{
			(*m).genericmatches += ((NI) 1);
		}
		LA96: ;
	}
	break;
	case ((NU8) 8):
	{
		(*m).genericmatches += ((NI) 1);
		{
			if (!((*arg).typ == NIM_NIL)) goto LA104;
			result = arg;
		}
		goto LA102;
		LA104: ;
		{
			Ttype224847* LOC107;
			LOC107 = 0;
			LOC107 = skiptypes_228167((*arg).typ, IL64(211106240964608));
			if (!((*LOC107).kind == ((NU8) 18))) goto LA108;
			result = implicitconv_391849(((NU8) 59), f, arg, (&(*m)), c);
		}
		goto LA102;
		LA108: ;
		{
			NIM_BOOL LOC111;
			LOC111 = 0;
			LOC111 = isemptycontainer_263978((*arg).typ);
			if (!LOC111) goto LA112;
			result = copytree_229028(arg);
			asgnRefNoCycle((void**) (&(*result).typ), getinstantiatedtype_391812(c, arg, (&(*m)), f));
		}
		goto LA102;
		LA112: ;
		{
			result = arg;
		}
		LA102: ;
	}
	break;
	case ((NU8) 5):
	{
		result = NIM_NIL;
	}
	break;
	case ((NU8) 9):
	{
		(*m).intconvmatches += ((NI) 256);
		result = implicitconv_391849(((NU8) 58), f, arg, (&(*m)), c);
	}
	break;
	case ((NU8) 10):
	{
		(*m).exactmatches += ((NI) 1);
		result = arg;
		{
			Ttype224847* LOC120;
			LOC120 = 0;
			LOC120 = skiptypes_228167(f, IL64(211106240964608));
			if (!((262144 &(IL64(1)<<(((*LOC120).kind)&IL64(63))))!=0)) goto LA121;
			result = implicitconv_391849(((NU8) 59), f, arg, (&(*m)), c);
		}
		LA121: ;
	}
	break;
	case ((NU8) 0):
	{
		{
			if (!((IL64(1154047404513689600) &(IL64(1)<<(((*a).kind)&IL64(63))))!=0)) goto LA126;
			(*m).genericmatches += ((NI) 1);
			(*m).fauxmatch = (*a).kind;
			result = arg;
			goto BeforeRet;
		}
		LA126: ;
		result = userconvmatch_391884(c, m, f, a, arg);
		{
			NIM_BOOL LOC130;
			LOC130 = 0;
			LOC130 = (result == NIM_NIL);
			if (!(LOC130)) goto LA131;
			LOC130 = ((*f).kind == ((NU8) 48));
			LA131: ;
			if (!LOC130) goto LA132;
			{
				if (!!(((*f).n == NIM_NIL))) goto LA136;
				result = localconvmatch_391990(c, m, f, a, arg);
			}
			goto LA134;
			LA136: ;
			{
				Ttype224847* LOC139;
				LOC139 = 0;
				LOC139 = base_254039(f);
				r = typerel_388064(m, LOC139, a, NIM_TRUE);
				{
					if (!(((NU8) 8) <= r)) goto LA142;
					(*m).convmatches += ((NI) 1);
					result = copytree_229028(arg);
					{
						Ttype224847* LOC148;
						if (!(r == ((NU8) 8))) goto LA146;
						LOC148 = 0;
						LOC148 = base_254039(f);
						asgnRefNoCycle((void**) (&(*result).typ), getinstantiatedtype_391812(c, arg, (&(*m)), LOC148));
					}
					LA146: ;
					(*m).basetypematch = NIM_TRUE;
				}
				goto LA140;
				LA142: ;
				{
					Ttype224847* LOC150;
					LOC150 = 0;
					LOC150 = base_254039(f);
					result = userconvmatch_391884(c, m, LOC150, a, arg);
				}
				LA140: ;
			}
			LA134: ;
		}
		LA132: ;
	}
	break;
	}
	}BeforeRet: ;
	return result;
}

N_NIMCALL(void, copycandidate_387492)(Tcandidate387209* a, Tcandidate387209* 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_229028((*b).call));
	(*a).basetypematch = (*b).basetypematch;
	copyidtable_226091((&(*a).bindings), (*b).bindings);
}

N_NIMCALL(NI, sumgeneric_387504)(Ttype224847* t_387506) {
	NI result;
	Ttype224847* t;
	NI isvar;
{	result = 0;
	t = t_387506;
	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_227426(t);
				result += ((NI) 1);
			}
			break;
			case ((NU8) 23):
			{
				t = (*t).sons->data[((NI) 0)];
				result += ((NI) 1);
				isvar += ((NI) 1);
			}
			break;
			case ((NU8) 8):
			{
				t = lastson_227426(t);
				{
					if (!((*t).kind == ((NU8) 3))) goto LA8;
					goto LA1;
				}
				LA8: ;
				result += ((NI) 1);
			}
			break;
			case ((NU8) 9):
			case ((NU8) 18):
			{
				result += ((NI) (((*t).kind == ((NU8) 9))));
				{
					NI i_387599;
					NI HEX3Atmp_387611;
					NI LOC12;
					NI res_387614;
					i_387599 = 0;
					HEX3Atmp_387611 = 0;
					LOC12 = 0;
					LOC12 = len_227369(t);
					HEX3Atmp_387611 = (LOC12 - 1);
					res_387614 = ((NI) 0);
					{
						while (1) {
							NI LOC15;
							if (!(res_387614 <= HEX3Atmp_387611)) goto LA14;
							i_387599 = res_387614;
							LOC15 = 0;
							LOC15 = sumgeneric_387504((*t).sons->data[i_387599]);
							result += LOC15;
							res_387614 += ((NI) 1);
						} LA14: ;
					}
				}
				goto LA1;
			}
			break;
			case ((NU8) 12):
			case ((NU8) 6):
			case ((NU8) 59):
			case ((NU8) 7):
			{
				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_387639)(Ttype224847* a, Ttype224847* b) {
	NI result;
	NI winner;
{	result = 0;
	winner = ((NI) 0);
	{
		NI i_387667;
		NI HEX3Atmp_387802;
		NI LOC2;
		NI LOC3;
		NI res_387805;
		i_387667 = 0;
		HEX3Atmp_387802 = 0;
		LOC2 = 0;
		LOC2 = len_227369(a);
		LOC3 = 0;
		LOC3 = len_227369(b);
		HEX3Atmp_387802 = (((LOC2 <= LOC3) ? LOC2 : LOC3) - 1);
		res_387805 = ((NI) 1);
		{
			while (1) {
				NI x;
				NI y;
				if (!(res_387805 <= HEX3Atmp_387802)) goto LA5;
				i_387667 = res_387805;
				x = sumgeneric_387504((*a).sons->data[i_387667]);
				y = sumgeneric_387504((*b).sons->data[i_387667]);
				{
					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_387805 += ((NI) 1);
			} LA5: ;
		}
	}
	result = winner;
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NI, cmpcandidates_387824)(Tcandidate387209* a, Tcandidate387209* 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_387639((*a).callee, (*b).callee);
	}BeforeRet: ;
	return result;
}

N_NIMCALL(Tnode224809*, paramtypesmatch_392733)(Tcandidate387209* m, Ttype224847* f, Ttype224847* a, Tnode224809* arg, Tnode224809* argorig) {
	Tnode224809* 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_392191(m, f, a, arg, argorig);
	}
	goto LA1;
	LA5: ;
	{
		Tcontext279023* c;
		Tcandidate387209 x;
		Tcandidate387209 y;
		Tcandidate387209 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_387278(c, (&x), (*m).callee);
		initcandidate_387278(c, (&y), (*m).callee);
		initcandidate_387278(c, (&z), (*m).callee);
		x.calleesym = (*m).calleesym;
		y.calleesym = (*m).calleesym;
		z.calleesym = (*m).calleesym;
		best = ((NI) -1);
		{
			NI i_392784;
			NI HEX3Atmp_393007;
			NI LOC9;
			NI res_393010;
			i_392784 = 0;
			HEX3Atmp_393007 = 0;
			LOC9 = 0;
			LOC9 = sonslen_227387(arg);
			HEX3Atmp_393007 = (NI)(LOC9 - ((NI) 1));
			res_393010 = ((NI) 0);
			{
				while (1) {
					if (!(res_393010 <= HEX3Atmp_393007)) goto LA11;
					i_392784 = res_393010;
					{
						NU8 r;
						if (!((126976 &(1<<(((*(*(*arg).kindU.S6.sons->data[i_392784]).kindU.S4.sym).kind)&31)))!=0)) goto LA14;
						copycandidate_387492((&z), (&(*m)));
						z.callee = (*(*arg).kindU.S6.sons->data[i_392784]).typ;
						z.calleesym = (*(*arg).kindU.S6.sons->data[i_392784]).kindU.S4.sym;
						r = typerel_388064((&z), f, (*(*arg).kindU.S6.sons->data[i_392784]).typ, NIM_TRUE);
						incmatches_392124((&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), (&NTI387209));
								best = i_392784;
							}
							break;
							case ((NU8) 1):
							{
								NI cmp;
								cmp = cmpcandidates_387824((&x), (&z));
								{
									if (!(cmp < ((NI) 0))) goto LA24;
									best = i_392784;
									genericAssign((void*)(&x), (void*)(&z), (&NTI387209));
								}
								goto LA22;
								LA24: ;
								{
									if (!(cmp == ((NI) 0))) goto LA27;
									genericAssign((void*)(&y), (void*)(&z), (&NTI387209));
								}
								goto LA22;
								LA27: ;
								LA22: ;
							}
							break;
							}
						}
						LA18: ;
					}
					LA14: ;
					res_393010 += ((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_387824((&x), (&y));
			LOC34 = (LOC36 == ((NI) 0));
			LA35: ;
			if (!LOC34) goto LA37;
			{
				if (!!((x.state == ((NU8) 1)))) goto LA41;
				internalerror_195172((*arg).info, ((NimStringDesc*) &TMP2780));
			}
			LA41: ;
			{
				if (!((*f).kind == ((NU8) 6))) goto LA45;
				result = arg;
			}
			goto LA43;
			LA45: ;
			{
				result = NIM_NIL;
			}
			LA43: ;
		}
		goto LA29;
		LA37: ;
		{
			markused_387253((*arg).info, (*(*arg).kindU.S6.sons->data[best]).kindU.S4.sym);
			result = paramtypesmatchaux_392191(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_393817)(Tcontext279023* c, Ttype224847* f, Ttype224847* a) {
	NIM_BOOL result;
	Tcandidate387209 m;
	Tnode224809* res;
	result = 0;
	memset((void*)(&m), 0, sizeof(m));
	initcandidate_387278(c, (&m), f);
	res = paramtypesmatch_392733((&m), f, a, emptynode_225807, NIM_NIL);
	result = !((res == NIM_NIL));
	return result;
}

static N_INLINE(NIM_BOOL, typefits_396542)(Tcontext279023* c, Tsym224841* s, Ttype224847* firstarg) {
	NIM_BOOL result;
{	result = 0;
	{
		NIM_BOOL LOC3;
		NIM_BOOL LOC4;
		NI LOC6;
		Tsym224841* m;
		LOC3 = 0;
		LOC4 = 0;
		LOC4 = !(((*s).typ == NIM_NIL));
		if (!(LOC4)) goto LA5;
		LOC6 = 0;
		LOC6 = sonslen_227351((*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_232243(s);
		{
			NIM_BOOL LOC12;
			Ttype224847* 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_228167((*(*s).typ).sons->data[((NI) 1)], 8390656);
			{
				if (!((*exp).kind == ((NU8) 48))) goto LA22;
				exp = elemtype_254522(exp);
			}
			LA22: ;
			{
				if (!((IL64(288230376151716032) &(IL64(1)<<(((*exp).kind)&IL64(63))))!=0)) goto LA26;
				goto BeforeRet;
			}
			LA26: ;
		}
		LA14: ;
		result = argtypematches_393817(c, (*(*s).typ).sons->data[((NI) 1)], firstarg);
	}
	LA8: ;
	}BeforeRet: ;
	return result;
}

N_NIMCALL(void, suggestoperations_396636)(Tcontext279023* c, Tnode224809* n, Ttype224847* typ, NI* outputs) {
	NIM_BOOL islocal_396802;
	islocal_396802 = NIM_TRUE;
	{
		Tscope224835* scope_396804;
		Tscope224835* HEX3Atmp_397091;
		Tscope224835* current_397094;
		scope_396804 = 0;
		HEX3Atmp_397091 = 0;
		HEX3Atmp_397091 = (*c).currentscope;
		current_397094 = HEX3Atmp_397091;
		{
			while (1) {
				Tsymseq224811* entries_396806;
				Tsymseq224811* result_396827;
				TY395048 LOC11;
				if (!!((current_397094 == NIM_NIL))) goto LA3;
				scope_396804 = current_397094;
				{
					if (!(scope_396804 == (*c).toplevelscope)) goto LA6;
					islocal_396802 = NIM_FALSE;
				}
				LA6: ;
				result_396827 = (Tsymseq224811*) newSeq((&NTI224811), 0);
				{
					Tsym224841* x_396831;
					Tstrtable224813 HEX3Atmp_397079;
					Ttabiter232119 it_397082;
					Tsym224841* s_397084;
					x_396831 = 0;
					memset((void*)(&HEX3Atmp_397079), 0, sizeof(HEX3Atmp_397079));
					HEX3Atmp_397079.counter = (*scope_396804).symbols.counter;
					HEX3Atmp_397079.data = (*scope_396804).symbols.data;
					memset((void*)(&it_397082), 0, sizeof(it_397082));
					s_397084 = inittabiter_232124((&it_397082), HEX3Atmp_397079);
					{
						while (1) {
							if (!!((s_397084 == NIM_NIL))) goto LA10;
							x_396831 = s_397084;
							result_396827 = (Tsymseq224811*) incrSeqV2(&(result_396827)->Sup, sizeof(Tsym224841*));
							asgnRefNoCycle((void**) (&result_396827->data[result_396827->Sup.len]), x_396831);
							++result_396827->Sup.len;
							s_397084 = nextiter_232132((&it_397082), HEX3Atmp_397079);
						} LA10: ;
					}
				}
				genericSeqAssign((&entries_396806), result_396827, (&NTI224811));
				memset((void*)(&LOC11), 0, sizeof(LOC11));
				LOC11.ClPrc = ((TMP2733) (HEX3Aanonymous_397030)); LOC11.ClEnv = NIM_NIL;
				sort_395041(entries_396806->data, entries_396806->Sup.len, LOC11, ((NU8) 1));
				{
					Tsym224841* item_396812;
					NI i_397088;
					NI L_397090;
					item_396812 = 0;
					i_397088 = ((NI) 0);
					L_397090 = (entries_396806 ? entries_396806->Sup.len : 0);
					{
						while (1) {
							Tsym224841* it;
							if (!(i_397088 < L_397090)) goto LA14;
							item_396812 = entries_396806->data[i_397088];
							it = item_396812;
							{
								NIM_BOOL LOC17;
								NimStringDesc* LOC21;
								Suggest394010 LOC22;
								LOC17 = 0;
								LOC17 = filtersymnoopr_394443(it);
								if (!(LOC17)) goto LA18;
								LOC17 = typefits_396542(c, it, typ);
								LA18: ;
								if (!LOC17) goto LA19;
								LOC21 = 0;
								LOC21 = HEX24_167755(((NU8) 1));
								memset((void*)(&LOC22), 0, sizeof(LOC22));
								symtosuggest_394404(it, islocal_396802, LOC21, (&LOC22));
								suggestresult_394414((&LOC22));
								(*outputs) += ((NI) 1);
							}
							LA19: ;
							i_397088 += ((NI) 1);
						} LA14: ;
					}
				}
				current_397094 = (*current_397094).parent;
			} LA3: ;
		}
	}
}

N_NIMCALL(void, suggestobject_394718)(Tcontext279023* c, Tnode224809* n, NI* outputs) {
	switch ((*n).kind) {
	case ((NU8) 138):
	{
		{
			NI i_394736;
			NI HEX3Atmp_394756;
			NI LOC3;
			NI res_394759;
			i_394736 = 0;
			HEX3Atmp_394756 = 0;
			LOC3 = 0;
			LOC3 = sonslen_227387(n);
			HEX3Atmp_394756 = (NI)(LOC3 - ((NI) 1));
			res_394759 = ((NI) 0);
			{
				while (1) {
					if (!(res_394759 <= HEX3Atmp_394756)) goto LA5;
					i_394736 = res_394759;
					suggestobject_394718(c, (*n).kindU.S6.sons->data[i_394736], outputs);
					res_394759 += ((NI) 1);
				} LA5: ;
			}
		}
	}
	break;
	case ((NU8) 139):
	{
		NI L;
		L = sonslen_227387(n);
		{
			if (!(((NI) 0) < L)) goto LA9;
			suggestobject_394718(c, (*n).kindU.S6.sons->data[((NI) 0)], outputs);
			{
				NI i_394752;
				NI HEX3Atmp_394764;
				NI res_394767;
				i_394752 = 0;
				HEX3Atmp_394764 = 0;
				HEX3Atmp_394764 = (NI)(L - ((NI) 1));
				res_394767 = ((NI) 1);
				{
					while (1) {
						Tnode224809* LOC14;
						if (!(res_394767 <= HEX3Atmp_394764)) goto LA13;
						i_394752 = res_394767;
						LOC14 = 0;
						LOC14 = lastson_227406((*n).kindU.S6.sons->data[i_394752]);
						suggestobject_394718(c, LOC14, outputs);
						res_394767 += ((NI) 1);
					} LA13: ;
				}
			}
		}
		LA9: ;
	}
	break;
	case ((NU8) 3):
	{
		suggestfield_394632(c, (*n).kindU.S4.sym, outputs);
	}
	break;
	default:
	{
	}
	break;
	}
}

N_NIMCALL(void, suggestfieldaccess_397201)(Tcontext279023* c, Tnode224809* n, NI* outputs) {
	Ttype224847* 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;
				{
					Tsym224841* it_397251;
					Tstrtable224813 HEX3Atmp_397360;
					Ttabiter232119 it_397363;
					Tsym224841* s_397365;
					it_397251 = 0;
					memset((void*)(&HEX3Atmp_397360), 0, sizeof(HEX3Atmp_397360));
					HEX3Atmp_397360.counter = (*(*c).toplevelscope).symbols.counter;
					HEX3Atmp_397360.data = (*(*c).toplevelscope).symbols.data;
					memset((void*)(&it_397363), 0, sizeof(it_397363));
					s_397365 = inittabiter_232124((&it_397363), HEX3Atmp_397360);
					{
						while (1) {
							if (!!((s_397365 == NIM_NIL))) goto LA17;
							it_397251 = s_397365;
							{
								NIM_BOOL LOC20;
								NimStringDesc* LOC23;
								Suggest394010 LOC24;
								LOC20 = 0;
								LOC20 = filtersym_394427(it_397251);
								if (!LOC20) goto LA21;
								LOC23 = 0;
								LOC23 = HEX24_167755(((NU8) 1));
								memset((void*)(&LOC24), 0, sizeof(LOC24));
								symtosuggest_394404(it_397251, NIM_FALSE, LOC23, (&LOC24));
								suggestresult_394414((&LOC24));
								(*outputs) += ((NI) 1);
							}
							LA21: ;
							s_397365 = nextiter_232132((&it_397363), HEX3Atmp_397360);
						} LA17: ;
					}
				}
			}
			goto LA11;
			LA13: ;
			{
				{
					Tsym224841* it_397263;
					Tstrtable224813 HEX3Atmp_397367;
					Ttabiter232119 it_397370;
					Tsym224841* s_397372;
					it_397263 = 0;
					memset((void*)(&HEX3Atmp_397367), 0, sizeof(HEX3Atmp_397367));
					HEX3Atmp_397367.counter = (*(*n).kindU.S4.sym).kindU.S3.tab.counter;
					HEX3Atmp_397367.data = (*(*n).kindU.S4.sym).kindU.S3.tab.data;
					memset((void*)(&it_397370), 0, sizeof(it_397370));
					s_397372 = inittabiter_232124((&it_397370), HEX3Atmp_397367);
					{
						while (1) {
							if (!!((s_397372 == NIM_NIL))) goto LA28;
							it_397263 = s_397372;
							{
								NIM_BOOL LOC31;
								NimStringDesc* LOC34;
								Suggest394010 LOC35;
								LOC31 = 0;
								LOC31 = filtersym_394427(it_397263);
								if (!LOC31) goto LA32;
								LOC34 = 0;
								LOC34 = HEX24_167755(((NU8) 1));
								memset((void*)(&LOC35), 0, sizeof(LOC35));
								symtosuggest_394404(it_397263, NIM_FALSE, LOC34, (&LOC35));
								suggestresult_394414((&LOC35));
								(*outputs) += ((NI) 1);
							}
							LA32: ;
							s_397372 = nextiter_232132((&it_397370), HEX3Atmp_397367);
						} LA28: ;
					}
				}
			}
			LA11: ;
		}
		goto LA5;
		LA9: ;
		{
			suggesteverything_397128(c, n, outputs);
		}
		LA5: ;
	}
	goto LA1;
	LA3: ;
	{
		NIM_BOOL LOC38;
		NIM_BOOL LOC39;
		Ttype224847* t;
		LOC38 = 0;
		LOC39 = 0;
		LOC39 = ((*typ).kind == ((NU8) 14));
		if (!(LOC39)) goto LA40;
		LOC39 = ((*n).kind == ((NU8) 3));
		LA40: ;
		LOC38 = LOC39;
		if (!(LOC38)) goto LA41;
		LOC38 = ((*(*n).kindU.S4.sym).kind == ((NU8) 7));
		LA41: ;
		if (!LOC38) goto LA42;
		t = typ;
		{
			while (1) {
				if (!!((t == NIM_NIL))) goto LA45;
				suggestsymlist_394667(c, (*t).n, outputs);
				t = (*t).sons->data[((NI) 0)];
			} LA45: ;
		}
		suggestoperations_396636(c, n, typ, outputs);
	}
	goto LA1;
	LA42: ;
	{
		typ = skiptypes_228167(typ, 14682112);
		{
			Ttype224847* t;
			if (!((*typ).kind == ((NU8) 17))) goto LA49;
			t = typ;
			{
				while (1) {
					suggestobject_394718(c, (*t).n, outputs);
					{
						if (!((*t).sons->data[((NI) 0)] == NIM_NIL)) goto LA55;
						goto LA51;
					}
					LA55: ;
					t = skiptypes_228167((*t).sons->data[((NI) 0)], 2048);
				}
			} LA51: ;
			suggestoperations_396636(c, n, typ, outputs);
		}
		goto LA47;
		LA49: ;
		{
			NIM_BOOL LOC58;
			LOC58 = 0;
			LOC58 = ((*typ).kind == ((NU8) 18));
			if (!(LOC58)) goto LA59;
			LOC58 = !(((*typ).n == NIM_NIL));
			LA59: ;
			if (!LOC58) goto LA60;
			suggestsymlist_394667(c, (*typ).n, outputs);
			suggestoperations_396636(c, n, typ, outputs);
		}
		goto LA47;
		LA60: ;
		{
			suggestoperations_396636(c, n, typ, outputs);
		}
		LA47: ;
	}
	LA1: ;
}

N_NIMCALL(Tnode224809*, findclosestcall_397494)(Tnode224809* n) {
	Tnode224809* 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_397413((*n).info);
		LOC3 = (LOC5 == ((NU8) 2));
		LA4: ;
		if (!LOC3) goto LA6;
		result = n;
	}
	goto LA1;
	LA6: ;
	{
		{
			NI i_397535;
			NI HEX3Atmp_397550;
			NI LOC10;
			NI res_397553;
			i_397535 = 0;
			HEX3Atmp_397550 = 0;
			LOC10 = 0;
			LOC10 = safelen_225126(n);
			HEX3Atmp_397550 = (LOC10 - 1);
			res_397553 = ((NI) 0);
			{
				while (1) {
					if (!(res_397553 <= HEX3Atmp_397550)) goto LA12;
					i_397535 = res_397553;
					result = findclosestcall_397494((*n).kindU.S6.sons->data[i_397535]);
					{
						if (!!((result == NIM_NIL))) goto LA15;
						goto BeforeRet;
					}
					LA15: ;
					res_397553 += ((NI) 1);
				} LA12: ;
			}
		}
	}
	LA1: ;
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NI, HEX3Aanonymous_395030)(Tsym224841* a_394858, Tsym224841* b_394860) {
	NI result;
{	result = 0;
	result = cmp_6577((*(*a_394858).name).s, (*(*b_394860).name).s);
	goto BeforeRet;
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NIM_BOOL, namefits_394792)(Tcontext279023* c, Tsym224841* s, Tnode224809* n) {
	NIM_BOOL result;
	Tnode224809* op;
	Tident197021* 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_387303)(Tcontext279023* ctx, Tcandidate387209* c, Tsym224841* callee, Tnode224809* binding, NI calleescope) {
	initcandidateaux_387266(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;
		{
			Tsym224841* LOC9;
			Tsym224841* owner;
			LOC9 = 0;
			LOC9 = originatingmodule_229736(callee);
			if (!(LOC9 == (*ctx).module)) goto LA10;
			(*c).calleescope = ((NI) 2);
			owner = callee;
			{
				while (1) {
					owner = skipgenericowner_229695(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_228057((&(*c).bindings));
	genericSeqAssign((&(*c).errors), NIM_NIL, (&NTI224811));
	{
		NIM_BOOL LOC22;
		Tnode224809* 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_225244((*callee).ast, ((NI) 2));
		{
			NI i_387393;
			NI HEX3Atmp_387438;
			NI LOC27;
			NI LOC28;
			NI res_387441;
			i_387393 = 0;
			HEX3Atmp_387438 = 0;
			LOC27 = 0;
			LOC27 = sonslen_227387(typeparams);
			LOC28 = 0;
			LOC28 = sonslen_227387(binding);
			HEX3Atmp_387438 = ((LOC27 <= (NI)(LOC28 - ((NI) 1))) ? LOC27 : (NI)(LOC28 - ((NI) 1)));
			res_387441 = ((NI) 1);
			{
				while (1) {
					Ttype224847* formaltypeparam;
					Ttype224847* bound;
					Tnode224809* LOC31;
					if (!(res_387441 <= HEX3Atmp_387438)) goto LA30;
					i_387393 = res_387441;
					formaltypeparam = (*(*typeparams).kindU.S6.sons->data[(NI)(i_387393 - ((NI) 1))]).typ;
					LOC31 = 0;
					LOC31 = HEX5BHEX5D_225244(binding, i_387393);
					bound = (*LOC31).typ;
					{
						NimStringDesc* LOC36;
						if (!!(!((bound == NIM_NIL)))) goto LA34;
						LOC36 = 0;
						LOC36 = HEX24_195279(TMP2786);
						internalerror_195191(LOC36);
					}
					LA34: ;
					{
						if (!((*formaltypeparam).kind == ((NU8) 8))) goto LA39;
						{
							if (!!(((*bound).kind == ((NU8) 8)))) goto LA43;
							bound = maketypedesc_279683(ctx, bound);
						}
						LA43: ;
					}
					goto LA37;
					LA39: ;
					{
						bound = skiptypes_228167(bound, 256);
					}
					LA37: ;
					put_387291((&(*c).bindings), formaltypeparam, bound);
					res_387441 += ((NI) 1);
				} LA30: ;
			}
		}
	}
	LA24: ;
}

N_NIMCALL(Ttype224847*, arrayconstr_393148)(Tcontext279023* c, Tlineinfo189352 info) {
	Ttype224847* result;
	Ttype224847* LOC1;
	Ttype224847* LOC2;
	Ttype224847* LOC3;
	result = 0;
	result = newtypes_279220(((NU8) 4), c);
	LOC1 = 0;
	LOC1 = getsystype_273190(((NU8) 31));
	LOC2 = 0;
	LOC2 = makerangetype_280193(c, IL64(0), IL64(-1), info, LOC1);
	rawaddson_228498(result, LOC2);
	LOC3 = 0;
	LOC3 = newtypes_279220(((NU8) 3), c);
	rawaddson_228498(result, LOC3);
	return result;
}

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

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

N_NIMCALL(void, preparenamedparam_393113)(Tnode224809* a) {
	{
		Tlineinfo189352 info;
		Tident197021* 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_285010((*a).kindU.S6.sons->data[((NI) 0)]);
		asgnRefNoCycle((void**) (&(*a).kindU.S6.sons->data[((NI) 0)]), newidentnode_226313(LOC5, info));
	}
	LA3: ;
}

N_NIMCALL(Tnode224809*, prepareoperand_393052)(Tcontext279023* c, Ttype224847* formal, Tnode224809* a) {
	Tnode224809* result;
	result = 0;
	{
		NIM_BOOL LOC3;
		NI LOC5;
		LOC3 = 0;
		LOC3 = ((*formal).kind == ((NU8) 6));
		if (!(LOC3)) goto LA4;
		LOC5 = 0;
		LOC5 = len_227369(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(Ttype224847*, arrayconstr_393136)(Tcontext279023* c, Tnode224809* n) {
	Ttype224847* result;
	Ttype224847* LOC1;
	Ttype224847* LOC2;
	Ttype224847* LOC3;
	result = 0;
	result = newtypes_279220(((NU8) 4), c);
	LOC1 = 0;
	LOC1 = getsystype_273190(((NU8) 31));
	LOC2 = 0;
	LOC2 = makerangetype_280193(c, IL64(0), IL64(0), (*n).info, LOC1);
	rawaddson_228498(result, LOC2);
	LOC3 = 0;
	LOC3 = skiptypes_228167((*n).typ, 8423424);
	addsonskipintlit_273731(result, LOC3);
	return result;
}

N_NIMCALL(Tnode224809*, prepareoperand_393093)(Tcontext279023* c, Tnode224809* a) {
	Tnode224809* 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, matchesaux_393231)(Tcontext279023* c, Tnode224809* n, Tnode224809* norig, Tcandidate387209* m, Intset221056* marker) {
	NI f;
	NI a;
	NI formallen;
	Tnode224809* LOC6;
	Tnode224809* container;
	Tsym224841* 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_226351((*n).kind, (*n).info));
	asgnRefNoCycle((void**) (&(*(*m).call).typ), base_254039((*m).callee));
	formallen = len_225098((*(*m).callee).n);
	LOC6 = 0;
	LOC6 = copytree_229028((*n).kindU.S6.sons->data[((NI) 0)]);
	addson_226819((*m).call, LOC6);
	container = NIM_NIL;
	{
		if (!(((NI) 1) < formallen)) goto LA9;
		formal = (*(*(*(*m).callee).n).kindU.S6.sons->data[((NI) 1)]).kindU.S4.sym;
	}
	goto LA7;
	LA9: ;
	{
		formal = NIM_NIL;
	}
	LA7: ;
	{
		while (1) {
			NI LOC14;
			LOC14 = 0;
			LOC14 = len_225098(n);
			if (!(a < LOC14)) goto LA13;
			{
				NIM_BOOL LOC17;
				NIM_BOOL LOC18;
				NIM_BOOL LOC21;
				NIM_BOOL LOC22;
				LOC17 = 0;
				LOC18 = 0;
				LOC18 = ((NI)(formallen - ((NI) 1)) <= a);
				if (!(LOC18)) goto LA19;
				LOC18 = !((formal == NIM_NIL));
				LA19: ;
				LOC17 = LOC18;
				if (!(LOC17)) goto LA20;
				LOC21 = 0;
				LOC22 = 0;
				LOC22 = ((*(*formal).typ).kind == ((NU8) 48));
				if (!(LOC22)) goto LA23;
				LOC22 = ((*(*(*formal).typ).sons->data[((NI) 0)]).kind == ((NU8) 6));
				LA23: ;
				LOC21 = LOC22;
				if (!(LOC21)) goto LA24;
				LOC21 = !((((*(*(*formal).typ).sons->data[((NI) 0)]).flags &(1<<((((NU8) 0))&31)))!=0));
				LA24: ;
				LOC17 = LOC21;
				LA20: ;
				if (!LOC17) goto LA25;
				{
					Ttype224847* LOC31;
					if (!container == 0) goto LA29;
					LOC31 = 0;
					LOC31 = arrayconstr_393148(c, (*n).info);
					container = newnodeit_226807(((NU8) 41), (*(*n).kindU.S6.sons->data[a]).info, LOC31);
					setson_393029((*m).call, (NI)((*formal).position + ((NI) 1)), container);
				}
				goto LA27;
				LA29: ;
				{
					incrindextype_393159((*container).typ);
				}
				LA27: ;
				addson_226819(container, (*n).kindU.S6.sons->data[a]);
			}
			goto LA15;
			LA25: ;
			{
				Tnode224809* arg;
				if (!((*(*n).kindU.S6.sons->data[a]).kind == ((NU8) 33))) goto LA34;
				preparenamedparam_393113((*n).kindU.S6.sons->data[a]);
				{
					if (!!(((*(*(*n).kindU.S6.sons->data[a]).kindU.S6.sons->data[((NI) 0)]).kind == ((NU8) 2)))) goto LA38;
					localerror_195128((*(*n).kindU.S6.sons->data[a]).info, ((NU16) 163), ((NimStringDesc*) &TMP2200));
					(*m).state = ((NU8) 2);
					goto BeforeRet;
				}
				LA38: ;
				formal = getsymfromlist_232228((*(*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 LA42;
					(*m).state = ((NU8) 2);
					goto BeforeRet;
				}
				LA42: ;
				{
					NIM_BOOL LOC46;
					LOC46 = 0;
					LOC46 = containsorincl_221898(marker, (*formal).position);
					if (!LOC46) goto LA47;
					localerror_195128((*(*n).kindU.S6.sons->data[a]).info, ((NU16) 147), (*(*formal).name).s);
					(*m).state = ((NU8) 2);
					goto BeforeRet;
				}
				LA47: ;
				(*m).basetypematch = NIM_FALSE;
				asgnRefNoCycle((void**) (&(*(*n).kindU.S6.sons->data[a]).kindU.S6.sons->data[((NI) 1)]), prepareoperand_393052(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_392733(m, (*formal).typ, (*(*n).kindU.S6.sons->data[a]).typ, (*(*n).kindU.S6.sons->data[a]).kindU.S6.sons->data[((NI) 1)], (*(*n).kindU.S6.sons->data[a]).kindU.S6.sons->data[((NI) 1)]);
				{
					if (!(arg == NIM_NIL)) goto LA51;
					(*m).state = ((NU8) 2);
					goto BeforeRet;
				}
				LA51: ;
				{
					if (!!((*formal).constraint == 0)) goto LA55;
					{
						NIM_BOOL LOC59;
						LOC59 = 0;
						LOC59 = matchnodekinds_305302((*formal).constraint, (*(*n).kindU.S6.sons->data[a]).kindU.S6.sons->data[((NI) 1)]);
						if (!LOC59) goto LA60;
						(*m).genericmatches += ((NI) 100);
					}
					goto LA57;
					LA60: ;
					{
						(*m).state = ((NU8) 2);
						goto BeforeRet;
					}
					LA57: ;
				}
				LA55: ;
				{
					if (!((*(*formal).typ).kind == ((NU8) 23))) goto LA65;
					{
						NIM_BOOL LOC69;
						LOC69 = 0;
						LOC69 = islvalue_305281((*(*n).kindU.S6.sons->data[a]).kindU.S6.sons->data[((NI) 1)]);
						if (!!(LOC69)) goto LA70;
						(*m).state = ((NU8) 2);
						goto BeforeRet;
					}
					LA70: ;
				}
				LA65: ;
				{
					Ttype224847* LOC76;
					if (!(*m).basetypematch) goto LA74;
					LOC76 = 0;
					LOC76 = arrayconstr_393136(c, arg);
					container = newnodeit_226807(((NU8) 41), (*(*n).kindU.S6.sons->data[a]).info, LOC76);
					addson_226819(container, arg);
					setson_393029((*m).call, (NI)((*formal).position + ((NI) 1)), container);
					{
						if (!!((f == (NI)(formallen - ((NI) 1))))) goto LA79;
						container = NIM_NIL;
					}
					LA79: ;
				}
				goto LA72;
				LA74: ;
				{
					setson_393029((*m).call, (NI)((*formal).position + ((NI) 1)), arg);
				}
				LA72: ;
				f += ((NI) 1);
			}
			goto LA15;
			LA34: ;
			{
				{
					if (!(formallen <= f)) goto LA85;
					{
						if (!(((*(*m).callee).flags &(1<<((((NU8) 0))&31)))!=0)) goto LA89;
						asgnRefNoCycle((void**) (&(*n).kindU.S6.sons->data[a]), prepareoperand_393093(c, (*n).kindU.S6.sons->data[a]));
						{
							Ttype224847* LOC93;
							Ttype224847* LOC96;
							Tnode224809* LOC97;
							Tnode224809* LOC98;
							LOC93 = 0;
							LOC93 = skiptypes_228167((*(*n).kindU.S6.sons->data[a]).typ, IL64(211106240964608));
							if (!((*LOC93).kind == ((NU8) 28))) goto LA94;
							LOC96 = 0;
							LOC96 = getsystype_273190(((NU8) 29));
							LOC97 = 0;
							LOC97 = copytree_229028((*n).kindU.S6.sons->data[a]);
							LOC98 = 0;
							LOC98 = implicitconv_391849(((NU8) 58), LOC96, LOC97, (&(*m)), c);
							addson_226819((*m).call, LOC98);
						}
						goto LA91;
						LA94: ;
						{
							Tnode224809* LOC100;
							LOC100 = 0;
							LOC100 = copytree_229028((*n).kindU.S6.sons->data[a]);
							addson_226819((*m).call, LOC100);
						}
						LA91: ;
					}
					goto LA87;
					LA89: ;
					{
						NIM_BOOL LOC102;
						Tnode224809* arg;
						LOC102 = 0;
						LOC102 = !((formal == NIM_NIL));
						if (!(LOC102)) goto LA103;
						LOC102 = ((*(*formal).typ).kind == ((NU8) 48));
						LA103: ;
						if (!LOC102) goto LA104;
						(*m).basetypematch = NIM_FALSE;
						asgnRefNoCycle((void**) (&(*n).kindU.S6.sons->data[a]), prepareoperand_393052(c, (*formal).typ, (*n).kindU.S6.sons->data[a]));
						arg = paramtypesmatch_392733(m, (*formal).typ, (*(*n).kindU.S6.sons->data[a]).typ, (*n).kindU.S6.sons->data[a], (*norig).kindU.S6.sons->data[a]);
						{
							NIM_BOOL LOC108;
							NIM_BOOL LOC109;
							LOC108 = 0;
							LOC109 = 0;
							LOC109 = !((arg == NIM_NIL));
							if (!(LOC109)) goto LA110;
							LOC109 = (*m).basetypematch;
							LA110: ;
							LOC108 = LOC109;
							if (!(LOC108)) goto LA111;
							LOC108 = !((container == NIM_NIL));
							LA111: ;
							if (!LOC108) goto LA112;
							addson_226819(container, arg);
							incrindextype_393159((*container).typ);
						}
						goto LA106;
						LA112: ;
						{
							(*m).state = ((NU8) 2);
							goto BeforeRet;
						}
						LA106: ;
					}
					goto LA87;
					LA104: ;
					{
						(*m).state = ((NU8) 2);
						goto BeforeRet;
					}
					LA87: ;
				}
				goto LA83;
				LA85: ;
				{
					Tnode224809* arg;
					{
						if (!!(((*(*(*(*m).callee).n).kindU.S6.sons->data[f]).kind == ((NU8) 3)))) goto LA119;
						internalerror_195172((*(*n).kindU.S6.sons->data[a]).info, ((NimStringDesc*) &TMP2788));
						goto BeforeRet;
					}
					LA119: ;
					formal = (*(*(*(*m).callee).n).kindU.S6.sons->data[f]).kindU.S4.sym;
					{
						NIM_BOOL LOC123;
						LOC123 = 0;
						LOC123 = containsorincl_221898(marker, (*formal).position);
						if (!(LOC123)) goto LA124;
						LOC123 = container == 0;
						LA124: ;
						if (!LOC123) goto LA125;
						localerror_195128((*(*n).kindU.S6.sons->data[a]).info, ((NU16) 147), (*(*formal).name).s);
						(*m).state = ((NU8) 2);
						goto BeforeRet;
					}
					LA125: ;
					(*m).basetypematch = NIM_FALSE;
					asgnRefNoCycle((void**) (&(*n).kindU.S6.sons->data[a]), prepareoperand_393052(c, (*formal).typ, (*n).kindU.S6.sons->data[a]));
					arg = paramtypesmatch_392733(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 LA129;
						(*m).state = ((NU8) 2);
						goto BeforeRet;
					}
					LA129: ;
					{
						Tnode224809* LOC141;
						NI LOC142;
						if (!(*m).basetypematch) goto LA133;
						{
							Ttype224847* LOC139;
							if (!container == 0) goto LA137;
							LOC139 = 0;
							LOC139 = arrayconstr_393136(c, arg);
							container = newnodeit_226807(((NU8) 41), (*(*n).kindU.S6.sons->data[a]).info, LOC139);
						}
						goto LA135;
						LA137: ;
						{
							incrindextype_393159((*container).typ);
						}
						LA135: ;
						addson_226819(container, arg);
						LOC141 = 0;
						LOC141 = implicitconv_391849(((NU8) 58), (*formal).typ, container, (&(*m)), c);
						setson_393029((*m).call, (NI)((*formal).position + ((NI) 1)), LOC141);
						LOC142 = 0;
						LOC142 = len_225098(n);
						f = ((f >= (NI)((NI)((NI)(formallen - LOC142) + a) + ((NI) 1))) ? f : (NI)((NI)((NI)(formallen - LOC142) + a) + ((NI) 1)));
					}
					goto LA131;
					LA133: ;
					{
						setson_393029((*m).call, (NI)((*formal).position + ((NI) 1)), arg);
						f += ((NI) 1);
						container = NIM_NIL;
					}
					LA131: ;
				}
				LA83: ;
				{
					if (!!((*formal).constraint == 0)) goto LA146;
					{
						NIM_BOOL LOC150;
						LOC150 = 0;
						LOC150 = matchnodekinds_305302((*formal).constraint, (*n).kindU.S6.sons->data[a]);
						if (!LOC150) goto LA151;
						(*m).genericmatches += ((NI) 100);
					}
					goto LA148;
					LA151: ;
					{
						(*m).state = ((NU8) 2);
						goto BeforeRet;
					}
					LA148: ;
				}
				LA146: ;
				{
					if (!((*(*formal).typ).kind == ((NU8) 23))) goto LA156;
					{
						NIM_BOOL LOC160;
						LOC160 = 0;
						LOC160 = islvalue_305281((*n).kindU.S6.sons->data[a]);
						if (!!(LOC160)) goto LA161;
						(*m).state = ((NU8) 2);
						goto BeforeRet;
					}
					LA161: ;
				}
				LA156: ;
			}
			LA15: ;
			a += ((NI) 1);
		} LA13: ;
	}
	}BeforeRet: ;
}

N_NIMCALL(void, partialmatch_393705)(Tcontext279023* c, Tnode224809* n, Tnode224809* norig, Tcandidate387209* m) {
	Intset221056 marker;
	memset((void*)(&marker), 0, sizeof(marker));
	chckNil((void*)(&marker));
	memset((void*)(&marker), 0, sizeof(marker));
	initintset_221927((&marker));
	matchesaux_393231(c, n, norig, m, (&marker));
}

N_NIMCALL(NIM_BOOL, argsfit_394821)(Tcontext279023* c, Tsym224841* candidate, Tnode224809* n, Tnode224809* 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):
	{
		Tcandidate387209 m;
		memset((void*)(&m), 0, sizeof(m));
		initcandidate_387303(c, (&m), candidate, NIM_NIL, ((NI) -1));
		partialmatch_393705(c, n, norig, (&m));
		result = !((m.state == ((NU8) 2)));
	}
	break;
	default:
	{
		result = NIM_FALSE;
	}
	break;
	}
	return result;
}

N_NIMCALL(void, suggestcall_394844)(Tcontext279023* c, Tnode224809* n, Tnode224809* norig, NI* outputs) {
	NIM_BOOL islocal_394852;
	islocal_394852 = NIM_TRUE;
	{
		Tscope224835* scope_394854;
		Tscope224835* HEX3Atmp_396505;
		Tscope224835* current_396508;
		scope_394854 = 0;
		HEX3Atmp_396505 = 0;
		HEX3Atmp_396505 = (*c).currentscope;
		current_396508 = HEX3Atmp_396505;
		{
			while (1) {
				Tsymseq224811* entries_394856;
				Tsymseq224811* result_394877;
				TY395048 LOC11;
				if (!!((current_396508 == NIM_NIL))) goto LA3;
				scope_394854 = current_396508;
				{
					if (!(scope_394854 == (*c).toplevelscope)) goto LA6;
					islocal_394852 = NIM_FALSE;
				}
				LA6: ;
				result_394877 = (Tsymseq224811*) newSeq((&NTI224811), 0);
				{
					Tsym224841* x_394881;
					Tstrtable224813 HEX3Atmp_396493;
					Ttabiter232119 it_396496;
					Tsym224841* s_396498;
					x_394881 = 0;
					memset((void*)(&HEX3Atmp_396493), 0, sizeof(HEX3Atmp_396493));
					HEX3Atmp_396493.counter = (*scope_394854).symbols.counter;
					HEX3Atmp_396493.data = (*scope_394854).symbols.data;
					memset((void*)(&it_396496), 0, sizeof(it_396496));
					s_396498 = inittabiter_232124((&it_396496), HEX3Atmp_396493);
					{
						while (1) {
							if (!!((s_396498 == NIM_NIL))) goto LA10;
							x_394881 = s_396498;
							result_394877 = (Tsymseq224811*) incrSeqV2(&(result_394877)->Sup, sizeof(Tsym224841*));
							asgnRefNoCycle((void**) (&result_394877->data[result_394877->Sup.len]), x_394881);
							++result_394877->Sup.len;
							s_396498 = nextiter_232132((&it_396496), HEX3Atmp_396493);
						} LA10: ;
					}
				}
				genericSeqAssign((&entries_394856), result_394877, (&NTI224811));
				memset((void*)(&LOC11), 0, sizeof(LOC11));
				LOC11.ClPrc = ((TMP2783) (HEX3Aanonymous_395030)); LOC11.ClEnv = NIM_NIL;
				sort_395041(entries_394856->data, entries_394856->Sup.len, LOC11, ((NU8) 1));
				{
					Tsym224841* item_394862;
					NI i_396502;
					NI L_396504;
					item_394862 = 0;
					i_396502 = ((NI) 0);
					L_396504 = (entries_394856 ? entries_394856->Sup.len : 0);
					{
						while (1) {
							Tsym224841* it;
							if (!(i_396502 < L_396504)) goto LA14;
							item_394862 = entries_394856->data[i_396502];
							it = item_394862;
							{
								NIM_BOOL LOC17;
								NIM_BOOL LOC18;
								NimStringDesc* LOC23;
								Suggest394010 LOC24;
								LOC17 = 0;
								LOC18 = 0;
								LOC18 = filtersym_394427(it);
								if (!(LOC18)) goto LA19;
								LOC18 = namefits_394792(c, it, n);
								LA19: ;
								LOC17 = LOC18;
								if (!(LOC17)) goto LA20;
								LOC17 = argsfit_394821(c, it, n, norig);
								LA20: ;
								if (!LOC17) goto LA21;
								LOC23 = 0;
								LOC23 = HEX24_167755(((NU8) 2));
								memset((void*)(&LOC24), 0, sizeof(LOC24));
								symtosuggest_394404(it, islocal_394852, LOC23, (&LOC24));
								suggestresult_394414((&LOC24));
								(*outputs) += ((NI) 1);
							}
							LA21: ;
							i_396502 += ((NI) 1);
						} LA14: ;
					}
				}
				current_396508 = (*current_396508).parent;
			} LA3: ;
		}
	}
}

N_NIMCALL(void, suggestexpr_397865)(Tcontext279023* c, Tnode224809* node) {
	NI outputs;
{	{
		NU8 cp;
		if (!!((((*node).flags &(1<<((((NU8) 14))&15)))!=0))) goto LA3;
		{
			if (!(gtrackpos_190901.line < ((NI16) 0))) goto LA7;
			goto BeforeRet;
		}
		LA7: ;
		cp = incheckpoint_397413((*node).info);
		{
			if (!(cp == ((NU8) 0))) goto LA11;
			goto BeforeRet;
		}
		LA11: ;
	}
	LA3: ;
	outputs = ((NI) 0);
	{
		if (!(((NI) 0) < (*c).compilescontextid)) goto LA15;
		goto BeforeRet;
	}
	LA15: ;
	(*c).compilescontextid += ((NI) 1);
	{
		Tnode224809* n;
		if (!(gidecmd_166119 == ((NU8) 1))) goto LA19;
		{
			if (!(((*node).flags &(1<<((((NU8) 14))&15)))!=0)) goto LA23;
			n = node;
		}
		goto LA21;
		LA23: ;
		{
			n = findclosestdot_397420(node);
		}
		LA21: ;
		{
			if (!(n == NIM_NIL)) goto LA28;
			n = node;
		}
		LA28: ;
		{
			Tnode224809* obj;
			if (!((*n).kind == ((NU8) 45))) goto LA32;
			obj = safesemexpr_397857(c, (*n).kindU.S6.sons->data[((NI) 0)]);
			suggestfieldaccess_397201(c, obj, (&outputs));
			{
				NimStringDesc* LOC38;
				NimStringDesc* LOC39;
				if (!((gglobaloptions_166132 &(1<<((((NU8) 29))&31)))!=0)) goto LA36;
				LOC38 = 0;
				LOC38 = rendertree_246059(obj, 0);
				LOC39 = 0;
				LOC39 = typetostring_254032((*obj).typ, ((NU8) 0));
				printf("%s%s%s%s\012", ((NimStringDesc*) &TMP2781)? (((NimStringDesc*) &TMP2781))->data:"nil", LOC38? (LOC38)->data:"nil", ((NimStringDesc*) &TMP2782)? (((NimStringDesc*) &TMP2782))->data:"nil", LOC39? (LOC39)->data:"nil");
			}
			LA36: ;
		}
		goto LA30;
		LA32: ;
		{
			suggesteverything_397128(c, n, (&outputs));
		}
		LA30: ;
	}
	goto LA17;
	LA19: ;
	{
		Tnode224809* n;
		if (!(gidecmd_166119 == ((NU8) 2))) goto LA42;
		{
			if (!(((*node).flags &(1<<((((NU8) 14))&15)))!=0)) goto LA46;
			n = node;
		}
		goto LA44;
		LA46: ;
		{
			n = findclosestcall_397494(node);
		}
		LA44: ;
		{
			if (!(n == NIM_NIL)) goto LA51;
			n = node;
		}
		LA51: ;
		{
			Tnode224809* a;
			Tnode224809* x_398000;
			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_228660(n);
			x_398000 = safesemexpr_397857(c, (*n).kindU.S6.sons->data[((NI) 0)]);
			{
				NIM_BOOL LOC59;
				LOC59 = 0;
				LOC59 = ((*x_398000).kind == ((NU8) 1));
				if (LOC59) goto LA60;
				LOC59 = ((*x_398000).typ == NIM_NIL);
				LA60: ;
				if (!LOC59) goto LA61;
				x_398000 = (*n).kindU.S6.sons->data[((NI) 0)];
			}
			LA61: ;
			addson_226819(a, x_398000);
			{
				NI i_398033;
				NI HEX3Atmp_398079;
				NI LOC64;
				NI res_398082;
				i_398033 = 0;
				HEX3Atmp_398079 = 0;
				LOC64 = 0;
				LOC64 = sonslen_227387(n);
				HEX3Atmp_398079 = (NI)(LOC64 - ((NI) 1));
				res_398082 = ((NI) 1);
				{
					while (1) {
						Tnode224809* x;
						if (!(res_398082 <= HEX3Atmp_398079)) goto LA66;
						i_398033 = res_398082;
						x = safesemexpr_397857(c, (*n).kindU.S6.sons->data[i_398033]);
						{
							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_226819(a, x);
						res_398082 += ((NI) 1);
					} LA66: ;
				}
			} LA63: ;
			suggestcall_394844(c, a, n, (&outputs));
		}
		LA55: ;
	}
	goto LA17;
	LA42: ;
	LA17: ;
	(*c).compilescontextid -= ((NI) 1);
	{
		NIM_BOOL LOC75;
		LOC75 = 0;
		LOC75 = (((NI) 0) < outputs);
		if (!(LOC75)) goto LA76;
		LOC75 = !(((48 &(1<<((gidecmd_166119)&7)))!=0));
		LA76: ;
		if (!LOC75) goto LA77;
		suggestquit_190506();
	}
	LA77: ;
	}BeforeRet: ;
}

N_NIMCALL(void, newcandidate_387480)(Tcontext279023* ctx, Ttype224847* callee, Tcandidate387209* Result) {
	initcandidate_387278(ctx, Result, callee);
}

N_NIMCALL(void, matches_393720)(Tcontext279023* c, Tnode224809* n, Tnode224809* norig, Tcandidate387209* m) {
	Intset221056 marker;
	NI f;
{	{
		NIM_BOOL LOC3;
		LOC3 = 0;
		LOC3 = !(((*m).calleesym == NIM_NIL));
		if (!(LOC3)) goto LA4;
		LOC3 = ((*(*m).calleesym).magic == ((NU8) 4) || (*(*m).calleesym).magic == ((NU8) 5));
		LA4: ;
		if (!LOC3) goto LA5;
		(*m).state = ((NU8) 1);
		unsureAsgnRef((void**) (&(*m).call), n);
		goto BeforeRet;
	}
	LA5: ;
	memset((void*)(&marker), 0, sizeof(marker));
	chckNil((void*)(&marker));
	memset((void*)(&marker), 0, sizeof(marker));
	initintset_221927((&marker));
	matchesaux_393231(c, n, norig, m, (&marker));
	{
		if (!((*m).state == ((NU8) 2))) goto LA9;
		goto BeforeRet;
	}
	LA9: ;
	f = ((NI) 1);
	{
		while (1) {
			NI LOC13;
			Tsym224841* formal;
			LOC13 = 0;
			LOC13 = sonslen_227387((*(*m).callee).n);
			if (!(f < LOC13)) goto LA12;
			formal = (*(*(*(*m).callee).n).kindU.S6.sons->data[f]).kindU.S4.sym;
			{
				NIM_BOOL LOC16;
				LOC16 = 0;
				LOC16 = containsorincl_221898((&marker), (*formal).position);
				if (!!(LOC16)) goto LA17;
				{
					if (!((*formal).ast == NIM_NIL)) goto LA21;
					{
						Tnode224809* container;
						Ttype224847* LOC27;
						Tnode224809* LOC28;
						if (!((*(*formal).typ).kind == ((NU8) 48))) goto LA25;
						LOC27 = 0;
						LOC27 = arrayconstr_393148(c, (*n).info);
						container = newnodeit_226807(((NU8) 41), (*n).info, LOC27);
						LOC28 = 0;
						LOC28 = implicitconv_391849(((NU8) 58), (*formal).typ, container, (&(*m)), c);
						addson_226819((*m).call, LOC28);
					}
					goto LA23;
					LA25: ;
					{
						(*m).state = ((NU8) 2);
						goto LA11;
					}
					LA23: ;
				}
				goto LA19;
				LA21: ;
				{
					Tnode224809* LOC31;
					LOC31 = 0;
					LOC31 = copytree_229028((*formal).ast);
					setson_393029((*m).call, (NI)((*formal).position + ((NI) 1)), LOC31);
				}
				LA19: ;
			}
			LA17: ;
			f += ((NI) 1);
		} LA12: ;
	} LA11: ;
	}BeforeRet: ;
}

N_NIMCALL(NimStringDesc*, argtypetostring_387916)(Tnode224809* arg, NU8 prefer) {
	NimStringDesc* result;
	result = 0;
	{
		Tnode224809* LOC5;
		if (!((*arg).kind == ((NU8) 56) || (*arg).kind == ((NU8) 57))) goto LA3;
		LOC5 = 0;
		LOC5 = HEX5BHEX5D_225244(arg, ((NI) 0));
		result = typetostring_254032((*LOC5).typ, prefer);
		{
			NI i_387950;
			NI HEX3Atmp_387952;
			NI LOC7;
			NI res_387955;
			i_387950 = 0;
			HEX3Atmp_387952 = 0;
			LOC7 = 0;
			LOC7 = len_225098(arg);
			HEX3Atmp_387952 = (LOC7 - 1);
			res_387955 = ((NI) 1);
			{
				while (1) {
					Tnode224809* LOC10;
					NimStringDesc* LOC11;
					if (!(res_387955 <= HEX3Atmp_387952)) goto LA9;
					i_387950 = res_387955;
					result = resizeString(result, 3);
appendString(result, ((NimStringDesc*) &TMP3133));
					LOC10 = 0;
					LOC10 = HEX5BHEX5D_225244(arg, i_387950);
					LOC11 = 0;
					LOC11 = typetostring_254032((*LOC10).typ, prefer);
					result = resizeString(result, LOC11->Sup.len + 0);
appendString(result, LOC11);
					res_387955 += ((NI) 1);
				} LA9: ;
			}
		}
	}
	goto LA1;
	LA3: ;
	{
		result = typetostring_254032((*arg).typ, prefer);
	}
	LA1: ;
	return result;
}

N_NIMCALL(NimStringDesc*, describeargs_387974)(Tcontext279023* c, Tnode224809* n, NI startidx, NU8 prefer) {
	NimStringDesc* result;
{	result = 0;
	result = copyString(((NimStringDesc*) &TMP2200));
	{
		NI i_387994;
		NI HEX3Atmp_388042;
		NI LOC2;
		NI res_388045;
		i_387994 = 0;
		HEX3Atmp_388042 = 0;
		LOC2 = 0;
		LOC2 = len_225098(n);
		HEX3Atmp_388042 = (NI)(LOC2 - ((NI) 1));
		res_388045 = startidx;
		{
			while (1) {
				Tnode224809* arg;
				NimStringDesc* LOC23;
				if (!(res_388045 <= HEX3Atmp_388042)) goto LA4;
				i_387994 = res_388045;
				arg = (*n).kindU.S6.sons->data[i_387994];
				{
					NimStringDesc* LOC9;
					if (!((*(*n).kindU.S6.sons->data[i_387994]).kind == ((NU8) 33))) goto LA7;
					LOC9 = 0;
					LOC9 = rendertree_246059((*(*n).kindU.S6.sons->data[i_387994]).kindU.S6.sons->data[((NI) 0)], 0);
					result = resizeString(result, LOC9->Sup.len + 0);
appendString(result, LOC9);
					result = resizeString(result, 2);
appendString(result, ((NimStringDesc*) &TMP3132));
					{
						if (!(*arg).typ == 0) goto LA12;
						arg = (*c).semoperand(c, (*(*n).kindU.S6.sons->data[i_387994]).kindU.S6.sons->data[((NI) 1)], 0);
						asgnRefNoCycle((void**) (&(*(*n).kindU.S6.sons->data[i_387994]).typ), (*arg).typ);
						asgnRefNoCycle((void**) (&(*(*n).kindU.S6.sons->data[i_387994]).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_387994], 0);
						asgnRefNoCycle((void**) (&(*n).kindU.S6.sons->data[i_387994]), arg);
					}
					LA17: ;
				}
				LA5: ;
				{
					if (!((*(*arg).typ).kind == ((NU8) 50))) goto LA21;
					goto BeforeRet;
				}
				LA21: ;
				LOC23 = 0;
				LOC23 = argtypetostring_387916(arg, prefer);
				result = resizeString(result, LOC23->Sup.len + 0);
appendString(result, LOC23);
				{
					NI LOC26;
					LOC26 = 0;
					LOC26 = sonslen_227387(n);
					if (!!((i_387994 == (NI)(LOC26 - ((NI) 1))))) goto LA27;
					result = resizeString(result, 2);
appendString(result, ((NimStringDesc*) &TMP3134));
				}
				LA27: ;
				res_388045 += ((NI) 1);
			} LA4: ;
		}
	}
	}BeforeRet: ;
	return result;
}

N_NIMCALL(Tnode224809*, usesym_397850)(Tsym224841* sym) {
	Tnode224809* result;
	result = 0;
	result = newsymnode_226325(sym);
	markused_387253((*result).info, sym);
	return result;
}

N_NIMCALL(void, semfinishoperands_393656)(Tcontext279023* c, Tnode224809* n) {
	{
		NI i_393679;
		NI HEX3Atmp_393683;
		NI LOC2;
		NI res_393686;
		i_393679 = 0;
		HEX3Atmp_393683 = 0;
		LOC2 = 0;
		LOC2 = len_225098(n);
		HEX3Atmp_393683 = (LOC2 - 1);
		res_393686 = ((NI) 1);
		{
			while (1) {
				if (!(res_393686 <= HEX3Atmp_393683)) goto LA4;
				i_393679 = res_393686;
				asgnRefNoCycle((void**) (&(*n).kindU.S6.sons->data[i_393679]), prepareoperand_393093(c, (*n).kindU.S6.sons->data[i_393679]));
				res_393686 += ((NI) 1);
			} LA4: ;
		}
	}
}

N_NIMCALL(NU8, cmptypes_391796)(Tcontext279023* c, Ttype224847* f, Ttype224847* a) {
	NU8 result;
	Tcandidate387209 m;
	result = 0;
	memset((void*)(&m), 0, sizeof(m));
	initcandidate_387278(c, (&m), f);
	result = typerel_388064((&m), f, a, NIM_TRUE);
	return result;
}

N_NIMCALL(void, suggeststmt_398098)(Tcontext279023* c, Tnode224809* n) {
	suggestexpr_397865(c, n);
}

N_NIMCALL(Tsym224841*, insttypeboundop_393846)(Tcontext279023* c, Tsym224841* dc, Ttype224847* t, Tlineinfo189352 info, NU8 op) {
	Tsym224841* result;
	Tcandidate387209 m;
	Ttype224847* f;
	result = 0;
	memset((void*)(&m), 0, sizeof(m));
	initcandidate_387278(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_227426(f);
		}
		LA7: ;
	}
	goto LA1;
	LA3: ;
	{
		{
			if (!((*f).kind == ((NU8) 23))) goto LA12;
			f = lastson_227426(f);
		}
		LA12: ;
	}
	LA1: ;
	{
		NU8 LOC16;
		LOC16 = 0;
		LOC16 = typerel_388064((&m), f, t, NIM_TRUE);
		if (!(LOC16 == ((NU8) 0))) goto LA17;
		localerror_195128(info, ((NU16) 4), ((NimStringDesc*) &TMP3634));
	}
	goto LA14;
	LA17: ;
	{
		result = (*c).semgenerateinstance.ClEnv? (*c).semgenerateinstance.ClPrc(c, dc, m.bindings, info, (*c).semgenerateinstance.ClEnv):((TMP3635)((*c).semgenerateinstance.ClPrc))(c, dc, m.bindings, info);
	}
	LA14: ;
	return result;
}
NIM_EXTERNC N_NOINLINE(void, compiler_sigmatchInit000)(void) {
}

NIM_EXTERNC N_NOINLINE(void, compiler_sigmatchDatInit000)(void) {
static TNimNode* TMP2727[8];
static TNimNode* TMP2776[20];
static TNimNode* TMP2777[3];
NI TMP2779;
static char* NIM_CONST TMP2778[3] = {
"csEmpty", 
"csMatch", 
"csNoMatch"};
static TNimNode TMP953[34];
NTI394010.size = sizeof(Suggest394010);
NTI394010.kind = 18;
NTI394010.base = 0;
NTI394010.flags = 2;
TMP2727[0] = &TMP953[1];
TMP953[1].kind = 1;
TMP953[1].offset = offsetof(Suggest394010, section);
TMP953[1].typ = (&NTI166029);
TMP953[1].name = "section";
TMP2727[1] = &TMP953[2];
TMP953[2].kind = 1;
TMP953[2].offset = offsetof(Suggest394010, qualifiedpath);
TMP953[2].typ = (&NTI130408);
TMP953[2].name = "qualifiedPath";
TMP2727[2] = &TMP953[3];
TMP953[3].kind = 1;
TMP953[3].offset = offsetof(Suggest394010, filepath);
TMP953[3].typ = (&NTI149);
TMP953[3].name = "filePath";
TMP2727[3] = &TMP953[4];
TMP953[4].kind = 1;
TMP953[4].offset = offsetof(Suggest394010, line);
TMP953[4].typ = (&NTI108);
TMP953[4].name = "line";
TMP2727[4] = &TMP953[5];
TMP953[5].kind = 1;
TMP953[5].offset = offsetof(Suggest394010, column);
TMP953[5].typ = (&NTI108);
TMP953[5].name = "column";
TMP2727[5] = &TMP953[6];
TMP953[6].kind = 1;
TMP953[6].offset = offsetof(Suggest394010, doc);
TMP953[6].typ = (&NTI149);
TMP953[6].name = "doc";
TMP2727[6] = &TMP953[7];
TMP953[7].kind = 1;
TMP953[7].offset = offsetof(Suggest394010, symkind);
TMP953[7].typ = (&NTI224441);
TMP953[7].name = "symkind";
TMP2727[7] = &TMP953[8];
TMP953[8].kind = 1;
TMP953[8].offset = offsetof(Suggest394010, forth);
TMP953[8].typ = (&NTI149);
TMP953[8].name = "forth";
TMP953[0].len = 8; TMP953[0].kind = 2; TMP953[0].sons = &TMP2727[0];
NTI394010.node = &TMP953[0];
NTI387209.size = sizeof(Tcandidate387209);
NTI387209.kind = 18;
NTI387209.base = 0;
TMP2776[0] = &TMP953[10];
TMP953[10].kind = 1;
TMP953[10].offset = offsetof(Tcandidate387209, c);
TMP953[10].typ = (&NTI279021);
TMP953[10].name = "c";
TMP2776[1] = &TMP953[11];
TMP953[11].kind = 1;
TMP953[11].offset = offsetof(Tcandidate387209, exactmatches);
TMP953[11].typ = (&NTI108);
TMP953[11].name = "exactMatches";
TMP2776[2] = &TMP953[12];
TMP953[12].kind = 1;
TMP953[12].offset = offsetof(Tcandidate387209, genericmatches);
TMP953[12].typ = (&NTI108);
TMP953[12].name = "genericMatches";
TMP2776[3] = &TMP953[13];
TMP953[13].kind = 1;
TMP953[13].offset = offsetof(Tcandidate387209, subtypematches);
TMP953[13].typ = (&NTI108);
TMP953[13].name = "subtypeMatches";
TMP2776[4] = &TMP953[14];
TMP953[14].kind = 1;
TMP953[14].offset = offsetof(Tcandidate387209, intconvmatches);
TMP953[14].typ = (&NTI108);
TMP953[14].name = "intConvMatches";
TMP2776[5] = &TMP953[15];
TMP953[15].kind = 1;
TMP953[15].offset = offsetof(Tcandidate387209, convmatches);
TMP953[15].typ = (&NTI108);
TMP953[15].name = "convMatches";
TMP2776[6] = &TMP953[16];
NTI387205.size = sizeof(NU8);
NTI387205.kind = 14;
NTI387205.base = 0;
NTI387205.flags = 3;
for (TMP2779 = 0; TMP2779 < 3; TMP2779++) {
TMP953[TMP2779+17].kind = 1;
TMP953[TMP2779+17].offset = TMP2779;
TMP953[TMP2779+17].name = TMP2778[TMP2779];
TMP2777[TMP2779] = &TMP953[TMP2779+17];
}
TMP953[20].len = 3; TMP953[20].kind = 2; TMP953[20].sons = &TMP2777[0];
NTI387205.node = &TMP953[20];
TMP953[16].kind = 1;
TMP953[16].offset = offsetof(Tcandidate387209, state);
TMP953[16].typ = (&NTI387205);
TMP953[16].name = "state";
TMP2776[7] = &TMP953[21];
TMP953[21].kind = 1;
TMP953[21].offset = offsetof(Tcandidate387209, callee);
TMP953[21].typ = (&NTI224805);
TMP953[21].name = "callee";
TMP2776[8] = &TMP953[22];
TMP953[22].kind = 1;
TMP953[22].offset = offsetof(Tcandidate387209, calleesym);
TMP953[22].typ = (&NTI224807);
TMP953[22].name = "calleeSym";
TMP2776[9] = &TMP953[23];
TMP953[23].kind = 1;
TMP953[23].offset = offsetof(Tcandidate387209, calleescope);
TMP953[23].typ = (&NTI108);
TMP953[23].name = "calleeScope";
TMP2776[10] = &TMP953[24];
TMP953[24].kind = 1;
TMP953[24].offset = offsetof(Tcandidate387209, call);
TMP953[24].typ = (&NTI224801);
TMP953[24].name = "call";
TMP2776[11] = &TMP953[25];
TMP953[25].kind = 1;
TMP953[25].offset = offsetof(Tcandidate387209, bindings);
TMP953[25].typ = (&NTI224859);
TMP953[25].name = "bindings";
TMP2776[12] = &TMP953[26];
TMP953[26].kind = 1;
TMP953[26].offset = offsetof(Tcandidate387209, basetypematch);
TMP953[26].typ = (&NTI138);
TMP953[26].name = "baseTypeMatch";
TMP2776[13] = &TMP953[27];
TMP953[27].kind = 1;
TMP953[27].offset = offsetof(Tcandidate387209, fauxmatch);
TMP953[27].typ = (&NTI224262);
TMP953[27].name = "fauxMatch";
TMP2776[14] = &TMP953[28];
TMP953[28].kind = 1;
TMP953[28].offset = offsetof(Tcandidate387209, genericconverter);
TMP953[28].typ = (&NTI138);
TMP953[28].name = "genericConverter";
TMP2776[15] = &TMP953[29];
TMP953[29].kind = 1;
TMP953[29].offset = offsetof(Tcandidate387209, coercedistincts);
TMP953[29].typ = (&NTI138);
TMP953[29].name = "coerceDistincts";
TMP2776[16] = &TMP953[30];
TMP953[30].kind = 1;
TMP953[30].offset = offsetof(Tcandidate387209, typedescmatched);
TMP953[30].typ = (&NTI138);
TMP953[30].name = "typedescMatched";
TMP2776[17] = &TMP953[31];
TMP953[31].kind = 1;
TMP953[31].offset = offsetof(Tcandidate387209, isnocall);
TMP953[31].typ = (&NTI138);
TMP953[31].name = "isNoCall";
TMP2776[18] = &TMP953[32];
TMP953[32].kind = 1;
TMP953[32].offset = offsetof(Tcandidate387209, inheritancepenalty);
TMP953[32].typ = (&NTI108);
TMP953[32].name = "inheritancePenalty";
TMP2776[19] = &TMP953[33];
TMP953[33].kind = 1;
TMP953[33].offset = offsetof(Tcandidate387209, errors);
TMP953[33].typ = (&NTI224811);
TMP953[33].name = "errors";
TMP953[9].len = 20; TMP953[9].kind = 2; TMP953[9].sons = &TMP2776[0];
NTI387209.node = &TMP953[9];
}

