aboutsummaryrefslogtreecommitdiff
path: root/plugins/syntax/positive_syntax.ml
diff options
context:
space:
mode:
authorPierre Letouzey2018-04-04 10:43:38 +0200
committerJason Gross2018-08-31 20:05:53 -0400
commitb3c75936a4912ca794cdcecfeb92044552336c63 (patch)
tree7e612dd15ea6f36285ab431d1e1667cb399da3a1 /plugins/syntax/positive_syntax.ml
parent93119295d0dd81669b46f52032c1bfe8f36afca0 (diff)
prim notations backtrackable, their declarations now in two parts (API change)
The first part (e.g. register_bignumeral_interpretation) deals only with the interp/uninterp closures. It should typically be done as a side effect during a syntax plugin loading. No prim notation are active yet after this phase. The second part (enable_prim_token_interpretation) activates the prim notation. It is now correctly talking to Summary and to the LibStack. To avoid "phantom" objects in libstack after a mere Require, this second part should be done inside a Mltop.declare_cache_obj The link between the two parts is a prim_token_uid (a string), which should be unique for each primitive notation. When this primitive notation is specific to a scope, the scope_name could be used as uid. Btw, the list of "patterns" for detecting when an uninterpreter should be considered is now restricted to a list of global_reference (inductive constructors, or injection functions such as IZR). The earlier API was accepting a glob_constr list, but was actually only working well for global_reference. A minimal compatibility is provided (declare_numeral_interpreter), but is discouraged, since it is known to store uncessary objects in the libstack.
Diffstat (limited to 'plugins/syntax/positive_syntax.ml')
-rw-r--r--plugins/syntax/positive_syntax.ml22
1 files changed, 14 insertions, 8 deletions
diff --git a/plugins/syntax/positive_syntax.ml b/plugins/syntax/positive_syntax.ml
index 0c82e47445..6fce4de9ef 100644
--- a/plugins/syntax/positive_syntax.ml
+++ b/plugins/syntax/positive_syntax.ml
@@ -91,11 +91,17 @@ let uninterp_positive (AnyGlobConstr p) =
(* Declaring interpreters and uninterpreters for positive *)
(************************************************************************)
-let _ = Notation.declare_numeral_interpreter "positive_scope"
- (positive_path,binnums)
- interp_positive
- ([DAst.make @@ GRef (glob_xI, None);
- DAst.make @@ GRef (glob_xO, None);
- DAst.make @@ GRef (glob_xH, None)],
- uninterp_positive,
- true)
+open Notation
+
+let at_declare_ml_module f x =
+ Mltop.declare_cache_obj (fun () -> f x) __coq_plugin_name
+
+let _ =
+ let scope = "positive_scope" in
+ register_bignumeral_interpretation scope (interp_positive,uninterp_positive);
+ at_declare_ml_module enable_prim_token_interpretation
+ { pt_scope = scope;
+ pt_uid = scope;
+ pt_required = (positive_path,binnums);
+ pt_refs = [glob_xI; glob_xO; glob_xH];
+ pt_in_match = true }