File: int63_syntax.ml

package info (click to toggle)
coq 8.12.0-3
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 36,468 kB
  • sloc: ml: 210,451; sh: 3,345; python: 3,008; ansic: 2,482; makefile: 793; lisp: 224; javascript: 63; xml: 24; sed: 2
file content (57 lines) | stat: -rw-r--r-- 2,122 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
(************************************************************************)
(*         *   The Coq Proof Assistant / The Coq Development Team       *)
(*  v      *         Copyright INRIA, CNRS and contributors             *)
(* <O___,, * (see version control and CREDITS file for authors & dates) *)
(*   \VV/  **************************************************************)
(*    //   *    This file is distributed under the terms of the         *)
(*         *     GNU Lesser General Public License Version 2.1          *)
(*         *     (see LICENSE file for the text of the license)         *)
(************************************************************************)


(* Poor's man DECLARE PLUGIN *)
let __coq_plugin_name = "int63_syntax_plugin"
let () = Mltop.add_known_module __coq_plugin_name

(* digit-based syntax for int63 *)

open Names
open Libnames

(*** Constants for locating int63 constructors ***)

let q_int63 = qualid_of_string "Coq.Numbers.Cyclic.Int63.Int63.int"
let q_id_int63 = qualid_of_string "Coq.Numbers.Cyclic.Int63.Int63.id_int"

let make_dir l = DirPath.make (List.rev_map Id.of_string l)
let make_path dir id = Libnames.make_path (make_dir dir) (Id.of_string id)

(* int63 stuff *)
let int63_module = ["Coq"; "Numbers"; "Cyclic"; "Int63"; "Int63"]
let int63_path = make_path int63_module "int"
let int63_scope = "int63_scope"

let at_declare_ml_module f x =
  Mltop.declare_cache_obj (fun () -> f x) __coq_plugin_name

(* Actually declares the interpreter for int63 *)

let _ =
  let open Notation in
  at_declare_ml_module
    (fun () ->
       let id_int63 = Nametab.locate q_id_int63 in
       let o = { to_kind = Int63, Direct;
                 to_ty = id_int63;
                 of_kind = Int63, Direct;
                 of_ty = id_int63;
                 ty_name = q_int63;
                 warning = Nop } in
       enable_prim_token_interpretation
         { pt_local = false;
           pt_scope = int63_scope;
           pt_interp_info = NumeralNotation o;
           pt_required = (int63_path, int63_module);
           pt_refs = [];
           pt_in_match = false })
    ()