123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881(* Yoann Padioleau
*
* Copyright (C) 2010 Facebook
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License
* version 2.1 as published by the Free Software Foundation, with the
* special exception on linking described in file license.txt.
*
* This library is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the file
* license.txt for more details.
*)openOcamlopenCst_cpp(*****************************************************************************)(* Prelude *)(*****************************************************************************)(*****************************************************************************)(* Types *)(*****************************************************************************)(* hooks *)typevisitor_in={kexpr:expressionvin;kstmt:statementvin;kinit:initialiservin;ktypeC:typeCvin;kclass_member:class_membervin;kfieldkind:fieldkindvin;kparameter:parametervin;kcompound:compoundvin;kclass_def:class_definitionvin;kfunc_def:func_definitionvin;kcpp:cpp_directivevin;kblock_decl:block_declarationvin;kdeclaration:declarationvin;ktoplevel:toplevelvin;kinfo:tokvin;}andvisitor_out=any->unitand'avin=('a->unit)*visitor_out->'a->unitletdefault_visitor={kexpr=(fun(k,_)x->kx);kfieldkind=(fun(k,_)x->kx);kparameter=(fun(k,_)x->kx);ktypeC=(fun(k,_)x->kx);kblock_decl=(fun(k,_)x->kx);kcompound=(fun(k,_)x->kx);kstmt=(fun(k,_)x->kx);kinfo=(fun(k,_)x->kx);kclass_def=(fun(k,_)x->kx);kfunc_def=(fun(k,_)x->kx);kclass_member=(fun(k,_)x->kx);kcpp=(fun(k,_)x->kx);kdeclaration=(fun(k,_)x->kx);ktoplevel=(fun(k,_)x->kx);kinit=(fun(k,_)x->kx);}let(mk_visitor:visitor_in->visitor_out)=funvin->(* start of auto generation *)(* generated by ocamltarzan with: camlp4o -o /tmp/yyy.ml -I pa/ pa_type_conv.cmo pa_visitor.cmo pr_o.cmo /tmp/xxx.ml *)letrecv_infox=letk_=()invin.kinfo(k,all_functions)xandv_tokv=v_infovandv_wrap:'a.('a->unit)->'awrap->unit=fun_of_a(v1,v2)->letv1=_of_av1andv2=v_listv_infov2in()andv_wrap2:'a.('a->unit)->'awrap2->unit=fun_of_a(v1,v2)->letv1=_of_av1andv2=v_infov2in()andv_paren:'a.('a->unit)->'aparen->unit=fun_of_a(v1,v2,v3)->letv1=v_tokv1andv2=_of_av2andv3=v_tokv3in()andv_brace:'a.('a->unit)->'abrace->unit=fun_of_a(v1,v2,v3)->letv1=v_tokv1andv2=_of_av2andv3=v_tokv3in()andv_bracket:'a.('a->unit)->'abracket->unit=fun_of_a(v1,v2,v3)->letv1=v_tokv1andv2=_of_av2andv3=v_tokv3in()andv_angle:'a.('a->unit)->'aangle->unit=fun_of_a(v1,v2,v3)->letv1=v_tokv1andv2=_of_av2andv3=v_tokv3in()andv_comma_list:'a.('a->unit)->'acomma_list->unit=fun_of_a->v_list(v_wrap_of_a)andv_comma_list2:'a.('a->unit)->'acomma_list2->unit=fun_of_a->v_list(Ocaml.v_either_of_av_tok)andv_name(v1,v2,v3)=letv1=v_optionv_tokv1andv2=v_list(fun(v1,v2)->letv1=v_qualifierv1andv2=v_tokv2in())v2andv3=v_identv3in()andv_ident=function|IdIdentv1->letv1=v_wrap2v_stringv1in()|IdOperator((v1,v2))->letv1=v_tokv1andv2=(matchv2with|(v1,v2)->letv1=v_operatorv1andv2=v_listv_tokv2in())in()|IdConverter((v1,v2))->letv1=v_tokv1andv2=v_fullTypev2in()|IdDestructor((v1,v2))->letv1=v_tokv1andv2=v_wrap2v_stringv2in()|IdTemplateId((v1,v2))->letv1=v_wrap2v_stringv1andv2=v_template_argumentsv2in()andv_template_argumentsv=v_angle(v_comma_listv_template_argument)vandv_template_argumentv=Ocaml.v_eitherv_fullTypev_expressionvandv_either_ft_or_exprv=Ocaml.v_eitherv_fullTypev_expressionvandv_qualifier=function|QClassnamev1->letv1=v_wrap2v_stringv1in()|QTemplateId((v1,v2))->letv1=v_wrap2v_stringv1andv2=v_template_argumentsv2in()andv_class_namev=v_namevandv_namespace_namev=v_namevandv_typedef_namev=v_namevandv_enum_namev=v_namevandv_ident_namev=v_namevandv_fullType(v1,v2)=letv1=v_typeQualifierv1andv2=v_typeCv2in()andv_typeCv=letkv=v_wrapv_typeCbisvinvin.ktypeC(k,all_functions)vandv_typeCbis=function|BaseTypev1->letv1=v_baseTypev1in()|Pointerv1->letv1=v_fullTypev1in()|Referencev1->letv1=v_fullTypev1in()|Array((v1,v2))->letv1=v_bracket(v_optionv_constExpression)v1andv2=v_fullTypev2in()|FunctionTypev1->letv1=v_functionTypev1in()|EnumDef((v1,v2,v3))->letv1=v_tokv1andv2=v_option(v_wrap2v_string)v2andv3=v_brace(v_comma_listv_enum_elem)v3in()|StructDefv1->letv1=v_class_definitionv1in()|EnumName((v1,v2))->letv1=v_tokv1andv2=v_wrap2v_stringv2in()|StructUnionName((v1,v2))->letv1=v_wrap2v_structUnionv1andv2=v_wrap2v_stringv2in()|TypeName((v1))->letv1=v_namev1in()|TypenameKwd((v1,v2))->letv1=v_tokv1andv2=v_namev2in()|TypeOf((v1,v2))->letv1=v_tokv1andv2=v_parenv_either_ft_or_exprv2in()|ParenTypev1->letv1=v_parenv_fullTypev1in()andv_baseType=function|Void->()|IntTypev1->letv1=v_intTypev1in()|FloatTypev1->letv1=v_floatTypev1in()andv_intType=function|CChar->()|Siv1->letv1=v_signedv1in()|CBool->()|WChar_t->()andv_signed(v1,v2)=letv1=v_signv1andv2=v_basev2in()andv_base=function|CChar2->()|CShort->()|CInt->()|CLong->()|CLongLong->()andv_sign=function|Signed->()|UnSigned->()andv_floatType=function|CFloat->()|CDouble->()|CLongDouble->()andv_enum_elem{e_name=v_e_name;e_val=v_e_val}=letarg=v_wrap2v_stringv_e_nameinletarg=v_option(fun(v1,v2)->letv1=v_tokv1andv2=v_constExpressionv2in())v_e_valin()andv_typeQualifier{const=v_const;volatile=v_volatile}=letarg=v_optionv_tokv_constinletarg=v_optionv_tokv_volatilein()andv_expressionv=letkx=v_wrapv_expressionbisxinvin.kexpr(k,all_functions)vandv_expressionbis=function|Id((v1,v2))->letv1=v_namev1andv2=v_ident_infov2in()|Cv1->letv1=v_constantv1in()|Ellipsesv1->letv1=v_tokv1in()|Call((v1,v2))->letv1=v_expressionv1andv2=v_paren(v_comma_listv_argument)v2in()|CondExpr((v1,v2,v3))->letv1=v_expressionv1andv2=v_optionv_expressionv2andv3=v_expressionv3in()|Sequence((v1,v2))->letv1=v_expressionv1andv2=v_expressionv2in()|Assignment((v1,v2,v3))->letv1=v_expressionv1andv2=v_assignOpv2andv3=v_expressionv3in()|Postfix((v1,v2))->letv1=v_expressionv1andv2=v_fixOpv2in()|Infix((v1,v2))->letv1=v_expressionv1andv2=v_fixOpv2in()|Unary((v1,v2))->letv1=v_expressionv1andv2=v_unaryOpv2in()|Binary((v1,v2,v3))->letv1=v_expressionv1andv2=v_binaryOpv2andv3=v_expressionv3in()|ArrayAccess((v1,v2))->letv1=v_expressionv1andv2=v_bracketv_expressionv2in()|RecordAccess((v1,v2))->letv1=v_expressionv1andv2=v_namev2in()|RecordPtAccess((v1,v2))->letv1=v_expressionv1andv2=v_namev2in()|RecordStarAccess((v1,v2))->letv1=v_expressionv1andv2=v_expressionv2in()|RecordPtStarAccess((v1,v2))->letv1=v_expressionv1andv2=v_expressionv2in()|SizeOfExpr((v1,v2))->letv1=v_tokv1andv2=v_expressionv2in()|SizeOfType((v1,v2))->letv1=v_tokv1andv2=v_parenv_fullTypev2in()|Cast((v1,v2))->letv1=v_parenv_fullTypev1andv2=v_expressionv2in()|StatementExprv1->letv1=v_parenv_compoundv1in()|GccConstructor((v1,v2))->letv1=v_parenv_fullTypev1andv2=v_brace(v_comma_listv_initialiser)v2in()|Thisv1->letv1=v_tokv1in()|ConstructedObject((v1,v2))->letv1=v_fullTypev1andv2=v_paren(v_comma_listv_argument)v2in()|TypeId((v1,v2))->letv1=v_tokv1andv2=v_parenv_either_ft_or_exprv2in()|CplusplusCast((v1,v2,v3))->letv1=v_wrap2v_cast_operatorv1andv2=v_anglev_fullTypev2andv3=v_parenv_expressionv3in()|New((v1,v2,v3,v4,v5))->letv1=v_optionv_tokv1andv2=v_tokv2andv3=v_option(v_paren(v_comma_listv_argument))v3andv4=v_fullTypev4andv5=v_option(v_paren(v_comma_listv_argument))v5in()|Delete((v1,v2))->letv1=v_optionv_tokv1andv2=v_expressionv2in()|DeleteArray((v1,v2))->letv1=v_optionv_tokv1andv2=v_expressionv2in()|Throwv1->letv1=v_optionv_expressionv1in()|ParenExprv1->letv1=v_parenv_expressionv1in()|ExprTodo->()andv_ident_info{i_scope=_v_i_scope}=(* todo? let arg = Scope_code.v_scope v_i_scope in () *)()andv_argumentv=Ocaml.v_eitherv_expressionv_weird_argumentvandv_weird_argument=function|ArgTypev1->letv1=v_fullTypev1in()|ArgActionv1->letv1=v_action_macrov1in()andv_action_macro=function|ActMiscv1->letv1=v_listv_tokv1in()andv_constant=function|Stringv1->letv1=(matchv1with|(v1,v2)->letv1=v_stringv1andv2=v_isWcharv2in())in()|MultiString->()|Charv1->letv1=(matchv1with|(v1,v2)->letv1=v_stringv1andv2=v_isWcharv2in())in()|Intv1->letv1=v_stringv1in()|Floatv1->letv1=(matchv1with|(v1,v2)->letv1=v_stringv1andv2=v_floatTypev2in())in()|Boolv1->letv1=v_boolv1in()andv_isWchar=function|IsWchar->()|IsChar->()andv_unaryOp=function|GetRef->()|DeRef->()|UnPlus->()|UnMinus->()|Tilde->()|Not->()|GetRefLabel->()andv_assignOp=function|SimpleAssign->()|OpAssignv1->letv1=v_arithOpv1in()andv_fixOp=function|Dec->()|Inc->()andv_binaryOp=function|Arithv1->letv1=v_arithOpv1in()|Logicalv1->letv1=v_logicalOpv1in()andv_arithOp=function|Plus->()|Minus->()|Mul->()|Div->()|Mod->()|DecLeft->()|DecRight->()|And->()|Or->()|Xor->()andv_logicalOp=function|Inf->()|Sup->()|InfEq->()|SupEq->()|Eq->()|NotEq->()|AndLog->()|OrLog->()andv_ptrOp=function|PtrStarOp->()|PtrOp->()andv_allocOp=function|NewOp->()|DeleteOp->()|NewArrayOp->()|DeleteArrayOp->()andv_accessop=function|ParenOp->()|ArrayOp->()andv_operator=function|BinaryOpv1->letv1=v_binaryOpv1in()|AssignOpv1->letv1=v_assignOpv1in()|FixOpv1->letv1=v_fixOpv1in()|PtrOpOpv1->letv1=v_ptrOpv1in()|AccessOpv1->letv1=v_accessopv1in()|AllocOpv1->letv1=v_allocOpv1in()|UnaryTildeOp->()|UnaryNotOp->()|CommaOp->()andv_cast_operator=function|Static_cast->()|Dynamic_cast->()|Const_cast->()|Reinterpret_cast->()andv_constExpressionv=v_expressionvandv_statementv=letkv=v_wrapv_statementbisvinvin.kstmt(k,all_functions)vandv_statementbis=function|Compoundv1->letv1=v_compoundv1in()|ExprStatementv1->letv1=v_exprStatementv1in()|Labeledv1->letv1=v_labeledv1in()|Selectionv1->letv1=v_selectionv1in()|Iterationv1->letv1=v_iterationv1in()|Jumpv1->letv1=v_jumpv1in()|DeclStmtv1->letv1=v_block_declarationv1in()|Try((v1,v2,v3))->letv1=v_tokv1andv2=v_compoundv2andv3=v_listv_handlerv3in()|NestedFuncv1->letv1=v_func_definitionv1in()|MacroStmt->()|StmtTodo->()andv_compoundv=letkv=v_brace(v_listv_statement_sequencable)vinvin.kcompound(k,all_functions)vandv_statement_sequencable=function|StmtElemv1->letv1=v_statementv1in()|CppDirectiveStmtv1->letv1=v_cpp_directivev1in()|IfdefStmtv1->letv1=v_ifdef_directivev1in()andv_exprStatementv=v_optionv_expressionvandv_labeled=function|Label((v1,v2))->letv1=v_stringv1andv2=v_statementv2in()|Case((v1,v2))->letv1=v_expressionv1andv2=v_statementv2in()|CaseRange((v1,v2,v3))->letv1=v_expressionv1andv2=v_expressionv2andv3=v_statementv3in()|Defaultv1->letv1=v_statementv1in()andv_selection=function|If((v1,v2,v3,v4,v5))->letv1=v_tokv1andv2=v_parenv_expressionv2andv3=v_statementv3andv4=v_optionv_tokv4andv5=v_statementv5in()|Switch((v1,v2,v3))->letv1=v_tokv1andv2=v_parenv_expressionv2andv3=v_statementv3in()andv_iteration=function|While((v1,v2,v3))->letv1=v_tokv1andv2=v_parenv_expressionv2andv3=v_statementv3in()|DoWhile((v1,v2,v3,v4,v5))->letv1=v_tokv1andv2=v_statementv2andv3=v_tokv3andv4=v_parenv_expressionv4andv5=v_tokv5in()|For((v1,v2,v3))->letv1=v_tokv1andv2=v_paren(fun(v1,v2,v3)->letv1=v_wrapv_exprStatementv1andv2=v_wrapv_exprStatementv2andv3=v_wrapv_exprStatementv3in())v2andv3=v_statementv3in()|MacroIteration((v1,v2,v3))->letv1=v_wrap2v_stringv1andv2=v_paren(v_comma_listv_argument)v2andv3=v_statementv3in()andv_jump=function|Gotov1->letv1=v_stringv1in()|Continue->()|Break->()|Return->()|ReturnExprv1->letv1=v_expressionv1in()|GotoComputedv1->letv1=v_expressionv1in()andv_handler(v1,v2,v3)=letv1=v_tokv1andv2=v_parenv_exception_declarationv2andv3=v_compoundv3in()andv_exception_declaration=function|ExnDeclEllipsisv1->letv1=v_tokv1in()|ExnDeclv1->letv1=v_parameterv1in()andv_block_declarationx=letk=function|DeclList((v1,v2))->letv1=v_comma_listv_onedeclv1andv2=v_tokv2in()|MacroDecl((v1,v2,v3,v4))->letv1=v_listv_tokv1andv2=v_wrap2v_stringv2andv3=v_paren(v_comma_listv_argument)v3andv4=v_tokv4in()|UsingDeclv1->letv1=(matchv1with|(v1,v2,v3)->letv1=v_tokv1andv2=v_namev2andv3=v_tokv3in())in()|UsingDirective((v1,v2,v3,v4))->letv1=v_tokv1andv2=v_tokv2andv3=v_namespace_namev3andv4=v_tokv4in()|NameSpaceAlias((v1,v2,v3,v4,v5))->letv1=v_tokv1andv2=v_wrap2v_stringv2andv3=v_tokv3andv4=v_namespace_namev4andv5=v_tokv5in()|Asm((v1,v2,v3,v4))->letv1=v_tokv1andv2=v_optionv_tokv2andv3=v_parenv_asmbodyv3andv4=v_tokv4in()invin.kblock_decl(k,all_functions)xandv_onedecl{v_namei=v_v_namei;v_type=v_v_type;v_storage=v_v_storage}=letarg=v_option(fun(v1,v2)->letv1=v_namev1andv2=v_optionv_initv2in())v_v_nameiinletarg=v_fullTypev_v_typeinletarg=v_storagev_v_storagein()andv_storagev=v_storagebisvandv_storagebis=function|NoSto->()|StoTypedefv1->v_tokv1|Stov1->letv1=v_wrap2v_storageClassv1in()andv_storageClass=function|Auto->()|Static->()|Register->()|Extern->()andv_func_specifier=function|Inline->()|Virtual->()andv_init=function|EqInit((v1,v2))->letv1=v_tokv1andv2=v_initialiserv2in()|ObjInitv1->letv1=v_paren(v_comma_listv_argument)v1in()andv_initialiserx=letkx=matchxwith|InitExprv1->letv1=v_expressionv1in()|InitListv1->letv1=v_brace(v_comma_listv_initialiser)v1in()|InitDesignators((v1,v2,v3))->letv1=v_listv_designatorv1andv2=v_tokv2andv3=v_initialiserv3in()|InitFieldOld((v1,v2,v3))->letv1=v_wrap2v_stringv1andv2=v_tokv2andv3=v_initialiserv3in()|InitIndexOld((v1,v2))->letv1=v_bracketv_expressionv1andv2=v_initialiserv2in()invin.kinit(k,all_functions)xandv_designator=function|DesignatorField((v1,v2))->letv1=v_tokv1andv2=v_wrap2v_stringv2in()|DesignatorIndexv1->letv1=v_bracketv_expressionv1in()|DesignatorRangev1->letv1=v_bracket(fun(v1,v2,v3)->letv1=v_expressionv1andv2=v_tokv2andv3=v_expressionv3in())v1in()andv_asmbody(v1,v2)=letv1=v_listv_tokv1andv2=v_list(v_wrapv_colon)v2in()andv_colon=function|Colonv1->letv1=v_comma_listv_colon_optionv1in()andv_colon_optionv=v_wrapv_colon_optionbisvandv_colon_optionbis=function|ColonMisc->()|ColonExprv1->letv1=v_parenv_expressionv1in()andv_func_definitionx=letk=function{f_name=v_f_name;f_type=v_f_type;f_storage=v_f_storage;f_body=v_f_body}->letarg=v_namev_f_nameinletarg=v_functionTypev_f_typeinletarg=v_storagev_f_storageinletarg=v_compoundv_f_bodyin()invin.kfunc_def(k,all_functions)xandv_functionType{ft_ret=v_ft_ret;ft_params=v_ft_params;ft_dots=v_ft_dots;ft_const=v_ft_const;ft_throw=v_ft_throw}=letarg=v_fullTypev_ft_retinletarg=v_paren(v_comma_listv_parameter)v_ft_paramsinletarg=v_option(fun(v1,v2)->letv1=v_tokv1andv2=v_tokv2in())v_ft_dotsinletarg=v_optionv_tokv_ft_constinletarg=v_optionv_exn_specv_ft_throwin()andv_parameterx=letk=function{p_name=v_p_name;p_type=v_p_type;p_register=v_p_register;p_val=v_p_val}->letarg=v_option(v_wrap2v_string)v_p_nameinletarg=v_fullTypev_p_typeinletarg=v_optionv_tokv_p_registerinletarg=v_option(fun(v1,v2)->letv1=v_tokv1andv2=v_expressionv2in())v_p_valin()invin.kparameter(k,all_functions)xandv_func_or_else=function|FunctionOrMethodv1->letv1=v_func_definitionv1in()|Constructor((v1))->letv1=v_func_definitionv1in()|Destructorv1->letv1=v_func_definitionv1in()andv_exn_spec(v1,v2)=letv1=v_tokv1andv2=v_paren(v_comma_list2v_name)v2in()andv_class_definitionx=letk=function{c_kind=v_c_kind;c_name=v_c_name;c_inherit=v_c_inherit;c_members=v_c_members}->letarg=v_wrap2v_structUnionv_c_kindinletarg=v_optionv_ident_namev_c_nameinletarg=v_option(fun(v1,v2)->letv1=v_tokv1andv2=v_comma_listv_base_clausev2in())v_c_inheritinletarg=v_brace(v_listv_class_member_sequencable)v_c_membersin()invin.kclass_def(k,all_functions)xandv_structUnion=function|Struct->()|Union->()|Class->()andv_base_clause{i_name=v_i_name;i_virtual=v_i_virtual;i_access=v_i_access}=letarg=v_class_namev_i_nameinletarg=v_optionv_tokv_i_virtualinletarg=v_option(v_wrap2v_access_spec)v_i_accessin()andv_access_spec=function|Public->()|Private->()|Protected->()andv_method_decl=function|ConstructorDecl((v1,v2,v3))->letv1=v_wrap2v_stringv1andv2=v_paren(v_comma_listv_parameter)v2andv3=v_tokv3in()|DestructorDecl((v1,v2,v3,v4,v5))->letv1=v_tokv1andv2=v_wrap2v_stringv2andv3=v_paren(v_optionv_tok)v3andv4=v_optionv_exn_specv4andv5=v_tokv5in()|MethodDecl((v1,v2,v3))->letv1=v_onedeclv1andv2=v_option(fun(v1,v2)->letv1=v_tokv1andv2=v_tokv2in())v2andv3=v_tokv3in()andv_class_memberx=letk=function|Access((v1,v2))->letv1=v_wrap2v_access_specv1andv2=v_tokv2in()|MemberField(v1,v2)->letv1=(v_comma_listv_fieldkind)v1inletv2=v_tokv2in()|MemberFuncv1->letv1=v_func_or_elsev1in()|MemberDeclv1->letv1=v_method_declv1in()|QualifiedIdInClass((v1,v2))->letv1=v_namev1andv2=v_tokv2in()|TemplateDeclInClassv1->letv1=(matchv1with|(v1,v2,v3)->letv1=v_tokv1andv2=v_template_parametersv2andv3=v_declarationv3in())in()|UsingDeclInClassv1->letv1=(matchv1with|(v1,v2,v3)->letv1=v_tokv1andv2=v_namev2andv3=v_tokv3in())in()|EmptyFieldv1->letv1=v_tokv1in()invin.kclass_member(k,all_functions)xandv_fieldkindx=letk=function|FieldDeclv1->letv1=v_onedeclv1in()|BitField((v1,v2,v3,v4))->letv1=v_option(v_wrap2v_string)v1andv2=v_tokv2andv3=v_fullTypev3andv4=v_constExpressionv4in()invin.kfieldkind(k,all_functions)xandv_class_member_sequencable=function|ClassElemv1->letv1=v_class_memberv1in()|CppDirectiveStructv1->letv1=v_cpp_directivev1in()|IfdefStructv1->letv1=v_ifdef_directivev1in()andv_cpp_directivex=letk=function|Define((v1,v2,v3,v4))->letv1=v_tokv1andv2=v_wrap2v_stringv2andv3=v_define_kindv3andv4=v_define_valv4in()|Include((v1,v2,v3))->letv1=v_tokv1andv2=v_inc_kindv2andv3=v_stringv3in()|Undefv1->letv1=v_wrap2v_stringv1in()|PragmaAndCov1->letv1=v_tokv1in()invin.kcpp(k,all_functions)xandv_define_kind=function|DefineVar->()|DefineFuncv1->letv1=v_paren(v_comma_list(v_wrapv_string))v1in()andv_define_val=function|DefinePrintWrapper((v1,v2,v3))->letv1=v_tokv1andv2=v_parenv_expressionv2andv3=v_namev3in()|DefineExprv1->letv1=v_expressionv1in()|DefineStmtv1->letv1=v_statementv1in()|DefineTypev1->letv1=v_fullTypev1in()|DefineDoWhileZerov1->letv1=v_wrapv_statementv1in()|DefineFunctionv1->letv1=v_func_definitionv1in()|DefineInitv1->letv1=v_initialiserv1in()|DefineTextv1->letv1=v_wrapv_stringv1in()|DefineEmpty->()|DefineTodo->()andv_inc_kind=function|Local->()|Standard->()|Weird->()andv_inc_elemv=v_stringvandv_ifdef_directivev=v_wrap2v_ifdefkindvandv_ifdefkind=function|Ifdef->()|IfdefElse->()|IfdefElseif->()|IfdefEndif->()andv_declarationx=letk=function|BlockDeclv1->letv1=v_block_declarationv1in()|Funcv1->letv1=v_func_or_elsev1in()|TemplateDecl(v1,v2,v3)->letv1=v_tokv1andv2=v_template_parametersv2andv3=v_declarationv3in()|TemplateSpecialization((v1,v2,v3))->letv1=v_tokv1andv2=v_anglev_unitv2andv3=v_declarationv3in()|ExternC((v1,v2,v3))->letv1=v_tokv1andv2=v_tokv2andv3=v_declarationv3in()|ExternCList((v1,v2,v3))->letv1=v_tokv1andv2=v_tokv2andv3=v_brace(v_listv_declaration_sequencable)v3in()|NameSpace((v1,v2,v3))->letv1=v_tokv1andv2=v_wrap2v_stringv2andv3=v_brace(v_listv_declaration_sequencable)v3in()|NameSpaceExtend((v1,v2))->letv1=v_stringv1andv2=v_listv_declaration_sequencablev2in()|NameSpaceAnon((v1,v2))->letv1=v_tokv1andv2=v_brace(v_listv_declaration_sequencable)v2in()|EmptyDefv1->letv1=v_tokv1in()|DeclTodo->()invin.kdeclaration(k,all_functions)xandv_template_parameterv=v_parametervandv_template_parametersv=v_angle(v_comma_listv_template_parameter)vandv_declaration_sequencablex=letk=function|NotParsedCorrectlyv1->letv1=v_listv_tokv1in()|DeclElemv1->letv1=v_declarationv1in()|CppDirectiveDeclv1->letv1=v_cpp_directivev1in()|IfdefDeclv1->letv1=v_ifdef_directivev1in()|MacroTop((v1,v2,v3))->letv1=v_wrap2v_stringv1andv2=v_paren(v_comma_listv_argument)v2andv3=v_optionv_tokv3in()|MacroVarTop((v1,v2))->letv1=v_wrap2v_stringv1andv2=v_tokv2in()invin.ktoplevel(k,all_functions)xandv_toplevelv=v_declaration_sequencablevandv_programv=v_listv_toplevelvandv_any=function|Programv1->letv1=v_programv1in()|Toplevelv1->letv1=v_toplevelv1in()|BlockDecl2v1->letv1=v_block_declarationv1in()|Stmtv1->letv1=v_statementv1in()|Stmtsv1->letv1=v_listv_statementv1in()|Exprv1->letv1=v_expressionv1in()|Initv1->letv1=v_initialiserv1in()|Typev1->letv1=v_fullTypev1in()|Namev1->letv1=v_namev1in()|Cppv1->letv1=v_cpp_directivev1in()|ClassDefv1->letv1=v_class_definitionv1in()|FuncDefv1->letv1=v_func_definitionv1in()|FuncOrElsev1->letv1=v_func_or_elsev1in()|Constantv1->letv1=v_constantv1in()|Argumentv1->letv1=v_argumentv1in()|Parameterv1->letv1=v_parameterv1in()|Bodyv1->letv1=v_compoundv1in()|Infov1->letv1=v_infov1in()|InfoListv1->letv1=v_listv_infov1in()|ClassMemberv1->letv1=v_class_memberv1in()|OneDeclv1->letv1=v_onedeclv1in()(* end of auto generation *)andall_functionsx=v_anyxinv_any