1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034603560366037603860396040604160426043604460456046604760486049605060516052605360546055605660576058605960606061606260636064606560666067606860696070607160726073607460756076607760786079608060816082608360846085608660876088608960906091609260936094609560966097609860996100610161026103610461056106610761086109611061116112611361146115611661176118611961206121612261236124612561266127612861296130613161326133613461356136613761386139614061416142614361446145614661476148614961506151615261536154615561566157615861596160616161626163616461656166616761686169617061716172617361746175617661776178617961806181618261836184618561866187618861896190619161926193619461956196619761986199620062016202620362046205620662076208620962106211621262136214621562166217621862196220622162226223622462256226622762286229623062316232623362346235623662376238623962406241624262436244624562466247624862496250625162526253625462556256625762586259626062616262626362646265626662676268626962706271627262736274627562766277627862796280628162826283628462856286628762886289629062916292629362946295629662976298629963006301630263036304630563066307630863096310631163126313631463156316631763186319632063216322632363246325632663276328632963306331633263336334633563366337633863396340634163426343634463456346634763486349635063516352635363546355635663576358635963606361636263636364636563666367636863696370637163726373637463756376637763786379638063816382638363846385638663876388638963906391639263936394639563966397639863996400640164026403640464056406640764086409641064116412641364146415641664176418641964206421642264236424642564266427642864296430643164326433643464356436643764386439644064416442644364446445644664476448644964506451645264536454645564566457645864596460646164626463646464656466646764686469647064716472647364746475647664776478647964806481648264836484648564866487648864896490649164926493649464956496649764986499650065016502650365046505650665076508650965106511651265136514651565166517651865196520652165226523652465256526652765286529653065316532653365346535653665376538653965406541654265436544654565466547654865496550655165526553655465556556655765586559656065616562656365646565656665676568656965706571657265736574657565766577657865796580658165826583658465856586658765886589659065916592659365946595659665976598659966006601660266036604660566066607660866096610661166126613661466156616661766186619662066216622662366246625662666276628662966306631663266336634663566366637663866396640664166426643664466456646664766486649665066516652665366546655665666576658665966606661666266636664666566666667666866696670667166726673667466756676667766786679668066816682668366846685668666876688668966906691669266936694669566966697669866996700670167026703670467056706670767086709671067116712671367146715671667176718671967206721672267236724672567266727672867296730673167326733673467356736673767386739674067416742674367446745674667476748674967506751675267536754675567566757675867596760676167626763676467656766676767686769677067716772677367746775677667776778677967806781678267836784678567866787678867896790679167926793679467956796679767986799680068016802680368046805680668076808680968106811681268136814681568166817681868196820682168226823682468256826682768286829683068316832683368346835683668376838683968406841684268436844684568466847684868496850685168526853685468556856685768586859686068616862686368646865686668676868686968706871687268736874687568766877687868796880688168826883688468856886688768886889689068916892689368946895689668976898689969006901690269036904690569066907690869096910691169126913691469156916691769186919692069216922692369246925692669276928692969306931693269336934693569366937693869396940694169426943694469456946694769486949695069516952695369546955695669576958695969606961696269636964696569666967696869696970697169726973697469756976697769786979698069816982698369846985698669876988698969906991699269936994699569966997699869997000700170027003700470057006700770087009701070117012701370147015701670177018701970207021702270237024702570267027702870297030703170327033703470357036703770387039704070417042704370447045704670477048704970507051705270537054705570567057705870597060706170627063706470657066706770687069707070717072707370747075707670777078707970807081708270837084708570867087708870897090709170927093709470957096709770987099710071017102710371047105710671077108710971107111711271137114711571167117711871197120712171227123712471257126712771287129713071317132713371347135713671377138713971407141714271437144714571467147714871497150715171527153715471557156715771587159716071617162716371647165716671677168716971707171717271737174717571767177717871797180718171827183718471857186718771887189719071917192719371947195719671977198719972007201720272037204720572067207720872097210721172127213721472157216721772187219722072217222722372247225722672277228722972307231723272337234723572367237723872397240724172427243724472457246724772487249725072517252725372547255725672577258725972607261726272637264726572667267726872697270727172727273727472757276727772787279728072817282728372847285728672877288728972907291729272937294729572967297729872997300730173027303730473057306730773087309731073117312731373147315731673177318731973207321732273237324732573267327732873297330733173327333733473357336733773387339734073417342734373447345734673477348734973507351735273537354735573567357735873597360736173627363736473657366736773687369737073717372737373747375737673777378737973807381738273837384738573867387738873897390739173927393739473957396739773987399740074017402740374047405740674077408740974107411741274137414741574167417741874197420742174227423742474257426742774287429743074317432743374347435743674377438743974407441744274437444744574467447744874497450745174527453745474557456745774587459746074617462746374647465746674677468746974707471747274737474747574767477747874797480748174827483748474857486748774887489749074917492749374947495749674977498749975007501750275037504750575067507750875097510751175127513751475157516751775187519752075217522752375247525752675277528752975307531753275337534753575367537753875397540754175427543754475457546754775487549755075517552755375547555755675577558755975607561756275637564756575667567756875697570757175727573757475757576757775787579758075817582758375847585758675877588758975907591759275937594759575967597759875997600760176027603760476057606760776087609761076117612761376147615761676177618761976207621762276237624762576267627762876297630763176327633763476357636763776387639764076417642764376447645764676477648764976507651765276537654765576567657765876597660766176627663766476657666766776687669767076717672767376747675767676777678767976807681768276837684768576867687768876897690769176927693769476957696769776987699770077017702770377047705770677077708770977107711771277137714771577167717771877197720772177227723772477257726772777287729773077317732773377347735773677377738773977407741774277437744774577467747774877497750775177527753775477557756775777587759776077617762776377647765776677677768776977707771777277737774777577767777777877797780778177827783778477857786778777887789779077917792779377947795779677977798779978007801780278037804780578067807780878097810781178127813781478157816781778187819782078217822782378247825782678277828782978307831783278337834783578367837783878397840784178427843784478457846784778487849785078517852785378547855785678577858785978607861786278637864786578667867786878697870787178727873787478757876787778787879788078817882788378847885788678877888788978907891789278937894789578967897789878997900790179027903790479057906790779087909791079117912791379147915791679177918791979207921792279237924792579267927792879297930793179327933793479357936793779387939794079417942794379447945794679477948794979507951795279537954795579567957795879597960796179627963796479657966796779687969797079717972797379747975797679777978797979807981798279837984798579867987798879897990799179927993799479957996799779987999800080018002800380048005800680078008800980108011801280138014801580168017801880198020802180228023802480258026802780288029803080318032803380348035803680378038803980408041804280438044804580468047804880498050805180528053805480558056805780588059806080618062806380648065806680678068806980708071807280738074807580768077807880798080808180828083808480858086808780888089809080918092809380948095809680978098809981008101810281038104810581068107810881098110811181128113811481158116811781188119812081218122812381248125812681278128812981308131813281338134813581368137813881398140814181428143814481458146814781488149815081518152815381548155815681578158815981608161816281638164816581668167816881698170817181728173817481758176817781788179818081818182818381848185818681878188818981908191819281938194819581968197819881998200820182028203820482058206820782088209821082118212821382148215821682178218821982208221822282238224822582268227822882298230(**************************************************************************)(* *)(* 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 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(* 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(* 'c' *)|Pconst_stringofstring*location*stringoption(* "constant"
{delim|other constant|delim}
The location span the content of the string, without the delimiters.
*)|Pconst_floatofstring*charoption(* 3.4 2e5 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;}(* [@id ARG]
[@@id ARG]
Metadata containers passed around within the AST.
The compiler ignores unknown attributes.
*)andextension=stringloc*payload(* [%id ARG]
[%%id ARG]
Sub-language placeholder -- rejected by the typechecker.
*)andattributes=attributelistandpayload=Parsetree.payload=|PStrofstructure|PSigofsignature(* : SIG *)|PTypofcore_type(* : T *)|PPatofpattern*expressionoption(* ? P or ? P when E *)(* Type expressions *)(** {1 Core language} *)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 *)|Ptyp_arrowofarg_label*core_type*core_type(* T1 -> T2 Simple
~l:T1 -> T2 Labelled
?l:T1 -> T2 Optional
*)|Ptyp_tupleofcore_typelist(* T1 * ... * Tn
Invariant: n >= 2
*)|Ptyp_constroflongident_loc*core_typelist(* tconstr
T tconstr
(T1, ..., Tn) tconstr
*)|Ptyp_objectofobject_fieldlist*closed_flag(* < l1:T1; ...; ln:Tn > (flag = Closed)
< l1:T1; ...; ln:Tn; .. > (flag = Open)
*)|Ptyp_classoflongident_loc*core_typelist(* #tconstr
T #tconstr
(T1, ..., Tn) #tconstr
*)|Ptyp_aliasofcore_type*string(* T as 'a *)|Ptyp_variantofrow_fieldlist*closed_flag*labellistoption(* [ `A|`B ] (flag = Closed; labels = None)
[> `A|`B ] (flag = Open; labels = None)
[< `A|`B ] (flag = Closed; labels = Some [])
[< `A|`B > `X `Y ](flag = Closed; labels = Some ["X";"Y"])
*)|Ptyp_polyofstringloclist*core_type(* 'a1 ... 'an. T
Can only appear in the following context:
- As the core_type of a Ppat_constraint node corresponding
to a constraint on a let-binding: let x : 'a1 ... 'an. T
= e ...
- Under Cfk_virtual for methods (not values).
- As the core_type of a Pctf_method node.
- As the core_type of a Pexp_poly node.
- As the pld_type field of a label_declaration.
- As a core_type of a Ptyp_object node.
*)|Ptyp_packageofpackage_type(* (module S) *)|Ptyp_extensionofextension(* [%id] *)andpackage_type=longident_loc*(longident_loc*core_type)list(*
(module S)
(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(* [`A] ( true, [] )
[`A of T] ( false, [T] )
[`A of T1 & .. & Tn] ( false, [T1;...Tn] )
[`A of & T1 & .. & Tn] ( true, [T1;...Tn] )
- The 2nd 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)
- TODO: switch to a record representation, and keep location
*)|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(* 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(* _ *)|Ppat_varofstringloc(* x *)|Ppat_aliasofpattern*stringloc(* P as 'a *)|Ppat_constantofconstant(* 1, 'a', "true", 1.0, 1l, 1L, 1n *)|Ppat_intervalofconstant*constant(* 'a'..'z'
Other forms of interval are recognized by the parser
but rejected by the type-checker. *)|Ppat_tupleofpatternlist(* (P1, ..., Pn)
Invariant: n >= 2
*)|Ppat_constructoflongident_loc*patternoption(* C None
C P Some P
C (P1, ..., Pn) Some (Ppat_tuple [P1; ...; Pn])
*)|Ppat_variantoflabel*patternoption(* `A (None)
`A P (Some P)
*)|Ppat_recordof(longident_loc*pattern)list*closed_flag(* { l1=P1; ...; ln=Pn } (flag = Closed)
{ l1=P1; ...; ln=Pn; _} (flag = Open)
Invariant: n > 0
*)|Ppat_arrayofpatternlist(* [| P1; ...; Pn |] *)|Ppat_orofpattern*pattern(* P1 | P2 *)|Ppat_constraintofpattern*core_type(* (P : T) *)|Ppat_typeoflongident_loc(* #tconst *)|Ppat_lazyofpattern(* lazy P *)|Ppat_unpackofstringoptionloc(* (module P)
Note: (module P : S) is represented as
Ppat_constraint(Ppat_unpack, Ptyp_package)
*)|Ppat_exceptionofpattern(* exception P *)|Ppat_extensionofextension(* [%id] *)|Ppat_openoflongident_loc*pattern(* M.(P) *)(* 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(* x
M.x
*)|Pexp_constantofconstant(* 1, 'a', "true", 1.0, 1l, 1L, 1n *)|Pexp_letofrec_flag*value_bindinglist*expression(* let P1 = E1 and ... and Pn = EN in E (flag = Nonrecursive)
let rec P1 = E1 and ... and Pn = EN in E (flag = Recursive)
*)|Pexp_functionofcases(* function P1 -> E1 | ... | Pn -> En *)|Pexp_funofarg_label*expressionoption*pattern*expression(* fun P -> E1 (Simple, None)
fun ~l:P -> E1 (Labelled l, None)
fun ?l:P -> E1 (Optional l, None)
fun ?l:(P = E0) -> E1 (Optional l, Some E0)
Notes:
- If E0 is provided, only Optional is allowed.
- "fun P1 P2 .. Pn -> E1" is represented as nested Pexp_fun.
- "let f P = E" is represented using Pexp_fun.
*)|Pexp_applyofexpression*(arg_label*expression)list(* E0 ~l1:E1 ... ~ln:En
li can be empty (non labeled argument) or start with '?'
(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(* (E1, ..., En)
Invariant: n >= 2
*)|Pexp_constructoflongident_loc*expressionoption(* C None
C E Some E
C (E1, ..., En) Some (Pexp_tuple[E1;...;En])
*)|Pexp_variantoflabel*expressionoption(* `A (None)
`A E (Some E)
*)|Pexp_recordof(longident_loc*expression)list*expressionoption(* { l1=P1; ...; ln=Pn } (None)
{ E0 with l1=P1; ...; ln=Pn } (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(* for i = E1 to E2 do E3 done (flag = Upto)
for i = E1 downto E2 do E3 done (flag = Downto)
*)|Pexp_constraintofexpression*core_type(* (E : T) *)|Pexp_coerceofexpression*core_typeoption*core_type(* (E :> T) (None, T)
(E : T0 :> T) (Some T0, T)
*)|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 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, Ptyp_package S) *)|Pexp_openofopen_declaration*expression(* M.(E)
let open M in E
let! open M in E *)|Pexp_letopofletop(* let* P = E in E
let* P = E and* P = E in E *)|Pexp_extensionofextension(* [%id] *)|Pexp_unreachable(* . *)andcase=Parsetree.case={(* (P -> E) or (P when E0 -> E) *)pc_lhs:pattern;pc_guard:expressionoption;pc_rhs:expression;}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;}(* 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;}(*
val x: T (prim = [])
external x: T = "s1" ... "sn" (prim = ["s1";..."sn"])
*)(* Type declarations *)andtype_declaration=Parsetree.type_declaration={ptype_name:stringloc;ptype_params:(core_type*(variance*injectivity))list;(* ('a1,...'an) t; None represents _*)ptype_cstrs:(core_type*core_type*location)list;(* ... constraint T1=T1' ... constraint Tn=Tn' *)ptype_kind:type_kind;ptype_private:private_flag;(* = private ... *)ptype_manifest:core_typeoption;(* = T *)ptype_attributes:attributes;(* ... [@@id1] [@@id2] *)ptype_loc:location;}(*
type t (abstract, no manifest)
type t = T0 (abstract, manifest=T0)
type t = C of T | ... (variant, no manifest)
type t = T0 = C of T | ... (variant, manifest=T0)
type t = {l: T; ...} (record, no manifest)
type t = T0 = {l : T; ...} (record, manifest=T0)
type t = .. (open, no manifest)
*)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; ... } (mutable=Immutable)
{ ...; mutable l: T; ... } (mutable=Mutable)
Note: T can be a Ptyp_poly.
*)andconstructor_declaration=Parsetree.constructor_declaration={pcd_name:stringloc;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(*
| C of T1 * ... * Tn (res = None, args = Pcstr_tuple [])
| C: T0 (res = Some T0, args = [])
| C: T1 * ... * Tn -> T0 (res = Some T0, args = Pcstr_tuple)
| C of {...} (res = None, args = Pcstr_record)
| C: {...} -> T0 (res = Some T0, args = Pcstr_record)
| C of {...} as t (res = None, 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] *)}(*
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;}andextension_constructor_kind=Parsetree.extension_constructor_kind=|Pext_declofconstructor_arguments*core_typeoption(*
| C of T1 * ... * Tn ([T1; ...; Tn], None)
| C: T0 ([], Some T0)
| C: T1 * ... * Tn -> T0 ([T1; ...; Tn], Some T0)
*)|Pext_rebindoflongident_loc(*
| C = D
*)(* Type expressions for the class language *)(** {1 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(* T -> CT Simple
~l:T -> CT Labelled l
?l:T -> CT 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;}(* object('selfpat) ... end
object ... end (self = 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 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] *)}(* class c = ...
class ['a1,...,'an] c = ...
class virtual c = ...
Also used for "class type" declaration.
*)andclass_description=class_typeclass_infosandclass_type_declaration=class_typeclass_infos(* 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
['a1, ..., 'an] c *)|Pcl_structureofclass_structure(* object ... end *)|Pcl_funofarg_label*expressionoption*pattern*class_expr(* fun P -> CE (Simple, None)
fun ~l:P -> CE (Labelled l, None)
fun ?l:P -> CE (Optional l, None)
fun ?l:(P = E0) -> CE (Optional l, Some E0)
*)|Pcl_applyofclass_expr*(arg_label*expression)list(* 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(* let P1 = E1 and ... and Pn = EN in CE (flag = Nonrecursive)
let rec P1 = E1 and ... and Pn = EN in CE (flag = 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;}(* object(selfpat) ... end
object ... end (self = 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(* inherit CE
inherit CE as x
inherit! CE
inherit! CE as x
*)|Pcf_valof(labelloc*mutable_flag*class_field_kind)(* val x = E
val virtual x: T
*)|Pcf_methodof(labelloc*private_flag*class_field_kind)(* method x = E (E can be a Pexp_poly)
method virtual x: T (T can be a 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(* Type expressions for the module language *)(** {1 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(* 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(* (X : MT) Some X, MT
(_ : MT) None, MT *)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 : 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
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;}(* S : MT *)andmodule_substitution=Parsetree.module_substitution={pms_name:stringloc;pms_manifest:longident_loc;pms_attributes:attributes;pms_loc:location;}andmodule_type_declaration=Parsetree.module_type_declaration={pmtd_name:stringloc;pmtd_type:module_typeoption;pmtd_attributes:attributes;(* ... [@@id1] [@@id2] *)pmtd_loc:location;}(* S = MT
S (abstract module type declaration, pmtd_type = None)
*)and'aopen_infos='aParsetree.open_infos={popen_expr:'a;popen_override:override_flag;popen_loc:location;popen_attributes:attributes;}andopen_description=longident_locopen_infos(* open! X - popen_override = Override (silences the 'used identifier
shadowing' warning)
open X - popen_override = Fresh
*)andopen_declaration=module_expropen_infosand'ainclude_infos='aParsetree.include_infos={pincl_mod:'a;pincl_loc:location;pincl_attributes:attributes;}andinclude_description=module_typeinclude_infos(* include MT *)andinclude_declaration=module_exprinclude_infos(* 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_typesubstoflongident_loc*type_declaration(* with type X.t := ..., same format as [Pwith_type] *)|Pwith_modsubstoflongident_loc*longident_loc(* with module X.Y := Z *)(* 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(* let P1 = E1 and ... and Pn = EN (flag = Nonrecursive)
let rec P1 = E1 and ... and Pn = EN (flag = 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;}(* X = ME *)(* Toplevel phrases *)(** {1 Toplevel} *)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#optionself#patternbinPpat_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_args;pcd_res;pcd_loc;pcd_attributes}->letpcd_name=self#locself#stringpcd_nameinletpcd_args=self#constructor_argumentspcd_argsinletpcd_res=self#optionself#core_typepcd_resinletpcd_loc=self#locationpcd_locinletpcd_attributes=self#attributespcd_attributesin{pcd_name;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)->leta=self#constructor_argumentsainletb=self#optionself#core_typebinPext_decl(a,b)|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_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_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#optionself#patternb|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_args;pcd_res;pcd_loc;pcd_attributes}->self#locself#stringpcd_name;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)->self#constructor_argumentsa;self#optionself#core_typeb|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_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_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#optionself#patternbaccinacc|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_args;pcd_res;pcd_loc;pcd_attributes}acc->letacc=self#locself#stringpcd_nameaccinletacc=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)->letacc=self#constructor_argumentsaaccinletacc=self#optionself#core_typebaccinacc|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_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_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#optionself#patternbaccin(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_args;pcd_res;pcd_loc;pcd_attributes}acc->letpcd_name,acc=self#locself#stringpcd_nameaccinletpcd_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_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)->leta,acc=self#constructor_argumentsaaccinletb,acc=self#optionself#core_typebaccin(Pext_decl(a,b),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_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_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#optionself#patternctxbinPpat_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_args;pcd_res;pcd_loc;pcd_attributes}->letpcd_name=self#locself#stringctxpcd_nameinletpcd_args=self#constructor_argumentsctxpcd_argsinletpcd_res=self#optionself#core_typectxpcd_resinletpcd_loc=self#locationctxpcd_locinletpcd_attributes=self#attributesctxpcd_attributesin{pcd_name;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)->leta=self#constructor_argumentsctxainletb=self#optionself#core_typectxbinPext_decl(a,b)|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_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_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#optionself#patternbinself#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_args;pcd_res;pcd_loc;pcd_attributes}->letpcd_name=self#locself#stringpcd_nameinletpcd_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_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)->leta=self#constructor_argumentsainletb=self#optionself#core_typebinself#constr"Pext_decl"[a;b]|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_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_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#caseend[@@@end]