diff options
author | Enrico Tassi <gareuselesinge@debian.org> | 2015-01-25 14:42:51 +0100 |
---|---|---|
committer | Enrico Tassi <gareuselesinge@debian.org> | 2015-01-25 14:42:51 +0100 |
commit | 7cfc4e5146be5666419451bdd516f1f3f264d24a (patch) | |
tree | e4197645da03dc3c7cc84e434cc31d0a0cca7056 /printing/genprint.ml | |
parent | 420f78b2caeaaddc6fe484565b2d0e49c66888e5 (diff) |
Imported Upstream version 8.5~beta1+dfsg
Diffstat (limited to 'printing/genprint.ml')
-rw-r--r-- | printing/genprint.ml | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/printing/genprint.ml b/printing/genprint.ml new file mode 100644 index 00000000..ade69ef8 --- /dev/null +++ b/printing/genprint.ml @@ -0,0 +1,45 @@ +(************************************************************************) +(* v * The Coq Proof Assistant / The Coq Development Team *) +(* <O___,, * INRIA - CNRS - LIX - LRI - PPS - Copyright 1999-2015 *) +(* \VV/ **************************************************************) +(* // * This file is distributed under the terms of the *) +(* * GNU Lesser General Public License Version 2.1 *) +(************************************************************************) + +open Pp +open Genarg + +type ('raw, 'glb, 'top) printer = { + raw : 'raw -> std_ppcmds; + glb : 'glb -> std_ppcmds; + top : 'top -> std_ppcmds; +} + +module PrintObj = +struct + type ('raw, 'glb, 'top) obj = ('raw, 'glb, 'top) printer + let name = "printer" + let default wit = match unquote (rawwit wit) with + | ExtraArgType name -> + let printer = { + raw = (fun _ -> str "<genarg:" ++ str name ++ str ">"); + glb = (fun _ -> str "<genarg:" ++ str name ++ str ">"); + top = (fun _ -> str "<genarg:" ++ str name ++ str ">"); + } in + Some printer + | _ -> assert false +end + +module Print = Register (PrintObj) + +let register_print0 wit raw glb top = + let printer = { raw; glb; top; } in + Print.register0 wit printer + +let raw_print wit v = (Print.obj wit).raw v +let glb_print wit v = (Print.obj wit).glb v +let top_print wit v = (Print.obj wit).top v + +let generic_raw_print v = unpack { unpacker = fun w v -> raw_print w (raw v); } v +let generic_glb_print v = unpack { unpacker = fun w v -> glb_print w (glb v); } v +let generic_top_print v = unpack { unpacker = fun w v -> top_print w (top v); } v |