1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034603560366037603860396040604160426043604460456046604760486049605060516052605360546055605660576058605960606061606260636064606560666067606860696070607160726073607460756076607760786079608060816082608360846085608660876088608960906091609260936094609560966097609860996100610161026103610461056106610761086109611061116112611361146115611661176118611961206121612261236124612561266127612861296130613161326133613461356136613761386139614061416142614361446145614661476148614961506151615261536154615561566157615861596160616161626163616461656166616761686169617061716172617361746175617661776178617961806181618261836184618561866187618861896190619161926193619461956196619761986199620062016202620362046205620662076208620962106211621262136214621562166217621862196220622162226223622462256226622762286229623062316232623362346235623662376238623962406241624262436244624562466247624862496250625162526253625462556256625762586259626062616262626362646265626662676268626962706271627262736274627562766277627862796280628162826283628462856286628762886289629062916292629362946295629662976298629963006301630263036304630563066307630863096310631163126313631463156316631763186319632063216322632363246325632663276328632963306331633263336334633563366337633863396340634163426343634463456346634763486349635063516352635363546355635663576358635963606361636263636364636563666367636863696370637163726373637463756376637763786379638063816382638363846385638663876388638963906391639263936394639563966397639863996400640164026403640464056406640764086409641064116412641364146415641664176418641964206421642264236424642564266427642864296430643164326433643464356436643764386439644064416442644364446445644664476448644964506451645264536454645564566457645864596460646164626463646464656466646764686469647064716472647364746475647664776478647964806481648264836484648564866487648864896490649164926493649464956496649764986499650065016502650365046505650665076508650965106511651265136514651565166517651865196520652165226523652465256526652765286529653065316532653365346535653665376538653965406541654265436544654565466547654865496550655165526553655465556556655765586559656065616562656365646565656665676568656965706571657265736574657565766577657865796580658165826583658465856586658765886589659065916592659365946595659665976598659966006601660266036604660566066607660866096610661166126613661466156616661766186619662066216622662366246625662666276628662966306631663266336634663566366637663866396640664166426643664466456646664766486649665066516652665366546655665666576658665966606661666266636664666566666667666866696670667166726673667466756676667766786679668066816682668366846685668666876688668966906691669266936694669566966697669866996700670167026703670467056706670767086709671067116712671367146715671667176718671967206721672267236724672567266727672867296730673167326733673467356736673767386739674067416742674367446745674667476748674967506751675267536754675567566757675867596760676167626763676467656766676767686769677067716772677367746775677667776778677967806781678267836784678567866787678867896790679167926793679467956796679767986799680068016802680368046805680668076808680968106811681268136814681568166817681868196820682168226823682468256826682768286829683068316832683368346835683668376838683968406841684268436844684568466847684868496850685168526853685468556856685768586859686068616862686368646865686668676868686968706871687268736874687568766877687868796880688168826883688468856886688768886889689068916892689368946895689668976898689969006901690269036904690569066907690869096910691169126913691469156916691769186919692069216922692369246925692669276928692969306931693269336934693569366937693869396940694169426943694469456946694769486949695069516952695369546955695669576958695969606961696269636964696569666967696869696970697169726973697469756976697769786979698069816982698369846985698669876988698969906991699269936994699569966997699869997000700170027003700470057006700770087009701070117012701370147015701670177018701970207021702270237024702570267027702870297030703170327033703470357036703770387039704070417042704370447045704670477048704970507051705270537054705570567057705870597060706170627063706470657066706770687069707070717072707370747075707670777078707970807081708270837084708570867087708870897090709170927093709470957096709770987099710071017102710371047105710671077108710971107111711271137114711571167117711871197120712171227123712471257126712771287129713071317132713371347135713671377138713971407141714271437144714571467147714871497150715171527153715471557156715771587159716071617162716371647165716671677168716971707171717271737174717571767177717871797180718171827183718471857186718771887189719071917192719371947195719671977198719972007201720272037204720572067207720872097210721172127213721472157216721772187219722072217222722372247225722672277228722972307231723272337234723572367237723872397240724172427243724472457246724772487249725072517252725372547255725672577258725972607261726272637264726572667267726872697270727172727273727472757276727772787279728072817282728372847285728672877288728972907291729272937294729572967297729872997300730173027303730473057306730773087309731073117312731373147315731673177318731973207321732273237324732573267327732873297330733173327333733473357336733773387339734073417342734373447345734673477348734973507351735273537354735573567357735873597360736173627363736473657366736773687369737073717372737373747375737673777378737973807381738273837384738573867387738873897390739173927393739473957396739773987399740074017402740374047405740674077408740974107411741274137414741574167417741874197420742174227423742474257426742774287429743074317432743374347435743674377438743974407441744274437444744574467447744874497450745174527453745474557456745774587459746074617462746374647465746674677468746974707471747274737474747574767477747874797480748174827483748474857486748774887489749074917492749374947495749674977498749975007501750275037504750575067507750875097510751175127513751475157516751775187519752075217522752375247525752675277528752975307531753275337534753575367537753875397540754175427543754475457546754775487549755075517552755375547555755675577558755975607561756275637564756575667567756875697570757175727573757475757576757775787579758075817582758375847585758675877588758975907591759275937594759575967597759875997600760176027603760476057606760776087609761076117612761376147615761676177618761976207621762276237624762576267627762876297630763176327633763476357636763776387639764076417642764376447645764676477648764976507651765276537654765576567657765876597660766176627663766476657666766776687669767076717672767376747675767676777678767976807681768276837684768576867687768876897690769176927693769476957696769776987699770077017702770377047705770677077708770977107711771277137714771577167717771877197720772177227723772477257726772777287729773077317732773377347735773677377738773977407741774277437744774577467747774877497750775177527753775477557756775777587759776077617762776377647765776677677768776977707771777277737774777577767777777877797780778177827783778477857786778777887789779077917792779377947795779677977798779978007801780278037804780578067807780878097810781178127813781478157816781778187819782078217822782378247825782678277828782978307831783278337834783578367837783878397840784178427843784478457846784778487849785078517852785378547855785678577858785978607861786278637864786578667867786878697870787178727873787478757876787778787879788078817882788378847885788678877888788978907891789278937894789578967897789878997900790179027903790479057906790779087909791079117912791379147915791679177918791979207921792279237924792579267927792879297930793179327933793479357936793779387939794079417942794379447945794679477948794979507951795279537954795579567957795879597960796179627963796479657966796779687969797079717972797379747975797679777978797979807981798279837984798579867987798879897990799179927993799479957996799779987999800080018002800380048005800680078008800980108011801280138014801580168017801880198020802180228023802480258026802780288029803080318032803380348035803680378038803980408041804280438044804580468047804880498050805180528053805480558056805780588059806080618062806380648065806680678068806980708071807280738074807580768077807880798080808180828083808480858086808780888089809080918092809380948095809680978098809981008101810281038104810581068107810881098110811181128113811481158116811781188119812081218122812381248125812681278128812981308131813281338134813581368137813881398140814181428143814481458146814781488149815081518152815381548155815681578158815981608161816281638164816581668167816881698170817181728173817481758176817781788179818081818182818381848185818681878188818981908191819281938194819581968197819881998200820182028203820482058206820782088209821082118212821382148215821682178218821982208221822282238224822582268227822882298230823182328233823482358236823782388239824082418242824382448245824682478248824982508251825282538254825582568257825882598260826182628263826482658266826782688269827082718272827382748275827682778278827982808281828282838284828582868287828882898290829182928293829482958296829782988299830083018302830383048305830683078308830983108311831283138314831583168317831883198320832183228323832483258326832783288329833083318332833383348335833683378338833983408341834283438344834583468347834883498350835183528353835483558356835783588359836083618362836383648365836683678368836983708371837283738374837583768377837883798380838183828383838483858386838783888389839083918392839383948395839683978398839984008401840284038404840584068407840884098410841184128413841484158416841784188419842084218422842384248425842684278428842984308431843284338434843584368437843884398440844184428443844484458446844784488449845084518452845384548455845684578458845984608461846284638464846584668467846884698470847184728473847484758476847784788479848084818482848384848485848684878488848984908491849284938494849584968497849884998500850185028503850485058506850785088509851085118512851385148515851685178518851985208521852285238524852585268527852885298530853185328533853485358536853785388539854085418542854385448545854685478548854985508551855285538554855585568557855885598560856185628563856485658566856785688569857085718572857385748575857685778578857985808581858285838584858585868587858885898590859185928593859485958596859785988599860086018602860386048605860686078608860986108611861286138614861586168617861886198620862186228623862486258626862786288629863086318632863386348635863686378638863986408641# 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)->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)->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.VaVal[_,Ploc.VaValNone])->[]|MLast.PaLab(_,Ploc.VaVal[_,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())elsefpcletvar_escapedpc(loc,v)=letx=ifv.[0]='*'||v.[String.lengthv-1]='*'then"( "^v^" )"elseifis_infixv||has_special_charsv||is_letopv||is_andopvthen"("^v^")"elsevinexpand_lprintfpcloc(funpc->Pretty.sprintf"%s%s%s"pc.Pprintf.befxpc.Pprintf.aft)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_pattletctyp=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->Pretty.sprintf"%s%s%s"pc.Pprintf.bef(Pcaml.unvalaid)pc.Pprintf.aft|Someli->longident{pcwithPprintf.aft=Pretty.sprintf".%s%s"(Pcaml.unvalaid)pc.Pprintf.aft}(Pcaml.unvalali)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|_->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.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.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,(vari,inj)))=lettv=Pcaml.unvalatvintv_or_blank{pcwithPprintf.bef=Pretty.sprintf"%s%s%s"pc.Pprintf.bef(matchvariwithSometrue->"+"|Somefalse->"-"|None->"")(matchinjwithtrue->"!"|false->"")}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))&&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->Pretty.sprintf"%s%s%s :"pc.Pprintf.bef(ifmthen"mutable "else"")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]),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.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.Eapp[Extfun.Eacc[Extfun.Econ"Some"];Extfun.Evar()]]];Extfun.Eacc[Extfun.Econ"[]"]]]],false,(functionMLast.ExLab(loc,Ploc.VaVal[_,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.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.Eacc[Extfun.Econ"[]"]]]],false,(functionMLast.ExLab(loc,Ploc.VaVal[_,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.Evar()]],false,(functionMLast.ExStr(_,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()]],false,(functionMLast.PaTup(_,Ploc.VaValpl)->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"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.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->Pretty.sprintf"%s(type %s)%s"pc.Pprintf.befspc.Pprintf.aft)|_->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(sprintf"pr_patt %d: %s"(Obj.tag(Obj.reprz))(Pp_MLast.show_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," *")tlinplistnext2pctl)|_->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"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->class_type_params{pcwithPprintf.bef=Pretty.sprintf"%s%s"pc.Pprintf.bef(ifPcaml.unvalaci.MLast.ciVirthen"virtual "else"");Pprintf.aft=Pretty.sprintf"%s :"(Pcaml.unvalaci.MLast.ciNam)}(ci.MLast.ciLoc,Pcaml.unvala(sndci.MLast.ciPrm)))(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->class_type_params{pcwithPprintf.bef=Pretty.sprintf"%s%s"pc.Pprintf.bef(ifPcaml.unvalaci.MLast.ciVirthen"virtual "else"");Pprintf.aft=Pretty.sprintf"%s ="(Pcaml.unvalaci.MLast.ciNam)}(ci.MLast.ciLoc,Pcaml.unvala(sndci.MLast.ciPrm)))(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"(class_type_params{pcwithPprintf.bef=Pretty.sprintf"%s%s"pc.Pprintf.bef(ifPcaml.unvalaci.MLast.ciVirthen"virtual "else"");Pprintf.aft=Pretty.sprintf"%s%s"(Pcaml.unvalaci.MLast.ciNam)(ifpl=[]then""else" ")}(ci.MLast.ciLoc,Pcaml.unvala(sndci.MLast.ciPrm)))(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)))(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(_,Ploc.VaValc,Ploc.VaValtrue,Ploc.VaVal[],alg_attrs)->hlist(pr_attribute"@"){pcwithPprintf.bef=Pretty.sprintf"%s`%s"pc.Pprintf.befc}(Pcaml.unvalaalg_attrs)|MLast.PvTag(_,Ploc.VaValc,Ploc.VaValao,Ploc.VaValtl,alg_attrs)->lettl=List.map(funt->t," &")tlinPprintf.sprint_break15pc(funpc->Pretty.sprintf"%s`%s of%s"pc.Pprintf.befc(ifaothen" &"else""))(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=Pretty.sprintf"%s'%s%s"pc.Pprintf.beftvpc.Pprintf.aftletclass_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(_,Ploc.VaVals)->Some(funcurrnexttopbottompc->Pretty.sprintf"%s`%s%s"pc.Pprintf.befspc.Pprintf.aft)|_->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.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.PaLab(_,Ploc.VaVallpop)->Some(funcurrnexttopbottompc->letlpop=List.map(funpoe->poe,"")lpopinplist(label_ipatt_eq_pattcurr)1pclpop)|_->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(_,Ploc.VaVals)->Some(funcurrnexttopbottompc->Pretty.sprintf"%s`%s%s"pc.Pprintf.befspc.Pprintf.aft)|_->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->Pretty.sprintf"%smethod%s%s %s :"pc.Pprintf.befvirt(ifprivthen" private"else"")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.Eapp[Extfun.Eacc[Extfun.Econ"Ploc";Extfun.Econ"VaVal"];Extfun.Evar()]],false,(functionMLast.ExLab(_,Ploc.VaVallpoe)->Some(funcurrnexttopbottompc->letlpoe=List.map(funpoe->poe,"")lpoeinplist(label_ipattcurr)1pclpoe)|_->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->Pretty.sprintf"%sval virtual%s %s :"pc.Pprintf.bef(ifmfthen" mutable"else"")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->Pretty.sprintf"%sval%s%s %s ="pc.Pprintf.bef(ifovfthen"!"else"")(ifmfthen" mutable"else"")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->hlistsimple_patt{pcwithPprintf.bef=Pretty.sprintf"%smethod%s%s %s%s"pc.Pprintf.bef(ifovthen"!"else"")(ifprivthen" private"else"")s(ifpl=[]then""else" ");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->hlistsimple_patt{pcwithPprintf.bef=Pretty.sprintf"%smethod%s%s %s%s"pc.Pprintf.bef(ifovthen"!"else"")(ifprivthen" private"else"")s(ifpl=[]then""else" ");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->Pretty.sprintf"%s as %s%s"pc.Pprintf.befspc.Pprintf.aft|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