123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653765476557656765776587659766076617662766376647665766676677668766976707671767276737674767576767677767876797680768176827683768476857686768776887689769076917692769376947695769676977698769977007701770277037704770577067707770877097710771177127713771477157716771777187719772077217722772377247725772677277728772977307731773277337734773577367737773877397740774177427743774477457746774777487749775077517752775377547755775677577758775977607761776277637764776577667767776877697770777177727773777477757776777777787779778077817782778377847785778677877788778977907791779277937794779577967797779877997800780178027803780478057806780778087809781078117812781378147815781678177818781978207821782278237824782578267827782878297830783178327833783478357836783778387839784078417842784378447845784678477848784978507851785278537854785578567857785878597860786178627863786478657866786778687869787078717872787378747875787678777878787978807881788278837884788578867887788878897890789178927893789478957896789778987899790079017902790379047905790679077908790979107911791279137914791579167917791879197920792179227923792479257926792779287929793079317932793379347935793679377938793979407941794279437944794579467947794879497950795179527953795479557956795779587959796079617962796379647965796679677968796979707971797279737974797579767977797879797980798179827983798479857986798779887989799079917992799379947995799679977998799980008001800280038004800580068007800880098010801180128013801480158016801780188019802080218022802380248025802680278028802980308031803280338034803580368037803880398040804180428043804480458046804780488049805080518052805380548055805680578058805980608061806280638064806580668067806880698070807180728073807480758076807780788079808080818082808380848085808680878088808980908091809280938094809580968097809880998100810181028103810481058106810781088109811081118112811381148115811681178118811981208121812281238124812581268127812881298130813181328133813481358136813781388139814081418142814381448145814681478148814981508151815281538154815581568157815881598160816181628163816481658166816781688169817081718172817381748175817681778178817981808181818281838184818581868187818881898190819181928193819481958196819781988199820082018202820382048205820682078208820982108211821282138214821582168217821882198220822182228223822482258226822782288229823082318232823382348235823682378238823982408241824282438244824582468247824882498250825182528253825482558256825782588259826082618262826382648265826682678268826982708271827282738274827582768277827882798280828182828283828482858286828782888289829082918292829382948295829682978298829983008301830283038304830583068307830883098310831183128313831483158316831783188319832083218322832383248325832683278328832983308331833283338334833583368337833883398340834183428343834483458346834783488349835083518352835383548355835683578358835983608361836283638364836583668367836883698370837183728373837483758376837783788379838083818382838383848385838683878388838983908391839283938394839583968397839883998400840184028403840484058406840784088409841084118412841384148415841684178418841984208421842284238424842584268427842884298430843184328433843484358436843784388439844084418442844384448445844684478448844984508451845284538454845584568457845884598460846184628463846484658466846784688469847084718472847384748475847684778478847984808481848284838484848584868487848884898490849184928493849484958496849784988499850085018502850385048505850685078508850985108511851285138514851585168517851885198520852185228523852485258526852785288529853085318532853385348535853685378538853985408541854285438544854585468547854885498550855185528553855485558556855785588559856085618562856385648565856685678568856985708571857285738574857585768577857885798580858185828583858485858586858785888589859085918592859385948595859685978598859986008601860286038604860586068607860886098610861186128613861486158616861786188619862086218622862386248625862686278628862986308631863286338634863586368637863886398640864186428643864486458646864786488649865086518652865386548655865686578658865986608661866286638664866586668667866886698670867186728673867486758676867786788679868086818682868386848685868686878688868986908691869286938694869586968697869886998700870187028703870487058706870787088709871087118712871387148715871687178718871987208721872287238724872587268727872887298730873187328733873487358736873787388739874087418742874387448745874687478748874987508751875287538754875587568757875887598760876187628763876487658766876787688769877087718772877387748775877687778778877987808781878287838784878587868787878887898790879187928793879487958796879787988799880088018802880388048805880688078808880988108811881288138814881588168817881888198820882188228823882488258826882788288829883088318832883388348835883688378838883988408841884288438844884588468847884888498850885188528853885488558856885788588859886088618862886388648865886688678868886988708871887288738874887588768877887888798880888188828883888488858886888788888889889088918892889388948895889688978898889989008901890289038904890589068907890889098910891189128913891489158916891789188919892089218922892389248925892689278928892989308931893289338934893589368937893889398940894189428943894489458946894789488949895089518952895389548955895689578958895989608961896289638964896589668967896889698970897189728973897489758976897789788979898089818982898389848985898689878988898989908991899289938994899589968997899889999000900190029003900490059006900790089009901090119012901390149015901690179018901990209021902290239024902590269027902890299030903190329033903490359036903790389039904090419042904390449045904690479048904990509051905290539054905590569057905890599060906190629063906490659066906790689069907090719072907390749075907690779078907990809081908290839084908590869087908890899090909190929093909490959096909790989099910091019102910391049105910691079108910991109111911291139114911591169117911891199120912191229123912491259126912791289129913091319132913391349135913691379138913991409141914291439144914591469147914891499150915191529153915491559156915791589159916091619162916391649165916691679168916991709171917291739174917591769177917891799180918191829183918491859186918791889189919091919192919391949195919691979198919992009201920292039204920592069207920892099210921192129213921492159216921792189219922092219222922392249225922692279228922992309231923292339234923592369237923892399240924192429243924492459246924792489249925092519252925392549255925692579258925992609261926292639264926592669267926892699270927192729273927492759276927792789279928092819282928392849285928692879288928992909291929292939294929592969297929892999300930193029303930493059306930793089309931093119312931393149315931693179318931993209321932293239324932593269327932893299330933193329333933493359336933793389339934093419342934393449345934693479348934993509351935293539354935593569357935893599360936193629363936493659366936793689369937093719372937393749375937693779378937993809381938293839384938593869387938893899390939193929393939493959396939793989399940094019402940394049405940694079408940994109411941294139414941594169417941894199420942194229423942494259426942794289429943094319432943394349435943694379438943994409441944294439444944594469447944894499450945194529453945494559456945794589459946094619462946394649465946694679468946994709471947294739474947594769477947894799480948194829483948494859486948794889489949094919492949394949495949694979498949995009501950295039504950595069507950895099510951195129513951495159516951795189519952095219522952395249525952695279528952995309531953295339534953595369537953895399540954195429543954495459546954795489549955095519552955395549555955695579558955995609561956295639564956595669567956895699570957195729573957495759576957795789579958095819582958395849585958695879588958995909591959295939594959595969597959895999600960196029603960496059606960796089609961096119612961396149615961696179618961996209621962296239624962596269627962896299630963196329633963496359636963796389639964096419642964396449645964696479648964996509651965296539654965596569657965896599660966196629663966496659666966796689669967096719672967396749675967696779678967996809681968296839684968596869687968896899690969196929693969496959696969796989699970097019702970397049705970697079708970997109711971297139714971597169717971897199720972197229723972497259726972797289729973097319732973397349735973697379738973997409741974297439744974597469747974897499750975197529753975497559756975797589759976097619762976397649765976697679768976997709771977297739774977597769777977897799780978197829783978497859786978797889789979097919792979397949795979697979798979998009801980298039804980598069807980898099810981198129813981498159816981798189819982098219822982398249825982698279828982998309831983298339834983598369837983898399840984198429843984498459846984798489849985098519852985398549855985698579858985998609861986298639864986598669867986898699870987198729873987498759876987798789879988098819882988398849885988698879888988998909891989298939894989598969897989898999900990199029903990499059906990799089909991099119912991399149915991699179918991999209921992299239924992599269927992899299930993199329933993499359936993799389939994099419942994399449945994699479948994999509951995299539954995599569957995899599960996199629963996499659966996799689969997099719972997399749975997699779978997999809981998299839984998599869987998899899990999199929993999499959996999799989999100001000110002100031000410005100061000710008100091001010011100121001310014100151001610017100181001910020100211002210023100241002510026100271002810029100301003110032100331003410035100361003710038100391004010041100421004310044100451004610047100481004910050100511005210053100541005510056100571005810059100601006110062100631006410065100661006710068100691007010071100721007310074100751007610077100781007910080100811008210083100841008510086100871008810089100901009110092100931009410095100961009710098100991010010101101021010310104101051010610107101081010910110101111011210113101141011510116101171011810119101201012110122101231012410125101261012710128101291013010131101321013310134101351013610137101381013910140101411014210143101441014510146101471014810149101501015110152101531015410155101561015710158101591016010161101621016310164101651016610167101681016910170101711017210173101741017510176101771017810179101801018110182101831018410185101861018710188101891019010191101921019310194101951019610197101981019910200102011020210203102041020510206102071020810209102101021110212102131021410215102161021710218102191022010221102221022310224102251022610227102281022910230102311023210233102341023510236102371023810239102401024110242102431024410245102461024710248102491025010251102521025310254102551025610257102581025910260102611026210263102641026510266102671026810269102701027110272102731027410275102761027710278102791028010281102821028310284102851028610287102881028910290102911029210293102941029510296102971029810299103001030110302103031030410305103061030710308103091031010311103121031310314103151031610317103181031910320103211032210323103241032510326103271032810329103301033110332103331033410335103361033710338103391034010341103421034310344103451034610347103481034910350103511035210353103541035510356103571035810359103601036110362103631036410365103661036710368103691037010371103721037310374103751037610377103781037910380103811038210383103841038510386103871038810389(**************************************************************************)(* *)(* OCaml *)(* *)(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *)(* *)(* Copyright 1996 Institut National de Recherche en Informatique et *)(* en Automatique. *)(* *)(* All rights reserved. This file is distributed under the terms of *)(* the GNU Lesser General Public License version 2.1, with the *)(* special exception on linking described in the file LICENSE. *)(* *)(**************************************************************************)(** Definition of the OCaml AST *)openImport(* This file is obtained by:
- copying a subset of the corresponding ast_xxx.ml file from Astlib
(sub-modules Asttypes and Parsetree)
- adding the type definitions for position, location, loc and longident
- flattening all the modules
- removing Asttypes.constant (unused and conflicts with Parsetree.constant)
- renaming a few types:
- - Location.t -> location
- - Longident.t -> longident
- adding a type longident_loc = longident loc and replacing all the occurrences of the
latter by the former. This is so that we can override iteration an the level of a
longident loc
- adding a type cases = case list
- replacing all occurences of "case list" by "cases"
- replacing all the (*IF_CURRENT = Foo.bar*) by: = Foo.bar
- removing the extra values at the end of the file
- replacing app [type ...] by [and ...] to make everything one recursive block
- adding [@@deriving_inline traverse][@@@end] at the end
To update it to a newer OCaml version, create a new module with the above from the
latest compiler and add the following module definitions and opens to get it to
compile:
[{
module Ast = Versions.OCaml_4xx
open Ast.Ast
module Location = Ocaml_common.Location
module Longident = Ocaml_common.Longident
}]
Once you have generated the inlined derived traversal classes by running
[{ dune build @lint }] you can replace the above mentioned module definitions by a
[open Import] and update [Import] so that the [Js] module points to
[Versions.OCaml_4xx].
*)(* Source code locations (ranges of positions), used in parsetree. *)typeposition=Lexing.position={pos_fname:string;pos_lnum:int;pos_bol:int;pos_cnum:int;}andlocation=Location.t={loc_start:position;loc_end:position;loc_ghost:bool;}andlocation_stack=locationlist(* Note on the use of Lexing.position in this module.
If [pos_fname = ""], then use [!input_name] instead.
If [pos_lnum = -1], then [pos_bol = 0]. Use [pos_cnum] and
re-parse the file to get the line and character numbers.
Else all fields are correct.
*)and'aloc='aLocation.loc={txt:'a;loc:location}(* Long identifiers, used in parsetree. *)andlongident=Longident.t=|Lidentofstring|Ldotoflongident*string|Lapplyoflongident*longidentandlongident_loc=longidentloc(** Auxiliary AST types used by parsetree and typedtree. *)andrec_flag=Asttypes.rec_flag=Nonrecursive|Recursiveanddirection_flag=Asttypes.direction_flag=Upto|Downto(* Order matters, used in polymorphic comparison *)andprivate_flag=Asttypes.private_flag=Private|Publicandmutable_flag=Asttypes.mutable_flag=Immutable|Mutableandvirtual_flag=Asttypes.virtual_flag=Virtual|Concreteandoverride_flag=Asttypes.override_flag=Override|Freshandclosed_flag=Asttypes.closed_flag=Closed|Openandlabel=stringandarg_label=Asttypes.arg_label=|Nolabel|Labelledofstring(** [label:T -> ...] *)|Optionalofstring(** [?label:T -> ...] *)andvariance=Asttypes.variance=Covariant|Contravariant|NoVarianceandinjectivity=Asttypes.injectivity=Injective|NoInjectivity(** Abstract syntax tree produced by parsing *)andconstant=Parsetree.constant=|Pconst_integerofstring*charoption(** Integer constants such as [3] [3l] [3L] [3n].
Suffixes [[g-z][G-Z]] are accepted by the parser. Suffixes except
['l'], ['L'] and ['n'] are rejected by the typechecker *)|Pconst_charofchar(** Character such as ['c']. *)|Pconst_stringofstring*location*stringoption(** Constant string such as ["constant"] or
[{delim|other constant|delim}].
The location span the content of the string, without the delimiters.
*)|Pconst_floatofstring*charoption(** Float constant such as [3.4], [2e5] or [1.4e-4].
Suffixes [g-z][G-Z] are accepted by the parser. Suffixes are rejected
by the typechecker. *)(** {1 Extension points} *)andattribute=Parsetree.attribute={attr_name:stringloc;attr_payload:payload;attr_loc:location;}(** Attributes such as [[@id ARG]] and [[@@id ARG]].
Metadata containers passed around within the AST. The compiler ignores
unknown attributes. *)andextension=stringloc*payload(** Extension points such as [[%id ARG] and [%%id ARG]].
Sub-language placeholder -- rejected by the typechecker. *)andattributes=attributelistandpayload=Parsetree.payload=|PStrofstructure|PSigofsignature(** [: SIG] in an attribute or an extension point *)|PTypofcore_type(** [: T] in an attribute or an extension point *)|PPatofpattern*expressionoption(** [? P] or [? P when E], in an attribute or an extension point *)(** {1 Core language} *)(** {2 Type expressions} *)andcore_type=Parsetree.core_type={ptyp_desc:core_type_desc;ptyp_loc:location;ptyp_loc_stack:location_stack;ptyp_attributes:attributes;(** [... [@id1] [@id2]] *)}andcore_type_desc=Parsetree.core_type_desc=|Ptyp_any(** [_] *)|Ptyp_varofstring(** A type variable such as ['a] *)|Ptyp_arrowofarg_label*core_type*core_type(** [Ptyp_arrow(lbl, T1, T2)] represents:
- [T1 -> T2] when [lbl] is {{!Asttypes.arg_label.Nolabel} [Nolabel]},
- [~l:T1 -> T2] when [lbl] is
{{!Asttypes.arg_label.Labelled} [Labelled]},
- [?l:T1 -> T2] when [lbl] is
{{!Asttypes.arg_label.Optional} [Optional]}. *)|Ptyp_tupleofcore_typelist(** [Ptyp_tuple([T1 ; ... ; Tn])] represents a product type
[T1 * ... * Tn].
Invariant: [n >= 2]. *)|Ptyp_constroflongident_loc*core_typelist(** [Ptyp_constr(lident, l)] represents:
- [tconstr] when [l=[]],
- [T tconstr] when [l=[T]],
- [(T1, ..., Tn) tconstr] when [l=[T1 ; ... ; Tn]]. *)|Ptyp_objectofobject_fieldlist*closed_flag(** [Ptyp_object([ l1:T1; ...; ln:Tn ], flag)] represents:
- [< l1:T1; ...; ln:Tn >] when [flag] is
{{!Asttypes.closed_flag.Closed} [Closed]},
- [< l1:T1; ...; ln:Tn; .. >] when [flag] is
{{!Asttypes.closed_flag.Open} [Open]}. *)|Ptyp_classoflongident_loc*core_typelist(** [Ptyp_class(tconstr, l)] represents:
- [#tconstr] when [l=[]],
- [T #tconstr] when [l=[T]],
- [(T1, ..., Tn) #tconstr] when [l=[T1 ; ... ; Tn]]. *)|Ptyp_aliasofcore_type*string(** [T as 'a]. *)|Ptyp_variantofrow_fieldlist*closed_flag*labellistoption(** [Ptyp_variant([`A;`B], flag, labels)] represents:
- [[ `A|`B ]] when [flag] is
{{!Asttypes.closed_flag.Closed} [Closed]}, and [labels] is [None],
- [[> `A|`B ]] when [flag] is {{!Asttypes.closed_flag.Open} [Open]},
and [labels] is [None],
- [[< `A|`B ]] when [flag] is
{{!Asttypes.closed_flag.Closed} [Closed]}, and [labels] is
[Some []],
- [[< `A|`B > `X `Y ]] when [flag] is
{{!Asttypes.closed_flag.Closed} [Closed]}, and [labels] is
[Some ["X";"Y"]]. *)|Ptyp_polyofstringloclist*core_type(** ['a1 ... 'an. T]
Can only appear in the following context:
- As the {!core_type} of a
{{!pattern_desc.Ppat_constraint} [Ppat_constraint]} node
corresponding to a constraint on a let-binding:
{[
let x : 'a1 ... 'an. T = e ...
]}
- Under {{!class_field_kind.Cfk_virtual} [Cfk_virtual]} for methods
(not values).
- As the {!core_type} of a
{{!class_type_field_desc.Pctf_method} [Pctf_method]} node.
- As the {!core_type} of a {{!expression_desc.Pexp_poly} [Pexp_poly]}
node.
- As the {{!label_declaration.pld_type} [pld_type]} field of a
{!label_declaration}.
- As a {!core_type} of a {{!core_type_desc.Ptyp_object} [Ptyp_object]}
node.
- As the {{!value_description.pval_type} [pval_type]} field of a
{!value_description}. *)|Ptyp_packageofpackage_type(** [(module S)]. *)|Ptyp_extensionofextension(** [[%id]]. *)andpackage_type=longident_loc*(longident_loc*core_type)list(** As {!package_type} typed values:
- [(S, [])] represents [(module S)],
- [(S, [(t1, T1) ; ... ; (tn, Tn)])] represents
[(module S with type t1 = T1 and ... and tn = Tn)]. *)androw_field=Parsetree.row_field={prf_desc:row_field_desc;prf_loc:location;prf_attributes:attributes;}androw_field_desc=Parsetree.row_field_desc=|Rtagoflabelloc*bool*core_typelist(** [Rtag(`A, b, l)] represents:
- [`A] when [b] is [true] and [l] is [[]],
- [`A of T] when [b] is [false] and [l] is [[T]],
- [`A of T1 & .. & Tn] when [b] is [false] and [l] is [[T1;...Tn]],
- [`A of & T1 & .. & Tn] when [b] is [true] and [l] is [[T1;...Tn]].
- The [bool] field is true if the tag contains a constant (empty)
constructor.
- [&] occurs when several types are used for the same constructor (see
4.2 in the manual) *)|Rinheritofcore_type(** [[ | t ]] *)andobject_field=Parsetree.object_field={pof_desc:object_field_desc;pof_loc:location;pof_attributes:attributes;}andobject_field_desc=Parsetree.object_field_desc=|Otagoflabelloc*core_type|Oinheritofcore_type(** {2 Patterns} *)andpattern=Parsetree.pattern={ppat_desc:pattern_desc;ppat_loc:location;ppat_loc_stack:location_stack;ppat_attributes:attributes;(** [... [@id1] [@id2]] *)}andpattern_desc=Parsetree.pattern_desc=|Ppat_any(** The pattern [_]. *)|Ppat_varofstringloc(** A variable pattern such as [x] *)|Ppat_aliasofpattern*stringloc(** An alias pattern such as [P as 'a] *)|Ppat_constantofconstant(** Patterns such as [1], ['a'], ["true"], [1.0], [1l], [1L], [1n] *)|Ppat_intervalofconstant*constant(** Patterns such as ['a'..'z'].
Other forms of interval are recognized by the parser but rejected by
the type-checker. *)|Ppat_tupleofpatternlist(** Patterns [(P1, ..., Pn)].
Invariant: [n >= 2] *)|Ppat_constructoflongident_loc*(stringloclist*pattern)option(** [Ppat_construct(C, args)] represents:
- [C] when [args] is [None],
- [C P] when [args] is [Some ([], P)]
- [C (P1, ..., Pn)] when [args] is
[Some ([], Ppat_tuple [P1; ...; Pn])]
- [C (type a b) P] when [args] is [Some ([a; b], P)] *)|Ppat_variantoflabel*patternoption(** [Ppat_variant(`A, pat)] represents:
- [`A] when [pat] is [None],
- [`A P] when [pat] is [Some P] *)|Ppat_recordof(longident_loc*pattern)list*closed_flag(** [Ppat_record([(l1, P1) ; ... ; (ln, Pn)], flag)] represents:
- [{ l1=P1; ...; ln=Pn }] when [flag] is
{{!Asttypes.closed_flag.Closed} [Closed]}
- [{ l1=P1; ...; ln=Pn; _}] when [flag] is
{{!Asttypes.closed_flag.Open} [Open]}
Invariant: [n > 0] *)|Ppat_arrayofpatternlist(** Pattern [[| P1; ...; Pn |]] *)|Ppat_orofpattern*pattern(** Pattern [P1 | P2] *)|Ppat_constraintofpattern*core_type(** Pattern [(P : T)] *)|Ppat_typeoflongident_loc(** Pattern [#tconst] *)|Ppat_lazyofpattern(** Pattern [lazy P] *)|Ppat_unpackofstringoptionloc(** [Ppat_unpack(s)] represents:
- [(module P)] when [s] is [Some "P"]
- [(module _)] when [s] is [None]
Note: [(module P : S)] is represented as
[Ppat_constraint(Ppat_unpack(Some "P"), Ptyp_package S)] *)|Ppat_exceptionofpattern(** Pattern [exception P] *)|Ppat_extensionofextension(** Pattern [[%id]] *)|Ppat_openoflongident_loc*pattern(** Pattern [M.(P)] *)(** {2 Value expressions} *)andexpression=Parsetree.expression={pexp_desc:expression_desc;pexp_loc:location;pexp_loc_stack:location_stack;pexp_attributes:attributes;(** [... [@id1] [@id2]] *)}andexpression_desc=Parsetree.expression_desc=|Pexp_identoflongident_loc(** Identifiers such as [x] and [M.x] *)|Pexp_constantofconstant(** Expressions constant such as [1], ['a'], ["true"], [1.0], [1l], [1L],
[1n] *)|Pexp_letofrec_flag*value_bindinglist*expression(** [Pexp_let(flag, [(P1,E1) ; ... ; (Pn,En)], E)] represents:
- [let P1 = E1 and ... and Pn = EN in E] when [flag] is
{{!Asttypes.rec_flag.Nonrecursive} [Nonrecursive]},
- [let rec P1 = E1 and ... and Pn = EN in E] when [flag] is
{{!Asttypes.rec_flag.Recursive} [Recursive]}. *)|Pexp_functionofcases(** [function P1 -> E1 | ... | Pn -> En] *)|Pexp_funofarg_label*expressionoption*pattern*expression(** [Pexp_fun(lbl, exp0, P, E1)] represents:
- [fun P -> E1] when [lbl] is
{{!Asttypes.arg_label.Nolabel} [Nolabel]} and [exp0] is [None]
- [fun ~l:P -> E1] when [lbl] is
{{!Asttypes.arg_label.Labelled} [Labelled l]} and [exp0] is [None]
- [fun ?l:P -> E1] when [lbl] is
{{!Asttypes.arg_label.Optional} [Optional l]} and [exp0] is [None]
- [fun ?l:(P = E0) -> E1] when [lbl] is
{{!Asttypes.arg_label.Optional} [Optional l]} and [exp0] is
[Some E0]
Notes:
- If [E0] is provided, only
{{!Asttypes.arg_label.Optional} [Optional]} is allowed.
- [fun P1 P2 .. Pn -> E1] is represented as nested
{{!expression_desc.Pexp_fun} [Pexp_fun]}.
- [let f P = E] is represented using
{{!expression_desc.Pexp_fun} [Pexp_fun]}. *)|Pexp_applyofexpression*(arg_label*expression)list(** [Pexp_apply(E0, [(l1, E1) ; ... ; (ln, En)])] represents
[E0 ~l1:E1 ... ~ln:En]
[li] can be {{!Asttypes.arg_label.Nolabel} [Nolabel]} (non labeled
argument), {{!Asttypes.arg_label.Labelled} [Labelled]} (labelled
arguments) or {{!Asttypes.arg_label.Optional} [Optional]} (optional
argument).
Invariant: [n > 0] *)|Pexp_matchofexpression*cases(** [match E0 with P1 -> E1 | ... | Pn -> En] *)|Pexp_tryofexpression*cases(** [try E0 with P1 -> E1 | ... | Pn -> En] *)|Pexp_tupleofexpressionlist(** Expressions [(E1, ..., En)]
Invariant: [n >= 2] *)|Pexp_constructoflongident_loc*expressionoption(** [Pexp_construct(C, exp)] represents:
- [C] when [exp] is [None],
- [C E] when [exp] is [Some E],
- [C (E1, ..., En)] when [exp] is [Some (Pexp_tuple[E1;...;En])] *)|Pexp_variantoflabel*expressionoption(** [Pexp_variant(`A, exp)] represents
- [`A] when [exp] is [None]
- [`A E] when [exp] is [Some E] *)|Pexp_recordof(longident_loc*expression)list*expressionoption(** [Pexp_record([(l1,P1) ; ... ; (ln,Pn)], exp0)] represents
- [{ l1=P1; ...; ln=Pn }] when [exp0] is [None]
- [{ E0 with l1=P1; ...; ln=Pn }] when [exp0] is [Some E0]
Invariant: [n > 0] *)|Pexp_fieldofexpression*longident_loc(** [E.l] *)|Pexp_setfieldofexpression*longident_loc*expression(** [E1.l <- E2] *)|Pexp_arrayofexpressionlist(** [[| E1; ...; En |]] *)|Pexp_ifthenelseofexpression*expression*expressionoption(** [if E1 then E2 else E3] *)|Pexp_sequenceofexpression*expression(** [E1; E2] *)|Pexp_whileofexpression*expression(** [while E1 do E2 done] *)|Pexp_forofpattern*expression*expression*direction_flag*expression(** [Pexp_for(i, E1, E2, direction, E3)] represents:
- [for i = E1 to E2 do E3 done] when [direction] is
{{!Asttypes.direction_flag.Upto} [Upto]}
- [for i = E1 downto E2 do E3 done] when [direction] is
{{!Asttypes.direction_flag.Downto} [Downto]} *)|Pexp_constraintofexpression*core_type(** [(E : T)] *)|Pexp_coerceofexpression*core_typeoption*core_type(** [Pexp_coerce(E, from, T)] represents
- [(E :> T)] when [from] is [None],
- [(E : T0 :> T)] when [from] is [Some T0]. *)|Pexp_sendofexpression*labelloc(** [E # m] *)|Pexp_newoflongident_loc(** [new M.c] *)|Pexp_setinstvaroflabelloc*expression(** [x <- 2] *)|Pexp_overrideof(labelloc*expression)list(** [{< x1 = E1; ...; xn = En >}] *)|Pexp_letmoduleofstringoptionloc*module_expr*expression(** [let module M = ME in E] *)|Pexp_letexceptionofextension_constructor*expression(** [let exception C in E] *)|Pexp_assertofexpression(** [assert E].
Note: [assert false] is treated in a special way by the type-checker.
*)|Pexp_lazyofexpression(** [lazy E] *)|Pexp_polyofexpression*core_typeoption(** Used for method bodies.
Can only be used as the expression under
{{!class_field_kind.Cfk_concrete} [Cfk_concrete]} for methods (not
values). *)|Pexp_objectofclass_structure(** [object ... end] *)|Pexp_newtypeofstringloc*expression(** [fun (type t) -> E] *)|Pexp_packofmodule_expr(** [(module ME)].
[(module ME : S)] is represented as
[Pexp_constraint(Pexp_pack ME, Ptyp_package S)] *)|Pexp_openofopen_declaration*expression(** - [M.(E)]
- [let open M in E]
- [let open! M in E] *)|Pexp_letopofletop(** - [let* P = E0 in E1]
- [let* P0 = E00 and* P1 = E01 in E1] *)|Pexp_extensionofextension(** [[%id]] *)|Pexp_unreachable(** [.] *)andcase=Parsetree.case={pc_lhs:pattern;pc_guard:expressionoption;pc_rhs:expression;}(** Values of type {!case} represents [(P -> E)] or [(P when E0 -> E)] *)andletop=Parsetree.letop={let_:binding_op;ands:binding_oplist;body:expression;}andbinding_op=Parsetree.binding_op={pbop_op:stringloc;pbop_pat:pattern;pbop_exp:expression;pbop_loc:location;}(** {2 Value descriptions} *)andvalue_description=Parsetree.value_description={pval_name:stringloc;pval_type:core_type;pval_prim:stringlist;pval_attributes:attributes;(** [... [@@id1] [@@id2]] *)pval_loc:location;}(** Values of type {!value_description} represents:
- [val x: T], when {{!value_description.pval_prim} [pval_prim]} is [[]]
- [external x: T = "s1" ... "sn"] when
{{!value_description.pval_prim} [pval_prim]} is [["s1";..."sn"]] *)(** {2 Type declarations} *)andtype_declaration=Parsetree.type_declaration={ptype_name:stringloc;ptype_params:(core_type*(variance*injectivity))list;(** [('a1,...'an) t] *)ptype_cstrs:(core_type*core_type*location)list;(** [... constraint T1=T1' ... constraint Tn=Tn'] *)ptype_kind:type_kind;ptype_private:private_flag;(** for [= private ...] *)ptype_manifest:core_typeoption;(** represents [= T] *)ptype_attributes:attributes;(** [... [@@id1] [@@id2]] *)ptype_loc:location;}(** Here are type declarations and their representation, for various
{{!type_declaration.ptype_kind} [ptype_kind]} and
{{!type_declaration.ptype_manifest} [ptype_manifest]} values:
- [type t] when [type_kind] is
{{!type_kind.Ptype_abstract} [Ptype_abstract]}, and [manifest] is [None],
- [type t = T0] when [type_kind] is
{{!type_kind.Ptype_abstract} [Ptype_abstract]}, and [manifest] is
[Some T0],
- [type t = C of T | ...] when [type_kind] is
{{!type_kind.Ptype_variant} [Ptype_variant]}, and [manifest] is [None],
- [type t = T0 = C of T | ...] when [type_kind] is
{{!type_kind.Ptype_variant} [Ptype_variant]}, and [manifest] is [Some T0],
- [type t = {l: T; ...}] when [type_kind] is
{{!type_kind.Ptype_record} [Ptype_record]}, and [manifest] is [None],
- [type t = T0 = {l : T; ...}] when [type_kind] is
{{!type_kind.Ptype_record} [Ptype_record]}, and [manifest] is [Some T0],
- [type t = ..] when [type_kind] is {{!type_kind.Ptype_open} [Ptype_open]},
and [manifest] is [None]. *)andtype_kind=Parsetree.type_kind=|Ptype_abstract|Ptype_variantofconstructor_declarationlist|Ptype_recordoflabel_declarationlist(** Invariant: non-empty list *)|Ptype_openandlabel_declaration=Parsetree.label_declaration={pld_name:stringloc;pld_mutable:mutable_flag;pld_type:core_type;pld_loc:location;pld_attributes:attributes;(** [l : T [@id1] [@id2]] *)}(** - [{ ...; l: T; ... }] when {{!label_declaration.pld_mutable} [pld_mutable]}
is {{!Asttypes.mutable_flag.Immutable} [Immutable]},
- [{ ...; mutable l: T; ... }] when
{{!label_declaration.pld_mutable} [pld_mutable]} is
{{!Asttypes.mutable_flag.Mutable} [Mutable]}.
Note: [T] can be a {{!core_type_desc.Ptyp_poly} [Ptyp_poly]}. *)andconstructor_declaration=Parsetree.constructor_declaration={pcd_name:stringloc;pcd_vars:stringloclist;pcd_args:constructor_arguments;pcd_res:core_typeoption;pcd_loc:location;pcd_attributes:attributes;(** [C of ... [@id1] [@id2]] *)}andconstructor_arguments=Parsetree.constructor_arguments=|Pcstr_tupleofcore_typelist|Pcstr_recordoflabel_declarationlist(** Values of type {!constructor_declaration} represents the constructor
arguments of:
- [C of T1 * ... * Tn] when [res = None], and
[args = Pcstr_tuple [T1; ... ; Tn]],
- [C: T0] when [res = Some T0], and [args = Pcstr_tuple []],
- [C: T1 * ... * Tn -> T0] when [res = Some T0], and
[args = Pcstr_tuple [T1; ... ; Tn]],
- [C of {...}] when [res = None], and [args = Pcstr_record [...]],
- [C: {...} -> T0] when [res = Some T0], and
[args = Pcstr_record [...]]. *)andtype_extension=Parsetree.type_extension={ptyext_path:longident_loc;ptyext_params:(core_type*(variance*injectivity))list;ptyext_constructors:extension_constructorlist;ptyext_private:private_flag;ptyext_loc:location;ptyext_attributes:attributes;(** ... [@@id1] [@@id2] *)}(** Definition of new extensions constructors for the extensive sum type [t]
([type t += ...]). *)andextension_constructor=Parsetree.extension_constructor={pext_name:stringloc;pext_kind:extension_constructor_kind;pext_loc:location;pext_attributes:attributes;(** [C of ... [@id1] [@id2]] *)}andtype_exception=Parsetree.type_exception={ptyexn_constructor:extension_constructor;ptyexn_loc:location;ptyexn_attributes:attributes;(** [... [@@id1] [@@id2]] *)}(** Definition of a new exception ([exception E]). *)andextension_constructor_kind=Parsetree.extension_constructor_kind=|Pext_declofstringloclist*constructor_arguments*core_typeoption(** [Pext_decl(existentials, c_args, t_opt)] describes a new extension
constructor. It can be:
{ul
{- [C of T1 * ... * Tn] when:
- [existentials] is [[]],
- [c_args] is [[T1; ...; Tn]],
- [t_opt] is [None].
}
{- [C: T0] when
- [existentials] is [[]],
- [c_args] is [[]],
- [t_opt] is [Some T0].
}
{- [C: T1 * ... * Tn -> T0] when
- [existentials] is [[]],
- [c_args] is [[T1; ...; Tn]],
- [t_opt] is [Some T0].
}
{- [C: 'a... . T1 * ... * Tn -> T0] when
- [existentials] is [['a;...]],
- [c_args] is [[T1; ... ; Tn]],
- [t_opt] is [Some T0].
}
} *)|Pext_rebindoflongident_loc(** [Pext_rebind(D)] re-export the constructor [D] with the new name [C]
*)(** {1 Class language} *)(** {2 Type expressions for the class language} *)andclass_type=Parsetree.class_type={pcty_desc:class_type_desc;pcty_loc:location;pcty_attributes:attributes;(** [... [@id1] [@id2]] *)}andclass_type_desc=Parsetree.class_type_desc=|Pcty_constroflongident_loc*core_typelist(** - [c]
- [['a1, ..., 'an] c] *)|Pcty_signatureofclass_signature(** [object ... end] *)|Pcty_arrowofarg_label*core_type*class_type(** [Pcty_arrow(lbl, T, CT)] represents:
- [T -> CT] when [lbl] is {{!Asttypes.arg_label.Nolabel} [Nolabel]},
- [~l:T -> CT] when [lbl] is
{{!Asttypes.arg_label.Labelled} [Labelled l]},
- [?l:T -> CT] when [lbl] is
{{!Asttypes.arg_label.Optional} [Optional l]}. *)|Pcty_extensionofextension(** [%id] *)|Pcty_openofopen_description*class_type(** [let open M in CT] *)andclass_signature=Parsetree.class_signature={pcsig_self:core_type;pcsig_fields:class_type_fieldlist;}(** Values of type [class_signature] represents:
- [object('selfpat) ... end]
- [object ... end] when {{!class_signature.pcsig_self} [pcsig_self]} is
{{!core_type_desc.Ptyp_any} [Ptyp_any]} *)andclass_type_field=Parsetree.class_type_field={pctf_desc:class_type_field_desc;pctf_loc:location;pctf_attributes:attributes;(** [... [@@id1] [@@id2]] *)}andclass_type_field_desc=Parsetree.class_type_field_desc=|Pctf_inheritofclass_type(** [inherit CT] *)|Pctf_valof(labelloc*mutable_flag*virtual_flag*core_type)(** [val x: T] *)|Pctf_methodof(labelloc*private_flag*virtual_flag*core_type)(** [method x: T]
Note: [T] can be a {{!core_type_desc.Ptyp_poly} [Ptyp_poly]}. *)|Pctf_constraintof(core_type*core_type)(** [constraint T1 = T2] *)|Pctf_attributeofattribute(** [[@@@id]] *)|Pctf_extensionofextension(** [[%%id]] *)and'aclass_infos='aParsetree.class_infos={pci_virt:virtual_flag;pci_params:(core_type*(variance*injectivity))list;pci_name:stringloc;pci_expr:'a;pci_loc:location;pci_attributes:attributes;(** [... [@@id1] [@@id2]] *)}(** Values of type [class_expr class_infos] represents:
- [class c = ...]
- [class ['a1,...,'an] c = ...]
- [class virtual c = ...]
They are also used for "class type" declaration. *)andclass_description=class_typeclass_infosandclass_type_declaration=class_typeclass_infos(** {2 Value expressions for the class language} *)andclass_expr=Parsetree.class_expr={pcl_desc:class_expr_desc;pcl_loc:location;pcl_attributes:attributes;(** [... [@id1] [@id2]] *)}andclass_expr_desc=Parsetree.class_expr_desc=|Pcl_constroflongident_loc*core_typelist(** [c] and [['a1, ..., 'an] c] *)|Pcl_structureofclass_structure(** [object ... end] *)|Pcl_funofarg_label*expressionoption*pattern*class_expr(** [Pcl_fun(lbl, exp0, P, CE)] represents:
- [fun P -> CE] when [lbl] is
{{!Asttypes.arg_label.Nolabel} [Nolabel]} and [exp0] is [None],
- [fun ~l:P -> CE] when [lbl] is
{{!Asttypes.arg_label.Labelled} [Labelled l]} and [exp0] is [None],
- [fun ?l:P -> CE] when [lbl] is
{{!Asttypes.arg_label.Optional} [Optional l]} and [exp0] is [None],
- [fun ?l:(P = E0) -> CE] when [lbl] is
{{!Asttypes.arg_label.Optional} [Optional l]} and [exp0] is
[Some E0]. *)|Pcl_applyofclass_expr*(arg_label*expression)list(** [Pcl_apply(CE, [(l1,E1) ; ... ; (ln,En)])] represents
[CE ~l1:E1 ... ~ln:En]. [li] can be empty (non labeled argument) or
start with [?] (optional argument).
Invariant: [n > 0] *)|Pcl_letofrec_flag*value_bindinglist*class_expr(** [Pcl_let(rec, [(P1, E1); ... ; (Pn, En)], CE)] represents:
- [let P1 = E1 and ... and Pn = EN in CE] when [rec] is
{{!Asttypes.rec_flag.Nonrecursive} [Nonrecursive]},
- [let rec P1 = E1 and ... and Pn = EN in CE] when [rec] is
{{!Asttypes.rec_flag.Recursive} [Recursive]}. *)|Pcl_constraintofclass_expr*class_type(** [(CE : CT)] *)|Pcl_extensionofextension(** [[%id]] *)|Pcl_openofopen_description*class_expr(** [let open M in CE] *)andclass_structure=Parsetree.class_structure={pcstr_self:pattern;pcstr_fields:class_fieldlist;}(** Values of type {!class_structure} represents:
- [object(selfpat) ... end]
- [object ... end] when {{!class_structure.pcstr_self} [pcstr_self]} is
{{!pattern_desc.Ppat_any} [Ppat_any]} *)andclass_field=Parsetree.class_field={pcf_desc:class_field_desc;pcf_loc:location;pcf_attributes:attributes;(** [... [@@id1] [@@id2]] *)}andclass_field_desc=Parsetree.class_field_desc=|Pcf_inheritofoverride_flag*class_expr*stringlocoption(** [Pcf_inherit(flag, CE, s)] represents:
- [inherit CE] when [flag] is
{{!Asttypes.override_flag.Fresh} [Fresh]} and [s] is [None],
- [inherit CE as x] when [flag] is
{{!Asttypes.override_flag.Fresh} [Fresh]} and [s] is [Some x],
- [inherit! CE] when [flag] is
{{!Asttypes.override_flag.Override} [Override]} and [s] is [None],
- [inherit! CE as x] when [flag] is
{{!Asttypes.override_flag.Override} [Override]} and [s] is [Some x]
*)|Pcf_valof(labelloc*mutable_flag*class_field_kind)(** [Pcf_val(x,flag, kind)] represents:
- [val x = E] when [flag] is
{{!Asttypes.mutable_flag.Immutable} [Immutable]} and [kind] is
{{!class_field_kind.Cfk_concrete} [Cfk_concrete(Fresh, E)]}
- [val virtual x: T] when [flag] is
{{!Asttypes.mutable_flag.Immutable} [Immutable]} and [kind] is
{{!class_field_kind.Cfk_virtual} [Cfk_virtual(T)]}
- [val mutable x = E] when [flag] is
{{!Asttypes.mutable_flag.Mutable} [Mutable]} and [kind] is
{{!class_field_kind.Cfk_concrete} [Cfk_concrete(Fresh, E)]}
- [val mutable virtual x: T] when [flag] is
{{!Asttypes.mutable_flag.Mutable} [Mutable]} and [kind] is
{{!class_field_kind.Cfk_virtual} [Cfk_virtual(T)]} *)|Pcf_methodof(labelloc*private_flag*class_field_kind)(** - [method x = E] ([E] can be a
{{!expression_desc.Pexp_poly} [Pexp_poly]})
- [method virtual x: T] ([T] can be a
{{!core_type_desc.Ptyp_poly} [Ptyp_poly]}) *)|Pcf_constraintof(core_type*core_type)(** [constraint T1 = T2] *)|Pcf_initializerofexpression(** [initializer E] *)|Pcf_attributeofattribute(** [[@@@id]] *)|Pcf_extensionofextension(** [[%%id]] *)andclass_field_kind=Parsetree.class_field_kind=|Cfk_virtualofcore_type|Cfk_concreteofoverride_flag*expressionandclass_declaration=class_exprclass_infos(** {1 Module language} *)(** {2 Type expressions for the module language} *)andmodule_type=Parsetree.module_type={pmty_desc:module_type_desc;pmty_loc:location;pmty_attributes:attributes;(** [... [@id1] [@id2]] *)}andmodule_type_desc=Parsetree.module_type_desc=|Pmty_identoflongident_loc(** [Pmty_ident(S)] represents [S] *)|Pmty_signatureofsignature(** [sig ... end] *)|Pmty_functoroffunctor_parameter*module_type(** [functor(X : MT1) -> MT2] *)|Pmty_withofmodule_type*with_constraintlist(** [MT with ...] *)|Pmty_typeofofmodule_expr(** [module type of ME] *)|Pmty_extensionofextension(** [[%id]] *)|Pmty_aliasoflongident_loc(** [(module M)] *)andfunctor_parameter=Parsetree.functor_parameter=|Unit(** [()] *)|Namedofstringoptionloc*module_type(** [Named(name, MT)] represents:
- [(X : MT)] when [name] is [Some X],
- [(_ : MT)] when [name] is [None] *)andsignature=signature_itemlistandsignature_item=Parsetree.signature_item={psig_desc:signature_item_desc;psig_loc:location;}andsignature_item_desc=Parsetree.signature_item_desc=|Psig_valueofvalue_description(** - [val x: T]
- [external x: T = "s1" ... "sn"] *)|Psig_typeofrec_flag*type_declarationlist(** [type t1 = ... and ... and tn = ...] *)|Psig_typesubstoftype_declarationlist(** [type t1 := ... and ... and tn := ...] *)|Psig_typextoftype_extension(** [type t1 += ...] *)|Psig_exceptionoftype_exception(** [exception C of T] *)|Psig_moduleofmodule_declaration(** [module X = M] and [module X : MT] *)|Psig_modsubstofmodule_substitution(** [module X := M] *)|Psig_recmoduleofmodule_declarationlist(** [module rec X1 : MT1 and ... and Xn : MTn] *)|Psig_modtypeofmodule_type_declaration(** [module type S = MT] and [module type S] *)|Psig_modtypesubstofmodule_type_declaration(** [module type S := ...] *)|Psig_openofopen_description(** [open X] *)|Psig_includeofinclude_description(** [include MT] *)|Psig_classofclass_descriptionlist(** [class c1 : ... and ... and cn : ...] *)|Psig_class_typeofclass_type_declarationlist(** [class type ct1 = ... and ... and ctn = ...] *)|Psig_attributeofattribute(** [[@@@id]] *)|Psig_extensionofextension*attributes(** [[%%id]] *)andmodule_declaration=Parsetree.module_declaration={pmd_name:stringoptionloc;pmd_type:module_type;pmd_attributes:attributes;(** [... [@@id1] [@@id2]] *)pmd_loc:location;}(** Values of type [module_declaration] represents [S : MT] *)andmodule_substitution=Parsetree.module_substitution={pms_name:stringloc;pms_manifest:longident_loc;pms_attributes:attributes;(** [... [@@id1] [@@id2]] *)pms_loc:location;}(** Values of type [module_substitution] represents [S := M] *)andmodule_type_declaration=Parsetree.module_type_declaration={pmtd_name:stringloc;pmtd_type:module_typeoption;pmtd_attributes:attributes;(** [... [@@id1] [@@id2]] *)pmtd_loc:location;}(** Values of type [module_type_declaration] represents:
- [S = MT],
- [S] for abstract module type declaration, when
{{!module_type_declaration.pmtd_type} [pmtd_type]} is [None]. *)and'aopen_infos='aParsetree.open_infos={popen_expr:'a;popen_override:override_flag;popen_loc:location;popen_attributes:attributes;}(** Values of type ['a open_infos] represents:
- [open! X] when {{!open_infos.popen_override} [popen_override]} is
{{!Asttypes.override_flag.Override} [Override]} (silences the "used
identifier shadowing" warning)
- [open X] when {{!open_infos.popen_override} [popen_override]} is
{{!Asttypes.override_flag.Fresh} [Fresh]} *)andopen_description=longident_locopen_infos(** Values of type [open_description] represents:
- [open M.N]
- [open M(N).O] *)andopen_declaration=module_expropen_infos(** Values of type [open_declaration] represents:
- [open M.N]
- [open M(N).O]
- [open struct ... end] *)and'ainclude_infos='aParsetree.include_infos={pincl_mod:'a;pincl_loc:location;pincl_attributes:attributes;}andinclude_description=module_typeinclude_infos(** Values of type [include_description] represents [include MT] *)andinclude_declaration=module_exprinclude_infos(** Values of type [include_declaration] represents [include ME] *)andwith_constraint=Parsetree.with_constraint=|Pwith_typeoflongident_loc*type_declaration(** [with type X.t = ...]
Note: the last component of the longident must match the name of the
type_declaration. *)|Pwith_moduleoflongident_loc*longident_loc(** [with module X.Y = Z] *)|Pwith_modtypeoflongident_loc*module_type(** [with module type X.Y = Z] *)|Pwith_modtypesubstoflongident_loc*module_type(** [with module type X.Y := sig end] *)|Pwith_typesubstoflongident_loc*type_declaration(** [with type X.t := ..., same format as [Pwith_type]] *)|Pwith_modsubstoflongident_loc*longident_loc(** [with module X.Y := Z] *)(** {2 Value expressions for the module language} *)andmodule_expr=Parsetree.module_expr={pmod_desc:module_expr_desc;pmod_loc:location;pmod_attributes:attributes;(** [... [@id1] [@id2]] *)}andmodule_expr_desc=Parsetree.module_expr_desc=|Pmod_identoflongident_loc(** [X] *)|Pmod_structureofstructure(** [struct ... end] *)|Pmod_functoroffunctor_parameter*module_expr(** [functor(X : MT1) -> ME] *)|Pmod_applyofmodule_expr*module_expr(** [ME1(ME2)] *)|Pmod_constraintofmodule_expr*module_type(** [(ME : MT)] *)|Pmod_unpackofexpression(** [(val E)] *)|Pmod_extensionofextension(** [[%id]] *)andstructure=structure_itemlistandstructure_item=Parsetree.structure_item={pstr_desc:structure_item_desc;pstr_loc:location;}andstructure_item_desc=Parsetree.structure_item_desc=|Pstr_evalofexpression*attributes(** [E] *)|Pstr_valueofrec_flag*value_bindinglist(** [Pstr_value(rec, [(P1, E1 ; ... ; (Pn, En))])] represents:
- [let P1 = E1 and ... and Pn = EN] when [rec] is
{{!Asttypes.rec_flag.Nonrecursive} [Nonrecursive]},
- [let rec P1 = E1 and ... and Pn = EN ] when [rec] is
{{!Asttypes.rec_flag.Recursive} [Recursive]}. *)|Pstr_primitiveofvalue_description(** - [val x: T]
- [external x: T = "s1" ... "sn" ]*)|Pstr_typeofrec_flag*type_declarationlist(** [type t1 = ... and ... and tn = ...] *)|Pstr_typextoftype_extension(** [type t1 += ...] *)|Pstr_exceptionoftype_exception(** - [exception C of T]
- [exception C = M.X] *)|Pstr_moduleofmodule_binding(** [module X = ME] *)|Pstr_recmoduleofmodule_bindinglist(** [module rec X1 = ME1 and ... and Xn = MEn] *)|Pstr_modtypeofmodule_type_declaration(** [module type S = MT] *)|Pstr_openofopen_declaration(** [open X] *)|Pstr_classofclass_declarationlist(** [class c1 = ... and ... and cn = ...] *)|Pstr_class_typeofclass_type_declarationlist(** [class type ct1 = ... and ... and ctn = ...] *)|Pstr_includeofinclude_declaration(** [include ME] *)|Pstr_attributeofattribute(** [[@@@id]] *)|Pstr_extensionofextension*attributes(** [[%%id]] *)andvalue_binding=Parsetree.value_binding={pvb_pat:pattern;pvb_expr:expression;pvb_attributes:attributes;pvb_loc:location;}andmodule_binding=Parsetree.module_binding={pmb_name:stringoptionloc;pmb_expr:module_expr;pmb_attributes:attributes;pmb_loc:location;}(** Values of type [module_binding] represents [module X = ME] *)(** {1 Toplevel} *)(** {2 Toplevel phrases} *)andtoplevel_phrase=Parsetree.toplevel_phrase=|Ptop_defofstructure|Ptop_diroftoplevel_directive(** [#use], [#load] ... *)andtoplevel_directive=Parsetree.toplevel_directive={pdir_name:stringloc;pdir_arg:directive_argumentoption;pdir_loc:location;}anddirective_argument=Parsetree.directive_argument={pdira_desc:directive_argument_desc;pdira_loc:location;}anddirective_argument_desc=Parsetree.directive_argument_desc=|Pdir_stringofstring|Pdir_intofstring*charoption|Pdir_identoflongident|Pdir_boolofboolandcases=caselist[@@deriving_inlinetraverse]classvirtualmap=object(self)methodvirtualbool:bool->boolmethodvirtualchar:char->charmethodvirtualint:int->intmethodvirtuallist:'a.('a->'a)->'alist->'alistmethodvirtualoption:'a.('a->'a)->'aoption->'aoptionmethodvirtualstring:string->stringmethodposition:position->position=fun{pos_fname;pos_lnum;pos_bol;pos_cnum}->letpos_fname=self#stringpos_fnameinletpos_lnum=self#intpos_lnuminletpos_bol=self#intpos_bolinletpos_cnum=self#intpos_cnumin{pos_fname;pos_lnum;pos_bol;pos_cnum}methodlocation:location->location=fun{loc_start;loc_end;loc_ghost}->letloc_start=self#positionloc_startinletloc_end=self#positionloc_endinletloc_ghost=self#boolloc_ghostin{loc_start;loc_end;loc_ghost}methodlocation_stack:location_stack->location_stack=self#listself#locationmethodloc:'a.('a->'a)->'aloc->'aloc=fun_a{txt;loc}->lettxt=_atxtinletloc=self#locationlocin{txt;loc}methodlongident:longident->longident=funx->matchxwith|Lidenta->leta=self#stringainLidenta|Ldot(a,b)->leta=self#longidentainletb=self#stringbinLdot(a,b)|Lapply(a,b)->leta=self#longidentainletb=self#longidentbinLapply(a,b)methodlongident_loc:longident_loc->longident_loc=self#locself#longidentmethodrec_flag:rec_flag->rec_flag=funx->xmethoddirection_flag:direction_flag->direction_flag=funx->xmethodprivate_flag:private_flag->private_flag=funx->xmethodmutable_flag:mutable_flag->mutable_flag=funx->xmethodvirtual_flag:virtual_flag->virtual_flag=funx->xmethodoverride_flag:override_flag->override_flag=funx->xmethodclosed_flag:closed_flag->closed_flag=funx->xmethodlabel:label->label=self#stringmethodarg_label:arg_label->arg_label=funx->matchxwith|Nolabel->Nolabel|Labelleda->leta=self#stringainLabelleda|Optionala->leta=self#stringainOptionalamethodvariance:variance->variance=funx->xmethodinjectivity:injectivity->injectivity=funx->xmethodconstant:constant->constant=funx->matchxwith|Pconst_integer(a,b)->leta=self#stringainletb=self#optionself#charbinPconst_integer(a,b)|Pconst_chara->leta=self#charainPconst_chara|Pconst_string(a,b,c)->leta=self#stringainletb=self#locationbinletc=self#optionself#stringcinPconst_string(a,b,c)|Pconst_float(a,b)->leta=self#stringainletb=self#optionself#charbinPconst_float(a,b)methodattribute:attribute->attribute=fun{attr_name;attr_payload;attr_loc}->letattr_name=self#locself#stringattr_nameinletattr_payload=self#payloadattr_payloadinletattr_loc=self#locationattr_locin{attr_name;attr_payload;attr_loc}methodextension:extension->extension=fun(a,b)->leta=self#locself#stringainletb=self#payloadbin(a,b)methodattributes:attributes->attributes=self#listself#attributemethodpayload:payload->payload=funx->matchxwith|PStra->leta=self#structureainPStra|PSiga->leta=self#signatureainPSiga|PTypa->leta=self#core_typeainPTypa|PPat(a,b)->leta=self#patternainletb=self#optionself#expressionbinPPat(a,b)methodcore_type:core_type->core_type=fun{ptyp_desc;ptyp_loc;ptyp_loc_stack;ptyp_attributes}->letptyp_desc=self#core_type_descptyp_descinletptyp_loc=self#locationptyp_locinletptyp_loc_stack=self#location_stackptyp_loc_stackinletptyp_attributes=self#attributesptyp_attributesin{ptyp_desc;ptyp_loc;ptyp_loc_stack;ptyp_attributes}methodcore_type_desc:core_type_desc->core_type_desc=funx->matchxwith|Ptyp_any->Ptyp_any|Ptyp_vara->leta=self#stringainPtyp_vara|Ptyp_arrow(a,b,c)->leta=self#arg_labelainletb=self#core_typebinletc=self#core_typecinPtyp_arrow(a,b,c)|Ptyp_tuplea->leta=self#listself#core_typeainPtyp_tuplea|Ptyp_constr(a,b)->leta=self#longident_locainletb=self#listself#core_typebinPtyp_constr(a,b)|Ptyp_object(a,b)->leta=self#listself#object_fieldainletb=self#closed_flagbinPtyp_object(a,b)|Ptyp_class(a,b)->leta=self#longident_locainletb=self#listself#core_typebinPtyp_class(a,b)|Ptyp_alias(a,b)->leta=self#core_typeainletb=self#stringbinPtyp_alias(a,b)|Ptyp_variant(a,b,c)->leta=self#listself#row_fieldainletb=self#closed_flagbinletc=self#option(self#listself#label)cinPtyp_variant(a,b,c)|Ptyp_poly(a,b)->leta=self#list(self#locself#string)ainletb=self#core_typebinPtyp_poly(a,b)|Ptyp_packagea->leta=self#package_typeainPtyp_packagea|Ptyp_extensiona->leta=self#extensionainPtyp_extensionamethodpackage_type:package_type->package_type=fun(a,b)->leta=self#longident_locainletb=self#list(fun(a,b)->leta=self#longident_locainletb=self#core_typebin(a,b))bin(a,b)methodrow_field:row_field->row_field=fun{prf_desc;prf_loc;prf_attributes}->letprf_desc=self#row_field_descprf_descinletprf_loc=self#locationprf_locinletprf_attributes=self#attributesprf_attributesin{prf_desc;prf_loc;prf_attributes}methodrow_field_desc:row_field_desc->row_field_desc=funx->matchxwith|Rtag(a,b,c)->leta=self#locself#labelainletb=self#boolbinletc=self#listself#core_typecinRtag(a,b,c)|Rinherita->leta=self#core_typeainRinheritamethodobject_field:object_field->object_field=fun{pof_desc;pof_loc;pof_attributes}->letpof_desc=self#object_field_descpof_descinletpof_loc=self#locationpof_locinletpof_attributes=self#attributespof_attributesin{pof_desc;pof_loc;pof_attributes}methodobject_field_desc:object_field_desc->object_field_desc=funx->matchxwith|Otag(a,b)->leta=self#locself#labelainletb=self#core_typebinOtag(a,b)|Oinherita->leta=self#core_typeainOinheritamethodpattern:pattern->pattern=fun{ppat_desc;ppat_loc;ppat_loc_stack;ppat_attributes}->letppat_desc=self#pattern_descppat_descinletppat_loc=self#locationppat_locinletppat_loc_stack=self#location_stackppat_loc_stackinletppat_attributes=self#attributesppat_attributesin{ppat_desc;ppat_loc;ppat_loc_stack;ppat_attributes}methodpattern_desc:pattern_desc->pattern_desc=funx->matchxwith|Ppat_any->Ppat_any|Ppat_vara->leta=self#locself#stringainPpat_vara|Ppat_alias(a,b)->leta=self#patternainletb=self#locself#stringbinPpat_alias(a,b)|Ppat_constanta->leta=self#constantainPpat_constanta|Ppat_interval(a,b)->leta=self#constantainletb=self#constantbinPpat_interval(a,b)|Ppat_tuplea->leta=self#listself#patternainPpat_tuplea|Ppat_construct(a,b)->leta=self#longident_locainletb=self#option(fun(a,b)->leta=self#list(self#locself#string)ainletb=self#patternbin(a,b))binPpat_construct(a,b)|Ppat_variant(a,b)->leta=self#labelainletb=self#optionself#patternbinPpat_variant(a,b)|Ppat_record(a,b)->leta=self#list(fun(a,b)->leta=self#longident_locainletb=self#patternbin(a,b))ainletb=self#closed_flagbinPpat_record(a,b)|Ppat_arraya->leta=self#listself#patternainPpat_arraya|Ppat_or(a,b)->leta=self#patternainletb=self#patternbinPpat_or(a,b)|Ppat_constraint(a,b)->leta=self#patternainletb=self#core_typebinPpat_constraint(a,b)|Ppat_typea->leta=self#longident_locainPpat_typea|Ppat_lazya->leta=self#patternainPpat_lazya|Ppat_unpacka->leta=self#loc(self#optionself#string)ainPpat_unpacka|Ppat_exceptiona->leta=self#patternainPpat_exceptiona|Ppat_extensiona->leta=self#extensionainPpat_extensiona|Ppat_open(a,b)->leta=self#longident_locainletb=self#patternbinPpat_open(a,b)methodexpression:expression->expression=fun{pexp_desc;pexp_loc;pexp_loc_stack;pexp_attributes}->letpexp_desc=self#expression_descpexp_descinletpexp_loc=self#locationpexp_locinletpexp_loc_stack=self#location_stackpexp_loc_stackinletpexp_attributes=self#attributespexp_attributesin{pexp_desc;pexp_loc;pexp_loc_stack;pexp_attributes}methodexpression_desc:expression_desc->expression_desc=funx->matchxwith|Pexp_identa->leta=self#longident_locainPexp_identa|Pexp_constanta->leta=self#constantainPexp_constanta|Pexp_let(a,b,c)->leta=self#rec_flagainletb=self#listself#value_bindingbinletc=self#expressioncinPexp_let(a,b,c)|Pexp_functiona->leta=self#casesainPexp_functiona|Pexp_fun(a,b,c,d)->leta=self#arg_labelainletb=self#optionself#expressionbinletc=self#patterncinletd=self#expressiondinPexp_fun(a,b,c,d)|Pexp_apply(a,b)->leta=self#expressionainletb=self#list(fun(a,b)->leta=self#arg_labelainletb=self#expressionbin(a,b))binPexp_apply(a,b)|Pexp_match(a,b)->leta=self#expressionainletb=self#casesbinPexp_match(a,b)|Pexp_try(a,b)->leta=self#expressionainletb=self#casesbinPexp_try(a,b)|Pexp_tuplea->leta=self#listself#expressionainPexp_tuplea|Pexp_construct(a,b)->leta=self#longident_locainletb=self#optionself#expressionbinPexp_construct(a,b)|Pexp_variant(a,b)->leta=self#labelainletb=self#optionself#expressionbinPexp_variant(a,b)|Pexp_record(a,b)->leta=self#list(fun(a,b)->leta=self#longident_locainletb=self#expressionbin(a,b))ainletb=self#optionself#expressionbinPexp_record(a,b)|Pexp_field(a,b)->leta=self#expressionainletb=self#longident_locbinPexp_field(a,b)|Pexp_setfield(a,b,c)->leta=self#expressionainletb=self#longident_locbinletc=self#expressioncinPexp_setfield(a,b,c)|Pexp_arraya->leta=self#listself#expressionainPexp_arraya|Pexp_ifthenelse(a,b,c)->leta=self#expressionainletb=self#expressionbinletc=self#optionself#expressioncinPexp_ifthenelse(a,b,c)|Pexp_sequence(a,b)->leta=self#expressionainletb=self#expressionbinPexp_sequence(a,b)|Pexp_while(a,b)->leta=self#expressionainletb=self#expressionbinPexp_while(a,b)|Pexp_for(a,b,c,d,e)->leta=self#patternainletb=self#expressionbinletc=self#expressioncinletd=self#direction_flagdinlete=self#expressioneinPexp_for(a,b,c,d,e)|Pexp_constraint(a,b)->leta=self#expressionainletb=self#core_typebinPexp_constraint(a,b)|Pexp_coerce(a,b,c)->leta=self#expressionainletb=self#optionself#core_typebinletc=self#core_typecinPexp_coerce(a,b,c)|Pexp_send(a,b)->leta=self#expressionainletb=self#locself#labelbinPexp_send(a,b)|Pexp_newa->leta=self#longident_locainPexp_newa|Pexp_setinstvar(a,b)->leta=self#locself#labelainletb=self#expressionbinPexp_setinstvar(a,b)|Pexp_overridea->leta=self#list(fun(a,b)->leta=self#locself#labelainletb=self#expressionbin(a,b))ainPexp_overridea|Pexp_letmodule(a,b,c)->leta=self#loc(self#optionself#string)ainletb=self#module_exprbinletc=self#expressioncinPexp_letmodule(a,b,c)|Pexp_letexception(a,b)->leta=self#extension_constructorainletb=self#expressionbinPexp_letexception(a,b)|Pexp_asserta->leta=self#expressionainPexp_asserta|Pexp_lazya->leta=self#expressionainPexp_lazya|Pexp_poly(a,b)->leta=self#expressionainletb=self#optionself#core_typebinPexp_poly(a,b)|Pexp_objecta->leta=self#class_structureainPexp_objecta|Pexp_newtype(a,b)->leta=self#locself#stringainletb=self#expressionbinPexp_newtype(a,b)|Pexp_packa->leta=self#module_exprainPexp_packa|Pexp_open(a,b)->leta=self#open_declarationainletb=self#expressionbinPexp_open(a,b)|Pexp_letopa->leta=self#letopainPexp_letopa|Pexp_extensiona->leta=self#extensionainPexp_extensiona|Pexp_unreachable->Pexp_unreachablemethodcase:case->case=fun{pc_lhs;pc_guard;pc_rhs}->letpc_lhs=self#patternpc_lhsinletpc_guard=self#optionself#expressionpc_guardinletpc_rhs=self#expressionpc_rhsin{pc_lhs;pc_guard;pc_rhs}methodletop:letop->letop=fun{let_;ands;body}->letlet_=self#binding_oplet_inletands=self#listself#binding_opandsinletbody=self#expressionbodyin{let_;ands;body}methodbinding_op:binding_op->binding_op=fun{pbop_op;pbop_pat;pbop_exp;pbop_loc}->letpbop_op=self#locself#stringpbop_opinletpbop_pat=self#patternpbop_patinletpbop_exp=self#expressionpbop_expinletpbop_loc=self#locationpbop_locin{pbop_op;pbop_pat;pbop_exp;pbop_loc}methodvalue_description:value_description->value_description=fun{pval_name;pval_type;pval_prim;pval_attributes;pval_loc}->letpval_name=self#locself#stringpval_nameinletpval_type=self#core_typepval_typeinletpval_prim=self#listself#stringpval_priminletpval_attributes=self#attributespval_attributesinletpval_loc=self#locationpval_locin{pval_name;pval_type;pval_prim;pval_attributes;pval_loc}methodtype_declaration:type_declaration->type_declaration=fun{ptype_name;ptype_params;ptype_cstrs;ptype_kind;ptype_private;ptype_manifest;ptype_attributes;ptype_loc;}->letptype_name=self#locself#stringptype_nameinletptype_params=self#list(fun(a,b)->leta=self#core_typeainletb=(fun(a,b)->leta=self#varianceainletb=self#injectivitybin(a,b))bin(a,b))ptype_paramsinletptype_cstrs=self#list(fun(a,b,c)->leta=self#core_typeainletb=self#core_typebinletc=self#locationcin(a,b,c))ptype_cstrsinletptype_kind=self#type_kindptype_kindinletptype_private=self#private_flagptype_privateinletptype_manifest=self#optionself#core_typeptype_manifestinletptype_attributes=self#attributesptype_attributesinletptype_loc=self#locationptype_locin{ptype_name;ptype_params;ptype_cstrs;ptype_kind;ptype_private;ptype_manifest;ptype_attributes;ptype_loc;}methodtype_kind:type_kind->type_kind=funx->matchxwith|Ptype_abstract->Ptype_abstract|Ptype_varianta->leta=self#listself#constructor_declarationainPtype_varianta|Ptype_recorda->leta=self#listself#label_declarationainPtype_recorda|Ptype_open->Ptype_openmethodlabel_declaration:label_declaration->label_declaration=fun{pld_name;pld_mutable;pld_type;pld_loc;pld_attributes}->letpld_name=self#locself#stringpld_nameinletpld_mutable=self#mutable_flagpld_mutableinletpld_type=self#core_typepld_typeinletpld_loc=self#locationpld_locinletpld_attributes=self#attributespld_attributesin{pld_name;pld_mutable;pld_type;pld_loc;pld_attributes}methodconstructor_declaration:constructor_declaration->constructor_declaration=fun{pcd_name;pcd_vars;pcd_args;pcd_res;pcd_loc;pcd_attributes}->letpcd_name=self#locself#stringpcd_nameinletpcd_vars=self#list(self#locself#string)pcd_varsinletpcd_args=self#constructor_argumentspcd_argsinletpcd_res=self#optionself#core_typepcd_resinletpcd_loc=self#locationpcd_locinletpcd_attributes=self#attributespcd_attributesin{pcd_name;pcd_vars;pcd_args;pcd_res;pcd_loc;pcd_attributes}methodconstructor_arguments:constructor_arguments->constructor_arguments=funx->matchxwith|Pcstr_tuplea->leta=self#listself#core_typeainPcstr_tuplea|Pcstr_recorda->leta=self#listself#label_declarationainPcstr_recordamethodtype_extension:type_extension->type_extension=fun{ptyext_path;ptyext_params;ptyext_constructors;ptyext_private;ptyext_loc;ptyext_attributes;}->letptyext_path=self#longident_locptyext_pathinletptyext_params=self#list(fun(a,b)->leta=self#core_typeainletb=(fun(a,b)->leta=self#varianceainletb=self#injectivitybin(a,b))bin(a,b))ptyext_paramsinletptyext_constructors=self#listself#extension_constructorptyext_constructorsinletptyext_private=self#private_flagptyext_privateinletptyext_loc=self#locationptyext_locinletptyext_attributes=self#attributesptyext_attributesin{ptyext_path;ptyext_params;ptyext_constructors;ptyext_private;ptyext_loc;ptyext_attributes;}methodextension_constructor:extension_constructor->extension_constructor=fun{pext_name;pext_kind;pext_loc;pext_attributes}->letpext_name=self#locself#stringpext_nameinletpext_kind=self#extension_constructor_kindpext_kindinletpext_loc=self#locationpext_locinletpext_attributes=self#attributespext_attributesin{pext_name;pext_kind;pext_loc;pext_attributes}methodtype_exception:type_exception->type_exception=fun{ptyexn_constructor;ptyexn_loc;ptyexn_attributes}->letptyexn_constructor=self#extension_constructorptyexn_constructorinletptyexn_loc=self#locationptyexn_locinletptyexn_attributes=self#attributesptyexn_attributesin{ptyexn_constructor;ptyexn_loc;ptyexn_attributes}methodextension_constructor_kind:extension_constructor_kind->extension_constructor_kind=funx->matchxwith|Pext_decl(a,b,c)->leta=self#list(self#locself#string)ainletb=self#constructor_argumentsbinletc=self#optionself#core_typecinPext_decl(a,b,c)|Pext_rebinda->leta=self#longident_locainPext_rebindamethodclass_type:class_type->class_type=fun{pcty_desc;pcty_loc;pcty_attributes}->letpcty_desc=self#class_type_descpcty_descinletpcty_loc=self#locationpcty_locinletpcty_attributes=self#attributespcty_attributesin{pcty_desc;pcty_loc;pcty_attributes}methodclass_type_desc:class_type_desc->class_type_desc=funx->matchxwith|Pcty_constr(a,b)->leta=self#longident_locainletb=self#listself#core_typebinPcty_constr(a,b)|Pcty_signaturea->leta=self#class_signatureainPcty_signaturea|Pcty_arrow(a,b,c)->leta=self#arg_labelainletb=self#core_typebinletc=self#class_typecinPcty_arrow(a,b,c)|Pcty_extensiona->leta=self#extensionainPcty_extensiona|Pcty_open(a,b)->leta=self#open_descriptionainletb=self#class_typebinPcty_open(a,b)methodclass_signature:class_signature->class_signature=fun{pcsig_self;pcsig_fields}->letpcsig_self=self#core_typepcsig_selfinletpcsig_fields=self#listself#class_type_fieldpcsig_fieldsin{pcsig_self;pcsig_fields}methodclass_type_field:class_type_field->class_type_field=fun{pctf_desc;pctf_loc;pctf_attributes}->letpctf_desc=self#class_type_field_descpctf_descinletpctf_loc=self#locationpctf_locinletpctf_attributes=self#attributespctf_attributesin{pctf_desc;pctf_loc;pctf_attributes}methodclass_type_field_desc:class_type_field_desc->class_type_field_desc=funx->matchxwith|Pctf_inherita->leta=self#class_typeainPctf_inherita|Pctf_vala->leta=(fun(a,b,c,d)->leta=self#locself#labelainletb=self#mutable_flagbinletc=self#virtual_flagcinletd=self#core_typedin(a,b,c,d))ainPctf_vala|Pctf_methoda->leta=(fun(a,b,c,d)->leta=self#locself#labelainletb=self#private_flagbinletc=self#virtual_flagcinletd=self#core_typedin(a,b,c,d))ainPctf_methoda|Pctf_constrainta->leta=(fun(a,b)->leta=self#core_typeainletb=self#core_typebin(a,b))ainPctf_constrainta|Pctf_attributea->leta=self#attributeainPctf_attributea|Pctf_extensiona->leta=self#extensionainPctf_extensionamethodclass_infos:'a.('a->'a)->'aclass_infos->'aclass_infos=fun_a{pci_virt;pci_params;pci_name;pci_expr;pci_loc;pci_attributes}->letpci_virt=self#virtual_flagpci_virtinletpci_params=self#list(fun(a,b)->leta=self#core_typeainletb=(fun(a,b)->leta=self#varianceainletb=self#injectivitybin(a,b))bin(a,b))pci_paramsinletpci_name=self#locself#stringpci_nameinletpci_expr=_apci_exprinletpci_loc=self#locationpci_locinletpci_attributes=self#attributespci_attributesin{pci_virt;pci_params;pci_name;pci_expr;pci_loc;pci_attributes}methodclass_description:class_description->class_description=self#class_infosself#class_typemethodclass_type_declaration:class_type_declaration->class_type_declaration=self#class_infosself#class_typemethodclass_expr:class_expr->class_expr=fun{pcl_desc;pcl_loc;pcl_attributes}->letpcl_desc=self#class_expr_descpcl_descinletpcl_loc=self#locationpcl_locinletpcl_attributes=self#attributespcl_attributesin{pcl_desc;pcl_loc;pcl_attributes}methodclass_expr_desc:class_expr_desc->class_expr_desc=funx->matchxwith|Pcl_constr(a,b)->leta=self#longident_locainletb=self#listself#core_typebinPcl_constr(a,b)|Pcl_structurea->leta=self#class_structureainPcl_structurea|Pcl_fun(a,b,c,d)->leta=self#arg_labelainletb=self#optionself#expressionbinletc=self#patterncinletd=self#class_exprdinPcl_fun(a,b,c,d)|Pcl_apply(a,b)->leta=self#class_exprainletb=self#list(fun(a,b)->leta=self#arg_labelainletb=self#expressionbin(a,b))binPcl_apply(a,b)|Pcl_let(a,b,c)->leta=self#rec_flagainletb=self#listself#value_bindingbinletc=self#class_exprcinPcl_let(a,b,c)|Pcl_constraint(a,b)->leta=self#class_exprainletb=self#class_typebinPcl_constraint(a,b)|Pcl_extensiona->leta=self#extensionainPcl_extensiona|Pcl_open(a,b)->leta=self#open_descriptionainletb=self#class_exprbinPcl_open(a,b)methodclass_structure:class_structure->class_structure=fun{pcstr_self;pcstr_fields}->letpcstr_self=self#patternpcstr_selfinletpcstr_fields=self#listself#class_fieldpcstr_fieldsin{pcstr_self;pcstr_fields}methodclass_field:class_field->class_field=fun{pcf_desc;pcf_loc;pcf_attributes}->letpcf_desc=self#class_field_descpcf_descinletpcf_loc=self#locationpcf_locinletpcf_attributes=self#attributespcf_attributesin{pcf_desc;pcf_loc;pcf_attributes}methodclass_field_desc:class_field_desc->class_field_desc=funx->matchxwith|Pcf_inherit(a,b,c)->leta=self#override_flagainletb=self#class_exprbinletc=self#option(self#locself#string)cinPcf_inherit(a,b,c)|Pcf_vala->leta=(fun(a,b,c)->leta=self#locself#labelainletb=self#mutable_flagbinletc=self#class_field_kindcin(a,b,c))ainPcf_vala|Pcf_methoda->leta=(fun(a,b,c)->leta=self#locself#labelainletb=self#private_flagbinletc=self#class_field_kindcin(a,b,c))ainPcf_methoda|Pcf_constrainta->leta=(fun(a,b)->leta=self#core_typeainletb=self#core_typebin(a,b))ainPcf_constrainta|Pcf_initializera->leta=self#expressionainPcf_initializera|Pcf_attributea->leta=self#attributeainPcf_attributea|Pcf_extensiona->leta=self#extensionainPcf_extensionamethodclass_field_kind:class_field_kind->class_field_kind=funx->matchxwith|Cfk_virtuala->leta=self#core_typeainCfk_virtuala|Cfk_concrete(a,b)->leta=self#override_flagainletb=self#expressionbinCfk_concrete(a,b)methodclass_declaration:class_declaration->class_declaration=self#class_infosself#class_exprmethodmodule_type:module_type->module_type=fun{pmty_desc;pmty_loc;pmty_attributes}->letpmty_desc=self#module_type_descpmty_descinletpmty_loc=self#locationpmty_locinletpmty_attributes=self#attributespmty_attributesin{pmty_desc;pmty_loc;pmty_attributes}methodmodule_type_desc:module_type_desc->module_type_desc=funx->matchxwith|Pmty_identa->leta=self#longident_locainPmty_identa|Pmty_signaturea->leta=self#signatureainPmty_signaturea|Pmty_functor(a,b)->leta=self#functor_parameterainletb=self#module_typebinPmty_functor(a,b)|Pmty_with(a,b)->leta=self#module_typeainletb=self#listself#with_constraintbinPmty_with(a,b)|Pmty_typeofa->leta=self#module_exprainPmty_typeofa|Pmty_extensiona->leta=self#extensionainPmty_extensiona|Pmty_aliasa->leta=self#longident_locainPmty_aliasamethodfunctor_parameter:functor_parameter->functor_parameter=funx->matchxwith|Unit->Unit|Named(a,b)->leta=self#loc(self#optionself#string)ainletb=self#module_typebinNamed(a,b)methodsignature:signature->signature=self#listself#signature_itemmethodsignature_item:signature_item->signature_item=fun{psig_desc;psig_loc}->letpsig_desc=self#signature_item_descpsig_descinletpsig_loc=self#locationpsig_locin{psig_desc;psig_loc}methodsignature_item_desc:signature_item_desc->signature_item_desc=funx->matchxwith|Psig_valuea->leta=self#value_descriptionainPsig_valuea|Psig_type(a,b)->leta=self#rec_flagainletb=self#listself#type_declarationbinPsig_type(a,b)|Psig_typesubsta->leta=self#listself#type_declarationainPsig_typesubsta|Psig_typexta->leta=self#type_extensionainPsig_typexta|Psig_exceptiona->leta=self#type_exceptionainPsig_exceptiona|Psig_modulea->leta=self#module_declarationainPsig_modulea|Psig_modsubsta->leta=self#module_substitutionainPsig_modsubsta|Psig_recmodulea->leta=self#listself#module_declarationainPsig_recmodulea|Psig_modtypea->leta=self#module_type_declarationainPsig_modtypea|Psig_modtypesubsta->leta=self#module_type_declarationainPsig_modtypesubsta|Psig_opena->leta=self#open_descriptionainPsig_opena|Psig_includea->leta=self#include_descriptionainPsig_includea|Psig_classa->leta=self#listself#class_descriptionainPsig_classa|Psig_class_typea->leta=self#listself#class_type_declarationainPsig_class_typea|Psig_attributea->leta=self#attributeainPsig_attributea|Psig_extension(a,b)->leta=self#extensionainletb=self#attributesbinPsig_extension(a,b)methodmodule_declaration:module_declaration->module_declaration=fun{pmd_name;pmd_type;pmd_attributes;pmd_loc}->letpmd_name=self#loc(self#optionself#string)pmd_nameinletpmd_type=self#module_typepmd_typeinletpmd_attributes=self#attributespmd_attributesinletpmd_loc=self#locationpmd_locin{pmd_name;pmd_type;pmd_attributes;pmd_loc}methodmodule_substitution:module_substitution->module_substitution=fun{pms_name;pms_manifest;pms_attributes;pms_loc}->letpms_name=self#locself#stringpms_nameinletpms_manifest=self#longident_locpms_manifestinletpms_attributes=self#attributespms_attributesinletpms_loc=self#locationpms_locin{pms_name;pms_manifest;pms_attributes;pms_loc}methodmodule_type_declaration:module_type_declaration->module_type_declaration=fun{pmtd_name;pmtd_type;pmtd_attributes;pmtd_loc}->letpmtd_name=self#locself#stringpmtd_nameinletpmtd_type=self#optionself#module_typepmtd_typeinletpmtd_attributes=self#attributespmtd_attributesinletpmtd_loc=self#locationpmtd_locin{pmtd_name;pmtd_type;pmtd_attributes;pmtd_loc}methodopen_infos:'a.('a->'a)->'aopen_infos->'aopen_infos=fun_a{popen_expr;popen_override;popen_loc;popen_attributes}->letpopen_expr=_apopen_exprinletpopen_override=self#override_flagpopen_overrideinletpopen_loc=self#locationpopen_locinletpopen_attributes=self#attributespopen_attributesin{popen_expr;popen_override;popen_loc;popen_attributes}methodopen_description:open_description->open_description=self#open_infosself#longident_locmethodopen_declaration:open_declaration->open_declaration=self#open_infosself#module_exprmethodinclude_infos:'a.('a->'a)->'ainclude_infos->'ainclude_infos=fun_a{pincl_mod;pincl_loc;pincl_attributes}->letpincl_mod=_apincl_modinletpincl_loc=self#locationpincl_locinletpincl_attributes=self#attributespincl_attributesin{pincl_mod;pincl_loc;pincl_attributes}methodinclude_description:include_description->include_description=self#include_infosself#module_typemethodinclude_declaration:include_declaration->include_declaration=self#include_infosself#module_exprmethodwith_constraint:with_constraint->with_constraint=funx->matchxwith|Pwith_type(a,b)->leta=self#longident_locainletb=self#type_declarationbinPwith_type(a,b)|Pwith_module(a,b)->leta=self#longident_locainletb=self#longident_locbinPwith_module(a,b)|Pwith_modtype(a,b)->leta=self#longident_locainletb=self#module_typebinPwith_modtype(a,b)|Pwith_modtypesubst(a,b)->leta=self#longident_locainletb=self#module_typebinPwith_modtypesubst(a,b)|Pwith_typesubst(a,b)->leta=self#longident_locainletb=self#type_declarationbinPwith_typesubst(a,b)|Pwith_modsubst(a,b)->leta=self#longident_locainletb=self#longident_locbinPwith_modsubst(a,b)methodmodule_expr:module_expr->module_expr=fun{pmod_desc;pmod_loc;pmod_attributes}->letpmod_desc=self#module_expr_descpmod_descinletpmod_loc=self#locationpmod_locinletpmod_attributes=self#attributespmod_attributesin{pmod_desc;pmod_loc;pmod_attributes}methodmodule_expr_desc:module_expr_desc->module_expr_desc=funx->matchxwith|Pmod_identa->leta=self#longident_locainPmod_identa|Pmod_structurea->leta=self#structureainPmod_structurea|Pmod_functor(a,b)->leta=self#functor_parameterainletb=self#module_exprbinPmod_functor(a,b)|Pmod_apply(a,b)->leta=self#module_exprainletb=self#module_exprbinPmod_apply(a,b)|Pmod_constraint(a,b)->leta=self#module_exprainletb=self#module_typebinPmod_constraint(a,b)|Pmod_unpacka->leta=self#expressionainPmod_unpacka|Pmod_extensiona->leta=self#extensionainPmod_extensionamethodstructure:structure->structure=self#listself#structure_itemmethodstructure_item:structure_item->structure_item=fun{pstr_desc;pstr_loc}->letpstr_desc=self#structure_item_descpstr_descinletpstr_loc=self#locationpstr_locin{pstr_desc;pstr_loc}methodstructure_item_desc:structure_item_desc->structure_item_desc=funx->matchxwith|Pstr_eval(a,b)->leta=self#expressionainletb=self#attributesbinPstr_eval(a,b)|Pstr_value(a,b)->leta=self#rec_flagainletb=self#listself#value_bindingbinPstr_value(a,b)|Pstr_primitivea->leta=self#value_descriptionainPstr_primitivea|Pstr_type(a,b)->leta=self#rec_flagainletb=self#listself#type_declarationbinPstr_type(a,b)|Pstr_typexta->leta=self#type_extensionainPstr_typexta|Pstr_exceptiona->leta=self#type_exceptionainPstr_exceptiona|Pstr_modulea->leta=self#module_bindingainPstr_modulea|Pstr_recmodulea->leta=self#listself#module_bindingainPstr_recmodulea|Pstr_modtypea->leta=self#module_type_declarationainPstr_modtypea|Pstr_opena->leta=self#open_declarationainPstr_opena|Pstr_classa->leta=self#listself#class_declarationainPstr_classa|Pstr_class_typea->leta=self#listself#class_type_declarationainPstr_class_typea|Pstr_includea->leta=self#include_declarationainPstr_includea|Pstr_attributea->leta=self#attributeainPstr_attributea|Pstr_extension(a,b)->leta=self#extensionainletb=self#attributesbinPstr_extension(a,b)methodvalue_binding:value_binding->value_binding=fun{pvb_pat;pvb_expr;pvb_attributes;pvb_loc}->letpvb_pat=self#patternpvb_patinletpvb_expr=self#expressionpvb_exprinletpvb_attributes=self#attributespvb_attributesinletpvb_loc=self#locationpvb_locin{pvb_pat;pvb_expr;pvb_attributes;pvb_loc}methodmodule_binding:module_binding->module_binding=fun{pmb_name;pmb_expr;pmb_attributes;pmb_loc}->letpmb_name=self#loc(self#optionself#string)pmb_nameinletpmb_expr=self#module_exprpmb_exprinletpmb_attributes=self#attributespmb_attributesinletpmb_loc=self#locationpmb_locin{pmb_name;pmb_expr;pmb_attributes;pmb_loc}methodtoplevel_phrase:toplevel_phrase->toplevel_phrase=funx->matchxwith|Ptop_defa->leta=self#structureainPtop_defa|Ptop_dira->leta=self#toplevel_directiveainPtop_diramethodtoplevel_directive:toplevel_directive->toplevel_directive=fun{pdir_name;pdir_arg;pdir_loc}->letpdir_name=self#locself#stringpdir_nameinletpdir_arg=self#optionself#directive_argumentpdir_arginletpdir_loc=self#locationpdir_locin{pdir_name;pdir_arg;pdir_loc}methoddirective_argument:directive_argument->directive_argument=fun{pdira_desc;pdira_loc}->letpdira_desc=self#directive_argument_descpdira_descinletpdira_loc=self#locationpdira_locin{pdira_desc;pdira_loc}methoddirective_argument_desc:directive_argument_desc->directive_argument_desc=funx->matchxwith|Pdir_stringa->leta=self#stringainPdir_stringa|Pdir_int(a,b)->leta=self#stringainletb=self#optionself#charbinPdir_int(a,b)|Pdir_identa->leta=self#longidentainPdir_identa|Pdir_boola->leta=self#boolainPdir_boolamethodcases:cases->cases=self#listself#caseendclassvirtualiter=object(self)methodvirtualbool:bool->unitmethodvirtualchar:char->unitmethodvirtualint:int->unitmethodvirtuallist:'a.('a->unit)->'alist->unitmethodvirtualoption:'a.('a->unit)->'aoption->unitmethodvirtualstring:string->unitmethodposition:position->unit=fun{pos_fname;pos_lnum;pos_bol;pos_cnum}->self#stringpos_fname;self#intpos_lnum;self#intpos_bol;self#intpos_cnummethodlocation:location->unit=fun{loc_start;loc_end;loc_ghost}->self#positionloc_start;self#positionloc_end;self#boolloc_ghostmethodlocation_stack:location_stack->unit=self#listself#locationmethodloc:'a.('a->unit)->'aloc->unit=fun_a{txt;loc}->_atxt;self#locationlocmethodlongident:longident->unit=funx->matchxwith|Lidenta->self#stringa|Ldot(a,b)->self#longidenta;self#stringb|Lapply(a,b)->self#longidenta;self#longidentbmethodlongident_loc:longident_loc->unit=self#locself#longidentmethodrec_flag:rec_flag->unit=fun_->()methoddirection_flag:direction_flag->unit=fun_->()methodprivate_flag:private_flag->unit=fun_->()methodmutable_flag:mutable_flag->unit=fun_->()methodvirtual_flag:virtual_flag->unit=fun_->()methodoverride_flag:override_flag->unit=fun_->()methodclosed_flag:closed_flag->unit=fun_->()methodlabel:label->unit=self#stringmethodarg_label:arg_label->unit=funx->matchxwith|Nolabel->()|Labelleda->self#stringa|Optionala->self#stringamethodvariance:variance->unit=fun_->()methodinjectivity:injectivity->unit=fun_->()methodconstant:constant->unit=funx->matchxwith|Pconst_integer(a,b)->self#stringa;self#optionself#charb|Pconst_chara->self#chara|Pconst_string(a,b,c)->self#stringa;self#locationb;self#optionself#stringc|Pconst_float(a,b)->self#stringa;self#optionself#charbmethodattribute:attribute->unit=fun{attr_name;attr_payload;attr_loc}->self#locself#stringattr_name;self#payloadattr_payload;self#locationattr_locmethodextension:extension->unit=fun(a,b)->self#locself#stringa;self#payloadbmethodattributes:attributes->unit=self#listself#attributemethodpayload:payload->unit=funx->matchxwith|PStra->self#structurea|PSiga->self#signaturea|PTypa->self#core_typea|PPat(a,b)->self#patterna;self#optionself#expressionbmethodcore_type:core_type->unit=fun{ptyp_desc;ptyp_loc;ptyp_loc_stack;ptyp_attributes}->self#core_type_descptyp_desc;self#locationptyp_loc;self#location_stackptyp_loc_stack;self#attributesptyp_attributesmethodcore_type_desc:core_type_desc->unit=funx->matchxwith|Ptyp_any->()|Ptyp_vara->self#stringa|Ptyp_arrow(a,b,c)->self#arg_labela;self#core_typeb;self#core_typec|Ptyp_tuplea->self#listself#core_typea|Ptyp_constr(a,b)->self#longident_loca;self#listself#core_typeb|Ptyp_object(a,b)->self#listself#object_fielda;self#closed_flagb|Ptyp_class(a,b)->self#longident_loca;self#listself#core_typeb|Ptyp_alias(a,b)->self#core_typea;self#stringb|Ptyp_variant(a,b,c)->self#listself#row_fielda;self#closed_flagb;self#option(self#listself#label)c|Ptyp_poly(a,b)->self#list(self#locself#string)a;self#core_typeb|Ptyp_packagea->self#package_typea|Ptyp_extensiona->self#extensionamethodpackage_type:package_type->unit=fun(a,b)->self#longident_loca;self#list(fun(a,b)->self#longident_loca;self#core_typeb)bmethodrow_field:row_field->unit=fun{prf_desc;prf_loc;prf_attributes}->self#row_field_descprf_desc;self#locationprf_loc;self#attributesprf_attributesmethodrow_field_desc:row_field_desc->unit=funx->matchxwith|Rtag(a,b,c)->self#locself#labela;self#boolb;self#listself#core_typec|Rinherita->self#core_typeamethodobject_field:object_field->unit=fun{pof_desc;pof_loc;pof_attributes}->self#object_field_descpof_desc;self#locationpof_loc;self#attributespof_attributesmethodobject_field_desc:object_field_desc->unit=funx->matchxwith|Otag(a,b)->self#locself#labela;self#core_typeb|Oinherita->self#core_typeamethodpattern:pattern->unit=fun{ppat_desc;ppat_loc;ppat_loc_stack;ppat_attributes}->self#pattern_descppat_desc;self#locationppat_loc;self#location_stackppat_loc_stack;self#attributesppat_attributesmethodpattern_desc:pattern_desc->unit=funx->matchxwith|Ppat_any->()|Ppat_vara->self#locself#stringa|Ppat_alias(a,b)->self#patterna;self#locself#stringb|Ppat_constanta->self#constanta|Ppat_interval(a,b)->self#constanta;self#constantb|Ppat_tuplea->self#listself#patterna|Ppat_construct(a,b)->self#longident_loca;self#option(fun(a,b)->self#list(self#locself#string)a;self#patternb)b|Ppat_variant(a,b)->self#labela;self#optionself#patternb|Ppat_record(a,b)->self#list(fun(a,b)->self#longident_loca;self#patternb)a;self#closed_flagb|Ppat_arraya->self#listself#patterna|Ppat_or(a,b)->self#patterna;self#patternb|Ppat_constraint(a,b)->self#patterna;self#core_typeb|Ppat_typea->self#longident_loca|Ppat_lazya->self#patterna|Ppat_unpacka->self#loc(self#optionself#string)a|Ppat_exceptiona->self#patterna|Ppat_extensiona->self#extensiona|Ppat_open(a,b)->self#longident_loca;self#patternbmethodexpression:expression->unit=fun{pexp_desc;pexp_loc;pexp_loc_stack;pexp_attributes}->self#expression_descpexp_desc;self#locationpexp_loc;self#location_stackpexp_loc_stack;self#attributespexp_attributesmethodexpression_desc:expression_desc->unit=funx->matchxwith|Pexp_identa->self#longident_loca|Pexp_constanta->self#constanta|Pexp_let(a,b,c)->self#rec_flaga;self#listself#value_bindingb;self#expressionc|Pexp_functiona->self#casesa|Pexp_fun(a,b,c,d)->self#arg_labela;self#optionself#expressionb;self#patternc;self#expressiond|Pexp_apply(a,b)->self#expressiona;self#list(fun(a,b)->self#arg_labela;self#expressionb)b|Pexp_match(a,b)->self#expressiona;self#casesb|Pexp_try(a,b)->self#expressiona;self#casesb|Pexp_tuplea->self#listself#expressiona|Pexp_construct(a,b)->self#longident_loca;self#optionself#expressionb|Pexp_variant(a,b)->self#labela;self#optionself#expressionb|Pexp_record(a,b)->self#list(fun(a,b)->self#longident_loca;self#expressionb)a;self#optionself#expressionb|Pexp_field(a,b)->self#expressiona;self#longident_locb|Pexp_setfield(a,b,c)->self#expressiona;self#longident_locb;self#expressionc|Pexp_arraya->self#listself#expressiona|Pexp_ifthenelse(a,b,c)->self#expressiona;self#expressionb;self#optionself#expressionc|Pexp_sequence(a,b)->self#expressiona;self#expressionb|Pexp_while(a,b)->self#expressiona;self#expressionb|Pexp_for(a,b,c,d,e)->self#patterna;self#expressionb;self#expressionc;self#direction_flagd;self#expressione|Pexp_constraint(a,b)->self#expressiona;self#core_typeb|Pexp_coerce(a,b,c)->self#expressiona;self#optionself#core_typeb;self#core_typec|Pexp_send(a,b)->self#expressiona;self#locself#labelb|Pexp_newa->self#longident_loca|Pexp_setinstvar(a,b)->self#locself#labela;self#expressionb|Pexp_overridea->self#list(fun(a,b)->self#locself#labela;self#expressionb)a|Pexp_letmodule(a,b,c)->self#loc(self#optionself#string)a;self#module_exprb;self#expressionc|Pexp_letexception(a,b)->self#extension_constructora;self#expressionb|Pexp_asserta->self#expressiona|Pexp_lazya->self#expressiona|Pexp_poly(a,b)->self#expressiona;self#optionself#core_typeb|Pexp_objecta->self#class_structurea|Pexp_newtype(a,b)->self#locself#stringa;self#expressionb|Pexp_packa->self#module_expra|Pexp_open(a,b)->self#open_declarationa;self#expressionb|Pexp_letopa->self#letopa|Pexp_extensiona->self#extensiona|Pexp_unreachable->()methodcase:case->unit=fun{pc_lhs;pc_guard;pc_rhs}->self#patternpc_lhs;self#optionself#expressionpc_guard;self#expressionpc_rhsmethodletop:letop->unit=fun{let_;ands;body}->self#binding_oplet_;self#listself#binding_opands;self#expressionbodymethodbinding_op:binding_op->unit=fun{pbop_op;pbop_pat;pbop_exp;pbop_loc}->self#locself#stringpbop_op;self#patternpbop_pat;self#expressionpbop_exp;self#locationpbop_locmethodvalue_description:value_description->unit=fun{pval_name;pval_type;pval_prim;pval_attributes;pval_loc}->self#locself#stringpval_name;self#core_typepval_type;self#listself#stringpval_prim;self#attributespval_attributes;self#locationpval_locmethodtype_declaration:type_declaration->unit=fun{ptype_name;ptype_params;ptype_cstrs;ptype_kind;ptype_private;ptype_manifest;ptype_attributes;ptype_loc;}->self#locself#stringptype_name;self#list(fun(a,b)->self#core_typea;(fun(a,b)->self#variancea;self#injectivityb)b)ptype_params;self#list(fun(a,b,c)->self#core_typea;self#core_typeb;self#locationc)ptype_cstrs;self#type_kindptype_kind;self#private_flagptype_private;self#optionself#core_typeptype_manifest;self#attributesptype_attributes;self#locationptype_locmethodtype_kind:type_kind->unit=funx->matchxwith|Ptype_abstract->()|Ptype_varianta->self#listself#constructor_declarationa|Ptype_recorda->self#listself#label_declarationa|Ptype_open->()methodlabel_declaration:label_declaration->unit=fun{pld_name;pld_mutable;pld_type;pld_loc;pld_attributes}->self#locself#stringpld_name;self#mutable_flagpld_mutable;self#core_typepld_type;self#locationpld_loc;self#attributespld_attributesmethodconstructor_declaration:constructor_declaration->unit=fun{pcd_name;pcd_vars;pcd_args;pcd_res;pcd_loc;pcd_attributes}->self#locself#stringpcd_name;self#list(self#locself#string)pcd_vars;self#constructor_argumentspcd_args;self#optionself#core_typepcd_res;self#locationpcd_loc;self#attributespcd_attributesmethodconstructor_arguments:constructor_arguments->unit=funx->matchxwith|Pcstr_tuplea->self#listself#core_typea|Pcstr_recorda->self#listself#label_declarationamethodtype_extension:type_extension->unit=fun{ptyext_path;ptyext_params;ptyext_constructors;ptyext_private;ptyext_loc;ptyext_attributes;}->self#longident_locptyext_path;self#list(fun(a,b)->self#core_typea;(fun(a,b)->self#variancea;self#injectivityb)b)ptyext_params;self#listself#extension_constructorptyext_constructors;self#private_flagptyext_private;self#locationptyext_loc;self#attributesptyext_attributesmethodextension_constructor:extension_constructor->unit=fun{pext_name;pext_kind;pext_loc;pext_attributes}->self#locself#stringpext_name;self#extension_constructor_kindpext_kind;self#locationpext_loc;self#attributespext_attributesmethodtype_exception:type_exception->unit=fun{ptyexn_constructor;ptyexn_loc;ptyexn_attributes}->self#extension_constructorptyexn_constructor;self#locationptyexn_loc;self#attributesptyexn_attributesmethodextension_constructor_kind:extension_constructor_kind->unit=funx->matchxwith|Pext_decl(a,b,c)->self#list(self#locself#string)a;self#constructor_argumentsb;self#optionself#core_typec|Pext_rebinda->self#longident_locamethodclass_type:class_type->unit=fun{pcty_desc;pcty_loc;pcty_attributes}->self#class_type_descpcty_desc;self#locationpcty_loc;self#attributespcty_attributesmethodclass_type_desc:class_type_desc->unit=funx->matchxwith|Pcty_constr(a,b)->self#longident_loca;self#listself#core_typeb|Pcty_signaturea->self#class_signaturea|Pcty_arrow(a,b,c)->self#arg_labela;self#core_typeb;self#class_typec|Pcty_extensiona->self#extensiona|Pcty_open(a,b)->self#open_descriptiona;self#class_typebmethodclass_signature:class_signature->unit=fun{pcsig_self;pcsig_fields}->self#core_typepcsig_self;self#listself#class_type_fieldpcsig_fieldsmethodclass_type_field:class_type_field->unit=fun{pctf_desc;pctf_loc;pctf_attributes}->self#class_type_field_descpctf_desc;self#locationpctf_loc;self#attributespctf_attributesmethodclass_type_field_desc:class_type_field_desc->unit=funx->matchxwith|Pctf_inherita->self#class_typea|Pctf_vala->(fun(a,b,c,d)->self#locself#labela;self#mutable_flagb;self#virtual_flagc;self#core_typed)a|Pctf_methoda->(fun(a,b,c,d)->self#locself#labela;self#private_flagb;self#virtual_flagc;self#core_typed)a|Pctf_constrainta->(fun(a,b)->self#core_typea;self#core_typeb)a|Pctf_attributea->self#attributea|Pctf_extensiona->self#extensionamethodclass_infos:'a.('a->unit)->'aclass_infos->unit=fun_a{pci_virt;pci_params;pci_name;pci_expr;pci_loc;pci_attributes}->self#virtual_flagpci_virt;self#list(fun(a,b)->self#core_typea;(fun(a,b)->self#variancea;self#injectivityb)b)pci_params;self#locself#stringpci_name;_apci_expr;self#locationpci_loc;self#attributespci_attributesmethodclass_description:class_description->unit=self#class_infosself#class_typemethodclass_type_declaration:class_type_declaration->unit=self#class_infosself#class_typemethodclass_expr:class_expr->unit=fun{pcl_desc;pcl_loc;pcl_attributes}->self#class_expr_descpcl_desc;self#locationpcl_loc;self#attributespcl_attributesmethodclass_expr_desc:class_expr_desc->unit=funx->matchxwith|Pcl_constr(a,b)->self#longident_loca;self#listself#core_typeb|Pcl_structurea->self#class_structurea|Pcl_fun(a,b,c,d)->self#arg_labela;self#optionself#expressionb;self#patternc;self#class_exprd|Pcl_apply(a,b)->self#class_expra;self#list(fun(a,b)->self#arg_labela;self#expressionb)b|Pcl_let(a,b,c)->self#rec_flaga;self#listself#value_bindingb;self#class_exprc|Pcl_constraint(a,b)->self#class_expra;self#class_typeb|Pcl_extensiona->self#extensiona|Pcl_open(a,b)->self#open_descriptiona;self#class_exprbmethodclass_structure:class_structure->unit=fun{pcstr_self;pcstr_fields}->self#patternpcstr_self;self#listself#class_fieldpcstr_fieldsmethodclass_field:class_field->unit=fun{pcf_desc;pcf_loc;pcf_attributes}->self#class_field_descpcf_desc;self#locationpcf_loc;self#attributespcf_attributesmethodclass_field_desc:class_field_desc->unit=funx->matchxwith|Pcf_inherit(a,b,c)->self#override_flaga;self#class_exprb;self#option(self#locself#string)c|Pcf_vala->(fun(a,b,c)->self#locself#labela;self#mutable_flagb;self#class_field_kindc)a|Pcf_methoda->(fun(a,b,c)->self#locself#labela;self#private_flagb;self#class_field_kindc)a|Pcf_constrainta->(fun(a,b)->self#core_typea;self#core_typeb)a|Pcf_initializera->self#expressiona|Pcf_attributea->self#attributea|Pcf_extensiona->self#extensionamethodclass_field_kind:class_field_kind->unit=funx->matchxwith|Cfk_virtuala->self#core_typea|Cfk_concrete(a,b)->self#override_flaga;self#expressionbmethodclass_declaration:class_declaration->unit=self#class_infosself#class_exprmethodmodule_type:module_type->unit=fun{pmty_desc;pmty_loc;pmty_attributes}->self#module_type_descpmty_desc;self#locationpmty_loc;self#attributespmty_attributesmethodmodule_type_desc:module_type_desc->unit=funx->matchxwith|Pmty_identa->self#longident_loca|Pmty_signaturea->self#signaturea|Pmty_functor(a,b)->self#functor_parametera;self#module_typeb|Pmty_with(a,b)->self#module_typea;self#listself#with_constraintb|Pmty_typeofa->self#module_expra|Pmty_extensiona->self#extensiona|Pmty_aliasa->self#longident_locamethodfunctor_parameter:functor_parameter->unit=funx->matchxwith|Unit->()|Named(a,b)->self#loc(self#optionself#string)a;self#module_typebmethodsignature:signature->unit=self#listself#signature_itemmethodsignature_item:signature_item->unit=fun{psig_desc;psig_loc}->self#signature_item_descpsig_desc;self#locationpsig_locmethodsignature_item_desc:signature_item_desc->unit=funx->matchxwith|Psig_valuea->self#value_descriptiona|Psig_type(a,b)->self#rec_flaga;self#listself#type_declarationb|Psig_typesubsta->self#listself#type_declarationa|Psig_typexta->self#type_extensiona|Psig_exceptiona->self#type_exceptiona|Psig_modulea->self#module_declarationa|Psig_modsubsta->self#module_substitutiona|Psig_recmodulea->self#listself#module_declarationa|Psig_modtypea->self#module_type_declarationa|Psig_modtypesubsta->self#module_type_declarationa|Psig_opena->self#open_descriptiona|Psig_includea->self#include_descriptiona|Psig_classa->self#listself#class_descriptiona|Psig_class_typea->self#listself#class_type_declarationa|Psig_attributea->self#attributea|Psig_extension(a,b)->self#extensiona;self#attributesbmethodmodule_declaration:module_declaration->unit=fun{pmd_name;pmd_type;pmd_attributes;pmd_loc}->self#loc(self#optionself#string)pmd_name;self#module_typepmd_type;self#attributespmd_attributes;self#locationpmd_locmethodmodule_substitution:module_substitution->unit=fun{pms_name;pms_manifest;pms_attributes;pms_loc}->self#locself#stringpms_name;self#longident_locpms_manifest;self#attributespms_attributes;self#locationpms_locmethodmodule_type_declaration:module_type_declaration->unit=fun{pmtd_name;pmtd_type;pmtd_attributes;pmtd_loc}->self#locself#stringpmtd_name;self#optionself#module_typepmtd_type;self#attributespmtd_attributes;self#locationpmtd_locmethodopen_infos:'a.('a->unit)->'aopen_infos->unit=fun_a{popen_expr;popen_override;popen_loc;popen_attributes}->_apopen_expr;self#override_flagpopen_override;self#locationpopen_loc;self#attributespopen_attributesmethodopen_description:open_description->unit=self#open_infosself#longident_locmethodopen_declaration:open_declaration->unit=self#open_infosself#module_exprmethodinclude_infos:'a.('a->unit)->'ainclude_infos->unit=fun_a{pincl_mod;pincl_loc;pincl_attributes}->_apincl_mod;self#locationpincl_loc;self#attributespincl_attributesmethodinclude_description:include_description->unit=self#include_infosself#module_typemethodinclude_declaration:include_declaration->unit=self#include_infosself#module_exprmethodwith_constraint:with_constraint->unit=funx->matchxwith|Pwith_type(a,b)->self#longident_loca;self#type_declarationb|Pwith_module(a,b)->self#longident_loca;self#longident_locb|Pwith_modtype(a,b)->self#longident_loca;self#module_typeb|Pwith_modtypesubst(a,b)->self#longident_loca;self#module_typeb|Pwith_typesubst(a,b)->self#longident_loca;self#type_declarationb|Pwith_modsubst(a,b)->self#longident_loca;self#longident_locbmethodmodule_expr:module_expr->unit=fun{pmod_desc;pmod_loc;pmod_attributes}->self#module_expr_descpmod_desc;self#locationpmod_loc;self#attributespmod_attributesmethodmodule_expr_desc:module_expr_desc->unit=funx->matchxwith|Pmod_identa->self#longident_loca|Pmod_structurea->self#structurea|Pmod_functor(a,b)->self#functor_parametera;self#module_exprb|Pmod_apply(a,b)->self#module_expra;self#module_exprb|Pmod_constraint(a,b)->self#module_expra;self#module_typeb|Pmod_unpacka->self#expressiona|Pmod_extensiona->self#extensionamethodstructure:structure->unit=self#listself#structure_itemmethodstructure_item:structure_item->unit=fun{pstr_desc;pstr_loc}->self#structure_item_descpstr_desc;self#locationpstr_locmethodstructure_item_desc:structure_item_desc->unit=funx->matchxwith|Pstr_eval(a,b)->self#expressiona;self#attributesb|Pstr_value(a,b)->self#rec_flaga;self#listself#value_bindingb|Pstr_primitivea->self#value_descriptiona|Pstr_type(a,b)->self#rec_flaga;self#listself#type_declarationb|Pstr_typexta->self#type_extensiona|Pstr_exceptiona->self#type_exceptiona|Pstr_modulea->self#module_bindinga|Pstr_recmodulea->self#listself#module_bindinga|Pstr_modtypea->self#module_type_declarationa|Pstr_opena->self#open_declarationa|Pstr_classa->self#listself#class_declarationa|Pstr_class_typea->self#listself#class_type_declarationa|Pstr_includea->self#include_declarationa|Pstr_attributea->self#attributea|Pstr_extension(a,b)->self#extensiona;self#attributesbmethodvalue_binding:value_binding->unit=fun{pvb_pat;pvb_expr;pvb_attributes;pvb_loc}->self#patternpvb_pat;self#expressionpvb_expr;self#attributespvb_attributes;self#locationpvb_locmethodmodule_binding:module_binding->unit=fun{pmb_name;pmb_expr;pmb_attributes;pmb_loc}->self#loc(self#optionself#string)pmb_name;self#module_exprpmb_expr;self#attributespmb_attributes;self#locationpmb_locmethodtoplevel_phrase:toplevel_phrase->unit=funx->matchxwith|Ptop_defa->self#structurea|Ptop_dira->self#toplevel_directiveamethodtoplevel_directive:toplevel_directive->unit=fun{pdir_name;pdir_arg;pdir_loc}->self#locself#stringpdir_name;self#optionself#directive_argumentpdir_arg;self#locationpdir_locmethoddirective_argument:directive_argument->unit=fun{pdira_desc;pdira_loc}->self#directive_argument_descpdira_desc;self#locationpdira_locmethoddirective_argument_desc:directive_argument_desc->unit=funx->matchxwith|Pdir_stringa->self#stringa|Pdir_int(a,b)->self#stringa;self#optionself#charb|Pdir_identa->self#longidenta|Pdir_boola->self#boolamethodcases:cases->unit=self#listself#caseendclassvirtual['acc]fold=object(self)methodvirtualbool:bool->'acc->'accmethodvirtualchar:char->'acc->'accmethodvirtualint:int->'acc->'accmethodvirtuallist:'a.('a->'acc->'acc)->'alist->'acc->'accmethodvirtualoption:'a.('a->'acc->'acc)->'aoption->'acc->'accmethodvirtualstring:string->'acc->'accmethodposition:position->'acc->'acc=fun{pos_fname;pos_lnum;pos_bol;pos_cnum}acc->letacc=self#stringpos_fnameaccinletacc=self#intpos_lnumaccinletacc=self#intpos_bolaccinletacc=self#intpos_cnumaccinaccmethodlocation:location->'acc->'acc=fun{loc_start;loc_end;loc_ghost}acc->letacc=self#positionloc_startaccinletacc=self#positionloc_endaccinletacc=self#boolloc_ghostaccinaccmethodlocation_stack:location_stack->'acc->'acc=self#listself#locationmethodloc:'a.('a->'acc->'acc)->'aloc->'acc->'acc=fun_a{txt;loc}acc->letacc=_atxtaccinletacc=self#locationlocaccinaccmethodlongident:longident->'acc->'acc=funxacc->matchxwith|Lidenta->self#stringaacc|Ldot(a,b)->letacc=self#longidentaaccinletacc=self#stringbaccinacc|Lapply(a,b)->letacc=self#longidentaaccinletacc=self#longidentbaccinaccmethodlongident_loc:longident_loc->'acc->'acc=self#locself#longidentmethodrec_flag:rec_flag->'acc->'acc=fun_acc->accmethoddirection_flag:direction_flag->'acc->'acc=fun_acc->accmethodprivate_flag:private_flag->'acc->'acc=fun_acc->accmethodmutable_flag:mutable_flag->'acc->'acc=fun_acc->accmethodvirtual_flag:virtual_flag->'acc->'acc=fun_acc->accmethodoverride_flag:override_flag->'acc->'acc=fun_acc->accmethodclosed_flag:closed_flag->'acc->'acc=fun_acc->accmethodlabel:label->'acc->'acc=self#stringmethodarg_label:arg_label->'acc->'acc=funxacc->matchxwith|Nolabel->acc|Labelleda->self#stringaacc|Optionala->self#stringaaccmethodvariance:variance->'acc->'acc=fun_acc->accmethodinjectivity:injectivity->'acc->'acc=fun_acc->accmethodconstant:constant->'acc->'acc=funxacc->matchxwith|Pconst_integer(a,b)->letacc=self#stringaaccinletacc=self#optionself#charbaccinacc|Pconst_chara->self#charaacc|Pconst_string(a,b,c)->letacc=self#stringaaccinletacc=self#locationbaccinletacc=self#optionself#stringcaccinacc|Pconst_float(a,b)->letacc=self#stringaaccinletacc=self#optionself#charbaccinaccmethodattribute:attribute->'acc->'acc=fun{attr_name;attr_payload;attr_loc}acc->letacc=self#locself#stringattr_nameaccinletacc=self#payloadattr_payloadaccinletacc=self#locationattr_locaccinaccmethodextension:extension->'acc->'acc=fun(a,b)acc->letacc=self#locself#stringaaccinletacc=self#payloadbaccinaccmethodattributes:attributes->'acc->'acc=self#listself#attributemethodpayload:payload->'acc->'acc=funxacc->matchxwith|PStra->self#structureaacc|PSiga->self#signatureaacc|PTypa->self#core_typeaacc|PPat(a,b)->letacc=self#patternaaccinletacc=self#optionself#expressionbaccinaccmethodcore_type:core_type->'acc->'acc=fun{ptyp_desc;ptyp_loc;ptyp_loc_stack;ptyp_attributes}acc->letacc=self#core_type_descptyp_descaccinletacc=self#locationptyp_locaccinletacc=self#location_stackptyp_loc_stackaccinletacc=self#attributesptyp_attributesaccinaccmethodcore_type_desc:core_type_desc->'acc->'acc=funxacc->matchxwith|Ptyp_any->acc|Ptyp_vara->self#stringaacc|Ptyp_arrow(a,b,c)->letacc=self#arg_labelaaccinletacc=self#core_typebaccinletacc=self#core_typecaccinacc|Ptyp_tuplea->self#listself#core_typeaacc|Ptyp_constr(a,b)->letacc=self#longident_locaaccinletacc=self#listself#core_typebaccinacc|Ptyp_object(a,b)->letacc=self#listself#object_fieldaaccinletacc=self#closed_flagbaccinacc|Ptyp_class(a,b)->letacc=self#longident_locaaccinletacc=self#listself#core_typebaccinacc|Ptyp_alias(a,b)->letacc=self#core_typeaaccinletacc=self#stringbaccinacc|Ptyp_variant(a,b,c)->letacc=self#listself#row_fieldaaccinletacc=self#closed_flagbaccinletacc=self#option(self#listself#label)caccinacc|Ptyp_poly(a,b)->letacc=self#list(self#locself#string)aaccinletacc=self#core_typebaccinacc|Ptyp_packagea->self#package_typeaacc|Ptyp_extensiona->self#extensionaaccmethodpackage_type:package_type->'acc->'acc=fun(a,b)acc->letacc=self#longident_locaaccinletacc=self#list(fun(a,b)acc->letacc=self#longident_locaaccinletacc=self#core_typebaccinacc)baccinaccmethodrow_field:row_field->'acc->'acc=fun{prf_desc;prf_loc;prf_attributes}acc->letacc=self#row_field_descprf_descaccinletacc=self#locationprf_locaccinletacc=self#attributesprf_attributesaccinaccmethodrow_field_desc:row_field_desc->'acc->'acc=funxacc->matchxwith|Rtag(a,b,c)->letacc=self#locself#labelaaccinletacc=self#boolbaccinletacc=self#listself#core_typecaccinacc|Rinherita->self#core_typeaaccmethodobject_field:object_field->'acc->'acc=fun{pof_desc;pof_loc;pof_attributes}acc->letacc=self#object_field_descpof_descaccinletacc=self#locationpof_locaccinletacc=self#attributespof_attributesaccinaccmethodobject_field_desc:object_field_desc->'acc->'acc=funxacc->matchxwith|Otag(a,b)->letacc=self#locself#labelaaccinletacc=self#core_typebaccinacc|Oinherita->self#core_typeaaccmethodpattern:pattern->'acc->'acc=fun{ppat_desc;ppat_loc;ppat_loc_stack;ppat_attributes}acc->letacc=self#pattern_descppat_descaccinletacc=self#locationppat_locaccinletacc=self#location_stackppat_loc_stackaccinletacc=self#attributesppat_attributesaccinaccmethodpattern_desc:pattern_desc->'acc->'acc=funxacc->matchxwith|Ppat_any->acc|Ppat_vara->self#locself#stringaacc|Ppat_alias(a,b)->letacc=self#patternaaccinletacc=self#locself#stringbaccinacc|Ppat_constanta->self#constantaacc|Ppat_interval(a,b)->letacc=self#constantaaccinletacc=self#constantbaccinacc|Ppat_tuplea->self#listself#patternaacc|Ppat_construct(a,b)->letacc=self#longident_locaaccinletacc=self#option(fun(a,b)acc->letacc=self#list(self#locself#string)aaccinletacc=self#patternbaccinacc)baccinacc|Ppat_variant(a,b)->letacc=self#labelaaccinletacc=self#optionself#patternbaccinacc|Ppat_record(a,b)->letacc=self#list(fun(a,b)acc->letacc=self#longident_locaaccinletacc=self#patternbaccinacc)aaccinletacc=self#closed_flagbaccinacc|Ppat_arraya->self#listself#patternaacc|Ppat_or(a,b)->letacc=self#patternaaccinletacc=self#patternbaccinacc|Ppat_constraint(a,b)->letacc=self#patternaaccinletacc=self#core_typebaccinacc|Ppat_typea->self#longident_locaacc|Ppat_lazya->self#patternaacc|Ppat_unpacka->self#loc(self#optionself#string)aacc|Ppat_exceptiona->self#patternaacc|Ppat_extensiona->self#extensionaacc|Ppat_open(a,b)->letacc=self#longident_locaaccinletacc=self#patternbaccinaccmethodexpression:expression->'acc->'acc=fun{pexp_desc;pexp_loc;pexp_loc_stack;pexp_attributes}acc->letacc=self#expression_descpexp_descaccinletacc=self#locationpexp_locaccinletacc=self#location_stackpexp_loc_stackaccinletacc=self#attributespexp_attributesaccinaccmethodexpression_desc:expression_desc->'acc->'acc=funxacc->matchxwith|Pexp_identa->self#longident_locaacc|Pexp_constanta->self#constantaacc|Pexp_let(a,b,c)->letacc=self#rec_flagaaccinletacc=self#listself#value_bindingbaccinletacc=self#expressioncaccinacc|Pexp_functiona->self#casesaacc|Pexp_fun(a,b,c,d)->letacc=self#arg_labelaaccinletacc=self#optionself#expressionbaccinletacc=self#patterncaccinletacc=self#expressiondaccinacc|Pexp_apply(a,b)->letacc=self#expressionaaccinletacc=self#list(fun(a,b)acc->letacc=self#arg_labelaaccinletacc=self#expressionbaccinacc)baccinacc|Pexp_match(a,b)->letacc=self#expressionaaccinletacc=self#casesbaccinacc|Pexp_try(a,b)->letacc=self#expressionaaccinletacc=self#casesbaccinacc|Pexp_tuplea->self#listself#expressionaacc|Pexp_construct(a,b)->letacc=self#longident_locaaccinletacc=self#optionself#expressionbaccinacc|Pexp_variant(a,b)->letacc=self#labelaaccinletacc=self#optionself#expressionbaccinacc|Pexp_record(a,b)->letacc=self#list(fun(a,b)acc->letacc=self#longident_locaaccinletacc=self#expressionbaccinacc)aaccinletacc=self#optionself#expressionbaccinacc|Pexp_field(a,b)->letacc=self#expressionaaccinletacc=self#longident_locbaccinacc|Pexp_setfield(a,b,c)->letacc=self#expressionaaccinletacc=self#longident_locbaccinletacc=self#expressioncaccinacc|Pexp_arraya->self#listself#expressionaacc|Pexp_ifthenelse(a,b,c)->letacc=self#expressionaaccinletacc=self#expressionbaccinletacc=self#optionself#expressioncaccinacc|Pexp_sequence(a,b)->letacc=self#expressionaaccinletacc=self#expressionbaccinacc|Pexp_while(a,b)->letacc=self#expressionaaccinletacc=self#expressionbaccinacc|Pexp_for(a,b,c,d,e)->letacc=self#patternaaccinletacc=self#expressionbaccinletacc=self#expressioncaccinletacc=self#direction_flagdaccinletacc=self#expressioneaccinacc|Pexp_constraint(a,b)->letacc=self#expressionaaccinletacc=self#core_typebaccinacc|Pexp_coerce(a,b,c)->letacc=self#expressionaaccinletacc=self#optionself#core_typebaccinletacc=self#core_typecaccinacc|Pexp_send(a,b)->letacc=self#expressionaaccinletacc=self#locself#labelbaccinacc|Pexp_newa->self#longident_locaacc|Pexp_setinstvar(a,b)->letacc=self#locself#labelaaccinletacc=self#expressionbaccinacc|Pexp_overridea->self#list(fun(a,b)acc->letacc=self#locself#labelaaccinletacc=self#expressionbaccinacc)aacc|Pexp_letmodule(a,b,c)->letacc=self#loc(self#optionself#string)aaccinletacc=self#module_exprbaccinletacc=self#expressioncaccinacc|Pexp_letexception(a,b)->letacc=self#extension_constructoraaccinletacc=self#expressionbaccinacc|Pexp_asserta->self#expressionaacc|Pexp_lazya->self#expressionaacc|Pexp_poly(a,b)->letacc=self#expressionaaccinletacc=self#optionself#core_typebaccinacc|Pexp_objecta->self#class_structureaacc|Pexp_newtype(a,b)->letacc=self#locself#stringaaccinletacc=self#expressionbaccinacc|Pexp_packa->self#module_expraacc|Pexp_open(a,b)->letacc=self#open_declarationaaccinletacc=self#expressionbaccinacc|Pexp_letopa->self#letopaacc|Pexp_extensiona->self#extensionaacc|Pexp_unreachable->accmethodcase:case->'acc->'acc=fun{pc_lhs;pc_guard;pc_rhs}acc->letacc=self#patternpc_lhsaccinletacc=self#optionself#expressionpc_guardaccinletacc=self#expressionpc_rhsaccinaccmethodletop:letop->'acc->'acc=fun{let_;ands;body}acc->letacc=self#binding_oplet_accinletacc=self#listself#binding_opandsaccinletacc=self#expressionbodyaccinaccmethodbinding_op:binding_op->'acc->'acc=fun{pbop_op;pbop_pat;pbop_exp;pbop_loc}acc->letacc=self#locself#stringpbop_opaccinletacc=self#patternpbop_pataccinletacc=self#expressionpbop_expaccinletacc=self#locationpbop_locaccinaccmethodvalue_description:value_description->'acc->'acc=fun{pval_name;pval_type;pval_prim;pval_attributes;pval_loc}acc->letacc=self#locself#stringpval_nameaccinletacc=self#core_typepval_typeaccinletacc=self#listself#stringpval_primaccinletacc=self#attributespval_attributesaccinletacc=self#locationpval_locaccinaccmethodtype_declaration:type_declaration->'acc->'acc=fun{ptype_name;ptype_params;ptype_cstrs;ptype_kind;ptype_private;ptype_manifest;ptype_attributes;ptype_loc;}acc->letacc=self#locself#stringptype_nameaccinletacc=self#list(fun(a,b)acc->letacc=self#core_typeaaccinletacc=(fun(a,b)acc->letacc=self#varianceaaccinletacc=self#injectivitybaccinacc)baccinacc)ptype_paramsaccinletacc=self#list(fun(a,b,c)acc->letacc=self#core_typeaaccinletacc=self#core_typebaccinletacc=self#locationcaccinacc)ptype_cstrsaccinletacc=self#type_kindptype_kindaccinletacc=self#private_flagptype_privateaccinletacc=self#optionself#core_typeptype_manifestaccinletacc=self#attributesptype_attributesaccinletacc=self#locationptype_locaccinaccmethodtype_kind:type_kind->'acc->'acc=funxacc->matchxwith|Ptype_abstract->acc|Ptype_varianta->self#listself#constructor_declarationaacc|Ptype_recorda->self#listself#label_declarationaacc|Ptype_open->accmethodlabel_declaration:label_declaration->'acc->'acc=fun{pld_name;pld_mutable;pld_type;pld_loc;pld_attributes}acc->letacc=self#locself#stringpld_nameaccinletacc=self#mutable_flagpld_mutableaccinletacc=self#core_typepld_typeaccinletacc=self#locationpld_locaccinletacc=self#attributespld_attributesaccinaccmethodconstructor_declaration:constructor_declaration->'acc->'acc=fun{pcd_name;pcd_vars;pcd_args;pcd_res;pcd_loc;pcd_attributes}acc->letacc=self#locself#stringpcd_nameaccinletacc=self#list(self#locself#string)pcd_varsaccinletacc=self#constructor_argumentspcd_argsaccinletacc=self#optionself#core_typepcd_resaccinletacc=self#locationpcd_locaccinletacc=self#attributespcd_attributesaccinaccmethodconstructor_arguments:constructor_arguments->'acc->'acc=funxacc->matchxwith|Pcstr_tuplea->self#listself#core_typeaacc|Pcstr_recorda->self#listself#label_declarationaaccmethodtype_extension:type_extension->'acc->'acc=fun{ptyext_path;ptyext_params;ptyext_constructors;ptyext_private;ptyext_loc;ptyext_attributes;}acc->letacc=self#longident_locptyext_pathaccinletacc=self#list(fun(a,b)acc->letacc=self#core_typeaaccinletacc=(fun(a,b)acc->letacc=self#varianceaaccinletacc=self#injectivitybaccinacc)baccinacc)ptyext_paramsaccinletacc=self#listself#extension_constructorptyext_constructorsaccinletacc=self#private_flagptyext_privateaccinletacc=self#locationptyext_locaccinletacc=self#attributesptyext_attributesaccinaccmethodextension_constructor:extension_constructor->'acc->'acc=fun{pext_name;pext_kind;pext_loc;pext_attributes}acc->letacc=self#locself#stringpext_nameaccinletacc=self#extension_constructor_kindpext_kindaccinletacc=self#locationpext_locaccinletacc=self#attributespext_attributesaccinaccmethodtype_exception:type_exception->'acc->'acc=fun{ptyexn_constructor;ptyexn_loc;ptyexn_attributes}acc->letacc=self#extension_constructorptyexn_constructoraccinletacc=self#locationptyexn_locaccinletacc=self#attributesptyexn_attributesaccinaccmethodextension_constructor_kind:extension_constructor_kind->'acc->'acc=funxacc->matchxwith|Pext_decl(a,b,c)->letacc=self#list(self#locself#string)aaccinletacc=self#constructor_argumentsbaccinletacc=self#optionself#core_typecaccinacc|Pext_rebinda->self#longident_locaaccmethodclass_type:class_type->'acc->'acc=fun{pcty_desc;pcty_loc;pcty_attributes}acc->letacc=self#class_type_descpcty_descaccinletacc=self#locationpcty_locaccinletacc=self#attributespcty_attributesaccinaccmethodclass_type_desc:class_type_desc->'acc->'acc=funxacc->matchxwith|Pcty_constr(a,b)->letacc=self#longident_locaaccinletacc=self#listself#core_typebaccinacc|Pcty_signaturea->self#class_signatureaacc|Pcty_arrow(a,b,c)->letacc=self#arg_labelaaccinletacc=self#core_typebaccinletacc=self#class_typecaccinacc|Pcty_extensiona->self#extensionaacc|Pcty_open(a,b)->letacc=self#open_descriptionaaccinletacc=self#class_typebaccinaccmethodclass_signature:class_signature->'acc->'acc=fun{pcsig_self;pcsig_fields}acc->letacc=self#core_typepcsig_selfaccinletacc=self#listself#class_type_fieldpcsig_fieldsaccinaccmethodclass_type_field:class_type_field->'acc->'acc=fun{pctf_desc;pctf_loc;pctf_attributes}acc->letacc=self#class_type_field_descpctf_descaccinletacc=self#locationpctf_locaccinletacc=self#attributespctf_attributesaccinaccmethodclass_type_field_desc:class_type_field_desc->'acc->'acc=funxacc->matchxwith|Pctf_inherita->self#class_typeaacc|Pctf_vala->(fun(a,b,c,d)acc->letacc=self#locself#labelaaccinletacc=self#mutable_flagbaccinletacc=self#virtual_flagcaccinletacc=self#core_typedaccinacc)aacc|Pctf_methoda->(fun(a,b,c,d)acc->letacc=self#locself#labelaaccinletacc=self#private_flagbaccinletacc=self#virtual_flagcaccinletacc=self#core_typedaccinacc)aacc|Pctf_constrainta->(fun(a,b)acc->letacc=self#core_typeaaccinletacc=self#core_typebaccinacc)aacc|Pctf_attributea->self#attributeaacc|Pctf_extensiona->self#extensionaaccmethodclass_infos:'a.('a->'acc->'acc)->'aclass_infos->'acc->'acc=fun_a{pci_virt;pci_params;pci_name;pci_expr;pci_loc;pci_attributes}acc->letacc=self#virtual_flagpci_virtaccinletacc=self#list(fun(a,b)acc->letacc=self#core_typeaaccinletacc=(fun(a,b)acc->letacc=self#varianceaaccinletacc=self#injectivitybaccinacc)baccinacc)pci_paramsaccinletacc=self#locself#stringpci_nameaccinletacc=_apci_expraccinletacc=self#locationpci_locaccinletacc=self#attributespci_attributesaccinaccmethodclass_description:class_description->'acc->'acc=self#class_infosself#class_typemethodclass_type_declaration:class_type_declaration->'acc->'acc=self#class_infosself#class_typemethodclass_expr:class_expr->'acc->'acc=fun{pcl_desc;pcl_loc;pcl_attributes}acc->letacc=self#class_expr_descpcl_descaccinletacc=self#locationpcl_locaccinletacc=self#attributespcl_attributesaccinaccmethodclass_expr_desc:class_expr_desc->'acc->'acc=funxacc->matchxwith|Pcl_constr(a,b)->letacc=self#longident_locaaccinletacc=self#listself#core_typebaccinacc|Pcl_structurea->self#class_structureaacc|Pcl_fun(a,b,c,d)->letacc=self#arg_labelaaccinletacc=self#optionself#expressionbaccinletacc=self#patterncaccinletacc=self#class_exprdaccinacc|Pcl_apply(a,b)->letacc=self#class_expraaccinletacc=self#list(fun(a,b)acc->letacc=self#arg_labelaaccinletacc=self#expressionbaccinacc)baccinacc|Pcl_let(a,b,c)->letacc=self#rec_flagaaccinletacc=self#listself#value_bindingbaccinletacc=self#class_exprcaccinacc|Pcl_constraint(a,b)->letacc=self#class_expraaccinletacc=self#class_typebaccinacc|Pcl_extensiona->self#extensionaacc|Pcl_open(a,b)->letacc=self#open_descriptionaaccinletacc=self#class_exprbaccinaccmethodclass_structure:class_structure->'acc->'acc=fun{pcstr_self;pcstr_fields}acc->letacc=self#patternpcstr_selfaccinletacc=self#listself#class_fieldpcstr_fieldsaccinaccmethodclass_field:class_field->'acc->'acc=fun{pcf_desc;pcf_loc;pcf_attributes}acc->letacc=self#class_field_descpcf_descaccinletacc=self#locationpcf_locaccinletacc=self#attributespcf_attributesaccinaccmethodclass_field_desc:class_field_desc->'acc->'acc=funxacc->matchxwith|Pcf_inherit(a,b,c)->letacc=self#override_flagaaccinletacc=self#class_exprbaccinletacc=self#option(self#locself#string)caccinacc|Pcf_vala->(fun(a,b,c)acc->letacc=self#locself#labelaaccinletacc=self#mutable_flagbaccinletacc=self#class_field_kindcaccinacc)aacc|Pcf_methoda->(fun(a,b,c)acc->letacc=self#locself#labelaaccinletacc=self#private_flagbaccinletacc=self#class_field_kindcaccinacc)aacc|Pcf_constrainta->(fun(a,b)acc->letacc=self#core_typeaaccinletacc=self#core_typebaccinacc)aacc|Pcf_initializera->self#expressionaacc|Pcf_attributea->self#attributeaacc|Pcf_extensiona->self#extensionaaccmethodclass_field_kind:class_field_kind->'acc->'acc=funxacc->matchxwith|Cfk_virtuala->self#core_typeaacc|Cfk_concrete(a,b)->letacc=self#override_flagaaccinletacc=self#expressionbaccinaccmethodclass_declaration:class_declaration->'acc->'acc=self#class_infosself#class_exprmethodmodule_type:module_type->'acc->'acc=fun{pmty_desc;pmty_loc;pmty_attributes}acc->letacc=self#module_type_descpmty_descaccinletacc=self#locationpmty_locaccinletacc=self#attributespmty_attributesaccinaccmethodmodule_type_desc:module_type_desc->'acc->'acc=funxacc->matchxwith|Pmty_identa->self#longident_locaacc|Pmty_signaturea->self#signatureaacc|Pmty_functor(a,b)->letacc=self#functor_parameteraaccinletacc=self#module_typebaccinacc|Pmty_with(a,b)->letacc=self#module_typeaaccinletacc=self#listself#with_constraintbaccinacc|Pmty_typeofa->self#module_expraacc|Pmty_extensiona->self#extensionaacc|Pmty_aliasa->self#longident_locaaccmethodfunctor_parameter:functor_parameter->'acc->'acc=funxacc->matchxwith|Unit->acc|Named(a,b)->letacc=self#loc(self#optionself#string)aaccinletacc=self#module_typebaccinaccmethodsignature:signature->'acc->'acc=self#listself#signature_itemmethodsignature_item:signature_item->'acc->'acc=fun{psig_desc;psig_loc}acc->letacc=self#signature_item_descpsig_descaccinletacc=self#locationpsig_locaccinaccmethodsignature_item_desc:signature_item_desc->'acc->'acc=funxacc->matchxwith|Psig_valuea->self#value_descriptionaacc|Psig_type(a,b)->letacc=self#rec_flagaaccinletacc=self#listself#type_declarationbaccinacc|Psig_typesubsta->self#listself#type_declarationaacc|Psig_typexta->self#type_extensionaacc|Psig_exceptiona->self#type_exceptionaacc|Psig_modulea->self#module_declarationaacc|Psig_modsubsta->self#module_substitutionaacc|Psig_recmodulea->self#listself#module_declarationaacc|Psig_modtypea->self#module_type_declarationaacc|Psig_modtypesubsta->self#module_type_declarationaacc|Psig_opena->self#open_descriptionaacc|Psig_includea->self#include_descriptionaacc|Psig_classa->self#listself#class_descriptionaacc|Psig_class_typea->self#listself#class_type_declarationaacc|Psig_attributea->self#attributeaacc|Psig_extension(a,b)->letacc=self#extensionaaccinletacc=self#attributesbaccinaccmethodmodule_declaration:module_declaration->'acc->'acc=fun{pmd_name;pmd_type;pmd_attributes;pmd_loc}acc->letacc=self#loc(self#optionself#string)pmd_nameaccinletacc=self#module_typepmd_typeaccinletacc=self#attributespmd_attributesaccinletacc=self#locationpmd_locaccinaccmethodmodule_substitution:module_substitution->'acc->'acc=fun{pms_name;pms_manifest;pms_attributes;pms_loc}acc->letacc=self#locself#stringpms_nameaccinletacc=self#longident_locpms_manifestaccinletacc=self#attributespms_attributesaccinletacc=self#locationpms_locaccinaccmethodmodule_type_declaration:module_type_declaration->'acc->'acc=fun{pmtd_name;pmtd_type;pmtd_attributes;pmtd_loc}acc->letacc=self#locself#stringpmtd_nameaccinletacc=self#optionself#module_typepmtd_typeaccinletacc=self#attributespmtd_attributesaccinletacc=self#locationpmtd_locaccinaccmethodopen_infos:'a.('a->'acc->'acc)->'aopen_infos->'acc->'acc=fun_a{popen_expr;popen_override;popen_loc;popen_attributes}acc->letacc=_apopen_expraccinletacc=self#override_flagpopen_overrideaccinletacc=self#locationpopen_locaccinletacc=self#attributespopen_attributesaccinaccmethodopen_description:open_description->'acc->'acc=self#open_infosself#longident_locmethodopen_declaration:open_declaration->'acc->'acc=self#open_infosself#module_exprmethodinclude_infos:'a.('a->'acc->'acc)->'ainclude_infos->'acc->'acc=fun_a{pincl_mod;pincl_loc;pincl_attributes}acc->letacc=_apincl_modaccinletacc=self#locationpincl_locaccinletacc=self#attributespincl_attributesaccinaccmethodinclude_description:include_description->'acc->'acc=self#include_infosself#module_typemethodinclude_declaration:include_declaration->'acc->'acc=self#include_infosself#module_exprmethodwith_constraint:with_constraint->'acc->'acc=funxacc->matchxwith|Pwith_type(a,b)->letacc=self#longident_locaaccinletacc=self#type_declarationbaccinacc|Pwith_module(a,b)->letacc=self#longident_locaaccinletacc=self#longident_locbaccinacc|Pwith_modtype(a,b)->letacc=self#longident_locaaccinletacc=self#module_typebaccinacc|Pwith_modtypesubst(a,b)->letacc=self#longident_locaaccinletacc=self#module_typebaccinacc|Pwith_typesubst(a,b)->letacc=self#longident_locaaccinletacc=self#type_declarationbaccinacc|Pwith_modsubst(a,b)->letacc=self#longident_locaaccinletacc=self#longident_locbaccinaccmethodmodule_expr:module_expr->'acc->'acc=fun{pmod_desc;pmod_loc;pmod_attributes}acc->letacc=self#module_expr_descpmod_descaccinletacc=self#locationpmod_locaccinletacc=self#attributespmod_attributesaccinaccmethodmodule_expr_desc:module_expr_desc->'acc->'acc=funxacc->matchxwith|Pmod_identa->self#longident_locaacc|Pmod_structurea->self#structureaacc|Pmod_functor(a,b)->letacc=self#functor_parameteraaccinletacc=self#module_exprbaccinacc|Pmod_apply(a,b)->letacc=self#module_expraaccinletacc=self#module_exprbaccinacc|Pmod_constraint(a,b)->letacc=self#module_expraaccinletacc=self#module_typebaccinacc|Pmod_unpacka->self#expressionaacc|Pmod_extensiona->self#extensionaaccmethodstructure:structure->'acc->'acc=self#listself#structure_itemmethodstructure_item:structure_item->'acc->'acc=fun{pstr_desc;pstr_loc}acc->letacc=self#structure_item_descpstr_descaccinletacc=self#locationpstr_locaccinaccmethodstructure_item_desc:structure_item_desc->'acc->'acc=funxacc->matchxwith|Pstr_eval(a,b)->letacc=self#expressionaaccinletacc=self#attributesbaccinacc|Pstr_value(a,b)->letacc=self#rec_flagaaccinletacc=self#listself#value_bindingbaccinacc|Pstr_primitivea->self#value_descriptionaacc|Pstr_type(a,b)->letacc=self#rec_flagaaccinletacc=self#listself#type_declarationbaccinacc|Pstr_typexta->self#type_extensionaacc|Pstr_exceptiona->self#type_exceptionaacc|Pstr_modulea->self#module_bindingaacc|Pstr_recmodulea->self#listself#module_bindingaacc|Pstr_modtypea->self#module_type_declarationaacc|Pstr_opena->self#open_declarationaacc|Pstr_classa->self#listself#class_declarationaacc|Pstr_class_typea->self#listself#class_type_declarationaacc|Pstr_includea->self#include_declarationaacc|Pstr_attributea->self#attributeaacc|Pstr_extension(a,b)->letacc=self#extensionaaccinletacc=self#attributesbaccinaccmethodvalue_binding:value_binding->'acc->'acc=fun{pvb_pat;pvb_expr;pvb_attributes;pvb_loc}acc->letacc=self#patternpvb_pataccinletacc=self#expressionpvb_expraccinletacc=self#attributespvb_attributesaccinletacc=self#locationpvb_locaccinaccmethodmodule_binding:module_binding->'acc->'acc=fun{pmb_name;pmb_expr;pmb_attributes;pmb_loc}acc->letacc=self#loc(self#optionself#string)pmb_nameaccinletacc=self#module_exprpmb_expraccinletacc=self#attributespmb_attributesaccinletacc=self#locationpmb_locaccinaccmethodtoplevel_phrase:toplevel_phrase->'acc->'acc=funxacc->matchxwith|Ptop_defa->self#structureaacc|Ptop_dira->self#toplevel_directiveaaccmethodtoplevel_directive:toplevel_directive->'acc->'acc=fun{pdir_name;pdir_arg;pdir_loc}acc->letacc=self#locself#stringpdir_nameaccinletacc=self#optionself#directive_argumentpdir_argaccinletacc=self#locationpdir_locaccinaccmethoddirective_argument:directive_argument->'acc->'acc=fun{pdira_desc;pdira_loc}acc->letacc=self#directive_argument_descpdira_descaccinletacc=self#locationpdira_locaccinaccmethoddirective_argument_desc:directive_argument_desc->'acc->'acc=funxacc->matchxwith|Pdir_stringa->self#stringaacc|Pdir_int(a,b)->letacc=self#stringaaccinletacc=self#optionself#charbaccinacc|Pdir_identa->self#longidentaacc|Pdir_boola->self#boolaaccmethodcases:cases->'acc->'acc=self#listself#caseendclassvirtual['acc]fold_map=object(self)methodvirtualbool:bool->'acc->bool*'accmethodvirtualchar:char->'acc->char*'accmethodvirtualint:int->'acc->int*'accmethodvirtuallist:'a.('a->'acc->'a*'acc)->'alist->'acc->'alist*'accmethodvirtualoption:'a.('a->'acc->'a*'acc)->'aoption->'acc->'aoption*'accmethodvirtualstring:string->'acc->string*'accmethodposition:position->'acc->position*'acc=fun{pos_fname;pos_lnum;pos_bol;pos_cnum}acc->letpos_fname,acc=self#stringpos_fnameaccinletpos_lnum,acc=self#intpos_lnumaccinletpos_bol,acc=self#intpos_bolaccinletpos_cnum,acc=self#intpos_cnumaccin({pos_fname;pos_lnum;pos_bol;pos_cnum},acc)methodlocation:location->'acc->location*'acc=fun{loc_start;loc_end;loc_ghost}acc->letloc_start,acc=self#positionloc_startaccinletloc_end,acc=self#positionloc_endaccinletloc_ghost,acc=self#boolloc_ghostaccin({loc_start;loc_end;loc_ghost},acc)methodlocation_stack:location_stack->'acc->location_stack*'acc=self#listself#locationmethodloc:'a.('a->'acc->'a*'acc)->'aloc->'acc->'aloc*'acc=fun_a{txt;loc}acc->lettxt,acc=_atxtaccinletloc,acc=self#locationlocaccin({txt;loc},acc)methodlongident:longident->'acc->longident*'acc=funxacc->matchxwith|Lidenta->leta,acc=self#stringaaccin(Lidenta,acc)|Ldot(a,b)->leta,acc=self#longidentaaccinletb,acc=self#stringbaccin(Ldot(a,b),acc)|Lapply(a,b)->leta,acc=self#longidentaaccinletb,acc=self#longidentbaccin(Lapply(a,b),acc)methodlongident_loc:longident_loc->'acc->longident_loc*'acc=self#locself#longidentmethodrec_flag:rec_flag->'acc->rec_flag*'acc=funxacc->(x,acc)methoddirection_flag:direction_flag->'acc->direction_flag*'acc=funxacc->(x,acc)methodprivate_flag:private_flag->'acc->private_flag*'acc=funxacc->(x,acc)methodmutable_flag:mutable_flag->'acc->mutable_flag*'acc=funxacc->(x,acc)methodvirtual_flag:virtual_flag->'acc->virtual_flag*'acc=funxacc->(x,acc)methodoverride_flag:override_flag->'acc->override_flag*'acc=funxacc->(x,acc)methodclosed_flag:closed_flag->'acc->closed_flag*'acc=funxacc->(x,acc)methodlabel:label->'acc->label*'acc=self#stringmethodarg_label:arg_label->'acc->arg_label*'acc=funxacc->matchxwith|Nolabel->(Nolabel,acc)|Labelleda->leta,acc=self#stringaaccin(Labelleda,acc)|Optionala->leta,acc=self#stringaaccin(Optionala,acc)methodvariance:variance->'acc->variance*'acc=funxacc->(x,acc)methodinjectivity:injectivity->'acc->injectivity*'acc=funxacc->(x,acc)methodconstant:constant->'acc->constant*'acc=funxacc->matchxwith|Pconst_integer(a,b)->leta,acc=self#stringaaccinletb,acc=self#optionself#charbaccin(Pconst_integer(a,b),acc)|Pconst_chara->leta,acc=self#charaaccin(Pconst_chara,acc)|Pconst_string(a,b,c)->leta,acc=self#stringaaccinletb,acc=self#locationbaccinletc,acc=self#optionself#stringcaccin(Pconst_string(a,b,c),acc)|Pconst_float(a,b)->leta,acc=self#stringaaccinletb,acc=self#optionself#charbaccin(Pconst_float(a,b),acc)methodattribute:attribute->'acc->attribute*'acc=fun{attr_name;attr_payload;attr_loc}acc->letattr_name,acc=self#locself#stringattr_nameaccinletattr_payload,acc=self#payloadattr_payloadaccinletattr_loc,acc=self#locationattr_locaccin({attr_name;attr_payload;attr_loc},acc)methodextension:extension->'acc->extension*'acc=fun(a,b)acc->leta,acc=self#locself#stringaaccinletb,acc=self#payloadbaccin((a,b),acc)methodattributes:attributes->'acc->attributes*'acc=self#listself#attributemethodpayload:payload->'acc->payload*'acc=funxacc->matchxwith|PStra->leta,acc=self#structureaaccin(PStra,acc)|PSiga->leta,acc=self#signatureaaccin(PSiga,acc)|PTypa->leta,acc=self#core_typeaaccin(PTypa,acc)|PPat(a,b)->leta,acc=self#patternaaccinletb,acc=self#optionself#expressionbaccin(PPat(a,b),acc)methodcore_type:core_type->'acc->core_type*'acc=fun{ptyp_desc;ptyp_loc;ptyp_loc_stack;ptyp_attributes}acc->letptyp_desc,acc=self#core_type_descptyp_descaccinletptyp_loc,acc=self#locationptyp_locaccinletptyp_loc_stack,acc=self#location_stackptyp_loc_stackaccinletptyp_attributes,acc=self#attributesptyp_attributesaccin({ptyp_desc;ptyp_loc;ptyp_loc_stack;ptyp_attributes},acc)methodcore_type_desc:core_type_desc->'acc->core_type_desc*'acc=funxacc->matchxwith|Ptyp_any->(Ptyp_any,acc)|Ptyp_vara->leta,acc=self#stringaaccin(Ptyp_vara,acc)|Ptyp_arrow(a,b,c)->leta,acc=self#arg_labelaaccinletb,acc=self#core_typebaccinletc,acc=self#core_typecaccin(Ptyp_arrow(a,b,c),acc)|Ptyp_tuplea->leta,acc=self#listself#core_typeaaccin(Ptyp_tuplea,acc)|Ptyp_constr(a,b)->leta,acc=self#longident_locaaccinletb,acc=self#listself#core_typebaccin(Ptyp_constr(a,b),acc)|Ptyp_object(a,b)->leta,acc=self#listself#object_fieldaaccinletb,acc=self#closed_flagbaccin(Ptyp_object(a,b),acc)|Ptyp_class(a,b)->leta,acc=self#longident_locaaccinletb,acc=self#listself#core_typebaccin(Ptyp_class(a,b),acc)|Ptyp_alias(a,b)->leta,acc=self#core_typeaaccinletb,acc=self#stringbaccin(Ptyp_alias(a,b),acc)|Ptyp_variant(a,b,c)->leta,acc=self#listself#row_fieldaaccinletb,acc=self#closed_flagbaccinletc,acc=self#option(self#listself#label)caccin(Ptyp_variant(a,b,c),acc)|Ptyp_poly(a,b)->leta,acc=self#list(self#locself#string)aaccinletb,acc=self#core_typebaccin(Ptyp_poly(a,b),acc)|Ptyp_packagea->leta,acc=self#package_typeaaccin(Ptyp_packagea,acc)|Ptyp_extensiona->leta,acc=self#extensionaaccin(Ptyp_extensiona,acc)methodpackage_type:package_type->'acc->package_type*'acc=fun(a,b)acc->leta,acc=self#longident_locaaccinletb,acc=self#list(fun(a,b)acc->leta,acc=self#longident_locaaccinletb,acc=self#core_typebaccin((a,b),acc))baccin((a,b),acc)methodrow_field:row_field->'acc->row_field*'acc=fun{prf_desc;prf_loc;prf_attributes}acc->letprf_desc,acc=self#row_field_descprf_descaccinletprf_loc,acc=self#locationprf_locaccinletprf_attributes,acc=self#attributesprf_attributesaccin({prf_desc;prf_loc;prf_attributes},acc)methodrow_field_desc:row_field_desc->'acc->row_field_desc*'acc=funxacc->matchxwith|Rtag(a,b,c)->leta,acc=self#locself#labelaaccinletb,acc=self#boolbaccinletc,acc=self#listself#core_typecaccin(Rtag(a,b,c),acc)|Rinherita->leta,acc=self#core_typeaaccin(Rinherita,acc)methodobject_field:object_field->'acc->object_field*'acc=fun{pof_desc;pof_loc;pof_attributes}acc->letpof_desc,acc=self#object_field_descpof_descaccinletpof_loc,acc=self#locationpof_locaccinletpof_attributes,acc=self#attributespof_attributesaccin({pof_desc;pof_loc;pof_attributes},acc)methodobject_field_desc:object_field_desc->'acc->object_field_desc*'acc=funxacc->matchxwith|Otag(a,b)->leta,acc=self#locself#labelaaccinletb,acc=self#core_typebaccin(Otag(a,b),acc)|Oinherita->leta,acc=self#core_typeaaccin(Oinherita,acc)methodpattern:pattern->'acc->pattern*'acc=fun{ppat_desc;ppat_loc;ppat_loc_stack;ppat_attributes}acc->letppat_desc,acc=self#pattern_descppat_descaccinletppat_loc,acc=self#locationppat_locaccinletppat_loc_stack,acc=self#location_stackppat_loc_stackaccinletppat_attributes,acc=self#attributesppat_attributesaccin({ppat_desc;ppat_loc;ppat_loc_stack;ppat_attributes},acc)methodpattern_desc:pattern_desc->'acc->pattern_desc*'acc=funxacc->matchxwith|Ppat_any->(Ppat_any,acc)|Ppat_vara->leta,acc=self#locself#stringaaccin(Ppat_vara,acc)|Ppat_alias(a,b)->leta,acc=self#patternaaccinletb,acc=self#locself#stringbaccin(Ppat_alias(a,b),acc)|Ppat_constanta->leta,acc=self#constantaaccin(Ppat_constanta,acc)|Ppat_interval(a,b)->leta,acc=self#constantaaccinletb,acc=self#constantbaccin(Ppat_interval(a,b),acc)|Ppat_tuplea->leta,acc=self#listself#patternaaccin(Ppat_tuplea,acc)|Ppat_construct(a,b)->leta,acc=self#longident_locaaccinletb,acc=self#option(fun(a,b)acc->leta,acc=self#list(self#locself#string)aaccinletb,acc=self#patternbaccin((a,b),acc))baccin(Ppat_construct(a,b),acc)|Ppat_variant(a,b)->leta,acc=self#labelaaccinletb,acc=self#optionself#patternbaccin(Ppat_variant(a,b),acc)|Ppat_record(a,b)->leta,acc=self#list(fun(a,b)acc->leta,acc=self#longident_locaaccinletb,acc=self#patternbaccin((a,b),acc))aaccinletb,acc=self#closed_flagbaccin(Ppat_record(a,b),acc)|Ppat_arraya->leta,acc=self#listself#patternaaccin(Ppat_arraya,acc)|Ppat_or(a,b)->leta,acc=self#patternaaccinletb,acc=self#patternbaccin(Ppat_or(a,b),acc)|Ppat_constraint(a,b)->leta,acc=self#patternaaccinletb,acc=self#core_typebaccin(Ppat_constraint(a,b),acc)|Ppat_typea->leta,acc=self#longident_locaaccin(Ppat_typea,acc)|Ppat_lazya->leta,acc=self#patternaaccin(Ppat_lazya,acc)|Ppat_unpacka->leta,acc=self#loc(self#optionself#string)aaccin(Ppat_unpacka,acc)|Ppat_exceptiona->leta,acc=self#patternaaccin(Ppat_exceptiona,acc)|Ppat_extensiona->leta,acc=self#extensionaaccin(Ppat_extensiona,acc)|Ppat_open(a,b)->leta,acc=self#longident_locaaccinletb,acc=self#patternbaccin(Ppat_open(a,b),acc)methodexpression:expression->'acc->expression*'acc=fun{pexp_desc;pexp_loc;pexp_loc_stack;pexp_attributes}acc->letpexp_desc,acc=self#expression_descpexp_descaccinletpexp_loc,acc=self#locationpexp_locaccinletpexp_loc_stack,acc=self#location_stackpexp_loc_stackaccinletpexp_attributes,acc=self#attributespexp_attributesaccin({pexp_desc;pexp_loc;pexp_loc_stack;pexp_attributes},acc)methodexpression_desc:expression_desc->'acc->expression_desc*'acc=funxacc->matchxwith|Pexp_identa->leta,acc=self#longident_locaaccin(Pexp_identa,acc)|Pexp_constanta->leta,acc=self#constantaaccin(Pexp_constanta,acc)|Pexp_let(a,b,c)->leta,acc=self#rec_flagaaccinletb,acc=self#listself#value_bindingbaccinletc,acc=self#expressioncaccin(Pexp_let(a,b,c),acc)|Pexp_functiona->leta,acc=self#casesaaccin(Pexp_functiona,acc)|Pexp_fun(a,b,c,d)->leta,acc=self#arg_labelaaccinletb,acc=self#optionself#expressionbaccinletc,acc=self#patterncaccinletd,acc=self#expressiondaccin(Pexp_fun(a,b,c,d),acc)|Pexp_apply(a,b)->leta,acc=self#expressionaaccinletb,acc=self#list(fun(a,b)acc->leta,acc=self#arg_labelaaccinletb,acc=self#expressionbaccin((a,b),acc))baccin(Pexp_apply(a,b),acc)|Pexp_match(a,b)->leta,acc=self#expressionaaccinletb,acc=self#casesbaccin(Pexp_match(a,b),acc)|Pexp_try(a,b)->leta,acc=self#expressionaaccinletb,acc=self#casesbaccin(Pexp_try(a,b),acc)|Pexp_tuplea->leta,acc=self#listself#expressionaaccin(Pexp_tuplea,acc)|Pexp_construct(a,b)->leta,acc=self#longident_locaaccinletb,acc=self#optionself#expressionbaccin(Pexp_construct(a,b),acc)|Pexp_variant(a,b)->leta,acc=self#labelaaccinletb,acc=self#optionself#expressionbaccin(Pexp_variant(a,b),acc)|Pexp_record(a,b)->leta,acc=self#list(fun(a,b)acc->leta,acc=self#longident_locaaccinletb,acc=self#expressionbaccin((a,b),acc))aaccinletb,acc=self#optionself#expressionbaccin(Pexp_record(a,b),acc)|Pexp_field(a,b)->leta,acc=self#expressionaaccinletb,acc=self#longident_locbaccin(Pexp_field(a,b),acc)|Pexp_setfield(a,b,c)->leta,acc=self#expressionaaccinletb,acc=self#longident_locbaccinletc,acc=self#expressioncaccin(Pexp_setfield(a,b,c),acc)|Pexp_arraya->leta,acc=self#listself#expressionaaccin(Pexp_arraya,acc)|Pexp_ifthenelse(a,b,c)->leta,acc=self#expressionaaccinletb,acc=self#expressionbaccinletc,acc=self#optionself#expressioncaccin(Pexp_ifthenelse(a,b,c),acc)|Pexp_sequence(a,b)->leta,acc=self#expressionaaccinletb,acc=self#expressionbaccin(Pexp_sequence(a,b),acc)|Pexp_while(a,b)->leta,acc=self#expressionaaccinletb,acc=self#expressionbaccin(Pexp_while(a,b),acc)|Pexp_for(a,b,c,d,e)->leta,acc=self#patternaaccinletb,acc=self#expressionbaccinletc,acc=self#expressioncaccinletd,acc=self#direction_flagdaccinlete,acc=self#expressioneaccin(Pexp_for(a,b,c,d,e),acc)|Pexp_constraint(a,b)->leta,acc=self#expressionaaccinletb,acc=self#core_typebaccin(Pexp_constraint(a,b),acc)|Pexp_coerce(a,b,c)->leta,acc=self#expressionaaccinletb,acc=self#optionself#core_typebaccinletc,acc=self#core_typecaccin(Pexp_coerce(a,b,c),acc)|Pexp_send(a,b)->leta,acc=self#expressionaaccinletb,acc=self#locself#labelbaccin(Pexp_send(a,b),acc)|Pexp_newa->leta,acc=self#longident_locaaccin(Pexp_newa,acc)|Pexp_setinstvar(a,b)->leta,acc=self#locself#labelaaccinletb,acc=self#expressionbaccin(Pexp_setinstvar(a,b),acc)|Pexp_overridea->leta,acc=self#list(fun(a,b)acc->leta,acc=self#locself#labelaaccinletb,acc=self#expressionbaccin((a,b),acc))aaccin(Pexp_overridea,acc)|Pexp_letmodule(a,b,c)->leta,acc=self#loc(self#optionself#string)aaccinletb,acc=self#module_exprbaccinletc,acc=self#expressioncaccin(Pexp_letmodule(a,b,c),acc)|Pexp_letexception(a,b)->leta,acc=self#extension_constructoraaccinletb,acc=self#expressionbaccin(Pexp_letexception(a,b),acc)|Pexp_asserta->leta,acc=self#expressionaaccin(Pexp_asserta,acc)|Pexp_lazya->leta,acc=self#expressionaaccin(Pexp_lazya,acc)|Pexp_poly(a,b)->leta,acc=self#expressionaaccinletb,acc=self#optionself#core_typebaccin(Pexp_poly(a,b),acc)|Pexp_objecta->leta,acc=self#class_structureaaccin(Pexp_objecta,acc)|Pexp_newtype(a,b)->leta,acc=self#locself#stringaaccinletb,acc=self#expressionbaccin(Pexp_newtype(a,b),acc)|Pexp_packa->leta,acc=self#module_expraaccin(Pexp_packa,acc)|Pexp_open(a,b)->leta,acc=self#open_declarationaaccinletb,acc=self#expressionbaccin(Pexp_open(a,b),acc)|Pexp_letopa->leta,acc=self#letopaaccin(Pexp_letopa,acc)|Pexp_extensiona->leta,acc=self#extensionaaccin(Pexp_extensiona,acc)|Pexp_unreachable->(Pexp_unreachable,acc)methodcase:case->'acc->case*'acc=fun{pc_lhs;pc_guard;pc_rhs}acc->letpc_lhs,acc=self#patternpc_lhsaccinletpc_guard,acc=self#optionself#expressionpc_guardaccinletpc_rhs,acc=self#expressionpc_rhsaccin({pc_lhs;pc_guard;pc_rhs},acc)methodletop:letop->'acc->letop*'acc=fun{let_;ands;body}acc->letlet_,acc=self#binding_oplet_accinletands,acc=self#listself#binding_opandsaccinletbody,acc=self#expressionbodyaccin({let_;ands;body},acc)methodbinding_op:binding_op->'acc->binding_op*'acc=fun{pbop_op;pbop_pat;pbop_exp;pbop_loc}acc->letpbop_op,acc=self#locself#stringpbop_opaccinletpbop_pat,acc=self#patternpbop_pataccinletpbop_exp,acc=self#expressionpbop_expaccinletpbop_loc,acc=self#locationpbop_locaccin({pbop_op;pbop_pat;pbop_exp;pbop_loc},acc)methodvalue_description:value_description->'acc->value_description*'acc=fun{pval_name;pval_type;pval_prim;pval_attributes;pval_loc}acc->letpval_name,acc=self#locself#stringpval_nameaccinletpval_type,acc=self#core_typepval_typeaccinletpval_prim,acc=self#listself#stringpval_primaccinletpval_attributes,acc=self#attributespval_attributesaccinletpval_loc,acc=self#locationpval_locaccin({pval_name;pval_type;pval_prim;pval_attributes;pval_loc},acc)methodtype_declaration:type_declaration->'acc->type_declaration*'acc=fun{ptype_name;ptype_params;ptype_cstrs;ptype_kind;ptype_private;ptype_manifest;ptype_attributes;ptype_loc;}acc->letptype_name,acc=self#locself#stringptype_nameaccinletptype_params,acc=self#list(fun(a,b)acc->leta,acc=self#core_typeaaccinletb,acc=(fun(a,b)acc->leta,acc=self#varianceaaccinletb,acc=self#injectivitybaccin((a,b),acc))baccin((a,b),acc))ptype_paramsaccinletptype_cstrs,acc=self#list(fun(a,b,c)acc->leta,acc=self#core_typeaaccinletb,acc=self#core_typebaccinletc,acc=self#locationcaccin((a,b,c),acc))ptype_cstrsaccinletptype_kind,acc=self#type_kindptype_kindaccinletptype_private,acc=self#private_flagptype_privateaccinletptype_manifest,acc=self#optionself#core_typeptype_manifestaccinletptype_attributes,acc=self#attributesptype_attributesaccinletptype_loc,acc=self#locationptype_locaccin({ptype_name;ptype_params;ptype_cstrs;ptype_kind;ptype_private;ptype_manifest;ptype_attributes;ptype_loc;},acc)methodtype_kind:type_kind->'acc->type_kind*'acc=funxacc->matchxwith|Ptype_abstract->(Ptype_abstract,acc)|Ptype_varianta->leta,acc=self#listself#constructor_declarationaaccin(Ptype_varianta,acc)|Ptype_recorda->leta,acc=self#listself#label_declarationaaccin(Ptype_recorda,acc)|Ptype_open->(Ptype_open,acc)methodlabel_declaration:label_declaration->'acc->label_declaration*'acc=fun{pld_name;pld_mutable;pld_type;pld_loc;pld_attributes}acc->letpld_name,acc=self#locself#stringpld_nameaccinletpld_mutable,acc=self#mutable_flagpld_mutableaccinletpld_type,acc=self#core_typepld_typeaccinletpld_loc,acc=self#locationpld_locaccinletpld_attributes,acc=self#attributespld_attributesaccin({pld_name;pld_mutable;pld_type;pld_loc;pld_attributes},acc)methodconstructor_declaration:constructor_declaration->'acc->constructor_declaration*'acc=fun{pcd_name;pcd_vars;pcd_args;pcd_res;pcd_loc;pcd_attributes}acc->letpcd_name,acc=self#locself#stringpcd_nameaccinletpcd_vars,acc=self#list(self#locself#string)pcd_varsaccinletpcd_args,acc=self#constructor_argumentspcd_argsaccinletpcd_res,acc=self#optionself#core_typepcd_resaccinletpcd_loc,acc=self#locationpcd_locaccinletpcd_attributes,acc=self#attributespcd_attributesaccin({pcd_name;pcd_vars;pcd_args;pcd_res;pcd_loc;pcd_attributes},acc)methodconstructor_arguments:constructor_arguments->'acc->constructor_arguments*'acc=funxacc->matchxwith|Pcstr_tuplea->leta,acc=self#listself#core_typeaaccin(Pcstr_tuplea,acc)|Pcstr_recorda->leta,acc=self#listself#label_declarationaaccin(Pcstr_recorda,acc)methodtype_extension:type_extension->'acc->type_extension*'acc=fun{ptyext_path;ptyext_params;ptyext_constructors;ptyext_private;ptyext_loc;ptyext_attributes;}acc->letptyext_path,acc=self#longident_locptyext_pathaccinletptyext_params,acc=self#list(fun(a,b)acc->leta,acc=self#core_typeaaccinletb,acc=(fun(a,b)acc->leta,acc=self#varianceaaccinletb,acc=self#injectivitybaccin((a,b),acc))baccin((a,b),acc))ptyext_paramsaccinletptyext_constructors,acc=self#listself#extension_constructorptyext_constructorsaccinletptyext_private,acc=self#private_flagptyext_privateaccinletptyext_loc,acc=self#locationptyext_locaccinletptyext_attributes,acc=self#attributesptyext_attributesaccin({ptyext_path;ptyext_params;ptyext_constructors;ptyext_private;ptyext_loc;ptyext_attributes;},acc)methodextension_constructor:extension_constructor->'acc->extension_constructor*'acc=fun{pext_name;pext_kind;pext_loc;pext_attributes}acc->letpext_name,acc=self#locself#stringpext_nameaccinletpext_kind,acc=self#extension_constructor_kindpext_kindaccinletpext_loc,acc=self#locationpext_locaccinletpext_attributes,acc=self#attributespext_attributesaccin({pext_name;pext_kind;pext_loc;pext_attributes},acc)methodtype_exception:type_exception->'acc->type_exception*'acc=fun{ptyexn_constructor;ptyexn_loc;ptyexn_attributes}acc->letptyexn_constructor,acc=self#extension_constructorptyexn_constructoraccinletptyexn_loc,acc=self#locationptyexn_locaccinletptyexn_attributes,acc=self#attributesptyexn_attributesaccin({ptyexn_constructor;ptyexn_loc;ptyexn_attributes},acc)methodextension_constructor_kind:extension_constructor_kind->'acc->extension_constructor_kind*'acc=funxacc->matchxwith|Pext_decl(a,b,c)->leta,acc=self#list(self#locself#string)aaccinletb,acc=self#constructor_argumentsbaccinletc,acc=self#optionself#core_typecaccin(Pext_decl(a,b,c),acc)|Pext_rebinda->leta,acc=self#longident_locaaccin(Pext_rebinda,acc)methodclass_type:class_type->'acc->class_type*'acc=fun{pcty_desc;pcty_loc;pcty_attributes}acc->letpcty_desc,acc=self#class_type_descpcty_descaccinletpcty_loc,acc=self#locationpcty_locaccinletpcty_attributes,acc=self#attributespcty_attributesaccin({pcty_desc;pcty_loc;pcty_attributes},acc)methodclass_type_desc:class_type_desc->'acc->class_type_desc*'acc=funxacc->matchxwith|Pcty_constr(a,b)->leta,acc=self#longident_locaaccinletb,acc=self#listself#core_typebaccin(Pcty_constr(a,b),acc)|Pcty_signaturea->leta,acc=self#class_signatureaaccin(Pcty_signaturea,acc)|Pcty_arrow(a,b,c)->leta,acc=self#arg_labelaaccinletb,acc=self#core_typebaccinletc,acc=self#class_typecaccin(Pcty_arrow(a,b,c),acc)|Pcty_extensiona->leta,acc=self#extensionaaccin(Pcty_extensiona,acc)|Pcty_open(a,b)->leta,acc=self#open_descriptionaaccinletb,acc=self#class_typebaccin(Pcty_open(a,b),acc)methodclass_signature:class_signature->'acc->class_signature*'acc=fun{pcsig_self;pcsig_fields}acc->letpcsig_self,acc=self#core_typepcsig_selfaccinletpcsig_fields,acc=self#listself#class_type_fieldpcsig_fieldsaccin({pcsig_self;pcsig_fields},acc)methodclass_type_field:class_type_field->'acc->class_type_field*'acc=fun{pctf_desc;pctf_loc;pctf_attributes}acc->letpctf_desc,acc=self#class_type_field_descpctf_descaccinletpctf_loc,acc=self#locationpctf_locaccinletpctf_attributes,acc=self#attributespctf_attributesaccin({pctf_desc;pctf_loc;pctf_attributes},acc)methodclass_type_field_desc:class_type_field_desc->'acc->class_type_field_desc*'acc=funxacc->matchxwith|Pctf_inherita->leta,acc=self#class_typeaaccin(Pctf_inherita,acc)|Pctf_vala->leta,acc=(fun(a,b,c,d)acc->leta,acc=self#locself#labelaaccinletb,acc=self#mutable_flagbaccinletc,acc=self#virtual_flagcaccinletd,acc=self#core_typedaccin((a,b,c,d),acc))aaccin(Pctf_vala,acc)|Pctf_methoda->leta,acc=(fun(a,b,c,d)acc->leta,acc=self#locself#labelaaccinletb,acc=self#private_flagbaccinletc,acc=self#virtual_flagcaccinletd,acc=self#core_typedaccin((a,b,c,d),acc))aaccin(Pctf_methoda,acc)|Pctf_constrainta->leta,acc=(fun(a,b)acc->leta,acc=self#core_typeaaccinletb,acc=self#core_typebaccin((a,b),acc))aaccin(Pctf_constrainta,acc)|Pctf_attributea->leta,acc=self#attributeaaccin(Pctf_attributea,acc)|Pctf_extensiona->leta,acc=self#extensionaaccin(Pctf_extensiona,acc)methodclass_infos:'a.('a->'acc->'a*'acc)->'aclass_infos->'acc->'aclass_infos*'acc=fun_a{pci_virt;pci_params;pci_name;pci_expr;pci_loc;pci_attributes}acc->letpci_virt,acc=self#virtual_flagpci_virtaccinletpci_params,acc=self#list(fun(a,b)acc->leta,acc=self#core_typeaaccinletb,acc=(fun(a,b)acc->leta,acc=self#varianceaaccinletb,acc=self#injectivitybaccin((a,b),acc))baccin((a,b),acc))pci_paramsaccinletpci_name,acc=self#locself#stringpci_nameaccinletpci_expr,acc=_apci_expraccinletpci_loc,acc=self#locationpci_locaccinletpci_attributes,acc=self#attributespci_attributesaccin({pci_virt;pci_params;pci_name;pci_expr;pci_loc;pci_attributes},acc)methodclass_description:class_description->'acc->class_description*'acc=self#class_infosself#class_typemethodclass_type_declaration:class_type_declaration->'acc->class_type_declaration*'acc=self#class_infosself#class_typemethodclass_expr:class_expr->'acc->class_expr*'acc=fun{pcl_desc;pcl_loc;pcl_attributes}acc->letpcl_desc,acc=self#class_expr_descpcl_descaccinletpcl_loc,acc=self#locationpcl_locaccinletpcl_attributes,acc=self#attributespcl_attributesaccin({pcl_desc;pcl_loc;pcl_attributes},acc)methodclass_expr_desc:class_expr_desc->'acc->class_expr_desc*'acc=funxacc->matchxwith|Pcl_constr(a,b)->leta,acc=self#longident_locaaccinletb,acc=self#listself#core_typebaccin(Pcl_constr(a,b),acc)|Pcl_structurea->leta,acc=self#class_structureaaccin(Pcl_structurea,acc)|Pcl_fun(a,b,c,d)->leta,acc=self#arg_labelaaccinletb,acc=self#optionself#expressionbaccinletc,acc=self#patterncaccinletd,acc=self#class_exprdaccin(Pcl_fun(a,b,c,d),acc)|Pcl_apply(a,b)->leta,acc=self#class_expraaccinletb,acc=self#list(fun(a,b)acc->leta,acc=self#arg_labelaaccinletb,acc=self#expressionbaccin((a,b),acc))baccin(Pcl_apply(a,b),acc)|Pcl_let(a,b,c)->leta,acc=self#rec_flagaaccinletb,acc=self#listself#value_bindingbaccinletc,acc=self#class_exprcaccin(Pcl_let(a,b,c),acc)|Pcl_constraint(a,b)->leta,acc=self#class_expraaccinletb,acc=self#class_typebaccin(Pcl_constraint(a,b),acc)|Pcl_extensiona->leta,acc=self#extensionaaccin(Pcl_extensiona,acc)|Pcl_open(a,b)->leta,acc=self#open_descriptionaaccinletb,acc=self#class_exprbaccin(Pcl_open(a,b),acc)methodclass_structure:class_structure->'acc->class_structure*'acc=fun{pcstr_self;pcstr_fields}acc->letpcstr_self,acc=self#patternpcstr_selfaccinletpcstr_fields,acc=self#listself#class_fieldpcstr_fieldsaccin({pcstr_self;pcstr_fields},acc)methodclass_field:class_field->'acc->class_field*'acc=fun{pcf_desc;pcf_loc;pcf_attributes}acc->letpcf_desc,acc=self#class_field_descpcf_descaccinletpcf_loc,acc=self#locationpcf_locaccinletpcf_attributes,acc=self#attributespcf_attributesaccin({pcf_desc;pcf_loc;pcf_attributes},acc)methodclass_field_desc:class_field_desc->'acc->class_field_desc*'acc=funxacc->matchxwith|Pcf_inherit(a,b,c)->leta,acc=self#override_flagaaccinletb,acc=self#class_exprbaccinletc,acc=self#option(self#locself#string)caccin(Pcf_inherit(a,b,c),acc)|Pcf_vala->leta,acc=(fun(a,b,c)acc->leta,acc=self#locself#labelaaccinletb,acc=self#mutable_flagbaccinletc,acc=self#class_field_kindcaccin((a,b,c),acc))aaccin(Pcf_vala,acc)|Pcf_methoda->leta,acc=(fun(a,b,c)acc->leta,acc=self#locself#labelaaccinletb,acc=self#private_flagbaccinletc,acc=self#class_field_kindcaccin((a,b,c),acc))aaccin(Pcf_methoda,acc)|Pcf_constrainta->leta,acc=(fun(a,b)acc->leta,acc=self#core_typeaaccinletb,acc=self#core_typebaccin((a,b),acc))aaccin(Pcf_constrainta,acc)|Pcf_initializera->leta,acc=self#expressionaaccin(Pcf_initializera,acc)|Pcf_attributea->leta,acc=self#attributeaaccin(Pcf_attributea,acc)|Pcf_extensiona->leta,acc=self#extensionaaccin(Pcf_extensiona,acc)methodclass_field_kind:class_field_kind->'acc->class_field_kind*'acc=funxacc->matchxwith|Cfk_virtuala->leta,acc=self#core_typeaaccin(Cfk_virtuala,acc)|Cfk_concrete(a,b)->leta,acc=self#override_flagaaccinletb,acc=self#expressionbaccin(Cfk_concrete(a,b),acc)methodclass_declaration:class_declaration->'acc->class_declaration*'acc=self#class_infosself#class_exprmethodmodule_type:module_type->'acc->module_type*'acc=fun{pmty_desc;pmty_loc;pmty_attributes}acc->letpmty_desc,acc=self#module_type_descpmty_descaccinletpmty_loc,acc=self#locationpmty_locaccinletpmty_attributes,acc=self#attributespmty_attributesaccin({pmty_desc;pmty_loc;pmty_attributes},acc)methodmodule_type_desc:module_type_desc->'acc->module_type_desc*'acc=funxacc->matchxwith|Pmty_identa->leta,acc=self#longident_locaaccin(Pmty_identa,acc)|Pmty_signaturea->leta,acc=self#signatureaaccin(Pmty_signaturea,acc)|Pmty_functor(a,b)->leta,acc=self#functor_parameteraaccinletb,acc=self#module_typebaccin(Pmty_functor(a,b),acc)|Pmty_with(a,b)->leta,acc=self#module_typeaaccinletb,acc=self#listself#with_constraintbaccin(Pmty_with(a,b),acc)|Pmty_typeofa->leta,acc=self#module_expraaccin(Pmty_typeofa,acc)|Pmty_extensiona->leta,acc=self#extensionaaccin(Pmty_extensiona,acc)|Pmty_aliasa->leta,acc=self#longident_locaaccin(Pmty_aliasa,acc)methodfunctor_parameter:functor_parameter->'acc->functor_parameter*'acc=funxacc->matchxwith|Unit->(Unit,acc)|Named(a,b)->leta,acc=self#loc(self#optionself#string)aaccinletb,acc=self#module_typebaccin(Named(a,b),acc)methodsignature:signature->'acc->signature*'acc=self#listself#signature_itemmethodsignature_item:signature_item->'acc->signature_item*'acc=fun{psig_desc;psig_loc}acc->letpsig_desc,acc=self#signature_item_descpsig_descaccinletpsig_loc,acc=self#locationpsig_locaccin({psig_desc;psig_loc},acc)methodsignature_item_desc:signature_item_desc->'acc->signature_item_desc*'acc=funxacc->matchxwith|Psig_valuea->leta,acc=self#value_descriptionaaccin(Psig_valuea,acc)|Psig_type(a,b)->leta,acc=self#rec_flagaaccinletb,acc=self#listself#type_declarationbaccin(Psig_type(a,b),acc)|Psig_typesubsta->leta,acc=self#listself#type_declarationaaccin(Psig_typesubsta,acc)|Psig_typexta->leta,acc=self#type_extensionaaccin(Psig_typexta,acc)|Psig_exceptiona->leta,acc=self#type_exceptionaaccin(Psig_exceptiona,acc)|Psig_modulea->leta,acc=self#module_declarationaaccin(Psig_modulea,acc)|Psig_modsubsta->leta,acc=self#module_substitutionaaccin(Psig_modsubsta,acc)|Psig_recmodulea->leta,acc=self#listself#module_declarationaaccin(Psig_recmodulea,acc)|Psig_modtypea->leta,acc=self#module_type_declarationaaccin(Psig_modtypea,acc)|Psig_modtypesubsta->leta,acc=self#module_type_declarationaaccin(Psig_modtypesubsta,acc)|Psig_opena->leta,acc=self#open_descriptionaaccin(Psig_opena,acc)|Psig_includea->leta,acc=self#include_descriptionaaccin(Psig_includea,acc)|Psig_classa->leta,acc=self#listself#class_descriptionaaccin(Psig_classa,acc)|Psig_class_typea->leta,acc=self#listself#class_type_declarationaaccin(Psig_class_typea,acc)|Psig_attributea->leta,acc=self#attributeaaccin(Psig_attributea,acc)|Psig_extension(a,b)->leta,acc=self#extensionaaccinletb,acc=self#attributesbaccin(Psig_extension(a,b),acc)methodmodule_declaration:module_declaration->'acc->module_declaration*'acc=fun{pmd_name;pmd_type;pmd_attributes;pmd_loc}acc->letpmd_name,acc=self#loc(self#optionself#string)pmd_nameaccinletpmd_type,acc=self#module_typepmd_typeaccinletpmd_attributes,acc=self#attributespmd_attributesaccinletpmd_loc,acc=self#locationpmd_locaccin({pmd_name;pmd_type;pmd_attributes;pmd_loc},acc)methodmodule_substitution:module_substitution->'acc->module_substitution*'acc=fun{pms_name;pms_manifest;pms_attributes;pms_loc}acc->letpms_name,acc=self#locself#stringpms_nameaccinletpms_manifest,acc=self#longident_locpms_manifestaccinletpms_attributes,acc=self#attributespms_attributesaccinletpms_loc,acc=self#locationpms_locaccin({pms_name;pms_manifest;pms_attributes;pms_loc},acc)methodmodule_type_declaration:module_type_declaration->'acc->module_type_declaration*'acc=fun{pmtd_name;pmtd_type;pmtd_attributes;pmtd_loc}acc->letpmtd_name,acc=self#locself#stringpmtd_nameaccinletpmtd_type,acc=self#optionself#module_typepmtd_typeaccinletpmtd_attributes,acc=self#attributespmtd_attributesaccinletpmtd_loc,acc=self#locationpmtd_locaccin({pmtd_name;pmtd_type;pmtd_attributes;pmtd_loc},acc)methodopen_infos:'a.('a->'acc->'a*'acc)->'aopen_infos->'acc->'aopen_infos*'acc=fun_a{popen_expr;popen_override;popen_loc;popen_attributes}acc->letpopen_expr,acc=_apopen_expraccinletpopen_override,acc=self#override_flagpopen_overrideaccinletpopen_loc,acc=self#locationpopen_locaccinletpopen_attributes,acc=self#attributespopen_attributesaccin({popen_expr;popen_override;popen_loc;popen_attributes},acc)methodopen_description:open_description->'acc->open_description*'acc=self#open_infosself#longident_locmethodopen_declaration:open_declaration->'acc->open_declaration*'acc=self#open_infosself#module_exprmethodinclude_infos:'a.('a->'acc->'a*'acc)->'ainclude_infos->'acc->'ainclude_infos*'acc=fun_a{pincl_mod;pincl_loc;pincl_attributes}acc->letpincl_mod,acc=_apincl_modaccinletpincl_loc,acc=self#locationpincl_locaccinletpincl_attributes,acc=self#attributespincl_attributesaccin({pincl_mod;pincl_loc;pincl_attributes},acc)methodinclude_description:include_description->'acc->include_description*'acc=self#include_infosself#module_typemethodinclude_declaration:include_declaration->'acc->include_declaration*'acc=self#include_infosself#module_exprmethodwith_constraint:with_constraint->'acc->with_constraint*'acc=funxacc->matchxwith|Pwith_type(a,b)->leta,acc=self#longident_locaaccinletb,acc=self#type_declarationbaccin(Pwith_type(a,b),acc)|Pwith_module(a,b)->leta,acc=self#longident_locaaccinletb,acc=self#longident_locbaccin(Pwith_module(a,b),acc)|Pwith_modtype(a,b)->leta,acc=self#longident_locaaccinletb,acc=self#module_typebaccin(Pwith_modtype(a,b),acc)|Pwith_modtypesubst(a,b)->leta,acc=self#longident_locaaccinletb,acc=self#module_typebaccin(Pwith_modtypesubst(a,b),acc)|Pwith_typesubst(a,b)->leta,acc=self#longident_locaaccinletb,acc=self#type_declarationbaccin(Pwith_typesubst(a,b),acc)|Pwith_modsubst(a,b)->leta,acc=self#longident_locaaccinletb,acc=self#longident_locbaccin(Pwith_modsubst(a,b),acc)methodmodule_expr:module_expr->'acc->module_expr*'acc=fun{pmod_desc;pmod_loc;pmod_attributes}acc->letpmod_desc,acc=self#module_expr_descpmod_descaccinletpmod_loc,acc=self#locationpmod_locaccinletpmod_attributes,acc=self#attributespmod_attributesaccin({pmod_desc;pmod_loc;pmod_attributes},acc)methodmodule_expr_desc:module_expr_desc->'acc->module_expr_desc*'acc=funxacc->matchxwith|Pmod_identa->leta,acc=self#longident_locaaccin(Pmod_identa,acc)|Pmod_structurea->leta,acc=self#structureaaccin(Pmod_structurea,acc)|Pmod_functor(a,b)->leta,acc=self#functor_parameteraaccinletb,acc=self#module_exprbaccin(Pmod_functor(a,b),acc)|Pmod_apply(a,b)->leta,acc=self#module_expraaccinletb,acc=self#module_exprbaccin(Pmod_apply(a,b),acc)|Pmod_constraint(a,b)->leta,acc=self#module_expraaccinletb,acc=self#module_typebaccin(Pmod_constraint(a,b),acc)|Pmod_unpacka->leta,acc=self#expressionaaccin(Pmod_unpacka,acc)|Pmod_extensiona->leta,acc=self#extensionaaccin(Pmod_extensiona,acc)methodstructure:structure->'acc->structure*'acc=self#listself#structure_itemmethodstructure_item:structure_item->'acc->structure_item*'acc=fun{pstr_desc;pstr_loc}acc->letpstr_desc,acc=self#structure_item_descpstr_descaccinletpstr_loc,acc=self#locationpstr_locaccin({pstr_desc;pstr_loc},acc)methodstructure_item_desc:structure_item_desc->'acc->structure_item_desc*'acc=funxacc->matchxwith|Pstr_eval(a,b)->leta,acc=self#expressionaaccinletb,acc=self#attributesbaccin(Pstr_eval(a,b),acc)|Pstr_value(a,b)->leta,acc=self#rec_flagaaccinletb,acc=self#listself#value_bindingbaccin(Pstr_value(a,b),acc)|Pstr_primitivea->leta,acc=self#value_descriptionaaccin(Pstr_primitivea,acc)|Pstr_type(a,b)->leta,acc=self#rec_flagaaccinletb,acc=self#listself#type_declarationbaccin(Pstr_type(a,b),acc)|Pstr_typexta->leta,acc=self#type_extensionaaccin(Pstr_typexta,acc)|Pstr_exceptiona->leta,acc=self#type_exceptionaaccin(Pstr_exceptiona,acc)|Pstr_modulea->leta,acc=self#module_bindingaaccin(Pstr_modulea,acc)|Pstr_recmodulea->leta,acc=self#listself#module_bindingaaccin(Pstr_recmodulea,acc)|Pstr_modtypea->leta,acc=self#module_type_declarationaaccin(Pstr_modtypea,acc)|Pstr_opena->leta,acc=self#open_declarationaaccin(Pstr_opena,acc)|Pstr_classa->leta,acc=self#listself#class_declarationaaccin(Pstr_classa,acc)|Pstr_class_typea->leta,acc=self#listself#class_type_declarationaaccin(Pstr_class_typea,acc)|Pstr_includea->leta,acc=self#include_declarationaaccin(Pstr_includea,acc)|Pstr_attributea->leta,acc=self#attributeaaccin(Pstr_attributea,acc)|Pstr_extension(a,b)->leta,acc=self#extensionaaccinletb,acc=self#attributesbaccin(Pstr_extension(a,b),acc)methodvalue_binding:value_binding->'acc->value_binding*'acc=fun{pvb_pat;pvb_expr;pvb_attributes;pvb_loc}acc->letpvb_pat,acc=self#patternpvb_pataccinletpvb_expr,acc=self#expressionpvb_expraccinletpvb_attributes,acc=self#attributespvb_attributesaccinletpvb_loc,acc=self#locationpvb_locaccin({pvb_pat;pvb_expr;pvb_attributes;pvb_loc},acc)methodmodule_binding:module_binding->'acc->module_binding*'acc=fun{pmb_name;pmb_expr;pmb_attributes;pmb_loc}acc->letpmb_name,acc=self#loc(self#optionself#string)pmb_nameaccinletpmb_expr,acc=self#module_exprpmb_expraccinletpmb_attributes,acc=self#attributespmb_attributesaccinletpmb_loc,acc=self#locationpmb_locaccin({pmb_name;pmb_expr;pmb_attributes;pmb_loc},acc)methodtoplevel_phrase:toplevel_phrase->'acc->toplevel_phrase*'acc=funxacc->matchxwith|Ptop_defa->leta,acc=self#structureaaccin(Ptop_defa,acc)|Ptop_dira->leta,acc=self#toplevel_directiveaaccin(Ptop_dira,acc)methodtoplevel_directive:toplevel_directive->'acc->toplevel_directive*'acc=fun{pdir_name;pdir_arg;pdir_loc}acc->letpdir_name,acc=self#locself#stringpdir_nameaccinletpdir_arg,acc=self#optionself#directive_argumentpdir_argaccinletpdir_loc,acc=self#locationpdir_locaccin({pdir_name;pdir_arg;pdir_loc},acc)methoddirective_argument:directive_argument->'acc->directive_argument*'acc=fun{pdira_desc;pdira_loc}acc->letpdira_desc,acc=self#directive_argument_descpdira_descaccinletpdira_loc,acc=self#locationpdira_locaccin({pdira_desc;pdira_loc},acc)methoddirective_argument_desc:directive_argument_desc->'acc->directive_argument_desc*'acc=funxacc->matchxwith|Pdir_stringa->leta,acc=self#stringaaccin(Pdir_stringa,acc)|Pdir_int(a,b)->leta,acc=self#stringaaccinletb,acc=self#optionself#charbaccin(Pdir_int(a,b),acc)|Pdir_identa->leta,acc=self#longidentaaccin(Pdir_identa,acc)|Pdir_boola->leta,acc=self#boolaaccin(Pdir_boola,acc)methodcases:cases->'acc->cases*'acc=self#listself#caseendclassvirtual['ctx]map_with_context=object(self)methodvirtualbool:'ctx->bool->boolmethodvirtualchar:'ctx->char->charmethodvirtualint:'ctx->int->intmethodvirtuallist:'a.('ctx->'a->'a)->'ctx->'alist->'alistmethodvirtualoption:'a.('ctx->'a->'a)->'ctx->'aoption->'aoptionmethodvirtualstring:'ctx->string->stringmethodposition:'ctx->position->position=functx{pos_fname;pos_lnum;pos_bol;pos_cnum}->letpos_fname=self#stringctxpos_fnameinletpos_lnum=self#intctxpos_lnuminletpos_bol=self#intctxpos_bolinletpos_cnum=self#intctxpos_cnumin{pos_fname;pos_lnum;pos_bol;pos_cnum}methodlocation:'ctx->location->location=functx{loc_start;loc_end;loc_ghost}->letloc_start=self#positionctxloc_startinletloc_end=self#positionctxloc_endinletloc_ghost=self#boolctxloc_ghostin{loc_start;loc_end;loc_ghost}methodlocation_stack:'ctx->location_stack->location_stack=self#listself#locationmethodloc:'a.('ctx->'a->'a)->'ctx->'aloc->'aloc=fun_actx{txt;loc}->lettxt=_actxtxtinletloc=self#locationctxlocin{txt;loc}methodlongident:'ctx->longident->longident=functxx->matchxwith|Lidenta->leta=self#stringctxainLidenta|Ldot(a,b)->leta=self#longidentctxainletb=self#stringctxbinLdot(a,b)|Lapply(a,b)->leta=self#longidentctxainletb=self#longidentctxbinLapply(a,b)methodlongident_loc:'ctx->longident_loc->longident_loc=self#locself#longidentmethodrec_flag:'ctx->rec_flag->rec_flag=fun_ctxx->xmethoddirection_flag:'ctx->direction_flag->direction_flag=fun_ctxx->xmethodprivate_flag:'ctx->private_flag->private_flag=fun_ctxx->xmethodmutable_flag:'ctx->mutable_flag->mutable_flag=fun_ctxx->xmethodvirtual_flag:'ctx->virtual_flag->virtual_flag=fun_ctxx->xmethodoverride_flag:'ctx->override_flag->override_flag=fun_ctxx->xmethodclosed_flag:'ctx->closed_flag->closed_flag=fun_ctxx->xmethodlabel:'ctx->label->label=self#stringmethodarg_label:'ctx->arg_label->arg_label=functxx->matchxwith|Nolabel->Nolabel|Labelleda->leta=self#stringctxainLabelleda|Optionala->leta=self#stringctxainOptionalamethodvariance:'ctx->variance->variance=fun_ctxx->xmethodinjectivity:'ctx->injectivity->injectivity=fun_ctxx->xmethodconstant:'ctx->constant->constant=functxx->matchxwith|Pconst_integer(a,b)->leta=self#stringctxainletb=self#optionself#charctxbinPconst_integer(a,b)|Pconst_chara->leta=self#charctxainPconst_chara|Pconst_string(a,b,c)->leta=self#stringctxainletb=self#locationctxbinletc=self#optionself#stringctxcinPconst_string(a,b,c)|Pconst_float(a,b)->leta=self#stringctxainletb=self#optionself#charctxbinPconst_float(a,b)methodattribute:'ctx->attribute->attribute=functx{attr_name;attr_payload;attr_loc}->letattr_name=self#locself#stringctxattr_nameinletattr_payload=self#payloadctxattr_payloadinletattr_loc=self#locationctxattr_locin{attr_name;attr_payload;attr_loc}methodextension:'ctx->extension->extension=functx(a,b)->leta=self#locself#stringctxainletb=self#payloadctxbin(a,b)methodattributes:'ctx->attributes->attributes=self#listself#attributemethodpayload:'ctx->payload->payload=functxx->matchxwith|PStra->leta=self#structurectxainPStra|PSiga->leta=self#signaturectxainPSiga|PTypa->leta=self#core_typectxainPTypa|PPat(a,b)->leta=self#patternctxainletb=self#optionself#expressionctxbinPPat(a,b)methodcore_type:'ctx->core_type->core_type=functx{ptyp_desc;ptyp_loc;ptyp_loc_stack;ptyp_attributes}->letptyp_desc=self#core_type_descctxptyp_descinletptyp_loc=self#locationctxptyp_locinletptyp_loc_stack=self#location_stackctxptyp_loc_stackinletptyp_attributes=self#attributesctxptyp_attributesin{ptyp_desc;ptyp_loc;ptyp_loc_stack;ptyp_attributes}methodcore_type_desc:'ctx->core_type_desc->core_type_desc=functxx->matchxwith|Ptyp_any->Ptyp_any|Ptyp_vara->leta=self#stringctxainPtyp_vara|Ptyp_arrow(a,b,c)->leta=self#arg_labelctxainletb=self#core_typectxbinletc=self#core_typectxcinPtyp_arrow(a,b,c)|Ptyp_tuplea->leta=self#listself#core_typectxainPtyp_tuplea|Ptyp_constr(a,b)->leta=self#longident_locctxainletb=self#listself#core_typectxbinPtyp_constr(a,b)|Ptyp_object(a,b)->leta=self#listself#object_fieldctxainletb=self#closed_flagctxbinPtyp_object(a,b)|Ptyp_class(a,b)->leta=self#longident_locctxainletb=self#listself#core_typectxbinPtyp_class(a,b)|Ptyp_alias(a,b)->leta=self#core_typectxainletb=self#stringctxbinPtyp_alias(a,b)|Ptyp_variant(a,b,c)->leta=self#listself#row_fieldctxainletb=self#closed_flagctxbinletc=self#option(self#listself#label)ctxcinPtyp_variant(a,b,c)|Ptyp_poly(a,b)->leta=self#list(self#locself#string)ctxainletb=self#core_typectxbinPtyp_poly(a,b)|Ptyp_packagea->leta=self#package_typectxainPtyp_packagea|Ptyp_extensiona->leta=self#extensionctxainPtyp_extensionamethodpackage_type:'ctx->package_type->package_type=functx(a,b)->leta=self#longident_locctxainletb=self#list(functx(a,b)->leta=self#longident_locctxainletb=self#core_typectxbin(a,b))ctxbin(a,b)methodrow_field:'ctx->row_field->row_field=functx{prf_desc;prf_loc;prf_attributes}->letprf_desc=self#row_field_descctxprf_descinletprf_loc=self#locationctxprf_locinletprf_attributes=self#attributesctxprf_attributesin{prf_desc;prf_loc;prf_attributes}methodrow_field_desc:'ctx->row_field_desc->row_field_desc=functxx->matchxwith|Rtag(a,b,c)->leta=self#locself#labelctxainletb=self#boolctxbinletc=self#listself#core_typectxcinRtag(a,b,c)|Rinherita->leta=self#core_typectxainRinheritamethodobject_field:'ctx->object_field->object_field=functx{pof_desc;pof_loc;pof_attributes}->letpof_desc=self#object_field_descctxpof_descinletpof_loc=self#locationctxpof_locinletpof_attributes=self#attributesctxpof_attributesin{pof_desc;pof_loc;pof_attributes}methodobject_field_desc:'ctx->object_field_desc->object_field_desc=functxx->matchxwith|Otag(a,b)->leta=self#locself#labelctxainletb=self#core_typectxbinOtag(a,b)|Oinherita->leta=self#core_typectxainOinheritamethodpattern:'ctx->pattern->pattern=functx{ppat_desc;ppat_loc;ppat_loc_stack;ppat_attributes}->letppat_desc=self#pattern_descctxppat_descinletppat_loc=self#locationctxppat_locinletppat_loc_stack=self#location_stackctxppat_loc_stackinletppat_attributes=self#attributesctxppat_attributesin{ppat_desc;ppat_loc;ppat_loc_stack;ppat_attributes}methodpattern_desc:'ctx->pattern_desc->pattern_desc=functxx->matchxwith|Ppat_any->Ppat_any|Ppat_vara->leta=self#locself#stringctxainPpat_vara|Ppat_alias(a,b)->leta=self#patternctxainletb=self#locself#stringctxbinPpat_alias(a,b)|Ppat_constanta->leta=self#constantctxainPpat_constanta|Ppat_interval(a,b)->leta=self#constantctxainletb=self#constantctxbinPpat_interval(a,b)|Ppat_tuplea->leta=self#listself#patternctxainPpat_tuplea|Ppat_construct(a,b)->leta=self#longident_locctxainletb=self#option(functx(a,b)->leta=self#list(self#locself#string)ctxainletb=self#patternctxbin(a,b))ctxbinPpat_construct(a,b)|Ppat_variant(a,b)->leta=self#labelctxainletb=self#optionself#patternctxbinPpat_variant(a,b)|Ppat_record(a,b)->leta=self#list(functx(a,b)->leta=self#longident_locctxainletb=self#patternctxbin(a,b))ctxainletb=self#closed_flagctxbinPpat_record(a,b)|Ppat_arraya->leta=self#listself#patternctxainPpat_arraya|Ppat_or(a,b)->leta=self#patternctxainletb=self#patternctxbinPpat_or(a,b)|Ppat_constraint(a,b)->leta=self#patternctxainletb=self#core_typectxbinPpat_constraint(a,b)|Ppat_typea->leta=self#longident_locctxainPpat_typea|Ppat_lazya->leta=self#patternctxainPpat_lazya|Ppat_unpacka->leta=self#loc(self#optionself#string)ctxainPpat_unpacka|Ppat_exceptiona->leta=self#patternctxainPpat_exceptiona|Ppat_extensiona->leta=self#extensionctxainPpat_extensiona|Ppat_open(a,b)->leta=self#longident_locctxainletb=self#patternctxbinPpat_open(a,b)methodexpression:'ctx->expression->expression=functx{pexp_desc;pexp_loc;pexp_loc_stack;pexp_attributes}->letpexp_desc=self#expression_descctxpexp_descinletpexp_loc=self#locationctxpexp_locinletpexp_loc_stack=self#location_stackctxpexp_loc_stackinletpexp_attributes=self#attributesctxpexp_attributesin{pexp_desc;pexp_loc;pexp_loc_stack;pexp_attributes}methodexpression_desc:'ctx->expression_desc->expression_desc=functxx->matchxwith|Pexp_identa->leta=self#longident_locctxainPexp_identa|Pexp_constanta->leta=self#constantctxainPexp_constanta|Pexp_let(a,b,c)->leta=self#rec_flagctxainletb=self#listself#value_bindingctxbinletc=self#expressionctxcinPexp_let(a,b,c)|Pexp_functiona->leta=self#casesctxainPexp_functiona|Pexp_fun(a,b,c,d)->leta=self#arg_labelctxainletb=self#optionself#expressionctxbinletc=self#patternctxcinletd=self#expressionctxdinPexp_fun(a,b,c,d)|Pexp_apply(a,b)->leta=self#expressionctxainletb=self#list(functx(a,b)->leta=self#arg_labelctxainletb=self#expressionctxbin(a,b))ctxbinPexp_apply(a,b)|Pexp_match(a,b)->leta=self#expressionctxainletb=self#casesctxbinPexp_match(a,b)|Pexp_try(a,b)->leta=self#expressionctxainletb=self#casesctxbinPexp_try(a,b)|Pexp_tuplea->leta=self#listself#expressionctxainPexp_tuplea|Pexp_construct(a,b)->leta=self#longident_locctxainletb=self#optionself#expressionctxbinPexp_construct(a,b)|Pexp_variant(a,b)->leta=self#labelctxainletb=self#optionself#expressionctxbinPexp_variant(a,b)|Pexp_record(a,b)->leta=self#list(functx(a,b)->leta=self#longident_locctxainletb=self#expressionctxbin(a,b))ctxainletb=self#optionself#expressionctxbinPexp_record(a,b)|Pexp_field(a,b)->leta=self#expressionctxainletb=self#longident_locctxbinPexp_field(a,b)|Pexp_setfield(a,b,c)->leta=self#expressionctxainletb=self#longident_locctxbinletc=self#expressionctxcinPexp_setfield(a,b,c)|Pexp_arraya->leta=self#listself#expressionctxainPexp_arraya|Pexp_ifthenelse(a,b,c)->leta=self#expressionctxainletb=self#expressionctxbinletc=self#optionself#expressionctxcinPexp_ifthenelse(a,b,c)|Pexp_sequence(a,b)->leta=self#expressionctxainletb=self#expressionctxbinPexp_sequence(a,b)|Pexp_while(a,b)->leta=self#expressionctxainletb=self#expressionctxbinPexp_while(a,b)|Pexp_for(a,b,c,d,e)->leta=self#patternctxainletb=self#expressionctxbinletc=self#expressionctxcinletd=self#direction_flagctxdinlete=self#expressionctxeinPexp_for(a,b,c,d,e)|Pexp_constraint(a,b)->leta=self#expressionctxainletb=self#core_typectxbinPexp_constraint(a,b)|Pexp_coerce(a,b,c)->leta=self#expressionctxainletb=self#optionself#core_typectxbinletc=self#core_typectxcinPexp_coerce(a,b,c)|Pexp_send(a,b)->leta=self#expressionctxainletb=self#locself#labelctxbinPexp_send(a,b)|Pexp_newa->leta=self#longident_locctxainPexp_newa|Pexp_setinstvar(a,b)->leta=self#locself#labelctxainletb=self#expressionctxbinPexp_setinstvar(a,b)|Pexp_overridea->leta=self#list(functx(a,b)->leta=self#locself#labelctxainletb=self#expressionctxbin(a,b))ctxainPexp_overridea|Pexp_letmodule(a,b,c)->leta=self#loc(self#optionself#string)ctxainletb=self#module_exprctxbinletc=self#expressionctxcinPexp_letmodule(a,b,c)|Pexp_letexception(a,b)->leta=self#extension_constructorctxainletb=self#expressionctxbinPexp_letexception(a,b)|Pexp_asserta->leta=self#expressionctxainPexp_asserta|Pexp_lazya->leta=self#expressionctxainPexp_lazya|Pexp_poly(a,b)->leta=self#expressionctxainletb=self#optionself#core_typectxbinPexp_poly(a,b)|Pexp_objecta->leta=self#class_structurectxainPexp_objecta|Pexp_newtype(a,b)->leta=self#locself#stringctxainletb=self#expressionctxbinPexp_newtype(a,b)|Pexp_packa->leta=self#module_exprctxainPexp_packa|Pexp_open(a,b)->leta=self#open_declarationctxainletb=self#expressionctxbinPexp_open(a,b)|Pexp_letopa->leta=self#letopctxainPexp_letopa|Pexp_extensiona->leta=self#extensionctxainPexp_extensiona|Pexp_unreachable->Pexp_unreachablemethodcase:'ctx->case->case=functx{pc_lhs;pc_guard;pc_rhs}->letpc_lhs=self#patternctxpc_lhsinletpc_guard=self#optionself#expressionctxpc_guardinletpc_rhs=self#expressionctxpc_rhsin{pc_lhs;pc_guard;pc_rhs}methodletop:'ctx->letop->letop=functx{let_;ands;body}->letlet_=self#binding_opctxlet_inletands=self#listself#binding_opctxandsinletbody=self#expressionctxbodyin{let_;ands;body}methodbinding_op:'ctx->binding_op->binding_op=functx{pbop_op;pbop_pat;pbop_exp;pbop_loc}->letpbop_op=self#locself#stringctxpbop_opinletpbop_pat=self#patternctxpbop_patinletpbop_exp=self#expressionctxpbop_expinletpbop_loc=self#locationctxpbop_locin{pbop_op;pbop_pat;pbop_exp;pbop_loc}methodvalue_description:'ctx->value_description->value_description=functx{pval_name;pval_type;pval_prim;pval_attributes;pval_loc}->letpval_name=self#locself#stringctxpval_nameinletpval_type=self#core_typectxpval_typeinletpval_prim=self#listself#stringctxpval_priminletpval_attributes=self#attributesctxpval_attributesinletpval_loc=self#locationctxpval_locin{pval_name;pval_type;pval_prim;pval_attributes;pval_loc}methodtype_declaration:'ctx->type_declaration->type_declaration=functx{ptype_name;ptype_params;ptype_cstrs;ptype_kind;ptype_private;ptype_manifest;ptype_attributes;ptype_loc;}->letptype_name=self#locself#stringctxptype_nameinletptype_params=self#list(functx(a,b)->leta=self#core_typectxainletb=(functx(a,b)->leta=self#variancectxainletb=self#injectivityctxbin(a,b))ctxbin(a,b))ctxptype_paramsinletptype_cstrs=self#list(functx(a,b,c)->leta=self#core_typectxainletb=self#core_typectxbinletc=self#locationctxcin(a,b,c))ctxptype_cstrsinletptype_kind=self#type_kindctxptype_kindinletptype_private=self#private_flagctxptype_privateinletptype_manifest=self#optionself#core_typectxptype_manifestinletptype_attributes=self#attributesctxptype_attributesinletptype_loc=self#locationctxptype_locin{ptype_name;ptype_params;ptype_cstrs;ptype_kind;ptype_private;ptype_manifest;ptype_attributes;ptype_loc;}methodtype_kind:'ctx->type_kind->type_kind=functxx->matchxwith|Ptype_abstract->Ptype_abstract|Ptype_varianta->leta=self#listself#constructor_declarationctxainPtype_varianta|Ptype_recorda->leta=self#listself#label_declarationctxainPtype_recorda|Ptype_open->Ptype_openmethodlabel_declaration:'ctx->label_declaration->label_declaration=functx{pld_name;pld_mutable;pld_type;pld_loc;pld_attributes}->letpld_name=self#locself#stringctxpld_nameinletpld_mutable=self#mutable_flagctxpld_mutableinletpld_type=self#core_typectxpld_typeinletpld_loc=self#locationctxpld_locinletpld_attributes=self#attributesctxpld_attributesin{pld_name;pld_mutable;pld_type;pld_loc;pld_attributes}methodconstructor_declaration:'ctx->constructor_declaration->constructor_declaration=functx{pcd_name;pcd_vars;pcd_args;pcd_res;pcd_loc;pcd_attributes}->letpcd_name=self#locself#stringctxpcd_nameinletpcd_vars=self#list(self#locself#string)ctxpcd_varsinletpcd_args=self#constructor_argumentsctxpcd_argsinletpcd_res=self#optionself#core_typectxpcd_resinletpcd_loc=self#locationctxpcd_locinletpcd_attributes=self#attributesctxpcd_attributesin{pcd_name;pcd_vars;pcd_args;pcd_res;pcd_loc;pcd_attributes}methodconstructor_arguments:'ctx->constructor_arguments->constructor_arguments=functxx->matchxwith|Pcstr_tuplea->leta=self#listself#core_typectxainPcstr_tuplea|Pcstr_recorda->leta=self#listself#label_declarationctxainPcstr_recordamethodtype_extension:'ctx->type_extension->type_extension=functx{ptyext_path;ptyext_params;ptyext_constructors;ptyext_private;ptyext_loc;ptyext_attributes;}->letptyext_path=self#longident_locctxptyext_pathinletptyext_params=self#list(functx(a,b)->leta=self#core_typectxainletb=(functx(a,b)->leta=self#variancectxainletb=self#injectivityctxbin(a,b))ctxbin(a,b))ctxptyext_paramsinletptyext_constructors=self#listself#extension_constructorctxptyext_constructorsinletptyext_private=self#private_flagctxptyext_privateinletptyext_loc=self#locationctxptyext_locinletptyext_attributes=self#attributesctxptyext_attributesin{ptyext_path;ptyext_params;ptyext_constructors;ptyext_private;ptyext_loc;ptyext_attributes;}methodextension_constructor:'ctx->extension_constructor->extension_constructor=functx{pext_name;pext_kind;pext_loc;pext_attributes}->letpext_name=self#locself#stringctxpext_nameinletpext_kind=self#extension_constructor_kindctxpext_kindinletpext_loc=self#locationctxpext_locinletpext_attributes=self#attributesctxpext_attributesin{pext_name;pext_kind;pext_loc;pext_attributes}methodtype_exception:'ctx->type_exception->type_exception=functx{ptyexn_constructor;ptyexn_loc;ptyexn_attributes}->letptyexn_constructor=self#extension_constructorctxptyexn_constructorinletptyexn_loc=self#locationctxptyexn_locinletptyexn_attributes=self#attributesctxptyexn_attributesin{ptyexn_constructor;ptyexn_loc;ptyexn_attributes}methodextension_constructor_kind:'ctx->extension_constructor_kind->extension_constructor_kind=functxx->matchxwith|Pext_decl(a,b,c)->leta=self#list(self#locself#string)ctxainletb=self#constructor_argumentsctxbinletc=self#optionself#core_typectxcinPext_decl(a,b,c)|Pext_rebinda->leta=self#longident_locctxainPext_rebindamethodclass_type:'ctx->class_type->class_type=functx{pcty_desc;pcty_loc;pcty_attributes}->letpcty_desc=self#class_type_descctxpcty_descinletpcty_loc=self#locationctxpcty_locinletpcty_attributes=self#attributesctxpcty_attributesin{pcty_desc;pcty_loc;pcty_attributes}methodclass_type_desc:'ctx->class_type_desc->class_type_desc=functxx->matchxwith|Pcty_constr(a,b)->leta=self#longident_locctxainletb=self#listself#core_typectxbinPcty_constr(a,b)|Pcty_signaturea->leta=self#class_signaturectxainPcty_signaturea|Pcty_arrow(a,b,c)->leta=self#arg_labelctxainletb=self#core_typectxbinletc=self#class_typectxcinPcty_arrow(a,b,c)|Pcty_extensiona->leta=self#extensionctxainPcty_extensiona|Pcty_open(a,b)->leta=self#open_descriptionctxainletb=self#class_typectxbinPcty_open(a,b)methodclass_signature:'ctx->class_signature->class_signature=functx{pcsig_self;pcsig_fields}->letpcsig_self=self#core_typectxpcsig_selfinletpcsig_fields=self#listself#class_type_fieldctxpcsig_fieldsin{pcsig_self;pcsig_fields}methodclass_type_field:'ctx->class_type_field->class_type_field=functx{pctf_desc;pctf_loc;pctf_attributes}->letpctf_desc=self#class_type_field_descctxpctf_descinletpctf_loc=self#locationctxpctf_locinletpctf_attributes=self#attributesctxpctf_attributesin{pctf_desc;pctf_loc;pctf_attributes}methodclass_type_field_desc:'ctx->class_type_field_desc->class_type_field_desc=functxx->matchxwith|Pctf_inherita->leta=self#class_typectxainPctf_inherita|Pctf_vala->leta=(functx(a,b,c,d)->leta=self#locself#labelctxainletb=self#mutable_flagctxbinletc=self#virtual_flagctxcinletd=self#core_typectxdin(a,b,c,d))ctxainPctf_vala|Pctf_methoda->leta=(functx(a,b,c,d)->leta=self#locself#labelctxainletb=self#private_flagctxbinletc=self#virtual_flagctxcinletd=self#core_typectxdin(a,b,c,d))ctxainPctf_methoda|Pctf_constrainta->leta=(functx(a,b)->leta=self#core_typectxainletb=self#core_typectxbin(a,b))ctxainPctf_constrainta|Pctf_attributea->leta=self#attributectxainPctf_attributea|Pctf_extensiona->leta=self#extensionctxainPctf_extensionamethodclass_infos:'a.('ctx->'a->'a)->'ctx->'aclass_infos->'aclass_infos=fun_actx{pci_virt;pci_params;pci_name;pci_expr;pci_loc;pci_attributes}->letpci_virt=self#virtual_flagctxpci_virtinletpci_params=self#list(functx(a,b)->leta=self#core_typectxainletb=(functx(a,b)->leta=self#variancectxainletb=self#injectivityctxbin(a,b))ctxbin(a,b))ctxpci_paramsinletpci_name=self#locself#stringctxpci_nameinletpci_expr=_actxpci_exprinletpci_loc=self#locationctxpci_locinletpci_attributes=self#attributesctxpci_attributesin{pci_virt;pci_params;pci_name;pci_expr;pci_loc;pci_attributes}methodclass_description:'ctx->class_description->class_description=self#class_infosself#class_typemethodclass_type_declaration:'ctx->class_type_declaration->class_type_declaration=self#class_infosself#class_typemethodclass_expr:'ctx->class_expr->class_expr=functx{pcl_desc;pcl_loc;pcl_attributes}->letpcl_desc=self#class_expr_descctxpcl_descinletpcl_loc=self#locationctxpcl_locinletpcl_attributes=self#attributesctxpcl_attributesin{pcl_desc;pcl_loc;pcl_attributes}methodclass_expr_desc:'ctx->class_expr_desc->class_expr_desc=functxx->matchxwith|Pcl_constr(a,b)->leta=self#longident_locctxainletb=self#listself#core_typectxbinPcl_constr(a,b)|Pcl_structurea->leta=self#class_structurectxainPcl_structurea|Pcl_fun(a,b,c,d)->leta=self#arg_labelctxainletb=self#optionself#expressionctxbinletc=self#patternctxcinletd=self#class_exprctxdinPcl_fun(a,b,c,d)|Pcl_apply(a,b)->leta=self#class_exprctxainletb=self#list(functx(a,b)->leta=self#arg_labelctxainletb=self#expressionctxbin(a,b))ctxbinPcl_apply(a,b)|Pcl_let(a,b,c)->leta=self#rec_flagctxainletb=self#listself#value_bindingctxbinletc=self#class_exprctxcinPcl_let(a,b,c)|Pcl_constraint(a,b)->leta=self#class_exprctxainletb=self#class_typectxbinPcl_constraint(a,b)|Pcl_extensiona->leta=self#extensionctxainPcl_extensiona|Pcl_open(a,b)->leta=self#open_descriptionctxainletb=self#class_exprctxbinPcl_open(a,b)methodclass_structure:'ctx->class_structure->class_structure=functx{pcstr_self;pcstr_fields}->letpcstr_self=self#patternctxpcstr_selfinletpcstr_fields=self#listself#class_fieldctxpcstr_fieldsin{pcstr_self;pcstr_fields}methodclass_field:'ctx->class_field->class_field=functx{pcf_desc;pcf_loc;pcf_attributes}->letpcf_desc=self#class_field_descctxpcf_descinletpcf_loc=self#locationctxpcf_locinletpcf_attributes=self#attributesctxpcf_attributesin{pcf_desc;pcf_loc;pcf_attributes}methodclass_field_desc:'ctx->class_field_desc->class_field_desc=functxx->matchxwith|Pcf_inherit(a,b,c)->leta=self#override_flagctxainletb=self#class_exprctxbinletc=self#option(self#locself#string)ctxcinPcf_inherit(a,b,c)|Pcf_vala->leta=(functx(a,b,c)->leta=self#locself#labelctxainletb=self#mutable_flagctxbinletc=self#class_field_kindctxcin(a,b,c))ctxainPcf_vala|Pcf_methoda->leta=(functx(a,b,c)->leta=self#locself#labelctxainletb=self#private_flagctxbinletc=self#class_field_kindctxcin(a,b,c))ctxainPcf_methoda|Pcf_constrainta->leta=(functx(a,b)->leta=self#core_typectxainletb=self#core_typectxbin(a,b))ctxainPcf_constrainta|Pcf_initializera->leta=self#expressionctxainPcf_initializera|Pcf_attributea->leta=self#attributectxainPcf_attributea|Pcf_extensiona->leta=self#extensionctxainPcf_extensionamethodclass_field_kind:'ctx->class_field_kind->class_field_kind=functxx->matchxwith|Cfk_virtuala->leta=self#core_typectxainCfk_virtuala|Cfk_concrete(a,b)->leta=self#override_flagctxainletb=self#expressionctxbinCfk_concrete(a,b)methodclass_declaration:'ctx->class_declaration->class_declaration=self#class_infosself#class_exprmethodmodule_type:'ctx->module_type->module_type=functx{pmty_desc;pmty_loc;pmty_attributes}->letpmty_desc=self#module_type_descctxpmty_descinletpmty_loc=self#locationctxpmty_locinletpmty_attributes=self#attributesctxpmty_attributesin{pmty_desc;pmty_loc;pmty_attributes}methodmodule_type_desc:'ctx->module_type_desc->module_type_desc=functxx->matchxwith|Pmty_identa->leta=self#longident_locctxainPmty_identa|Pmty_signaturea->leta=self#signaturectxainPmty_signaturea|Pmty_functor(a,b)->leta=self#functor_parameterctxainletb=self#module_typectxbinPmty_functor(a,b)|Pmty_with(a,b)->leta=self#module_typectxainletb=self#listself#with_constraintctxbinPmty_with(a,b)|Pmty_typeofa->leta=self#module_exprctxainPmty_typeofa|Pmty_extensiona->leta=self#extensionctxainPmty_extensiona|Pmty_aliasa->leta=self#longident_locctxainPmty_aliasamethodfunctor_parameter:'ctx->functor_parameter->functor_parameter=functxx->matchxwith|Unit->Unit|Named(a,b)->leta=self#loc(self#optionself#string)ctxainletb=self#module_typectxbinNamed(a,b)methodsignature:'ctx->signature->signature=self#listself#signature_itemmethodsignature_item:'ctx->signature_item->signature_item=functx{psig_desc;psig_loc}->letpsig_desc=self#signature_item_descctxpsig_descinletpsig_loc=self#locationctxpsig_locin{psig_desc;psig_loc}methodsignature_item_desc:'ctx->signature_item_desc->signature_item_desc=functxx->matchxwith|Psig_valuea->leta=self#value_descriptionctxainPsig_valuea|Psig_type(a,b)->leta=self#rec_flagctxainletb=self#listself#type_declarationctxbinPsig_type(a,b)|Psig_typesubsta->leta=self#listself#type_declarationctxainPsig_typesubsta|Psig_typexta->leta=self#type_extensionctxainPsig_typexta|Psig_exceptiona->leta=self#type_exceptionctxainPsig_exceptiona|Psig_modulea->leta=self#module_declarationctxainPsig_modulea|Psig_modsubsta->leta=self#module_substitutionctxainPsig_modsubsta|Psig_recmodulea->leta=self#listself#module_declarationctxainPsig_recmodulea|Psig_modtypea->leta=self#module_type_declarationctxainPsig_modtypea|Psig_modtypesubsta->leta=self#module_type_declarationctxainPsig_modtypesubsta|Psig_opena->leta=self#open_descriptionctxainPsig_opena|Psig_includea->leta=self#include_descriptionctxainPsig_includea|Psig_classa->leta=self#listself#class_descriptionctxainPsig_classa|Psig_class_typea->leta=self#listself#class_type_declarationctxainPsig_class_typea|Psig_attributea->leta=self#attributectxainPsig_attributea|Psig_extension(a,b)->leta=self#extensionctxainletb=self#attributesctxbinPsig_extension(a,b)methodmodule_declaration:'ctx->module_declaration->module_declaration=functx{pmd_name;pmd_type;pmd_attributes;pmd_loc}->letpmd_name=self#loc(self#optionself#string)ctxpmd_nameinletpmd_type=self#module_typectxpmd_typeinletpmd_attributes=self#attributesctxpmd_attributesinletpmd_loc=self#locationctxpmd_locin{pmd_name;pmd_type;pmd_attributes;pmd_loc}methodmodule_substitution:'ctx->module_substitution->module_substitution=functx{pms_name;pms_manifest;pms_attributes;pms_loc}->letpms_name=self#locself#stringctxpms_nameinletpms_manifest=self#longident_locctxpms_manifestinletpms_attributes=self#attributesctxpms_attributesinletpms_loc=self#locationctxpms_locin{pms_name;pms_manifest;pms_attributes;pms_loc}methodmodule_type_declaration:'ctx->module_type_declaration->module_type_declaration=functx{pmtd_name;pmtd_type;pmtd_attributes;pmtd_loc}->letpmtd_name=self#locself#stringctxpmtd_nameinletpmtd_type=self#optionself#module_typectxpmtd_typeinletpmtd_attributes=self#attributesctxpmtd_attributesinletpmtd_loc=self#locationctxpmtd_locin{pmtd_name;pmtd_type;pmtd_attributes;pmtd_loc}methodopen_infos:'a.('ctx->'a->'a)->'ctx->'aopen_infos->'aopen_infos=fun_actx{popen_expr;popen_override;popen_loc;popen_attributes}->letpopen_expr=_actxpopen_exprinletpopen_override=self#override_flagctxpopen_overrideinletpopen_loc=self#locationctxpopen_locinletpopen_attributes=self#attributesctxpopen_attributesin{popen_expr;popen_override;popen_loc;popen_attributes}methodopen_description:'ctx->open_description->open_description=self#open_infosself#longident_locmethodopen_declaration:'ctx->open_declaration->open_declaration=self#open_infosself#module_exprmethodinclude_infos:'a.('ctx->'a->'a)->'ctx->'ainclude_infos->'ainclude_infos=fun_actx{pincl_mod;pincl_loc;pincl_attributes}->letpincl_mod=_actxpincl_modinletpincl_loc=self#locationctxpincl_locinletpincl_attributes=self#attributesctxpincl_attributesin{pincl_mod;pincl_loc;pincl_attributes}methodinclude_description:'ctx->include_description->include_description=self#include_infosself#module_typemethodinclude_declaration:'ctx->include_declaration->include_declaration=self#include_infosself#module_exprmethodwith_constraint:'ctx->with_constraint->with_constraint=functxx->matchxwith|Pwith_type(a,b)->leta=self#longident_locctxainletb=self#type_declarationctxbinPwith_type(a,b)|Pwith_module(a,b)->leta=self#longident_locctxainletb=self#longident_locctxbinPwith_module(a,b)|Pwith_modtype(a,b)->leta=self#longident_locctxainletb=self#module_typectxbinPwith_modtype(a,b)|Pwith_modtypesubst(a,b)->leta=self#longident_locctxainletb=self#module_typectxbinPwith_modtypesubst(a,b)|Pwith_typesubst(a,b)->leta=self#longident_locctxainletb=self#type_declarationctxbinPwith_typesubst(a,b)|Pwith_modsubst(a,b)->leta=self#longident_locctxainletb=self#longident_locctxbinPwith_modsubst(a,b)methodmodule_expr:'ctx->module_expr->module_expr=functx{pmod_desc;pmod_loc;pmod_attributes}->letpmod_desc=self#module_expr_descctxpmod_descinletpmod_loc=self#locationctxpmod_locinletpmod_attributes=self#attributesctxpmod_attributesin{pmod_desc;pmod_loc;pmod_attributes}methodmodule_expr_desc:'ctx->module_expr_desc->module_expr_desc=functxx->matchxwith|Pmod_identa->leta=self#longident_locctxainPmod_identa|Pmod_structurea->leta=self#structurectxainPmod_structurea|Pmod_functor(a,b)->leta=self#functor_parameterctxainletb=self#module_exprctxbinPmod_functor(a,b)|Pmod_apply(a,b)->leta=self#module_exprctxainletb=self#module_exprctxbinPmod_apply(a,b)|Pmod_constraint(a,b)->leta=self#module_exprctxainletb=self#module_typectxbinPmod_constraint(a,b)|Pmod_unpacka->leta=self#expressionctxainPmod_unpacka|Pmod_extensiona->leta=self#extensionctxainPmod_extensionamethodstructure:'ctx->structure->structure=self#listself#structure_itemmethodstructure_item:'ctx->structure_item->structure_item=functx{pstr_desc;pstr_loc}->letpstr_desc=self#structure_item_descctxpstr_descinletpstr_loc=self#locationctxpstr_locin{pstr_desc;pstr_loc}methodstructure_item_desc:'ctx->structure_item_desc->structure_item_desc=functxx->matchxwith|Pstr_eval(a,b)->leta=self#expressionctxainletb=self#attributesctxbinPstr_eval(a,b)|Pstr_value(a,b)->leta=self#rec_flagctxainletb=self#listself#value_bindingctxbinPstr_value(a,b)|Pstr_primitivea->leta=self#value_descriptionctxainPstr_primitivea|Pstr_type(a,b)->leta=self#rec_flagctxainletb=self#listself#type_declarationctxbinPstr_type(a,b)|Pstr_typexta->leta=self#type_extensionctxainPstr_typexta|Pstr_exceptiona->leta=self#type_exceptionctxainPstr_exceptiona|Pstr_modulea->leta=self#module_bindingctxainPstr_modulea|Pstr_recmodulea->leta=self#listself#module_bindingctxainPstr_recmodulea|Pstr_modtypea->leta=self#module_type_declarationctxainPstr_modtypea|Pstr_opena->leta=self#open_declarationctxainPstr_opena|Pstr_classa->leta=self#listself#class_declarationctxainPstr_classa|Pstr_class_typea->leta=self#listself#class_type_declarationctxainPstr_class_typea|Pstr_includea->leta=self#include_declarationctxainPstr_includea|Pstr_attributea->leta=self#attributectxainPstr_attributea|Pstr_extension(a,b)->leta=self#extensionctxainletb=self#attributesctxbinPstr_extension(a,b)methodvalue_binding:'ctx->value_binding->value_binding=functx{pvb_pat;pvb_expr;pvb_attributes;pvb_loc}->letpvb_pat=self#patternctxpvb_patinletpvb_expr=self#expressionctxpvb_exprinletpvb_attributes=self#attributesctxpvb_attributesinletpvb_loc=self#locationctxpvb_locin{pvb_pat;pvb_expr;pvb_attributes;pvb_loc}methodmodule_binding:'ctx->module_binding->module_binding=functx{pmb_name;pmb_expr;pmb_attributes;pmb_loc}->letpmb_name=self#loc(self#optionself#string)ctxpmb_nameinletpmb_expr=self#module_exprctxpmb_exprinletpmb_attributes=self#attributesctxpmb_attributesinletpmb_loc=self#locationctxpmb_locin{pmb_name;pmb_expr;pmb_attributes;pmb_loc}methodtoplevel_phrase:'ctx->toplevel_phrase->toplevel_phrase=functxx->matchxwith|Ptop_defa->leta=self#structurectxainPtop_defa|Ptop_dira->leta=self#toplevel_directivectxainPtop_diramethodtoplevel_directive:'ctx->toplevel_directive->toplevel_directive=functx{pdir_name;pdir_arg;pdir_loc}->letpdir_name=self#locself#stringctxpdir_nameinletpdir_arg=self#optionself#directive_argumentctxpdir_arginletpdir_loc=self#locationctxpdir_locin{pdir_name;pdir_arg;pdir_loc}methoddirective_argument:'ctx->directive_argument->directive_argument=functx{pdira_desc;pdira_loc}->letpdira_desc=self#directive_argument_descctxpdira_descinletpdira_loc=self#locationctxpdira_locin{pdira_desc;pdira_loc}methoddirective_argument_desc:'ctx->directive_argument_desc->directive_argument_desc=functxx->matchxwith|Pdir_stringa->leta=self#stringctxainPdir_stringa|Pdir_int(a,b)->leta=self#stringctxainletb=self#optionself#charctxbinPdir_int(a,b)|Pdir_identa->leta=self#longidentctxainPdir_identa|Pdir_boola->leta=self#boolctxainPdir_boolamethodcases:'ctx->cases->cases=self#listself#caseendclassvirtual['res]lift=object(self)methodvirtualrecord:(string*'res)list->'resmethodvirtualconstr:string->'reslist->'resmethodvirtualtuple:'reslist->'resmethodvirtualbool:bool->'resmethodvirtualchar:char->'resmethodvirtualint:int->'resmethodvirtuallist:'a.('a->'res)->'alist->'resmethodvirtualoption:'a.('a->'res)->'aoption->'resmethodvirtualstring:string->'resmethodposition:position->'res=fun{pos_fname;pos_lnum;pos_bol;pos_cnum}->letpos_fname=self#stringpos_fnameinletpos_lnum=self#intpos_lnuminletpos_bol=self#intpos_bolinletpos_cnum=self#intpos_cnuminself#record[("pos_fname",pos_fname);("pos_lnum",pos_lnum);("pos_bol",pos_bol);("pos_cnum",pos_cnum);]methodlocation:location->'res=fun{loc_start;loc_end;loc_ghost}->letloc_start=self#positionloc_startinletloc_end=self#positionloc_endinletloc_ghost=self#boolloc_ghostinself#record[("loc_start",loc_start);("loc_end",loc_end);("loc_ghost",loc_ghost);]methodlocation_stack:location_stack->'res=self#listself#locationmethodloc:'a.('a->'res)->'aloc->'res=fun_a{txt;loc}->lettxt=_atxtinletloc=self#locationlocinself#record[("txt",txt);("loc",loc)]methodlongident:longident->'res=funx->matchxwith|Lidenta->leta=self#stringainself#constr"Lident"[a]|Ldot(a,b)->leta=self#longidentainletb=self#stringbinself#constr"Ldot"[a;b]|Lapply(a,b)->leta=self#longidentainletb=self#longidentbinself#constr"Lapply"[a;b]methodlongident_loc:longident_loc->'res=self#locself#longidentmethodrec_flag:rec_flag->'res=funx->matchxwith|Nonrecursive->self#constr"Nonrecursive"[]|Recursive->self#constr"Recursive"[]methoddirection_flag:direction_flag->'res=funx->matchxwith|Upto->self#constr"Upto"[]|Downto->self#constr"Downto"[]methodprivate_flag:private_flag->'res=funx->matchxwith|Private->self#constr"Private"[]|Public->self#constr"Public"[]methodmutable_flag:mutable_flag->'res=funx->matchxwith|Immutable->self#constr"Immutable"[]|Mutable->self#constr"Mutable"[]methodvirtual_flag:virtual_flag->'res=funx->matchxwith|Virtual->self#constr"Virtual"[]|Concrete->self#constr"Concrete"[]methodoverride_flag:override_flag->'res=funx->matchxwith|Override->self#constr"Override"[]|Fresh->self#constr"Fresh"[]methodclosed_flag:closed_flag->'res=funx->matchxwith|Closed->self#constr"Closed"[]|Open->self#constr"Open"[]methodlabel:label->'res=self#stringmethodarg_label:arg_label->'res=funx->matchxwith|Nolabel->self#constr"Nolabel"[]|Labelleda->leta=self#stringainself#constr"Labelled"[a]|Optionala->leta=self#stringainself#constr"Optional"[a]methodvariance:variance->'res=funx->matchxwith|Covariant->self#constr"Covariant"[]|Contravariant->self#constr"Contravariant"[]|NoVariance->self#constr"NoVariance"[]methodinjectivity:injectivity->'res=funx->matchxwith|Injective->self#constr"Injective"[]|NoInjectivity->self#constr"NoInjectivity"[]methodconstant:constant->'res=funx->matchxwith|Pconst_integer(a,b)->leta=self#stringainletb=self#optionself#charbinself#constr"Pconst_integer"[a;b]|Pconst_chara->leta=self#charainself#constr"Pconst_char"[a]|Pconst_string(a,b,c)->leta=self#stringainletb=self#locationbinletc=self#optionself#stringcinself#constr"Pconst_string"[a;b;c]|Pconst_float(a,b)->leta=self#stringainletb=self#optionself#charbinself#constr"Pconst_float"[a;b]methodattribute:attribute->'res=fun{attr_name;attr_payload;attr_loc}->letattr_name=self#locself#stringattr_nameinletattr_payload=self#payloadattr_payloadinletattr_loc=self#locationattr_locinself#record[("attr_name",attr_name);("attr_payload",attr_payload);("attr_loc",attr_loc);]methodextension:extension->'res=fun(a,b)->leta=self#locself#stringainletb=self#payloadbinself#tuple[a;b]methodattributes:attributes->'res=self#listself#attributemethodpayload:payload->'res=funx->matchxwith|PStra->leta=self#structureainself#constr"PStr"[a]|PSiga->leta=self#signatureainself#constr"PSig"[a]|PTypa->leta=self#core_typeainself#constr"PTyp"[a]|PPat(a,b)->leta=self#patternainletb=self#optionself#expressionbinself#constr"PPat"[a;b]methodcore_type:core_type->'res=fun{ptyp_desc;ptyp_loc;ptyp_loc_stack;ptyp_attributes}->letptyp_desc=self#core_type_descptyp_descinletptyp_loc=self#locationptyp_locinletptyp_loc_stack=self#location_stackptyp_loc_stackinletptyp_attributes=self#attributesptyp_attributesinself#record[("ptyp_desc",ptyp_desc);("ptyp_loc",ptyp_loc);("ptyp_loc_stack",ptyp_loc_stack);("ptyp_attributes",ptyp_attributes);]methodcore_type_desc:core_type_desc->'res=funx->matchxwith|Ptyp_any->self#constr"Ptyp_any"[]|Ptyp_vara->leta=self#stringainself#constr"Ptyp_var"[a]|Ptyp_arrow(a,b,c)->leta=self#arg_labelainletb=self#core_typebinletc=self#core_typecinself#constr"Ptyp_arrow"[a;b;c]|Ptyp_tuplea->leta=self#listself#core_typeainself#constr"Ptyp_tuple"[a]|Ptyp_constr(a,b)->leta=self#longident_locainletb=self#listself#core_typebinself#constr"Ptyp_constr"[a;b]|Ptyp_object(a,b)->leta=self#listself#object_fieldainletb=self#closed_flagbinself#constr"Ptyp_object"[a;b]|Ptyp_class(a,b)->leta=self#longident_locainletb=self#listself#core_typebinself#constr"Ptyp_class"[a;b]|Ptyp_alias(a,b)->leta=self#core_typeainletb=self#stringbinself#constr"Ptyp_alias"[a;b]|Ptyp_variant(a,b,c)->leta=self#listself#row_fieldainletb=self#closed_flagbinletc=self#option(self#listself#label)cinself#constr"Ptyp_variant"[a;b;c]|Ptyp_poly(a,b)->leta=self#list(self#locself#string)ainletb=self#core_typebinself#constr"Ptyp_poly"[a;b]|Ptyp_packagea->leta=self#package_typeainself#constr"Ptyp_package"[a]|Ptyp_extensiona->leta=self#extensionainself#constr"Ptyp_extension"[a]methodpackage_type:package_type->'res=fun(a,b)->leta=self#longident_locainletb=self#list(fun(a,b)->leta=self#longident_locainletb=self#core_typebinself#tuple[a;b])binself#tuple[a;b]methodrow_field:row_field->'res=fun{prf_desc;prf_loc;prf_attributes}->letprf_desc=self#row_field_descprf_descinletprf_loc=self#locationprf_locinletprf_attributes=self#attributesprf_attributesinself#record[("prf_desc",prf_desc);("prf_loc",prf_loc);("prf_attributes",prf_attributes);]methodrow_field_desc:row_field_desc->'res=funx->matchxwith|Rtag(a,b,c)->leta=self#locself#labelainletb=self#boolbinletc=self#listself#core_typecinself#constr"Rtag"[a;b;c]|Rinherita->leta=self#core_typeainself#constr"Rinherit"[a]methodobject_field:object_field->'res=fun{pof_desc;pof_loc;pof_attributes}->letpof_desc=self#object_field_descpof_descinletpof_loc=self#locationpof_locinletpof_attributes=self#attributespof_attributesinself#record[("pof_desc",pof_desc);("pof_loc",pof_loc);("pof_attributes",pof_attributes);]methodobject_field_desc:object_field_desc->'res=funx->matchxwith|Otag(a,b)->leta=self#locself#labelainletb=self#core_typebinself#constr"Otag"[a;b]|Oinherita->leta=self#core_typeainself#constr"Oinherit"[a]methodpattern:pattern->'res=fun{ppat_desc;ppat_loc;ppat_loc_stack;ppat_attributes}->letppat_desc=self#pattern_descppat_descinletppat_loc=self#locationppat_locinletppat_loc_stack=self#location_stackppat_loc_stackinletppat_attributes=self#attributesppat_attributesinself#record[("ppat_desc",ppat_desc);("ppat_loc",ppat_loc);("ppat_loc_stack",ppat_loc_stack);("ppat_attributes",ppat_attributes);]methodpattern_desc:pattern_desc->'res=funx->matchxwith|Ppat_any->self#constr"Ppat_any"[]|Ppat_vara->leta=self#locself#stringainself#constr"Ppat_var"[a]|Ppat_alias(a,b)->leta=self#patternainletb=self#locself#stringbinself#constr"Ppat_alias"[a;b]|Ppat_constanta->leta=self#constantainself#constr"Ppat_constant"[a]|Ppat_interval(a,b)->leta=self#constantainletb=self#constantbinself#constr"Ppat_interval"[a;b]|Ppat_tuplea->leta=self#listself#patternainself#constr"Ppat_tuple"[a]|Ppat_construct(a,b)->leta=self#longident_locainletb=self#option(fun(a,b)->leta=self#list(self#locself#string)ainletb=self#patternbinself#tuple[a;b])binself#constr"Ppat_construct"[a;b]|Ppat_variant(a,b)->leta=self#labelainletb=self#optionself#patternbinself#constr"Ppat_variant"[a;b]|Ppat_record(a,b)->leta=self#list(fun(a,b)->leta=self#longident_locainletb=self#patternbinself#tuple[a;b])ainletb=self#closed_flagbinself#constr"Ppat_record"[a;b]|Ppat_arraya->leta=self#listself#patternainself#constr"Ppat_array"[a]|Ppat_or(a,b)->leta=self#patternainletb=self#patternbinself#constr"Ppat_or"[a;b]|Ppat_constraint(a,b)->leta=self#patternainletb=self#core_typebinself#constr"Ppat_constraint"[a;b]|Ppat_typea->leta=self#longident_locainself#constr"Ppat_type"[a]|Ppat_lazya->leta=self#patternainself#constr"Ppat_lazy"[a]|Ppat_unpacka->leta=self#loc(self#optionself#string)ainself#constr"Ppat_unpack"[a]|Ppat_exceptiona->leta=self#patternainself#constr"Ppat_exception"[a]|Ppat_extensiona->leta=self#extensionainself#constr"Ppat_extension"[a]|Ppat_open(a,b)->leta=self#longident_locainletb=self#patternbinself#constr"Ppat_open"[a;b]methodexpression:expression->'res=fun{pexp_desc;pexp_loc;pexp_loc_stack;pexp_attributes}->letpexp_desc=self#expression_descpexp_descinletpexp_loc=self#locationpexp_locinletpexp_loc_stack=self#location_stackpexp_loc_stackinletpexp_attributes=self#attributespexp_attributesinself#record[("pexp_desc",pexp_desc);("pexp_loc",pexp_loc);("pexp_loc_stack",pexp_loc_stack);("pexp_attributes",pexp_attributes);]methodexpression_desc:expression_desc->'res=funx->matchxwith|Pexp_identa->leta=self#longident_locainself#constr"Pexp_ident"[a]|Pexp_constanta->leta=self#constantainself#constr"Pexp_constant"[a]|Pexp_let(a,b,c)->leta=self#rec_flagainletb=self#listself#value_bindingbinletc=self#expressioncinself#constr"Pexp_let"[a;b;c]|Pexp_functiona->leta=self#casesainself#constr"Pexp_function"[a]|Pexp_fun(a,b,c,d)->leta=self#arg_labelainletb=self#optionself#expressionbinletc=self#patterncinletd=self#expressiondinself#constr"Pexp_fun"[a;b;c;d]|Pexp_apply(a,b)->leta=self#expressionainletb=self#list(fun(a,b)->leta=self#arg_labelainletb=self#expressionbinself#tuple[a;b])binself#constr"Pexp_apply"[a;b]|Pexp_match(a,b)->leta=self#expressionainletb=self#casesbinself#constr"Pexp_match"[a;b]|Pexp_try(a,b)->leta=self#expressionainletb=self#casesbinself#constr"Pexp_try"[a;b]|Pexp_tuplea->leta=self#listself#expressionainself#constr"Pexp_tuple"[a]|Pexp_construct(a,b)->leta=self#longident_locainletb=self#optionself#expressionbinself#constr"Pexp_construct"[a;b]|Pexp_variant(a,b)->leta=self#labelainletb=self#optionself#expressionbinself#constr"Pexp_variant"[a;b]|Pexp_record(a,b)->leta=self#list(fun(a,b)->leta=self#longident_locainletb=self#expressionbinself#tuple[a;b])ainletb=self#optionself#expressionbinself#constr"Pexp_record"[a;b]|Pexp_field(a,b)->leta=self#expressionainletb=self#longident_locbinself#constr"Pexp_field"[a;b]|Pexp_setfield(a,b,c)->leta=self#expressionainletb=self#longident_locbinletc=self#expressioncinself#constr"Pexp_setfield"[a;b;c]|Pexp_arraya->leta=self#listself#expressionainself#constr"Pexp_array"[a]|Pexp_ifthenelse(a,b,c)->leta=self#expressionainletb=self#expressionbinletc=self#optionself#expressioncinself#constr"Pexp_ifthenelse"[a;b;c]|Pexp_sequence(a,b)->leta=self#expressionainletb=self#expressionbinself#constr"Pexp_sequence"[a;b]|Pexp_while(a,b)->leta=self#expressionainletb=self#expressionbinself#constr"Pexp_while"[a;b]|Pexp_for(a,b,c,d,e)->leta=self#patternainletb=self#expressionbinletc=self#expressioncinletd=self#direction_flagdinlete=self#expressioneinself#constr"Pexp_for"[a;b;c;d;e]|Pexp_constraint(a,b)->leta=self#expressionainletb=self#core_typebinself#constr"Pexp_constraint"[a;b]|Pexp_coerce(a,b,c)->leta=self#expressionainletb=self#optionself#core_typebinletc=self#core_typecinself#constr"Pexp_coerce"[a;b;c]|Pexp_send(a,b)->leta=self#expressionainletb=self#locself#labelbinself#constr"Pexp_send"[a;b]|Pexp_newa->leta=self#longident_locainself#constr"Pexp_new"[a]|Pexp_setinstvar(a,b)->leta=self#locself#labelainletb=self#expressionbinself#constr"Pexp_setinstvar"[a;b]|Pexp_overridea->leta=self#list(fun(a,b)->leta=self#locself#labelainletb=self#expressionbinself#tuple[a;b])ainself#constr"Pexp_override"[a]|Pexp_letmodule(a,b,c)->leta=self#loc(self#optionself#string)ainletb=self#module_exprbinletc=self#expressioncinself#constr"Pexp_letmodule"[a;b;c]|Pexp_letexception(a,b)->leta=self#extension_constructorainletb=self#expressionbinself#constr"Pexp_letexception"[a;b]|Pexp_asserta->leta=self#expressionainself#constr"Pexp_assert"[a]|Pexp_lazya->leta=self#expressionainself#constr"Pexp_lazy"[a]|Pexp_poly(a,b)->leta=self#expressionainletb=self#optionself#core_typebinself#constr"Pexp_poly"[a;b]|Pexp_objecta->leta=self#class_structureainself#constr"Pexp_object"[a]|Pexp_newtype(a,b)->leta=self#locself#stringainletb=self#expressionbinself#constr"Pexp_newtype"[a;b]|Pexp_packa->leta=self#module_exprainself#constr"Pexp_pack"[a]|Pexp_open(a,b)->leta=self#open_declarationainletb=self#expressionbinself#constr"Pexp_open"[a;b]|Pexp_letopa->leta=self#letopainself#constr"Pexp_letop"[a]|Pexp_extensiona->leta=self#extensionainself#constr"Pexp_extension"[a]|Pexp_unreachable->self#constr"Pexp_unreachable"[]methodcase:case->'res=fun{pc_lhs;pc_guard;pc_rhs}->letpc_lhs=self#patternpc_lhsinletpc_guard=self#optionself#expressionpc_guardinletpc_rhs=self#expressionpc_rhsinself#record[("pc_lhs",pc_lhs);("pc_guard",pc_guard);("pc_rhs",pc_rhs)]methodletop:letop->'res=fun{let_;ands;body}->letlet_=self#binding_oplet_inletands=self#listself#binding_opandsinletbody=self#expressionbodyinself#record[("let_",let_);("ands",ands);("body",body)]methodbinding_op:binding_op->'res=fun{pbop_op;pbop_pat;pbop_exp;pbop_loc}->letpbop_op=self#locself#stringpbop_opinletpbop_pat=self#patternpbop_patinletpbop_exp=self#expressionpbop_expinletpbop_loc=self#locationpbop_locinself#record[("pbop_op",pbop_op);("pbop_pat",pbop_pat);("pbop_exp",pbop_exp);("pbop_loc",pbop_loc);]methodvalue_description:value_description->'res=fun{pval_name;pval_type;pval_prim;pval_attributes;pval_loc}->letpval_name=self#locself#stringpval_nameinletpval_type=self#core_typepval_typeinletpval_prim=self#listself#stringpval_priminletpval_attributes=self#attributespval_attributesinletpval_loc=self#locationpval_locinself#record[("pval_name",pval_name);("pval_type",pval_type);("pval_prim",pval_prim);("pval_attributes",pval_attributes);("pval_loc",pval_loc);]methodtype_declaration:type_declaration->'res=fun{ptype_name;ptype_params;ptype_cstrs;ptype_kind;ptype_private;ptype_manifest;ptype_attributes;ptype_loc;}->letptype_name=self#locself#stringptype_nameinletptype_params=self#list(fun(a,b)->leta=self#core_typeainletb=(fun(a,b)->leta=self#varianceainletb=self#injectivitybinself#tuple[a;b])binself#tuple[a;b])ptype_paramsinletptype_cstrs=self#list(fun(a,b,c)->leta=self#core_typeainletb=self#core_typebinletc=self#locationcinself#tuple[a;b;c])ptype_cstrsinletptype_kind=self#type_kindptype_kindinletptype_private=self#private_flagptype_privateinletptype_manifest=self#optionself#core_typeptype_manifestinletptype_attributes=self#attributesptype_attributesinletptype_loc=self#locationptype_locinself#record[("ptype_name",ptype_name);("ptype_params",ptype_params);("ptype_cstrs",ptype_cstrs);("ptype_kind",ptype_kind);("ptype_private",ptype_private);("ptype_manifest",ptype_manifest);("ptype_attributes",ptype_attributes);("ptype_loc",ptype_loc);]methodtype_kind:type_kind->'res=funx->matchxwith|Ptype_abstract->self#constr"Ptype_abstract"[]|Ptype_varianta->leta=self#listself#constructor_declarationainself#constr"Ptype_variant"[a]|Ptype_recorda->leta=self#listself#label_declarationainself#constr"Ptype_record"[a]|Ptype_open->self#constr"Ptype_open"[]methodlabel_declaration:label_declaration->'res=fun{pld_name;pld_mutable;pld_type;pld_loc;pld_attributes}->letpld_name=self#locself#stringpld_nameinletpld_mutable=self#mutable_flagpld_mutableinletpld_type=self#core_typepld_typeinletpld_loc=self#locationpld_locinletpld_attributes=self#attributespld_attributesinself#record[("pld_name",pld_name);("pld_mutable",pld_mutable);("pld_type",pld_type);("pld_loc",pld_loc);("pld_attributes",pld_attributes);]methodconstructor_declaration:constructor_declaration->'res=fun{pcd_name;pcd_vars;pcd_args;pcd_res;pcd_loc;pcd_attributes}->letpcd_name=self#locself#stringpcd_nameinletpcd_vars=self#list(self#locself#string)pcd_varsinletpcd_args=self#constructor_argumentspcd_argsinletpcd_res=self#optionself#core_typepcd_resinletpcd_loc=self#locationpcd_locinletpcd_attributes=self#attributespcd_attributesinself#record[("pcd_name",pcd_name);("pcd_vars",pcd_vars);("pcd_args",pcd_args);("pcd_res",pcd_res);("pcd_loc",pcd_loc);("pcd_attributes",pcd_attributes);]methodconstructor_arguments:constructor_arguments->'res=funx->matchxwith|Pcstr_tuplea->leta=self#listself#core_typeainself#constr"Pcstr_tuple"[a]|Pcstr_recorda->leta=self#listself#label_declarationainself#constr"Pcstr_record"[a]methodtype_extension:type_extension->'res=fun{ptyext_path;ptyext_params;ptyext_constructors;ptyext_private;ptyext_loc;ptyext_attributes;}->letptyext_path=self#longident_locptyext_pathinletptyext_params=self#list(fun(a,b)->leta=self#core_typeainletb=(fun(a,b)->leta=self#varianceainletb=self#injectivitybinself#tuple[a;b])binself#tuple[a;b])ptyext_paramsinletptyext_constructors=self#listself#extension_constructorptyext_constructorsinletptyext_private=self#private_flagptyext_privateinletptyext_loc=self#locationptyext_locinletptyext_attributes=self#attributesptyext_attributesinself#record[("ptyext_path",ptyext_path);("ptyext_params",ptyext_params);("ptyext_constructors",ptyext_constructors);("ptyext_private",ptyext_private);("ptyext_loc",ptyext_loc);("ptyext_attributes",ptyext_attributes);]methodextension_constructor:extension_constructor->'res=fun{pext_name;pext_kind;pext_loc;pext_attributes}->letpext_name=self#locself#stringpext_nameinletpext_kind=self#extension_constructor_kindpext_kindinletpext_loc=self#locationpext_locinletpext_attributes=self#attributespext_attributesinself#record[("pext_name",pext_name);("pext_kind",pext_kind);("pext_loc",pext_loc);("pext_attributes",pext_attributes);]methodtype_exception:type_exception->'res=fun{ptyexn_constructor;ptyexn_loc;ptyexn_attributes}->letptyexn_constructor=self#extension_constructorptyexn_constructorinletptyexn_loc=self#locationptyexn_locinletptyexn_attributes=self#attributesptyexn_attributesinself#record[("ptyexn_constructor",ptyexn_constructor);("ptyexn_loc",ptyexn_loc);("ptyexn_attributes",ptyexn_attributes);]methodextension_constructor_kind:extension_constructor_kind->'res=funx->matchxwith|Pext_decl(a,b,c)->leta=self#list(self#locself#string)ainletb=self#constructor_argumentsbinletc=self#optionself#core_typecinself#constr"Pext_decl"[a;b;c]|Pext_rebinda->leta=self#longident_locainself#constr"Pext_rebind"[a]methodclass_type:class_type->'res=fun{pcty_desc;pcty_loc;pcty_attributes}->letpcty_desc=self#class_type_descpcty_descinletpcty_loc=self#locationpcty_locinletpcty_attributes=self#attributespcty_attributesinself#record[("pcty_desc",pcty_desc);("pcty_loc",pcty_loc);("pcty_attributes",pcty_attributes);]methodclass_type_desc:class_type_desc->'res=funx->matchxwith|Pcty_constr(a,b)->leta=self#longident_locainletb=self#listself#core_typebinself#constr"Pcty_constr"[a;b]|Pcty_signaturea->leta=self#class_signatureainself#constr"Pcty_signature"[a]|Pcty_arrow(a,b,c)->leta=self#arg_labelainletb=self#core_typebinletc=self#class_typecinself#constr"Pcty_arrow"[a;b;c]|Pcty_extensiona->leta=self#extensionainself#constr"Pcty_extension"[a]|Pcty_open(a,b)->leta=self#open_descriptionainletb=self#class_typebinself#constr"Pcty_open"[a;b]methodclass_signature:class_signature->'res=fun{pcsig_self;pcsig_fields}->letpcsig_self=self#core_typepcsig_selfinletpcsig_fields=self#listself#class_type_fieldpcsig_fieldsinself#record[("pcsig_self",pcsig_self);("pcsig_fields",pcsig_fields)]methodclass_type_field:class_type_field->'res=fun{pctf_desc;pctf_loc;pctf_attributes}->letpctf_desc=self#class_type_field_descpctf_descinletpctf_loc=self#locationpctf_locinletpctf_attributes=self#attributespctf_attributesinself#record[("pctf_desc",pctf_desc);("pctf_loc",pctf_loc);("pctf_attributes",pctf_attributes);]methodclass_type_field_desc:class_type_field_desc->'res=funx->matchxwith|Pctf_inherita->leta=self#class_typeainself#constr"Pctf_inherit"[a]|Pctf_vala->leta=(fun(a,b,c,d)->leta=self#locself#labelainletb=self#mutable_flagbinletc=self#virtual_flagcinletd=self#core_typedinself#tuple[a;b;c;d])ainself#constr"Pctf_val"[a]|Pctf_methoda->leta=(fun(a,b,c,d)->leta=self#locself#labelainletb=self#private_flagbinletc=self#virtual_flagcinletd=self#core_typedinself#tuple[a;b;c;d])ainself#constr"Pctf_method"[a]|Pctf_constrainta->leta=(fun(a,b)->leta=self#core_typeainletb=self#core_typebinself#tuple[a;b])ainself#constr"Pctf_constraint"[a]|Pctf_attributea->leta=self#attributeainself#constr"Pctf_attribute"[a]|Pctf_extensiona->leta=self#extensionainself#constr"Pctf_extension"[a]methodclass_infos:'a.('a->'res)->'aclass_infos->'res=fun_a{pci_virt;pci_params;pci_name;pci_expr;pci_loc;pci_attributes}->letpci_virt=self#virtual_flagpci_virtinletpci_params=self#list(fun(a,b)->leta=self#core_typeainletb=(fun(a,b)->leta=self#varianceainletb=self#injectivitybinself#tuple[a;b])binself#tuple[a;b])pci_paramsinletpci_name=self#locself#stringpci_nameinletpci_expr=_apci_exprinletpci_loc=self#locationpci_locinletpci_attributes=self#attributespci_attributesinself#record[("pci_virt",pci_virt);("pci_params",pci_params);("pci_name",pci_name);("pci_expr",pci_expr);("pci_loc",pci_loc);("pci_attributes",pci_attributes);]methodclass_description:class_description->'res=self#class_infosself#class_typemethodclass_type_declaration:class_type_declaration->'res=self#class_infosself#class_typemethodclass_expr:class_expr->'res=fun{pcl_desc;pcl_loc;pcl_attributes}->letpcl_desc=self#class_expr_descpcl_descinletpcl_loc=self#locationpcl_locinletpcl_attributes=self#attributespcl_attributesinself#record[("pcl_desc",pcl_desc);("pcl_loc",pcl_loc);("pcl_attributes",pcl_attributes);]methodclass_expr_desc:class_expr_desc->'res=funx->matchxwith|Pcl_constr(a,b)->leta=self#longident_locainletb=self#listself#core_typebinself#constr"Pcl_constr"[a;b]|Pcl_structurea->leta=self#class_structureainself#constr"Pcl_structure"[a]|Pcl_fun(a,b,c,d)->leta=self#arg_labelainletb=self#optionself#expressionbinletc=self#patterncinletd=self#class_exprdinself#constr"Pcl_fun"[a;b;c;d]|Pcl_apply(a,b)->leta=self#class_exprainletb=self#list(fun(a,b)->leta=self#arg_labelainletb=self#expressionbinself#tuple[a;b])binself#constr"Pcl_apply"[a;b]|Pcl_let(a,b,c)->leta=self#rec_flagainletb=self#listself#value_bindingbinletc=self#class_exprcinself#constr"Pcl_let"[a;b;c]|Pcl_constraint(a,b)->leta=self#class_exprainletb=self#class_typebinself#constr"Pcl_constraint"[a;b]|Pcl_extensiona->leta=self#extensionainself#constr"Pcl_extension"[a]|Pcl_open(a,b)->leta=self#open_descriptionainletb=self#class_exprbinself#constr"Pcl_open"[a;b]methodclass_structure:class_structure->'res=fun{pcstr_self;pcstr_fields}->letpcstr_self=self#patternpcstr_selfinletpcstr_fields=self#listself#class_fieldpcstr_fieldsinself#record[("pcstr_self",pcstr_self);("pcstr_fields",pcstr_fields)]methodclass_field:class_field->'res=fun{pcf_desc;pcf_loc;pcf_attributes}->letpcf_desc=self#class_field_descpcf_descinletpcf_loc=self#locationpcf_locinletpcf_attributes=self#attributespcf_attributesinself#record[("pcf_desc",pcf_desc);("pcf_loc",pcf_loc);("pcf_attributes",pcf_attributes);]methodclass_field_desc:class_field_desc->'res=funx->matchxwith|Pcf_inherit(a,b,c)->leta=self#override_flagainletb=self#class_exprbinletc=self#option(self#locself#string)cinself#constr"Pcf_inherit"[a;b;c]|Pcf_vala->leta=(fun(a,b,c)->leta=self#locself#labelainletb=self#mutable_flagbinletc=self#class_field_kindcinself#tuple[a;b;c])ainself#constr"Pcf_val"[a]|Pcf_methoda->leta=(fun(a,b,c)->leta=self#locself#labelainletb=self#private_flagbinletc=self#class_field_kindcinself#tuple[a;b;c])ainself#constr"Pcf_method"[a]|Pcf_constrainta->leta=(fun(a,b)->leta=self#core_typeainletb=self#core_typebinself#tuple[a;b])ainself#constr"Pcf_constraint"[a]|Pcf_initializera->leta=self#expressionainself#constr"Pcf_initializer"[a]|Pcf_attributea->leta=self#attributeainself#constr"Pcf_attribute"[a]|Pcf_extensiona->leta=self#extensionainself#constr"Pcf_extension"[a]methodclass_field_kind:class_field_kind->'res=funx->matchxwith|Cfk_virtuala->leta=self#core_typeainself#constr"Cfk_virtual"[a]|Cfk_concrete(a,b)->leta=self#override_flagainletb=self#expressionbinself#constr"Cfk_concrete"[a;b]methodclass_declaration:class_declaration->'res=self#class_infosself#class_exprmethodmodule_type:module_type->'res=fun{pmty_desc;pmty_loc;pmty_attributes}->letpmty_desc=self#module_type_descpmty_descinletpmty_loc=self#locationpmty_locinletpmty_attributes=self#attributespmty_attributesinself#record[("pmty_desc",pmty_desc);("pmty_loc",pmty_loc);("pmty_attributes",pmty_attributes);]methodmodule_type_desc:module_type_desc->'res=funx->matchxwith|Pmty_identa->leta=self#longident_locainself#constr"Pmty_ident"[a]|Pmty_signaturea->leta=self#signatureainself#constr"Pmty_signature"[a]|Pmty_functor(a,b)->leta=self#functor_parameterainletb=self#module_typebinself#constr"Pmty_functor"[a;b]|Pmty_with(a,b)->leta=self#module_typeainletb=self#listself#with_constraintbinself#constr"Pmty_with"[a;b]|Pmty_typeofa->leta=self#module_exprainself#constr"Pmty_typeof"[a]|Pmty_extensiona->leta=self#extensionainself#constr"Pmty_extension"[a]|Pmty_aliasa->leta=self#longident_locainself#constr"Pmty_alias"[a]methodfunctor_parameter:functor_parameter->'res=funx->matchxwith|Unit->self#constr"Unit"[]|Named(a,b)->leta=self#loc(self#optionself#string)ainletb=self#module_typebinself#constr"Named"[a;b]methodsignature:signature->'res=self#listself#signature_itemmethodsignature_item:signature_item->'res=fun{psig_desc;psig_loc}->letpsig_desc=self#signature_item_descpsig_descinletpsig_loc=self#locationpsig_locinself#record[("psig_desc",psig_desc);("psig_loc",psig_loc)]methodsignature_item_desc:signature_item_desc->'res=funx->matchxwith|Psig_valuea->leta=self#value_descriptionainself#constr"Psig_value"[a]|Psig_type(a,b)->leta=self#rec_flagainletb=self#listself#type_declarationbinself#constr"Psig_type"[a;b]|Psig_typesubsta->leta=self#listself#type_declarationainself#constr"Psig_typesubst"[a]|Psig_typexta->leta=self#type_extensionainself#constr"Psig_typext"[a]|Psig_exceptiona->leta=self#type_exceptionainself#constr"Psig_exception"[a]|Psig_modulea->leta=self#module_declarationainself#constr"Psig_module"[a]|Psig_modsubsta->leta=self#module_substitutionainself#constr"Psig_modsubst"[a]|Psig_recmodulea->leta=self#listself#module_declarationainself#constr"Psig_recmodule"[a]|Psig_modtypea->leta=self#module_type_declarationainself#constr"Psig_modtype"[a]|Psig_modtypesubsta->leta=self#module_type_declarationainself#constr"Psig_modtypesubst"[a]|Psig_opena->leta=self#open_descriptionainself#constr"Psig_open"[a]|Psig_includea->leta=self#include_descriptionainself#constr"Psig_include"[a]|Psig_classa->leta=self#listself#class_descriptionainself#constr"Psig_class"[a]|Psig_class_typea->leta=self#listself#class_type_declarationainself#constr"Psig_class_type"[a]|Psig_attributea->leta=self#attributeainself#constr"Psig_attribute"[a]|Psig_extension(a,b)->leta=self#extensionainletb=self#attributesbinself#constr"Psig_extension"[a;b]methodmodule_declaration:module_declaration->'res=fun{pmd_name;pmd_type;pmd_attributes;pmd_loc}->letpmd_name=self#loc(self#optionself#string)pmd_nameinletpmd_type=self#module_typepmd_typeinletpmd_attributes=self#attributespmd_attributesinletpmd_loc=self#locationpmd_locinself#record[("pmd_name",pmd_name);("pmd_type",pmd_type);("pmd_attributes",pmd_attributes);("pmd_loc",pmd_loc);]methodmodule_substitution:module_substitution->'res=fun{pms_name;pms_manifest;pms_attributes;pms_loc}->letpms_name=self#locself#stringpms_nameinletpms_manifest=self#longident_locpms_manifestinletpms_attributes=self#attributespms_attributesinletpms_loc=self#locationpms_locinself#record[("pms_name",pms_name);("pms_manifest",pms_manifest);("pms_attributes",pms_attributes);("pms_loc",pms_loc);]methodmodule_type_declaration:module_type_declaration->'res=fun{pmtd_name;pmtd_type;pmtd_attributes;pmtd_loc}->letpmtd_name=self#locself#stringpmtd_nameinletpmtd_type=self#optionself#module_typepmtd_typeinletpmtd_attributes=self#attributespmtd_attributesinletpmtd_loc=self#locationpmtd_locinself#record[("pmtd_name",pmtd_name);("pmtd_type",pmtd_type);("pmtd_attributes",pmtd_attributes);("pmtd_loc",pmtd_loc);]methodopen_infos:'a.('a->'res)->'aopen_infos->'res=fun_a{popen_expr;popen_override;popen_loc;popen_attributes}->letpopen_expr=_apopen_exprinletpopen_override=self#override_flagpopen_overrideinletpopen_loc=self#locationpopen_locinletpopen_attributes=self#attributespopen_attributesinself#record[("popen_expr",popen_expr);("popen_override",popen_override);("popen_loc",popen_loc);("popen_attributes",popen_attributes);]methodopen_description:open_description->'res=self#open_infosself#longident_locmethodopen_declaration:open_declaration->'res=self#open_infosself#module_exprmethodinclude_infos:'a.('a->'res)->'ainclude_infos->'res=fun_a{pincl_mod;pincl_loc;pincl_attributes}->letpincl_mod=_apincl_modinletpincl_loc=self#locationpincl_locinletpincl_attributes=self#attributespincl_attributesinself#record[("pincl_mod",pincl_mod);("pincl_loc",pincl_loc);("pincl_attributes",pincl_attributes);]methodinclude_description:include_description->'res=self#include_infosself#module_typemethodinclude_declaration:include_declaration->'res=self#include_infosself#module_exprmethodwith_constraint:with_constraint->'res=funx->matchxwith|Pwith_type(a,b)->leta=self#longident_locainletb=self#type_declarationbinself#constr"Pwith_type"[a;b]|Pwith_module(a,b)->leta=self#longident_locainletb=self#longident_locbinself#constr"Pwith_module"[a;b]|Pwith_modtype(a,b)->leta=self#longident_locainletb=self#module_typebinself#constr"Pwith_modtype"[a;b]|Pwith_modtypesubst(a,b)->leta=self#longident_locainletb=self#module_typebinself#constr"Pwith_modtypesubst"[a;b]|Pwith_typesubst(a,b)->leta=self#longident_locainletb=self#type_declarationbinself#constr"Pwith_typesubst"[a;b]|Pwith_modsubst(a,b)->leta=self#longident_locainletb=self#longident_locbinself#constr"Pwith_modsubst"[a;b]methodmodule_expr:module_expr->'res=fun{pmod_desc;pmod_loc;pmod_attributes}->letpmod_desc=self#module_expr_descpmod_descinletpmod_loc=self#locationpmod_locinletpmod_attributes=self#attributespmod_attributesinself#record[("pmod_desc",pmod_desc);("pmod_loc",pmod_loc);("pmod_attributes",pmod_attributes);]methodmodule_expr_desc:module_expr_desc->'res=funx->matchxwith|Pmod_identa->leta=self#longident_locainself#constr"Pmod_ident"[a]|Pmod_structurea->leta=self#structureainself#constr"Pmod_structure"[a]|Pmod_functor(a,b)->leta=self#functor_parameterainletb=self#module_exprbinself#constr"Pmod_functor"[a;b]|Pmod_apply(a,b)->leta=self#module_exprainletb=self#module_exprbinself#constr"Pmod_apply"[a;b]|Pmod_constraint(a,b)->leta=self#module_exprainletb=self#module_typebinself#constr"Pmod_constraint"[a;b]|Pmod_unpacka->leta=self#expressionainself#constr"Pmod_unpack"[a]|Pmod_extensiona->leta=self#extensionainself#constr"Pmod_extension"[a]methodstructure:structure->'res=self#listself#structure_itemmethodstructure_item:structure_item->'res=fun{pstr_desc;pstr_loc}->letpstr_desc=self#structure_item_descpstr_descinletpstr_loc=self#locationpstr_locinself#record[("pstr_desc",pstr_desc);("pstr_loc",pstr_loc)]methodstructure_item_desc:structure_item_desc->'res=funx->matchxwith|Pstr_eval(a,b)->leta=self#expressionainletb=self#attributesbinself#constr"Pstr_eval"[a;b]|Pstr_value(a,b)->leta=self#rec_flagainletb=self#listself#value_bindingbinself#constr"Pstr_value"[a;b]|Pstr_primitivea->leta=self#value_descriptionainself#constr"Pstr_primitive"[a]|Pstr_type(a,b)->leta=self#rec_flagainletb=self#listself#type_declarationbinself#constr"Pstr_type"[a;b]|Pstr_typexta->leta=self#type_extensionainself#constr"Pstr_typext"[a]|Pstr_exceptiona->leta=self#type_exceptionainself#constr"Pstr_exception"[a]|Pstr_modulea->leta=self#module_bindingainself#constr"Pstr_module"[a]|Pstr_recmodulea->leta=self#listself#module_bindingainself#constr"Pstr_recmodule"[a]|Pstr_modtypea->leta=self#module_type_declarationainself#constr"Pstr_modtype"[a]|Pstr_opena->leta=self#open_declarationainself#constr"Pstr_open"[a]|Pstr_classa->leta=self#listself#class_declarationainself#constr"Pstr_class"[a]|Pstr_class_typea->leta=self#listself#class_type_declarationainself#constr"Pstr_class_type"[a]|Pstr_includea->leta=self#include_declarationainself#constr"Pstr_include"[a]|Pstr_attributea->leta=self#attributeainself#constr"Pstr_attribute"[a]|Pstr_extension(a,b)->leta=self#extensionainletb=self#attributesbinself#constr"Pstr_extension"[a;b]methodvalue_binding:value_binding->'res=fun{pvb_pat;pvb_expr;pvb_attributes;pvb_loc}->letpvb_pat=self#patternpvb_patinletpvb_expr=self#expressionpvb_exprinletpvb_attributes=self#attributespvb_attributesinletpvb_loc=self#locationpvb_locinself#record[("pvb_pat",pvb_pat);("pvb_expr",pvb_expr);("pvb_attributes",pvb_attributes);("pvb_loc",pvb_loc);]methodmodule_binding:module_binding->'res=fun{pmb_name;pmb_expr;pmb_attributes;pmb_loc}->letpmb_name=self#loc(self#optionself#string)pmb_nameinletpmb_expr=self#module_exprpmb_exprinletpmb_attributes=self#attributespmb_attributesinletpmb_loc=self#locationpmb_locinself#record[("pmb_name",pmb_name);("pmb_expr",pmb_expr);("pmb_attributes",pmb_attributes);("pmb_loc",pmb_loc);]methodtoplevel_phrase:toplevel_phrase->'res=funx->matchxwith|Ptop_defa->leta=self#structureainself#constr"Ptop_def"[a]|Ptop_dira->leta=self#toplevel_directiveainself#constr"Ptop_dir"[a]methodtoplevel_directive:toplevel_directive->'res=fun{pdir_name;pdir_arg;pdir_loc}->letpdir_name=self#locself#stringpdir_nameinletpdir_arg=self#optionself#directive_argumentpdir_arginletpdir_loc=self#locationpdir_locinself#record[("pdir_name",pdir_name);("pdir_arg",pdir_arg);("pdir_loc",pdir_loc);]methoddirective_argument:directive_argument->'res=fun{pdira_desc;pdira_loc}->letpdira_desc=self#directive_argument_descpdira_descinletpdira_loc=self#locationpdira_locinself#record[("pdira_desc",pdira_desc);("pdira_loc",pdira_loc)]methoddirective_argument_desc:directive_argument_desc->'res=funx->matchxwith|Pdir_stringa->leta=self#stringainself#constr"Pdir_string"[a]|Pdir_int(a,b)->leta=self#stringainletb=self#optionself#charbinself#constr"Pdir_int"[a;b]|Pdir_identa->leta=self#longidentainself#constr"Pdir_ident"[a]|Pdir_boola->leta=self#boolainself#constr"Pdir_bool"[a]methodcases:cases->'res=self#listself#caseendclassvirtual['ctx,'res]lift_map_with_context=object(self)methodvirtualrecord:'ctx->(string*'res)list->'resmethodvirtualconstr:'ctx->string->'reslist->'resmethodvirtualtuple:'ctx->'reslist->'resmethodvirtualother:'a.'ctx->'a->'resmethodvirtualbool:'ctx->bool->bool*'resmethodvirtualchar:'ctx->char->char*'resmethodvirtualint:'ctx->int->int*'resmethodvirtuallist:'a.('ctx->'a->'a*'res)->'ctx->'alist->'alist*'resmethodvirtualoption:'a.('ctx->'a->'a*'res)->'ctx->'aoption->'aoption*'resmethodvirtualstring:'ctx->string->string*'resmethodposition:'ctx->position->position*'res=functx{pos_fname;pos_lnum;pos_bol;pos_cnum}->letpos_fname=self#stringctxpos_fnameinletpos_lnum=self#intctxpos_lnuminletpos_bol=self#intctxpos_bolinletpos_cnum=self#intctxpos_cnumin({pos_fname=Stdlib.fstpos_fname;pos_lnum=Stdlib.fstpos_lnum;pos_bol=Stdlib.fstpos_bol;pos_cnum=Stdlib.fstpos_cnum;},self#recordctx[("pos_fname",Stdlib.sndpos_fname);("pos_lnum",Stdlib.sndpos_lnum);("pos_bol",Stdlib.sndpos_bol);("pos_cnum",Stdlib.sndpos_cnum);])methodlocation:'ctx->location->location*'res=functx{loc_start;loc_end;loc_ghost}->letloc_start=self#positionctxloc_startinletloc_end=self#positionctxloc_endinletloc_ghost=self#boolctxloc_ghostin({loc_start=Stdlib.fstloc_start;loc_end=Stdlib.fstloc_end;loc_ghost=Stdlib.fstloc_ghost;},self#recordctx[("loc_start",Stdlib.sndloc_start);("loc_end",Stdlib.sndloc_end);("loc_ghost",Stdlib.sndloc_ghost);])methodlocation_stack:'ctx->location_stack->location_stack*'res=self#listself#locationmethodloc:'a.('ctx->'a->'a*'res)->'ctx->'aloc->'aloc*'res=fun_actx{txt;loc}->lettxt=_actxtxtinletloc=self#locationctxlocin({txt=Stdlib.fsttxt;loc=Stdlib.fstloc},self#recordctx[("txt",Stdlib.sndtxt);("loc",Stdlib.sndloc)])methodlongident:'ctx->longident->longident*'res=functxx->matchxwith|Lidenta->leta=self#stringctxain(Lident(Stdlib.fsta),self#constrctx"Lident"[Stdlib.snda])|Ldot(a,b)->leta=self#longidentctxainletb=self#stringctxbin(Ldot(Stdlib.fsta,Stdlib.fstb),self#constrctx"Ldot"[Stdlib.snda;Stdlib.sndb])|Lapply(a,b)->leta=self#longidentctxainletb=self#longidentctxbin(Lapply(Stdlib.fsta,Stdlib.fstb),self#constrctx"Lapply"[Stdlib.snda;Stdlib.sndb])methodlongident_loc:'ctx->longident_loc->longident_loc*'res=self#locself#longidentmethodrec_flag:'ctx->rec_flag->rec_flag*'res=functxx->(x,self#otherctxx)methoddirection_flag:'ctx->direction_flag->direction_flag*'res=functxx->(x,self#otherctxx)methodprivate_flag:'ctx->private_flag->private_flag*'res=functxx->(x,self#otherctxx)methodmutable_flag:'ctx->mutable_flag->mutable_flag*'res=functxx->(x,self#otherctxx)methodvirtual_flag:'ctx->virtual_flag->virtual_flag*'res=functxx->(x,self#otherctxx)methodoverride_flag:'ctx->override_flag->override_flag*'res=functxx->(x,self#otherctxx)methodclosed_flag:'ctx->closed_flag->closed_flag*'res=functxx->(x,self#otherctxx)methodlabel:'ctx->label->label*'res=self#stringmethodarg_label:'ctx->arg_label->arg_label*'res=functxx->matchxwith|Nolabel->(Nolabel,self#constrctx"Nolabel"[])|Labelleda->leta=self#stringctxain(Labelled(Stdlib.fsta),self#constrctx"Labelled"[Stdlib.snda])|Optionala->leta=self#stringctxain(Optional(Stdlib.fsta),self#constrctx"Optional"[Stdlib.snda])methodvariance:'ctx->variance->variance*'res=functxx->(x,self#otherctxx)methodinjectivity:'ctx->injectivity->injectivity*'res=functxx->(x,self#otherctxx)methodconstant:'ctx->constant->constant*'res=functxx->matchxwith|Pconst_integer(a,b)->leta=self#stringctxainletb=self#optionself#charctxbin(Pconst_integer(Stdlib.fsta,Stdlib.fstb),self#constrctx"Pconst_integer"[Stdlib.snda;Stdlib.sndb])|Pconst_chara->leta=self#charctxain(Pconst_char(Stdlib.fsta),self#constrctx"Pconst_char"[Stdlib.snda])|Pconst_string(a,b,c)->leta=self#stringctxainletb=self#locationctxbinletc=self#optionself#stringctxcin(Pconst_string(Stdlib.fsta,Stdlib.fstb,Stdlib.fstc),self#constrctx"Pconst_string"[Stdlib.snda;Stdlib.sndb;Stdlib.sndc])|Pconst_float(a,b)->leta=self#stringctxainletb=self#optionself#charctxbin(Pconst_float(Stdlib.fsta,Stdlib.fstb),self#constrctx"Pconst_float"[Stdlib.snda;Stdlib.sndb])methodattribute:'ctx->attribute->attribute*'res=functx{attr_name;attr_payload;attr_loc}->letattr_name=self#locself#stringctxattr_nameinletattr_payload=self#payloadctxattr_payloadinletattr_loc=self#locationctxattr_locin({attr_name=Stdlib.fstattr_name;attr_payload=Stdlib.fstattr_payload;attr_loc=Stdlib.fstattr_loc;},self#recordctx[("attr_name",Stdlib.sndattr_name);("attr_payload",Stdlib.sndattr_payload);("attr_loc",Stdlib.sndattr_loc);])methodextension:'ctx->extension->extension*'res=functx(a,b)->leta=self#locself#stringctxainletb=self#payloadctxbin((Stdlib.fsta,Stdlib.fstb),self#tuplectx[Stdlib.snda;Stdlib.sndb])methodattributes:'ctx->attributes->attributes*'res=self#listself#attributemethodpayload:'ctx->payload->payload*'res=functxx->matchxwith|PStra->leta=self#structurectxain(PStr(Stdlib.fsta),self#constrctx"PStr"[Stdlib.snda])|PSiga->leta=self#signaturectxain(PSig(Stdlib.fsta),self#constrctx"PSig"[Stdlib.snda])|PTypa->leta=self#core_typectxain(PTyp(Stdlib.fsta),self#constrctx"PTyp"[Stdlib.snda])|PPat(a,b)->leta=self#patternctxainletb=self#optionself#expressionctxbin(PPat(Stdlib.fsta,Stdlib.fstb),self#constrctx"PPat"[Stdlib.snda;Stdlib.sndb])methodcore_type:'ctx->core_type->core_type*'res=functx{ptyp_desc;ptyp_loc;ptyp_loc_stack;ptyp_attributes}->letptyp_desc=self#core_type_descctxptyp_descinletptyp_loc=self#locationctxptyp_locinletptyp_loc_stack=self#location_stackctxptyp_loc_stackinletptyp_attributes=self#attributesctxptyp_attributesin({ptyp_desc=Stdlib.fstptyp_desc;ptyp_loc=Stdlib.fstptyp_loc;ptyp_loc_stack=Stdlib.fstptyp_loc_stack;ptyp_attributes=Stdlib.fstptyp_attributes;},self#recordctx[("ptyp_desc",Stdlib.sndptyp_desc);("ptyp_loc",Stdlib.sndptyp_loc);("ptyp_loc_stack",Stdlib.sndptyp_loc_stack);("ptyp_attributes",Stdlib.sndptyp_attributes);])methodcore_type_desc:'ctx->core_type_desc->core_type_desc*'res=functxx->matchxwith|Ptyp_any->(Ptyp_any,self#constrctx"Ptyp_any"[])|Ptyp_vara->leta=self#stringctxain(Ptyp_var(Stdlib.fsta),self#constrctx"Ptyp_var"[Stdlib.snda])|Ptyp_arrow(a,b,c)->leta=self#arg_labelctxainletb=self#core_typectxbinletc=self#core_typectxcin(Ptyp_arrow(Stdlib.fsta,Stdlib.fstb,Stdlib.fstc),self#constrctx"Ptyp_arrow"[Stdlib.snda;Stdlib.sndb;Stdlib.sndc])|Ptyp_tuplea->leta=self#listself#core_typectxain(Ptyp_tuple(Stdlib.fsta),self#constrctx"Ptyp_tuple"[Stdlib.snda])|Ptyp_constr(a,b)->leta=self#longident_locctxainletb=self#listself#core_typectxbin(Ptyp_constr(Stdlib.fsta,Stdlib.fstb),self#constrctx"Ptyp_constr"[Stdlib.snda;Stdlib.sndb])|Ptyp_object(a,b)->leta=self#listself#object_fieldctxainletb=self#closed_flagctxbin(Ptyp_object(Stdlib.fsta,Stdlib.fstb),self#constrctx"Ptyp_object"[Stdlib.snda;Stdlib.sndb])|Ptyp_class(a,b)->leta=self#longident_locctxainletb=self#listself#core_typectxbin(Ptyp_class(Stdlib.fsta,Stdlib.fstb),self#constrctx"Ptyp_class"[Stdlib.snda;Stdlib.sndb])|Ptyp_alias(a,b)->leta=self#core_typectxainletb=self#stringctxbin(Ptyp_alias(Stdlib.fsta,Stdlib.fstb),self#constrctx"Ptyp_alias"[Stdlib.snda;Stdlib.sndb])|Ptyp_variant(a,b,c)->leta=self#listself#row_fieldctxainletb=self#closed_flagctxbinletc=self#option(self#listself#label)ctxcin(Ptyp_variant(Stdlib.fsta,Stdlib.fstb,Stdlib.fstc),self#constrctx"Ptyp_variant"[Stdlib.snda;Stdlib.sndb;Stdlib.sndc])|Ptyp_poly(a,b)->leta=self#list(self#locself#string)ctxainletb=self#core_typectxbin(Ptyp_poly(Stdlib.fsta,Stdlib.fstb),self#constrctx"Ptyp_poly"[Stdlib.snda;Stdlib.sndb])|Ptyp_packagea->leta=self#package_typectxain(Ptyp_package(Stdlib.fsta),self#constrctx"Ptyp_package"[Stdlib.snda])|Ptyp_extensiona->leta=self#extensionctxain(Ptyp_extension(Stdlib.fsta),self#constrctx"Ptyp_extension"[Stdlib.snda])methodpackage_type:'ctx->package_type->package_type*'res=functx(a,b)->leta=self#longident_locctxainletb=self#list(functx(a,b)->leta=self#longident_locctxainletb=self#core_typectxbin((Stdlib.fsta,Stdlib.fstb),self#tuplectx[Stdlib.snda;Stdlib.sndb]))ctxbin((Stdlib.fsta,Stdlib.fstb),self#tuplectx[Stdlib.snda;Stdlib.sndb])methodrow_field:'ctx->row_field->row_field*'res=functx{prf_desc;prf_loc;prf_attributes}->letprf_desc=self#row_field_descctxprf_descinletprf_loc=self#locationctxprf_locinletprf_attributes=self#attributesctxprf_attributesin({prf_desc=Stdlib.fstprf_desc;prf_loc=Stdlib.fstprf_loc;prf_attributes=Stdlib.fstprf_attributes;},self#recordctx[("prf_desc",Stdlib.sndprf_desc);("prf_loc",Stdlib.sndprf_loc);("prf_attributes",Stdlib.sndprf_attributes);])methodrow_field_desc:'ctx->row_field_desc->row_field_desc*'res=functxx->matchxwith|Rtag(a,b,c)->leta=self#locself#labelctxainletb=self#boolctxbinletc=self#listself#core_typectxcin(Rtag(Stdlib.fsta,Stdlib.fstb,Stdlib.fstc),self#constrctx"Rtag"[Stdlib.snda;Stdlib.sndb;Stdlib.sndc])|Rinherita->leta=self#core_typectxain(Rinherit(Stdlib.fsta),self#constrctx"Rinherit"[Stdlib.snda])methodobject_field:'ctx->object_field->object_field*'res=functx{pof_desc;pof_loc;pof_attributes}->letpof_desc=self#object_field_descctxpof_descinletpof_loc=self#locationctxpof_locinletpof_attributes=self#attributesctxpof_attributesin({pof_desc=Stdlib.fstpof_desc;pof_loc=Stdlib.fstpof_loc;pof_attributes=Stdlib.fstpof_attributes;},self#recordctx[("pof_desc",Stdlib.sndpof_desc);("pof_loc",Stdlib.sndpof_loc);("pof_attributes",Stdlib.sndpof_attributes);])methodobject_field_desc:'ctx->object_field_desc->object_field_desc*'res=functxx->matchxwith|Otag(a,b)->leta=self#locself#labelctxainletb=self#core_typectxbin(Otag(Stdlib.fsta,Stdlib.fstb),self#constrctx"Otag"[Stdlib.snda;Stdlib.sndb])|Oinherita->leta=self#core_typectxain(Oinherit(Stdlib.fsta),self#constrctx"Oinherit"[Stdlib.snda])methodpattern:'ctx->pattern->pattern*'res=functx{ppat_desc;ppat_loc;ppat_loc_stack;ppat_attributes}->letppat_desc=self#pattern_descctxppat_descinletppat_loc=self#locationctxppat_locinletppat_loc_stack=self#location_stackctxppat_loc_stackinletppat_attributes=self#attributesctxppat_attributesin({ppat_desc=Stdlib.fstppat_desc;ppat_loc=Stdlib.fstppat_loc;ppat_loc_stack=Stdlib.fstppat_loc_stack;ppat_attributes=Stdlib.fstppat_attributes;},self#recordctx[("ppat_desc",Stdlib.sndppat_desc);("ppat_loc",Stdlib.sndppat_loc);("ppat_loc_stack",Stdlib.sndppat_loc_stack);("ppat_attributes",Stdlib.sndppat_attributes);])methodpattern_desc:'ctx->pattern_desc->pattern_desc*'res=functxx->matchxwith|Ppat_any->(Ppat_any,self#constrctx"Ppat_any"[])|Ppat_vara->leta=self#locself#stringctxain(Ppat_var(Stdlib.fsta),self#constrctx"Ppat_var"[Stdlib.snda])|Ppat_alias(a,b)->leta=self#patternctxainletb=self#locself#stringctxbin(Ppat_alias(Stdlib.fsta,Stdlib.fstb),self#constrctx"Ppat_alias"[Stdlib.snda;Stdlib.sndb])|Ppat_constanta->leta=self#constantctxain(Ppat_constant(Stdlib.fsta),self#constrctx"Ppat_constant"[Stdlib.snda])|Ppat_interval(a,b)->leta=self#constantctxainletb=self#constantctxbin(Ppat_interval(Stdlib.fsta,Stdlib.fstb),self#constrctx"Ppat_interval"[Stdlib.snda;Stdlib.sndb])|Ppat_tuplea->leta=self#listself#patternctxain(Ppat_tuple(Stdlib.fsta),self#constrctx"Ppat_tuple"[Stdlib.snda])|Ppat_construct(a,b)->leta=self#longident_locctxainletb=self#option(functx(a,b)->leta=self#list(self#locself#string)ctxainletb=self#patternctxbin((Stdlib.fsta,Stdlib.fstb),self#tuplectx[Stdlib.snda;Stdlib.sndb]))ctxbin(Ppat_construct(Stdlib.fsta,Stdlib.fstb),self#constrctx"Ppat_construct"[Stdlib.snda;Stdlib.sndb])|Ppat_variant(a,b)->leta=self#labelctxainletb=self#optionself#patternctxbin(Ppat_variant(Stdlib.fsta,Stdlib.fstb),self#constrctx"Ppat_variant"[Stdlib.snda;Stdlib.sndb])|Ppat_record(a,b)->leta=self#list(functx(a,b)->leta=self#longident_locctxainletb=self#patternctxbin((Stdlib.fsta,Stdlib.fstb),self#tuplectx[Stdlib.snda;Stdlib.sndb]))ctxainletb=self#closed_flagctxbin(Ppat_record(Stdlib.fsta,Stdlib.fstb),self#constrctx"Ppat_record"[Stdlib.snda;Stdlib.sndb])|Ppat_arraya->leta=self#listself#patternctxain(Ppat_array(Stdlib.fsta),self#constrctx"Ppat_array"[Stdlib.snda])|Ppat_or(a,b)->leta=self#patternctxainletb=self#patternctxbin(Ppat_or(Stdlib.fsta,Stdlib.fstb),self#constrctx"Ppat_or"[Stdlib.snda;Stdlib.sndb])|Ppat_constraint(a,b)->leta=self#patternctxainletb=self#core_typectxbin(Ppat_constraint(Stdlib.fsta,Stdlib.fstb),self#constrctx"Ppat_constraint"[Stdlib.snda;Stdlib.sndb])|Ppat_typea->leta=self#longident_locctxain(Ppat_type(Stdlib.fsta),self#constrctx"Ppat_type"[Stdlib.snda])|Ppat_lazya->leta=self#patternctxain(Ppat_lazy(Stdlib.fsta),self#constrctx"Ppat_lazy"[Stdlib.snda])|Ppat_unpacka->leta=self#loc(self#optionself#string)ctxain(Ppat_unpack(Stdlib.fsta),self#constrctx"Ppat_unpack"[Stdlib.snda])|Ppat_exceptiona->leta=self#patternctxain(Ppat_exception(Stdlib.fsta),self#constrctx"Ppat_exception"[Stdlib.snda])|Ppat_extensiona->leta=self#extensionctxain(Ppat_extension(Stdlib.fsta),self#constrctx"Ppat_extension"[Stdlib.snda])|Ppat_open(a,b)->leta=self#longident_locctxainletb=self#patternctxbin(Ppat_open(Stdlib.fsta,Stdlib.fstb),self#constrctx"Ppat_open"[Stdlib.snda;Stdlib.sndb])methodexpression:'ctx->expression->expression*'res=functx{pexp_desc;pexp_loc;pexp_loc_stack;pexp_attributes}->letpexp_desc=self#expression_descctxpexp_descinletpexp_loc=self#locationctxpexp_locinletpexp_loc_stack=self#location_stackctxpexp_loc_stackinletpexp_attributes=self#attributesctxpexp_attributesin({pexp_desc=Stdlib.fstpexp_desc;pexp_loc=Stdlib.fstpexp_loc;pexp_loc_stack=Stdlib.fstpexp_loc_stack;pexp_attributes=Stdlib.fstpexp_attributes;},self#recordctx[("pexp_desc",Stdlib.sndpexp_desc);("pexp_loc",Stdlib.sndpexp_loc);("pexp_loc_stack",Stdlib.sndpexp_loc_stack);("pexp_attributes",Stdlib.sndpexp_attributes);])methodexpression_desc:'ctx->expression_desc->expression_desc*'res=functxx->matchxwith|Pexp_identa->leta=self#longident_locctxain(Pexp_ident(Stdlib.fsta),self#constrctx"Pexp_ident"[Stdlib.snda])|Pexp_constanta->leta=self#constantctxain(Pexp_constant(Stdlib.fsta),self#constrctx"Pexp_constant"[Stdlib.snda])|Pexp_let(a,b,c)->leta=self#rec_flagctxainletb=self#listself#value_bindingctxbinletc=self#expressionctxcin(Pexp_let(Stdlib.fsta,Stdlib.fstb,Stdlib.fstc),self#constrctx"Pexp_let"[Stdlib.snda;Stdlib.sndb;Stdlib.sndc])|Pexp_functiona->leta=self#casesctxain(Pexp_function(Stdlib.fsta),self#constrctx"Pexp_function"[Stdlib.snda])|Pexp_fun(a,b,c,d)->leta=self#arg_labelctxainletb=self#optionself#expressionctxbinletc=self#patternctxcinletd=self#expressionctxdin(Pexp_fun(Stdlib.fsta,Stdlib.fstb,Stdlib.fstc,Stdlib.fstd),self#constrctx"Pexp_fun"[Stdlib.snda;Stdlib.sndb;Stdlib.sndc;Stdlib.sndd])|Pexp_apply(a,b)->leta=self#expressionctxainletb=self#list(functx(a,b)->leta=self#arg_labelctxainletb=self#expressionctxbin((Stdlib.fsta,Stdlib.fstb),self#tuplectx[Stdlib.snda;Stdlib.sndb]))ctxbin(Pexp_apply(Stdlib.fsta,Stdlib.fstb),self#constrctx"Pexp_apply"[Stdlib.snda;Stdlib.sndb])|Pexp_match(a,b)->leta=self#expressionctxainletb=self#casesctxbin(Pexp_match(Stdlib.fsta,Stdlib.fstb),self#constrctx"Pexp_match"[Stdlib.snda;Stdlib.sndb])|Pexp_try(a,b)->leta=self#expressionctxainletb=self#casesctxbin(Pexp_try(Stdlib.fsta,Stdlib.fstb),self#constrctx"Pexp_try"[Stdlib.snda;Stdlib.sndb])|Pexp_tuplea->leta=self#listself#expressionctxain(Pexp_tuple(Stdlib.fsta),self#constrctx"Pexp_tuple"[Stdlib.snda])|Pexp_construct(a,b)->leta=self#longident_locctxainletb=self#optionself#expressionctxbin(Pexp_construct(Stdlib.fsta,Stdlib.fstb),self#constrctx"Pexp_construct"[Stdlib.snda;Stdlib.sndb])|Pexp_variant(a,b)->leta=self#labelctxainletb=self#optionself#expressionctxbin(Pexp_variant(Stdlib.fsta,Stdlib.fstb),self#constrctx"Pexp_variant"[Stdlib.snda;Stdlib.sndb])|Pexp_record(a,b)->leta=self#list(functx(a,b)->leta=self#longident_locctxainletb=self#expressionctxbin((Stdlib.fsta,Stdlib.fstb),self#tuplectx[Stdlib.snda;Stdlib.sndb]))ctxainletb=self#optionself#expressionctxbin(Pexp_record(Stdlib.fsta,Stdlib.fstb),self#constrctx"Pexp_record"[Stdlib.snda;Stdlib.sndb])|Pexp_field(a,b)->leta=self#expressionctxainletb=self#longident_locctxbin(Pexp_field(Stdlib.fsta,Stdlib.fstb),self#constrctx"Pexp_field"[Stdlib.snda;Stdlib.sndb])|Pexp_setfield(a,b,c)->leta=self#expressionctxainletb=self#longident_locctxbinletc=self#expressionctxcin(Pexp_setfield(Stdlib.fsta,Stdlib.fstb,Stdlib.fstc),self#constrctx"Pexp_setfield"[Stdlib.snda;Stdlib.sndb;Stdlib.sndc])|Pexp_arraya->leta=self#listself#expressionctxain(Pexp_array(Stdlib.fsta),self#constrctx"Pexp_array"[Stdlib.snda])|Pexp_ifthenelse(a,b,c)->leta=self#expressionctxainletb=self#expressionctxbinletc=self#optionself#expressionctxcin(Pexp_ifthenelse(Stdlib.fsta,Stdlib.fstb,Stdlib.fstc),self#constrctx"Pexp_ifthenelse"[Stdlib.snda;Stdlib.sndb;Stdlib.sndc])|Pexp_sequence(a,b)->leta=self#expressionctxainletb=self#expressionctxbin(Pexp_sequence(Stdlib.fsta,Stdlib.fstb),self#constrctx"Pexp_sequence"[Stdlib.snda;Stdlib.sndb])|Pexp_while(a,b)->leta=self#expressionctxainletb=self#expressionctxbin(Pexp_while(Stdlib.fsta,Stdlib.fstb),self#constrctx"Pexp_while"[Stdlib.snda;Stdlib.sndb])|Pexp_for(a,b,c,d,e)->leta=self#patternctxainletb=self#expressionctxbinletc=self#expressionctxcinletd=self#direction_flagctxdinlete=self#expressionctxein(Pexp_for(Stdlib.fsta,Stdlib.fstb,Stdlib.fstc,Stdlib.fstd,Stdlib.fste),self#constrctx"Pexp_for"[Stdlib.snda;Stdlib.sndb;Stdlib.sndc;Stdlib.sndd;Stdlib.snde;])|Pexp_constraint(a,b)->leta=self#expressionctxainletb=self#core_typectxbin(Pexp_constraint(Stdlib.fsta,Stdlib.fstb),self#constrctx"Pexp_constraint"[Stdlib.snda;Stdlib.sndb])|Pexp_coerce(a,b,c)->leta=self#expressionctxainletb=self#optionself#core_typectxbinletc=self#core_typectxcin(Pexp_coerce(Stdlib.fsta,Stdlib.fstb,Stdlib.fstc),self#constrctx"Pexp_coerce"[Stdlib.snda;Stdlib.sndb;Stdlib.sndc])|Pexp_send(a,b)->leta=self#expressionctxainletb=self#locself#labelctxbin(Pexp_send(Stdlib.fsta,Stdlib.fstb),self#constrctx"Pexp_send"[Stdlib.snda;Stdlib.sndb])|Pexp_newa->leta=self#longident_locctxain(Pexp_new(Stdlib.fsta),self#constrctx"Pexp_new"[Stdlib.snda])|Pexp_setinstvar(a,b)->leta=self#locself#labelctxainletb=self#expressionctxbin(Pexp_setinstvar(Stdlib.fsta,Stdlib.fstb),self#constrctx"Pexp_setinstvar"[Stdlib.snda;Stdlib.sndb])|Pexp_overridea->leta=self#list(functx(a,b)->leta=self#locself#labelctxainletb=self#expressionctxbin((Stdlib.fsta,Stdlib.fstb),self#tuplectx[Stdlib.snda;Stdlib.sndb]))ctxain(Pexp_override(Stdlib.fsta),self#constrctx"Pexp_override"[Stdlib.snda])|Pexp_letmodule(a,b,c)->leta=self#loc(self#optionself#string)ctxainletb=self#module_exprctxbinletc=self#expressionctxcin(Pexp_letmodule(Stdlib.fsta,Stdlib.fstb,Stdlib.fstc),self#constrctx"Pexp_letmodule"[Stdlib.snda;Stdlib.sndb;Stdlib.sndc])|Pexp_letexception(a,b)->leta=self#extension_constructorctxainletb=self#expressionctxbin(Pexp_letexception(Stdlib.fsta,Stdlib.fstb),self#constrctx"Pexp_letexception"[Stdlib.snda;Stdlib.sndb])|Pexp_asserta->leta=self#expressionctxain(Pexp_assert(Stdlib.fsta),self#constrctx"Pexp_assert"[Stdlib.snda])|Pexp_lazya->leta=self#expressionctxain(Pexp_lazy(Stdlib.fsta),self#constrctx"Pexp_lazy"[Stdlib.snda])|Pexp_poly(a,b)->leta=self#expressionctxainletb=self#optionself#core_typectxbin(Pexp_poly(Stdlib.fsta,Stdlib.fstb),self#constrctx"Pexp_poly"[Stdlib.snda;Stdlib.sndb])|Pexp_objecta->leta=self#class_structurectxain(Pexp_object(Stdlib.fsta),self#constrctx"Pexp_object"[Stdlib.snda])|Pexp_newtype(a,b)->leta=self#locself#stringctxainletb=self#expressionctxbin(Pexp_newtype(Stdlib.fsta,Stdlib.fstb),self#constrctx"Pexp_newtype"[Stdlib.snda;Stdlib.sndb])|Pexp_packa->leta=self#module_exprctxain(Pexp_pack(Stdlib.fsta),self#constrctx"Pexp_pack"[Stdlib.snda])|Pexp_open(a,b)->leta=self#open_declarationctxainletb=self#expressionctxbin(Pexp_open(Stdlib.fsta,Stdlib.fstb),self#constrctx"Pexp_open"[Stdlib.snda;Stdlib.sndb])|Pexp_letopa->leta=self#letopctxain(Pexp_letop(Stdlib.fsta),self#constrctx"Pexp_letop"[Stdlib.snda])|Pexp_extensiona->leta=self#extensionctxain(Pexp_extension(Stdlib.fsta),self#constrctx"Pexp_extension"[Stdlib.snda])|Pexp_unreachable->(Pexp_unreachable,self#constrctx"Pexp_unreachable"[])methodcase:'ctx->case->case*'res=functx{pc_lhs;pc_guard;pc_rhs}->letpc_lhs=self#patternctxpc_lhsinletpc_guard=self#optionself#expressionctxpc_guardinletpc_rhs=self#expressionctxpc_rhsin({pc_lhs=Stdlib.fstpc_lhs;pc_guard=Stdlib.fstpc_guard;pc_rhs=Stdlib.fstpc_rhs;},self#recordctx[("pc_lhs",Stdlib.sndpc_lhs);("pc_guard",Stdlib.sndpc_guard);("pc_rhs",Stdlib.sndpc_rhs);])methodletop:'ctx->letop->letop*'res=functx{let_;ands;body}->letlet_=self#binding_opctxlet_inletands=self#listself#binding_opctxandsinletbody=self#expressionctxbodyin({let_=Stdlib.fstlet_;ands=Stdlib.fstands;body=Stdlib.fstbody;},self#recordctx[("let_",Stdlib.sndlet_);("ands",Stdlib.sndands);("body",Stdlib.sndbody);])methodbinding_op:'ctx->binding_op->binding_op*'res=functx{pbop_op;pbop_pat;pbop_exp;pbop_loc}->letpbop_op=self#locself#stringctxpbop_opinletpbop_pat=self#patternctxpbop_patinletpbop_exp=self#expressionctxpbop_expinletpbop_loc=self#locationctxpbop_locin({pbop_op=Stdlib.fstpbop_op;pbop_pat=Stdlib.fstpbop_pat;pbop_exp=Stdlib.fstpbop_exp;pbop_loc=Stdlib.fstpbop_loc;},self#recordctx[("pbop_op",Stdlib.sndpbop_op);("pbop_pat",Stdlib.sndpbop_pat);("pbop_exp",Stdlib.sndpbop_exp);("pbop_loc",Stdlib.sndpbop_loc);])methodvalue_description:'ctx->value_description->value_description*'res=functx{pval_name;pval_type;pval_prim;pval_attributes;pval_loc}->letpval_name=self#locself#stringctxpval_nameinletpval_type=self#core_typectxpval_typeinletpval_prim=self#listself#stringctxpval_priminletpval_attributes=self#attributesctxpval_attributesinletpval_loc=self#locationctxpval_locin({pval_name=Stdlib.fstpval_name;pval_type=Stdlib.fstpval_type;pval_prim=Stdlib.fstpval_prim;pval_attributes=Stdlib.fstpval_attributes;pval_loc=Stdlib.fstpval_loc;},self#recordctx[("pval_name",Stdlib.sndpval_name);("pval_type",Stdlib.sndpval_type);("pval_prim",Stdlib.sndpval_prim);("pval_attributes",Stdlib.sndpval_attributes);("pval_loc",Stdlib.sndpval_loc);])methodtype_declaration:'ctx->type_declaration->type_declaration*'res=functx{ptype_name;ptype_params;ptype_cstrs;ptype_kind;ptype_private;ptype_manifest;ptype_attributes;ptype_loc;}->letptype_name=self#locself#stringctxptype_nameinletptype_params=self#list(functx(a,b)->leta=self#core_typectxainletb=(functx(a,b)->leta=self#variancectxainletb=self#injectivityctxbin((Stdlib.fsta,Stdlib.fstb),self#tuplectx[Stdlib.snda;Stdlib.sndb]))ctxbin((Stdlib.fsta,Stdlib.fstb),self#tuplectx[Stdlib.snda;Stdlib.sndb]))ctxptype_paramsinletptype_cstrs=self#list(functx(a,b,c)->leta=self#core_typectxainletb=self#core_typectxbinletc=self#locationctxcin((Stdlib.fsta,Stdlib.fstb,Stdlib.fstc),self#tuplectx[Stdlib.snda;Stdlib.sndb;Stdlib.sndc]))ctxptype_cstrsinletptype_kind=self#type_kindctxptype_kindinletptype_private=self#private_flagctxptype_privateinletptype_manifest=self#optionself#core_typectxptype_manifestinletptype_attributes=self#attributesctxptype_attributesinletptype_loc=self#locationctxptype_locin({ptype_name=Stdlib.fstptype_name;ptype_params=Stdlib.fstptype_params;ptype_cstrs=Stdlib.fstptype_cstrs;ptype_kind=Stdlib.fstptype_kind;ptype_private=Stdlib.fstptype_private;ptype_manifest=Stdlib.fstptype_manifest;ptype_attributes=Stdlib.fstptype_attributes;ptype_loc=Stdlib.fstptype_loc;},self#recordctx[("ptype_name",Stdlib.sndptype_name);("ptype_params",Stdlib.sndptype_params);("ptype_cstrs",Stdlib.sndptype_cstrs);("ptype_kind",Stdlib.sndptype_kind);("ptype_private",Stdlib.sndptype_private);("ptype_manifest",Stdlib.sndptype_manifest);("ptype_attributes",Stdlib.sndptype_attributes);("ptype_loc",Stdlib.sndptype_loc);])methodtype_kind:'ctx->type_kind->type_kind*'res=functxx->matchxwith|Ptype_abstract->(Ptype_abstract,self#constrctx"Ptype_abstract"[])|Ptype_varianta->leta=self#listself#constructor_declarationctxain(Ptype_variant(Stdlib.fsta),self#constrctx"Ptype_variant"[Stdlib.snda])|Ptype_recorda->leta=self#listself#label_declarationctxain(Ptype_record(Stdlib.fsta),self#constrctx"Ptype_record"[Stdlib.snda])|Ptype_open->(Ptype_open,self#constrctx"Ptype_open"[])methodlabel_declaration:'ctx->label_declaration->label_declaration*'res=functx{pld_name;pld_mutable;pld_type;pld_loc;pld_attributes}->letpld_name=self#locself#stringctxpld_nameinletpld_mutable=self#mutable_flagctxpld_mutableinletpld_type=self#core_typectxpld_typeinletpld_loc=self#locationctxpld_locinletpld_attributes=self#attributesctxpld_attributesin({pld_name=Stdlib.fstpld_name;pld_mutable=Stdlib.fstpld_mutable;pld_type=Stdlib.fstpld_type;pld_loc=Stdlib.fstpld_loc;pld_attributes=Stdlib.fstpld_attributes;},self#recordctx[("pld_name",Stdlib.sndpld_name);("pld_mutable",Stdlib.sndpld_mutable);("pld_type",Stdlib.sndpld_type);("pld_loc",Stdlib.sndpld_loc);("pld_attributes",Stdlib.sndpld_attributes);])methodconstructor_declaration:'ctx->constructor_declaration->constructor_declaration*'res=functx{pcd_name;pcd_vars;pcd_args;pcd_res;pcd_loc;pcd_attributes}->letpcd_name=self#locself#stringctxpcd_nameinletpcd_vars=self#list(self#locself#string)ctxpcd_varsinletpcd_args=self#constructor_argumentsctxpcd_argsinletpcd_res=self#optionself#core_typectxpcd_resinletpcd_loc=self#locationctxpcd_locinletpcd_attributes=self#attributesctxpcd_attributesin({pcd_name=Stdlib.fstpcd_name;pcd_vars=Stdlib.fstpcd_vars;pcd_args=Stdlib.fstpcd_args;pcd_res=Stdlib.fstpcd_res;pcd_loc=Stdlib.fstpcd_loc;pcd_attributes=Stdlib.fstpcd_attributes;},self#recordctx[("pcd_name",Stdlib.sndpcd_name);("pcd_vars",Stdlib.sndpcd_vars);("pcd_args",Stdlib.sndpcd_args);("pcd_res",Stdlib.sndpcd_res);("pcd_loc",Stdlib.sndpcd_loc);("pcd_attributes",Stdlib.sndpcd_attributes);])methodconstructor_arguments:'ctx->constructor_arguments->constructor_arguments*'res=functxx->matchxwith|Pcstr_tuplea->leta=self#listself#core_typectxain(Pcstr_tuple(Stdlib.fsta),self#constrctx"Pcstr_tuple"[Stdlib.snda])|Pcstr_recorda->leta=self#listself#label_declarationctxain(Pcstr_record(Stdlib.fsta),self#constrctx"Pcstr_record"[Stdlib.snda])methodtype_extension:'ctx->type_extension->type_extension*'res=functx{ptyext_path;ptyext_params;ptyext_constructors;ptyext_private;ptyext_loc;ptyext_attributes;}->letptyext_path=self#longident_locctxptyext_pathinletptyext_params=self#list(functx(a,b)->leta=self#core_typectxainletb=(functx(a,b)->leta=self#variancectxainletb=self#injectivityctxbin((Stdlib.fsta,Stdlib.fstb),self#tuplectx[Stdlib.snda;Stdlib.sndb]))ctxbin((Stdlib.fsta,Stdlib.fstb),self#tuplectx[Stdlib.snda;Stdlib.sndb]))ctxptyext_paramsinletptyext_constructors=self#listself#extension_constructorctxptyext_constructorsinletptyext_private=self#private_flagctxptyext_privateinletptyext_loc=self#locationctxptyext_locinletptyext_attributes=self#attributesctxptyext_attributesin({ptyext_path=Stdlib.fstptyext_path;ptyext_params=Stdlib.fstptyext_params;ptyext_constructors=Stdlib.fstptyext_constructors;ptyext_private=Stdlib.fstptyext_private;ptyext_loc=Stdlib.fstptyext_loc;ptyext_attributes=Stdlib.fstptyext_attributes;},self#recordctx[("ptyext_path",Stdlib.sndptyext_path);("ptyext_params",Stdlib.sndptyext_params);("ptyext_constructors",Stdlib.sndptyext_constructors);("ptyext_private",Stdlib.sndptyext_private);("ptyext_loc",Stdlib.sndptyext_loc);("ptyext_attributes",Stdlib.sndptyext_attributes);])methodextension_constructor:'ctx->extension_constructor->extension_constructor*'res=functx{pext_name;pext_kind;pext_loc;pext_attributes}->letpext_name=self#locself#stringctxpext_nameinletpext_kind=self#extension_constructor_kindctxpext_kindinletpext_loc=self#locationctxpext_locinletpext_attributes=self#attributesctxpext_attributesin({pext_name=Stdlib.fstpext_name;pext_kind=Stdlib.fstpext_kind;pext_loc=Stdlib.fstpext_loc;pext_attributes=Stdlib.fstpext_attributes;},self#recordctx[("pext_name",Stdlib.sndpext_name);("pext_kind",Stdlib.sndpext_kind);("pext_loc",Stdlib.sndpext_loc);("pext_attributes",Stdlib.sndpext_attributes);])methodtype_exception:'ctx->type_exception->type_exception*'res=functx{ptyexn_constructor;ptyexn_loc;ptyexn_attributes}->letptyexn_constructor=self#extension_constructorctxptyexn_constructorinletptyexn_loc=self#locationctxptyexn_locinletptyexn_attributes=self#attributesctxptyexn_attributesin({ptyexn_constructor=Stdlib.fstptyexn_constructor;ptyexn_loc=Stdlib.fstptyexn_loc;ptyexn_attributes=Stdlib.fstptyexn_attributes;},self#recordctx[("ptyexn_constructor",Stdlib.sndptyexn_constructor);("ptyexn_loc",Stdlib.sndptyexn_loc);("ptyexn_attributes",Stdlib.sndptyexn_attributes);])methodextension_constructor_kind:'ctx->extension_constructor_kind->extension_constructor_kind*'res=functxx->matchxwith|Pext_decl(a,b,c)->leta=self#list(self#locself#string)ctxainletb=self#constructor_argumentsctxbinletc=self#optionself#core_typectxcin(Pext_decl(Stdlib.fsta,Stdlib.fstb,Stdlib.fstc),self#constrctx"Pext_decl"[Stdlib.snda;Stdlib.sndb;Stdlib.sndc])|Pext_rebinda->leta=self#longident_locctxain(Pext_rebind(Stdlib.fsta),self#constrctx"Pext_rebind"[Stdlib.snda])methodclass_type:'ctx->class_type->class_type*'res=functx{pcty_desc;pcty_loc;pcty_attributes}->letpcty_desc=self#class_type_descctxpcty_descinletpcty_loc=self#locationctxpcty_locinletpcty_attributes=self#attributesctxpcty_attributesin({pcty_desc=Stdlib.fstpcty_desc;pcty_loc=Stdlib.fstpcty_loc;pcty_attributes=Stdlib.fstpcty_attributes;},self#recordctx[("pcty_desc",Stdlib.sndpcty_desc);("pcty_loc",Stdlib.sndpcty_loc);("pcty_attributes",Stdlib.sndpcty_attributes);])methodclass_type_desc:'ctx->class_type_desc->class_type_desc*'res=functxx->matchxwith|Pcty_constr(a,b)->leta=self#longident_locctxainletb=self#listself#core_typectxbin(Pcty_constr(Stdlib.fsta,Stdlib.fstb),self#constrctx"Pcty_constr"[Stdlib.snda;Stdlib.sndb])|Pcty_signaturea->leta=self#class_signaturectxain(Pcty_signature(Stdlib.fsta),self#constrctx"Pcty_signature"[Stdlib.snda])|Pcty_arrow(a,b,c)->leta=self#arg_labelctxainletb=self#core_typectxbinletc=self#class_typectxcin(Pcty_arrow(Stdlib.fsta,Stdlib.fstb,Stdlib.fstc),self#constrctx"Pcty_arrow"[Stdlib.snda;Stdlib.sndb;Stdlib.sndc])|Pcty_extensiona->leta=self#extensionctxain(Pcty_extension(Stdlib.fsta),self#constrctx"Pcty_extension"[Stdlib.snda])|Pcty_open(a,b)->leta=self#open_descriptionctxainletb=self#class_typectxbin(Pcty_open(Stdlib.fsta,Stdlib.fstb),self#constrctx"Pcty_open"[Stdlib.snda;Stdlib.sndb])methodclass_signature:'ctx->class_signature->class_signature*'res=functx{pcsig_self;pcsig_fields}->letpcsig_self=self#core_typectxpcsig_selfinletpcsig_fields=self#listself#class_type_fieldctxpcsig_fieldsin({pcsig_self=Stdlib.fstpcsig_self;pcsig_fields=Stdlib.fstpcsig_fields;},self#recordctx[("pcsig_self",Stdlib.sndpcsig_self);("pcsig_fields",Stdlib.sndpcsig_fields);])methodclass_type_field:'ctx->class_type_field->class_type_field*'res=functx{pctf_desc;pctf_loc;pctf_attributes}->letpctf_desc=self#class_type_field_descctxpctf_descinletpctf_loc=self#locationctxpctf_locinletpctf_attributes=self#attributesctxpctf_attributesin({pctf_desc=Stdlib.fstpctf_desc;pctf_loc=Stdlib.fstpctf_loc;pctf_attributes=Stdlib.fstpctf_attributes;},self#recordctx[("pctf_desc",Stdlib.sndpctf_desc);("pctf_loc",Stdlib.sndpctf_loc);("pctf_attributes",Stdlib.sndpctf_attributes);])methodclass_type_field_desc:'ctx->class_type_field_desc->class_type_field_desc*'res=functxx->matchxwith|Pctf_inherita->leta=self#class_typectxain(Pctf_inherit(Stdlib.fsta),self#constrctx"Pctf_inherit"[Stdlib.snda])|Pctf_vala->leta=(functx(a,b,c,d)->leta=self#locself#labelctxainletb=self#mutable_flagctxbinletc=self#virtual_flagctxcinletd=self#core_typectxdin((Stdlib.fsta,Stdlib.fstb,Stdlib.fstc,Stdlib.fstd),self#tuplectx[Stdlib.snda;Stdlib.sndb;Stdlib.sndc;Stdlib.sndd]))ctxain(Pctf_val(Stdlib.fsta),self#constrctx"Pctf_val"[Stdlib.snda])|Pctf_methoda->leta=(functx(a,b,c,d)->leta=self#locself#labelctxainletb=self#private_flagctxbinletc=self#virtual_flagctxcinletd=self#core_typectxdin((Stdlib.fsta,Stdlib.fstb,Stdlib.fstc,Stdlib.fstd),self#tuplectx[Stdlib.snda;Stdlib.sndb;Stdlib.sndc;Stdlib.sndd]))ctxain(Pctf_method(Stdlib.fsta),self#constrctx"Pctf_method"[Stdlib.snda])|Pctf_constrainta->leta=(functx(a,b)->leta=self#core_typectxainletb=self#core_typectxbin((Stdlib.fsta,Stdlib.fstb),self#tuplectx[Stdlib.snda;Stdlib.sndb]))ctxain(Pctf_constraint(Stdlib.fsta),self#constrctx"Pctf_constraint"[Stdlib.snda])|Pctf_attributea->leta=self#attributectxain(Pctf_attribute(Stdlib.fsta),self#constrctx"Pctf_attribute"[Stdlib.snda])|Pctf_extensiona->leta=self#extensionctxain(Pctf_extension(Stdlib.fsta),self#constrctx"Pctf_extension"[Stdlib.snda])methodclass_infos:'a.('ctx->'a->'a*'res)->'ctx->'aclass_infos->'aclass_infos*'res=fun_actx{pci_virt;pci_params;pci_name;pci_expr;pci_loc;pci_attributes}->letpci_virt=self#virtual_flagctxpci_virtinletpci_params=self#list(functx(a,b)->leta=self#core_typectxainletb=(functx(a,b)->leta=self#variancectxainletb=self#injectivityctxbin((Stdlib.fsta,Stdlib.fstb),self#tuplectx[Stdlib.snda;Stdlib.sndb]))ctxbin((Stdlib.fsta,Stdlib.fstb),self#tuplectx[Stdlib.snda;Stdlib.sndb]))ctxpci_paramsinletpci_name=self#locself#stringctxpci_nameinletpci_expr=_actxpci_exprinletpci_loc=self#locationctxpci_locinletpci_attributes=self#attributesctxpci_attributesin({pci_virt=Stdlib.fstpci_virt;pci_params=Stdlib.fstpci_params;pci_name=Stdlib.fstpci_name;pci_expr=Stdlib.fstpci_expr;pci_loc=Stdlib.fstpci_loc;pci_attributes=Stdlib.fstpci_attributes;},self#recordctx[("pci_virt",Stdlib.sndpci_virt);("pci_params",Stdlib.sndpci_params);("pci_name",Stdlib.sndpci_name);("pci_expr",Stdlib.sndpci_expr);("pci_loc",Stdlib.sndpci_loc);("pci_attributes",Stdlib.sndpci_attributes);])methodclass_description:'ctx->class_description->class_description*'res=self#class_infosself#class_typemethodclass_type_declaration:'ctx->class_type_declaration->class_type_declaration*'res=self#class_infosself#class_typemethodclass_expr:'ctx->class_expr->class_expr*'res=functx{pcl_desc;pcl_loc;pcl_attributes}->letpcl_desc=self#class_expr_descctxpcl_descinletpcl_loc=self#locationctxpcl_locinletpcl_attributes=self#attributesctxpcl_attributesin({pcl_desc=Stdlib.fstpcl_desc;pcl_loc=Stdlib.fstpcl_loc;pcl_attributes=Stdlib.fstpcl_attributes;},self#recordctx[("pcl_desc",Stdlib.sndpcl_desc);("pcl_loc",Stdlib.sndpcl_loc);("pcl_attributes",Stdlib.sndpcl_attributes);])methodclass_expr_desc:'ctx->class_expr_desc->class_expr_desc*'res=functxx->matchxwith|Pcl_constr(a,b)->leta=self#longident_locctxainletb=self#listself#core_typectxbin(Pcl_constr(Stdlib.fsta,Stdlib.fstb),self#constrctx"Pcl_constr"[Stdlib.snda;Stdlib.sndb])|Pcl_structurea->leta=self#class_structurectxain(Pcl_structure(Stdlib.fsta),self#constrctx"Pcl_structure"[Stdlib.snda])|Pcl_fun(a,b,c,d)->leta=self#arg_labelctxainletb=self#optionself#expressionctxbinletc=self#patternctxcinletd=self#class_exprctxdin(Pcl_fun(Stdlib.fsta,Stdlib.fstb,Stdlib.fstc,Stdlib.fstd),self#constrctx"Pcl_fun"[Stdlib.snda;Stdlib.sndb;Stdlib.sndc;Stdlib.sndd])|Pcl_apply(a,b)->leta=self#class_exprctxainletb=self#list(functx(a,b)->leta=self#arg_labelctxainletb=self#expressionctxbin((Stdlib.fsta,Stdlib.fstb),self#tuplectx[Stdlib.snda;Stdlib.sndb]))ctxbin(Pcl_apply(Stdlib.fsta,Stdlib.fstb),self#constrctx"Pcl_apply"[Stdlib.snda;Stdlib.sndb])|Pcl_let(a,b,c)->leta=self#rec_flagctxainletb=self#listself#value_bindingctxbinletc=self#class_exprctxcin(Pcl_let(Stdlib.fsta,Stdlib.fstb,Stdlib.fstc),self#constrctx"Pcl_let"[Stdlib.snda;Stdlib.sndb;Stdlib.sndc])|Pcl_constraint(a,b)->leta=self#class_exprctxainletb=self#class_typectxbin(Pcl_constraint(Stdlib.fsta,Stdlib.fstb),self#constrctx"Pcl_constraint"[Stdlib.snda;Stdlib.sndb])|Pcl_extensiona->leta=self#extensionctxain(Pcl_extension(Stdlib.fsta),self#constrctx"Pcl_extension"[Stdlib.snda])|Pcl_open(a,b)->leta=self#open_descriptionctxainletb=self#class_exprctxbin(Pcl_open(Stdlib.fsta,Stdlib.fstb),self#constrctx"Pcl_open"[Stdlib.snda;Stdlib.sndb])methodclass_structure:'ctx->class_structure->class_structure*'res=functx{pcstr_self;pcstr_fields}->letpcstr_self=self#patternctxpcstr_selfinletpcstr_fields=self#listself#class_fieldctxpcstr_fieldsin({pcstr_self=Stdlib.fstpcstr_self;pcstr_fields=Stdlib.fstpcstr_fields;},self#recordctx[("pcstr_self",Stdlib.sndpcstr_self);("pcstr_fields",Stdlib.sndpcstr_fields);])methodclass_field:'ctx->class_field->class_field*'res=functx{pcf_desc;pcf_loc;pcf_attributes}->letpcf_desc=self#class_field_descctxpcf_descinletpcf_loc=self#locationctxpcf_locinletpcf_attributes=self#attributesctxpcf_attributesin({pcf_desc=Stdlib.fstpcf_desc;pcf_loc=Stdlib.fstpcf_loc;pcf_attributes=Stdlib.fstpcf_attributes;},self#recordctx[("pcf_desc",Stdlib.sndpcf_desc);("pcf_loc",Stdlib.sndpcf_loc);("pcf_attributes",Stdlib.sndpcf_attributes);])methodclass_field_desc:'ctx->class_field_desc->class_field_desc*'res=functxx->matchxwith|Pcf_inherit(a,b,c)->leta=self#override_flagctxainletb=self#class_exprctxbinletc=self#option(self#locself#string)ctxcin(Pcf_inherit(Stdlib.fsta,Stdlib.fstb,Stdlib.fstc),self#constrctx"Pcf_inherit"[Stdlib.snda;Stdlib.sndb;Stdlib.sndc])|Pcf_vala->leta=(functx(a,b,c)->leta=self#locself#labelctxainletb=self#mutable_flagctxbinletc=self#class_field_kindctxcin((Stdlib.fsta,Stdlib.fstb,Stdlib.fstc),self#tuplectx[Stdlib.snda;Stdlib.sndb;Stdlib.sndc]))ctxain(Pcf_val(Stdlib.fsta),self#constrctx"Pcf_val"[Stdlib.snda])|Pcf_methoda->leta=(functx(a,b,c)->leta=self#locself#labelctxainletb=self#private_flagctxbinletc=self#class_field_kindctxcin((Stdlib.fsta,Stdlib.fstb,Stdlib.fstc),self#tuplectx[Stdlib.snda;Stdlib.sndb;Stdlib.sndc]))ctxain(Pcf_method(Stdlib.fsta),self#constrctx"Pcf_method"[Stdlib.snda])|Pcf_constrainta->leta=(functx(a,b)->leta=self#core_typectxainletb=self#core_typectxbin((Stdlib.fsta,Stdlib.fstb),self#tuplectx[Stdlib.snda;Stdlib.sndb]))ctxain(Pcf_constraint(Stdlib.fsta),self#constrctx"Pcf_constraint"[Stdlib.snda])|Pcf_initializera->leta=self#expressionctxain(Pcf_initializer(Stdlib.fsta),self#constrctx"Pcf_initializer"[Stdlib.snda])|Pcf_attributea->leta=self#attributectxain(Pcf_attribute(Stdlib.fsta),self#constrctx"Pcf_attribute"[Stdlib.snda])|Pcf_extensiona->leta=self#extensionctxain(Pcf_extension(Stdlib.fsta),self#constrctx"Pcf_extension"[Stdlib.snda])methodclass_field_kind:'ctx->class_field_kind->class_field_kind*'res=functxx->matchxwith|Cfk_virtuala->leta=self#core_typectxain(Cfk_virtual(Stdlib.fsta),self#constrctx"Cfk_virtual"[Stdlib.snda])|Cfk_concrete(a,b)->leta=self#override_flagctxainletb=self#expressionctxbin(Cfk_concrete(Stdlib.fsta,Stdlib.fstb),self#constrctx"Cfk_concrete"[Stdlib.snda;Stdlib.sndb])methodclass_declaration:'ctx->class_declaration->class_declaration*'res=self#class_infosself#class_exprmethodmodule_type:'ctx->module_type->module_type*'res=functx{pmty_desc;pmty_loc;pmty_attributes}->letpmty_desc=self#module_type_descctxpmty_descinletpmty_loc=self#locationctxpmty_locinletpmty_attributes=self#attributesctxpmty_attributesin({pmty_desc=Stdlib.fstpmty_desc;pmty_loc=Stdlib.fstpmty_loc;pmty_attributes=Stdlib.fstpmty_attributes;},self#recordctx[("pmty_desc",Stdlib.sndpmty_desc);("pmty_loc",Stdlib.sndpmty_loc);("pmty_attributes",Stdlib.sndpmty_attributes);])methodmodule_type_desc:'ctx->module_type_desc->module_type_desc*'res=functxx->matchxwith|Pmty_identa->leta=self#longident_locctxain(Pmty_ident(Stdlib.fsta),self#constrctx"Pmty_ident"[Stdlib.snda])|Pmty_signaturea->leta=self#signaturectxain(Pmty_signature(Stdlib.fsta),self#constrctx"Pmty_signature"[Stdlib.snda])|Pmty_functor(a,b)->leta=self#functor_parameterctxainletb=self#module_typectxbin(Pmty_functor(Stdlib.fsta,Stdlib.fstb),self#constrctx"Pmty_functor"[Stdlib.snda;Stdlib.sndb])|Pmty_with(a,b)->leta=self#module_typectxainletb=self#listself#with_constraintctxbin(Pmty_with(Stdlib.fsta,Stdlib.fstb),self#constrctx"Pmty_with"[Stdlib.snda;Stdlib.sndb])|Pmty_typeofa->leta=self#module_exprctxain(Pmty_typeof(Stdlib.fsta),self#constrctx"Pmty_typeof"[Stdlib.snda])|Pmty_extensiona->leta=self#extensionctxain(Pmty_extension(Stdlib.fsta),self#constrctx"Pmty_extension"[Stdlib.snda])|Pmty_aliasa->leta=self#longident_locctxain(Pmty_alias(Stdlib.fsta),self#constrctx"Pmty_alias"[Stdlib.snda])methodfunctor_parameter:'ctx->functor_parameter->functor_parameter*'res=functxx->matchxwith|Unit->(Unit,self#constrctx"Unit"[])|Named(a,b)->leta=self#loc(self#optionself#string)ctxainletb=self#module_typectxbin(Named(Stdlib.fsta,Stdlib.fstb),self#constrctx"Named"[Stdlib.snda;Stdlib.sndb])methodsignature:'ctx->signature->signature*'res=self#listself#signature_itemmethodsignature_item:'ctx->signature_item->signature_item*'res=functx{psig_desc;psig_loc}->letpsig_desc=self#signature_item_descctxpsig_descinletpsig_loc=self#locationctxpsig_locin({psig_desc=Stdlib.fstpsig_desc;psig_loc=Stdlib.fstpsig_loc},self#recordctx[("psig_desc",Stdlib.sndpsig_desc);("psig_loc",Stdlib.sndpsig_loc);])methodsignature_item_desc:'ctx->signature_item_desc->signature_item_desc*'res=functxx->matchxwith|Psig_valuea->leta=self#value_descriptionctxain(Psig_value(Stdlib.fsta),self#constrctx"Psig_value"[Stdlib.snda])|Psig_type(a,b)->leta=self#rec_flagctxainletb=self#listself#type_declarationctxbin(Psig_type(Stdlib.fsta,Stdlib.fstb),self#constrctx"Psig_type"[Stdlib.snda;Stdlib.sndb])|Psig_typesubsta->leta=self#listself#type_declarationctxain(Psig_typesubst(Stdlib.fsta),self#constrctx"Psig_typesubst"[Stdlib.snda])|Psig_typexta->leta=self#type_extensionctxain(Psig_typext(Stdlib.fsta),self#constrctx"Psig_typext"[Stdlib.snda])|Psig_exceptiona->leta=self#type_exceptionctxain(Psig_exception(Stdlib.fsta),self#constrctx"Psig_exception"[Stdlib.snda])|Psig_modulea->leta=self#module_declarationctxain(Psig_module(Stdlib.fsta),self#constrctx"Psig_module"[Stdlib.snda])|Psig_modsubsta->leta=self#module_substitutionctxain(Psig_modsubst(Stdlib.fsta),self#constrctx"Psig_modsubst"[Stdlib.snda])|Psig_recmodulea->leta=self#listself#module_declarationctxain(Psig_recmodule(Stdlib.fsta),self#constrctx"Psig_recmodule"[Stdlib.snda])|Psig_modtypea->leta=self#module_type_declarationctxain(Psig_modtype(Stdlib.fsta),self#constrctx"Psig_modtype"[Stdlib.snda])|Psig_modtypesubsta->leta=self#module_type_declarationctxain(Psig_modtypesubst(Stdlib.fsta),self#constrctx"Psig_modtypesubst"[Stdlib.snda])|Psig_opena->leta=self#open_descriptionctxain(Psig_open(Stdlib.fsta),self#constrctx"Psig_open"[Stdlib.snda])|Psig_includea->leta=self#include_descriptionctxain(Psig_include(Stdlib.fsta),self#constrctx"Psig_include"[Stdlib.snda])|Psig_classa->leta=self#listself#class_descriptionctxain(Psig_class(Stdlib.fsta),self#constrctx"Psig_class"[Stdlib.snda])|Psig_class_typea->leta=self#listself#class_type_declarationctxain(Psig_class_type(Stdlib.fsta),self#constrctx"Psig_class_type"[Stdlib.snda])|Psig_attributea->leta=self#attributectxain(Psig_attribute(Stdlib.fsta),self#constrctx"Psig_attribute"[Stdlib.snda])|Psig_extension(a,b)->leta=self#extensionctxainletb=self#attributesctxbin(Psig_extension(Stdlib.fsta,Stdlib.fstb),self#constrctx"Psig_extension"[Stdlib.snda;Stdlib.sndb])methodmodule_declaration:'ctx->module_declaration->module_declaration*'res=functx{pmd_name;pmd_type;pmd_attributes;pmd_loc}->letpmd_name=self#loc(self#optionself#string)ctxpmd_nameinletpmd_type=self#module_typectxpmd_typeinletpmd_attributes=self#attributesctxpmd_attributesinletpmd_loc=self#locationctxpmd_locin({pmd_name=Stdlib.fstpmd_name;pmd_type=Stdlib.fstpmd_type;pmd_attributes=Stdlib.fstpmd_attributes;pmd_loc=Stdlib.fstpmd_loc;},self#recordctx[("pmd_name",Stdlib.sndpmd_name);("pmd_type",Stdlib.sndpmd_type);("pmd_attributes",Stdlib.sndpmd_attributes);("pmd_loc",Stdlib.sndpmd_loc);])methodmodule_substitution:'ctx->module_substitution->module_substitution*'res=functx{pms_name;pms_manifest;pms_attributes;pms_loc}->letpms_name=self#locself#stringctxpms_nameinletpms_manifest=self#longident_locctxpms_manifestinletpms_attributes=self#attributesctxpms_attributesinletpms_loc=self#locationctxpms_locin({pms_name=Stdlib.fstpms_name;pms_manifest=Stdlib.fstpms_manifest;pms_attributes=Stdlib.fstpms_attributes;pms_loc=Stdlib.fstpms_loc;},self#recordctx[("pms_name",Stdlib.sndpms_name);("pms_manifest",Stdlib.sndpms_manifest);("pms_attributes",Stdlib.sndpms_attributes);("pms_loc",Stdlib.sndpms_loc);])methodmodule_type_declaration:'ctx->module_type_declaration->module_type_declaration*'res=functx{pmtd_name;pmtd_type;pmtd_attributes;pmtd_loc}->letpmtd_name=self#locself#stringctxpmtd_nameinletpmtd_type=self#optionself#module_typectxpmtd_typeinletpmtd_attributes=self#attributesctxpmtd_attributesinletpmtd_loc=self#locationctxpmtd_locin({pmtd_name=Stdlib.fstpmtd_name;pmtd_type=Stdlib.fstpmtd_type;pmtd_attributes=Stdlib.fstpmtd_attributes;pmtd_loc=Stdlib.fstpmtd_loc;},self#recordctx[("pmtd_name",Stdlib.sndpmtd_name);("pmtd_type",Stdlib.sndpmtd_type);("pmtd_attributes",Stdlib.sndpmtd_attributes);("pmtd_loc",Stdlib.sndpmtd_loc);])methodopen_infos:'a.('ctx->'a->'a*'res)->'ctx->'aopen_infos->'aopen_infos*'res=fun_actx{popen_expr;popen_override;popen_loc;popen_attributes}->letpopen_expr=_actxpopen_exprinletpopen_override=self#override_flagctxpopen_overrideinletpopen_loc=self#locationctxpopen_locinletpopen_attributes=self#attributesctxpopen_attributesin({popen_expr=Stdlib.fstpopen_expr;popen_override=Stdlib.fstpopen_override;popen_loc=Stdlib.fstpopen_loc;popen_attributes=Stdlib.fstpopen_attributes;},self#recordctx[("popen_expr",Stdlib.sndpopen_expr);("popen_override",Stdlib.sndpopen_override);("popen_loc",Stdlib.sndpopen_loc);("popen_attributes",Stdlib.sndpopen_attributes);])methodopen_description:'ctx->open_description->open_description*'res=self#open_infosself#longident_locmethodopen_declaration:'ctx->open_declaration->open_declaration*'res=self#open_infosself#module_exprmethodinclude_infos:'a.('ctx->'a->'a*'res)->'ctx->'ainclude_infos->'ainclude_infos*'res=fun_actx{pincl_mod;pincl_loc;pincl_attributes}->letpincl_mod=_actxpincl_modinletpincl_loc=self#locationctxpincl_locinletpincl_attributes=self#attributesctxpincl_attributesin({pincl_mod=Stdlib.fstpincl_mod;pincl_loc=Stdlib.fstpincl_loc;pincl_attributes=Stdlib.fstpincl_attributes;},self#recordctx[("pincl_mod",Stdlib.sndpincl_mod);("pincl_loc",Stdlib.sndpincl_loc);("pincl_attributes",Stdlib.sndpincl_attributes);])methodinclude_description:'ctx->include_description->include_description*'res=self#include_infosself#module_typemethodinclude_declaration:'ctx->include_declaration->include_declaration*'res=self#include_infosself#module_exprmethodwith_constraint:'ctx->with_constraint->with_constraint*'res=functxx->matchxwith|Pwith_type(a,b)->leta=self#longident_locctxainletb=self#type_declarationctxbin(Pwith_type(Stdlib.fsta,Stdlib.fstb),self#constrctx"Pwith_type"[Stdlib.snda;Stdlib.sndb])|Pwith_module(a,b)->leta=self#longident_locctxainletb=self#longident_locctxbin(Pwith_module(Stdlib.fsta,Stdlib.fstb),self#constrctx"Pwith_module"[Stdlib.snda;Stdlib.sndb])|Pwith_modtype(a,b)->leta=self#longident_locctxainletb=self#module_typectxbin(Pwith_modtype(Stdlib.fsta,Stdlib.fstb),self#constrctx"Pwith_modtype"[Stdlib.snda;Stdlib.sndb])|Pwith_modtypesubst(a,b)->leta=self#longident_locctxainletb=self#module_typectxbin(Pwith_modtypesubst(Stdlib.fsta,Stdlib.fstb),self#constrctx"Pwith_modtypesubst"[Stdlib.snda;Stdlib.sndb])|Pwith_typesubst(a,b)->leta=self#longident_locctxainletb=self#type_declarationctxbin(Pwith_typesubst(Stdlib.fsta,Stdlib.fstb),self#constrctx"Pwith_typesubst"[Stdlib.snda;Stdlib.sndb])|Pwith_modsubst(a,b)->leta=self#longident_locctxainletb=self#longident_locctxbin(Pwith_modsubst(Stdlib.fsta,Stdlib.fstb),self#constrctx"Pwith_modsubst"[Stdlib.snda;Stdlib.sndb])methodmodule_expr:'ctx->module_expr->module_expr*'res=functx{pmod_desc;pmod_loc;pmod_attributes}->letpmod_desc=self#module_expr_descctxpmod_descinletpmod_loc=self#locationctxpmod_locinletpmod_attributes=self#attributesctxpmod_attributesin({pmod_desc=Stdlib.fstpmod_desc;pmod_loc=Stdlib.fstpmod_loc;pmod_attributes=Stdlib.fstpmod_attributes;},self#recordctx[("pmod_desc",Stdlib.sndpmod_desc);("pmod_loc",Stdlib.sndpmod_loc);("pmod_attributes",Stdlib.sndpmod_attributes);])methodmodule_expr_desc:'ctx->module_expr_desc->module_expr_desc*'res=functxx->matchxwith|Pmod_identa->leta=self#longident_locctxain(Pmod_ident(Stdlib.fsta),self#constrctx"Pmod_ident"[Stdlib.snda])|Pmod_structurea->leta=self#structurectxain(Pmod_structure(Stdlib.fsta),self#constrctx"Pmod_structure"[Stdlib.snda])|Pmod_functor(a,b)->leta=self#functor_parameterctxainletb=self#module_exprctxbin(Pmod_functor(Stdlib.fsta,Stdlib.fstb),self#constrctx"Pmod_functor"[Stdlib.snda;Stdlib.sndb])|Pmod_apply(a,b)->leta=self#module_exprctxainletb=self#module_exprctxbin(Pmod_apply(Stdlib.fsta,Stdlib.fstb),self#constrctx"Pmod_apply"[Stdlib.snda;Stdlib.sndb])|Pmod_constraint(a,b)->leta=self#module_exprctxainletb=self#module_typectxbin(Pmod_constraint(Stdlib.fsta,Stdlib.fstb),self#constrctx"Pmod_constraint"[Stdlib.snda;Stdlib.sndb])|Pmod_unpacka->leta=self#expressionctxain(Pmod_unpack(Stdlib.fsta),self#constrctx"Pmod_unpack"[Stdlib.snda])|Pmod_extensiona->leta=self#extensionctxain(Pmod_extension(Stdlib.fsta),self#constrctx"Pmod_extension"[Stdlib.snda])methodstructure:'ctx->structure->structure*'res=self#listself#structure_itemmethodstructure_item:'ctx->structure_item->structure_item*'res=functx{pstr_desc;pstr_loc}->letpstr_desc=self#structure_item_descctxpstr_descinletpstr_loc=self#locationctxpstr_locin({pstr_desc=Stdlib.fstpstr_desc;pstr_loc=Stdlib.fstpstr_loc},self#recordctx[("pstr_desc",Stdlib.sndpstr_desc);("pstr_loc",Stdlib.sndpstr_loc);])methodstructure_item_desc:'ctx->structure_item_desc->structure_item_desc*'res=functxx->matchxwith|Pstr_eval(a,b)->leta=self#expressionctxainletb=self#attributesctxbin(Pstr_eval(Stdlib.fsta,Stdlib.fstb),self#constrctx"Pstr_eval"[Stdlib.snda;Stdlib.sndb])|Pstr_value(a,b)->leta=self#rec_flagctxainletb=self#listself#value_bindingctxbin(Pstr_value(Stdlib.fsta,Stdlib.fstb),self#constrctx"Pstr_value"[Stdlib.snda;Stdlib.sndb])|Pstr_primitivea->leta=self#value_descriptionctxain(Pstr_primitive(Stdlib.fsta),self#constrctx"Pstr_primitive"[Stdlib.snda])|Pstr_type(a,b)->leta=self#rec_flagctxainletb=self#listself#type_declarationctxbin(Pstr_type(Stdlib.fsta,Stdlib.fstb),self#constrctx"Pstr_type"[Stdlib.snda;Stdlib.sndb])|Pstr_typexta->leta=self#type_extensionctxain(Pstr_typext(Stdlib.fsta),self#constrctx"Pstr_typext"[Stdlib.snda])|Pstr_exceptiona->leta=self#type_exceptionctxain(Pstr_exception(Stdlib.fsta),self#constrctx"Pstr_exception"[Stdlib.snda])|Pstr_modulea->leta=self#module_bindingctxain(Pstr_module(Stdlib.fsta),self#constrctx"Pstr_module"[Stdlib.snda])|Pstr_recmodulea->leta=self#listself#module_bindingctxain(Pstr_recmodule(Stdlib.fsta),self#constrctx"Pstr_recmodule"[Stdlib.snda])|Pstr_modtypea->leta=self#module_type_declarationctxain(Pstr_modtype(Stdlib.fsta),self#constrctx"Pstr_modtype"[Stdlib.snda])|Pstr_opena->leta=self#open_declarationctxain(Pstr_open(Stdlib.fsta),self#constrctx"Pstr_open"[Stdlib.snda])|Pstr_classa->leta=self#listself#class_declarationctxain(Pstr_class(Stdlib.fsta),self#constrctx"Pstr_class"[Stdlib.snda])|Pstr_class_typea->leta=self#listself#class_type_declarationctxain(Pstr_class_type(Stdlib.fsta),self#constrctx"Pstr_class_type"[Stdlib.snda])|Pstr_includea->leta=self#include_declarationctxain(Pstr_include(Stdlib.fsta),self#constrctx"Pstr_include"[Stdlib.snda])|Pstr_attributea->leta=self#attributectxain(Pstr_attribute(Stdlib.fsta),self#constrctx"Pstr_attribute"[Stdlib.snda])|Pstr_extension(a,b)->leta=self#extensionctxainletb=self#attributesctxbin(Pstr_extension(Stdlib.fsta,Stdlib.fstb),self#constrctx"Pstr_extension"[Stdlib.snda;Stdlib.sndb])methodvalue_binding:'ctx->value_binding->value_binding*'res=functx{pvb_pat;pvb_expr;pvb_attributes;pvb_loc}->letpvb_pat=self#patternctxpvb_patinletpvb_expr=self#expressionctxpvb_exprinletpvb_attributes=self#attributesctxpvb_attributesinletpvb_loc=self#locationctxpvb_locin({pvb_pat=Stdlib.fstpvb_pat;pvb_expr=Stdlib.fstpvb_expr;pvb_attributes=Stdlib.fstpvb_attributes;pvb_loc=Stdlib.fstpvb_loc;},self#recordctx[("pvb_pat",Stdlib.sndpvb_pat);("pvb_expr",Stdlib.sndpvb_expr);("pvb_attributes",Stdlib.sndpvb_attributes);("pvb_loc",Stdlib.sndpvb_loc);])methodmodule_binding:'ctx->module_binding->module_binding*'res=functx{pmb_name;pmb_expr;pmb_attributes;pmb_loc}->letpmb_name=self#loc(self#optionself#string)ctxpmb_nameinletpmb_expr=self#module_exprctxpmb_exprinletpmb_attributes=self#attributesctxpmb_attributesinletpmb_loc=self#locationctxpmb_locin({pmb_name=Stdlib.fstpmb_name;pmb_expr=Stdlib.fstpmb_expr;pmb_attributes=Stdlib.fstpmb_attributes;pmb_loc=Stdlib.fstpmb_loc;},self#recordctx[("pmb_name",Stdlib.sndpmb_name);("pmb_expr",Stdlib.sndpmb_expr);("pmb_attributes",Stdlib.sndpmb_attributes);("pmb_loc",Stdlib.sndpmb_loc);])methodtoplevel_phrase:'ctx->toplevel_phrase->toplevel_phrase*'res=functxx->matchxwith|Ptop_defa->leta=self#structurectxain(Ptop_def(Stdlib.fsta),self#constrctx"Ptop_def"[Stdlib.snda])|Ptop_dira->leta=self#toplevel_directivectxain(Ptop_dir(Stdlib.fsta),self#constrctx"Ptop_dir"[Stdlib.snda])methodtoplevel_directive:'ctx->toplevel_directive->toplevel_directive*'res=functx{pdir_name;pdir_arg;pdir_loc}->letpdir_name=self#locself#stringctxpdir_nameinletpdir_arg=self#optionself#directive_argumentctxpdir_arginletpdir_loc=self#locationctxpdir_locin({pdir_name=Stdlib.fstpdir_name;pdir_arg=Stdlib.fstpdir_arg;pdir_loc=Stdlib.fstpdir_loc;},self#recordctx[("pdir_name",Stdlib.sndpdir_name);("pdir_arg",Stdlib.sndpdir_arg);("pdir_loc",Stdlib.sndpdir_loc);])methoddirective_argument:'ctx->directive_argument->directive_argument*'res=functx{pdira_desc;pdira_loc}->letpdira_desc=self#directive_argument_descctxpdira_descinletpdira_loc=self#locationctxpdira_locin({pdira_desc=Stdlib.fstpdira_desc;pdira_loc=Stdlib.fstpdira_loc;},self#recordctx[("pdira_desc",Stdlib.sndpdira_desc);("pdira_loc",Stdlib.sndpdira_loc);])methoddirective_argument_desc:'ctx->directive_argument_desc->directive_argument_desc*'res=functxx->matchxwith|Pdir_stringa->leta=self#stringctxain(Pdir_string(Stdlib.fsta),self#constrctx"Pdir_string"[Stdlib.snda])|Pdir_int(a,b)->leta=self#stringctxainletb=self#optionself#charctxbin(Pdir_int(Stdlib.fsta,Stdlib.fstb),self#constrctx"Pdir_int"[Stdlib.snda;Stdlib.sndb])|Pdir_identa->leta=self#longidentctxain(Pdir_ident(Stdlib.fsta),self#constrctx"Pdir_ident"[Stdlib.snda])|Pdir_boola->leta=self#boolctxain(Pdir_bool(Stdlib.fsta),self#constrctx"Pdir_bool"[Stdlib.snda])methodcases:'ctx->cases->cases*'res=self#listself#caseend[@@@end][@@@end]