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