123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137(* 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.
*)(* generated by ocamltarzan: ocamltarzan -choice vof ast_cpp.ml *)openCst_cppmoduleAst=Cst_cppmoduleMPI=Meta_parse_infoletrecvof_infox=Meta_parse_info.vof_info_adjustable_precisionxandvof_tokv=vof_infovandvof_wrap_of_a(v1,v2)=letv1=_of_av1andv2=Ocaml.vof_listvof_infov2inOcaml.VTuple[v1;v2]andvof_wrap2_of_a(v1,v2)=letv1=_of_av1andv2=vof_infov2inOcaml.VTuple[v1;v2]andvof_paren_of_a(v1,v2,v3)=if!MPI._current_precision.MPI.token_infothenletv1=vof_tokv1andv2=_of_av2andv3=vof_tokv3inOcaml.VTuple[v1;v2;v3]else_of_av2andvof_brace_of_a(v1,v2,v3)=if!MPI._current_precision.MPI.token_infothenletv1=vof_tokv1andv2=_of_av2andv3=vof_tokv3inOcaml.VTuple[v1;v2;v3]else_of_av2andvof_bracket_of_a(v1,v2,v3)=if!MPI._current_precision.MPI.token_infothenletv1=vof_tokv1andv2=_of_av2andv3=vof_tokv3inOcaml.VTuple[v1;v2;v3]else_of_av2andvof_angle_of_a(v1,v2,v3)=letv1=vof_tokv1andv2=_of_av2andv3=vof_tokv3inOcaml.VTuple[v1;v2;v3]andvof_comma_list_of_axs=if!MPI._current_precision.MPI.token_infothenOcaml.vof_list(vof_wrap_of_a)xselseOcaml.vof_list_of_a(Ast.uncommaxs)andvof_comma_list2_of_a=Ocaml.vof_list(Ocaml.vof_either_of_avof_tok)letrecvof_name(v1,v2,v3)=letv1=Ocaml.vof_optionvof_tokv1andv2=Ocaml.vof_list(fun(v1,v2)->letv1=vof_qualifierv1andv2=vof_tokv2inOcaml.VTuple[v1;v2])v2andv3=vof_identv3inOcaml.VTuple[v1;v2;v3]andvof_ident=function|IdIdentv1->letv1=vof_wrap2Ocaml.vof_stringv1inOcaml.VSum(("IdIdent",[v1]))|IdOperator((v1,v2))->letv1=vof_tokv1andv2=(matchv2with|(v1,v2)->letv1=vof_operatorv1andv2=Ocaml.vof_listvof_tokv2inOcaml.VTuple[v1;v2])inOcaml.VSum(("IdOperator",[v1;v2]))|IdConverter((v1,v2))->letv1=vof_tokv1andv2=vof_fullTypev2inOcaml.VSum(("IdConverter",[v1;v2]))|IdDestructor((v1,v2))->letv1=vof_tokv1andv2=vof_wrap2Ocaml.vof_stringv2inOcaml.VSum(("IdDestructor",[v1;v2]))|IdTemplateId((v1,v2))->letv1=vof_wrap2Ocaml.vof_stringv1andv2=vof_template_argumentsv2inOcaml.VSum(("IdTemplateId",[v1;v2]))andvof_template_argumentsv=vof_angle(vof_comma_listvof_template_argument)vandvof_template_argumentv=Ocaml.vof_eithervof_fullTypevof_expressionvandvof_qualifier=function|QClassnamev1->letv1=vof_wrap2Ocaml.vof_stringv1inOcaml.VSum(("QClassname",[v1]))|QTemplateId((v1,v2))->letv1=vof_wrap2Ocaml.vof_stringv1andv2=vof_template_argumentsv2inOcaml.VSum(("QTemplateId",[v1;v2]))andvof_class_namev=vof_namevandvof_namespace_namev=vof_namevandvof_ident_namev=vof_namevandvof_either_ft_or_exprv=Ocaml.vof_eithervof_fullTypevof_expressionvandvof_fullType(v1,v2)=letv1=vof_typeQualifierv1andv2=vof_typeCv2inOcaml.VTuple[v1;v2]andvof_typeCv=vof_wrapvof_typeCbisvandvof_typeCbis=function|BaseTypev1->letv1=vof_baseTypev1inOcaml.VSum(("BaseType",[v1]))|Pointerv1->letv1=vof_fullTypev1inOcaml.VSum(("Pointer",[v1]))|Referencev1->letv1=vof_fullTypev1inOcaml.VSum(("Reference",[v1]))|Array((v1,v2))->letv1=vof_bracket(Ocaml.vof_optionvof_constExpression)v1andv2=vof_fullTypev2inOcaml.VSum(("Array",[v1;v2]))|FunctionTypev1->letv1=vof_functionTypev1inOcaml.VSum(("FunctionType",[v1]))|EnumDef((v1,v2,v3))->letv1=vof_tokv1andv2=Ocaml.vof_option(vof_wrap2Ocaml.vof_string)v2andv3=vof_brace(vof_comma_listvof_enum_elem)v3inOcaml.VSum(("EnumDed",[v1;v2;v3]))|StructDefv1->letv1=vof_class_definitionv1inOcaml.VSum(("StructDef",[v1]))|EnumName((v1,v2))->letv1=vof_tokv1andv2=vof_wrap2Ocaml.vof_stringv2inOcaml.VSum(("EnumName",[v1;v2]))|StructUnionName((v1,v2))->letv1=vof_wrap2vof_structUnionv1andv2=vof_wrap2Ocaml.vof_stringv2inOcaml.VSum(("StructUnionName",[v1;v2]))|TypeName((v1))->letv1=vof_namev1inOcaml.VSum(("TypeName",[v1]))|TypenameKwd((v1,v2))->letv1=vof_tokv1andv2=vof_namev2inOcaml.VSum(("TypenameKwd",[v1;v2]))|TypeOf((v1,v2))->letv1=vof_tokv1andv2=vof_parenvof_either_ft_or_exprv2inOcaml.VSum(("TypeOf",[v1;v2]))|ParenTypev1->letv1=vof_parenvof_fullTypev1inOcaml.VSum(("ParenType",[v1]))andvof_baseType=function|Void->Ocaml.VSum(("Void",[]))|IntTypev1->letv1=vof_intTypev1inOcaml.VSum(("IntType",[v1]))|FloatTypev1->letv1=vof_floatTypev1inOcaml.VSum(("FloatType",[v1]))andvof_intType=function|CChar->Ocaml.VSum(("CChar",[]))|Siv1->letv1=vof_signedv1inOcaml.VSum(("Si",[v1]))|CBool->Ocaml.VSum(("CBool",[]))|WChar_t->Ocaml.VSum(("WChar_t",[]))andvof_signed(v1,v2)=letv1=vof_signv1andv2=vof_basev2inOcaml.VTuple[v1;v2]andvof_base=function|CChar2->Ocaml.VSum(("CChar2",[]))|CShort->Ocaml.VSum(("CShort",[]))|CInt->Ocaml.VSum(("CInt",[]))|CLong->Ocaml.VSum(("CLong",[]))|CLongLong->Ocaml.VSum(("CLongLong",[]))andvof_sign=function|Signed->Ocaml.VSum(("Signed",[]))|UnSigned->Ocaml.VSum(("UnSigned",[]))andvof_floatType=function|CFloat->Ocaml.VSum(("CFloat",[]))|CDouble->Ocaml.VSum(("CDouble",[]))|CLongDouble->Ocaml.VSum(("CLongDouble",[]))andvof_enum_elem{e_name=v_e_name;e_val=v_e_val}=letbnds=[]inletarg=Ocaml.vof_option(fun(v1,v2)->letv1=vof_tokv1andv2=vof_constExpressionv2inOcaml.VTuple[v1;v2])v_e_valinletbnd=("e_val",arg)inletbnds=bnd::bndsinletarg=vof_wrap2Ocaml.vof_stringv_e_nameinletbnd=("e_name",arg)inletbnds=bnd::bndsinOcaml.VDictbndsandvof_typeQualifier{const=v_const;volatile=v_volatile}=ifnot!MPI._current_precision.MPI.type_infothenOcaml.VUnitelseletbnds=[]inletarg=Ocaml.vof_optionvof_tokv_volatileinletbnd=("volatile",arg)inletbnds=bnd::bndsinletarg=Ocaml.vof_optionvof_tokv_constinletbnd=("const",arg)inletbnds=bnd::bndsinOcaml.VDictbndsandvof_expressionv=vof_wrapvof_expressionbisvandvof_expressionbis=function|Id((v1,v2))->letv1=vof_namev1andv2=vof_ident_infov2inOcaml.VSum(("Id",[v1;v2]))|Cv1->letv1=vof_constantv1inOcaml.VSum(("C",[v1]))|Ellipsesv1->letv1=vof_tokv1inOcaml.VSum(("Ellipses",[v1]))|Call((v1,v2))->letv1=vof_expressionv1andv2=vof_paren(vof_comma_listvof_argument)v2inOcaml.VSum(("Call",[v1;v2]))|CondExpr((v1,v2,v3))->letv1=vof_expressionv1andv2=Ocaml.vof_optionvof_expressionv2andv3=vof_expressionv3inOcaml.VSum(("CondExpr",[v1;v2;v3]))|Sequence((v1,v2))->letv1=vof_expressionv1andv2=vof_expressionv2inOcaml.VSum(("Sequence",[v1;v2]))|Assignment((v1,v2,v3))->letv1=vof_expressionv1andv2=vof_assignOpv2andv3=vof_expressionv3inOcaml.VSum(("Assignment",[v1;v2;v3]))|Postfix((v1,v2))->letv1=vof_expressionv1andv2=vof_fixOpv2inOcaml.VSum(("Postfix",[v1;v2]))|Infix((v1,v2))->letv1=vof_expressionv1andv2=vof_fixOpv2inOcaml.VSum(("Infix",[v1;v2]))|Unary((v1,v2))->letv1=vof_expressionv1andv2=vof_unaryOpv2inOcaml.VSum(("Unary",[v1;v2]))|Binary((v1,v2,v3))->letv1=vof_expressionv1andv2=vof_binaryOpv2andv3=vof_expressionv3inOcaml.VSum(("Binary",[v1;v2;v3]))|ArrayAccess((v1,v2))->letv1=vof_expressionv1andv2=vof_bracketvof_expressionv2inOcaml.VSum(("ArrayAccess",[v1;v2]))|RecordAccess((v1,v2))->letv1=vof_expressionv1andv2=vof_namev2inOcaml.VSum(("RecordAccess",[v1;v2]))|RecordPtAccess((v1,v2))->letv1=vof_expressionv1andv2=vof_namev2inOcaml.VSum(("RecordPtAccess",[v1;v2]))|RecordStarAccess((v1,v2))->letv1=vof_expressionv1andv2=vof_expressionv2inOcaml.VSum(("RecordStarAccess",[v1;v2]))|RecordPtStarAccess((v1,v2))->letv1=vof_expressionv1andv2=vof_expressionv2inOcaml.VSum(("RecordPtStarAccess",[v1;v2]))|SizeOfExpr((v1,v2))->letv1=vof_tokv1andv2=vof_expressionv2inOcaml.VSum(("SizeOfExpr",[v1;v2]))|SizeOfType((v1,v2))->letv1=vof_tokv1andv2=vof_parenvof_fullTypev2inOcaml.VSum(("SizeOfType",[v1;v2]))|Cast((v1,v2))->letv1=vof_parenvof_fullTypev1andv2=vof_expressionv2inOcaml.VSum(("Cast",[v1;v2]))|StatementExprv1->letv1=vof_parenvof_compoundv1inOcaml.VSum(("StatementExpr",[v1]))|GccConstructor((v1,v2))->letv1=vof_parenvof_fullTypev1andv2=vof_brace(vof_comma_listvof_initialiser)v2inOcaml.VSum(("GccConstructor",[v1;v2]))|Thisv1->letv1=vof_tokv1inOcaml.VSum(("This",[v1]))|ConstructedObject((v1,v2))->letv1=vof_fullTypev1andv2=vof_paren(vof_comma_listvof_argument)v2inOcaml.VSum(("ConstructedObject",[v1;v2]))|TypeId((v1,v2))->letv1=vof_tokv1andv2=vof_parenvof_either_ft_or_exprv2inOcaml.VSum(("TypeId",[v1;v2]))|CplusplusCast((v1,v2,v3))->letv1=vof_wrap2vof_cast_operatorv1andv2=vof_anglevof_fullTypev2andv3=vof_parenvof_expressionv3inOcaml.VSum(("CplusplusCast",[v1;v2;v3]))|New((v1,v2,v3,v4,v5))->letv1=Ocaml.vof_optionvof_tokv1andv2=vof_tokv2andv3=Ocaml.vof_option(vof_paren(vof_comma_listvof_argument))v3andv4=vof_fullTypev4andv5=Ocaml.vof_option(vof_paren(vof_comma_listvof_argument))v5inOcaml.VSum(("New",[v1;v2;v3;v4;v5]))|Delete((v1,v2))->letv1=Ocaml.vof_optionvof_tokv1andv2=vof_expressionv2inOcaml.VSum(("Delete",[v1;v2]))|DeleteArray((v1,v2))->letv1=Ocaml.vof_optionvof_tokv1andv2=vof_expressionv2inOcaml.VSum(("DeleteArray",[v1;v2]))|Throwv1->letv1=Ocaml.vof_optionvof_expressionv1inOcaml.VSum(("Throw",[v1]))|ParenExprv1->letv1=vof_parenvof_expressionv1inOcaml.VSum(("ParenExpr",[v1]))|ExprTodo->Ocaml.VSum(("ExprTodo",[]))andvof_ident_info{i_scope=v_i_scope}=letbnds=[]inletarg=Scope_code.vof_scopev_i_scopeinletbnd=("i_scope",arg)inletbnds=bnd::bndsinOcaml.VDictbndsandvof_argumentv=Ocaml.vof_eithervof_expressionvof_weird_argumentvandvof_weird_argument=function|ArgTypev1->letv1=vof_fullTypev1inOcaml.VSum(("ArgType",[v1]))|ArgActionv1->letv1=vof_action_macrov1inOcaml.VSum(("ArgAction",[v1]))andvof_action_macro=function|ActMiscv1->letv1=Ocaml.vof_listvof_tokv1inOcaml.VSum(("ActMisc",[v1]))andvof_constant=function|Stringv1->letv1=(matchv1with|(v1,v2)->letv1=Ocaml.vof_stringv1andv2=vof_isWcharv2inOcaml.VTuple[v1;v2])inOcaml.VSum(("String",[v1]))|MultiString->Ocaml.VSum(("MultiString",[]))|Charv1->letv1=(matchv1with|(v1,v2)->letv1=Ocaml.vof_stringv1andv2=vof_isWcharv2inOcaml.VTuple[v1;v2])inOcaml.VSum(("Char",[v1]))|Intv1->letv1=Ocaml.vof_stringv1inOcaml.VSum(("Int",[v1]))|Floatv1->letv1=(matchv1with|(v1,v2)->letv1=Ocaml.vof_stringv1andv2=vof_floatTypev2inOcaml.VTuple[v1;v2])inOcaml.VSum(("Float",[v1]))|Boolv1->letv1=Ocaml.vof_boolv1inOcaml.VSum(("Bool",[v1]))andvof_isWchar=function|IsWchar->Ocaml.VSum(("IsWchar",[]))|IsChar->Ocaml.VSum(("IsChar",[]))andvof_unaryOp=function|GetRef->Ocaml.VSum(("GetRef",[]))|DeRef->Ocaml.VSum(("DeRef",[]))|UnPlus->Ocaml.VSum(("UnPlus",[]))|UnMinus->Ocaml.VSum(("UnMinus",[]))|Tilde->Ocaml.VSum(("Tilde",[]))|Not->Ocaml.VSum(("Not",[]))|GetRefLabel->Ocaml.VSum(("GetRefLabel",[]))andvof_assignOp=function|SimpleAssign->Ocaml.VSum(("SimpleAssign",[]))|OpAssignv1->letv1=vof_arithOpv1inOcaml.VSum(("OpAssign",[v1]))andvof_fixOp=function|Dec->Ocaml.VSum(("Dec",[]))|Inc->Ocaml.VSum(("Inc",[]))andvof_binaryOp=function|Arithv1->letv1=vof_arithOpv1inOcaml.VSum(("Arith",[v1]))|Logicalv1->letv1=vof_logicalOpv1inOcaml.VSum(("Logical",[v1]))andvof_arithOp=function|Plus->Ocaml.VSum(("Plus",[]))|Minus->Ocaml.VSum(("Minus",[]))|Mul->Ocaml.VSum(("Mul",[]))|Div->Ocaml.VSum(("Div",[]))|Mod->Ocaml.VSum(("Mod",[]))|DecLeft->Ocaml.VSum(("DecLeft",[]))|DecRight->Ocaml.VSum(("DecRight",[]))|And->Ocaml.VSum(("And",[]))|Or->Ocaml.VSum(("Or",[]))|Xor->Ocaml.VSum(("Xor",[]))andvof_logicalOp=function|Inf->Ocaml.VSum(("Inf",[]))|Sup->Ocaml.VSum(("Sup",[]))|InfEq->Ocaml.VSum(("InfEq",[]))|SupEq->Ocaml.VSum(("SupEq",[]))|Eq->Ocaml.VSum(("Eq",[]))|NotEq->Ocaml.VSum(("NotEq",[]))|AndLog->Ocaml.VSum(("AndLog",[]))|OrLog->Ocaml.VSum(("OrLog",[]))andvof_ptrOp=function|PtrStarOp->Ocaml.VSum(("PtrStarOp",[]))|PtrOp->Ocaml.VSum(("PtrOp",[]))andvof_allocOp=function|NewOp->Ocaml.VSum(("NewOp",[]))|DeleteOp->Ocaml.VSum(("DeleteOp",[]))|NewArrayOp->Ocaml.VSum(("NewArrayOp",[]))|DeleteArrayOp->Ocaml.VSum(("DeleteArrayOp",[]))andvof_accessop=function|ParenOp->Ocaml.VSum(("ParenOp",[]))|ArrayOp->Ocaml.VSum(("ArrayOp",[]))andvof_operator=function|BinaryOpv1->letv1=vof_binaryOpv1inOcaml.VSum(("BinaryOp",[v1]))|AssignOpv1->letv1=vof_assignOpv1inOcaml.VSum(("AssignOp",[v1]))|FixOpv1->letv1=vof_fixOpv1inOcaml.VSum(("FixOp",[v1]))|PtrOpOpv1->letv1=vof_ptrOpv1inOcaml.VSum(("PtrOpOp",[v1]))|AccessOpv1->letv1=vof_accessopv1inOcaml.VSum(("AccessOp",[v1]))|AllocOpv1->letv1=vof_allocOpv1inOcaml.VSum(("AllocOp",[v1]))|UnaryTildeOp->Ocaml.VSum(("UnaryTildeOp",[]))|UnaryNotOp->Ocaml.VSum(("UnaryNotOp",[]))|CommaOp->Ocaml.VSum(("CommaOp",[]))andvof_cast_operator=function|Static_cast->Ocaml.VSum(("Static_cast",[]))|Dynamic_cast->Ocaml.VSum(("Dynamic_cast",[]))|Const_cast->Ocaml.VSum(("Const_cast",[]))|Reinterpret_cast->Ocaml.VSum(("Reinterpret_cast",[]))andvof_constExpressionv=vof_expressionvandvof_statementv=vof_wrapvof_statementbisvandvof_statementbis=function|Compoundv1->letv1=vof_compoundv1inOcaml.VSum(("Compound",[v1]))|ExprStatementv1->letv1=vof_exprStatementv1inOcaml.VSum(("ExprStatement",[v1]))|Labeledv1->letv1=vof_labeledv1inOcaml.VSum(("Labeled",[v1]))|Selectionv1->letv1=vof_selectionv1inOcaml.VSum(("Selection",[v1]))|Iterationv1->letv1=vof_iterationv1inOcaml.VSum(("Iteration",[v1]))|Jumpv1->letv1=vof_jumpv1inOcaml.VSum(("Jump",[v1]))|DeclStmtv1->letv1=vof_block_declarationv1inOcaml.VSum(("DeclStmt",[v1]))|Try((v1,v2,v3))->letv1=vof_tokv1andv2=vof_compoundv2andv3=Ocaml.vof_listvof_handlerv3inOcaml.VSum(("Try",[v1;v2;v3]))|NestedFuncv1->letv1=vof_func_definitionv1inOcaml.VSum(("NestedFunc",[v1]))|MacroStmt->Ocaml.VSum(("MacroStmt",[]))|StmtTodo->Ocaml.VSum(("StmtTodo",[]))andvof_compoundv=vof_brace(Ocaml.vof_listvof_statement_sequencable)vandvof_statement_sequencable=function|StmtElemv1->letv1=vof_statementv1inOcaml.VSum(("StmtElem",[v1]))|CppDirectiveStmtv1->letv1=vof_cpp_directivev1inOcaml.VSum(("CppDirectiveStmt",[v1]))|IfdefStmtv1->letv1=vof_ifdef_directivev1inOcaml.VSum(("IfdefStmt",[v1]))andvof_exprStatementv=Ocaml.vof_optionvof_expressionvandvof_labeled=function|Label((v1,v2))->letv1=Ocaml.vof_stringv1andv2=vof_statementv2inOcaml.VSum(("Label",[v1;v2]))|Case((v1,v2))->letv1=vof_expressionv1andv2=vof_statementv2inOcaml.VSum(("Case",[v1;v2]))|CaseRange((v1,v2,v3))->letv1=vof_expressionv1andv2=vof_expressionv2andv3=vof_statementv3inOcaml.VSum(("CaseRange",[v1;v2;v3]))|Defaultv1->letv1=vof_statementv1inOcaml.VSum(("Default",[v1]))andvof_selection=function|If((v1,v2,v3,v4,v5))->letv1=vof_tokv1andv2=vof_parenvof_expressionv2andv3=vof_statementv3andv4=Ocaml.vof_optionvof_tokv4andv5=vof_statementv5inOcaml.VSum(("If",[v1;v2;v3;v4;v5]))|Switch((v1,v2,v3))->letv1=vof_tokv1andv2=vof_parenvof_expressionv2andv3=vof_statementv3inOcaml.VSum(("Switch",[v1;v2;v3]))andvof_iteration=function|While((v1,v2,v3))->letv1=vof_tokv1andv2=vof_parenvof_expressionv2andv3=vof_statementv3inOcaml.VSum(("While",[v1;v2;v3]))|DoWhile((v1,v2,v3,v4,v5))->letv1=vof_tokv1andv2=vof_statementv2andv3=vof_tokv3andv4=vof_parenvof_expressionv4andv5=vof_tokv5inOcaml.VSum(("DoWhile",[v1;v2;v3;v4;v5]))|For((v1,v2,v3))->letv1=vof_tokv1andv2=vof_paren(fun(v1,v2,v3)->letv1=vof_wrapvof_exprStatementv1andv2=vof_wrapvof_exprStatementv2andv3=vof_wrapvof_exprStatementv3inOcaml.VTuple[v1;v2;v3])v2andv3=vof_statementv3inOcaml.VSum(("For",[v1;v2;v3]))|MacroIteration((v1,v2,v3))->letv1=vof_wrap2Ocaml.vof_stringv1andv2=vof_paren(vof_comma_listvof_argument)v2andv3=vof_statementv3inOcaml.VSum(("MacroIteration",[v1;v2;v3]))andvof_jump=function|Gotov1->letv1=Ocaml.vof_stringv1inOcaml.VSum(("Goto",[v1]))|Continue->Ocaml.VSum(("Continue",[]))|Break->Ocaml.VSum(("Break",[]))|Return->Ocaml.VSum(("Return",[]))|ReturnExprv1->letv1=vof_expressionv1inOcaml.VSum(("ReturnExpr",[v1]))|GotoComputedv1->letv1=vof_expressionv1inOcaml.VSum(("GotoComputed",[v1]))andvof_handler(v1,v2,v3)=letv1=vof_tokv1andv2=vof_parenvof_exception_declarationv2andv3=vof_compoundv3inOcaml.VTuple[v1;v2;v3]andvof_exception_declaration=function|ExnDeclEllipsisv1->letv1=vof_tokv1inOcaml.VSum(("ExnDeclEllipsis",[v1]))|ExnDeclv1->letv1=vof_parameterv1inOcaml.VSum(("ExnDecl",[v1]))andvof_block_declaration=function|DeclList((v1,v2))->letv1=vof_comma_listvof_onedeclv1andv2=vof_tokv2inOcaml.VSum(("DeclList",[v1;v2]))|MacroDecl((v1,v2,v3,v4))->letv1=Ocaml.vof_listvof_tokv1andv2=vof_wrap2Ocaml.vof_stringv2andv3=vof_paren(vof_comma_listvof_argument)v3andv4=vof_tokv4inOcaml.VSum(("MacroDecl",[v1;v2;v3;v4]))|UsingDeclv1->letv1=(matchv1with|(v1,v2,v3)->letv1=vof_tokv1andv2=vof_namev2andv3=vof_tokv3inOcaml.VTuple[v1;v2;v3])inOcaml.VSum(("UsingDecl",[v1]))|UsingDirective((v1,v2,v3,v4))->letv1=vof_tokv1andv2=vof_tokv2andv3=vof_namespace_namev3andv4=vof_tokv4inOcaml.VSum(("UsingDirective",[v1;v2;v3;v4]))|NameSpaceAlias((v1,v2,v3,v4,v5))->letv1=vof_tokv1andv2=vof_wrap2Ocaml.vof_stringv2andv3=vof_tokv3andv4=vof_namespace_namev4andv5=vof_tokv5inOcaml.VSum(("NameSpaceAlias",[v1;v2;v3;v4;v5]))|Asm((v1,v2,v3,v4))->letv1=vof_tokv1andv2=Ocaml.vof_optionvof_tokv2andv3=vof_parenvof_asmbodyv3andv4=vof_tokv4inOcaml.VSum(("Asm",[v1;v2;v3;v4]))andvof_onedecl{v_namei=v_v_namei;v_type=v_v_type;v_storage=v_v_storage}=letbnds=[]inletarg=vof_storagev_v_storageinletbnd=("v_storage",arg)inletbnds=bnd::bndsinletarg=vof_fullTypev_v_typeinletbnd=("v_type",arg)inletbnds=bnd::bndsinletarg=Ocaml.vof_option(fun(v1,v2)->letv1=vof_namev1andv2=Ocaml.vof_optionvof_initv2inOcaml.VTuple[v1;v2])v_v_nameiinletbnd=("v_namei",arg)inletbnds=bnd::bndsinOcaml.VDictbndsandvof_storagev=vof_storagebisvandvof_storagebis=function|NoSto->Ocaml.VSum(("NoSto",[]))|StoTypedefv1->letv1=vof_tokv1inOcaml.VSum(("StoTypedef",[v1]))|Stov1->letv1=vof_wrap2vof_storageClassv1inOcaml.VSum(("Sto",[v1]))andvof_storageClass=function|Auto->Ocaml.VSum(("Auto",[]))|Static->Ocaml.VSum(("Static",[]))|Register->Ocaml.VSum(("Register",[]))|Extern->Ocaml.VSum(("Extern",[]))andvof_init=function|EqInit((v1,v2))->letv1=vof_tokv1andv2=vof_initialiserv2inOcaml.VSum(("EqInit",[v1;v2]))|ObjInitv1->letv1=vof_paren(vof_comma_listvof_argument)v1inOcaml.VSum(("ObjInit",[v1]))andvof_initialiser=function|InitExprv1->letv1=vof_expressionv1inOcaml.VSum(("InitExpr",[v1]))|InitListv1->letv1=vof_brace(vof_comma_listvof_initialiser)v1inOcaml.VSum(("InitList",[v1]))|InitDesignators((v1,v2,v3))->letv1=Ocaml.vof_listvof_designatorv1andv2=vof_tokv2andv3=vof_initialiserv3inOcaml.VSum(("InitDesignators",[v1;v2;v3]))|InitFieldOld((v1,v2,v3))->letv1=vof_wrap2Ocaml.vof_stringv1andv2=vof_tokv2andv3=vof_initialiserv3inOcaml.VSum(("InitFieldOld",[v1;v2;v3]))|InitIndexOld((v1,v2))->letv1=vof_bracketvof_expressionv1andv2=vof_initialiserv2inOcaml.VSum(("InitIndexOld",[v1;v2]))andvof_designator=function|DesignatorField((v1,v2))->letv1=vof_tokv1andv2=vof_wrap2Ocaml.vof_stringv2inOcaml.VSum(("DesignatorField",[v1;v2]))|DesignatorIndexv1->letv1=vof_bracketvof_expressionv1inOcaml.VSum(("DesignatorIndex",[v1]))|DesignatorRangev1->letv1=vof_bracket(fun(v1,v2,v3)->letv1=vof_expressionv1andv2=vof_tokv2andv3=vof_expressionv3inOcaml.VTuple[v1;v2;v3])v1inOcaml.VSum(("DesignatorRange",[v1]))andvof_asmbody(v1,v2)=letv1=Ocaml.vof_listvof_tokv1andv2=Ocaml.vof_list(vof_wrapvof_colon)v2inOcaml.VTuple[v1;v2]andvof_colon=function|Colonv1->letv1=vof_comma_listvof_colon_optionv1inOcaml.VSum(("Colon",[v1]))andvof_colon_optionv=vof_wrapvof_colon_optionbisvandvof_colon_optionbis=function|ColonMisc->Ocaml.VSum(("ColonMisc",[]))|ColonExprv1->letv1=vof_parenvof_expressionv1inOcaml.VSum(("ColonExpr",[v1]))andvof_func_definition{f_name=v_f_name;f_type=v_f_type;f_storage=v_f_storage;f_body=v_f_body}=letbnds=[]inletarg=vof_compoundv_f_bodyinletbnd=("f_body",arg)inletbnds=bnd::bndsinletarg=vof_storagev_f_storageinletbnd=("f_storage",arg)inletbnds=bnd::bndsinletarg=vof_functionTypev_f_typeinletbnd=("f_type",arg)inletbnds=bnd::bndsinletarg=vof_namev_f_nameinletbnd=("f_name",arg)inletbnds=bnd::bndsinOcaml.VDictbndsandvof_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}=letbnds=[]inletarg=Ocaml.vof_optionvof_exn_specv_ft_throwinletbnd=("ft_throw",arg)inletbnds=bnd::bndsinletarg=Ocaml.vof_optionvof_tokv_ft_constinletbnd=("ft_const",arg)inletbnds=bnd::bndsinletarg=Ocaml.vof_option(fun(v1,v2)->letv1=vof_tokv1andv2=vof_tokv2inOcaml.VTuple[v1;v2])v_ft_dotsinletbnd=("ft_dots",arg)inletbnds=bnd::bndsinletarg=vof_paren(vof_comma_listvof_parameter)v_ft_paramsinletbnd=("ft_params",arg)inletbnds=bnd::bndsinletarg=vof_fullTypev_ft_retinletbnd=("ft_ret",arg)inletbnds=bnd::bndsinOcaml.VDictbndsandvof_parameter{p_name=v_p_name;p_type=v_p_type;p_register=v_p_register;p_val=v_p_val}=letbnds=[]inletarg=Ocaml.vof_option(fun(v1,v2)->letv1=vof_tokv1andv2=vof_expressionv2inOcaml.VTuple[v1;v2])v_p_valinletbnd=("p_val",arg)inletbnds=bnd::bndsinletarg=Ocaml.vof_optionvof_tokv_p_registerinletbnd=("p_register",arg)inletbnds=bnd::bndsinletarg=vof_fullTypev_p_typeinletbnd=("p_type",arg)inletbnds=bnd::bndsinletarg=Ocaml.vof_option(vof_wrap2Ocaml.vof_string)v_p_nameinletbnd=("p_name",arg)inletbnds=bnd::bndsinOcaml.VDictbndsandvof_func_or_else=function|FunctionOrMethodv1->letv1=vof_func_definitionv1inOcaml.VSum(("FunctionOrMethod",[v1]))|Constructor((v1))->letv1=vof_func_definitionv1inOcaml.VSum(("Constructor",[v1]))|Destructorv1->letv1=vof_func_definitionv1inOcaml.VSum(("Destructor",[v1]))andvof_exn_spec(v1,v2)=letv1=vof_tokv1andv2=vof_paren(vof_comma_list2vof_name)v2inOcaml.VTuple[v1;v2]andvof_class_definition{c_kind=v_c_kind;c_name=v_c_name;c_inherit=v_c_inherit;c_members=v_c_members}=letbnds=[]inletarg=vof_brace(Ocaml.vof_listvof_class_member_sequencable)v_c_membersinletbnd=("c_members",arg)inletbnds=bnd::bndsinletarg=Ocaml.vof_option(fun(v1,v2)->letv1=vof_tokv1andv2=vof_comma_listvof_base_clausev2inOcaml.VTuple[v1;v2])v_c_inheritinletbnd=("c_inherit",arg)inletbnds=bnd::bndsinletarg=Ocaml.vof_optionvof_ident_namev_c_nameinletbnd=("c_name",arg)inletbnds=bnd::bndsinletarg=vof_wrap2vof_structUnionv_c_kindinletbnd=("c_kind",arg)inletbnds=bnd::bndsinOcaml.VDictbndsandvof_structUnion=function|Struct->Ocaml.VSum(("Struct",[]))|Union->Ocaml.VSum(("Union",[]))|Class->Ocaml.VSum(("Class",[]))andvof_base_clause{i_name=v_i_name;i_virtual=v_i_virtual;i_access=v_i_access}=letbnds=[]inletarg=Ocaml.vof_option(vof_wrap2vof_access_spec)v_i_accessinletbnd=("i_access",arg)inletbnds=bnd::bndsinletarg=Ocaml.vof_optionvof_tokv_i_virtualinletbnd=("i_virtual",arg)inletbnds=bnd::bndsinletarg=vof_class_namev_i_nameinletbnd=("i_name",arg)inletbnds=bnd::bndsinOcaml.VDictbndsandvof_access_spec=function|Public->Ocaml.VSum(("Public",[]))|Private->Ocaml.VSum(("Private",[]))|Protected->Ocaml.VSum(("Protected",[]))andvof_method_decl=function|ConstructorDecl((v1,v2,v3))->letv1=vof_wrap2Ocaml.vof_stringv1andv2=vof_paren(vof_comma_listvof_parameter)v2andv3=vof_tokv3inOcaml.VSum(("ConstructorDecl",[v1;v2;v3]))|DestructorDecl((v1,v2,v3,v4,v5))->letv1=vof_tokv1andv2=vof_wrap2Ocaml.vof_stringv2andv3=vof_paren(Ocaml.vof_optionvof_tok)v3andv4=Ocaml.vof_optionvof_exn_specv4andv5=vof_tokv5inOcaml.VSum(("DestructorDecl",[v1;v2;v3;v4;v5]))|MethodDecl((v1,v2,v3))->letv1=vof_onedeclv1andv2=Ocaml.vof_option(fun(v1,v2)->letv1=vof_tokv1andv2=vof_tokv2inOcaml.VTuple[v1;v2])v2andv3=vof_tokv3inOcaml.VSum(("MethodDecl",[v1;v2;v3]))andvof_class_member=function|Access((v1,v2))->letv1=vof_wrap2vof_access_specv1andv2=vof_tokv2inOcaml.VSum(("Access",[v1;v2]))|MemberField(v1,v2)->letv1=(vof_comma_listvof_fieldkind)v1andv2=vof_tokv2inOcaml.VSum(("MemberField",[v1;v2]))|MemberFuncv1->letv1=vof_func_or_elsev1inOcaml.VSum(("MemberFunc",[v1]))|MemberDeclv1->letv1=vof_method_declv1inOcaml.VSum(("MemberDecl",[v1]))|QualifiedIdInClass((v1,v2))->letv1=vof_namev1andv2=vof_tokv2inOcaml.VSum(("QualifiedIdInClass",[v1;v2]))|TemplateDeclInClassv1->letv1=(matchv1with|(v1,v2,v3)->letv1=vof_tokv1andv2=vof_template_parametersv2andv3=vof_declarationv3inOcaml.VTuple[v1;v2;v3])inOcaml.VSum(("TemplateDeclInClass",[v1]))|UsingDeclInClassv1->letv1=(matchv1with|(v1,v2,v3)->letv1=vof_tokv1andv2=vof_namev2andv3=vof_tokv3inOcaml.VTuple[v1;v2;v3])inOcaml.VSum(("UsingDeclInClass",[v1]))|EmptyFieldv1->letv1=vof_tokv1inOcaml.VSum(("EmptyField",[v1]))andvof_fieldkind=function|FieldDeclv1->letv1=vof_onedeclv1inOcaml.VSum(("FieldDecl",[v1]))|BitField((v1,v2,v3,v4))->letv1=Ocaml.vof_option(vof_wrap2Ocaml.vof_string)v1andv2=vof_tokv2andv3=vof_fullTypev3andv4=vof_constExpressionv4inOcaml.VSum(("BitField",[v1;v2;v3;v4]))andvof_class_member_sequencable=function|ClassElemv1->letv1=vof_class_memberv1inOcaml.VSum(("ClassElem",[v1]))|CppDirectiveStructv1->letv1=vof_cpp_directivev1inOcaml.VSum(("CppDirectiveStruct",[v1]))|IfdefStructv1->letv1=vof_ifdef_directivev1inOcaml.VSum(("IfdefStruct",[v1]))andvof_cpp_directive=function|Define((v1,v2,v3,v4))->letv1=vof_tokv1andv2=vof_wrap2Ocaml.vof_stringv2andv3=vof_define_kindv3andv4=vof_define_valv4inOcaml.VSum(("Define",[v1;v2;v3;v4]))|Include((v1,v2,v3))->letv1=vof_tokv1andv2=vof_inc_kindv2andv3=Ocaml.vof_stringv3inOcaml.VSum(("Include",[v1;v2;v3]))|Undefv1->letv1=vof_wrap2Ocaml.vof_stringv1inOcaml.VSum(("Undef",[v1]))|PragmaAndCov1->letv1=vof_tokv1inOcaml.VSum(("PragmaAndCo",[v1]))andvof_define_kind=function|DefineVar->Ocaml.VSum(("DefineVar",[]))|DefineFuncv1->letv1=vof_paren(vof_comma_list(vof_wrapOcaml.vof_string))v1inOcaml.VSum(("DefineFunc",[v1]))andvof_define_val=function|DefinePrintWrapper((v1,v2,v3))->letv1=vof_tokv1andv2=vof_parenvof_expressionv2andv3=vof_namev3inOcaml.VSum(("DefinePrintWrapper",[v1;v2;v3]))|DefineExprv1->letv1=vof_expressionv1inOcaml.VSum(("DefineExpr",[v1]))|DefineStmtv1->letv1=vof_statementv1inOcaml.VSum(("DefineStmt",[v1]))|DefineTypev1->letv1=vof_fullTypev1inOcaml.VSum(("DefineType",[v1]))|DefineDoWhileZerov1->letv1=vof_wrapvof_statementv1inOcaml.VSum(("DefineDoWhileZero",[v1]))|DefineFunctionv1->letv1=vof_func_definitionv1inOcaml.VSum(("DefineFunction",[v1]))|DefineInitv1->letv1=vof_initialiserv1inOcaml.VSum(("DefineInit",[v1]))|DefineTextv1->letv1=vof_wrapOcaml.vof_stringv1inOcaml.VSum(("DefineText",[v1]))|DefineEmpty->Ocaml.VSum(("DefineEmpty",[]))|DefineTodo->Ocaml.VSum(("DefineTodo",[]))andvof_inc_kind=function|Local->Ocaml.VSum(("Local",[]))|Standard->Ocaml.VSum(("Standard",[]))|Weird->Ocaml.VSum(("Weird",[]))andvof_ifdef_directivev=vof_wrap2vof_ifdefkindvandvof_ifdefkind=function|Ifdef->Ocaml.VSum(("Ifdef",[]))|IfdefElse->Ocaml.VSum(("IfdefElse",[]))|IfdefElseif->Ocaml.VSum(("IfdefElseif",[]))|IfdefEndif->Ocaml.VSum(("IfdefEndif",[]))andvof_declaration=function|BlockDeclv1->letv1=vof_block_declarationv1inOcaml.VSum(("BlockDecl",[v1]))|Funcv1->letv1=vof_func_or_elsev1inOcaml.VSum(("Func",[v1]))|TemplateDecl(v1,v2,v3)->letv1=vof_tokv1andv2=vof_template_parametersv2andv3=vof_declarationv3inOcaml.VSum(("TemplateDecl",[v1;v2;v3]))|TemplateSpecialization((v1,v2,v3))->letv1=vof_tokv1andv2=vof_angleOcaml.vof_unitv2andv3=vof_declarationv3inOcaml.VSum(("TemplateSpecialization",[v1;v2;v3]))|ExternC((v1,v2,v3))->letv1=vof_tokv1andv2=vof_tokv2andv3=vof_declarationv3inOcaml.VSum(("ExternC",[v1;v2;v3]))|ExternCList((v1,v2,v3))->letv1=vof_tokv1andv2=vof_tokv2andv3=vof_brace(Ocaml.vof_listvof_declaration_sequencable)v3inOcaml.VSum(("ExternCList",[v1;v2;v3]))|NameSpace((v1,v2,v3))->letv1=vof_tokv1andv2=vof_wrap2Ocaml.vof_stringv2andv3=vof_brace(Ocaml.vof_listvof_declaration_sequencable)v3inOcaml.VSum(("NameSpace",[v1;v2;v3]))|NameSpaceExtend((v1,v2))->letv1=Ocaml.vof_stringv1andv2=Ocaml.vof_listvof_declaration_sequencablev2inOcaml.VSum(("NameSpaceExtend",[v1;v2]))|NameSpaceAnon((v1,v2))->letv1=vof_tokv1andv2=vof_brace(Ocaml.vof_listvof_declaration_sequencable)v2inOcaml.VSum(("NameSpaceAnon",[v1;v2]))|EmptyDefv1->letv1=vof_tokv1inOcaml.VSum(("EmptyDef",[v1]))|DeclTodo->Ocaml.VSum(("DeclTodo",[]))andvof_template_parameterv=vof_parametervandvof_template_parametersv=vof_angle(vof_comma_listvof_template_parameter)vandvof_declaration_sequencable=function|NotParsedCorrectlyv1->letv1=Ocaml.vof_listvof_tokv1inOcaml.VSum(("NotParsedCorrectly",[v1]))|DeclElemv1->letv1=vof_declarationv1inOcaml.VSum(("DeclElem",[v1]))|CppDirectiveDeclv1->letv1=vof_cpp_directivev1inOcaml.VSum(("CppDirectiveDecl",[v1]))|IfdefDeclv1->letv1=vof_ifdef_directivev1inOcaml.VSum(("IfdefDecl",[v1]))|MacroTop((v1,v2,v3))->letv1=vof_wrap2Ocaml.vof_stringv1andv2=vof_paren(vof_comma_listvof_argument)v2andv3=Ocaml.vof_optionvof_tokv3inOcaml.VSum(("MacroTop",[v1;v2;v3]))|MacroVarTop((v1,v2))->letv1=vof_wrap2Ocaml.vof_stringv1andv2=vof_tokv2inOcaml.VSum(("MacroVarTop",[v1;v2]))andvof_toplevelv=vof_declaration_sequencablevandvof_programv=Ocaml.vof_listvof_toplevelvandvof_any=function|Programv1->letv1=vof_programv1inOcaml.VSum(("Program",[v1]))|Toplevelv1->letv1=vof_toplevelv1inOcaml.VSum(("Toplevel",[v1]))|BlockDecl2v1->letv1=vof_block_declarationv1inOcaml.VSum(("BlockDecl2",[v1]))|Stmtv1->letv1=vof_statementv1inOcaml.VSum(("Stmt",[v1]))|Stmtsv1->letv1=Ocaml.vof_listvof_statementv1inOcaml.VSum(("Stmts",[v1]))|Exprv1->letv1=vof_expressionv1inOcaml.VSum(("Expr",[v1]))|Initv1->letv1=vof_initialiserv1inOcaml.VSum(("Init",[v1]))|Typev1->letv1=vof_fullTypev1inOcaml.VSum(("Type",[v1]))|Namev1->letv1=vof_namev1inOcaml.VSum(("Name",[v1]))|Cppv1->letv1=vof_cpp_directivev1inOcaml.VSum(("Cpp",[v1]))|ClassDefv1->letv1=vof_class_definitionv1inOcaml.VSum(("ClassDef",[v1]))|FuncDefv1->letv1=vof_func_definitionv1inOcaml.VSum(("FuncDef",[v1]))|FuncOrElsev1->letv1=vof_func_or_elsev1inOcaml.VSum(("FuncOrElse",[v1]))|Constantv1->letv1=vof_constantv1inOcaml.VSum(("Constant",[v1]))|Argumentv1->letv1=vof_argumentv1inOcaml.VSum(("Argument",[v1]))|Parameterv1->letv1=vof_parameterv1inOcaml.VSum(("Parameter",[v1]))|Bodyv1->letv1=vof_compoundv1inOcaml.VSum(("Body",[v1]))|Infov1->letv1=vof_infov1inOcaml.VSum(("Info",[v1]))|InfoListv1->letv1=Ocaml.vof_listvof_infov1inOcaml.VSum(("InfoList",[v1]))|ClassMemberv1->letv1=vof_class_memberv1inOcaml.VSum(("ClassMember",[v1]))|OneDeclv1->letv1=vof_onedeclv1inOcaml.VSum(("OneDecl",[v1]))(* end auto generation *)letvof_program?(precision=MPI.default_dumper_precision)x=Common.save_excursionMPI._current_precisionprecision(fun()->vof_programx)letvof_any?(precision=MPI.default_dumper_precision)x=Common.save_excursionMPI._current_precisionprecision(fun()->vof_anyx)