aboutsummaryrefslogtreecommitdiffhomepage
path: root/grammar/argextend.ml4
diff options
context:
space:
mode:
Diffstat (limited to 'grammar/argextend.ml4')
-rw-r--r--grammar/argextend.ml415
1 files changed, 6 insertions, 9 deletions
diff --git a/grammar/argextend.ml4 b/grammar/argextend.ml4
index 65dc237bb..be4097f13 100644
--- a/grammar/argextend.ml4
+++ b/grammar/argextend.ml4
@@ -82,21 +82,19 @@ let statically_known_possibly_empty s (prods,_) =
prods
let possibly_empty_subentries loc (prods,act) =
- let bind_name id v e =
- let s = Names.Id.to_string id in
+ let bind_name s v e =
<:expr< let $lid:s$ = $v$ in $e$ >>
in
let rec aux = function
| [] -> <:expr< let loc = $default_loc$ in let _ = loc in $act$ >>
- | ExtNonTerminal(_, e, id) :: tl when is_possibly_empty e ->
- bind_name id (get_empty_entry e) (aux tl)
- | ExtNonTerminal(t, _, id) :: tl ->
+ | ExtNonTerminal(_, e, s) :: tl when is_possibly_empty e ->
+ bind_name s (get_empty_entry e) (aux tl)
+ | ExtNonTerminal(t, _, s) :: tl ->
let t = match t with
| ExtraArgType _ as t -> t
| _ -> assert false
in
(* We check at runtime if extraarg s parses "epsilon" *)
- let s = Names.Id.to_string id in
<:expr< let $lid:s$ = match Genarg.default_empty_value $make_wit loc t$ with
[ None -> raise Exit
| Some v -> v ] in $aux tl$ >>
@@ -130,7 +128,6 @@ let make_act loc act pil =
let rec make = function
| [] -> <:expr< (fun loc -> $act$) >>
| ExtNonTerminal (t, _, p) :: tl ->
- let p = Names.Id.to_string p in
<:expr<
(fun $lid:p$ ->
let _ = Genarg.in_gen $make_rawwit loc t$ $lid:p$ in $make tl$)
@@ -312,10 +309,10 @@ EXTEND
genarg:
[ [ e = LIDENT; "("; s = LIDENT; ")" ->
let e = parse_user_entry e "" in
- ExtNonTerminal (type_of_user_symbol e, e, Names.Id.of_string s)
+ ExtNonTerminal (type_of_user_symbol e, e, s)
| e = LIDENT; "("; s = LIDENT; ","; sep = STRING; ")" ->
let e = parse_user_entry e sep in
- ExtNonTerminal (type_of_user_symbol e, e, Names.Id.of_string s)
+ ExtNonTerminal (type_of_user_symbol e, e, s)
| s = STRING ->
if String.length s > 0 && Util.is_letter s.[0] then
Lexer.add_keyword s;