123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653765476557656765776587659766076617662766376647665766676677668766976707671767276737674767576767677767876797680768176827683768476857686768776887689769076917692769376947695769676977698769977007701770277037704770577067707770877097710771177127713771477157716771777187719772077217722772377247725772677277728772977307731773277337734773577367737773877397740774177427743774477457746774777487749775077517752775377547755775677577758775977607761776277637764776577667767776877697770777177727773777477757776777777787779778077817782778377847785778677877788778977907791779277937794779577967797779877997800780178027803780478057806780778087809781078117812781378147815781678177818781978207821782278237824782578267827782878297830783178327833783478357836783778387839784078417842784378447845784678477848784978507851785278537854785578567857785878597860786178627863786478657866786778687869787078717872787378747875787678777878787978807881788278837884788578867887788878897890789178927893789478957896789778987899790079017902790379047905790679077908790979107911791279137914791579167917791879197920792179227923792479257926792779287929793079317932793379347935793679377938793979407941794279437944794579467947794879497950795179527953795479557956795779587959796079617962796379647965796679677968796979707971797279737974797579767977797879797980798179827983798479857986798779887989799079917992799379947995799679977998799980008001800280038004800580068007800880098010801180128013801480158016801780188019802080218022802380248025802680278028802980308031803280338034803580368037803880398040804180428043804480458046804780488049805080518052805380548055805680578058805980608061806280638064806580668067806880698070807180728073807480758076807780788079808080818082808380848085808680878088808980908091809280938094809580968097809880998100810181028103810481058106810781088109811081118112811381148115811681178118811981208121812281238124812581268127812881298130813181328133813481358136813781388139814081418142814381448145814681478148814981508151815281538154815581568157815881598160816181628163816481658166816781688169817081718172817381748175817681778178817981808181818281838184818581868187818881898190819181928193819481958196819781988199820082018202820382048205820682078208820982108211821282138214821582168217821882198220822182228223822482258226822782288229823082318232823382348235823682378238823982408241824282438244824582468247824882498250825182528253825482558256825782588259826082618262826382648265826682678268826982708271827282738274827582768277827882798280828182828283828482858286828782888289829082918292829382948295829682978298829983008301830283038304830583068307830883098310831183128313831483158316831783188319832083218322832383248325832683278328832983308331833283338334833583368337833883398340834183428343834483458346834783488349835083518352835383548355835683578358835983608361836283638364836583668367836883698370837183728373837483758376837783788379838083818382838383848385838683878388838983908391839283938394839583968397839883998400840184028403840484058406840784088409841084118412841384148415841684178418841984208421842284238424842584268427842884298430843184328433843484358436843784388439844084418442844384448445844684478448844984508451845284538454845584568457845884598460846184628463846484658466846784688469847084718472847384748475847684778478847984808481848284838484848584868487848884898490849184928493849484958496849784988499850085018502850385048505850685078508850985108511851285138514851585168517851885198520852185228523852485258526852785288529853085318532853385348535853685378538853985408541854285438544854585468547854885498550855185528553855485558556855785588559856085618562856385648565856685678568856985708571857285738574857585768577857885798580858185828583858485858586858785888589859085918592859385948595859685978598859986008601860286038604860586068607860886098610861186128613861486158616861786188619862086218622862386248625862686278628862986308631863286338634863586368637863886398640864186428643864486458646864786488649865086518652865386548655865686578658865986608661866286638664866586668667866886698670867186728673867486758676867786788679868086818682868386848685868686878688868986908691869286938694869586968697869886998700870187028703870487058706870787088709871087118712871387148715871687178718871987208721872287238724872587268727872887298730873187328733873487358736873787388739874087418742874387448745# 1 "pr_o.orig.ml"(* camlp5r *)(* pr_o.ml,v *)(* Copyright (c) INRIA 2007-2017 *)(* #directory "." *)(* #load "q_MLast.cmo" *)(* #load "pa_extfun.cmo" *)(* #load "pa_extprint.cmo" *)(* #load "pa_macro.cmo" *)(* #load "pa_macro_print.cmo" *)(* #load "pa_pprintf.cmo" *)openAsttoolsopenPrettyopenPcamlopenPrtoolsopenVersdepopenMlsyntax.OriginalopenPp_debugletflag_add_locations=reffalseletflag_comments_in_phrases=Pcaml.flag_comments_in_phrasesletflag_equilibrate_cases=Pcaml.flag_equilibrate_casesletflag_expand_letop_syntax=Pcaml.flag_expand_letop_syntaxletflag_extensions_are_irrefutable=reftrueletflag_horiz_let_in=reftrueletflag_semi_semi=reffalseletpr_attribute_body=Eprinter.make"pr_attribute_body"let_=Eprinter.clearpr_expr;Eprinter.clearpr_patt;Eprinter.clearpr_ctyp;Eprinter.clearpr_str_item;Eprinter.clearpr_sig_item;Eprinter.clearpr_longident;Eprinter.clearpr_module_expr;Eprinter.clearpr_module_type;Eprinter.clearpr_class_sig_item;Eprinter.clearpr_class_str_item;Eprinter.clearpr_class_expr;Eprinter.clearpr_class_type(* general functions *)leterrorlocmsg=Ploc.raiseloc(Failuremsg)letis_infix=letinfixes=Hashtbl.create73inList.iter(funs->Hashtbl.addinfixesstrue)["!=";"&&";"*";"**";"*.";"+";"+.";"-";"-.";"/";"/.";"<";"<=";"<>";"=";"==";">";">=";"@";"^";"asr";"land";"lor";"lsl";"lsr";"lxor";"mod";"or";"||";"~-";"~-."];funs->tryHashtbl.findinfixesswithNot_found->falselethas_special_charss=ifString.lengths=0thenfalseelsematchs.[0]with'0'..'9'|'A'..'Z'|'a'..'z'|'_'->false|_->trueletocaml_char=function"'"->"\\'"|"\\"->"\\\\"|c->cletrecis_irrefut_patt=functionMLast.PaAtt(_,p,_)->is_irrefut_pattp|MLast.PaLid(_,Ploc.VaVal_)->true|MLast.PaLong(_,MLast.LiUid(_,Ploc.VaVal"()"),Ploc.VaVal[])->true|MLast.PaAny_->true|MLast.PaPfx(_,_,y)->is_irrefut_patty|MLast.PaAli(_,x,y)->is_irrefut_pattx&&is_irrefut_patty|MLast.PaRec(_,Ploc.VaValfpl)->List.for_all(fun(_,p)->is_irrefut_pattp)fpl|MLast.PaTyc(_,p,_)->is_irrefut_pattp|MLast.PaTup(_,Ploc.VaValpl,Ploc.VaVal_)->List.for_allis_irrefut_pattpl|MLast.PaNty(_,Ploc.VaVal_)->true|MLast.PaUnp(_,Ploc.VaVal_,Some_)->true|MLast.PaUnp(_,Ploc.VaVal_,None)->true|MLast.PaLab(_,_,Ploc.VaVal_)->true|MLast.PaOlb(_,_,Ploc.VaVal_)->true|MLast.PaExten(_,_)->!flag_extensions_are_irrefutable|_->falseletrecget_defined_ident=functionMLast.PaPfx(_,_,p)->get_defined_identp|MLast.PaAny_->[]|MLast.PaLid(_,Ploc.VaValx)->[x]|MLast.PaAli(_,p1,p2)->get_defined_identp1@get_defined_identp2|MLast.PaInt(_,Ploc.VaVal_,"")->[]|MLast.PaFlo(_,Ploc.VaVal_)->[]|MLast.PaStr(_,Ploc.VaVal_)->[]|MLast.PaChr(_,Ploc.VaVal_)->[]|MLast.PaArr(_,Ploc.VaValpl)->List.flatten(List.mapget_defined_identpl)|MLast.PaTup(_,Ploc.VaValpl,Ploc.VaVal_)->List.flatten(List.mapget_defined_identpl)|MLast.PaLong(_,MLast.LiUid(_,Ploc.VaVal_),Ploc.VaVal[])->[]|MLast.PaVrn(_,Ploc.VaVal_)->[]|MLast.PaTyp(_,Ploc.VaVal_)->[]|MLast.PaApp(_,p1,p2)->get_defined_identp1@get_defined_identp2|MLast.PaRec(_,Ploc.VaVallpl)->List.flatten(List.map(fun(lab,p)->get_defined_identp)lpl)|MLast.PaOrp(_,p1,p2)->get_defined_identp1@get_defined_identp2|MLast.PaRng(_,p1,p2)->get_defined_identp1@get_defined_identp2|MLast.PaTyc(_,p,_)->get_defined_identp|MLast.PaLab(_,_,Ploc.VaValNone)->[]|MLast.PaLab(_,_,Ploc.VaVal(Somep))->get_defined_identp|MLast.PaOlb(_,_,Ploc.VaValNone)->[]|MLast.PaOlb(_,MLast.PaLid(_,Ploc.VaVals),Ploc.VaVal(Some_))->[s]|MLast.PaOlb(_,_,Ploc.VaVal(Some(MLast.ExOlb(_,MLast.PaLid(_,Ploc.VaVals),Ploc.VaVal(Somee)))))->[s]|MLast.PaAnt(_,p)->get_defined_identp|_->[]letnot_implnamepcx=letdesc=ifObj.tag(Obj.reprx)=Obj.tag(Obj.repr"")then"\""^Obj.magicx^"\""elseifObj.is_block(Obj.reprx)then"tag = "^string_of_int(Obj.tag(Obj.reprx))else"int_val = "^string_of_int(Obj.magicx)inPretty.sprintf"%s\"pr_o, not impl: %s; %s\"%s"pc.Pprintf.befname(String.escapeddesc)pc.Pprintf.aft(* for 'lprintf' statement *)letexpand_lprintfpclocf=if!flag_add_locationsthenlet(bl,bc,el,ec,len)=Ploc.getlocinPprintf.sprint_break10pc(funpc->Pretty.sprintf"%s(*loc: [\"%s\": %d:%d-%d %d-%d] *)"pc.Pprintf.bef(Ploc.file_nameloc)blbc(bc+len)elec)(funpc->(funpc()->fpc)pc())elsefpcletis_keyword=letkwdhash=O_keywords.keywords_hashinfuns->Hashtbl.memkwdhashsletvar_escaped_barev=ifv.[0]='*'||v.[String.lengthv-1]='*'then"( "^v^" )"elseifis_infixv||has_special_charsv||is_letopv||is_andopvthen"("^v^")"elseifis_keywordvthensprintf"\\#%s"velsevletvar_escapedpc(loc,v)=letx=var_escaped_barevinexpand_lprintfpcloc(funpc->Pretty.sprintf"%s%s%s"pc.Pprintf.befxpc.Pprintf.aft)letvar_escaped_nolocpcv=var_escapedpc(Ploc.dummy,v)letcons_escapedpc(loc,v)=letx=matchvwith"True"->"true"|"False"->"false"|"True_"->"True"|"False_"->"False"|"[]"->"[]"|"()"->"()"|"::"->"( :: )"|_->vinPretty.sprintf"%s%s%s"pc.Pprintf.befxpc.Pprintf.aftletrecmod_identpc(loc,sl)=matchslwith[]->Pretty.sprintf"%s%s"pc.Pprintf.befpc.Pprintf.aft|[s]->var_escapedpc(loc,s)|s::sl->mod_ident{pcwithPprintf.bef=Pretty.sprintf"%s%s."pc.Pprintf.befs}(loc,sl)letcomma_afterelempcx=elem{pcwithPprintf.aft=Pretty.sprintf",%s"pc.Pprintf.aft}xletsemi_afterelempcx=elem{pcwithPprintf.aft=Pretty.sprintf";%s"pc.Pprintf.aft;Pprintf.dang=";"}xletsemi_semi_afterelempcx=elem{pcwithPprintf.aft=Pretty.sprintf";;%s"pc.Pprintf.aft}xletop_afterelempc(x,op)=elem{pcwithPprintf.aft=Pretty.sprintf"%s%s"oppc.Pprintf.aft}xletand_beforeelempcx=elem{pcwithPprintf.bef=Pretty.sprintf"%sand "pc.Pprintf.bef}xletbar_beforeelempcx=elem{pcwithPprintf.bef=Pretty.sprintf"%s| "pc.Pprintf.bef}xletspace_beforeelempcx=elem{pcwithPprintf.bef=Pretty.sprintf"%s "pc.Pprintf.bef}xletandop_beforeelempc(andop,_asx)=elem{pcwithPprintf.bef=Pretty.sprintf"%s%s "pc.Pprintf.befandop}xletoperatorpcleftrightsh(loc,op)xy=letop=ifop=""then""else" "^opinPprintf.sprint_break12pc(funpc->left{pcwithPprintf.aft=op}x)(funpc->rightpcy)letleft_operatorpclocshunfoldnextx=letxl=letrecloopxlxop=matchunfoldxwithSome(x1,op1,x2)->loop((x2,op)::xl)x1op1|None->(x,op)::xlinloop[]x""inmatchxlwith[x,_]->nextpcx|_->horiz_vertic(fun()->hlist(op_afternext)pcxl)(fun()->plistnextshpcxl)letright_operatorpclocshunfoldnextx=letxl=letrecloopxlx=matchunfoldxwithSome(x1,op,x2)->loop((x1,op)::xl)x2|None->List.rev((x,"")::xl)inloop[]xinmatchxlwith[x,_]->nextpcx|_->horiz_vertic(fun()->hlist(op_afternext)pcxl)(fun()->plistnextshpcxl)letuidopt_to_maybe_blank=functionSomes->Pcaml.unvalas|None->"_"(*
* Extensible printers
*)letexpr=Eprinter.applypr_exprletpatt=Eprinter.applypr_pattletsimple_pattx=Eprinter.apply_levelpr_patt"simple"xletctyp=Eprinter.applypr_ctypletctyp_below_alg_attributex=Eprinter.apply_levelpr_ctyp"below_alg_attribute"xletstr_item=Eprinter.applypr_str_itemletsig_item=Eprinter.applypr_sig_itemletlongident=Eprinter.applypr_longidentletmodule_expr=Eprinter.applypr_module_exprletmodule_type=Eprinter.applypr_module_typeletmodule_type_level_sig=Eprinter.apply_levelpr_module_type"sig"letexpr_fun_argsge=Extfun.apply!pr_expr_fun_argsgeletsimple_patt=Eprinter.apply_levelpr_patt"simple"letexpr1=Eprinter.apply_levelpr_expr"expr1"letattribute_body=Eprinter.applypr_attribute_bodyletpr_attributeatstringpcattr=attribute_body{pcwithPprintf.bef=Pretty.sprintf"%s[%s"pc.Pprintf.befatstring;Pprintf.aft=Pretty.sprintf"]%s"pc.Pprintf.aft}(Pcaml.unvalaattr)letpr_extensionatstringpcattr=attribute_body{pcwithPprintf.bef=Pretty.sprintf"%s[%s"pc.Pprintf.befatstring;Pprintf.aft=Pretty.sprintf"]%s"pc.Pprintf.aft}(Pcaml.unvalaattr)letlongident_lidentpc(lio,id)=matchliowithNone->var_escaped_nolocpc(Pcaml.unvalaid)|Someli->Pretty.sprintf"%s%s"(longident{pcwithPprintf.aft="."}(Pcaml.unvalali))(var_escaped_noloc{pcwithPprintf.bef=""}(Pcaml.unvalaid))letcomm_befpcloc=if!flag_comments_in_phrasesthenPrtools.comm_befpc.indlocelse""letonly_spacess=letrecloopi=ifi=String.lengthsthentrueelseifs.[i]=' 'thenloop(i+1)elsefalseinloop0letstrip_heading_spacess=letrecloopi=ifi=String.lengthsthen""elseifs.[i]=' 'thenloop(i+1)elseString.subsi(String.lengths-i)inloop0letstrip_charcs=lets=string_copy(bytes_of_strings)inletrecloopij=ifi=string_lengthsthenstring_subs0jelseifstring_getsi='_'thenloop(i+1)jelsebeginstring_setsj(string_getsi);loop(i+1)(j+1)endinbytes_to_string(loop00)(* expression with adding the possible comment before *)letcomm_exprexprpcz=letloc=MLast.loc_of_exprzinletccc=comm_befpclocinifccc=""thenexprpczelseifonly_spacespc.befthensprintf"%s%s"ccc(exprpcz)elseexpr{pcwithbef=sprintf"%s%s%s"pc.bef(strip_heading_spacesccc)(String.make(String.lengthpc.bef)' ')}z(*
value comm_expr expr pc z =
let loc = MLast.loc_of_expr z in
let ccc = comm_bef pc loc in
sprintf "%s%s" ccc (expr pc z)
;
*)(* couple pattern/anytype with adding the possible comment before *)letcomm_patt_anyfpcz=letccc=comm_befpc(MLast.loc_of_patt(fstz))insprintf"%s%s"ccc(fpcz)letpatt_aspcz=matchzwithMLast.PaAli(loc,x,y)->letpc={pcwithPprintf.aft=letpc={pcwithPprintf.bef=""}inpatt{pcwithPprintf.bef=" as "}y}inpattpcx|z->pattpcz(* utilities specific to pr_o *)letlabel_pattpcp=matchpwithMLast.PaPfx(loc,x,MLast.PaLid(_,Ploc.VaValy))->Pretty.sprintf"%s%s"(longident{pcwithPprintf.aft="."}x)(var_escaped{pcwithPprintf.bef=""}(loc,y))|MLast.PaLid(loc,Ploc.VaValy)->var_escapedpc(loc,y)|z->Ploc.raise(MLast.loc_of_pattz)(Failure(sprintf"label_patt %d"(Obj.tag(Obj.reprz))))(* Basic displaying of a 'binding' (let, value, expr or patt record field).
The pretty printing is done correctly, but there are no syntax shortcuts
(e.g. "let f = fun x -> y" is *not* shortened as "let f x = y")
Some functions follow (some of them with '_binding' in their name) which
use syntax or pretty printing shortcuts.
*)letbindingpelemeelempc(p,e,attrs)=Pprintf.sprint_break12pc(funpc->pelem{pcwithPprintf.aft=" ="}p)(funpc->Pretty.sprintf"%s%s"(eelem{pcwithPprintf.aft=""}e)(hlist(pr_attribute"@@"){pcwithPprintf.bef=""}(Pcaml.unvalaattrs)))letrecord_bindingis_lastpc(p,e)=Pprintf.sprint_break12pc(funpc->label_patt{pcwithPprintf.aft=" ="}p)(funpc->expr1{pcwithPprintf.dang=ifis_lastthenpc.dangelse";"}e)letis_polytype_constraint=functionMLast.PaTyc(_,_,MLast.TyPol(_,Ploc.VaVal_,_))->true|MLast.PaTyc(_,_,MLast.TyPot(_,Ploc.VaVal_,_))->true|_->falselet_=pr_expr_fun_args:=Extfun.extendExtfun.empty[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExFun"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"::"];Extfun.Etup[Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Eacc[Extfun.Econ"None"]];Extfun.Evar()];Extfun.Eacc[Extfun.Econ"[]"]]]],false,(functionMLast.ExFun(_,Ploc.VaVal[p,Ploc.VaValNone,e])asz->Some(ifis_irrefut_pattpthenlet(pl,e)=expr_fun_argseinp::pl,eelse[],z)|_->None);Extfun.Evar(),false,(funz->Some([],z))]letexpr_semipc(e,is_last)=ifnotis_lastthencomm_exprexpr{pcwithPprintf.aft=Pretty.sprintf";%s"pc.Pprintf.aft;Pprintf.dang=";"}eelsecomm_exprexprpceletexpr_with_comm_except_if_sequencepce=matchewithMLast.ExSeq(_,Ploc.VaVal_)->exprpce|_->comm_exprexprpce(* Pretty printing improvements (optional):
- prints "let f x = e" instead of "let f = fun x -> e"
- if "e" is a type constraint, put the constraint after the params. E.g.
let f x y = (e : t)
is displayed:
let f x y : t = e
Cancellation of all these improvements could be done by changing calls
to this function to a call to "binding expr" above.
*)letlet_bindingpc(p,e,attrs)=let(pl,e)=matchpwithMLast.PaTyc(_,_,_)->[],e|_->expr_fun_argseinlet(p,e,tyo)=matchp,ewithMLast.PaTyc(_,MLast.PaAny_,_),_->p,e,None|MLast.PaAny_,_->p,e,None|MLast.PaTyc(_,p0,t),_whenis_polytype_constraintp->p0,e,Somet|MLast.PaTyc(_,_,_),_->p,e,None|_,MLast.ExTyc(_,e,t)->p,e,Somet|_->p,e,Noneinletpatt_tycontyopcp=matchtyowithSomet->Pretty.sprintf"%s%s"(simple_patt{pcwithPprintf.aft=" : "}p)(ctyp{pcwithPprintf.bef=""}t)|None->simple_pattpcpinletpl=p::plinletpl=List.map(funp->p,"")plinletpc={pcwithdang=""}inmatchpc.aftwith""->Pprintf.sprint_break12pc(funpc->plistlsimple_patt(patt_tycontyo)4{pcwithPprintf.aft=" ="}pl)(funpc->Pretty.sprintf"%s%s"(expr_with_comm_except_if_sequence{pcwithPprintf.aft="";Pprintf.dang=""}e)(hlist(pr_attribute"@@"){pcwithPprintf.bef=""}(Pcaml.unvalaattrs)))|"in"->Pprintf.sprint_break_allfalsepc(funpc->plistlsimple_patt(patt_tycontyo)4{pcwithPprintf.aft=" ="}pl)[1,2,(funpc->Pretty.sprintf"%s%s"(expr_with_comm_except_if_sequence{pcwithPprintf.aft="";Pprintf.dang=""}e)(hlist(pr_attribute"@@"){pcwithPprintf.bef=""}(Pcaml.unvalaattrs)));1,0,(funpc->Pretty.sprintf"%s%s"pc.Pprintf.befpc.Pprintf.aft)]|_->Pprintf.sprint_break_allfalsepc(funpc->plistlsimple_patt(patt_tycontyo)4{pcwithPprintf.aft=" ="}pl)[1,2,(funpc->Pretty.sprintf"%s%s"(expr_with_comm_except_if_sequence{pcwithPprintf.aft="";Pprintf.dang=""}e)(hlist(pr_attribute"@@"){pcwithPprintf.bef=""}(Pcaml.unvalaattrs)));0,0,(funpc->Pretty.sprintf"%s%s"pc.Pprintf.befpc.Pprintf.aft)]letletop_bindingpc(_,(p,e,attrs))=let_bindingpc(p,e,attrs)letmatch_assocforce_verticpc((p,w,e),is_last)=letexprpc=functionMLast.ExUnr_->Pretty.sprintf"%s.%s"pc.Pprintf.befpc.Pprintf.aft|e->exprpceinletexpr_with_comm_except_if_sequencepc=functionMLast.ExUnr_->Pretty.sprintf"%s.%s"pc.Pprintf.befpc.Pprintf.aft|e->expr_with_comm_except_if_sequencepceinlet(pc_aft,pc_dang)=ifnotis_lastthen"","|"elsepc.aft,pc.danginhoriz_vertic(fun()->ifforce_verticthensprintf"\n"elsePretty.sprintf"%s%s%s"(patt_as{pcwithPprintf.aft=""}p)((funpc->functionPloc.VaVal(Somee)->expr{pcwithPprintf.bef=Pretty.sprintf"%s when "pc.Pprintf.bef}e|_->Pretty.sprintf"%s%s"pc.Pprintf.befpc.Pprintf.aft){pcwithPprintf.bef="";Pprintf.aft=" -> "}w)(comm_exprexpr{pcwithPprintf.bef="";Pprintf.dang=pc_dang}e))(fun()->Pprintf.sprint_break_allforce_verticpc(funpc->(funpc->functionPloc.VaVal(Somee)->Pprintf.sprint_break10pc(funpc->patt_aspcp)(funpc->Pprintf.sprint_break12pc(funpc->Pretty.sprintf"%swhen"pc.Pprintf.bef)(funpc->expr{pcwithPprintf.aft=Pretty.sprintf" ->%s"pc.Pprintf.aft}e))|_->patt_as{pcwithPprintf.aft=Pretty.sprintf" ->%s"pc.Pprintf.aft}p)pcw)[1,2,(funpc->expr_with_comm_except_if_sequence{pcwithPprintf.dang=pc_dang}e)])letmatch_assoc_shforce_verticpcpwe=match_assocforce_vertic{pcwithind=pc.ind+2}pweletmatch_assoc_listlocpcpwel=ifpwel=[]thenPretty.sprintf"%s[]%s"pc.Pprintf.befpc.Pprintf.aftelseletforce_vertic=if!flag_equilibrate_casesthenlethas_vertic=List.exists(fun(p,w,easpwe)->horiz_vertic(fun()->let(_:string)=bar_before(match_assoc_shfalse)pc(pwe,false)infalse)(fun()->true))pwelinhas_verticelsefalseinvlist3(match_assoc_shforce_vertic)(bar_before(match_assoc_shforce_vertic)){pcwithPprintf.bef=Pretty.sprintf"%s "pc.Pprintf.bef}pwelletraise_match_failurepcloc=letfname=Ploc.file_namelocinletline=Ploc.line_nblocinletchar=Ploc.first_posloc-Ploc.bol_poslocinlete=MLast.ExApp(loc,MLast.ExLid(loc,Ploc.VaVal"raise"),MLast.ExApp(loc,MLast.ExLong(loc,MLast.LiUid(loc,Ploc.VaVal"Match_failure")),MLast.ExTup(loc,Ploc.VaVal[MLast.ExStr(loc,Ploc.VaVal(loc,Ploc.VaValfname));MLast.ExInt(loc,Ploc.VaVal(string_of_intline),"");MLast.ExInt(loc,Ploc.VaVal(string_of_intchar),"")])))inEprinter.apply_levelpr_expr"apply"pceletrecmake_expr_list=functionMLast.ExApp(_,MLast.ExApp(_,MLast.ExLong(_,MLast.LiUid(_,Ploc.VaVal"::")),x),y)->let(xl,c)=make_expr_listyinx::xl,c|MLast.ExLong(_,MLast.LiUid(_,Ploc.VaVal"[]"))->[],None|x->[],Somexletrecmake_patt_list=functionMLast.PaApp(_,MLast.PaApp(_,MLast.PaLong(_,MLast.LiUid(_,Ploc.VaVal"::"),Ploc.VaVal[]),x),y)->let(xl,c)=make_patt_listyinx::xl,c|MLast.PaLong(_,MLast.LiUid(_,Ploc.VaVal"[]"),Ploc.VaVal[])->[],None|x->[],Somexlettype_varpcv=ifString.containsv'\''thenPretty.sprintf"%s' %s%s"pc.Pprintf.befvpc.Pprintf.aftelseifis_keywordvthenPretty.sprintf"%s'\\#%s%s"pc.Pprintf.befvpc.Pprintf.aftelsePretty.sprintf"%s'%s%s"pc.Pprintf.befvpc.Pprintf.aftlettv_or_blankpc=functionSomev->type_varpcv|None->Pretty.sprintf"%s_%s"pc.Pprintf.befpc.Pprintf.aftlettype_parampc(loc,(tv,vastr))=lettv=Pcaml.unvalatvinletvastr=Pcaml.unvalavastrintv_or_blank{pcwithPprintf.bef=Pretty.sprintf"%s%s"pc.Pprintf.befvastr}tvlettype_constraintpc(t1,t2)=Pprintf.sprint_break12pc(funpc->ctyp{pcwithPprintf.bef=Pretty.sprintf"%s constraint "pc.Pprintf.bef;Pprintf.aft=" ="}t1)(funpc->ctyppct2)lettype_paramspc(loc,tvl)=matchtvlwith[]->Pretty.sprintf"%s%s"pc.Pprintf.befpc.Pprintf.aft|[tv]->type_param{pcwithPprintf.aft=Pretty.sprintf" %s"pc.Pprintf.aft}(loc,tv)|_->lettvl=List.map(funtv->loc,tv)tvlinhlistl(comma_aftertype_param)type_param{pcwithPprintf.bef=Pretty.sprintf"%s("pc.Pprintf.bef;Pprintf.aft=Pretty.sprintf") %s"pc.Pprintf.aft}tvlletmem_tvarstpl=List.exists(fun(t,_)->Pcaml.unvalat=Somes)tpllettype_declpctd=let((_,tn),is_decl,tp,pf,te,cl,attrs)=Pcaml.unvalatd.MLast.tdNam,td.MLast.tdIsDecl,td.MLast.tdPrm,Pcaml.unvalatd.MLast.tdPrv,td.MLast.tdDef,td.MLast.tdCon,td.MLast.tdAttributesinletasgn=ifPcaml.unvalais_declthen"="else":="inmatchtewithMLast.TyQuo(loc,Ploc.VaVals)whennot(mem_tvars(Pcaml.unvalatp))&¬(List.exists(fun(t1,t2)->Ast2pt.ctyp_mentionsst1||Ast2pt.ctyp_mentionsst2)(Pcaml.unvalacl))->Pretty.sprintf"%s%s%s%s"(type_params{pcwithPprintf.aft=""}(loc,Pcaml.unvalatp))(var_escaped{pcwithPprintf.bef="";Pprintf.aft=""}(loc,Pcaml.unvalatn))(hlisttype_constraint{pcwithPprintf.bef="";Pprintf.aft=""}(Pcaml.unvalacl))(hlist(pr_attribute"@@"){pcwithPprintf.bef=""}(Pcaml.unvalaattrs))|_->letloc=MLast.loc_of_ctypteinifpc.aft=""thenPprintf.sprint_break12pc(funpc->Pretty.sprintf"%s%s"(type_params{pcwithPprintf.aft=""}(loc,Pcaml.unvalatp))(var_escaped{pcwithPprintf.bef="";Pprintf.aft=Pretty.sprintf" %s"asgn}(loc,Pcaml.unvalatn)))(funpc->Pretty.sprintf"%s%s%s"(ctyp{pcwithPprintf.bef=Pretty.sprintf"%s%s"pc.Pprintf.bef(ifpfthen"private "else"");Pprintf.aft=""}te)(hlisttype_constraint{pcwithPprintf.bef="";Pprintf.aft=""}(Pcaml.unvalacl))(hlist(pr_attribute"@@"){pcwithPprintf.bef=""}(Pcaml.unvalaattrs)))elsehoriz_vertic(fun()->Pretty.sprintf"%s%s%s%s%s"(type_params{pcwithPprintf.aft=""}(loc,Pcaml.unvalatp))(var_escaped{pcwithPprintf.bef="";Pprintf.aft=Pretty.sprintf" %s %s"asgn(ifpfthen"private "else"")}(loc,Pcaml.unvalatn))(ctyp{pcwithPprintf.bef="";Pprintf.aft=""}te)(hlisttype_constraint{pcwithPprintf.bef="";Pprintf.aft=""}(Pcaml.unvalacl))(hlist(pr_attribute"@@"){pcwithPprintf.bef=""}(Pcaml.unvalaattrs)))(fun()->Pprintf.sprint_break_allfalsepc(funpc->Pretty.sprintf"%s%s"(type_params{pcwithPprintf.aft=""}(loc,Pcaml.unvalatp))(var_escaped{pcwithPprintf.bef="";Pprintf.aft=Pretty.sprintf" %s"asgn}(loc,Pcaml.unvalatn)))[1,2,(funpc->Pretty.sprintf"%s%s%s"(ctyp{pcwithPprintf.bef=Pretty.sprintf"%s%s"pc.Pprintf.bef(ifpfthen"private "else"");Pprintf.aft=""}te)(hlisttype_constraint{pcwithPprintf.bef="";Pprintf.aft=""}(Pcaml.unvalacl))(hlist(pr_attribute"@@"){pcwithPprintf.bef=""}(Pcaml.unvalaattrs)));1,0,(funpc->Pretty.sprintf"%s%s"pc.Pprintf.befpc.Pprintf.aft)])letlabel_declpc(_,l,m,t,attrs)=Pprintf.sprint_break12pc(funpc->var_escaped_noloc{pcwithPprintf.bef=Pretty.sprintf"%s%s"pc.Pprintf.bef(ifmthen"mutable "else"");Pprintf.aft=" :"}l)(funpc->Pretty.sprintf"%s%s"(ctyp_below_alg_attribute{pcwithPprintf.aft=""}t)(hlist(pr_attribute"@"){pcwithPprintf.bef=""}(Pcaml.unvalaattrs)))lettypevars_binderpc=function[]->Pretty.sprintf"%s%s"pc.Pprintf.befpc.Pprintf.aft|l->hlisttype_var{pcwithPprintf.aft=Pretty.sprintf" . %s"pc.Pprintf.aft}lletcons_declpc(loc,c,tyvars,tl,rto,alg_attrs)=letc=Pcaml.unvalacinlettl=Pcaml.unvalatliniftl=[]thenmatchPcaml.unvalatyvars,Pcaml.unvalartowith[],Somert->Pretty.sprintf"%s%s%s"(cons_escaped{pcwithPprintf.aft=" : "}(loc,c))(ctyp_below_alg_attribute{pcwithPprintf.bef="";Pprintf.aft=""}rt)(hlist(pr_attribute"@"){pcwithPprintf.bef=""}(Pcaml.unvalaalg_attrs))|l,Somert->Pretty.sprintf"%s%s%s%s"(cons_escaped{pcwithPprintf.aft=" : "}(loc,c))(typevars_binder{pcwithPprintf.bef="";Pprintf.aft=""}l)(ctyp_below_alg_attribute{pcwithPprintf.bef="";Pprintf.aft=""}rt)(hlist(pr_attribute"@"){pcwithPprintf.bef=""}(Pcaml.unvalaalg_attrs))|_,None->Pretty.sprintf"%s%s"(cons_escaped{pcwithPprintf.aft=""}(loc,c))(hlist(pr_attribute"@"){pcwithPprintf.bef=""}(Pcaml.unvalaalg_attrs))elseletctyp_apply=Eprinter.apply_levelpr_ctyp"apply"inlettl=List.map(funt->t," *")tlinmatchPcaml.unvalatyvars,Pcaml.unvalartowith[],Somert->Pprintf.sprint_break14pc(funpc->cons_escaped{pcwithPprintf.aft=" :"}(loc,c))(funpc->Pretty.sprintf"%s%s%s"(plistctyp_apply2{pcwithPprintf.aft=" -> "}tl)(ctyp_below_alg_attribute{pcwithPprintf.bef="";Pprintf.aft=""}rt)(hlist(pr_attribute"@"){pcwithPprintf.bef=""}(Pcaml.unvalaalg_attrs)))|l,Somert->Pprintf.sprint_break14pc(funpc->cons_escaped{pcwithPprintf.aft=" :"}(loc,c))(funpc->Pretty.sprintf"%s%s%s%s"(typevars_binder{pcwithPprintf.aft=""}l)(plistctyp_apply2{pcwithPprintf.bef="";Pprintf.aft=" -> "}tl)(ctyp_below_alg_attribute{pcwithPprintf.bef="";Pprintf.aft=""}rt)(hlist(pr_attribute"@"){pcwithPprintf.bef=""}(Pcaml.unvalaalg_attrs)))|_,None->Pprintf.sprint_break14pc(funpc->cons_escaped{pcwithPprintf.aft=" of"}(loc,c))(funpc->Pretty.sprintf"%s%s"(plistctyp_apply2{pcwithPprintf.aft=""}tl)(hlist(pr_attribute"@"){pcwithPprintf.bef=""}(Pcaml.unvalaalg_attrs)))letextension_constructorlocpcec=matchecwithMLast.EcTuple(_,gc)->cons_declpcgc|MLast.EcRebind(loc,Ploc.VaVale,Ploc.VaValli,Ploc.VaValalg_attrs)->Pprintf.sprint_break12pc(funpc->cons_escapedpc(loc,e))(funpc->Pretty.sprintf"%s%s"(longident{pcwithPprintf.bef=Pretty.sprintf"%s= "pc.Pprintf.bef;Pprintf.aft=""}li)(hlist(pr_attribute"@"){pcwithPprintf.bef=""}alg_attrs))|_->errorloc"extension_constructor: internal error"lethas_ecs_with_paramsvdl=List.exists(functionMLast.EcTuple(_,(_,_,_,tl,rto,_))->beginmatchtlwithPloc.VaVal[]->false|_->trueend|MLast.EcRebind(_,_,_,_)->true)vdlletextension_constructorslocpcvdl=horiz_vertic(fun()->ifhas_ecs_with_paramsvdlthensprintf"\n"elsehlist2(extension_constructorloc)(bar_before(extension_constructorloc))pcvdl)(fun()->vlist2(extension_constructorloc)(bar_before(extension_constructorloc)){pcwithPprintf.bef=Pretty.sprintf"%s "pc.Pprintf.bef}vdl)lettype_extensionlocpcte=let(tn,tp,pf,ecstrs,attrs)=Pcaml.unvalate.MLast.teNam,te.MLast.tePrm,Pcaml.unvalate.MLast.tePrv,te.MLast.teECs,te.MLast.teAttributesinifpc.aft=""thenPprintf.sprint_break12pc(funpc->Pretty.sprintf"%s%s"(type_params{pcwithPprintf.aft=""}(loc,Pcaml.unvalatp))(longident_lident{pcwithPprintf.bef="";Pprintf.aft=" +="}tn))(funpc->Pretty.sprintf"%s%s"(extension_constructorsloc{pcwithPprintf.bef=Pretty.sprintf"%s%s"pc.Pprintf.bef(ifpfthen"private "else"");Pprintf.aft=""}(Pcaml.unvalaecstrs))(hlist(pr_attribute"@@"){pcwithPprintf.bef=""}(Pcaml.unvalaattrs)))elsehoriz_vertic(fun()->Pretty.sprintf"%s%s%s%s"(type_params{pcwithPprintf.aft=""}(loc,Pcaml.unvalatp))(longident_lident{pcwithPprintf.bef="";Pprintf.aft=Pretty.sprintf" += %s"(ifpfthen"private "else"")}tn)(extension_constructorsloc{pcwithPprintf.bef="";Pprintf.aft=""}(Pcaml.unvalaecstrs))(hlist(pr_attribute"@@"){pcwithPprintf.bef=""}(Pcaml.unvalaattrs)))(fun()->Pprintf.sprint_break_allfalsepc(funpc->Pretty.sprintf"%s%s"(type_params{pcwithPprintf.aft=""}(loc,Pcaml.unvalatp))(longident_lident{pcwithPprintf.bef="";Pprintf.aft=" +="}tn))[1,2,(funpc->Pretty.sprintf"%s%s"(extension_constructorsloc{pcwithPprintf.bef=Pretty.sprintf"%s%s"pc.Pprintf.bef(ifpfthen"private "else"");Pprintf.aft=""}(Pcaml.unvalaecstrs))(hlist(pr_attribute"@@"){pcwithPprintf.bef=""}(Pcaml.unvalaattrs)));1,0,(funpc->Pretty.sprintf"%s%s"pc.Pprintf.befpc.Pprintf.aft)])lethas_cons_with_paramsvdl=List.exists(fun(_,_,_,tl,rto,_)->matchtlwithPloc.VaVal[]->false|_->true)vdlletalone_in_linepc=letrecloopi=ifi>=String.lengthpc.befthentrueelseifpc.bef.[i]=' 'thenloop(i+1)elsefalsein(pc.aft=""||pc.aft=";")&&pc.bef<>""&&loop0letequality_threshold=0.51letare_closefx1x2=let(s1,s2)=(* the two strings; this code tries to prevents computing possible
too long lines (which might slow down the program) *)letv=!(Pretty.line_length)inPretty.line_length:=2*v;lets1=horiz_vertic(fun_->Some(fx1))(fun()->None)inlets2=horiz_vertic(fun_->Some(fx2))(fun()->None)inPretty.line_length:=v;s1,s2inmatchs1,s2withSomes1,Somes2->(* one string at least could hold in the line; comparing them; if
they are "close" to each other, return True, meaning that they
should be displayed *both* in one line or *both* in several lines *)let(d1,d2)=leta1=Array.init(String.lengths1)(String.gets1)inleta2=Array.init(String.lengths2)(String.gets2)inDiff.fa1a2inleteq=letrecloopieq=ifi=Array.lengthd1theneqelseloop(i+1)(ifd1.(i)theneqelseeq+1)inloop00inletr1=floateq/.float(Array.lengthd1)inletr2=floateq/.float(Array.lengthd2)inr1>=equality_threshold&&r2>=equality_threshold|_->false(* if statement *)letrecget_else_if=functionMLast.ExIfe(_,e1,e2,e3)->let(eel,e3)=get_else_ife3in(e1,e2)::eel,e3|e->[],eletif_thenforce_verticcurrpc(e1,e2)=horiz_vertic(fun()->ifforce_verticthensprintf"\n"elsePretty.sprintf"%s%s"(curr{pcwithPprintf.bef=Pretty.sprintf"%sif "pc.Pprintf.bef;Pprintf.aft=" then ";Pprintf.dang=""}e1)(curr{pcwithPprintf.bef=""}e2))(fun()->Pprintf.sprint_break12pc(funpc->Pprintf.sprint_break10pc(funpc->letpc={pcwithPprintf.ind=pc.Pprintf.ind+3}incurr{pcwithPprintf.bef=Pretty.sprintf"%sif "pc.Pprintf.bef;Pprintf.dang=""}e1)(funpc->Pretty.sprintf"%sthen"pc.Pprintf.bef))(funpc->expr1pce2))letelse_if_thenforce_verticcurrpc(e1,e2)=horiz_vertic(fun()->ifforce_verticthensprintf"\n"elsePretty.sprintf"%s%s"(curr{pcwithPprintf.bef=Pretty.sprintf"%selse if "pc.Pprintf.bef;Pprintf.aft=" then ";Pprintf.dang=""}e1)(curr{pcwithPprintf.bef=""}e2))(fun()->Pprintf.sprint_break12pc(funpc->Pprintf.sprint_break_allforce_verticpc(funpc->Pretty.sprintf"%selse if"pc.Pprintf.bef)[1,2,(funpc->curr{pcwithPprintf.dang=""}e1);1,0,(funpc->Pretty.sprintf"%sthen"pc.Pprintf.bef)])(funpc->expr1pce2))letloop_else_if_no_elseforce_verticcurrpceel=letreclooppc=function[e1,e2]->Pprintf.sprint_break_alltruepc(funpc->Pretty.sprintf"%s%s"pc.Pprintf.befpc.Pprintf.aft)[1,0,(funpc->else_if_thenforce_verticcurrpc(e1,e2))]|(e1,e2)::eel->Pprintf.sprint_break_alltruepc(funpc->Pretty.sprintf"%s%s"pc.Pprintf.befpc.Pprintf.aft)[1,0,(funpc->Pretty.sprintf"%s%s"(else_if_thenforce_verticcurr{pcwithPprintf.aft="";Pprintf.dang="else"}(e1,e2))(loop{pcwithPprintf.bef=""}eel))]|[]->Pretty.sprintf"%s%s"pc.Pprintf.befpc.Pprintf.aftinlooppceelletloop_else_if_and_elseforce_verticcurrpc(eel,e3)=letreclooppc=function(e1,e2)::eel->Pprintf.sprint_break_alltruepc(funpc->Pretty.sprintf"%s%s"pc.Pprintf.befpc.Pprintf.aft)[1,0,(funpc->Pretty.sprintf"%s%s"(else_if_thenforce_verticcurr{pcwithPprintf.aft="";Pprintf.dang="else"}(e1,e2))(loop{pcwithPprintf.bef=""}eel))]|[]->Pprintf.sprint_break_alltruepc(funpc->Pretty.sprintf"%s%s"pc.Pprintf.befpc.Pprintf.aft)[1,0,(funpc->Pprintf.sprint_break12pc(funpc->Pretty.sprintf"%selse"pc.Pprintf.bef)(funpc->currpce3))]inlooppceelletif_case_has_verticcurrpce1e2eele3=horiz_vertic(fun()->let(_:string)=if_thenfalsecurr{pcwithaft=""}(e1,e2)infalse)(fun()->true)||List.exists(fun(e1,e2)->horiz_vertic(fun()->let(_:string)=else_if_thenfalsecurr{pcwithbef=tabpc.ind;aft=""}(e1,e2)infalse)(fun()->true))eel||horiz_vertic(fun()->let(_:string)=letpc={pcwithbef=tabpc.ind}incomm_exprcurr{pcwithPprintf.bef=Pretty.sprintf"%selse "pc.Pprintf.bef}e3infalse)(fun()->true)(* Expressions displayed without spaces separating elements; special
for expressions as strings or arrays indexes (x.[...] or x.(...)).
Applied only if only containing +, -, *, /, integers and variables. *)letexpr_shortpcx=letrecexpr1pcz=matchzwithMLast.ExApp(_,MLast.ExApp(_,MLast.ExLid(_,Ploc.VaValop),x),y)->ifop="+"||op="-"thenPretty.sprintf"%s%s"(expr1{pcwithPprintf.aft=op}x)(expr2{pcwithPprintf.bef=""}y)elseexpr2pcz|_->expr2pczandexpr2pcz=matchzwithMLast.ExApp(_,MLast.ExApp(_,MLast.ExLid(_,Ploc.VaValop),x),y)->ifop="*"||op="/"thenPretty.sprintf"%s%s"(expr2{pcwithPprintf.aft=op}x)(expr3{pcwithPprintf.bef=""}y)elseexpr3pcz|_->expr3pczandexpr3pcz=matchzwithMLast.ExLid(loc,Ploc.VaValv)->ifis_infixv||has_special_charsvthenraiseExitelsevar_escapedpc(loc,v)|MLast.ExInt(_,Ploc.VaVals,"")->Pretty.sprintf"%s%s%s"pc.Pprintf.befspc.Pprintf.aft|MLast.ExApp(_,MLast.ExApp(_,MLast.ExLid(_,Ploc.VaValop),_),_)->ifList.memop["+";"-";"*";"/"]thenexpr1{pcwithPprintf.bef=Pretty.sprintf"%s("pc.Pprintf.bef;Pprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft}zelseraiseExit|_->raiseExitintryhoriz_vertic(fun()->expr1pcx)(fun()->raiseExit)withExit->exprpcx(* definitions of printers *)letflatten_seque=letrecget_sequence=functionMLast.ExSeq(_,Ploc.VaValel)->Someel|_->Noneinmatchget_sequenceewithSomeel->letreclist_of_sequence=functione::el->beginmatchget_sequenceewithSomeel1->list_of_sequence(el1@el)|None->e::list_of_sequenceelend|[]->[]inSome(list_of_sequenceel)|None->Noneletlidentpcs=Pretty.sprintf"%s%s%s"pc.Pprintf.befspc.Pprintf.aftletstringpcs=Pretty.sprintf"%s\"%s\"%s"pc.Pprintf.befspc.Pprintf.aftletexternal_declpc(loc,n,tyvars,t,sl,attrs)=Pprintf.sprint_break12pc(funpc->var_escaped{pcwithPprintf.bef=Pretty.sprintf"%sexternal "pc.Pprintf.bef;Pprintf.aft=" :"}(loc,n))(funpc->letpc={pcwithPprintf.aft=letpc={pcwithPprintf.bef=""}inPretty.sprintf"%s%s"(hliststring{pcwithPprintf.bef=" = ";Pprintf.aft=""}sl)(hlist(pr_attribute"@@"){pcwithPprintf.bef=""}attrs)}inPretty.sprintf"%s%s"(typevars_binder{pcwithPprintf.aft=""}tyvars)(ctyp{pcwithPprintf.bef=""}t))letexception_declpc(loc,e,tl,id,alg_attrs,item_attrs)=letctyp_apply=Eprinter.apply_levelpr_ctyp"apply"inmatchidwith[]->beginmatchtlwith[]->Pretty.sprintf"%s%s%s"(cons_escaped{pcwithPprintf.bef=Pretty.sprintf"%sexception "pc.Pprintf.bef;Pprintf.aft=""}(loc,e))(hlist(pr_attribute"@"){pcwithPprintf.bef="";Pprintf.aft=""}alg_attrs)(hlist(pr_attribute"@@"){pcwithPprintf.bef=""}item_attrs)|tl->lettl=List.map(funt->t," *")tlinPprintf.sprint_break12pc(funpc->cons_escaped{pcwithPprintf.bef=Pretty.sprintf"%sexception "pc.Pprintf.bef;Pprintf.aft=" of"}(loc,e))(funpc->Pretty.sprintf"%s%s%s"(plistctyp_apply2{pcwithPprintf.aft=""}tl)(hlist(pr_attribute"@"){pcwithPprintf.bef="";Pprintf.aft=""}alg_attrs)(hlist(pr_attribute"@@"){pcwithPprintf.bef=""}item_attrs))end|id->matchtlwith[]->Pprintf.sprint_break12pc(funpc->cons_escaped{pcwithPprintf.bef=Pretty.sprintf"%sexception "pc.Pprintf.bef;Pprintf.aft=" ="}(loc,e))(funpc->Pretty.sprintf"%s%s%s"(mod_ident{pcwithPprintf.aft=""}(loc,id))(hlist(pr_attribute"@"){pcwithPprintf.bef="";Pprintf.aft=""}alg_attrs)(hlist(pr_attribute"@@"){pcwithPprintf.bef=""}item_attrs))|tl->lettl=List.map(funt->t," *")tlinPprintf.sprint_break12pc(funpc->Pprintf.sprint_break12pc(funpc->cons_escaped{pcwithPprintf.bef=Pretty.sprintf"%sexception "pc.Pprintf.bef;Pprintf.aft=" of"}(loc,e))(funpc->plistctyp_apply2{pcwithPprintf.aft=" ="}tl))(funpc->Pretty.sprintf"%s%s%s"(mod_ident{pcwithPprintf.aft=""}(loc,id))(hlist(pr_attribute"@"){pcwithPprintf.bef="";Pprintf.aft=""}alg_attrs)(hlist(pr_attribute"@@"){pcwithPprintf.bef=""}item_attrs))letfunctor_parameter_unvalaarg=matchargwithNone->None|Some(idopt,mt)->Some(option_mapPcaml.unvala(Pcaml.unvalaidopt),mt)letstr_moduleprefpc(m,me,item_attrs)=letm=matchmwithNone->"_"|Somes->sinlet(mal,me)=letrecloop=functionMLast.MeFun(_,Ploc.VaValarg,me)->let(mal,me)=loopmeinfunctor_parameter_unvalaarg::mal,me|me->[],meinloopmeinletmodule_argpc=functionSome(Somes,mt)->Pprintf.sprint_break11pc(funpc->Pretty.sprintf"%s(%s :"pc.Pprintf.befs)(funpc->module_type{pcwithPprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft}mt)|Some(None,mt)->Pprintf.sprint_break11pc(funpc->Pretty.sprintf"%s(_ :"pc.Pprintf.bef)(funpc->module_type{pcwithPprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft}mt)|None->Pretty.sprintf"%s()%s"pc.Pprintf.befpc.Pprintf.aftinlet(me,mto)=matchmewithMLast.MeTyc(_,me,mt)->me,Somemt|_->me,Noneinifpc.aft=""thenmatchmtowithSomemt->Pprintf.sprint_break12pc(funpc->Pprintf.sprint_break12pc(funpc->hlistmodule_arg{pcwithPprintf.bef=Pretty.sprintf"%s%s %s%s"pc.Pprintf.befprefm(ifmal=[]then""else" ");Pprintf.aft=" :"}mal)(funpc->module_type{pcwithPprintf.aft=" ="}mt))(funpc->Pretty.sprintf"%s%s"(module_expr{pcwithPprintf.aft=""}me)(hlist(pr_attribute"@@"){pcwithPprintf.bef=""}(Pcaml.unvalaitem_attrs)))|None->letmal=List.map(funma->ma,"")malinPprintf.sprint_break12pc(funpc->plistbmodule_arg2{pcwithPprintf.bef=Pretty.sprintf"%s%s %s"pc.Pprintf.befprefm;Pprintf.aft=" ="}mal)(funpc->Pretty.sprintf"%s%s"(module_expr{pcwithPprintf.aft=""}me)(hlist(pr_attribute"@@"){pcwithPprintf.bef=""}(Pcaml.unvalaitem_attrs)))elsematchmtowithSomemt->Pprintf.sprint_break00pc(funpc->Pprintf.sprint_break12pc(funpc->Pprintf.sprint_break12pc(funpc->hlistmodule_arg{pcwithPprintf.bef=Pretty.sprintf"%s%s %s%s"pc.Pprintf.befprefm(ifmal=[]then""else" ");Pprintf.aft=" :"}mal)(funpc->module_type{pcwithPprintf.aft=" ="}mt))(funpc->Pretty.sprintf"%s%s"(module_expr{pcwithPprintf.aft=""}me)(hlist(pr_attribute"@@"){pcwithPprintf.bef=""}(Pcaml.unvalaitem_attrs))))(funpc->Pretty.sprintf"%s%s"pc.Pprintf.befpc.Pprintf.aft)|None->letmal=List.map(funma->ma,"")malinPprintf.sprint_break_allfalsepc(funpc->plistbmodule_arg2{pcwithPprintf.bef=Pretty.sprintf"%s%s %s"pc.Pprintf.befprefm;Pprintf.aft=" ="}mal)[1,2,(funpc->Pretty.sprintf"%s%s"(module_expr{pcwithPprintf.aft=""}me)(hlist(pr_attribute"@@"){pcwithPprintf.bef=""}(Pcaml.unvalaitem_attrs)));0,0,(funpc->Pretty.sprintf"%s%s"pc.Pprintf.befpc.Pprintf.aft)]letsig_module_or_module_typeprefunfundefspc(m,mt,item_attrs)=letm=matchmwithNone->"_"|Somes->sinlet(mal,mt)=ifunfunthenletrecloop=functionMLast.MtFun(_,Ploc.VaValarg,mt2)->let(mal,mt)=loopmt2infunctor_parameter_unvalaarg::mal,mt|mt->[],mtinloopmtelse[],mtinletmodule_argpc=functionSome(Somes,mt)->Pprintf.sprint_break11pc(funpc->Pretty.sprintf"%s(%s :"pc.Pprintf.befs)(funpc->module_type{pcwithPprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft}mt)|Some(None,mt)->Pprintf.sprint_break11pc(funpc->Pretty.sprintf"%s(_ :"pc.Pprintf.bef)(funpc->module_type{pcwithPprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft}mt)|None->Pretty.sprintf"%s()%s"pc.Pprintf.befpc.Pprintf.aftinmatchmtwithMLast.MtQuo(_,Ploc.VaVals)->Pretty.sprintf"%s%s"(hlistmodule_arg{pcwithPprintf.bef=Pretty.sprintf"%s%s %s%s"pc.Pprintf.befprefm(ifmal=[]then""else" ");Pprintf.aft=""}mal)(hlist(pr_attribute"@@"){pcwithPprintf.bef=""}(Pcaml.unvalaitem_attrs))|_->letmal=List.map(funma->ma,"")malinifpc.aft=""thenPprintf.sprint_break12pc(funpc->plistbmodule_arg2{pcwithPprintf.bef=Pretty.sprintf"%s%s %s"pc.Pprintf.befprefm;Pprintf.aft=Pretty.sprintf" %s"defs}mal)(funpc->Pretty.sprintf"%s%s"(module_type_level_sig{pcwithPprintf.aft=""}mt)(hlist(pr_attribute"@@"){pcwithPprintf.bef=""}(Pcaml.unvalaitem_attrs)))elsePprintf.sprint_break_allfalsepc(funpc->plistbmodule_arg2{pcwithPprintf.bef=Pretty.sprintf"%s%s %s"pc.Pprintf.befprefm;Pprintf.aft=Pretty.sprintf" %s"defs}mal)[1,2,(funpc->Pretty.sprintf"%s%s"(module_type_level_sig{pcwithPprintf.aft=""}mt)(hlist(pr_attribute"@@"){pcwithPprintf.bef=""}(Pcaml.unvalaitem_attrs)));0,0,(funpc->Pretty.sprintf"%s%s"pc.Pprintf.befpc.Pprintf.aft)]letstr_or_sig_functorpcfargmodule_expr_or_typemet=matchfargwithSome(Somes,mt)->Pprintf.sprint_break12pc(funpc->Pprintf.sprint_break10pc(funpc->Pprintf.sprint_break12pc(funpc->Pretty.sprintf"%sfunctor"pc.Pprintf.bef)(funpc->Pprintf.sprint_break11pc(funpc->Pretty.sprintf"%s(%s :"pc.Pprintf.befs)(funpc->module_type{pcwithPprintf.aft=")"}mt)))(funpc->Pretty.sprintf"%s->"pc.Pprintf.bef))(funpc->module_expr_or_typepcmet)|Some(None,mt)->Pprintf.sprint_break12pc(funpc->Pprintf.sprint_break10pc(funpc->Pprintf.sprint_break12pc(funpc->Pretty.sprintf"%sfunctor"pc.Pprintf.bef)(funpc->Pprintf.sprint_break11pc(funpc->Pretty.sprintf"%s(_ :"pc.Pprintf.bef)(funpc->module_type{pcwithPprintf.aft=")"}mt)))(funpc->Pretty.sprintf"%s->"pc.Pprintf.bef))(funpc->module_expr_or_typepcmet)|None->Pprintf.sprint_break12pc(funpc->Pprintf.sprint_break10pc(funpc->Pprintf.sprint_break12pc(funpc->Pretty.sprintf"%sfunctor"pc.Pprintf.bef)(funpc->Pretty.sprintf"%s()"pc.Pprintf.bef))(funpc->Pretty.sprintf"%s->"pc.Pprintf.bef))(funpc->module_expr_or_typepcmet)letcon_typ_patpc(loc,sl,tpl)=lettpl=List.map(funtp->loc,tp)tplinmatchtplwith[]->longident_lidentpcsl|[tp]->Pretty.sprintf"%s%s"(type_param{pcwithPprintf.aft=" "}tp)(longident_lident{pcwithPprintf.bef=""}sl)|_->Pretty.sprintf"%s%s"(hlistl(comma_aftertype_param)type_param{pcwithPprintf.bef=Pretty.sprintf"%s("pc.Pprintf.bef;Pprintf.aft=") "}tpl)(longident_lident{pcwithPprintf.bef=""}sl)letwith_constraintpcwc=matchwcwithMLast.WcTyp(loc,Ploc.VaValsl,Ploc.VaValtpl,Ploc.VaValpf,t)->Pprintf.sprint_break12pc(funpc->con_typ_pat{pcwithPprintf.bef=Pretty.sprintf"%stype "pc.Pprintf.bef;Pprintf.aft=" ="}(loc,sl,tpl))(funpc->ctyp{pcwithPprintf.bef=Pretty.sprintf"%s%s"pc.Pprintf.bef(ifpfthen"private "else"")}t)|MLast.WcTys(loc,Ploc.VaValsl,Ploc.VaValtpl,t)->Pprintf.sprint_break12pc(funpc->con_typ_pat{pcwithPprintf.bef=Pretty.sprintf"%stype "pc.Pprintf.bef;Pprintf.aft=" :="}(loc,sl,tpl))(funpc->ctyppct)|MLast.WcMod(loc,Ploc.VaValsl,me)->Pprintf.sprint_break12pc(funpc->longident{pcwithPprintf.bef=Pretty.sprintf"%smodule "pc.Pprintf.bef;Pprintf.aft=" ="}sl)(funpc->module_exprpcme)|MLast.WcMos(loc,Ploc.VaValsl,me)->Pprintf.sprint_break12pc(funpc->longident{pcwithPprintf.bef=Pretty.sprintf"%smodule "pc.Pprintf.bef;Pprintf.aft=" :="}sl)(funpc->module_exprpcme)|MLast.WcMty(loc,Ploc.VaValsl,mt)->Pprintf.sprint_break12pc(funpc->longident{pcwithPprintf.bef=Pretty.sprintf"%smodule type "pc.Pprintf.bef;Pprintf.aft=" ="}sl)(funpc->module_typepcmt)|MLast.WcMts(loc,Ploc.VaValsl,mt)->Pprintf.sprint_break12pc(funpc->longident{pcwithPprintf.bef=Pretty.sprintf"%smodule type "pc.Pprintf.bef;Pprintf.aft=" :="}sl)(funpc->module_typepcmt)|x->not_impl"with_constraint"pcxletis_unary=function"-"|"-."->true|_->falseletunaryop_predexprpcx=matchxwithMLast.ExApp(_,MLast.ExLid(_,Ploc.VaValf),_)whenop_predf->expr{pcwithPprintf.bef=Pretty.sprintf"%s("pc.Pprintf.bef;Pprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft}x|MLast.ExFle(_,_,Ploc.VaVal(None,Ploc.VaVal"val"))->expr{pcwithPprintf.bef=Pretty.sprintf"%s("pc.Pprintf.bef;Pprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft}x|x->exprpcxletmap_optionf=functionSomex->Some(fx)|None->Noneletpr_letlikeletoppclocrfpele=horiz_vertic(fun()->ifnot!flag_horiz_let_inthensprintf"\n"elseifpc.dang=";"thenPretty.sprintf"%s%s"(hlist2letop_binding(andop_beforeletop_binding){pcwithPprintf.bef=Pretty.sprintf"%s(%s%s "pc.Pprintf.befletop(ifrfthen" rec"else"");Pprintf.aft=" in ";Pprintf.dang=""}pel)(comm_exprexpr{pcwithPprintf.bef="";Pprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft;Pprintf.dang=""}e)elsePretty.sprintf"%s%s"(hlist2letop_binding(andop_beforeletop_binding){pcwithPprintf.bef=Pretty.sprintf"%s%s%s "pc.Pprintf.befletop(ifrfthen" rec"else"");Pprintf.aft=" in ";Pprintf.dang=""}pel)(comm_exprexpr{pcwithPprintf.bef=""}e))(fun()->ifpc.dang=";"thenPprintf.sprint_break_allfalsepc(funpc->vlist2letop_binding(andop_beforeletop_binding){pcwithPprintf.bef=Pretty.sprintf"%sbegin %s%s "pc.Pprintf.befletop(ifrfthen" rec"else"");Pprintf.aft="in";Pprintf.dang=""}pel)[1,2,(funpc->expr_with_comm_except_if_sequence{pcwithPprintf.dang=""}e);1,0,(funpc->Pretty.sprintf"%send%s"pc.Pprintf.befpc.Pprintf.aft)]elsePprintf.sprint_break10pc(funpc->vlist2letop_binding(andop_beforeletop_binding){pcwithPprintf.bef=Pretty.sprintf"%s%s%s "pc.Pprintf.befletop(ifrfthen" rec"else"");Pprintf.aft="in";Pprintf.dang=""}pel)(funpc->(ifPloc.first_posloc=Ploc.first_pos(MLast.loc_of_expre)thenexprelseexpr_with_comm_except_if_sequence)pce))let_=Eprinter.extendpr_attribute_bodyNone[Some"top",(fune__->Extfun.extende__[Extfun.Etup[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Etup[Extfun.Evar();Extfun.Evar()]];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"PaAttr"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Some"];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]]]],false,(functionPloc.VaVal(_,id),MLast.PaAttr(_,Ploc.VaValp,Some(Ploc.VaVale))->Some(funcurrnexttopbottompc->Pretty.sprintf"%s%s"(space_beforepatt{pcwithPprintf.bef=Pretty.sprintf"%s%s?"pc.Pprintf.befid;Pprintf.aft=" when "}p)(expr{pcwithPprintf.bef=""}e))|_->None);Extfun.Etup[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Etup[Extfun.Evar();Extfun.Evar()]];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"PaAttr"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Eacc[Extfun.Econ"None"]]],false,(functionPloc.VaVal(_,id),MLast.PaAttr(_,Ploc.VaValp,None)->Some(funcurrnexttopbottompc->space_beforepatt{pcwithPprintf.bef=Pretty.sprintf"%s%s?"pc.Pprintf.befid}p)|_->None);Extfun.Etup[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Etup[Extfun.Evar();Extfun.Evar()]];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"TyAttr"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]]],false,(functionPloc.VaVal(_,id),MLast.TyAttr(_,Ploc.VaValty)->Some(funcurrnexttopbottompc->space_beforectyp{pcwithPprintf.bef=Pretty.sprintf"%s%s:"pc.Pprintf.befid}ty)|_->None);Extfun.Etup[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Etup[Extfun.Evar();Extfun.Evar()]];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"SiAttr"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]]],false,(functionPloc.VaVal(_,id),MLast.SiAttr(_,Ploc.VaValsi)->Some(funcurrnexttopbottompc->hlist(space_before(semi_semi_aftersig_item)){pcwithPprintf.bef=Pretty.sprintf"%s%s:"pc.Pprintf.befid}si)|_->None);Extfun.Etup[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Etup[Extfun.Evar();Extfun.Evar()]];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"StAttr"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]]],false,(functionPloc.VaVal(_,id),MLast.StAttr(_,Ploc.VaValst)->Some(funcurrnexttopbottompc->hlist(space_before(semi_semi_afterstr_item)){pcwithPprintf.bef=Pretty.sprintf"%s%s"pc.Pprintf.befid}st)|_->None);Extfun.Etup[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Etup[Extfun.Evar();Extfun.Evar()]];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"StAttr"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"::"];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"StExp"];Extfun.Evar();Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Eacc[Extfun.Econ"[]"]]];Extfun.Eacc[Extfun.Econ"[]"]]]]],false,(functionPloc.VaVal(_,id),MLast.StAttr(_,Ploc.VaVal[MLast.StExp(_,e,Ploc.VaVal[])])->Some(funcurrnexttopbottompc->space_beforeexpr{pcwithPprintf.bef=Pretty.sprintf"%s%s"pc.Pprintf.befid}e)|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))])];Eprinter.extendpr_exprNone[Some"top",(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExSeq"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.ExSeq(loc,Ploc.VaValel)asge->Some(funcurrnexttopbottompc->letel=matchflatten_sequgewithSomeel->el|None->elinhoriz_vertic(fun()->hlistl(semi_after(comm_exprexpr))(comm_exprexpr)pcel)(fun()->vlist3expr_semiexpr_semipcel))|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))]);Some"expr1",(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExFor"];Extfun.Evar();Extfun.Evar();Extfun.Evar();Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.ExFor(loc,v,e1,e2,Ploc.VaVald,Ploc.VaValel)->Some(funcurrnexttopbottompc->Pprintf.sprint_break_allfalsepc(funpc->Pprintf.sprint_break_allfalsepc(funpc->Pretty.sprintf"%s%s"(patt{pcwithPprintf.bef=Pretty.sprintf"%sfor "pc.Pprintf.bef;Pprintf.aft=" = "}v)(curr{pcwithPprintf.bef="";Pprintf.aft=Pretty.sprintf" %s"(ifdthen"to"else"downto")}e1))[1,4,(funpc->currpce2);1,0,(funpc->Pretty.sprintf"%sdo"pc.Pprintf.bef)])[1,2,(funpc->hvlistl(semi_aftercurr)curr{pcwithPprintf.dang=""}el);1,0,(funpc->Pretty.sprintf"%sdone%s"pc.Pprintf.befpc.Pprintf.aft)])|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExWhi"];Extfun.Evar();Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.ExWhi(loc,e1,Ploc.VaValel)->Some(funcurrnexttopbottompc->Pprintf.sprint_break_allfalsepc(funpc->Pprintf.sprint_break_allfalsepc(funpc->Pretty.sprintf"%swhile"pc.Pprintf.bef)[1,2,(funpc->currpce1);1,0,(funpc->Pretty.sprintf"%sdo"pc.Pprintf.bef)])[1,2,(funpc->hvlistl(semi_afterexpr)currpcel);1,0,(funpc->Pretty.sprintf"%sdone%s"pc.Pprintf.befpc.Pprintf.aft)])|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExLop"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Evar();Extfun.Evar()],false,(functionMLast.ExLop(_,Ploc.VaValovf,m,e)->Some(funcurrnexttopbottompc->ifpc.dang=";"thenPprintf.sprint_break10pc(funpc->letpc={pcwithPprintf.aft=letpc={pcwithPprintf.bef=""}inPprintf.sprint_break_allfalsepc(funpc->module_expr{pcwithPprintf.bef=Pretty.sprintf"let open%s "(ifovfthen"!"else"")}m)[1,0,(funpc->"in")]}inPretty.sprintf"%s(%s"pc.Pprintf.befpc.Pprintf.aft)(funpc->curr{pcwithPprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft}e)elsePprintf.sprint_break10pc(funpc->Pprintf.sprint_break_allfalsepc(funpc->module_expr{pcwithPprintf.bef=Pretty.sprintf"%slet open%s "pc.Pprintf.bef(ifovfthen"!"else"")}m)[1,0,(funpc->Pretty.sprintf"%sin"pc.Pprintf.bef)])(funpc->currpce))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExLmd"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Evar();Extfun.Evar()],false,(functionMLast.ExLmd(_,Ploc.VaVals,me,e)->Some(funcurrnexttopbottompc->lets=uidopt_to_maybe_blanksinifpc.dang=";"thenPprintf.sprint_break10pc(funpc->letpc={pcwithPprintf.aft=letpc={pcwithPprintf.bef=""}inPprintf.sprint_break_allfalsepc(funpc->Pretty.sprintf"let module %s ="s)[1,2,(funpc->module_exprpcme);1,0,(funpc->"in")]}inPretty.sprintf"%s(%s"pc.Pprintf.befpc.Pprintf.aft)(funpc->curr{pcwithPprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft}e)elsePprintf.sprint_break10pc(funpc->Pprintf.sprint_break_allfalsepc(funpc->Pretty.sprintf"%slet module %s ="pc.Pprintf.befs)[1,2,(funpc->module_exprpcme);1,0,(funpc->Pretty.sprintf"%sin"pc.Pprintf.bef)])(funpc->currpce))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExApp"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExApp"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExLid"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]];Extfun.Evar()];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExFun"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"::"];Extfun.Etup[Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Eacc[Extfun.Econ"None"]];Extfun.Evar()];Extfun.Eacc[Extfun.Econ"[]"]]]]],true,(functionMLast.ExApp(_,MLast.ExApp(_,MLast.ExLid(_,Ploc.VaValletop),arg),MLast.ExFun(_,Ploc.VaVal[bindpat,Ploc.VaValNone,body]))ase0whennot!(Pcaml.flag_expand_letop_syntax)&&is_letopletop->Some(funcurrnexttopbottompc->letloc=MLast.loc_of_expre0inletrecdeconstruct_andsacc=functionMLast.PaTup(_,Ploc.VaVal[pat1;pat2],Ploc.VaValtrue),MLast.ExApp(_,MLast.ExApp(_,MLast.ExLid(_,Ploc.VaValandop),e1),e2)whenis_andopandop->deconstruct_ands((andop,(pat2,e2,Ploc.VaVal[]))::acc)(pat1,e1)|pat,exp->("andop_unused",(pat,exp,Ploc.VaVal[]))::accinletpel=deconstruct_ands[](bindpat,arg)inpr_letlikeletoppclocfalsepelbody)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExLEx"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.ExLEx(loc,Ploc.VaVale,Ploc.VaValtl,x,Ploc.VaValattrs)->Some(funcurrnexttopbottompc->letpc={pcwithPprintf.bef=Pprintf.sprint_break_allfalsepc(funpc->exception_decl{pcwithPprintf.bef=Pretty.sprintf"%slet "pc.Pprintf.bef}(loc,e,tl,[],attrs,[]))[1,0,(funpc->Pretty.sprintf"%sin"pc.Pprintf.bef)]}incurr{pcwithPprintf.bef=Pretty.sprintf"%s "pc.Pprintf.bef}x)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExLet"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Evar()],false,(functionMLast.ExLet(loc,Ploc.VaValrf,Ploc.VaValpel,e)ase0->Some(funcurrnexttopbottompc->letandop="and"inletpel=List.map(funx->andop,x)pelinletloc=MLast.loc_of_expre0inpr_letlike"let"pclocrfpele)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExMat"];Extfun.Evar();Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.ExMat(loc,e1,Ploc.VaValpwel)ase->Some(funcurrnexttopbottompc->letop=matchewithMLast.ExTry(_,_,Ploc.VaVal_)->"try"|_->"match"inmatchpwelwith[p,wo,e]->horiz_vertic(fun()->ifList.mempc.dang["|";";"]thenPretty.sprintf"%s%s"(expr{pcwithPprintf.bef=Pretty.sprintf"%s(%s "pc.Pprintf.befop;Pprintf.aft=" with "}e1)(match_assocfalse{pcwithPprintf.bef="";Pprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft}((p,wo,e),true))elsePretty.sprintf"%s%s"(expr{pcwithPprintf.bef=Pretty.sprintf"%s%s "pc.Pprintf.befop;Pprintf.aft=" with "}e1)(match_assocfalse{pcwithPprintf.bef=""}((p,wo,e),true)))(fun()->ifList.mempc.dang["|";";"]thenmatchhoriz_vertic(fun()->letpc={pcwithaft=""}inSome(expr{pcwithPprintf.bef=Pretty.sprintf"%sbegin %s "pc.Pprintf.befop;Pprintf.aft=Pretty.sprintf" with%s"pc.Pprintf.aft;Pprintf.dang=""}e1))(fun()->None)withSomes1->letpc={pcwithbef=""}inPprintf.sprint_break10pc(funpc->Pprintf.sprint_break12pc(funpc->Pretty.sprintf"%s%s"pc.Pprintf.befs1)(funpc->match_assocfalsepc((p,wo,e),true)))(funpc->Pretty.sprintf"%send%s"pc.Pprintf.befpc.Pprintf.aft)|None->Pprintf.sprint_break_allfalsepc(funpc->Pretty.sprintf"%sbegin %s"pc.Pprintf.befop)[1,2,(funpc->expr{pcwithPprintf.dang=""}e1);1,0,(funpc->match_assocfalse{pcwithPprintf.bef=Pretty.sprintf"%swith "pc.Pprintf.bef}((p,wo,e),true));1,0,(funpc->Pretty.sprintf"%send%s"pc.Pprintf.befpc.Pprintf.aft)]elsematchhoriz_vertic(fun()->letpc={pcwithaft=""}inSome(expr{pcwithPprintf.bef=Pretty.sprintf"%s%s "pc.Pprintf.befop;Pprintf.aft=Pretty.sprintf" with%s"pc.Pprintf.aft;Pprintf.dang=""}e1))(fun()->None)withSome_->Pprintf.sprint_break12pc(funpc->expr{pcwithPprintf.bef=Pretty.sprintf"%s%s "pc.Pprintf.befop;Pprintf.aft=" with";Pprintf.dang=""}e1)(funpc->match_assocfalsepc((p,wo,e),true))|None->Pprintf.sprint_break_allfalsepc(funpc->Pretty.sprintf"%s%s"pc.Pprintf.befop)[1,2,(funpc->expr{pcwithPprintf.dang=""}e1);1,0,(funpc->match_assocfalse{pcwithPprintf.bef=Pretty.sprintf"%swith "pc.Pprintf.bef}((p,wo,e),true))])|[]->raise_match_failurepc(MLast.loc_of_expre)|_->ifList.mempc.dang["|";";"]thenPprintf.sprint_break10pc(funpc->Pprintf.sprint_break10pc(funpc->Pprintf.sprint_break_allfalsepc(funpc->Pretty.sprintf"%sbegin %s"pc.Pprintf.befop)[1,2,(funpc->exprpce1);1,0,(funpc->Pretty.sprintf"%swith"pc.Pprintf.bef)])(funpc->match_assoc_listloc{pcwithPprintf.dang=""}pwel))(funpc->Pretty.sprintf"%send%s"pc.Pprintf.befpc.Pprintf.aft)elsePprintf.sprint_break10pc(funpc->Pprintf.sprint_break_allfalsepc(funpc->Pretty.sprintf"%s%s"pc.Pprintf.befop)[1,2,(funpc->exprpce1);1,0,(funpc->Pretty.sprintf"%swith"pc.Pprintf.bef)])(funpc->match_assoc_listlocpcpwel))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExTry"];Extfun.Evar();Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.ExTry(loc,e1,Ploc.VaValpwel)ase->Some(funcurrnexttopbottompc->letop=matchewithMLast.ExTry(_,_,Ploc.VaVal_)->"try"|_->"match"inmatchpwelwith[p,wo,e]->horiz_vertic(fun()->ifList.mempc.dang["|";";"]thenPretty.sprintf"%s%s"(expr{pcwithPprintf.bef=Pretty.sprintf"%s(%s "pc.Pprintf.befop;Pprintf.aft=" with "}e1)(match_assocfalse{pcwithPprintf.bef="";Pprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft}((p,wo,e),true))elsePretty.sprintf"%s%s"(expr{pcwithPprintf.bef=Pretty.sprintf"%s%s "pc.Pprintf.befop;Pprintf.aft=" with "}e1)(match_assocfalse{pcwithPprintf.bef=""}((p,wo,e),true)))(fun()->ifList.mempc.dang["|";";"]thenmatchhoriz_vertic(fun()->letpc={pcwithaft=""}inSome(expr{pcwithPprintf.bef=Pretty.sprintf"%sbegin %s "pc.Pprintf.befop;Pprintf.aft=Pretty.sprintf" with%s"pc.Pprintf.aft;Pprintf.dang=""}e1))(fun()->None)withSomes1->letpc={pcwithbef=""}inPprintf.sprint_break10pc(funpc->Pprintf.sprint_break12pc(funpc->Pretty.sprintf"%s%s"pc.Pprintf.befs1)(funpc->match_assocfalsepc((p,wo,e),true)))(funpc->Pretty.sprintf"%send%s"pc.Pprintf.befpc.Pprintf.aft)|None->Pprintf.sprint_break_allfalsepc(funpc->Pretty.sprintf"%sbegin %s"pc.Pprintf.befop)[1,2,(funpc->expr{pcwithPprintf.dang=""}e1);1,0,(funpc->match_assocfalse{pcwithPprintf.bef=Pretty.sprintf"%swith "pc.Pprintf.bef}((p,wo,e),true));1,0,(funpc->Pretty.sprintf"%send%s"pc.Pprintf.befpc.Pprintf.aft)]elsematchhoriz_vertic(fun()->letpc={pcwithaft=""}inSome(expr{pcwithPprintf.bef=Pretty.sprintf"%s%s "pc.Pprintf.befop;Pprintf.aft=Pretty.sprintf" with%s"pc.Pprintf.aft;Pprintf.dang=""}e1))(fun()->None)withSome_->Pprintf.sprint_break12pc(funpc->expr{pcwithPprintf.bef=Pretty.sprintf"%s%s "pc.Pprintf.befop;Pprintf.aft=" with";Pprintf.dang=""}e1)(funpc->match_assocfalsepc((p,wo,e),true))|None->Pprintf.sprint_break_allfalsepc(funpc->Pretty.sprintf"%s%s"pc.Pprintf.befop)[1,2,(funpc->expr{pcwithPprintf.dang=""}e1);1,0,(funpc->match_assocfalse{pcwithPprintf.bef=Pretty.sprintf"%swith "pc.Pprintf.bef}((p,wo,e),true))])|[]->raise_match_failurepc(MLast.loc_of_expre)|_->ifList.mempc.dang["|";";"]thenPprintf.sprint_break10pc(funpc->Pprintf.sprint_break10pc(funpc->Pprintf.sprint_break_allfalsepc(funpc->Pretty.sprintf"%sbegin %s"pc.Pprintf.befop)[1,2,(funpc->exprpce1);1,0,(funpc->Pretty.sprintf"%swith"pc.Pprintf.bef)])(funpc->match_assoc_listloc{pcwithPprintf.dang=""}pwel))(funpc->Pretty.sprintf"%send%s"pc.Pprintf.befpc.Pprintf.aft)elsePprintf.sprint_break10pc(funpc->Pprintf.sprint_break_allfalsepc(funpc->Pretty.sprintf"%s%s"pc.Pprintf.befop)[1,2,(funpc->exprpce1);1,0,(funpc->Pretty.sprintf"%swith"pc.Pprintf.bef)])(funpc->match_assoc_listlocpcpwel))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExFun"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.ExFun(loc,Ploc.VaValpwel)asge->Some(funcurrnexttopbottompc->letuse_function=List.exists(function_,_,MLast.ExUnr_->true|_->false)pwelinletfuntok=ifuse_functionthen"function"else"fun"inmatchpwelwith[p1,Ploc.VaValNone,e1]whenis_irrefut_pattp1->let(pl,e1)=expr_fun_argse1inletpl=p1::plinletsimple_patt=Eprinter.apply_levelpr_patt"simple"inletpl=List.map(funp->p,"")plinletcomm_exprexpr=matche1withMLast.ExSeq(_,Ploc.VaVal_)->expr|MLast.ExUnr_->(funpc_->Pretty.sprintf"%s.%s"pc.Pprintf.befpc.Pprintf.aft)|_->comm_exprexprinifList.mempc.dang["|";";"]thenPprintf.sprint_break13pc(funpc->plistsimple_patt4{pcwithPprintf.bef=Pretty.sprintf"%s(%s "pc.Pprintf.beffuntok;Pprintf.aft=" ->"}pl)(funpc->comm_exprexpr{pcwithPprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft;Pprintf.dang=""}e1)elsePprintf.sprint_break12pc(funpc->plistsimple_patt4{pcwithPprintf.bef=Pretty.sprintf"%s%s "pc.Pprintf.beffuntok;Pprintf.aft=" ->"}pl)(funpc->comm_exprexprpce1)|[]->letloc=MLast.loc_of_exprgeinifList.mempc.dang["|";";"]thenPprintf.sprint_break12pc(funpc->Pretty.sprintf"%s(fun _ ->"pc.Pprintf.bef)(funpc->raise_match_failure{pcwithPprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft}loc)elsePprintf.sprint_break12pc(funpc->Pretty.sprintf"%sfun _ ->"pc.Pprintf.bef)(funpc->raise_match_failurepcloc)|pwel->ifList.mempc.dang["|";";"]thenletpc={pcwithPprintf.ind=pc.Pprintf.ind+1}inPprintf.sprint_break10pc(funpc->Pretty.sprintf"%s(function"pc.Pprintf.bef)(funpc->match_assoc_listloc{pcwithPprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft}pwel)elsePprintf.sprint_break_alltruepc(funpc->Pretty.sprintf"%sfunction"pc.Pprintf.bef)[1,0,(funpc->match_assoc_listlocpcpwel)])|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExIfe"];Extfun.Evar();Extfun.Evar();Extfun.Evar();Extfun.Evar()],false,(functionMLast.ExIfe(_,e1,e2,e3)asge->Some(funcurrnexttopbottompc->horiz_vertic(fun()->matche3withMLast.ExLong(_,MLast.LiUid(_,Ploc.VaVal"()"))->ifpc.dang="else"thennextpcgeelsePretty.sprintf"%s%s"(curr{pcwithPprintf.bef=Pretty.sprintf"%sif "pc.Pprintf.bef;Pprintf.aft=" then ";Pprintf.dang=""}e1)(curr{pcwithPprintf.bef=""}e2)|_->Pretty.sprintf"%s%s%s"(curr{pcwithPprintf.bef=Pretty.sprintf"%sif "pc.Pprintf.bef;Pprintf.aft=" then ";Pprintf.dang=""}e1)(curr{pcwithPprintf.bef="";Pprintf.aft=" else ";Pprintf.dang=""}e2)(curr{pcwithPprintf.bef=""}e3))(fun()->let(force_vertic,eel,e3)=if!flag_equilibrate_casesthenlet(eel,e3)=letthen_and_else_are_close=are_close(curr{pcwithbef="";aft=""})e2e3in(* if "then" and "else" cases are close, don't break
the "else" part into its possible "else if" in
order to display "then" and "else" symmetrically *)ifthen_and_else_are_closethen[],e3elseget_else_ife3in(* if a case does not fit on line, all cases must be cut *)lethas_vertic=if_case_has_verticcurrpce1e2eele3inhas_vertic,eel,e3elselet(eel,e3)=get_else_ife3infalse,eel,e3inmatche3withMLast.ExLong(_,MLast.LiUid(_,Ploc.VaVal"()"))->ifpc.dang="else"thennextpcgeelseifeel=[]thenif_thenforce_verticcurrpc(e1,e2)elsePretty.sprintf"%s%s"(if_thenforce_verticcurr{pcwithPprintf.aft="";Pprintf.dang="else"}(e1,e2))(loop_else_if_no_elseforce_verticcurr{pcwithPprintf.bef=""}eel)|_->Pretty.sprintf"%s%s"(if_thenforce_verticcurr{pcwithPprintf.aft="";Pprintf.dang="else"}(e1,e2))(loop_else_if_and_elseforce_verticcurr{pcwithPprintf.bef=""}(eel,e3))))|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))]);Some"tuple",(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExTup"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.ExTup(_,Ploc.VaValel)->Some(funcurrnexttopbottompc->letel=List.map(fune->e,",")elinplistnext0pcel)|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))]);Some"assign",(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExAss"];Extfun.Evar();Extfun.Evar();Extfun.Evar()],false,(functionMLast.ExAss(loc,x,y)->Some(funcurrnexttopbottompc->operatorpcnextexpr2(loc,"<-")xy)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExAss"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExFle"];Extfun.Evar();Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Etup[Extfun.Eacc[Extfun.Econ"None"];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Estr"val"]]]];Extfun.Evar()],false,(functionMLast.ExAss(loc,MLast.ExFle(_,x,Ploc.VaVal(None,Ploc.VaVal"val")),y)->Some(funcurrnexttopbottompc->operatorpcnextexpr2(loc,":=")xy)|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))]);Some"or",(fune__->Extfun.extende__[Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->letunfold=functionMLast.ExApp(_,MLast.ExApp(_,MLast.ExLid(_,Ploc.VaValop),x),y)->ifList.memop["||";"or"]thenSome(x," "^op,y)elseNone|_->Noneinletloc=MLast.loc_of_exprzinright_operatorpcloc0unfoldnextz))]);Some"and",(fune__->Extfun.extende__[Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->letunfold=functionMLast.ExApp(_,MLast.ExApp(_,MLast.ExLid(_,Ploc.VaValop),x),y)->ifList.memop["&&";"&"]thenSome(x," "^op,y)elseNone|_->Noneinletloc=MLast.loc_of_exprzinright_operatorpcloc0unfoldnextz))]);Some"less",(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExApp"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExApp"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExLid"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]];Extfun.Evar()];Extfun.Evar()],false,(functionMLast.ExApp(loc,MLast.ExApp(_,MLast.ExLid(_,Ploc.VaValop),x),y)asz->Some(funcurrnexttopbottompc->ifList.memop["!=";"<";"<=";"<>";"=";"==";">";">="]||is_infixop0opthenoperatorpcnextnext0(loc,op)xyelsenextpcz)|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))]);Some"concat",(fune__->Extfun.extende__[Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->letunfold=functionMLast.ExApp(_,MLast.ExApp(_,MLast.ExLid(_,Ploc.VaValop),x),y)->ifList.memop["^";"@"]||is_infixop1opthenSome(x," "^op,y)elseNone|_->Noneinletloc=MLast.loc_of_exprzinright_operatorpcloc0unfoldnextz))]);Some"alg_attribute",(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExAtt"];Extfun.Evar();Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.ExAtt(_,e,Ploc.VaValattr)->Some(funcurrnexttopbottompc->Pretty.sprintf"%s%s"(curr{pcwithPprintf.aft="[@"}e)(attribute_body{pcwithPprintf.bef="";Pprintf.aft=Pretty.sprintf"]%s"pc.Pprintf.aft}attr))|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))]);Some"cons",(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExApp"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExApp"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExLong"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"LiUid"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Estr"::"]]];Extfun.Evar()];Extfun.Evar()],false,(functionMLast.ExApp(_,MLast.ExApp(_,MLast.ExLong(_,MLast.LiUid(_,Ploc.VaVal"::")),_),_)asz->Some(funcurrnexttopbottompc->let(xl,y)=make_expr_listzinmatchywithSomey->letxl=List.map(funx->x," ::")(xl@[y])inplistnext0pcxl|None->nextpcz)|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))]);Some"add",(fune__->Extfun.extende__[Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->letops=["+";"+.";"-";"-."]inletunfold=functionMLast.ExApp(_,MLast.ExApp(_,MLast.ExLid(_,Ploc.VaValop),x),y)->ifList.memopops||is_infixop2opthenSome(x," "^op,y)elseNone|_->Noneinletloc=MLast.loc_of_exprzinleft_operatorpcloc0unfoldnextz))]);Some"mul",(fune__->Extfun.extende__[Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->letops=["*";"*.";"/";"/.";"%";"land";"lor";"lxor";"mod"]inletunfold=functionMLast.ExApp(_,MLast.ExApp(_,MLast.ExLid(_,Ploc.VaValop),x),y)->ifList.memopops||is_infixop3opthenSome(x," "^op,y)elseNone|_->Noneinletloc=MLast.loc_of_exprzinleft_operatorpcloc0unfoldnextz))]);Some"pow",(fune__->Extfun.extende__[Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->letops=["**";"asr";"lsl";"lsr"]inletunfold=functionMLast.ExApp(_,MLast.ExApp(_,MLast.ExLid(_,Ploc.VaValop),x),y)->ifList.memopops||is_infixop4opthenSome(x," "^op,y)elseNone|_->Noneinletloc=MLast.loc_of_exprzinright_operatorpcloc0unfoldnextz))]);Some"unary_minus",(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExApp"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExLid"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]];Extfun.Evar()],false,(functionMLast.ExApp(_,MLast.ExLid(_,Ploc.VaValop),x)asz->Some(funcurrnexttopbottompc->letops=["-","-";"-.","-.";"~+","+";"~+.","+."]inletin_opsx=List.mem_assocxopsinifin_opsopthenunaryin_opscurr{pcwithPprintf.bef=Pretty.sprintf"%s%s"pc.Pprintf.bef(List.assocopops)}xelsenextpcz)|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))]);Some"apply",(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExApp"];Extfun.Evar();Extfun.Evar();Extfun.Evar()],false,(functionMLast.ExApp(loc,_,_)asz->Some(funcurrnexttopbottompc->letinf=matchzwithMLast.ExApp(_,MLast.ExApp(_,MLast.ExLid(_,Ploc.VaValn),_),_)->is_infixn||is_infix_operatorn|MLast.ExApp(_,MLast.ExApp(_,MLast.ExLong(_,MLast.LiUid(_,Ploc.VaVal"::")),_),_)->true|_->falseinifinfthennextpczelseletcons_args_opt=letrecloopargs=functionMLast.ExApp(_,x,y)->loop(y::args)x|MLast.ExLong(_,_)ase->Some(e,args)|_->Noneinloop[]zinmatchcons_args_optwithSome(e,(_::_::_asal))->letexpr_or=Eprinter.apply_levelpr_expr"or"inletal=List.map(funa->a,",")alinPprintf.sprint_break12pc(funpc->nextpce)(funpc->letpc={pcwithPprintf.ind=pc.Pprintf.ind+1}inplistexpr_or0{pcwithPprintf.bef=Pretty.sprintf"%s("pc.Pprintf.bef;Pprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft}al)|_->letunfold=functionMLast.ExApp(_,MLast.ExApp(_,MLast.ExLong(_,MLast.LiUid(_,Ploc.VaVal"::")),_),_)->None|MLast.ExApp(_,MLast.ExApp(_,MLast.ExLid(_,Ploc.VaValn),_),_)whenis_infixn||is_infix_operatorn->None|MLast.ExApp(_,MLast.ExLid(_,Ploc.VaValn),_)whenis_unaryn||is_prefixopn->None|MLast.ExApp(_,x,y)->Some(x,"",y)|e->Noneinleft_operatorpcloc2unfoldnextz)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExLaz"];Extfun.Evar();Extfun.Evar()],false,(functionMLast.ExLaz(_,e)->Some(funcurrnexttopbottompc->Pprintf.sprint_break12pc(funpc->Pretty.sprintf"%slazy"pc.Pprintf.bef)(funpc->nextpce))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExAsr"];Extfun.Evar();Extfun.Evar()],false,(functionMLast.ExAsr(_,e)->Some(funcurrnexttopbottompc->Pprintf.sprint_break12pc(funpc->Pretty.sprintf"%sassert"pc.Pprintf.bef)(funpc->nextpce))|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))]);Some"dot",(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExBae"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.ExBae(_,Ploc.VaValop,x,Ploc.VaValel)->Some(funcurrnexttopbottompc->letel=List.map(fune->e,";")elinPprintf.sprint_break00pc(funpc->currpcx)(funpc->plistexpr_short0{pcwithPprintf.bef=Pretty.sprintf"%s%s{"pc.Pprintf.befop;Pprintf.aft=Pretty.sprintf"}%s"pc.Pprintf.aft}el))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExBae"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Estr"."];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.ExBae(_,Ploc.VaVal".",e,Ploc.VaValel)->Some(funcurrnexttopbottompc->letel=List.map(fune->e,",")elinPretty.sprintf"%s%s"(curr{pcwithPprintf.aft=".{"}e)(plistexpr_short0{pcwithPprintf.bef="";Pprintf.aft=Pretty.sprintf"}%s"pc.Pprintf.aft}el))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExSte"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.ExSte(_,Ploc.VaValop,x,Ploc.VaValel)->Some(funcurrnexttopbottompc->letel=List.map(fune->e,";")elinPprintf.sprint_break00pc(funpc->currpcx)(funpc->plistexpr_short0{pcwithPprintf.bef=Pretty.sprintf"%s%s["pc.Pprintf.befop;Pprintf.aft=Pretty.sprintf"]%s"pc.Pprintf.aft}el))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExSte"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Estr"."];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"::"];Extfun.Evar();Extfun.Eacc[Extfun.Econ"[]"]]]],false,(functionMLast.ExSte(_,Ploc.VaVal".",x,Ploc.VaVal[y])->Some(funcurrnexttopbottompc->Pprintf.sprint_break00pc(funpc->currpcx)(funpc->expr_short{pcwithPprintf.bef=Pretty.sprintf"%s.["pc.Pprintf.bef;Pprintf.aft=Pretty.sprintf"]%s"pc.Pprintf.aft}y))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExAre"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.ExAre(_,Ploc.VaValop,x,Ploc.VaValel)->Some(funcurrnexttopbottompc->letel=List.map(fune->e,";")elinPprintf.sprint_break00pc(funpc->currpcx)(funpc->plistexpr_short0{pcwithPprintf.bef=Pretty.sprintf"%s%s("pc.Pprintf.befop;Pprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft}el))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExAre"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Estr"."];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"::"];Extfun.Evar();Extfun.Eacc[Extfun.Econ"[]"]]]],false,(functionMLast.ExAre(_,Ploc.VaVal".",x,Ploc.VaVal[y])->Some(funcurrnexttopbottompc->Pprintf.sprint_break00pc(funpc->currpcx)(funpc->expr_short{pcwithPprintf.bef=Pretty.sprintf"%s.("pc.Pprintf.bef;Pprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft}y))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExLong"];Extfun.Evar();Extfun.Evar()],false,(functionMLast.ExLong(_,li)->Some(funcurrnexttopbottompc->longidentpcli)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExFle"];Extfun.Evar();Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.ExFle(_,e,Ploc.VaVallili)->Some(funcurrnexttopbottompc->Pprintf.sprint_break00pc(funpc->curr{pcwithPprintf.aft="."}e)(funpc->longident_lidentpclili))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExFle"];Extfun.Evar();Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Etup[Extfun.Eacc[Extfun.Econ"None"];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]]]],false,(functionMLast.ExFle(loc,e,Ploc.VaVal(None,Ploc.VaValv))->Some(funcurrnexttopbottompc->Pprintf.sprint_break00pc(funpc->curr{pcwithPprintf.aft="."}e)(funpc->var_escapedpc(loc,v)))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExFle"];Extfun.Evar();Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Etup[Extfun.Eacc[Extfun.Econ"None"];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Estr"val"]]]],false,(functionMLast.ExFle(_,x,Ploc.VaVal(None,Ploc.VaVal"val"))->Some(funcurrnexttopbottompc->next{pcwithPprintf.bef=Pretty.sprintf"%s!"pc.Pprintf.bef}x)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExOpen"];Extfun.Evar();Extfun.Evar();Extfun.Evar()],false,(functionMLast.ExOpen(_,li,e)->Some(funcurrnexttopbottompc->matchewithMLast.ExLong(_,MLast.LiUid(_,Ploc.VaVal"[]"))->Pprintf.sprint_break00pc(funpc->longident{pcwithPprintf.aft="."}li)(funpc->Pprintf.sprint_break_allfalsepc(funpc->Pretty.sprintf"%s[]%s"pc.Pprintf.befpc.Pprintf.aft)[])|MLast.ExApp(_,MLast.ExApp(_,MLast.ExLong(_,MLast.LiUid(_,Ploc.VaVal"::")),_),_)->Pprintf.sprint_break00pc(funpc->longident{pcwithPprintf.aft="."}li)(funpc->currpce)|MLast.ExRec(_,Ploc.VaVal_,None)->Pprintf.sprint_break00pc(funpc->longident{pcwithPprintf.aft="."}li)(funpc->currpce)|MLast.ExRec(_,Ploc.VaVal_,Some_)->Pprintf.sprint_break00pc(funpc->longident{pcwithPprintf.aft="."}li)(funpc->currpce)|MLast.ExLid(loc,Ploc.VaValv)->Pprintf.sprint_break00pc(funpc->longident{pcwithPprintf.aft="."}li)(funpc->var_escapedpc(loc,v))|e->Pprintf.sprint_break00pc(funpc->longident{pcwithPprintf.aft="."}li)(funpc->Pprintf.sprint_break_allfalsepc(funpc->expr{pcwithPprintf.bef=Pretty.sprintf"%s("pc.Pprintf.bef;Pprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft}e)[]))|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))]);Some"~.",(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExApp"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExLid"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]];Extfun.Evar()],false,(functionMLast.ExApp(_,MLast.ExLid(_,Ploc.VaValop),x)asz->Some(funcurrnexttopbottompc->letin_opsx=is_prefixopxinifin_opsopthenunaryin_opscurr{pcwithPprintf.bef=Pretty.sprintf"%s%s"pc.Pprintf.befop}xelsenextpcz)|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))]);Some"simple",(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExSeq"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.ExSeq(loc,Ploc.VaValel)->Some(funcurrnexttopbottompc->letpc={pcwithdang=""}inPprintf.sprint_break_allfalsepc(funpc->Pretty.sprintf"%sbegin"pc.Pprintf.bef)[1,2,(funpc->hvlistl(semi_after(comm_exprexpr1))(comm_exprexpr1)pcel);1,0,(funpc->Pretty.sprintf"%send%s"pc.Pprintf.befpc.Pprintf.aft)])|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExLab"];Extfun.Evar();Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Some"];Extfun.Evar()]]],false,(functionMLast.ExLab(loc,_,Ploc.VaVal(Some_))->Some(funcurrnexttopbottompc->errorloc"labels not pretty printed (in expr)")|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExLab"];Extfun.Evar();Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Eacc[Extfun.Econ"None"]]],false,(functionMLast.ExLab(loc,_,Ploc.VaValNone)->Some(funcurrnexttopbottompc->errorloc"labels not pretty printed (in expr)")|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExOlb"];Extfun.Evar();Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Eacc[Extfun.Econ"None"]]],false,(functionMLast.ExOlb(loc,_,Ploc.VaValNone)->Some(funcurrnexttopbottompc->errorloc"labels not pretty printed (in expr)")|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExChr"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.ExChr(_,Ploc.VaVals)->Some(funcurrnexttopbottompc->Pretty.sprintf"%s'%s'%s"pc.Pprintf.bef(ocaml_chars)pc.Pprintf.aft)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExExten"];Extfun.Evar();Extfun.Evar()],false,(functionMLast.ExExten(_,e)->Some(funcurrnexttopbottompc->pr_extension"%"pce)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExStr"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Etup[Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]]]],false,(functionMLast.ExStr(_,Ploc.VaVal(_,Ploc.VaVals))->Some(funcurrnexttopbottompc->Pretty.sprintf"%s\"%s\"%s"pc.Pprintf.befspc.Pprintf.aft)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExVrn"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.ExVrn(_,Ploc.VaVals)->Some(funcurrnexttopbottompc->failwith"variants not pretty printed (in expr); add pr_ro.cmo")|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExLid"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.ExLid(loc,Ploc.VaVals)->Some(funcurrnexttopbottompc->var_escapedpc(loc,s))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExUnr"];Extfun.Evar()],false,(functionMLast.ExUnrloc->Some(funcurrnexttopbottompc->Ploc.raiseloc(Failure"pr_expr of (PaUnr _) not allowed except at rhs of match-case"))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExInt"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Estr"n"],false,(functionMLast.ExInt(_,Ploc.VaVals,"n")->Some(funcurrnexttopbottompc->ifString.lengths>0&&s.[0]='-'thenPretty.sprintf"%s(%sn)%s"pc.Pprintf.befspc.Pprintf.aftelsePretty.sprintf"%s%sn%s"pc.Pprintf.befspc.Pprintf.aft)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExInt"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Estr"L"],false,(functionMLast.ExInt(_,Ploc.VaVals,"L")->Some(funcurrnexttopbottompc->ifString.lengths>0&&s.[0]='-'thenPretty.sprintf"%s(%sL)%s"pc.Pprintf.befspc.Pprintf.aftelsePretty.sprintf"%s%sL%s"pc.Pprintf.befspc.Pprintf.aft)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExInt"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Estr"l"],false,(functionMLast.ExInt(_,Ploc.VaVals,"l")->Some(funcurrnexttopbottompc->ifString.lengths>0&&s.[0]='-'thenPretty.sprintf"%s(%sl)%s"pc.Pprintf.befspc.Pprintf.aftelsePretty.sprintf"%s%sl%s"pc.Pprintf.befspc.Pprintf.aft)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExFlo"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.ExFlo(_,Ploc.VaVals)->Some(funcurrnexttopbottompc->ifString.lengths>0&&s.[0]='-'thenPretty.sprintf"%s(%s)%s"pc.Pprintf.befspc.Pprintf.aftelsePretty.sprintf"%s%s%s"pc.Pprintf.befspc.Pprintf.aft)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExInt"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Estr""],false,(functionMLast.ExInt(_,Ploc.VaVals,"")->Some(funcurrnexttopbottompc->ifString.lengths>0&&s.[0]='-'thenPretty.sprintf"%s(%s)%s"pc.Pprintf.befspc.Pprintf.aftelsePretty.sprintf"%s%s%s"pc.Pprintf.befspc.Pprintf.aft)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExPck"];Extfun.Evar();Extfun.Evar();Extfun.Eacc[Extfun.Econ"None"]],false,(functionMLast.ExPck(_,me,None)->Some(funcurrnexttopbottompc->module_expr{pcwithPprintf.bef=Pretty.sprintf"%s(module "pc.Pprintf.bef;Pprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft}me)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExPck"];Extfun.Evar();Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Some"];Extfun.Evar()]],false,(functionMLast.ExPck(_,me,Somemt)->Some(funcurrnexttopbottompc->letpc={pcwithPprintf.ind=pc.Pprintf.ind+1}inPprintf.sprint_break10pc(funpc->module_expr{pcwithPprintf.bef=Pretty.sprintf"%s(module "pc.Pprintf.bef;Pprintf.aft=" :"}me)(funpc->module_type{pcwithPprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft}mt))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExTyc"];Extfun.Evar();Extfun.Evar();Extfun.Evar()],false,(functionMLast.ExTyc(_,e,t)->Some(funcurrnexttopbottompc->letpc={pcwithPprintf.ind=pc.Pprintf.ind+1}inPprintf.sprint_break10pc(funpc->expr{pcwithPprintf.bef=Pretty.sprintf"%s("pc.Pprintf.bef;Pprintf.aft=" :"}e)(funpc->ctyp{pcwithPprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft}t))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExApp"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExApp"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExLong"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"LiUid"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Estr"::"]]];Extfun.Evar()];Extfun.Evar()],false,(functionMLast.ExApp(_,MLast.ExApp(_,MLast.ExLong(_,MLast.LiUid(_,Ploc.VaVal"::")),_),_)asz->Some(funcurrnexttopbottompc->let(xl,y)=make_expr_listzinmatchywithSome_->letpc={pcwithPprintf.ind=pc.Pprintf.ind+1}inexpr{pcwithPprintf.bef=Pretty.sprintf"%s("pc.Pprintf.bef;Pprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft;Pprintf.dang=""}z|None->letxl=List.map(funx->x,";")xlinletpc={pcwithPprintf.ind=pc.Pprintf.ind+1}inplist(comm_exprexpr1)0{pcwithPprintf.bef=Pretty.sprintf"%s["pc.Pprintf.bef;Pprintf.aft=Pretty.sprintf"]%s"pc.Pprintf.aft}xl)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExArr"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.ExArr(_,Ploc.VaValel)->Some(funcurrnexttopbottompc->ifel=[]thenPretty.sprintf"%s[| |]%s"pc.Pprintf.befpc.Pprintf.aftelseletel=List.map(fune->e,";")elinletpc={pcwithPprintf.ind=pc.Pprintf.ind+3}inplistexpr0{pcwithPprintf.bef=Pretty.sprintf"%s[| "pc.Pprintf.bef;Pprintf.aft=Pretty.sprintf" |]%s"pc.Pprintf.aft}el)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExRec"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Some"];Extfun.Evar()]],false,(functionMLast.ExRec(_,Ploc.VaVallel,Somee)->Some(funcurrnexttopbottompc->letdot_expr=Eprinter.apply_levelpr_expr"dot"inletlxl=List.map(funlx->lx,";")lelinletpc={pcwithPprintf.bef=dot_expr{pcwithPprintf.bef=Pretty.sprintf"%s{"pc.Pprintf.bef;Pprintf.aft=" with "}e}inplistl(comm_patt_any(record_bindingfalse))(comm_patt_any(record_bindingtrue))1{pcwithPprintf.aft=Pretty.sprintf"}%s"pc.Pprintf.aft}lxl)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExRec"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Eacc[Extfun.Econ"None"]],false,(functionMLast.ExRec(_,Ploc.VaVallel,None)->Some(funcurrnexttopbottompc->letlxl=List.map(funlx->lx,";")lelinplistl(comm_patt_any(record_bindingfalse))(comm_patt_any(record_bindingtrue))1{pcwithPprintf.bef=Pretty.sprintf"%s{"pc.Pprintf.bef;Pprintf.aft=Pretty.sprintf"}%s"pc.Pprintf.aft}lxl)|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))]);Some"bottom",(fune__->Extfun.extende__[Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->letfail()=Ploc.raise(MLast.loc_of_exprz)(Failure(sprintf"pr_expr %d"(Obj.tag(Obj.reprz))))inletpc={pcwithPprintf.ind=pc.Pprintf.ind+1}inbottom~fail:fail{pcwithPprintf.bef=Pretty.sprintf"%s("pc.Pprintf.bef;Pprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft;Pprintf.dang=""}z))])];Eprinter.extendpr_pattNone[Some"top",(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"PaAli"];Extfun.Evar();Extfun.Evar();Extfun.Evar()],false,(functionMLast.PaAli(_,x,y)->Some(funcurrnexttopbottompc->letpc={pcwithPprintf.aft=letpc={pcwithPprintf.bef=""}inpatt{pcwithPprintf.bef=" as "}y}inpattpcx)|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))]);Some"or",(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"PaOrp"];Extfun.Evar();Extfun.Evar();Extfun.Evar()],false,(functionMLast.PaOrp(loc,_,_)asz->Some(funcurrnexttopbottompc->letunfold=functionMLast.PaOrp(_,x,y)->Some(x," |",y)|_->Noneinleft_operatorpcloc0unfoldnextz)|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))]);Some"tuple",(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"PaTup"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Eacc[Extfun.Econ"False"]]],false,(functionMLast.PaTup(_,Ploc.VaValpl,Ploc.VaValfalse)->Some(funcurrnexttopbottompc->letpl=List.map(funp->p,",")plinplistnext0{pcwithPprintf.aft=Pretty.sprintf", ..%s"pc.Pprintf.aft}pl)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"PaTup"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Eacc[Extfun.Econ"True"]]],false,(functionMLast.PaTup(_,Ploc.VaValpl,Ploc.VaValtrue)->Some(funcurrnexttopbottompc->letpl=List.map(funp->p,",")plinplistnext0pcpl)|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))]);Some"alg_attribute",(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"PaAtt"];Extfun.Evar();Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.PaAtt(_,p,Ploc.VaValattr)->Some(funcurrnexttopbottompc->Pretty.sprintf"%s%s"(curr{pcwithPprintf.aft="[@"}p)(attribute_body{pcwithPprintf.bef="";Pprintf.aft=Pretty.sprintf"]%s"pc.Pprintf.aft}attr))|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))]);None,(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"PaEff"];Extfun.Evar();Extfun.Evar();Extfun.Evar()],false,(functionMLast.PaEff(_,p1,p2)->Some(funcurrnexttopbottompc->Pretty.sprintf"%s%s"(next{pcwithPprintf.bef=Pretty.sprintf"%seffect "pc.Pprintf.bef;Pprintf.aft=", "}p1)(simple_patt{pcwithPprintf.bef=""}p2))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"PaExc"];Extfun.Evar();Extfun.Evar()],false,(functionMLast.PaExc(loc,p)->Some(funcurrnexttopbottompc->next{pcwithPprintf.bef=Pretty.sprintf"%sexception "pc.Pprintf.bef}p)|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))]);Some"range",(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"PaRng"];Extfun.Evar();Extfun.Evar();Extfun.Evar()],false,(functionMLast.PaRng(_,x,y)->Some(funcurrnexttopbottompc->Pretty.sprintf"%s%s"(next{pcwithPprintf.aft=".."}x)(next{pcwithPprintf.bef=""}y))|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))]);Some"cons",(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"PaApp"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"PaApp"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"PaLong"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"LiUid"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Estr"::"]];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Eacc[Extfun.Econ"[]"]]];Extfun.Evar()];Extfun.Evar()],false,(functionMLast.PaApp(_,MLast.PaApp(_,MLast.PaLong(_,MLast.LiUid(_,Ploc.VaVal"::"),Ploc.VaVal[]),_),_)asz->Some(funcurrnexttopbottompc->let(xl,y)=make_patt_listzinmatchywithSomey->letxl=List.map(funx->x," ::")(xl@[y])inplistnext0pcxl|None->nextpcz)|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))]);Some"apply",(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"PaApp"];Extfun.Evar();Extfun.Evar();Extfun.Evar()],false,(functionMLast.PaApp(_,_,_)asz->Some(funcurrnexttopbottompc->letp_pl_opt=letreclooppl=functionMLast.PaApp(_,x,y)->loop(y::pl)x|MLast.PaLong(_,MLast.LiUid(_,Ploc.VaVal"::"),Ploc.VaVal[])->None|p->Some(p,pl)inloop[]zinmatchp_pl_optwithNone->nextpcz|Some(p1,[p2])->Pprintf.sprint_break12pc(funpc->currpcp1)(funpc->nextpcp2)|Some(p,pl)->letpatt=Eprinter.apply_levelpr_patt"range"inletal=List.map(funa->a,",")plinPprintf.sprint_break12pc(funpc->nextpcp)(funpc->letpc={pcwithPprintf.ind=pc.Pprintf.ind+1}inplistpatt0{pcwithPprintf.bef=Pretty.sprintf"%s("pc.Pprintf.bef;Pprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft}al))|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))]);Some"simple",(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"PaLong"];Extfun.Evar();Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.PaLong(_,li,Ploc.VaVall)->Some(funcurrnexttopbottompc->Pretty.sprintf"%s%s"(longident{pcwithPprintf.aft=" (type "}li)(hlistlident{pcwithPprintf.bef="";Pprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft}(List.mapsndl)))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"PaLong"];Extfun.Evar();Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Eacc[Extfun.Econ"[]"]]],false,(functionMLast.PaLong(_,li,Ploc.VaVal[])->Some(funcurrnexttopbottompc->longidentpcli)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"PaPfx"];Extfun.Evar();Extfun.Evar();Extfun.Evar()],false,(functionMLast.PaPfx(_,li,p)->Some(funcurrnexttopbottompc->Pretty.sprintf"%s%s"(longident{pcwithPprintf.aft="."}li)(curr{pcwithPprintf.bef=""}p))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"PaPfx"];Extfun.Evar();Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"PaLid"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]]],false,(functionMLast.PaPfx(loc,li,MLast.PaLid(_,Ploc.VaValy))->Some(funcurrnexttopbottompc->Pretty.sprintf"%s%s"(longident{pcwithPprintf.aft=".("}li)(var_escaped{pcwithPprintf.bef="";Pprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft}(loc,y)))|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))]);Some"atomic",(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"PaVrn"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.PaVrn(_,Ploc.VaVals)->Some(funcurrnexttopbottompc->failwith"polymorphic variants not pretty printed; add pr_ro.cmo")|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"PaLab"];Extfun.Evar();Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.PaLab(loc,_,Ploc.VaVal_)->Some(funcurrnexttopbottompc->errorloc"labels not pretty printed (in patt)")|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"PaOlb"];Extfun.Evar();Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Some"];Extfun.Evar()]]],false,(functionMLast.PaOlb(loc,_,Ploc.VaVal(Some_))->Some(funcurrnexttopbottompc->errorloc"labels not pretty printed (in patt)")|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"PaOlb"];Extfun.Evar();Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Some"];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExOlb"];Extfun.Evar();Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Some"];Extfun.Evar()]]]]]],false,(functionMLast.PaOlb(loc,_,Ploc.VaVal(Some(MLast.ExOlb(_,_,Ploc.VaVal(Some_)))))->Some(funcurrnexttopbottompc->errorloc"labels not pretty printed (in patt)")|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"PaOlb"];Extfun.Evar();Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Eacc[Extfun.Econ"None"]]],false,(functionMLast.PaOlb(loc,_,Ploc.VaValNone)->Some(funcurrnexttopbottompc->errorloc"labels not pretty printed (in patt)")|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"PaOlb"];Extfun.Evar();Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Some"];Extfun.Evar()]]],false,(functionMLast.PaOlb(loc,_,Ploc.VaVal(Some_))->Some(funcurrnexttopbottompc->errorloc"labels not pretty printed (in patt)")|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"PaOlb"];Extfun.Evar();Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Eacc[Extfun.Econ"None"]]],false,(functionMLast.PaOlb(loc,_,Ploc.VaValNone)->Some(funcurrnexttopbottompc->errorloc"labels not pretty printed (in patt)")|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"PaAny"];Extfun.Evar()],false,(functionMLast.PaAny_->Some(funcurrnexttopbottompc->Pretty.sprintf"%s_%s"pc.Pprintf.befpc.Pprintf.aft)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"PaStr"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.PaStr(_,Ploc.VaVals)->Some(funcurrnexttopbottompc->Pretty.sprintf"%s\"%s\"%s"pc.Pprintf.befspc.Pprintf.aft)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"PaChr"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.PaChr(_,Ploc.VaVals)->Some(funcurrnexttopbottompc->Pretty.sprintf"%s'%s'%s"pc.Pprintf.bef(ocaml_chars)pc.Pprintf.aft)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"PaLong"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"LiUid"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Eacc[Extfun.Econ"[]"]]],false,(functionMLast.PaLong(loc,MLast.LiUid(_,Ploc.VaVals),Ploc.VaVal[])->Some(funcurrnexttopbottompc->cons_escapedpc(loc,s))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"PaLid"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.PaLid(loc,Ploc.VaVals)->Some(funcurrnexttopbottompc->var_escapedpc(loc,s))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"PaExten"];Extfun.Evar();Extfun.Evar()],false,(functionMLast.PaExten(_,e)->Some(funcurrnexttopbottompc->pr_extension"%"pce)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"PaInt"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Estr"n"],false,(functionMLast.PaInt(_,Ploc.VaVals,"n")->Some(funcurrnexttopbottompc->ifString.lengths>0&&s.[0]='-'thenPretty.sprintf"%s(%sn)%s"pc.Pprintf.befspc.Pprintf.aftelsePretty.sprintf"%s%sn%s"pc.Pprintf.befspc.Pprintf.aft)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"PaInt"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Estr"L"],false,(functionMLast.PaInt(_,Ploc.VaVals,"L")->Some(funcurrnexttopbottompc->ifString.lengths>0&&s.[0]='-'thenPretty.sprintf"%s(%sL)%s"pc.Pprintf.befspc.Pprintf.aftelsePretty.sprintf"%s%sL%s"pc.Pprintf.befspc.Pprintf.aft)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"PaInt"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Estr"l"],false,(functionMLast.PaInt(_,Ploc.VaVals,"l")->Some(funcurrnexttopbottompc->ifString.lengths>0&&s.[0]='-'thenPretty.sprintf"%s(%sl)%s"pc.Pprintf.befspc.Pprintf.aftelsePretty.sprintf"%s%sl%s"pc.Pprintf.befspc.Pprintf.aft)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"PaFlo"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.PaFlo(_,Ploc.VaVals)->Some(funcurrnexttopbottompc->ifString.lengths>0&&s.[0]='-'thenPretty.sprintf"%s(%s)%s"pc.Pprintf.befspc.Pprintf.aftelsePretty.sprintf"%s%s%s"pc.Pprintf.befspc.Pprintf.aft)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"PaInt"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Estr""],false,(functionMLast.PaInt(_,Ploc.VaVals,"")->Some(funcurrnexttopbottompc->ifString.lengths>0&&s.[0]='-'thenPretty.sprintf"%s(%s)%s"pc.Pprintf.befspc.Pprintf.aftelsePretty.sprintf"%s%s%s"pc.Pprintf.befspc.Pprintf.aft)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"PaUnp"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Eacc[Extfun.Econ"None"]],false,(functionMLast.PaUnp(_,Ploc.VaVals,None)->Some(funcurrnexttopbottompc->lets=uidopt_to_maybe_blanksinPretty.sprintf"%s(module %s)%s"pc.Pprintf.befspc.Pprintf.aft)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"PaUnp"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Some"];Extfun.Evar()]],false,(functionMLast.PaUnp(_,Ploc.VaVals,Somemt)->Some(funcurrnexttopbottompc->lets=uidopt_to_maybe_blanksinletpc={pcwithPprintf.ind=pc.Pprintf.ind+1}inPprintf.sprint_break10pc(funpc->Pretty.sprintf"%s(module %s :"pc.Pprintf.befs)(funpc->module_type{pcwithPprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft}mt))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"PaNty"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.PaNty(_,Ploc.VaVals)->Some(funcurrnexttopbottompc->var_escaped_noloc{pcwithPprintf.bef=Pretty.sprintf"%s(type "pc.Pprintf.bef;Pprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft}s)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"PaTyc"];Extfun.Evar();Extfun.Evar();Extfun.Evar()],false,(functionMLast.PaTyc(_,p,t)->Some(funcurrnexttopbottompc->Pprintf.sprint_break11pc(funpc->patt{pcwithPprintf.bef=Pretty.sprintf"%s("pc.Pprintf.bef;Pprintf.aft=" :"}p)(funpc->ctyp{pcwithPprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft}t))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"PaApp"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"PaApp"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"PaLong"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"LiUid"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Estr"::"]];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Eacc[Extfun.Econ"[]"]]];Extfun.Evar()];Extfun.Evar()],false,(functionMLast.PaApp(_,MLast.PaApp(_,MLast.PaLong(_,MLast.LiUid(_,Ploc.VaVal"::"),Ploc.VaVal[]),_),_)asz->Some(funcurrnexttopbottompc->let(xl,y)=make_patt_listzinmatchywithSomey->letpc={pcwithPprintf.ind=pc.Pprintf.ind+1}inpatt{pcwithPprintf.bef=Pretty.sprintf"%s("pc.Pprintf.bef;Pprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft}z|None->letxl=List.map(funx->x,";")xlinletpc={pcwithPprintf.ind=pc.Pprintf.ind+1}inplistpatt0{pcwithPprintf.bef=Pretty.sprintf"%s["pc.Pprintf.bef;Pprintf.aft=Pretty.sprintf"]%s"pc.Pprintf.aft}xl)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"PaArr"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.PaArr(_,Ploc.VaValpl)->Some(funcurrnexttopbottompc->ifpl=[]thenPretty.sprintf"%s[| |]%s"pc.Pprintf.befpc.Pprintf.aftelseletpl=List.map(funp->p,";")plinletpc={pcwithPprintf.ind=pc.Pprintf.ind+3}inplistpatt0{pcwithPprintf.bef=Pretty.sprintf"%s[| "pc.Pprintf.bef;Pprintf.aft=Pretty.sprintf" |]%s"pc.Pprintf.aft}pl)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"PaRec"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.PaRec(_,Ploc.VaVallpl)->Some(funcurrnexttopbottompc->let(lpl,closed)=List.fold_right(funlp(lpl,closed)->matchlpwithMLast.PaAny_,MLast.PaAny_->lpl,true|lp->lp::lpl,closed)lpl([],false)inletlxl=List.map(fun(a,b)->(a,b,Ploc.VaVal[]),";")lplinletpc={pcwithPprintf.ind=pc.Pprintf.ind+1}inplist(bindinglabel_pattpatt)0{pcwithPprintf.bef=Pretty.sprintf"%s{"pc.Pprintf.bef;Pprintf.aft=Pretty.sprintf"%s}%s"(ifclosedthen"; _"else"")pc.Pprintf.aft}lxl)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"PaLaz"];Extfun.Evar();Extfun.Evar()],false,(functionMLast.PaLaz(_,p)->Some(funcurrnexttopbottompc->Pprintf.sprint_break12pc(funpc->Pretty.sprintf"%slazy"pc.Pprintf.bef)(funpc->currpcp))|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))]);Some"bottom",(fune__->Extfun.extende__[Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->letfail()=Ploc.raise(MLast.loc_of_pattz)(Failure(Format.asprintf"pr_patt %d: %a"(Obj.tag(Obj.reprz))Pp_MLast.pp_pattz))inletpc={pcwithPprintf.ind=pc.Pprintf.ind+1}inbottom~fail:fail{pcwithPprintf.bef=Pretty.sprintf"%s("pc.Pprintf.bef;Pprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft}z))])];Eprinter.extendpr_ctypNone[Some"top",(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"TyMan"];Extfun.Evar();Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Evar()],false,(functionMLast.TyMan(loc,x,Ploc.VaValpf,y)->Some(funcurrnexttopbottompc->letop=ifpfthen"= private"else"="inoperatorpcnextnext2(loc,op)xy)|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))]);Some"alg_attribute",(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"TyAtt"];Extfun.Evar();Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.TyAtt(_,ct,Ploc.VaValattr)->Some(funcurrnexttopbottompc->Pretty.sprintf"%s%s"(curr{pcwithPprintf.aft="[@"}ct)(attribute_body{pcwithPprintf.bef="";Pprintf.aft=Pretty.sprintf"]%s"pc.Pprintf.aft}attr))|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))]);Some"below_alg_attribute",(fune__->Extfun.extende__[Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))]);Some"arrow",(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"TyArr"];Extfun.Evar();Extfun.Evar();Extfun.Evar()],false,(functionMLast.TyArr(loc,_,_)asz->Some(funcurrnexttopbottompc->letunfold=functionMLast.TyArr(_,x,y)->Some(x," ->",y)|_->Noneinright_operatorpcloc2unfoldnextz)|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))]);Some"star",(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"TyTup"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.TyTup(_,Ploc.VaValtl)->Some(funcurrnexttopbottompc->lettl=List.map(funt->t," *")tlinletpp1pc(lab,ct)=matchPcaml.unvalalabwithNone->nextpcct|Somel->next{pcwithPprintf.bef=Pretty.sprintf"%s%s:"pc.Pprintf.bef(Pcaml.unvalal)}ctinplistpp12pctl)|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))]);Some"apply",(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"TyApp"];Extfun.Evar();Extfun.Evar();Extfun.Evar()],false,(functionMLast.TyApp(loc,t1,t2)->Some(funcurrnexttopbottompc->matcht1withMLast.TyApp(_,_,_)->let(t,tl)=letrecloopargs=functionMLast.TyApp(_,x,y)->loop(y::args)x|t->t,argsinloop[t2]t1inPprintf.sprint_break12pc(funpc->hlistl(comma_afterctyp)ctyp{pcwithPprintf.bef=Pretty.sprintf"%s("pc.Pprintf.bef;Pprintf.aft=")"}tl)(funpc->currpct)|_->matcht2withMLast.TyApp(_,_,_)->Pprintf.sprint_break12pc(funpc->currpct2)(funpc->nextpct1)|t->Pprintf.sprint_break12pc(funpc->nextpct2)(funpc->nextpct1))|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))]);Some"dot",(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"TyOpen"];Extfun.Evar();Extfun.Evar();Extfun.Evar()],false,(functionMLast.TyOpen(_,me,t)->Some(funcurrnexttopbottompc->Pretty.sprintf"%s%s"(longident{pcwithPprintf.aft=".( "}me)(ctyp{pcwithPprintf.bef="";Pprintf.aft=Pretty.sprintf" )%s"pc.Pprintf.aft}t))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"TyAcc"];Extfun.Evar();Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.TyAcc(_,me,Ploc.VaVallid)->Some(funcurrnexttopbottompc->longident{pcwithPprintf.aft=Pretty.sprintf".%s%s"lidpc.Pprintf.aft}me)|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))]);Some"simple",(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"TyVrn"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Some"];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Some"];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]]]],false,(functionMLast.TyVrn(_,Ploc.VaVal_,Some(Some(Ploc.VaVal_)))->Some(funcurrnexttopbottompc->failwith"variants not pretty printed (in type); add pr_ro.cmo")|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"TyVrn"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Some"];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Some"];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Eacc[Extfun.Econ"[]"]]]]],false,(functionMLast.TyVrn(_,Ploc.VaVal_,Some(Some(Ploc.VaVal[])))->Some(funcurrnexttopbottompc->failwith"variants not pretty printed (in type); add pr_ro.cmo")|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"TyVrn"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Some"];Extfun.Eacc[Extfun.Econ"None"]]],false,(functionMLast.TyVrn(_,Ploc.VaVal_,SomeNone)->Some(funcurrnexttopbottompc->failwith"variants not pretty printed (in type); add pr_ro.cmo")|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"TyVrn"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Eacc[Extfun.Econ"None"]],false,(functionMLast.TyVrn(_,Ploc.VaVal_,None)->Some(funcurrnexttopbottompc->failwith"variants not pretty printed (in type); add pr_ro.cmo")|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"TyLab"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Evar()],false,(functionMLast.TyLab(loc,Ploc.VaVal_,_)->Some(funcurrnexttopbottompc->errorloc"labels not pretty printed (in type)")|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"TyOlb"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Evar()],false,(functionMLast.TyOlb(loc,Ploc.VaVal_,_)->Some(funcurrnexttopbottompc->errorloc"labels not pretty printed (in type)")|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"TyExten"];Extfun.Evar();Extfun.Evar()],false,(functionMLast.TyExten(_,e)->Some(funcurrnexttopbottompc->pr_extension"%"pce)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"TyOpn"];Extfun.Evar()],false,(functionMLast.TyOpn_->Some(funcurrnexttopbottompc->Pretty.sprintf"%s..%s"pc.Pprintf.befpc.Pprintf.aft)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"TyAny"];Extfun.Evar()],false,(functionMLast.TyAny_->Some(funcurrnexttopbottompc->Pretty.sprintf"%s_%s"pc.Pprintf.befpc.Pprintf.aft)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"TyQuo"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.TyQuo(loc,Ploc.VaVals)->Some(funcurrnexttopbottompc->type_varpcs)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"TyLid"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.TyLid(loc,Ploc.VaValt)->Some(funcurrnexttopbottompc->var_escapedpc(loc,t))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"TyPck"];Extfun.Evar();Extfun.Evar()],false,(functionMLast.TyPck(_,mt)->Some(funcurrnexttopbottompc->letpc={pcwithPprintf.ind=pc.Pprintf.ind+1}inPprintf.sprint_break10pc(funpc->Pretty.sprintf"%s(module"pc.Pprintf.bef)(funpc->module_type{pcwithPprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft}mt))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"TySum"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.TySum(loc,Ploc.VaValvdl)->Some(funcurrnexttopbottompc->ifvdl=[]thenPretty.sprintf"%s|%s"pc.Pprintf.befpc.Pprintf.aftelsehoriz_vertic(fun()->ifhas_cons_with_paramsvdlthensprintf"\n"elsehlist2cons_decl(bar_beforecons_decl)pcvdl)(fun()->vlist2cons_decl(bar_beforecons_decl){pcwithPprintf.bef=Pretty.sprintf"%s "pc.Pprintf.bef}vdl))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"TyRec"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.TyRec(loc,Ploc.VaValltl)->Some(funcurrnexttopbottompc->Pprintf.sprint_break_allfalsepc(funpc->letpc={pcwithPprintf.ind=pc.Pprintf.ind+2}inhvlistl(semi_afterlabel_decl)label_decl{pcwithPprintf.bef=Pretty.sprintf"%s{ "pc.Pprintf.bef;Pprintf.aft=Pretty.sprintf" }%s"pc.Pprintf.aft}ltl)[])|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))]);Some"bottom",(fune__->Extfun.extende__[Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->letfail()=Ploc.raise(MLast.loc_of_ctypz)(Failure(sprintf"[INTERNAL ERROR] pr_ctyp %d"(Obj.tag(Obj.reprz))))inletpc={pcwithPprintf.ind=pc.Pprintf.ind+1}inbottom~fail:fail{pcwithPprintf.bef=Pretty.sprintf"%s("pc.Pprintf.bef;Pprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft}z))])];Eprinter.extendpr_str_itemNone[Some"top",(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"StExten"];Extfun.Evar();Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.StExten(_,e,Ploc.VaValattrs)->Some(funcurrnexttopbottompc->Pretty.sprintf"%s%s"(pr_extension"%%"{pcwithPprintf.aft=""}e)(hlist(pr_attribute"@@"){pcwithPprintf.bef=""}attrs))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"StFlAtt"];Extfun.Evar();Extfun.Evar()],false,(functionMLast.StFlAtt(_,attr)->Some(funcurrnexttopbottompc->pr_attribute"@@@"pcattr)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"StUse"];Extfun.Evar();Extfun.Evar();Extfun.Evar()],false,(functionMLast.StUse(_,fn,sl)->Some(funcurrnexttopbottompc->letpc={pcwithaft=""}inPretty.sprintf"%s%s"pc.Pprintf.befpc.Pprintf.aft)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"StCls"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.StCls(_,Ploc.VaVal_)->Some(funcurrnexttopbottompc->failwith"classes and objects not pretty printed; add pr_ro.cmo")|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"StClt"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.StClt(_,Ploc.VaVal_)->Some(funcurrnexttopbottompc->failwith"classes and objects not pretty printed; add pr_ro.cmo")|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"StExp"];Extfun.Evar();Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.StExp(_,e,Ploc.VaValattrs)->Some(funcurrnexttopbottompc->ifpc.aft=";;"thenPretty.sprintf"%s%s"(expr{pcwithPprintf.aft=""}e)(hlist(pr_attribute"@@"){pcwithPprintf.bef=""}attrs)elsePprintf.sprint_break12pc(funpc->Pretty.sprintf"%slet _ ="pc.Pprintf.bef)(funpc->Pretty.sprintf"%s%s"(expr{pcwithPprintf.aft=""}e)(hlist(pr_attribute"@@"){pcwithPprintf.bef=""}attrs)))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"StVal"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.StVal(loc,Ploc.VaValrf,Ploc.VaValpel)->Some(funcurrnexttopbottompc->horiz_vertic(fun()->hlist2let_binding(and_beforelet_binding){pcwithPprintf.bef=Pretty.sprintf"%slet%s "pc.Pprintf.bef(ifrfthen" rec"else"")}pel)(fun()->vlist2let_binding(and_beforelet_binding){pcwithPprintf.bef=Pretty.sprintf"%slet%s "pc.Pprintf.bef(ifrfthen" rec"else"")}pel))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"StTypExten"];Extfun.Evar();Extfun.Evar()],false,(functionMLast.StTypExten(loc,te)->Some(funcurrnexttopbottompc->type_extensionloc{pcwithPprintf.bef=Pretty.sprintf"%stype "pc.Pprintf.bef}te)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"StTyp"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.StTyp(loc,Ploc.VaValnonrf,Ploc.VaValtdl)->Some(funcurrnexttopbottompc->vlist2type_decl(and_beforetype_decl){pcwithPprintf.bef=Pretty.sprintf"%stype%s "pc.Pprintf.bef(ifnonrfthen" nonrec"else"")}tdl)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"StOpn"];Extfun.Evar();Extfun.Evar();Extfun.Evar();Extfun.Evar()],false,(functionMLast.StOpn(loc,ovf,me,attrs)->Some(funcurrnexttopbottompc->Pretty.sprintf"%s%s"(module_expr{pcwithPprintf.bef=Pretty.sprintf"%sopen%s "pc.Pprintf.bef(ifPcaml.unvalaovfthen"!"else"");Pprintf.aft=""}me)(hlist(pr_attribute"@@"){pcwithPprintf.bef=""}(Pcaml.unvalaattrs)))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"StMty"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"MtQuo"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]];Extfun.Evar()],false,(functionMLast.StMty(_,Ploc.VaValm,MLast.MtQuo(_,Ploc.VaValid),item_attrs)->Some(funcurrnexttopbottompc->hlist(pr_attribute"@@"){pcwithPprintf.bef=Pretty.sprintf"%smodule type %s"pc.Pprintf.befm}(Pcaml.unvalaitem_attrs))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"StMty"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Evar();Extfun.Evar()],false,(functionMLast.StMty(_,Ploc.VaValm,mt,item_attrs)->Some(funcurrnexttopbottompc->sig_module_or_module_type"module type"false"="pc(Somem,mt,item_attrs))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"StMod"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.StMod(_,Ploc.VaValrf,Ploc.VaValmdl)->Some(funcurrnexttopbottompc->letmdl=List.map(fun(m,mt,item_attrs)->map_optionPcaml.unvala(Pcaml.unvalam),mt,item_attrs)mdlinletrf=ifrfthen" rec"else""invlist2(str_module("module"^rf))(str_module"and")pcmdl)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"StInc"];Extfun.Evar();Extfun.Evar();Extfun.Evar()],false,(functionMLast.StInc(_,me,attrs)->Some(funcurrnexttopbottompc->Pretty.sprintf"%s%s"(module_expr{pcwithPprintf.bef=Pretty.sprintf"%sinclude "pc.Pprintf.bef;Pprintf.aft=""}me)(hlist(pr_attribute"@@"){pcwithPprintf.bef=""}(Pcaml.unvalaattrs)))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"StExt"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.StExt(loc,Ploc.VaValn,Ploc.VaValtyvars,t,Ploc.VaValsl,Ploc.VaValattrs)->Some(funcurrnexttopbottompc->external_declpc(loc,n,tyvars,t,sl,attrs))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"StExc"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Evar()],false,(functionMLast.StExc(loc,Ploc.VaValec,item_attrs)->Some(funcurrnexttopbottompc->Pretty.sprintf"%s%s"(extension_constructorloc{pcwithPprintf.bef=Pretty.sprintf"%sexception "pc.Pprintf.bef;Pprintf.aft=""}ec)(hlist(pr_attribute"@@"){pcwithPprintf.bef=""}(Pcaml.unvalaitem_attrs)))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"StDcl"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.StDcl(loc,Ploc.VaValsil)->Some(funcurrnexttopbottompc->ifsil=[]thenletpc={pcwithaft=""}inPretty.sprintf"%s(* *)%s"pc.Pprintf.befpc.Pprintf.aftelseletstr_item_sep=if!flag_semi_semithensemi_semi_afterstr_itemelsestr_iteminvlistlstr_item_sepstr_itempcsil)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"StDir"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Some"];Extfun.Evar()]]],false,(functionMLast.StDir(_,Ploc.VaVals,Ploc.VaVal(Somee))->Some(funcurrnexttopbottompc->letpc={pcwithaft=""}inexpr{pcwithPprintf.bef=Pretty.sprintf"%s(* #%s "pc.Pprintf.befs;Pprintf.aft=Pretty.sprintf" *)%s"pc.Pprintf.aft}e)|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))])];Eprinter.extendpr_sig_itemNone[Some"top",(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"SgExten"];Extfun.Evar();Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.SgExten(_,e,Ploc.VaValattrs)->Some(funcurrnexttopbottompc->Pretty.sprintf"%s%s"(pr_extension"%%"{pcwithPprintf.aft=""}e)(hlist(pr_attribute"@@"){pcwithPprintf.bef=""}attrs))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"SgFlAtt"];Extfun.Evar();Extfun.Evar()],false,(functionMLast.SgFlAtt(_,attr)->Some(funcurrnexttopbottompc->pr_attribute"@@@"pcattr)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"SgCls"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.SgCls(_,Ploc.VaVal_)->Some(funcurrnexttopbottompc->failwith"classes and objects not pretty printed; add pr_ro.cmo")|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"SgClt"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.SgClt(_,Ploc.VaVal_)->Some(funcurrnexttopbottompc->failwith"classes and objects not pretty printed; add pr_ro.cmo")|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"SgVal"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.SgVal(loc,Ploc.VaVals,t,Ploc.VaValattrs)->Some(funcurrnexttopbottompc->Pprintf.sprint_break12pc(funpc->var_escaped{pcwithPprintf.bef=Pretty.sprintf"%sval "pc.Pprintf.bef;Pprintf.aft=" :"}(loc,s))(funpc->Pretty.sprintf"%s%s"(ctyp{pcwithPprintf.aft=""}t)(hlist(pr_attribute"@@"){pcwithPprintf.bef=""}attrs)))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"SgTypExten"];Extfun.Evar();Extfun.Evar()],false,(functionMLast.SgTypExten(loc,te)->Some(funcurrnexttopbottompc->type_extensionloc{pcwithPprintf.bef=Pretty.sprintf"%stype "pc.Pprintf.bef}te)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"SgTyp"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.SgTyp(loc,Ploc.VaValnonrf,Ploc.VaValtdl)->Some(funcurrnexttopbottompc->vlist2type_decl(and_beforetype_decl){pcwithPprintf.bef=Pretty.sprintf"%stype%s "pc.Pprintf.bef(ifnonrfthen" nonrec"else"")}tdl)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"SgOpn"];Extfun.Evar();Extfun.Evar();Extfun.Evar()],false,(functionMLast.SgOpn(_,i,item_attrs)->Some(funcurrnexttopbottompc->Pretty.sprintf"%s%s"(longident{pcwithPprintf.bef=Pretty.sprintf"%sopen "pc.Pprintf.bef;Pprintf.aft=""}i)(hlist(pr_attribute"@@"){pcwithPprintf.bef=""}(Pcaml.unvalaitem_attrs)))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"SgMty"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"MtQuo"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]];Extfun.Evar()],false,(functionMLast.SgMty(_,Ploc.VaValm,MLast.MtQuo(_,Ploc.VaValid),item_attrs)->Some(funcurrnexttopbottompc->hlist(pr_attribute"@@"){pcwithPprintf.bef=Pretty.sprintf"%smodule type %s"pc.Pprintf.befm}(Pcaml.unvalaitem_attrs))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"SgMtySubst"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Evar();Extfun.Evar()],false,(functionMLast.SgMtySubst(_,Ploc.VaValm,mt,item_attrs)->Some(funcurrnexttopbottompc->sig_module_or_module_type"module type"false":="pc(Somem,mt,item_attrs))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"SgMty"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Evar();Extfun.Evar()],false,(functionMLast.SgMty(_,Ploc.VaValm,mt,item_attrs)->Some(funcurrnexttopbottompc->sig_module_or_module_type"module type"false"="pc(Somem,mt,item_attrs))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"SgMtyAlias"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.SgMtyAlias(loc,Ploc.VaVali,Ploc.VaValli,Ploc.VaValitem_attrs)->Some(funcurrnexttopbottompc->Pretty.sprintf"%s%s"(longident{pcwithPprintf.bef=Pretty.sprintf"%smodule %s = "pc.Pprintf.befi;Pprintf.aft=""}li)(hlist(pr_attribute"@@"){pcwithPprintf.bef=""}item_attrs))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"SgModSubst"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Evar();Extfun.Evar()],false,(functionMLast.SgModSubst(_,Ploc.VaVali,li,item_attrs)->Some(funcurrnexttopbottompc->Pretty.sprintf"%s%s"(longident{pcwithPprintf.bef=Pretty.sprintf"%smodule %s := "pc.Pprintf.befi;Pprintf.aft=""}li)(hlist(pr_attribute"@@"){pcwithPprintf.bef=""}(Pcaml.unvalaitem_attrs)))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"SgMod"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.SgMod(_,Ploc.VaValrf,Ploc.VaValmdl)->Some(funcurrnexttopbottompc->letmdl=List.map(fun(m,mt,item_attrs)->map_optionPcaml.unvala(Pcaml.unvalam),mt,item_attrs)mdlinletrf=ifrfthen" rec"else""invlist2(sig_module_or_module_type("module"^rf)true":")(sig_module_or_module_type"and"true":")pcmdl)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"SgDcl"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.SgDcl(loc,Ploc.VaValsil)->Some(funcurrnexttopbottompc->ifsil=[]thenletpc={pcwithaft=""}inPretty.sprintf"%s(* *)%s"pc.Pprintf.befpc.Pprintf.aftelseletsig_item_sep=if!flag_semi_semithensemi_semi_aftersig_itemelsesig_iteminvlistlsig_item_sepsig_itempcsil)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"SgInc"];Extfun.Evar();Extfun.Evar();Extfun.Evar()],false,(functionMLast.SgInc(_,mt,item_attrs)->Some(funcurrnexttopbottompc->Pretty.sprintf"%s%s"(module_type{pcwithPprintf.bef=Pretty.sprintf"%sinclude "pc.Pprintf.bef;Pprintf.aft=""}mt)(hlist(pr_attribute"@@"){pcwithPprintf.bef=""}(Pcaml.unvalaitem_attrs)))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"SgExt"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.SgExt(loc,Ploc.VaValn,Ploc.VaValtyvars,t,Ploc.VaValsl,Ploc.VaValattrs)->Some(funcurrnexttopbottompc->external_declpc(loc,n,tyvars,t,sl,attrs))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"SgExc"];Extfun.Evar();Extfun.Evar();Extfun.Evar()],false,(functionMLast.SgExc(_,gc,item_attrs)->Some(funcurrnexttopbottompc->Pretty.sprintf"%s%s"(cons_decl{pcwithPprintf.bef=Pretty.sprintf"%sexception "pc.Pprintf.bef;Pprintf.aft=""}gc)(hlist(pr_attribute"@@"){pcwithPprintf.bef=""}(Pcaml.unvalaitem_attrs)))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"SgDir"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Some"];Extfun.Evar()]]],false,(functionMLast.SgDir(_,Ploc.VaVals,Ploc.VaVal(Somee))->Some(funcurrnexttopbottompc->letpc={pcwithaft=""}inexpr{pcwithPprintf.bef=Pretty.sprintf"%s(* #%s "pc.Pprintf.befs;Pprintf.aft=Pretty.sprintf" *)%s"pc.Pprintf.aft}e)|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))])];Eprinter.extendpr_longidentNone[Some"dot",(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"LiUid"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.LiUid(loc,Ploc.VaVals)->Some(funcurrnexttopbottompc->cons_escapedpc(loc,s))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"LiApp"];Extfun.Evar();Extfun.Evar();Extfun.Evar()],false,(functionMLast.LiApp(_,x,y)->Some(funcurrnexttopbottompc->Pretty.sprintf"%s%s"(longident{pcwithPprintf.aft="("}x)(longident{pcwithPprintf.bef="";Pprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft}y))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"LiAcc"];Extfun.Evar();Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.LiAcc(loc,x,Ploc.VaValuid)->Some(funcurrnexttopbottompc->Pretty.sprintf"%s%s"(curr{pcwithPprintf.aft="."}x)(cons_escaped{pcwithPprintf.bef=""}(loc,uid)))|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))]);Some"bottom",(fune__->Extfun.extende__[Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->Pretty.sprintf"%s[INTERNAL ERROR(pr_module_longident): unexpected longident]%s"pc.Pprintf.befpc.Pprintf.aft))])];Eprinter.extendpr_module_exprNone[Some"top",(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"MeFun"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Evar()],false,(functionMLast.MeFun(_,Ploc.VaValarg,me)->Some(funcurrnexttopbottompc->str_or_sig_functorpc(functor_parameter_unvalaarg)module_exprme)|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))]);Some"alg_attribute",(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"MeAtt"];Extfun.Evar();Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.MeAtt(_,ct,Ploc.VaValattr)->Some(funcurrnexttopbottompc->Pretty.sprintf"%s%s"(curr{pcwithPprintf.aft="[@"}ct)(attribute_body{pcwithPprintf.bef="";Pprintf.aft=Pretty.sprintf"]%s"pc.Pprintf.aft}attr))|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))]);None,(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"MeStr"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.MeStr(loc,Ploc.VaValsil)->Some(funcurrnexttopbottompc->letstr_item_sep=if!flag_semi_semithensemi_semi_afterstr_itemelsestr_iteminhoriz_vertic(fun()->ifalone_in_linepcthensprintf"\n"elsehliststr_item_sep{pcwithPprintf.bef=Pretty.sprintf"%sstruct "pc.Pprintf.bef;Pprintf.aft=Pretty.sprintf" end%s"pc.Pprintf.aft}sil)(fun()->Pprintf.sprint_break_alltruepc(funpc->Pretty.sprintf"%sstruct"pc.Pprintf.bef)[1,2,(funpc->vliststr_item_seppcsil);1,0,(funpc->Pretty.sprintf"%send%s"pc.Pprintf.befpc.Pprintf.aft)]))|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))]);Some"apply",(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"MeApp"];Extfun.Evar();Extfun.Evar();Extfun.Evar()],false,(functionMLast.MeApp(_,x,y)->Some(funcurrnexttopbottompc->letmod_exp2pc(is_first,me)=ifis_firstthennextpcmeelsemodule_expr{pcwithPprintf.bef=Pretty.sprintf"%s("pc.Pprintf.bef;Pprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft}meinlet(me,mel)=letrecloopmel=functionMLast.MeApp(_,x,y)->loop((false,y)::mel)x|me->(true,me),melinloop[false,y]xinletmel=List.map(funme->me,"")(me::mel)inplistmod_exp22pcmel)|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))]);Some"dot",(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"MeAcc"];Extfun.Evar();Extfun.Evar();Extfun.Evar()],false,(functionMLast.MeAcc(_,x,y)->Some(funcurrnexttopbottompc->Pretty.sprintf"%s%s"(curr{pcwithPprintf.aft="."}x)(curr{pcwithPprintf.bef=""}y))|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))]);Some"simple",(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"MeExten"];Extfun.Evar();Extfun.Evar()],false,(functionMLast.MeExten(_,e)->Some(funcurrnexttopbottompc->pr_extension"%"pce)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"MeTyc"];Extfun.Evar();Extfun.Evar();Extfun.Evar()],false,(functionMLast.MeTyc(_,me,mt)->Some(funcurrnexttopbottompc->letpc={pcwithPprintf.ind=pc.Pprintf.ind+1}inPprintf.sprint_break10pc(funpc->module_expr{pcwithPprintf.bef=Pretty.sprintf"%s("pc.Pprintf.bef;Pprintf.aft=" :"}me)(funpc->module_type{pcwithPprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft}mt))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"MeUnp"];Extfun.Evar();Extfun.Evar();Extfun.Eacc[Extfun.Econ"None"];Extfun.Eacc[Extfun.Econ"None"]],false,(functionMLast.MeUnp(_,e,None,None)->Some(funcurrnexttopbottompc->expr{pcwithPprintf.bef=Pretty.sprintf"%s(val "pc.Pprintf.bef;Pprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft}e)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"MeUnp"];Extfun.Evar();Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Some"];Extfun.Evar()];Extfun.Eacc[Extfun.Econ"None"]],false,(functionMLast.MeUnp(_,e,Somemt,None)->Some(funcurrnexttopbottompc->letpc={pcwithPprintf.ind=pc.Pprintf.ind+1}inPprintf.sprint_break10pc(funpc->expr{pcwithPprintf.bef=Pretty.sprintf"%s(val "pc.Pprintf.bef;Pprintf.aft=" :"}e)(funpc->module_type{pcwithPprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft}mt))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"MeUnp"];Extfun.Evar();Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Some"];Extfun.Evar()];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Some"];Extfun.Evar()]],false,(functionMLast.MeUnp(_,e,Somemt1,Somemt2)->Some(funcurrnexttopbottompc->letpc={pcwithPprintf.ind=pc.Pprintf.ind+1}inPprintf.sprint_break10pc(funpc->Pprintf.sprint_break10pc(funpc->expr{pcwithPprintf.bef=Pretty.sprintf"%s(val "pc.Pprintf.bef;Pprintf.aft=" :"}e)(funpc->module_type{pcwithPprintf.aft=" :>"}mt1))(funpc->module_type{pcwithPprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft}mt2))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"MeUid"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.MeUid(_,Ploc.VaVals)->Some(funcurrnexttopbottompc->Pretty.sprintf"%s%s%s"pc.Pprintf.befspc.Pprintf.aft)|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))]);None,(fune__->Extfun.extende__[Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->letfail()=Ploc.raise(MLast.loc_of_module_exprz)(Failure(sprintf"pr_module_expr %d"(Obj.tag(Obj.reprz))))inletpc={pcwithPprintf.ind=pc.Pprintf.ind+1}inbottom~fail:fail{pcwithPprintf.bef=Pretty.sprintf"%s("pc.Pprintf.bef;Pprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft}z))])];Eprinter.extendpr_module_typeNone[Some"top",(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"MtFun"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Evar()],false,(functionMLast.MtFun(_,Ploc.VaValarg,mt2)->Some(funcurrnexttopbottompc->str_or_sig_functorpc(functor_parameter_unvalaarg)module_typemt2)|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))]);None,(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"MtTyo"];Extfun.Evar();Extfun.Evar()],false,(functionMLast.MtTyo(_,me)->Some(funcurrnexttopbottompc->Pprintf.sprint_break10pc(funpc->Pretty.sprintf"%smodule type of"pc.Pprintf.bef)(funpc->module_exprpcme))|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))]);Some"alg_attribute",(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"MtAtt"];Extfun.Evar();Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.MtAtt(_,ct,Ploc.VaValattr)->Some(funcurrnexttopbottompc->Pretty.sprintf"%s%s"(curr{pcwithPprintf.aft="[@"}ct)(attribute_body{pcwithPprintf.bef="";Pprintf.aft=Pretty.sprintf"]%s"pc.Pprintf.aft}attr))|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))]);Some"with",(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"MtWit"];Extfun.Evar();Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.MtWit(_,mt,Ploc.VaValwcl)->Some(funcurrnexttopbottompc->Pprintf.sprint_break12pc(funpc->module_type{pcwithPprintf.aft=" with"}mt)(funpc->vlist2with_constraint(and_beforewith_constraint)pcwcl))|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))]);Some"sig",(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"MtSig"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.MtSig(loc,Ploc.VaValsil)->Some(funcurrnexttopbottompc->letsig_item_sep=if!flag_semi_semithensemi_semi_aftersig_itemelsesig_iteminhoriz_vertic(fun()->ifalone_in_linepcthensprintf"\n"elsehlistsig_item_sep{pcwithPprintf.bef=Pretty.sprintf"%ssig "pc.Pprintf.bef;Pprintf.aft=Pretty.sprintf" end%s"pc.Pprintf.aft}sil)(fun()->Pprintf.sprint_break10pc(funpc->Pprintf.sprint_break12pc(funpc->Pretty.sprintf"%ssig"pc.Pprintf.bef)(funpc->vlistsig_item_seppcsil))(funpc->Pretty.sprintf"%send%s"pc.Pprintf.befpc.Pprintf.aft)))|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))]);Some"dot",(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"MtLid"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.MtLid(_,Ploc.VaVals)->Some(funcurrnexttopbottompc->Pretty.sprintf"%s%s%s"pc.Pprintf.befspc.Pprintf.aft)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"MtLong"];Extfun.Evar();Extfun.Evar()],false,(functionMLast.MtLong(_,li)->Some(funcurrnexttopbottompc->longidentpcli)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"MtLongLid"];Extfun.Evar();Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.MtLongLid(_,li,Ploc.VaVals)->Some(funcurrnexttopbottompc->longident{pcwithPprintf.aft=Pretty.sprintf".%s%s"spc.Pprintf.aft}li)|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))]);Some"simple",(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"MtExten"];Extfun.Evar();Extfun.Evar()],false,(functionMLast.MtExten(_,e)->Some(funcurrnexttopbottompc->pr_extension"%"pce)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"MtLong"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"LiUid"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]]],false,(functionMLast.MtLong(_,MLast.LiUid(_,Ploc.VaVals))->Some(funcurrnexttopbottompc->Pretty.sprintf"%s%s%s"pc.Pprintf.befspc.Pprintf.aft)|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))]);Some"bottom",(fune__->Extfun.extende__[Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->letfail()=Ploc.raise(MLast.loc_of_module_typez)(Failure(sprintf"pr_module_type %d"(Obj.tag(Obj.reprz))))inbottom~fail:fail{pcwithPprintf.bef=Pretty.sprintf"%s("pc.Pprintf.bef;Pprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft}z))])]letspace_beforeelempcx=elem{pcwithPprintf.bef=Pretty.sprintf"%s "pc.Pprintf.bef}xletor_beforeelempcx=elem{pcwithPprintf.bef=Pretty.sprintf"%sor "pc.Pprintf.bef}xletamp_afterelempcx=elem{pcwithPprintf.aft=Pretty.sprintf" &%s"pc.Pprintf.aft}xletoptionelempcx=matchxwithSomex->elempcx|None->Pretty.sprintf"%s%s"pc.Pprintf.befpc.Pprintf.aft(* main part *)letsep=Pcaml.inter_phrasesletoutput_string_evalocs=letrecloopi=ifi==String.lengthsthen()elseifi==String.lengths-1thenoutput_charocs.[i]elsematchs.[i],s.[i+1]with'\\','n'->output_charoc'\n';loop(i+2)|c,_->output_charocc;loop(i+1)inloop0letapply_printerf(ast,eoi_loc)=letoc=match!(Pcaml.output_file)withSomef->open_out_binf|None->pervasives_set_binary_mode_outstdouttrue;stdoutinletcleanup()=match!(Pcaml.output_file)withSomef->close_outoc|None->()inbegintrylet_=List.fold_left(funfirst(si,loc)->beginmatch!sepwithSomestr->iffirstthen()elseoutput_string_evalocstr|None->output_stringoc(Ploc.commentloc)end;flushoc;letk=if!flag_semi_semithen";;"else""inoutput_stringoc(f{ind=0;bef="";aft=k;dang=""}si);false)trueastinoutput_stringoc(Ploc.commenteoi_loc);flushocwithexn->cleanup();raiseexnend;cleanup()let_=Pcaml.print_interf:=apply_printersig_itemlet_=Pcaml.print_implem:=apply_printerstr_itemletis_uppercasec=char_uppercasec=cletset_flagss=letrecloopi=ifi=String.lengthsthen()elseletis_upp=is_uppercases.[i]inbeginmatchs.[i]with'A'|'a'->flag_comments_in_phrases:=is_upp;flag_equilibrate_cases:=is_upp;flag_expand_letop_syntax:=is_upp;flag_extensions_are_irrefutable:=is_upp;flag_horiz_let_in:=is_upp;flag_semi_semi:=is_upp|'C'|'c'->flag_comments_in_phrases:=is_upp|'E'|'e'->flag_equilibrate_cases:=is_upp|'I'|'i'->flag_extensions_are_irrefutable:=is_uppercases.[i]|'L'|'l'->flag_horiz_let_in:=is_upp|'M'|'m'->flag_semi_semi:=is_upp|'O'|'o'->flag_add_locations:=is_upp|'X'|'x'->flag_expand_letop_syntax:=is_upp|c->failwith("bad flag "^String.make1c)end;loop(i+1)inloop0letdefault_flag()=letflag_onbtf=ifbthentelse""inletflag_offbtf=ifbthen""elsefinleton_offflag=sprintf"%s%s%s%s%s%s%s"(flag!flag_comments_in_phrases"C""c")(flag!flag_equilibrate_cases"E""e")(flag!flag_extensions_are_irrefutable"I""i")(flag!flag_horiz_let_in"L""l")(flag!flag_semi_semi"M""m")(flag!flag_add_locations"O""o")(flag!flag_expand_letop_syntax"X""x")inleton=on_offflag_oninletoff=on_offflag_offinifString.lengthon<String.lengthoffthensprintf"a%s"onelsesprintf"A%s"offlet_=Pcaml.add_option"-flag"(Arg.Stringset_flags)("<str> Change pretty printing behaviour according to <str>:
A/a enable/disable all flags
C/c enable/disable comments in phrases
E/e enable/disable equilibrate cases
I/i enable/disable extensions in patterns treated as irrefutable
L/l enable/disable allowing printing 'let..in' horizontally
M/m enable/disable printing double semicolons
O/o enable/disable adding location comments
Z/z enable/disable compatibility with old versions of OCaml
default setting is \""^default_flag()^"\".")let_=Pcaml.add_option"-l"(Arg.Int(funx->Pretty.line_length:=x))("<length> Maximum line length for pretty printing (default "^string_of_int!(Pretty.line_length)^")")let_=Pcaml.add_option"-sep_src"(Arg.Unit(fun()->sep:=None))"Read source file for text between phrases (default)."let_=Pcaml.add_option"-sep"(Arg.String(funx->sep:=Somex))"<string> Use this string between phrases instead of reading source."let_=Pcaml.add_option"-ss"(Arg.Setflag_semi_semi)"(obsolete since version 4.02; use rather \"-flag M\")."let_=Pcaml.add_option"-no_ss"(Arg.Clearflag_semi_semi)"(obsolete since version 4.02; use rather \"-flag m\")."let_=Pcaml.add_option"-cip"(Arg.Unit(funx->x))"(obsolete since version 4.02; use rather \"-flag C\")"let_=Pcaml.add_option"-ncip"(Arg.Unit(funx->x))"(obsolete since version 4.02; use rather \"-flag c\")"(* Pretty printing extension for objects and labels *)letclass_expr=Eprinter.applypr_class_exprletclass_type=Eprinter.applypr_class_typeletclass_str_item=Eprinter.applypr_class_str_itemletclass_sig_item=Eprinter.applypr_class_sig_itemletamp_beforeelempcx=elem{pcwithPprintf.bef=Pretty.sprintf"%s& "pc.Pprintf.bef}xletclass_type_paramspc(loc,ctp)=ifctp=[]thenPretty.sprintf"%s%s"pc.Pprintf.befpc.Pprintf.aftelseletctp=List.map(funct->(loc,ct),",")ctpinPprintf.sprint_break12pc(funpc->plisttype_param1{pcwithPprintf.bef=Pretty.sprintf"%s["pc.Pprintf.bef;Pprintf.aft="]"}ctp)(funpc->Pretty.sprintf"%s%s"pc.Pprintf.befpc.Pprintf.aft)letclass_defpcci=Pprintf.sprint_break12pc(funpc->Pretty.sprintf"%s%s"(class_type_params{pcwithPprintf.bef=Pretty.sprintf"%s%s"pc.Pprintf.bef(ifPcaml.unvalaci.MLast.ciVirthen"virtual "else"");Pprintf.aft=""}(ci.MLast.ciLoc,Pcaml.unvala(sndci.MLast.ciPrm)))(var_escaped_noloc{pcwithPprintf.bef="";Pprintf.aft=" :"}(Pcaml.unvalaci.MLast.ciNam)))(funpc->Pretty.sprintf"%s%s"(class_type{pcwithPprintf.aft=""}ci.MLast.ciExp)(hlist(pr_attribute"@@"){pcwithPprintf.bef=""}(Pcaml.unvalaci.MLast.ciAttributes)))letclass_type_declpcci=Pprintf.sprint_break12pc(funpc->Pretty.sprintf"%s%s"(class_type_params{pcwithPprintf.bef=Pretty.sprintf"%s%s"pc.Pprintf.bef(ifPcaml.unvalaci.MLast.ciVirthen"virtual "else"");Pprintf.aft=""}(ci.MLast.ciLoc,Pcaml.unvala(sndci.MLast.ciPrm)))(var_escaped_noloc{pcwithPprintf.bef="";Pprintf.aft=" ="}(Pcaml.unvalaci.MLast.ciNam)))(funpc->Pretty.sprintf"%s%s"(class_type{pcwithPprintf.aft=""}ci.MLast.ciExp)(hlist(pr_attribute"@@"){pcwithPprintf.bef=""}(Pcaml.unvalaci.MLast.ciAttributes)))letclass_type_decl_listpcloccd=horiz_vertic(fun()->hlist2class_type_decl(and_beforeclass_type_decl){pcwithPprintf.bef=Pretty.sprintf"%sclass type "pc.Pprintf.bef}cd)(fun()->vlist2class_type_decl(and_beforeclass_type_decl){pcwithPprintf.bef=Pretty.sprintf"%sclass type "pc.Pprintf.bef}cd)letclass_type_optpc=functionSomect->Pprintf.sprint_break10pc(funpc->Pretty.sprintf"%s :"pc.Pprintf.bef)(funpc->class_typepcct)|None->Pretty.sprintf"%s%s"pc.Pprintf.befpc.Pprintf.aftletclass_declpcci=let(pl,ce)=letrecloop=functionMLast.CeFun(_,p,ce)asgce->ifis_irrefut_pattpthenlet(pl,ce)=loopceinp::pl,ceelse[],gce|ce->[],ceinloopci.MLast.ciExpinlet(ce,ct_opt)=matchcewithMLast.CeTyc(_,ce,ct)->ce,Somect|ce->ce,Noneinletcdefpc()=horiz_vertic(fun()->Pretty.sprintf"%s%s%s%s"(class_type_params{pcwithPprintf.bef=Pretty.sprintf"%s%s"pc.Pprintf.bef(ifPcaml.unvalaci.MLast.ciVirthen"virtual "else"");Pprintf.aft=""}(ci.MLast.ciLoc,Pcaml.unvala(sndci.MLast.ciPrm)))(var_escaped_noloc{pcwithPprintf.bef="";Pprintf.aft=ifpl=[]then""else" "}(Pcaml.unvalaci.MLast.ciNam))(hlistsimple_patt{pcwithPprintf.bef="";Pprintf.aft=""}pl)(class_type_opt{pcwithPprintf.bef="";Pprintf.aft=Pretty.sprintf" =%s"pc.Pprintf.aft}ct_opt))(fun()->letpl=List.map(funp->p,"")plinletpc={pcwithbef=sprintf"%s%s%s%s "pc.bef(ifPcaml.unvalaci.MLast.ciVirthen"virtual "else"")(class_type_paramsPprintf.empty_pc(ci.MLast.ciLoc,Pcaml.unvala(sndci.MLast.ciPrm)))(var_escaped_bare(Pcaml.unvalaci.MLast.ciNam))}inPretty.sprintf"%s%s"(plistlsimple_pattsimple_patt4{pcwithPprintf.aft=""}pl)(class_type_opt{pcwithPprintf.bef="";Pprintf.aft=Pretty.sprintf" =%s"pc.Pprintf.aft}ct_opt))inPprintf.sprint_break12pc(funpc->cdefpc())(funpc->Pretty.sprintf"%s%s"(class_expr{pcwithPprintf.aft=""}ce)(hlist(pr_attribute"@@"){pcwithPprintf.bef=""}(Pcaml.unvalaci.MLast.ciAttributes)))letvariant_declpcpv=matchpvwithMLast.PvTag(loc,Ploc.VaValc,Ploc.VaValtrue,Ploc.VaVal[],alg_attrs)->Pretty.sprintf"%s%s"(var_escaped{pcwithPprintf.bef=Pretty.sprintf"%s`"pc.Pprintf.bef;Pprintf.aft=""}(loc,c))(hlist(pr_attribute"@"){pcwithPprintf.bef=""}(Pcaml.unvalaalg_attrs))|MLast.PvTag(loc,Ploc.VaValc,Ploc.VaValao,Ploc.VaValtl,alg_attrs)->lettl=List.map(funt->t," &")tlinPprintf.sprint_break15pc(funpc->var_escaped{pcwithPprintf.bef=Pretty.sprintf"%s`"pc.Pprintf.bef;Pprintf.aft=Pretty.sprintf" of%s"(ifaothen" &"else"")}(loc,c))(funpc->Pretty.sprintf"%s%s"(plistctyp2{pcwithPprintf.aft=""}tl)(hlist(pr_attribute"@"){pcwithPprintf.bef=""}(Pcaml.unvalaalg_attrs)))|MLast.PvInh(_,t)->ctyppct|_->failwith"Pr_ro.variant_decl"letbquote_identpcs=Pretty.sprintf"%s`%s%s"pc.Pprintf.befspc.Pprintf.aftletvariant_decl_listcharlocpcpvlsl=ifpvl=[]thenPretty.sprintf"%s[%s ]%s"pc.Pprintf.befcharpc.Pprintf.aftelsehoriz_vertic(fun()->Pretty.sprintf"%s%s"(hlist2variant_decl(bar_beforevariant_decl){pcwithPprintf.bef=Pretty.sprintf"%s[%s "pc.Pprintf.befchar;Pprintf.aft=""}pvl)((funpc->function[]->Pretty.sprintf"%s%s"pc.Pprintf.befpc.Pprintf.aft|sl->hlistbquote_ident{pcwithPprintf.bef=Pretty.sprintf"%s > "pc.Pprintf.bef}sl){pcwithPprintf.bef="";Pprintf.aft=Pretty.sprintf" ]%s"pc.Pprintf.aft}sl))(fun()->Pretty.sprintf"%s%s"(vlist2variant_decl(bar_beforevariant_decl){pcwithPprintf.bef=Pretty.sprintf"%s[%s "pc.Pprintf.befchar;Pprintf.aft=""}pvl)((funpc->function[]->Pretty.sprintf"%s%s"pc.Pprintf.befpc.Pprintf.aft|sl->hlistbquote_ident{pcwithPprintf.bef=Pretty.sprintf"%s > "pc.Pprintf.bef}sl){pcwithPprintf.bef="";Pprintf.aft=Pretty.sprintf" ]%s"pc.Pprintf.aft}sl))letfieldpc=functionSomes,t,attrs->Pprintf.sprint_break12pc(funpc->Pretty.sprintf"%s%s :"pc.Pprintf.befs)(funpc->Pretty.sprintf"%s%s"(ctyp{pcwithPprintf.aft=""}t)(hlist(pr_attribute"@"){pcwithPprintf.bef=""}(Pcaml.unvalaattrs)))|None,t,attrs->Pprintf.sprint_break12pc(funpc->Pretty.sprintf"%s%s"pc.Pprintf.befpc.Pprintf.aft)(funpc->Pretty.sprintf"%s%s"(ctyp{pcwithPprintf.aft=""}t)(hlist(pr_attribute"@"){pcwithPprintf.bef=""}(Pcaml.unvalaattrs)))letfield_exprpc(s,e)=Pprintf.sprint_break12pc(funpc->Pretty.sprintf"%s%s ="pc.Pprintf.befs)(funpc->exprpce)letpatt_tconpcp=matchpwithMLast.PaTyc(_,p,t)->Pprintf.sprint_break10pc(funpc->patt{pcwithPprintf.aft=" :"}p)(funpc->ctyppct)|p->pattpcplettypevarpctv=var_escaped_noloc{pcwithPprintf.bef=Pretty.sprintf"%s'"pc.Pprintf.bef}tvletclass_objectlocpc(csp,csl)=letclass_str_item_sep=(*
if flag_semi_semi.val then semi_semi_after class_str_item
else *)class_str_iteminhoriz_vertic(fun()->Pretty.sprintf"%s%s"((funpc->functionSome(MLast.PaTyc(_,_,_)asp)->patt{pcwithPprintf.bef=Pretty.sprintf"%s "pc.Pprintf.bef}p|Somep->patt{pcwithPprintf.bef=Pretty.sprintf"%s ("pc.Pprintf.bef;Pprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft}p|None->Pretty.sprintf"%s%s"pc.Pprintf.befpc.Pprintf.aft){pcwithPprintf.bef=Pretty.sprintf"%sobject"pc.Pprintf.bef;Pprintf.aft=" "}csp)(hlistclass_str_item_sep{pcwithPprintf.bef="";Pprintf.aft=Pretty.sprintf" end%s"pc.Pprintf.aft}csl))(fun()->Pprintf.sprint_break_allfalsepc(funpc->(funpc->functionSome(MLast.PaTyc(_,_,_)asp)->patt{pcwithPprintf.bef=Pretty.sprintf"%s "pc.Pprintf.bef}p|Somep->patt{pcwithPprintf.bef=Pretty.sprintf"%s ("pc.Pprintf.bef;Pprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft}p|None->Pretty.sprintf"%s%s"pc.Pprintf.befpc.Pprintf.aft){pcwithPprintf.bef=Pretty.sprintf"%sobject"pc.Pprintf.bef}csp)[1,2,(funpc->vlistclass_str_item_seppccsl);1,0,(funpc->Pretty.sprintf"%send%s"pc.Pprintf.befpc.Pprintf.aft)])letsimple_expr=Eprinter.apply_levelpr_expr"simple"(* *)letlabel_ipatt_eq_pattcurrpc(p,op)=matchPcaml.unvalaopwithSomep2->Pretty.sprintf"%s%s"(patt{pcwithPprintf.bef=Pretty.sprintf"%s~"pc.Pprintf.bef;Pprintf.aft=":"}p)(curr{pcwithPprintf.bef=""}p2)|None->patt{pcwithPprintf.bef=Pretty.sprintf"%s~"pc.Pprintf.bef}plet_=Eprinter.extendpr_patt(Some(Eprinter.Level"simple"))[None,(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"PaTyp"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.PaTyp(loc,Ploc.VaVallili)->Some(funcurrnexttopbottompc->longident_lident{pcwithPprintf.bef=Pretty.sprintf"%s#"pc.Pprintf.bef}lili)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"PaVrn"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.PaVrn(loc,Ploc.VaVals)->Some(funcurrnexttopbottompc->var_escaped{pcwithPprintf.bef=Pretty.sprintf"%s`"pc.Pprintf.bef}(loc,s))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"PaOlb"];Extfun.Evar();Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Eacc[Extfun.Econ"None"]]],false,(functionMLast.PaOlb(_,p,Ploc.VaValNone)->Some(funcurrnexttopbottompc->curr{pcwithPprintf.bef=Pretty.sprintf"%s?"pc.Pprintf.bef}p)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"PaOlb"];Extfun.Evar();Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Some"];Extfun.Evar()]]],false,(functionMLast.PaOlb(_,p,Ploc.VaVal(Somee))->Some(funcurrnexttopbottompc->Pprintf.sprint_break12pc(funpc->patt{pcwithPprintf.bef=Pretty.sprintf"%s?("pc.Pprintf.bef;Pprintf.aft=" ="}p)(funpc->expr{pcwithPprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft}e))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"PaOlb"];Extfun.Evar();Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Some"];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExOlb"];Extfun.Evar();Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Eacc[Extfun.Econ"None"]]]]]],false,(functionMLast.PaOlb(_,p1,Ploc.VaVal(Some(MLast.ExOlb(_,p2,Ploc.VaValNone))))->Some(funcurrnexttopbottompc->Pretty.sprintf"%s%s"(patt{pcwithPprintf.bef=Pretty.sprintf"%s?"pc.Pprintf.bef;Pprintf.aft=":("}p1)(patt{pcwithPprintf.bef="";Pprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft}p2))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"PaOlb"];Extfun.Evar();Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Some"];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExOlb"];Extfun.Evar();Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Some"];Extfun.Evar()]]]]]],false,(functionMLast.PaOlb(_,p1,Ploc.VaVal(Some(MLast.ExOlb(_,p2,Ploc.VaVal(Somee)))))->Some(funcurrnexttopbottompc->Pprintf.sprint_break12pc(funpc->Pretty.sprintf"%s%s"(patt{pcwithPprintf.bef=Pretty.sprintf"%s?"pc.Pprintf.bef;Pprintf.aft=":("}p1)(patt{pcwithPprintf.bef="";Pprintf.aft=" ="}p2))(funpc->expr{pcwithPprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft}e))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"PaOlb"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"PaTyc"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"PaLid"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]];Extfun.Evar()];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Some"];Extfun.Evar()]]],false,(functionMLast.PaOlb(_,MLast.PaTyc(_,MLast.PaLid(_,Ploc.VaValp),t),Ploc.VaVal(Somee))->Some(funcurrnexttopbottompc->Pprintf.sprint_break12pc(funpc->Pprintf.sprint_break12pc(funpc->Pretty.sprintf"%s?(%s :"pc.Pprintf.befp)(funpc->ctyp{pcwithPprintf.aft=" ="}t))(funpc->expr{pcwithPprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft}e))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"PaOlb"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"PaTyc"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"PaLid"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]];Extfun.Evar()];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Eacc[Extfun.Econ"None"]]],false,(functionMLast.PaOlb(_,MLast.PaTyc(_,MLast.PaLid(_,Ploc.VaValp),t),Ploc.VaValNone)->Some(funcurrnexttopbottompc->Pprintf.sprint_break12pc(funpc->Pretty.sprintf"%s?(%s :"pc.Pprintf.befp)(funpc->ctyp{pcwithPprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft}t))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"PaLab"];Extfun.Evar();Extfun.Evar();Extfun.Evar()],false,(functionMLast.PaLab(_,p,po)->Some(funcurrnexttopbottompc->label_ipatt_eq_pattcurrpc(p,po))|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))])];Eprinter.extendpr_expr(Some(Eprinter.Level"apply"))[None,(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExObj"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.ExObj(loc,Ploc.VaValcsp,Ploc.VaValcsl)->Some(funcurrnexttopbottompc->class_objectlocpc(csp,csl))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExNew"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.ExNew(_,Ploc.VaVallili)->Some(funcurrnexttopbottompc->Pprintf.sprint_break12pc(funpc->Pretty.sprintf"%snew"pc.Pprintf.bef)(funpc->longident_lidentpclili))|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))])];Eprinter.extendpr_expr(Some(Eprinter.Level"dot"))[None,(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExApp"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExApp"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExLid"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]];Extfun.Evar()];Extfun.Evar()],true,(functionMLast.ExApp(_,MLast.ExApp(_,MLast.ExLid(_,Ploc.VaValop),e1),e2)whenis_hashopop->Some(funcurrnexttopbottompc->Pprintf.sprint_break10pc(funpc->curr{pcwithPprintf.aft=Pretty.sprintf" %s"op}e1)(funpc->nextpce2))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExSnd"];Extfun.Evar();Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.ExSnd(_,e,Ploc.VaVals)->Some(funcurrnexttopbottompc->Pprintf.sprint_break00pc(funpc->curr{pcwithPprintf.aft="#"}e)(funpc->Pretty.sprintf"%s%s%s"pc.Pprintf.befspc.Pprintf.aft))|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))])];Eprinter.extendpr_expr(Some(Eprinter.Level"simple"))[None,(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExObj"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Eacc[Extfun.Econ"None"]];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.ExObj(_,Ploc.VaValNone,Ploc.VaVal_)asz->Some(funcurrnexttopbottompc->letpc={pcwithPprintf.ind=pc.Pprintf.ind+1}inexpr{pcwithPprintf.bef=Pretty.sprintf"%s("pc.Pprintf.bef;Pprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft}z)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExNew"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Etup[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Some"];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]]]],false,(functionMLast.ExNew(_,Ploc.VaVal(Some(Ploc.VaVal_),Ploc.VaVal_))asz->Some(funcurrnexttopbottompc->letpc={pcwithPprintf.ind=pc.Pprintf.ind+1}inexpr{pcwithPprintf.bef=Pretty.sprintf"%s("pc.Pprintf.bef;Pprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft}z)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExNew"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Etup[Extfun.Eacc[Extfun.Econ"None"];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]]]],false,(functionMLast.ExNew(_,Ploc.VaVal(None,Ploc.VaVal_))asz->Some(funcurrnexttopbottompc->letpc={pcwithPprintf.ind=pc.Pprintf.ind+1}inexpr{pcwithPprintf.bef=Pretty.sprintf"%s("pc.Pprintf.bef;Pprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft}z)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExVrn"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.ExVrn(loc,Ploc.VaVals)->Some(funcurrnexttopbottompc->var_escaped{pcwithPprintf.bef=Pretty.sprintf"%s`"pc.Pprintf.bef}(loc,s))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExOvr"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.ExOvr(_,Ploc.VaValfel)->Some(funcurrnexttopbottompc->iffel=[]thenPretty.sprintf"%s{< >}%s"pc.Pprintf.befpc.Pprintf.aftelseletfel=List.map(funfe->fe,";")felinplistfield_expr3{pcwithPprintf.bef=Pretty.sprintf"%s{< "pc.Pprintf.bef;Pprintf.aft=Pretty.sprintf" >}%s"pc.Pprintf.aft}fel)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExCoe"];Extfun.Evar();Extfun.Evar();Extfun.Eacc[Extfun.Econ"None"];Extfun.Evar()],false,(functionMLast.ExCoe(_,e,None,t)->Some(funcurrnexttopbottompc->letpc={pcwithPprintf.ind=pc.Pprintf.ind+1}inPprintf.sprint_break10pc(funpc->expr{pcwithPprintf.bef=Pretty.sprintf"%s("pc.Pprintf.bef;Pprintf.aft=" :>"}e)(funpc->ctyp{pcwithPprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft}t))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExCoe"];Extfun.Evar();Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Some"];Extfun.Evar()];Extfun.Evar()],false,(functionMLast.ExCoe(_,e,Somet,t2)->Some(funcurrnexttopbottompc->Pprintf.sprint_break_allfalsepc(funpc->expr{pcwithPprintf.bef=Pretty.sprintf"%s("pc.Pprintf.bef;Pprintf.aft=" :"}e)[1,1,(funpc->ctyp{pcwithPprintf.aft=" :>"}t);1,1,(funpc->ctyp{pcwithPprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft}t2)])|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))])];Eprinter.extendpr_ctyp(Some(Eprinter.After"star"))[Some"label",(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"TyLab"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Evar()],false,(functionMLast.TyLab(_,Ploc.VaVali,t)->Some(funcurrnexttopbottompc->curr{pcwithPprintf.bef=Pretty.sprintf"%s%s:"pc.Pprintf.befi}t)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"TyOlb"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Evar()],false,(functionMLast.TyOlb(_,Ploc.VaVali,t)->Some(funcurrnexttopbottompc->curr{pcwithPprintf.bef=Pretty.sprintf"%s?%s:"pc.Pprintf.befi}t)|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))])];Eprinter.extendpr_ctyp(Some(Eprinter.Level"simple"))[None,(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"TyAli"];Extfun.Evar();Extfun.Evar();Extfun.Evar()],false,(functionMLast.TyAli(_,_,_)asz->Some(funcurrnexttopbottompc->letpc={pcwithPprintf.ind=pc.Pprintf.ind+1}inctyp{pcwithPprintf.bef=Pretty.sprintf"%s("pc.Pprintf.bef;Pprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft}z)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"TyVrn"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Some"];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Some"];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]]]],false,(functionMLast.TyVrn(loc,Ploc.VaValpvl,Some(Some(Ploc.VaValvdl)))->Some(funcurrnexttopbottompc->variant_decl_list"<"locpcpvlvdl)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"TyVrn"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Some"];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Some"];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Eacc[Extfun.Econ"[]"]]]]],false,(functionMLast.TyVrn(loc,Ploc.VaValpvl,Some(Some(Ploc.VaVal[])))->Some(funcurrnexttopbottompc->variant_decl_list"<"locpcpvl[])|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"TyVrn"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Some"];Extfun.Eacc[Extfun.Econ"None"]]],false,(functionMLast.TyVrn(loc,Ploc.VaValpvl,SomeNone)->Some(funcurrnexttopbottompc->variant_decl_list">"locpcpvl[])|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"TyVrn"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Eacc[Extfun.Econ"None"]],false,(functionMLast.TyVrn(loc,Ploc.VaValpvl,None)->Some(funcurrnexttopbottompc->letprefix=matchpvlwith[]->""|MLast.PvInh(_,_)::_->" |"|_->""invariant_decl_listprefixlocpcpvl[])|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"TyCls"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.TyCls(_,Ploc.VaVallili)->Some(funcurrnexttopbottompc->longident_lident{pcwithPprintf.bef=Pretty.sprintf"%s#"pc.Pprintf.bef}lili)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"TyObj"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.TyObj(_,Ploc.VaValml,Ploc.VaValv)->Some(funcurrnexttopbottompc->ifml=[]thenPretty.sprintf"%s<%s >%s"pc.Pprintf.bef(ifvthen" .."else"")pc.Pprintf.aftelseletml=List.map(fune->e,";")mlinPprintf.sprint_break10pc(funpc->plistfield0{pcwithPprintf.bef=Pretty.sprintf"%s< "pc.Pprintf.bef;Pprintf.aft=Pretty.sprintf"%s >"(ifvthen"; .."else"")}ml)(funpc->Pretty.sprintf"%s%s"pc.Pprintf.befpc.Pprintf.aft))|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))])];Eprinter.extendpr_sig_item(Some(Eprinter.Level"top"))[None,(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"SgClt"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.SgClt(loc,Ploc.VaValcd)->Some(funcurrnexttopbottompc->class_type_decl_listpcloccd)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"SgCls"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.SgCls(loc,Ploc.VaValcd)->Some(funcurrnexttopbottompc->horiz_vertic(fun()->hlist2class_def(and_beforeclass_def){pcwithPprintf.bef=Pretty.sprintf"%sclass "pc.Pprintf.bef}cd)(fun()->vlist2class_def(and_beforeclass_def){pcwithPprintf.bef=Pretty.sprintf"%sclass "pc.Pprintf.bef}cd))|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))])];Eprinter.extendpr_str_item(Some(Eprinter.Level"top"))[None,(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"StClt"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.StClt(loc,Ploc.VaValcd)->Some(funcurrnexttopbottompc->class_type_decl_listpcloccd)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"StCls"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.StCls(loc,Ploc.VaValcd)->Some(funcurrnexttopbottompc->horiz_vertic(fun()->hlist2class_decl(and_beforeclass_decl){pcwithPprintf.bef=Pretty.sprintf"%sclass "pc.Pprintf.bef}cd)(fun()->vlist2class_decl(and_beforeclass_decl){pcwithPprintf.bef=Pretty.sprintf"%sclass "pc.Pprintf.bef}cd))|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))])]letsig_method_or_method_virtualpcvirtprivstitem_attrs=Pprintf.sprint_break12pc(funpc->var_escaped_noloc{pcwithPprintf.bef=Pretty.sprintf"%smethod%s%s "pc.Pprintf.befvirt(ifprivthen" private"else"");Pprintf.aft=" :"}s)(funpc->Pretty.sprintf"%s%s"(ctyp{pcwithPprintf.aft=""}t)(hlist(pr_attribute"@@"){pcwithPprintf.bef=""}(Pcaml.unvalaitem_attrs)))letpoly_typepc=functionMLast.TyPol(_,Ploc.VaValtpl,t)->Pprintf.sprint_break12pc(funpc->hlisttypevar{pcwithPprintf.aft=" ."}tpl)(funpc->ctyppct)|t->ctyppctletlabel_ipattexprpc(p,oe)=matchPcaml.unvalaoewithSomee->Pretty.sprintf"%s%s"(patt{pcwithPprintf.bef=Pretty.sprintf"%s~"pc.Pprintf.bef;Pprintf.aft=":"}p)(expr{pcwithPprintf.bef=""}e)|None->patt{pcwithPprintf.bef=Pretty.sprintf"%s~"pc.Pprintf.bef}plet_=Eprinter.extendpr_expr(Some(Eprinter.After"apply"))[Some"label",(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExOlb"];Extfun.Evar();Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Eacc[Extfun.Econ"None"]]],false,(functionMLast.ExOlb(_,p,Ploc.VaValNone)->Some(funcurrnexttopbottompc->patt{pcwithPprintf.bef=Pretty.sprintf"%s?"pc.Pprintf.bef}p)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExOlb"];Extfun.Evar();Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Some"];Extfun.Evar()]]],false,(functionMLast.ExOlb(_,p,Ploc.VaVal(Somee))->Some(funcurrnexttopbottompc->Pretty.sprintf"%s%s"(patt{pcwithPprintf.bef=Pretty.sprintf"%s?"pc.Pprintf.bef;Pprintf.aft=":"}p)(curr{pcwithPprintf.bef=""}e))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"ExLab"];Extfun.Evar();Extfun.Evar();Extfun.Evar()],false,(functionMLast.ExLab(_,p,oe)->Some(funcurrnexttopbottompc->label_ipattcurrpc(p,oe))|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))])];Eprinter.extendpr_ctyp(Some(Eprinter.After"below_alg_attribute"))[Some"as",(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"TyAli"];Extfun.Evar();Extfun.Evar();Extfun.Evar()],false,(functionMLast.TyAli(_,t1,t2)->Some(funcurrnexttopbottompc->letpc={pcwithPprintf.aft=letpc={pcwithPprintf.bef=""}innext{pcwithPprintf.bef=" as "}t2}incurrpct1)|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))]);Some"poly",(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"TyPot"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Evar()],false,(functionMLast.TyPot(loc,Ploc.VaValpl,t)->Some(funcurrnexttopbottompc->Pprintf.sprint_break12pc(funpc->hlistlident{pcwithPprintf.bef=Pretty.sprintf"%stype "pc.Pprintf.bef;Pprintf.aft=" ."}pl)(funpc->ctyppct))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"TyPol"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Evar()],false,(functionMLast.TyPol(_,Ploc.VaVal_,_)asz->Some(funcurrnexttopbottompc->poly_typepcz)|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))])];Eprinter.extendpr_ctyp(Some(Eprinter.After"arrow"))[Some"label",(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"TyLab"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Evar()],false,(functionMLast.TyLab(_,Ploc.VaVali,t)->Some(funcurrnexttopbottompc->curr{pcwithPprintf.bef=Pretty.sprintf"%s%s:"pc.Pprintf.befi}t)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"TyOlb"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Evar()],false,(functionMLast.TyOlb(_,Ploc.VaVali,t)->Some(funcurrnexttopbottompc->curr{pcwithPprintf.bef=Pretty.sprintf"%s?%s:"pc.Pprintf.befi}t)|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))])];Eprinter.extendpr_ctyp(Some(Eprinter.After"bottom"))[Some"catch-poly",(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"TyPot"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Evar()],false,(functionMLast.TyPot(loc,Ploc.VaValpl,t)asz->Some(funcurrnexttopbottompc->letpc={pcwithPprintf.ind=pc.Pprintf.ind+1}inctyp{pcwithPprintf.bef=Pretty.sprintf"%s("pc.Pprintf.bef;Pprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft}z)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"TyPol"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Evar()],false,(functionMLast.TyPol(_,Ploc.VaVal_,_)asz->Some(funcurrnexttopbottompc->letpc={pcwithPprintf.ind=pc.Pprintf.ind+1}inctyp{pcwithPprintf.bef=Pretty.sprintf"%s("pc.Pprintf.bef;Pprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft}z)|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))])];Eprinter.extendpr_class_exprNone[Some"top",(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"CeLop"];Extfun.Evar();Extfun.Evar();Extfun.Evar();Extfun.Evar()],false,(functionMLast.CeLop(_,ovf,li,ce)->Some(funcurrnexttopbottompc->letovf=ifPcaml.unvalaovfthen"!"else""inifpc.dang=";"thenPprintf.sprint_break10pc(funpc->letpc={pcwithPprintf.aft=letpc={pcwithPprintf.bef=""}inPprintf.sprint_break_allfalsepc(funpc->longident{pcwithPprintf.bef=Pretty.sprintf"let open%s "ovf}li)[1,0,(funpc->"in")]}inPretty.sprintf"%s(%s"pc.Pprintf.befpc.Pprintf.aft)(funpc->curr{pcwithPprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft}ce)elsePprintf.sprint_break10pc(funpc->Pprintf.sprint_break_allfalsepc(funpc->longident{pcwithPprintf.bef=Pretty.sprintf"%slet open%s "pc.Pprintf.befovf}li)[1,0,(funpc->Pretty.sprintf"%sin"pc.Pprintf.bef)])(funpc->currpcce))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"CeLet"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Evar()],false,(functionMLast.CeLet(loc,Ploc.VaValrf,Ploc.VaValpel,ce)->Some(funcurrnexttopbottompc->horiz_vertic(fun()->Pretty.sprintf"%s%s"(hlist2(bindingpattexpr)(and_before(bindingpattexpr)){pcwithPprintf.bef=Pretty.sprintf"%slet%s "pc.Pprintf.bef(ifrfthen" rec"else"");Pprintf.aft=" in "}pel)(class_expr{pcwithPprintf.bef=""}ce))(fun()->Pprintf.sprint_break10pc(funpc->vlist2(bindingpattexpr)(and_before(bindingpattexpr)){pcwithPprintf.bef=Pretty.sprintf"%slet%s "pc.Pprintf.bef(ifrfthen" rec"else"");Pprintf.aft=" in"}pel)(funpc->class_exprpcce)))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"CeFun"];Extfun.Evar();Extfun.Evar();Extfun.Evar()],false,(functionMLast.CeFun(_,p,ce)->Some(funcurrnexttopbottompc->Pprintf.sprint_break12pc(funpc->patt{pcwithPprintf.bef=Pretty.sprintf"%sfun "pc.Pprintf.bef;Pprintf.aft=" ->"}p)(funpc->currpcce))|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))]);Some"alg_attribute",(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"CeAtt"];Extfun.Evar();Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.CeAtt(_,ct,Ploc.VaValattr)->Some(funcurrnexttopbottompc->Pretty.sprintf"%s%s"(curr{pcwithPprintf.aft="[@"}ct)(attribute_body{pcwithPprintf.bef="";Pprintf.aft=Pretty.sprintf"]%s"pc.Pprintf.aft}attr))|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))]);None,(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"CeExten"];Extfun.Evar();Extfun.Evar()],false,(functionMLast.CeExten(_,e)->Some(funcurrnexttopbottompc->pr_extension"%"pce)|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))]);Some"apply",(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"CeApp"];Extfun.Evar();Extfun.Evar();Extfun.Evar()],false,(functionMLast.CeApp(_,ce,e)->Some(funcurrnexttopbottompc->Pprintf.sprint_break12pc(funpc->currpcce)(funpc->Eprinter.apply_levelpr_expr"label"pce))|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))]);Some"simple",(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"CeLop"];Extfun.Evar();Extfun.Evar();Extfun.Evar();Extfun.Evar()],false,(functionMLast.CeLop(_,_,_,_)asz->Some(funcurrnexttopbottompc->letpc={pcwithPprintf.ind=pc.Pprintf.ind+1}inclass_expr{pcwithPprintf.bef=Pretty.sprintf"%s("pc.Pprintf.bef;Pprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft}z)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"CeLet"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Evar()],false,(functionMLast.CeLet(_,Ploc.VaVal_,Ploc.VaVal_,_)asz->Some(funcurrnexttopbottompc->letpc={pcwithPprintf.ind=pc.Pprintf.ind+1}inclass_expr{pcwithPprintf.bef=Pretty.sprintf"%s("pc.Pprintf.bef;Pprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft}z)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"CeExten"];Extfun.Evar();Extfun.Evar()],false,(functionMLast.CeExten(_,_)asz->Some(funcurrnexttopbottompc->letpc={pcwithPprintf.ind=pc.Pprintf.ind+1}inclass_expr{pcwithPprintf.bef=Pretty.sprintf"%s("pc.Pprintf.bef;Pprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft}z)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"CeFun"];Extfun.Evar();Extfun.Evar();Extfun.Evar()],false,(functionMLast.CeFun(_,_,_)asz->Some(funcurrnexttopbottompc->letpc={pcwithPprintf.ind=pc.Pprintf.ind+1}inclass_expr{pcwithPprintf.bef=Pretty.sprintf"%s("pc.Pprintf.bef;Pprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft}z)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"CeApp"];Extfun.Evar();Extfun.Evar();Extfun.Evar()],false,(functionMLast.CeApp(_,_,_)asz->Some(funcurrnexttopbottompc->letpc={pcwithPprintf.ind=pc.Pprintf.ind+1}inclass_expr{pcwithPprintf.bef=Pretty.sprintf"%s("pc.Pprintf.bef;Pprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft}z)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"CeTyc"];Extfun.Evar();Extfun.Evar();Extfun.Evar()],false,(functionMLast.CeTyc(_,ce,ct)->Some(funcurrnexttopbottompc->letpc={pcwithPprintf.ind=pc.Pprintf.ind+1}inPprintf.sprint_break10pc(funpc->class_expr{pcwithPprintf.bef=Pretty.sprintf"%s("pc.Pprintf.bef;Pprintf.aft=" :"}ce)(funpc->class_type{pcwithPprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft}ct))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"CeStr"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.CeStr(loc,Ploc.VaValcsp,Ploc.VaValcsl)->Some(funcurrnexttopbottompc->class_objectlocpc(csp,csl))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"CeCon"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.CeCon(_,Ploc.VaVallili,Ploc.VaValctcl)->Some(funcurrnexttopbottompc->letctcl=List.map(funct->ct,",")ctclinPprintf.sprint_break12pc(funpc->plistctyp0{pcwithPprintf.bef=Pretty.sprintf"%s["pc.Pprintf.bef;Pprintf.aft="]"}ctcl)(funpc->longident_lidentpclili))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"CeCon"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Eacc[Extfun.Econ"[]"]]],false,(functionMLast.CeCon(_,Ploc.VaVallili,Ploc.VaVal[])->Some(funcurrnexttopbottompc->longident_lidentpclili)|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))]);Some"bottom",(fune__->Extfun.extende__[Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->error(MLast.loc_of_class_exprz)(sprintf"pr_class_expr %d"(Obj.tag(Obj.reprz)))))])];Eprinter.extendpr_class_typeNone[Some"top",(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"CtLop"];Extfun.Evar();Extfun.Evar();Extfun.Evar();Extfun.Evar()],false,(functionMLast.CtLop(_,ovf,li,ce)->Some(funcurrnexttopbottompc->letovf=ifPcaml.unvalaovfthen"!"else""inifpc.dang=";"thenPprintf.sprint_break10pc(funpc->letpc={pcwithPprintf.aft=letpc={pcwithPprintf.bef=""}inPprintf.sprint_break_allfalsepc(funpc->longident{pcwithPprintf.bef=Pretty.sprintf"let open%s "ovf}li)[1,0,(funpc->"in")]}inPretty.sprintf"%s(%s"pc.Pprintf.befpc.Pprintf.aft)(funpc->curr{pcwithPprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft}ce)elsePprintf.sprint_break10pc(funpc->Pprintf.sprint_break_allfalsepc(funpc->longident{pcwithPprintf.bef=Pretty.sprintf"%slet open%s "pc.Pprintf.befovf}li)[1,0,(funpc->Pretty.sprintf"%sin"pc.Pprintf.bef)])(funpc->currpcce))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"CtFun"];Extfun.Evar();Extfun.Evar();Extfun.Evar()],false,(functionMLast.CtFun(_,t,ct)->Some(funcurrnexttopbottompc->Pprintf.sprint_break12pc(funpc->Eprinter.apply_levelpr_ctyp"star"{pcwithPprintf.aft=" ->"}t)(funpc->currpcct))|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))]);Some"alg_attribute",(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"CtAtt"];Extfun.Evar();Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.CtAtt(_,ct,Ploc.VaValattr)->Some(funcurrnexttopbottompc->Pretty.sprintf"%s%s"(curr{pcwithPprintf.aft="[@"}ct)(attribute_body{pcwithPprintf.bef="";Pprintf.aft=Pretty.sprintf"]%s"pc.Pprintf.aft}attr))|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))]);None,(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"CtCon"];Extfun.Evar();Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.CtCon(_,ct,Ploc.VaValctcl)->Some(funcurrnexttopbottompc->letctcl=List.map(funct->ct,",")ctclinletpc={pcwithPprintf.ind=pc.Pprintf.ind+1}inPprintf.sprint_break12pc(funpc->plistctyp0{pcwithPprintf.bef=Pretty.sprintf"%s["pc.Pprintf.bef;Pprintf.aft="]"}ctcl)(funpc->currpcct))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"CtSig"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.CtSig(loc,Ploc.VaValcst,Ploc.VaValcsi)->Some(funcurrnexttopbottompc->letclass_sig_item_sep=(* if flag_semi_semi.val then semi_semi_after class_sig_item
else *)class_sig_iteminhoriz_vertic(fun()->ifalone_in_linepcthensprintf"\n"elsePretty.sprintf"%s%s"((funpc->functionSomet->ctyp{pcwithPprintf.bef=Pretty.sprintf"%s ("pc.Pprintf.bef;Pprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft}t|None->Pretty.sprintf"%s%s"pc.Pprintf.befpc.Pprintf.aft){pcwithPprintf.bef=Pretty.sprintf"%sobject"pc.Pprintf.bef;Pprintf.aft=" "}cst)(hlistclass_sig_item_sep{pcwithPprintf.bef="";Pprintf.aft=Pretty.sprintf" end%s"pc.Pprintf.aft}csi))(fun()->Pprintf.sprint_break_allfalsepc(funpc->(funpc->functionSomet->Pprintf.sprint_break12pc(funpc->Pretty.sprintf"%sobject"pc.Pprintf.bef)(funpc->ctyp{pcwithPprintf.bef=Pretty.sprintf"%s("pc.Pprintf.bef;Pprintf.aft=Pretty.sprintf")%s"pc.Pprintf.aft}t)|None->Pretty.sprintf"%sobject%s"pc.Pprintf.befpc.Pprintf.aft)pccst)[1,2,(funpc->vlistclass_sig_item_seppccsi);1,0,(funpc->Pretty.sprintf"%send%s"pc.Pprintf.befpc.Pprintf.aft)]))|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))]);Some"dot",(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"CtLid"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.CtLid(_,Ploc.VaVals)->Some(funcurrnexttopbottompc->Pretty.sprintf"%s%s%s"pc.Pprintf.befspc.Pprintf.aft)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"CtLongLid"];Extfun.Evar();Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.CtLongLid(_,li,Ploc.VaVals)->Some(funcurrnexttopbottompc->longident{pcwithPprintf.aft=Pretty.sprintf".%s%s"spc.Pprintf.aft}li)|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))]);None,(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"CtExten"];Extfun.Evar();Extfun.Evar()],false,(functionMLast.CtExten(_,e)->Some(funcurrnexttopbottompc->pr_extension"%"pce)|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))]);Some"bottom",(fune__->Extfun.extende__[Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->error(MLast.loc_of_class_typez)(sprintf"pr_class_type %d"(Obj.tag(Obj.reprz)))))])];Eprinter.extendpr_class_sig_itemNone[Some"top",(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"CgExten"];Extfun.Evar();Extfun.Evar()],false,(functionMLast.CgExten(_,e)->Some(funcurrnexttopbottompc->pr_extension"%%"pce)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"CgFlAtt"];Extfun.Evar();Extfun.Evar()],false,(functionMLast.CgFlAtt(_,attr)->Some(funcurrnexttopbottompc->pr_attribute"@@@"pcattr)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"CgVal"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Evar();Extfun.Evar()],false,(functionMLast.CgVal(loc,Ploc.VaValmf,Ploc.VaValvf,Ploc.VaVals,t,item_attrs)->Some(funcurrnexttopbottompc->Pprintf.sprint_break12pc(funpc->var_escaped{pcwithPprintf.bef=Pretty.sprintf"%sval%s%s "pc.Pprintf.bef(ifmfthen" mutable"else"")(ifvfthen" virtual"else"");Pprintf.aft=" :"}(loc,s))(funpc->Pretty.sprintf"%s%s"(ctyp{pcwithPprintf.aft=""}t)(hlist(pr_attribute"@@"){pcwithPprintf.bef=""}(Pcaml.unvalaitem_attrs))))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"CgCtr"];Extfun.Evar();Extfun.Evar();Extfun.Evar();Extfun.Evar()],false,(functionMLast.CgCtr(_,t1,t2,item_attrs)->Some(funcurrnexttopbottompc->Pprintf.sprint_break12pc(funpc->ctyp{pcwithPprintf.bef=Pretty.sprintf"%sconstraint "pc.Pprintf.bef;Pprintf.aft=" ="}t1)(funpc->Pretty.sprintf"%s%s"(ctyp{pcwithPprintf.aft=""}t2)(hlist(pr_attribute"@@"){pcwithPprintf.bef=""}(Pcaml.unvalaitem_attrs))))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"CgVir"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Evar();Extfun.Evar()],false,(functionMLast.CgVir(_,Ploc.VaValpriv,Ploc.VaVals,t,attrs)->Some(funcurrnexttopbottompc->sig_method_or_method_virtualpc" virtual"privstattrs)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"CgMth"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Evar();Extfun.Evar()],false,(functionMLast.CgMth(_,Ploc.VaValpriv,Ploc.VaVals,t,attrs)->Some(funcurrnexttopbottompc->sig_method_or_method_virtualpc""privstattrs)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"CgInh"];Extfun.Evar();Extfun.Evar();Extfun.Evar()],false,(functionMLast.CgInh(_,ct,item_attrs)->Some(funcurrnexttopbottompc->Pprintf.sprint_break12pc(funpc->Pretty.sprintf"%sinherit"pc.Pprintf.bef)(funpc->Pretty.sprintf"%s%s"(class_type{pcwithPprintf.aft=""}ct)(hlist(pr_attribute"@@"){pcwithPprintf.bef=""}(Pcaml.unvalaitem_attrs))))|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))]);Some"bottom",(fune__->Extfun.extende__[Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->error(MLast.loc_of_class_sig_itemz)(sprintf"pr_class_sig_item %d"(Obj.tag(Obj.reprz)))))])];Eprinter.extendpr_class_str_itemNone[Some"top",(fune__->Extfun.extende__[Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"CrExten"];Extfun.Evar();Extfun.Evar()],false,(functionMLast.CrExten(_,e)->Some(funcurrnexttopbottompc->pr_extension"%%"pce)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"CrFlAtt"];Extfun.Evar();Extfun.Evar()],false,(functionMLast.CrFlAtt(_,attr)->Some(funcurrnexttopbottompc->pr_attribute"@@@"pcattr)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"CrVav"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Evar();Extfun.Evar()],false,(functionMLast.CrVav(_,Ploc.VaValmf,Ploc.VaVals,t,item_attrs)->Some(funcurrnexttopbottompc->Pprintf.sprint_break12pc(funpc->var_escaped_noloc{pcwithPprintf.bef=Pretty.sprintf"%sval virtual%s "pc.Pprintf.bef(ifmfthen" mutable"else"");Pprintf.aft=" :"}s)(funpc->Pretty.sprintf"%s%s"(ctyp{pcwithPprintf.aft=""}t)(hlist(pr_attribute"@@"){pcwithPprintf.bef=""}(Pcaml.unvalaitem_attrs))))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"CrVal"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Evar();Extfun.Evar()],false,(functionMLast.CrVal(_,Ploc.VaValovf,Ploc.VaValmf,Ploc.VaVals,e,item_attrs)->Some(funcurrnexttopbottompc->Pprintf.sprint_break12pc(funpc->var_escaped_noloc{pcwithPprintf.bef=Pretty.sprintf"%sval%s%s "pc.Pprintf.bef(ifovfthen"!"else"")(ifmfthen" mutable"else"");Pprintf.aft=" ="}s)(funpc->Pretty.sprintf"%s%s"(expr{pcwithPprintf.aft=""}e)(hlist(pr_attribute"@@"){pcwithPprintf.bef=""}(Pcaml.unvalaitem_attrs))))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"CrCtr"];Extfun.Evar();Extfun.Evar();Extfun.Evar();Extfun.Evar()],false,(functionMLast.CrCtr(_,t1,t2,item_attrs)->Some(funcurrnexttopbottompc->Pprintf.sprint_break12pc(funpc->ctyp{pcwithPprintf.bef=Pretty.sprintf"%sconstraint "pc.Pprintf.bef;Pprintf.aft=" ="}t1)(funpc->Pretty.sprintf"%s%s"(ctyp{pcwithPprintf.aft=""}t2)(hlist(pr_attribute"@@"){pcwithPprintf.bef=""}(Pcaml.unvalaitem_attrs))))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"CrMth"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Evar();Extfun.Evar()],false,(functionMLast.CrMth(_,Ploc.VaValov,Ploc.VaValpriv,Ploc.VaVals,Ploc.VaValtopt,e,item_attrs)->Some(funcurrnexttopbottompc->let(pl,e)=matchtoptwithSome_->[],e|None->expr_fun_argseinletsimple_patt=Eprinter.apply_levelpr_patt"simple"inmatchtoptwithNone->Pprintf.sprint_break12pc(funpc->Pretty.sprintf"%s%s"(var_escaped_noloc{pcwithPprintf.bef=Pretty.sprintf"%smethod%s%s "pc.Pprintf.bef(ifovthen"!"else"")(ifprivthen" private"else"");Pprintf.aft=ifpl=[]then""else" "}s)(hlistsimple_patt{pcwithPprintf.bef="";Pprintf.aft=" ="}pl))(funpc->Pretty.sprintf"%s%s"(expr{pcwithPprintf.aft=""}e)(hlist(pr_attribute"@@"){pcwithPprintf.bef=""}(Pcaml.unvalaitem_attrs)))|Somet->Pprintf.sprint_break12pc(funpc->Pprintf.sprint_break14pc(funpc->Pretty.sprintf"%s%s"(var_escaped_noloc{pcwithPprintf.bef=Pretty.sprintf"%smethod%s%s "pc.Pprintf.bef(ifovthen"!"else"")(ifprivthen" private"else"");Pprintf.aft=ifpl=[]then""else" "}s)(hlistsimple_patt{pcwithPprintf.bef="";Pprintf.aft=" :"}pl))(funpc->poly_type{pcwithPprintf.aft=" ="}t))(funpc->Pretty.sprintf"%s%s"(expr{pcwithPprintf.aft=""}e)(hlist(pr_attribute"@@"){pcwithPprintf.bef=""}(Pcaml.unvalaitem_attrs))))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"CrVir"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Evar();Extfun.Evar()],false,(functionMLast.CrVir(_,Ploc.VaValpriv,Ploc.VaVals,t,item_attrs)->Some(funcurrnexttopbottompc->sig_method_or_method_virtualpc" virtual"privstitem_attrs)|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"CrIni"];Extfun.Evar();Extfun.Evar();Extfun.Evar()],false,(functionMLast.CrIni(_,e,item_attrs)->Some(funcurrnexttopbottompc->Pprintf.sprint_break12pc(funpc->Pretty.sprintf"%sinitializer"pc.Pprintf.bef)(funpc->Pretty.sprintf"%s%s"(expr{pcwithPprintf.aft=""}e)(hlist(pr_attribute"@@"){pcwithPprintf.bef=""}(Pcaml.unvalaitem_attrs))))|_->None);Extfun.Eapp[Extfun.Eacc[Extfun.Econ"MLast";Extfun.Econ"CrInh"];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Evar();Extfun.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()];Extfun.Evar()],false,(functionMLast.CrInh(_,Ploc.VaValovf,ce,Ploc.VaValpb,item_attrs)->Some(funcurrnexttopbottompc->Pprintf.sprint_break12pc(funpc->Pretty.sprintf"%sinherit%s"pc.Pprintf.bef(ifovfthen"!"else""))(funpc->letpc={pcwithPprintf.aft=letpc={pcwithPprintf.bef=""}inPretty.sprintf"%s%s"((funpc->functionSomes->var_escaped_noloc{pcwithPprintf.bef=Pretty.sprintf"%s as "pc.Pprintf.bef}s|None->Pretty.sprintf"%s%s"pc.Pprintf.befpc.Pprintf.aft){pcwithPprintf.aft=""}pb)(hlist(pr_attribute"@@"){pcwithPprintf.bef=""}(Pcaml.unvalaitem_attrs))}inclass_exprpcce))|_->None);Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->nextpcz))]);Some"bottom",(fune__->Extfun.extende__[Extfun.Evar(),false,(funz->Some(funcurrnexttopbottompc->error(MLast.loc_of_class_str_itemz)(sprintf"pr_class_str_item %d"(Obj.tag(Obj.reprz)))))])]# 3 "pr_o.cppo.ml"letpr_oe=Eprinter.applypr_str_itemPprintf.empty_pce