1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556openPpxlibopenAst_helperletmklidmlid=Exp.ident{Location.loc=!default_loc;txt=Longident.Ldot(m,lid)}letapplymfxs=Exp.(apply(mklidmf)(List.map(fune->Asttypes.Nolabel,e)xs))letoptint=Longident.Lident"Optint"letoptints=letx=Optint.of_stringsinifOptint.equalxOptint.zerothenmklidoptint"zero"elseifOptint.equalxOptint.onethenmklidoptint"one"elseifOptint.equalxOptint.minus_onethenmklidoptint"minus_one"elseapplyoptint"of_string"[Exp.constant(Const.strings)]letint63=Longident.Ldot(Longident.Lident"Optint","Int63")letint63s=letmoduleInt63=Optint.Int63inletx=Int63.of_stringsinifInt63.equalxInt63.zerothenmklidint63"zero"elseifInt63.equalxInt63.onethenmklidint63"one"elseifInt63.equalxInt63.minus_onethenmklidint63"minus_one"elseapplyint63"of_string"[Exp.constant(Const.strings)]letexpandermflocs=with_default_locloc@@fun()->tryfswithFailuremsg->(* XXX: [msg] is often not very helpful *)leterrors=Exp.extension~loc(Location.Error.to_extension(Location.Error.make~loc~sub:[]s))inFormat.kasprintferror"Bad %s integer literal. %s."mmsglet()=Driver.register_transformation"ppx_optint"~rules:[Context_free.Rule.constantInteger'i'(expander"Optint.t"optint);Context_free.Rule.constantInteger'I'(expander"Optint.Int63.t"int63);]