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

#include "nimbase.h"
#include <string.h>
#include <stdio.h>
#undef linux
typedef struct Tnode_bROa11lyF5vxEN9aYNbHmhw Tnode_bROa11lyF5vxEN9aYNbHmhw;
typedef struct IdentcacheHEX3Aobjecttype_TzLHS09bRH9a0TYLs39cqcNaw IdentcacheHEX3Aobjecttype_TzLHS09bRH9a0TYLs39cqcNaw;
typedef struct Tparsers_WENTuyElSRFloaVOQEDvMg Tparsers_WENTuyElSRFloaVOQEDvMg;
typedef struct Tparser_c38t9cDVS8o9b29cOovKwkANw Tparser_c38t9cDVS8o9b29cOovKwkANw;
typedef struct Tlexer_IOWqYAjEw106AHiXcZcUGg Tlexer_IOWqYAjEw106AHiXcZcUGg;
typedef struct Tbaselexer_z9a7O76kH1tJ9aXJ3h2MdEzA Tbaselexer_z9a7O76kH1tJ9aXJ3h2MdEzA;
typedef struct TNimObject TNimObject;
typedef struct TNimType TNimType;
typedef struct TNimNode TNimNode;
typedef struct Tllstream_IHsOGFu33dIY69a9bLlFHlHw Tllstream_IHsOGFu33dIY69a9bLlFHlHw;
typedef struct Tlineinfo_T9c3PM9bs7WZ4LIQfEici9cZw Tlineinfo_T9c3PM9bs7WZ4LIQfEici9cZw;
typedef struct NimStringDesc NimStringDesc;
typedef struct TGenericSeq TGenericSeq;
typedef struct Ttoken_kLaEEPwLj8cag79cbYQIkHQ Ttoken_kLaEEPwLj8cag79cbYQIkHQ;
typedef struct Tident_4umxGerWTHGPwUms7Yqu3g Tident_4umxGerWTHGPwUms7Yqu3g;
typedef struct Ttype_LTUWCZolpovw9cWE3JBWSUw Ttype_LTUWCZolpovw9cWE3JBWSUw;
typedef struct Tsym_AXG7xcvKqaxY6koRX1xkCw Tsym_AXG7xcvKqaxY6koRX1xkCw;
typedef struct TY_ehmV9bTklH2Gt9cXHV9c0HLeQ TY_ehmV9bTklH2Gt9cXHV9c0HLeQ;
typedef struct Tidobj_raN9cHVgzmvaXisezY9aGg9cg Tidobj_raN9cHVgzmvaXisezY9aGg9cg;
typedef struct TY_zuqP4Riz26Oi5fWgPYVEgA TY_zuqP4Riz26Oi5fWgPYVEgA;
typedef struct TY_iGkpo9aKQdr3NWelKC4cnJA TY_iGkpo9aKQdr3NWelKC4cnJA;
typedef struct Tloc_EtHNvCB0bgfu9bFjzx9cb6aA Tloc_EtHNvCB0bgfu9bFjzx9cb6aA;
typedef struct Ropeobj_HF4qJnb6xiOddgPmsxodtQ Ropeobj_HF4qJnb6xiOddgPmsxodtQ;
typedef struct TY_DXS6mEo7PVUFJkirsQ9bNQA TY_DXS6mEo7PVUFJkirsQ9bNQA;
typedef struct Tstrtable_f07aOS3dr28kGa5wcE29aFA Tstrtable_f07aOS3dr28kGa5wcE29aFA;
typedef struct TY_sksVpmPRIkNR9axiwtD1Guw TY_sksVpmPRIkNR9axiwtD1Guw;
typedef struct Tlib_4f9aBgmqEuj7uWJdBBGcRgA Tlib_4f9aBgmqEuj7uWJdBBGcRgA;
typedef struct TY_a09bGTAl9ceOKTAytYdkbyKg TY_a09bGTAl9ceOKTAytYdkbyKg;
typedef struct Tinstantiation_5LqgVn6Tq9ainQRK7TQAQxA Tinstantiation_5LqgVn6Tq9ainQRK7TQAQxA;
typedef struct Tlistentry_U4JkVlrJQaACKZ9a9cwCla3Q Tlistentry_U4JkVlrJQaACKZ9a9cwCla3Q;
typedef NU8 Tparserkind_wHYLpKaSFkZsAwL9crNQqGw;
typedef NU8 Tnimkind_jIBKr1ejBgsfM33Kxw4j7A;
typedef NU8 Tnimtypeflag_v8QUszD1sWlSIWZz7mC4bQ_Set;
typedef N_NIMCALL_PTR(void, TY_ojoeKfW4VYIm36I9cpDTQIg) (void* p0, NI op0);
typedef N_NIMCALL_PTR(void*, TY_WSm2xU5ARYv9aAR4l0z9c9auQ) (void* p0);
struct  TNimType  {
NI size;
Tnimkind_jIBKr1ejBgsfM33Kxw4j7A kind;
Tnimtypeflag_v8QUszD1sWlSIWZz7mC4bQ_Set flags;
TNimType* base;
TNimNode* node;
void* finalizer;
TY_ojoeKfW4VYIm36I9cpDTQIg marker;
TY_WSm2xU5ARYv9aAR4l0z9c9auQ deepcopy;
};
struct  TNimObject  {
TNimType* m_type;
};
struct  Tbaselexer_z9a7O76kH1tJ9aXJ3h2MdEzA  {
  TNimObject Sup;
NI bufpos;
NCSTRING buf;
NI buflen;
Tllstream_IHsOGFu33dIY69a9bLlFHlHw* stream;
NI linenumber;
NI sentinel;
NI linestart;
};
typedef NU16 Tmsgkind_IGAWgv9aR2KqPKJfPZPEWaw;
struct  TGenericSeq  {
NI len;
NI reserved;
};
struct  NimStringDesc  {
  TGenericSeq Sup;
NIM_CHAR data[SEQ_DECL_SIZE];
};
typedef struct {
N_NIMCALL_PTR(void, ClPrc) (Tlineinfo_T9c3PM9bs7WZ4LIQfEici9cZw info0, Tmsgkind_IGAWgv9aR2KqPKJfPZPEWaw msg0, NimStringDesc* arg0, void* ClEnv);
void* ClEnv;
} TY_l9buWVPY1qenw5uCj2k2Uqg;
struct  Tlexer_IOWqYAjEw106AHiXcZcUGg  {
  Tbaselexer_z9a7O76kH1tJ9aXJ3h2MdEzA Sup;
NI32 fileidx;
NI indentahead;
NI currlineindent;
NIM_BOOL strongspaces;
NIM_BOOL allowtabs;
TY_l9buWVPY1qenw5uCj2k2Uqg errorhandler;
IdentcacheHEX3Aobjecttype_TzLHS09bRH9a0TYLs39cqcNaw* cache;
};
typedef NU8 Ttoktype_vw8YkgaVtNadqP8v5OpXKA;
typedef NU8 Tnumericalbase_9cbxR9czWgoXwHHSzHtd9aV7Q;
struct  Ttoken_kLaEEPwLj8cag79cbYQIkHQ  {
Ttoktype_vw8YkgaVtNadqP8v5OpXKA toktype;
NI indent;
Tident_4umxGerWTHGPwUms7Yqu3g* ident;
NI64 inumber;
NF fnumber;
Tnumericalbase_9cbxR9czWgoXwHHSzHtd9aV7Q base;
NI8 strongspacea;
NI8 strongspaceb;
NimStringDesc* literal;
NI line;
NI col;
};
struct  Tparser_c38t9cDVS8o9b29cOovKwkANw  {
NI currind;
NIM_BOOL firsttok;
NIM_BOOL strongspaces;
Tlexer_IOWqYAjEw106AHiXcZcUGg lex;
Ttoken_kLaEEPwLj8cag79cbYQIkHQ tok;
NI inpragma;
NI insemistmtlist;
};
struct  Tparsers_WENTuyElSRFloaVOQEDvMg  {
Tparserkind_wHYLpKaSFkZsAwL9crNQqGw skin;
Tparser_c38t9cDVS8o9b29cOovKwkANw parser;
};
typedef NU8 Tnimnodekind_unfNsxrcATrufDZmpBq4HQ;
struct  TNimNode  {
Tnimnodekind_unfNsxrcATrufDZmpBq4HQ kind;
NI offset;
TNimType* typ;
NCSTRING name;
NI len;
TNimNode** sons;
};
typedef NU8 Filemode_fVUBHvW79bXUw1j55Oo9avSQ;
struct  Tlineinfo_T9c3PM9bs7WZ4LIQfEici9cZw  {
NI16 line;
NI16 col;
NI32 fileindex;
};
typedef NU16 Tnodeflag_jyh9acXHkhZANSSvPIY7ZLg_Set;
typedef NU8 Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw;
struct  Tnode_bROa11lyF5vxEN9aYNbHmhw  {
Ttype_LTUWCZolpovw9cWE3JBWSUw* typ;
Tlineinfo_T9c3PM9bs7WZ4LIQfEici9cZw info;
Tnodeflag_jyh9acXHkhZANSSvPIY7ZLg_Set flags;
Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw kind;
union{
struct {NI64 intval;
} S1;
struct {NF floatval;
} S2;
struct {NimStringDesc* strval;
} S3;
struct {Tsym_AXG7xcvKqaxY6koRX1xkCw* sym;
} S4;
struct {Tident_4umxGerWTHGPwUms7Yqu3g* ident;
} S5;
struct {TY_ehmV9bTklH2Gt9cXHV9c0HLeQ* sons;
} S6;
} kindU;
NimStringDesc* comment;
};
struct  Tidobj_raN9cHVgzmvaXisezY9aGg9cg  {
  TNimObject Sup;
NI id;
};
struct  Tident_4umxGerWTHGPwUms7Yqu3g  {
  Tidobj_raN9cHVgzmvaXisezY9aGg9cg Sup;
NimStringDesc* s;
Tident_4umxGerWTHGPwUms7Yqu3g* next;
NI h;
};
typedef NU8 Trenderflag_wrPgUo1ExBlHvFnXN2nSHw_Set;
typedef NU8 Tfilterkind_mET0MuvrWCLPKR0e9cWMjNg;
typedef NimStringDesc* TY_cM0k9buRoahrhdhCHJaeg8w[4];
typedef NimStringDesc* TY_8GOl8NvXQYALGK9b1NT1qPQ[4];
typedef NU64 Tmsgkind_nDM9aiGzuSlpuw3CrqwaebA_Set;
typedef NU16 Tmsgkind_nDM9aiGzuSlpuw3CrqwaebA;
typedef NimStringDesc* TY_8ZvwQIddfpj2THRVPsFzIQ[1];
typedef NU8 Msgflag_BzRTaQ6LrPDZKEKt9bswkOQ_Set;
typedef NU8 Tllstreamkind_jVcKY16LbOamXE9bxXUD6pQ;
struct  Tllstream_IHsOGFu33dIY69a9bLlFHlHw  {
  TNimObject Sup;
Tllstreamkind_jVcKY16LbOamXE9bxXUD6pQ kind;
FILE* f;
NimStringDesc* s;
NI rd;
NI wr;
NI lineoffset;
};
typedef Tident_4umxGerWTHGPwUms7Yqu3g* TY_CBfZt49asUfAsBVM7a3Rc9cw[8192];
struct  IdentcacheHEX3Aobjecttype_TzLHS09bRH9a0TYLs39cqcNaw  {
TY_CBfZt49asUfAsBVM7a3Rc9cw buckets;
NI wordcounter;
Tident_4umxGerWTHGPwUms7Yqu3g* idanon;
Tident_4umxGerWTHGPwUms7Yqu3g* iddelegator;
Tident_4umxGerWTHGPwUms7Yqu3g* emptyident;
};
typedef NU8 Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag;
typedef NU8 Tcallingconvention_yjAJ8w0h1PBaSwSGJ3P7IA;
typedef NU32 Ttypeflag_x2m5g1NpbmDig4wLT3Ylhw_Set;
typedef NU8 Tlockind_O7PRFZKuiBBWbku09cayVBg;
typedef NU8 Tstorageloc_JK9cKMX3XnqHaUky9b6gkGEw;
typedef NU16 Tlocflag_o2bqJgR4ceIupnUSpxiudA_Set;
struct  Tloc_EtHNvCB0bgfu9bFjzx9cb6aA  {
Tlockind_O7PRFZKuiBBWbku09cayVBg k;
Tstorageloc_JK9cKMX3XnqHaUky9b6gkGEw s;
Tlocflag_o2bqJgR4ceIupnUSpxiudA_Set flags;
Ttype_LTUWCZolpovw9cWE3JBWSUw* t;
Ropeobj_HF4qJnb6xiOddgPmsxodtQ* r;
};
struct  Ttype_LTUWCZolpovw9cWE3JBWSUw  {
  Tidobj_raN9cHVgzmvaXisezY9aGg9cg Sup;
Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag kind;
Tcallingconvention_yjAJ8w0h1PBaSwSGJ3P7IA callconv;
Ttypeflag_x2m5g1NpbmDig4wLT3Ylhw_Set flags;
TY_zuqP4Riz26Oi5fWgPYVEgA* sons;
Tnode_bROa11lyF5vxEN9aYNbHmhw* n;
Tsym_AXG7xcvKqaxY6koRX1xkCw* owner;
Tsym_AXG7xcvKqaxY6koRX1xkCw* sym;
Tsym_AXG7xcvKqaxY6koRX1xkCw* destructor;
Tsym_AXG7xcvKqaxY6koRX1xkCw* deepcopy;
Tsym_AXG7xcvKqaxY6koRX1xkCw* assignment;
TY_iGkpo9aKQdr3NWelKC4cnJA* methods;
NI64 size;
NI16 align;
NI16 locklevel;
Tloc_EtHNvCB0bgfu9bFjzx9cb6aA loc;
Ttype_LTUWCZolpovw9cWE3JBWSUw* typeinst;
};
typedef NU8 Tsymkind_cNCW9acsSznmEccl1fgQwkw;
struct  Tstrtable_f07aOS3dr28kGa5wcE29aFA  {
NI counter;
TY_sksVpmPRIkNR9axiwtD1Guw* data;
};
typedef NU16 Tmagic_shZhZOdbVC5nnFvcXQAImg;
typedef NU32 Tsymflag_K9ay6LWMat9bUiT9bIbMxpDHw_Set;
typedef NU32 Toption_WspMeQySXNP2XoTWR5MTgg_Set;
struct  Tsym_AXG7xcvKqaxY6koRX1xkCw  {
  Tidobj_raN9cHVgzmvaXisezY9aGg9cg Sup;
Tsymkind_cNCW9acsSznmEccl1fgQwkw kind;
union{
struct {TY_zuqP4Riz26Oi5fWgPYVEgA* typeinstcache;
} S1;
struct {TY_DXS6mEo7PVUFJkirsQ9bNQA* procinstcache;
Tsym_AXG7xcvKqaxY6koRX1xkCw* gcunsafetyreason;
} S2;
struct {TY_DXS6mEo7PVUFJkirsQ9bNQA* usedgenerics;
Tstrtable_f07aOS3dr28kGa5wcE29aFA tab;
} S3;
struct {Tsym_AXG7xcvKqaxY6koRX1xkCw* guard;
NI bitsize;
} S4;
} kindU;
Tmagic_shZhZOdbVC5nnFvcXQAImg magic;
Ttype_LTUWCZolpovw9cWE3JBWSUw* typ;
Tident_4umxGerWTHGPwUms7Yqu3g* name;
Tlineinfo_T9c3PM9bs7WZ4LIQfEici9cZw info;
Tsym_AXG7xcvKqaxY6koRX1xkCw* owner;
Tsymflag_K9ay6LWMat9bUiT9bIbMxpDHw_Set flags;
Tnode_bROa11lyF5vxEN9aYNbHmhw* ast;
Toption_WspMeQySXNP2XoTWR5MTgg_Set options;
NI position;
NI offset;
Tloc_EtHNvCB0bgfu9bFjzx9cb6aA loc;
Tlib_4f9aBgmqEuj7uWJdBBGcRgA* annex;
Tnode_bROa11lyF5vxEN9aYNbHmhw* constraint;
};
struct TY_a09bGTAl9ceOKTAytYdkbyKg {
NI Field0;
Tsym_AXG7xcvKqaxY6koRX1xkCw* Field1;
};
struct  Ropeobj_HF4qJnb6xiOddgPmsxodtQ  {
  TNimObject Sup;
Ropeobj_HF4qJnb6xiOddgPmsxodtQ* left;
Ropeobj_HF4qJnb6xiOddgPmsxodtQ* right;
NI length;
NimStringDesc* data;
};
struct  Tlistentry_U4JkVlrJQaACKZ9a9cwCla3Q  {
  TNimObject Sup;
Tlistentry_U4JkVlrJQaACKZ9a9cwCla3Q* prev;
Tlistentry_U4JkVlrJQaACKZ9a9cwCla3Q* next;
};
typedef NU8 Tlibkind_9b8v60kso59bBaw9cp8B9a9apKQ;
struct  Tlib_4f9aBgmqEuj7uWJdBBGcRgA  {
  Tlistentry_U4JkVlrJQaACKZ9a9cwCla3Q Sup;
Tlibkind_9b8v60kso59bBaw9cp8B9a9apKQ kind;
NIM_BOOL generated;
NIM_BOOL isoverriden;
Ropeobj_HF4qJnb6xiOddgPmsxodtQ* name;
Tnode_bROa11lyF5vxEN9aYNbHmhw* path;
};
struct  Tinstantiation_5LqgVn6Tq9ainQRK7TQAQxA  {
Tsym_AXG7xcvKqaxY6koRX1xkCw* sym;
TY_zuqP4Riz26Oi5fWgPYVEgA* concretetypes;
NI compilesid;
};
struct TY_ehmV9bTklH2Gt9cXHV9c0HLeQ {
  TGenericSeq Sup;
  Tnode_bROa11lyF5vxEN9aYNbHmhw* data[SEQ_DECL_SIZE];
};
struct TY_zuqP4Riz26Oi5fWgPYVEgA {
  TGenericSeq Sup;
  Ttype_LTUWCZolpovw9cWE3JBWSUw* data[SEQ_DECL_SIZE];
};
struct TY_iGkpo9aKQdr3NWelKC4cnJA {
  TGenericSeq Sup;
  TY_a09bGTAl9ceOKTAytYdkbyKg data[SEQ_DECL_SIZE];
};
struct TY_DXS6mEo7PVUFJkirsQ9bNQA {
  TGenericSeq Sup;
  Tinstantiation_5LqgVn6Tq9ainQRK7TQAQxA* data[SEQ_DECL_SIZE];
};
struct TY_sksVpmPRIkNR9axiwtD1Guw {
  TGenericSeq Sup;
  Tsym_AXG7xcvKqaxY6koRX1xkCw* data[SEQ_DECL_SIZE];
};
N_NIMCALL(void, objectInit)(void* dest0, TNimType* typ0);
N_NIMCALL(NimStringDesc*, tofullpathconsiderdirty_7s19cb7WBgztz9aqEBzwwuqA_2)(NI32 fileidx0);
N_NIMCALL(NIM_BOOL, open_sEp0GH2306oGo9bqBpj5oTQ)(FILE** f0, NimStringDesc* filename0, Filemode_fVUBHvW79bXUw1j55Oo9avSQ mode0, NI bufsize0);
N_NIMCALL(void, rawmessage_tBJ8mvo7MzzirsGkrHVc9cw)(Tmsgkind_IGAWgv9aR2KqPKJfPZPEWaw msg0, NimStringDesc* arg0);
N_NIMCALL(void, openparsers_zDBDS8Km3Tchi1ohPVieKQ)(Tparsers_WENTuyElSRFloaVOQEDvMg* p0, NI32 fileidx0, Tllstream_IHsOGFu33dIY69a9bLlFHlHw* inputstream0, IdentcacheHEX3Aobjecttype_TzLHS09bRH9a0TYLs39cqcNaw* cache0);
N_NIMCALL(Tnode_bROa11lyF5vxEN9aYNbHmhw*, parsepipe_bJSds72kKu77CwGx8lNYmA)(NimStringDesc* filename0, Tllstream_IHsOGFu33dIY69a9bLlFHlHw* inputstream0, IdentcacheHEX3Aobjecttype_TzLHS09bRH9a0TYLs39cqcNaw* cache0);
N_NIMCALL(Tllstream_IHsOGFu33dIY69a9bLlFHlHw*, llstreamopen_TMcHzC3C639c0ccC0wtKA2w)(NimStringDesc* filename0, Filemode_fVUBHvW79bXUw1j55Oo9avSQ mode0);
N_NIMCALL(NimStringDesc*, rawNewString)(NI space0);
N_NIMCALL(NimStringDesc*, rawNewString)(NI cap0);
N_NIMCALL(NIM_BOOL, llstreamreadline_Qwm1ilRhcaI3znjOGn4xBg)(Tllstream_IHsOGFu33dIY69a9bLlFHlHw* s0, NimStringDesc** line0);
N_NIMCALL(NI, utf8bom_h8LrhHxyp3nGeHzqCSFf9bg)(NimStringDesc* s0);
N_NIMCALL(NIM_BOOL, containsshebang_KmLpTlp0iQ7qLu2YAgAZhw)(NimStringDesc* s0, NI i0);
N_NIMCALL(void, openparser_xOo5exBZF46oOyrExM9a3yQ)(Tparser_c38t9cDVS8o9b29cOovKwkANw* p0, NimStringDesc* filename0, Tllstream_IHsOGFu33dIY69a9bLlFHlHw* inputstream0, IdentcacheHEX3Aobjecttype_TzLHS09bRH9a0TYLs39cqcNaw* cache0, NIM_BOOL strongspaces0);
N_NIMCALL(Tllstream_IHsOGFu33dIY69a9bLlFHlHw*, llstreamopen_HQSZA6kzdilYF0Pf022dhA)(NimStringDesc* data0);
N_NIMCALL(NimStringDesc*, copyStr)(NimStringDesc* s0, NI start0);
N_NIMCALL(NimStringDesc*, copyStr)(NimStringDesc* s0, NI first0);
N_NIMCALL(Tnode_bROa11lyF5vxEN9aYNbHmhw*, parseall_x3UAdSvBfIIO33m4gWdOPg)(Tparser_c38t9cDVS8o9b29cOovKwkANw* p0);
N_NIMCALL(void, closeparser_Bv6bIlAg2H4GfVH07sPwUw)(Tparser_c38t9cDVS8o9b29cOovKwkANw* p0);
N_NIMCALL(void, llstreamclose_TQe1mwqs39ccgay5ywsr9azw)(Tllstream_IHsOGFu33dIY69a9bLlFHlHw* s0);
N_NIMCALL(Tllstream_IHsOGFu33dIY69a9bLlFHlHw*, evalpipe_nVUUGAijyBdiAxOhXa9atMg)(Tparsers_WENTuyElSRFloaVOQEDvMg* p0, Tnode_bROa11lyF5vxEN9aYNbHmhw* n0, NimStringDesc* filename0, Tllstream_IHsOGFu33dIY69a9bLlFHlHw* start0);
static N_INLINE(Tnode_bROa11lyF5vxEN9aYNbHmhw*, HEX5BHEX5D_4mGh5VHoHoaSkXDYdG6pyAitersgen)(Tnode_bROa11lyF5vxEN9aYNbHmhw* n0, NI i0);
static N_INLINE(NIM_BOOL, eqStrings)(NimStringDesc* a0, NimStringDesc* b0);
static N_INLINE(NIM_BOOL, equalmem_DCrUjdaMvFDHaR1hs7sQGwropes)(void* a0, void* b0, NI size0);
N_NIMCALL(Tllstream_IHsOGFu33dIY69a9bLlFHlHw*, applyfilter_9cHsu5TuPlpg9bEC9cADFtBCA)(Tparsers_WENTuyElSRFloaVOQEDvMg* p0, Tnode_bROa11lyF5vxEN9aYNbHmhw* n0, NimStringDesc* filename0, Tllstream_IHsOGFu33dIY69a9bLlFHlHw* stdin_yANaOXWbyFefvP9cPD0BmoQ);
N_NIMCALL(Tident_4umxGerWTHGPwUms7Yqu3g*, getcallee_8v8U4rPUh2LEtUf9cZrto9bQ)(Tnode_bROa11lyF5vxEN9aYNbHmhw* n0);
N_NIMCALL(NimStringDesc*, rendertree_ppjdh9aQ5L0SGPF8yz1gZ9cA)(Tnode_bROa11lyF5vxEN9aYNbHmhw* n0, Trenderflag_wrPgUo1ExBlHvFnXN2nSHw_Set renderflags0);
N_NIMCALL(Tfilterkind_mET0MuvrWCLPKR0e9cWMjNg, getfilter_VI3Fiobf4N9aSXR2Q8kXG0A)(Tident_4umxGerWTHGPwUms7Yqu3g* ident0);
N_NIMCALL(NI, nsuCmpIgnoreStyle)(NimStringDesc* a0, NimStringDesc* b0);
N_NIMCALL(Tparserkind_wHYLpKaSFkZsAwL9crNQqGw, getparser_hTsVGKyR7WIUC8NJAMIjvQ)(Tident_4umxGerWTHGPwUms7Yqu3g* ident0);
N_NIMCALL(Tllstream_IHsOGFu33dIY69a9bLlFHlHw*, filtertmpl_JvVu6X7Xrt789cwD0XA6mWg)(Tllstream_IHsOGFu33dIY69a9bLlFHlHw* stdin_lNRzrtPh4f1mAlmk9clb9bcg, NimStringDesc* filename0, Tnode_bROa11lyF5vxEN9aYNbHmhw* call0);
N_NIMCALL(Tllstream_IHsOGFu33dIY69a9bLlFHlHw*, filterstrip_8vZ6X8KZZNI4xsTx2A9bPBw)(Tllstream_IHsOGFu33dIY69a9bLlFHlHw* stdin_kOIrmbkfx9bA9aensSDHNIyg, NimStringDesc* filename0, Tnode_bROa11lyF5vxEN9aYNbHmhw* call0);
N_NIMCALL(Tllstream_IHsOGFu33dIY69a9bLlFHlHw*, filterreplace_8vZ6X8KZZNI4xsTx2A9bPBw_2)(Tllstream_IHsOGFu33dIY69a9bLlFHlHw* stdin_AuKs8fAd5orVmJJhh2if5w, NimStringDesc* filename0, Tnode_bROa11lyF5vxEN9aYNbHmhw* call0);
N_NIMCALL(void, rawmessage_wSQLHRsYvHJ4DSWgdFrFaA)(Tmsgkind_IGAWgv9aR2KqPKJfPZPEWaw msg0, NimStringDesc** args0, NI args0Len0);
N_NIMCALL(void, msgwriteln_mpdiFCyqIWmTQYjT6Mj9c6A)(NimStringDesc* s0, Msgflag_BzRTaQ6LrPDZKEKt9bswkOQ_Set flags0);
N_NIMCALL(void, openparser_AytEkdefQ9bdVwGj33lUaUw)(Tparser_c38t9cDVS8o9b29cOovKwkANw* p0, NI32 fileidx0, Tllstream_IHsOGFu33dIY69a9bLlFHlHw* inputstream0, IdentcacheHEX3Aobjecttype_TzLHS09bRH9a0TYLs39cqcNaw* cache0, NIM_BOOL strongspaces0);
N_NIMCALL(Tllstream_IHsOGFu33dIY69a9bLlFHlHw*, llstreamopen_8hTxoBHhwtwZR9cM9bBLMsCQ)(FILE* f0);
N_NIMCALL(Tnode_bROa11lyF5vxEN9aYNbHmhw*, parseall_N9cl8bNz6TaGrhhLXmkyhrw)(Tparsers_WENTuyElSRFloaVOQEDvMg* p0);
N_NIMCALL(Tnode_bROa11lyF5vxEN9aYNbHmhw*, parseall_e6i72kHohchMxvc8wSe9a8Q)(Tparser_c38t9cDVS8o9b29cOovKwkANw* p0);
N_NIMCALL(void, internalerror_5XY9cUy7hZmUusM38U9cYYdw)(NimStringDesc* errmsg0);
N_NIMCALL(void, closeparsers_aZMERNSTUyTfW9aaFR9bAn9aQ)(Tparsers_WENTuyElSRFloaVOQEDvMg* p0);
N_NIMCALL(Tnode_bROa11lyF5vxEN9aYNbHmhw*, parsetoplevelstmt_x3UAdSvBfIIO33m4gWdOPg_40)(Tparser_c38t9cDVS8o9b29cOovKwkANw* p0);
N_NIMCALL(Tnode_bROa11lyF5vxEN9aYNbHmhw*, parsetoplevelstmt_e6i72kHohchMxvc8wSe9a8Q_42)(Tparser_c38t9cDVS8o9b29cOovKwkANw* p0);
TNimType NTI_WENTuyElSRFloaVOQEDvMg;
TNimType NTI_wHYLpKaSFkZsAwL9crNQqGw;
extern TNimType NTI_c38t9cDVS8o9b29cOovKwkANw;
extern Tnode_bROa11lyF5vxEN9aYNbHmhw* emptynode_69ccLGuQ2mITw7zylZYtWcA;
extern Tmsgkind_nDM9aiGzuSlpuw3CrqwaebA_Set gnotes_ra0BBMaJz6cOxn1JA3c6Bg;
STRING_LITERAL(T_Furs9bKK6tVLoyofH3f4bRw_6, "|", 1);
STRING_LITERAL(T_Furs9bKK6tVLoyofH3f4bRw_7, "none", 4);
STRING_LITERAL(T_Furs9bKK6tVLoyofH3f4bRw_8, "stdtmpl", 7);
STRING_LITERAL(T_Furs9bKK6tVLoyofH3f4bRw_9, "replace", 7);
STRING_LITERAL(T_Furs9bKK6tVLoyofH3f4bRw_10, "strip", 5);
NIM_CONST TY_cM0k9buRoahrhdhCHJaeg8w filternames_AxTRz7iBqkPgPfZx8TM0IQ = {((NimStringDesc*) &T_Furs9bKK6tVLoyofH3f4bRw_7),
((NimStringDesc*) &T_Furs9bKK6tVLoyofH3f4bRw_8),
((NimStringDesc*) &T_Furs9bKK6tVLoyofH3f4bRw_9),
((NimStringDesc*) &T_Furs9bKK6tVLoyofH3f4bRw_10)}
;
STRING_LITERAL(T_Furs9bKK6tVLoyofH3f4bRw_11, "standard", 8);
STRING_LITERAL(T_Furs9bKK6tVLoyofH3f4bRw_12, "strongspaces", 12);
STRING_LITERAL(T_Furs9bKK6tVLoyofH3f4bRw_13, "braces", 6);
STRING_LITERAL(T_Furs9bKK6tVLoyofH3f4bRw_14, "endx", 4);
NIM_CONST TY_8GOl8NvXQYALGK9b1NT1qPQ parsernames_IVRWib6Nt9c9cDYSS669cL5mA = {((NimStringDesc*) &T_Furs9bKK6tVLoyofH3f4bRw_11),
((NimStringDesc*) &T_Furs9bKK6tVLoyofH3f4bRw_12),
((NimStringDesc*) &T_Furs9bKK6tVLoyofH3f4bRw_13),
((NimStringDesc*) &T_Furs9bKK6tVLoyofH3f4bRw_14)}
;
STRING_LITERAL(T_Furs9bKK6tVLoyofH3f4bRw_15, "parser to implement", 19);

N_NIMCALL(NI, utf8bom_h8LrhHxyp3nGeHzqCSFf9bg)(NimStringDesc* s0) {
	NI result0;
	result0 = (NI)0;
	{
		NIM_BOOL LOC3;
		NIM_BOOL LOC4;
		LOC3 = (NIM_BOOL)0;
		LOC4 = (NIM_BOOL)0;
		LOC4 = ((NU8)(s0->data[((NI) 0)]) == (NU8)(239));
		if (!(LOC4)) goto LA5;
		LOC4 = ((NU8)(s0->data[((NI) 1)]) == (NU8)(187));
		LA5: ;
		LOC3 = LOC4;
		if (!(LOC3)) goto LA6;
		LOC3 = ((NU8)(s0->data[((NI) 2)]) == (NU8)(191));
		LA6: ;
		if (!LOC3) goto LA7;
		result0 = ((NI) 3);
	}
	goto LA1;
	LA7: ;
	{
		result0 = ((NI) 0);
	}
	LA1: ;
	return result0;
}

N_NIMCALL(NIM_BOOL, containsshebang_KmLpTlp0iQ7qLu2YAgAZhw)(NimStringDesc* s0, NI i0) {
	NIM_BOOL result0;
	result0 = (NIM_BOOL)0;
	{
		NIM_BOOL LOC3;
		NI j0;
		LOC3 = (NIM_BOOL)0;
		LOC3 = ((NU8)(s0->data[i0]) == (NU8)(35));
		if (!(LOC3)) goto LA4;
		LOC3 = ((NU8)(s0->data[(NI)(i0 + ((NI) 1))]) == (NU8)(33));
		LA4: ;
		if (!LOC3) goto LA5;
		j0 = (NI)(i0 + ((NI) 2));
		{
			while (1) {
				if (!(((NU8)(s0->data[j0])) == ((NU8)(32)) || ((NU8)(s0->data[j0])) == ((NU8)(9)) || ((NU8)(s0->data[j0])) == ((NU8)(11)) || ((NU8)(s0->data[j0])) == ((NU8)(13)) || ((NU8)(s0->data[j0])) == ((NU8)(10)) || ((NU8)(s0->data[j0])) == ((NU8)(12)))) goto LA8;
				j0 += ((NI) 1);
			} LA8: ;
		}
		result0 = ((NU8)(s0->data[j0]) == (NU8)(47));
	}
	LA5: ;
	return result0;
}

N_NIMCALL(Tnode_bROa11lyF5vxEN9aYNbHmhw*, parsepipe_bJSds72kKu77CwGx8lNYmA)(NimStringDesc* filename0, Tllstream_IHsOGFu33dIY69a9bLlFHlHw* inputstream0, IdentcacheHEX3Aobjecttype_TzLHS09bRH9a0TYLs39cqcNaw* cache0) {
	Tnode_bROa11lyF5vxEN9aYNbHmhw* result0;
	Tllstream_IHsOGFu33dIY69a9bLlFHlHw* s0;
	result0 = (Tnode_bROa11lyF5vxEN9aYNbHmhw*)0;
	result0 = emptynode_69ccLGuQ2mITw7zylZYtWcA;
	s0 = llstreamopen_TMcHzC3C639c0ccC0wtKA2w(filename0, ((Filemode_fVUBHvW79bXUw1j55Oo9avSQ) 0));
	{
		NimStringDesc* line0;
		NIM_BOOL LOC5;
		NI i0;
		NI linenumber0;
		if (!!((s0 == NIM_NIL))) goto LA3;
		line0 = rawNewString(((NI) 80));
		LOC5 = (NIM_BOOL)0;
		LOC5 = llstreamreadline_Qwm1ilRhcaI3znjOGn4xBg(s0, (&line0));
		i0 = utf8bom_h8LrhHxyp3nGeHzqCSFf9bg(line0);
		linenumber0 = ((NI) 1);
		{
			NIM_BOOL LOC8;
			NIM_BOOL LOC11;
			LOC8 = (NIM_BOOL)0;
			LOC8 = containsshebang_KmLpTlp0iQ7qLu2YAgAZhw(line0, i0);
			if (!LOC8) goto LA9;
			LOC11 = (NIM_BOOL)0;
			LOC11 = llstreamreadline_Qwm1ilRhcaI3znjOGn4xBg(s0, (&line0));
			i0 = ((NI) 0);
			linenumber0 += ((NI) 1);
		}
		LA9: ;
		{
			NIM_BOOL LOC14;
			Tparser_c38t9cDVS8o9b29cOovKwkANw q0;
			NimStringDesc* LOC20;
			Tllstream_IHsOGFu33dIY69a9bLlFHlHw* LOC21;
			LOC14 = (NIM_BOOL)0;
			LOC14 = ((NU8)(line0->data[i0]) == (NU8)(35));
			if (!(LOC14)) goto LA15;
			LOC14 = ((NU8)(line0->data[(NI)(i0 + ((NI) 1))]) == (NU8)(63));
			LA15: ;
			if (!LOC14) goto LA16;
			i0 += ((NI) 2);
			{
				while (1) {
					if (!(((NU8)(line0->data[i0])) == ((NU8)(32)) || ((NU8)(line0->data[i0])) == ((NU8)(9)) || ((NU8)(line0->data[i0])) == ((NU8)(11)) || ((NU8)(line0->data[i0])) == ((NU8)(13)) || ((NU8)(line0->data[i0])) == ((NU8)(10)) || ((NU8)(line0->data[i0])) == ((NU8)(12)))) goto LA19;
					i0 += ((NI) 1);
				} LA19: ;
			}
			memset((void*)(&q0), 0, sizeof(q0));
			objectInit((&q0), (&NTI_c38t9cDVS8o9b29cOovKwkANw));
			LOC20 = (NimStringDesc*)0;
			LOC20 = copyStr(line0, i0);
			LOC21 = (Tllstream_IHsOGFu33dIY69a9bLlFHlHw*)0;
			LOC21 = llstreamopen_HQSZA6kzdilYF0Pf022dhA(LOC20);
			openparser_xOo5exBZF46oOyrExM9a3yQ((&q0), filename0, LOC21, cache0, NIM_FALSE);
			result0 = parseall_x3UAdSvBfIIO33m4gWdOPg((&q0));
			closeparser_Bv6bIlAg2H4GfVH07sPwUw((&q0));
		}
		LA16: ;
		llstreamclose_TQe1mwqs39ccgay5ywsr9azw(s0);
	}
	LA3: ;
	return result0;
}

static N_INLINE(Tnode_bROa11lyF5vxEN9aYNbHmhw*, HEX5BHEX5D_4mGh5VHoHoaSkXDYdG6pyAitersgen)(Tnode_bROa11lyF5vxEN9aYNbHmhw* n0, NI i0) {
	Tnode_bROa11lyF5vxEN9aYNbHmhw* result0;
	result0 = (Tnode_bROa11lyF5vxEN9aYNbHmhw*)0;
	result0 = (*n0).kindU.S6.sons->data[i0];
	return result0;
}

static N_INLINE(NIM_BOOL, equalmem_DCrUjdaMvFDHaR1hs7sQGwropes)(void* a0, void* b0, NI size0) {
	NIM_BOOL result0;
	int LOC1;
	result0 = (NIM_BOOL)0;
	LOC1 = (int)0;
	LOC1 = memcmp(a0, b0, ((size_t) (size0)));
	result0 = (LOC1 == ((NI32) 0));
	return result0;
}

static N_INLINE(NIM_BOOL, eqStrings)(NimStringDesc* a0, NimStringDesc* b0) {
	NIM_BOOL result0;
	NIM_BOOL LOC11;
{	result0 = (NIM_BOOL)0;
	{
		if (!(a0 == b0)) goto LA3;
		result0 = NIM_TRUE;
		goto BeforeRet;
	}
	LA3: ;
	{
		NIM_BOOL LOC7;
		LOC7 = (NIM_BOOL)0;
		LOC7 = (a0 == NIM_NIL);
		if (LOC7) goto LA8;
		LOC7 = (b0 == NIM_NIL);
		LA8: ;
		if (!LOC7) goto LA9;
		result0 = NIM_FALSE;
		goto BeforeRet;
	}
	LA9: ;
	LOC11 = (NIM_BOOL)0;
	LOC11 = ((*a0).Sup.len == (*b0).Sup.len);
	if (!(LOC11)) goto LA12;
	LOC11 = equalmem_DCrUjdaMvFDHaR1hs7sQGwropes(((void*) ((*a0).data)), ((void*) ((*b0).data)), ((NI) ((*a0).Sup.len)));
	LA12: ;
	result0 = LOC11;
	goto BeforeRet;
	}BeforeRet: ;
	return result0;
}

N_NIMCALL(Tident_4umxGerWTHGPwUms7Yqu3g*, getcallee_8v8U4rPUh2LEtUf9cZrto9bQ)(Tnode_bROa11lyF5vxEN9aYNbHmhw* n0) {
	Tident_4umxGerWTHGPwUms7Yqu3g* result0;
	result0 = (Tident_4umxGerWTHGPwUms7Yqu3g*)0;
	{
		NIM_BOOL LOC3;
		LOC3 = (NIM_BOOL)0;
		LOC3 = ((*n0).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 27) || (*n0).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 29) || (*n0).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 30) || (*n0).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 31) || (*n0).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 26) || (*n0).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 28) || (*n0).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 32));
		if (!(LOC3)) goto LA4;
		LOC3 = ((*(*n0).kindU.S6.sons->data[((NI) 0)]).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 2));
		LA4: ;
		if (!LOC3) goto LA5;
		result0 = (*(*n0).kindU.S6.sons->data[((NI) 0)]).kindU.S5.ident;
	}
	goto LA1;
	LA5: ;
	{
		if (!((*n0).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 2))) goto LA8;
		result0 = (*n0).kindU.S5.ident;
	}
	goto LA1;
	LA8: ;
	{
		NimStringDesc* LOC11;
		LOC11 = (NimStringDesc*)0;
		LOC11 = rendertree_ppjdh9aQ5L0SGPF8yz1gZ9cA(n0, 0);
		rawmessage_tBJ8mvo7MzzirsGkrHVc9cw(((Tmsgkind_IGAWgv9aR2KqPKJfPZPEWaw) 166), LOC11);
	}
	LA1: ;
	return result0;
}

N_NIMCALL(Tfilterkind_mET0MuvrWCLPKR0e9cWMjNg, getfilter_VI3Fiobf4N9aSXR2Q8kXG0A)(Tident_4umxGerWTHGPwUms7Yqu3g* ident0) {
	Tfilterkind_mET0MuvrWCLPKR0e9cWMjNg result0;
{	result0 = (Tfilterkind_mET0MuvrWCLPKR0e9cWMjNg)0;
	{
		Tfilterkind_mET0MuvrWCLPKR0e9cWMjNg i_ZwkbtRej1srvzCDGmtwo5g;
		NI res_JcXRfW2WXIyLCJ4Uj9aeJww;
		i_ZwkbtRej1srvzCDGmtwo5g = (Tfilterkind_mET0MuvrWCLPKR0e9cWMjNg)0;
		res_JcXRfW2WXIyLCJ4Uj9aeJww = ((NI) 0);
		{
			while (1) {
				if (!(res_JcXRfW2WXIyLCJ4Uj9aeJww <= ((NI) 3))) goto LA3;
				i_ZwkbtRej1srvzCDGmtwo5g = ((Tfilterkind_mET0MuvrWCLPKR0e9cWMjNg) (res_JcXRfW2WXIyLCJ4Uj9aeJww));
				{
					NI LOC6;
					LOC6 = (NI)0;
					LOC6 = nsuCmpIgnoreStyle((*ident0).s, filternames_AxTRz7iBqkPgPfZx8TM0IQ[(i_ZwkbtRej1srvzCDGmtwo5g)- 0]);
					if (!(LOC6 == ((NI) 0))) goto LA7;
					result0 = i_ZwkbtRej1srvzCDGmtwo5g;
					goto BeforeRet;
				}
				LA7: ;
				res_JcXRfW2WXIyLCJ4Uj9aeJww += ((NI) 1);
			} LA3: ;
		}
	}
	result0 = ((Tfilterkind_mET0MuvrWCLPKR0e9cWMjNg) 0);
	}BeforeRet: ;
	return result0;
}

N_NIMCALL(Tparserkind_wHYLpKaSFkZsAwL9crNQqGw, getparser_hTsVGKyR7WIUC8NJAMIjvQ)(Tident_4umxGerWTHGPwUms7Yqu3g* ident0) {
	Tparserkind_wHYLpKaSFkZsAwL9crNQqGw result0;
{	result0 = (Tparserkind_wHYLpKaSFkZsAwL9crNQqGw)0;
	{
		Tparserkind_wHYLpKaSFkZsAwL9crNQqGw i_0dv1faDYZI4ibRWd2DD16A;
		NI res_YWKPOMDRGuSiQvweuOPNUQ;
		i_0dv1faDYZI4ibRWd2DD16A = (Tparserkind_wHYLpKaSFkZsAwL9crNQqGw)0;
		res_YWKPOMDRGuSiQvweuOPNUQ = ((NI) 0);
		{
			while (1) {
				if (!(res_YWKPOMDRGuSiQvweuOPNUQ <= ((NI) 3))) goto LA3;
				i_0dv1faDYZI4ibRWd2DD16A = ((Tparserkind_wHYLpKaSFkZsAwL9crNQqGw) (res_YWKPOMDRGuSiQvweuOPNUQ));
				{
					NI LOC6;
					LOC6 = (NI)0;
					LOC6 = nsuCmpIgnoreStyle((*ident0).s, parsernames_IVRWib6Nt9c9cDYSS669cL5mA[(i_0dv1faDYZI4ibRWd2DD16A)- 0]);
					if (!(LOC6 == ((NI) 0))) goto LA7;
					result0 = i_0dv1faDYZI4ibRWd2DD16A;
					goto BeforeRet;
				}
				LA7: ;
				res_YWKPOMDRGuSiQvweuOPNUQ += ((NI) 1);
			} LA3: ;
		}
	}
	rawmessage_tBJ8mvo7MzzirsGkrHVc9cw(((Tmsgkind_IGAWgv9aR2KqPKJfPZPEWaw) 31), (*ident0).s);
	}BeforeRet: ;
	return result0;
}

N_NIMCALL(Tllstream_IHsOGFu33dIY69a9bLlFHlHw*, applyfilter_9cHsu5TuPlpg9bEC9cADFtBCA)(Tparsers_WENTuyElSRFloaVOQEDvMg* p0, Tnode_bROa11lyF5vxEN9aYNbHmhw* n0, NimStringDesc* filename0, Tllstream_IHsOGFu33dIY69a9bLlFHlHw* stdin_yANaOXWbyFefvP9cPD0BmoQ) {
	Tllstream_IHsOGFu33dIY69a9bLlFHlHw* result0;
	Tident_4umxGerWTHGPwUms7Yqu3g* ident0;
	Tfilterkind_mET0MuvrWCLPKR0e9cWMjNg f0;
	result0 = (Tllstream_IHsOGFu33dIY69a9bLlFHlHw*)0;
	ident0 = getcallee_8v8U4rPUh2LEtUf9cZrto9bQ(n0);
	f0 = getfilter_VI3Fiobf4N9aSXR2Q8kXG0A(ident0);
	switch (f0) {
	case ((Tfilterkind_mET0MuvrWCLPKR0e9cWMjNg) 0):
	{
		(*p0).skin = getparser_hTsVGKyR7WIUC8NJAMIjvQ(ident0);
		result0 = stdin_yANaOXWbyFefvP9cPD0BmoQ;
	}
	break;
	case ((Tfilterkind_mET0MuvrWCLPKR0e9cWMjNg) 1):
	{
		result0 = filtertmpl_JvVu6X7Xrt789cwD0XA6mWg(stdin_yANaOXWbyFefvP9cPD0BmoQ, filename0, n0);
	}
	break;
	case ((Tfilterkind_mET0MuvrWCLPKR0e9cWMjNg) 3):
	{
		result0 = filterstrip_8vZ6X8KZZNI4xsTx2A9bPBw(stdin_yANaOXWbyFefvP9cPD0BmoQ, filename0, n0);
	}
	break;
	case ((Tfilterkind_mET0MuvrWCLPKR0e9cWMjNg) 2):
	{
		result0 = filterreplace_8vZ6X8KZZNI4xsTx2A9bPBw_2(stdin_yANaOXWbyFefvP9cPD0BmoQ, filename0, n0);
	}
	break;
	}
	{
		if (!!((f0 == ((Tfilterkind_mET0MuvrWCLPKR0e9cWMjNg) 0)))) goto LA7;
		{
			TY_8ZvwQIddfpj2THRVPsFzIQ LOC13;
			TY_8ZvwQIddfpj2THRVPsFzIQ LOC14;
			if (!((gnotes_ra0BBMaJz6cOxn1JA3c6Bg &((NU64)1<<((NU)((((Tmsgkind_nDM9aiGzuSlpuw3CrqwaebA) 276)- 236))&63U)))!=0)) goto LA11;
			memset((void*)LOC13, 0, sizeof(LOC13));
			rawmessage_wSQLHRsYvHJ4DSWgdFrFaA(((Tmsgkind_IGAWgv9aR2KqPKJfPZPEWaw) 276), LOC13, 0);
			msgwriteln_mpdiFCyqIWmTQYjT6Mj9c6A((*result0).s, 0);
			memset((void*)LOC14, 0, sizeof(LOC14));
			rawmessage_wSQLHRsYvHJ4DSWgdFrFaA(((Tmsgkind_IGAWgv9aR2KqPKJfPZPEWaw) 277), LOC14, 0);
		}
		LA11: ;
	}
	LA7: ;
	return result0;
}

N_NIMCALL(Tllstream_IHsOGFu33dIY69a9bLlFHlHw*, evalpipe_nVUUGAijyBdiAxOhXa9atMg)(Tparsers_WENTuyElSRFloaVOQEDvMg* p0, Tnode_bROa11lyF5vxEN9aYNbHmhw* n0, NimStringDesc* filename0, Tllstream_IHsOGFu33dIY69a9bLlFHlHw* start0) {
	Tllstream_IHsOGFu33dIY69a9bLlFHlHw* result0;
{	result0 = (Tllstream_IHsOGFu33dIY69a9bLlFHlHw*)0;
	result0 = start0;
	{
		if (!((*n0).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 1))) goto LA3;
		goto BeforeRet;
	}
	LA3: ;
	{
		NIM_BOOL LOC7;
		NIM_BOOL LOC8;
		Tnode_bROa11lyF5vxEN9aYNbHmhw* LOC10;
		Tnode_bROa11lyF5vxEN9aYNbHmhw* LOC12;
		LOC7 = (NIM_BOOL)0;
		LOC8 = (NIM_BOOL)0;
		LOC8 = ((*n0).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 29));
		if (!(LOC8)) goto LA9;
		LOC10 = (Tnode_bROa11lyF5vxEN9aYNbHmhw*)0;
		LOC10 = HEX5BHEX5D_4mGh5VHoHoaSkXDYdG6pyAitersgen(n0, ((NI) 0));
		LOC8 = ((*LOC10).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 2));
		LA9: ;
		LOC7 = LOC8;
		if (!(LOC7)) goto LA11;
		LOC12 = (Tnode_bROa11lyF5vxEN9aYNbHmhw*)0;
		LOC12 = HEX5BHEX5D_4mGh5VHoHoaSkXDYdG6pyAitersgen(n0, ((NI) 0));
		LOC7 = eqStrings((*(*LOC12).kindU.S5.ident).s, ((NimStringDesc*) &T_Furs9bKK6tVLoyofH3f4bRw_6));
		LA11: ;
		if (!LOC7) goto LA13;
		{
			NI i_pjEReaWLZplr0Le7ENuWUw;
			NI res_rjReHE0rD0diwqiLnrUqag;
			i_pjEReaWLZplr0Le7ENuWUw = (NI)0;
			res_rjReHE0rD0diwqiLnrUqag = ((NI) 1);
			{
				while (1) {
					if (!(res_rjReHE0rD0diwqiLnrUqag <= ((NI) 2))) goto LA17;
					i_pjEReaWLZplr0Le7ENuWUw = res_rjReHE0rD0diwqiLnrUqag;
					{
						if (!((*(*n0).kindU.S6.sons->data[i_pjEReaWLZplr0Le7ENuWUw]).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 29))) goto LA20;
						result0 = evalpipe_nVUUGAijyBdiAxOhXa9atMg(p0, (*n0).kindU.S6.sons->data[i_pjEReaWLZplr0Le7ENuWUw], filename0, result0);
					}
					goto LA18;
					LA20: ;
					{
						result0 = applyfilter_9cHsu5TuPlpg9bEC9cADFtBCA(p0, (*n0).kindU.S6.sons->data[i_pjEReaWLZplr0Le7ENuWUw], filename0, result0);
					}
					LA18: ;
					res_rjReHE0rD0diwqiLnrUqag += ((NI) 1);
				} LA17: ;
			}
		}
	}
	goto LA5;
	LA13: ;
	{
		if (!((*n0).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 115))) goto LA24;
		result0 = evalpipe_nVUUGAijyBdiAxOhXa9atMg(p0, (*n0).kindU.S6.sons->data[((NI) 0)], filename0, result0);
	}
	goto LA5;
	LA24: ;
	{
		result0 = applyfilter_9cHsu5TuPlpg9bEC9cADFtBCA(p0, n0, filename0, result0);
	}
	LA5: ;
	}BeforeRet: ;
	return result0;
}

N_NIMCALL(void, openparsers_zDBDS8Km3Tchi1ohPVieKQ)(Tparsers_WENTuyElSRFloaVOQEDvMg* p0, NI32 fileidx0, Tllstream_IHsOGFu33dIY69a9bLlFHlHw* inputstream0, IdentcacheHEX3Aobjecttype_TzLHS09bRH9a0TYLs39cqcNaw* cache0) {
	Tllstream_IHsOGFu33dIY69a9bLlFHlHw* s0;
	NimStringDesc* filename0;
	Tnode_bROa11lyF5vxEN9aYNbHmhw* pipe0;
	s0 = (Tllstream_IHsOGFu33dIY69a9bLlFHlHw*)0;
	(*p0).skin = ((Tparserkind_wHYLpKaSFkZsAwL9crNQqGw) 0);
	filename0 = tofullpathconsiderdirty_7s19cb7WBgztz9aqEBzwwuqA_2(fileidx0);
	pipe0 = parsepipe_bJSds72kKu77CwGx8lNYmA(filename0, inputstream0, cache0);
	{
		if (!!((pipe0 == NIM_NIL))) goto LA3;
		s0 = evalpipe_nVUUGAijyBdiAxOhXa9atMg(p0, pipe0, filename0, inputstream0);
	}
	goto LA1;
	LA3: ;
	{
		s0 = inputstream0;
	}
	LA1: ;
	switch ((*p0).skin) {
	case ((Tparserkind_wHYLpKaSFkZsAwL9crNQqGw) 0):
	case ((Tparserkind_wHYLpKaSFkZsAwL9crNQqGw) 2):
	case ((Tparserkind_wHYLpKaSFkZsAwL9crNQqGw) 3):
	{
		openparser_AytEkdefQ9bdVwGj33lUaUw((&(*p0).parser), fileidx0, s0, cache0, NIM_FALSE);
	}
	break;
	case ((Tparserkind_wHYLpKaSFkZsAwL9crNQqGw) 1):
	{
		openparser_AytEkdefQ9bdVwGj33lUaUw((&(*p0).parser), fileidx0, s0, cache0, NIM_TRUE);
	}
	break;
	}
}

N_NIMCALL(Tnode_bROa11lyF5vxEN9aYNbHmhw*, parseall_N9cl8bNz6TaGrhhLXmkyhrw)(Tparsers_WENTuyElSRFloaVOQEDvMg* p0) {
	Tnode_bROa11lyF5vxEN9aYNbHmhw* result0;
	result0 = (Tnode_bROa11lyF5vxEN9aYNbHmhw*)0;
	switch ((*p0).skin) {
	case ((Tparserkind_wHYLpKaSFkZsAwL9crNQqGw) 0):
	case ((Tparserkind_wHYLpKaSFkZsAwL9crNQqGw) 1):
	{
		result0 = parseall_x3UAdSvBfIIO33m4gWdOPg((&(*p0).parser));
	}
	break;
	case ((Tparserkind_wHYLpKaSFkZsAwL9crNQqGw) 2):
	{
		result0 = parseall_e6i72kHohchMxvc8wSe9a8Q((&(*p0).parser));
	}
	break;
	case ((Tparserkind_wHYLpKaSFkZsAwL9crNQqGw) 3):
	{
		internalerror_5XY9cUy7hZmUusM38U9cYYdw(((NimStringDesc*) &T_Furs9bKK6tVLoyofH3f4bRw_15));
		result0 = emptynode_69ccLGuQ2mITw7zylZYtWcA;
	}
	break;
	}
	return result0;
}

N_NIMCALL(void, closeparsers_aZMERNSTUyTfW9aaFR9bAn9aQ)(Tparsers_WENTuyElSRFloaVOQEDvMg* p0) {
	closeparser_Bv6bIlAg2H4GfVH07sPwUw((&(*p0).parser));
}

N_NIMCALL(Tnode_bROa11lyF5vxEN9aYNbHmhw*, parsefile_9cEZ7X5V9c6ooHZhVrYd0X7Q)(NI32 fileidx0, IdentcacheHEX3Aobjecttype_TzLHS09bRH9a0TYLs39cqcNaw* cache0) {
	Tnode_bROa11lyF5vxEN9aYNbHmhw* result0;
	Tparsers_WENTuyElSRFloaVOQEDvMg p0;
	FILE* f0;
	NimStringDesc* filename0;
	Tllstream_IHsOGFu33dIY69a9bLlFHlHw* LOC6;
{	result0 = (Tnode_bROa11lyF5vxEN9aYNbHmhw*)0;
	memset((void*)(&p0), 0, sizeof(p0));
	objectInit((&p0), (&NTI_WENTuyElSRFloaVOQEDvMg));
	f0 = (FILE*)0;
	filename0 = tofullpathconsiderdirty_7s19cb7WBgztz9aqEBzwwuqA_2(fileidx0);
	{
		NIM_BOOL LOC3;
		LOC3 = (NIM_BOOL)0;
		LOC3 = open_sEp0GH2306oGo9bqBpj5oTQ(&f0, filename0, ((Filemode_fVUBHvW79bXUw1j55Oo9avSQ) 0), ((NI) -1));
		if (!!(LOC3)) goto LA4;
		rawmessage_tBJ8mvo7MzzirsGkrHVc9cw(((Tmsgkind_IGAWgv9aR2KqPKJfPZPEWaw) 3), filename0);
		goto BeforeRet;
	}
	LA4: ;
	LOC6 = (Tllstream_IHsOGFu33dIY69a9bLlFHlHw*)0;
	LOC6 = llstreamopen_8hTxoBHhwtwZR9cM9bBLMsCQ(f0);
	openparsers_zDBDS8Km3Tchi1ohPVieKQ((&p0), fileidx0, LOC6, cache0);
	result0 = parseall_N9cl8bNz6TaGrhhLXmkyhrw((&p0));
	closeparsers_aZMERNSTUyTfW9aaFR9bAn9aQ((&p0));
	}BeforeRet: ;
	return result0;
}

N_NIMCALL(Tnode_bROa11lyF5vxEN9aYNbHmhw*, parsetoplevelstmt_N9cl8bNz6TaGrhhLXmkyhrw_2)(Tparsers_WENTuyElSRFloaVOQEDvMg* p0) {
	Tnode_bROa11lyF5vxEN9aYNbHmhw* result0;
	result0 = (Tnode_bROa11lyF5vxEN9aYNbHmhw*)0;
	switch ((*p0).skin) {
	case ((Tparserkind_wHYLpKaSFkZsAwL9crNQqGw) 0):
	case ((Tparserkind_wHYLpKaSFkZsAwL9crNQqGw) 1):
	{
		result0 = parsetoplevelstmt_x3UAdSvBfIIO33m4gWdOPg_40((&(*p0).parser));
	}
	break;
	case ((Tparserkind_wHYLpKaSFkZsAwL9crNQqGw) 2):
	{
		result0 = parsetoplevelstmt_e6i72kHohchMxvc8wSe9a8Q_42((&(*p0).parser));
	}
	break;
	case ((Tparserkind_wHYLpKaSFkZsAwL9crNQqGw) 3):
	{
		internalerror_5XY9cUy7hZmUusM38U9cYYdw(((NimStringDesc*) &T_Furs9bKK6tVLoyofH3f4bRw_15));
		result0 = emptynode_69ccLGuQ2mITw7zylZYtWcA;
	}
	break;
	}
	return result0;
}
NIM_EXTERNC N_NOINLINE(void, compiler_syntaxesInit000)(void) {
}

NIM_EXTERNC N_NOINLINE(void, compiler_syntaxesDatInit000)(void) {
static TNimNode* T_Furs9bKK6tVLoyofH3f4bRw_2[2];
static TNimNode* T_Furs9bKK6tVLoyofH3f4bRw_3[4];
NI T_Furs9bKK6tVLoyofH3f4bRw_5;
static char* NIM_CONST T_Furs9bKK6tVLoyofH3f4bRw_4[4] = {
"skinStandard", 
"skinStrongSpaces", 
"skinBraces", 
"skinEndX"};
static TNimNode T_Furs9bKK6tVLoyofH3f4bRw_0[8];
NTI_WENTuyElSRFloaVOQEDvMg.size = sizeof(Tparsers_WENTuyElSRFloaVOQEDvMg);
NTI_WENTuyElSRFloaVOQEDvMg.kind = 18;
NTI_WENTuyElSRFloaVOQEDvMg.base = 0;
T_Furs9bKK6tVLoyofH3f4bRw_2[0] = &T_Furs9bKK6tVLoyofH3f4bRw_0[1];
NTI_wHYLpKaSFkZsAwL9crNQqGw.size = sizeof(Tparserkind_wHYLpKaSFkZsAwL9crNQqGw);
NTI_wHYLpKaSFkZsAwL9crNQqGw.kind = 14;
NTI_wHYLpKaSFkZsAwL9crNQqGw.base = 0;
NTI_wHYLpKaSFkZsAwL9crNQqGw.flags = 3;
for (T_Furs9bKK6tVLoyofH3f4bRw_5 = 0; T_Furs9bKK6tVLoyofH3f4bRw_5 < 4; T_Furs9bKK6tVLoyofH3f4bRw_5++) {
T_Furs9bKK6tVLoyofH3f4bRw_0[T_Furs9bKK6tVLoyofH3f4bRw_5+2].kind = 1;
T_Furs9bKK6tVLoyofH3f4bRw_0[T_Furs9bKK6tVLoyofH3f4bRw_5+2].offset = T_Furs9bKK6tVLoyofH3f4bRw_5;
T_Furs9bKK6tVLoyofH3f4bRw_0[T_Furs9bKK6tVLoyofH3f4bRw_5+2].name = T_Furs9bKK6tVLoyofH3f4bRw_4[T_Furs9bKK6tVLoyofH3f4bRw_5];
T_Furs9bKK6tVLoyofH3f4bRw_3[T_Furs9bKK6tVLoyofH3f4bRw_5] = &T_Furs9bKK6tVLoyofH3f4bRw_0[T_Furs9bKK6tVLoyofH3f4bRw_5+2];
}
T_Furs9bKK6tVLoyofH3f4bRw_0[6].len = 4; T_Furs9bKK6tVLoyofH3f4bRw_0[6].kind = 2; T_Furs9bKK6tVLoyofH3f4bRw_0[6].sons = &T_Furs9bKK6tVLoyofH3f4bRw_3[0];
NTI_wHYLpKaSFkZsAwL9crNQqGw.node = &T_Furs9bKK6tVLoyofH3f4bRw_0[6];
T_Furs9bKK6tVLoyofH3f4bRw_0[1].kind = 1;
T_Furs9bKK6tVLoyofH3f4bRw_0[1].offset = offsetof(Tparsers_WENTuyElSRFloaVOQEDvMg, skin);
T_Furs9bKK6tVLoyofH3f4bRw_0[1].typ = (&NTI_wHYLpKaSFkZsAwL9crNQqGw);
T_Furs9bKK6tVLoyofH3f4bRw_0[1].name = "skin";
T_Furs9bKK6tVLoyofH3f4bRw_2[1] = &T_Furs9bKK6tVLoyofH3f4bRw_0[7];
T_Furs9bKK6tVLoyofH3f4bRw_0[7].kind = 1;
T_Furs9bKK6tVLoyofH3f4bRw_0[7].offset = offsetof(Tparsers_WENTuyElSRFloaVOQEDvMg, parser);
T_Furs9bKK6tVLoyofH3f4bRw_0[7].typ = (&NTI_c38t9cDVS8o9b29cOovKwkANw);
T_Furs9bKK6tVLoyofH3f4bRw_0[7].name = "parser";
T_Furs9bKK6tVLoyofH3f4bRw_0[0].len = 2; T_Furs9bKK6tVLoyofH3f4bRw_0[0].kind = 2; T_Furs9bKK6tVLoyofH3f4bRw_0[0].sons = &T_Furs9bKK6tVLoyofH3f4bRw_2[0];
NTI_WENTuyElSRFloaVOQEDvMg.node = &T_Furs9bKK6tVLoyofH3f4bRw_0[0];
}

