1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135(* 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]))|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)