blob: 59e94ab462a28ce6152615bf92b5765eb62f2a54 (
plain)
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
|
commit f157a5b913451b85e8cfe7549c66e5c98669233b
Author: Vasilis Papavasileiou <git@vasilis.airpost.net>
Date: Wed Mar 2 14:23:02 2016 +0100
Compile against Camlp4 4.02+7
diff --git a/src/syntax/pa_eliom_seed.ml b/src/syntax/pa_eliom_seed.ml
index c101ff8..dc31caa 100644
--- a/src/syntax/pa_eliom_seed.ml
+++ b/src/syntax/pa_eliom_seed.ml
@@ -632,8 +632,26 @@ module Register(Id : sig val name: string end)(Pass : Pass) = struct
| None ->
Printf.ksprintf (Syntax_error.raise loc) fmt
- module E2 = Camlp4.ErrorHandler.Register(Syntax_error)
- DELETE_RULE Gram expr: "{"; TRY [label_expr_list; "}"] END;
+ module E2 = Camlp4.ErrorHandler.Register(Syntax_error) ;;
+
+ try
+ DELETE_RULE Gram expr: "{"; TRY [label_expr_list; "}"] END
+ with Camlp4.Struct.Grammar.Delete.Rule_not_found _ ->
+ (let test_record_field =
+ Gram.Entry.of_parser "record_field" (fun strm ->
+ let rec loop = function
+ | [] -> ()
+ | (UIDENT _, _) :: (KEYWORD ".", _) :: rest -> loop rest
+ | (LIDENT _, _) :: (KEYWORD "=", _) :: _ -> ()
+ | (LIDENT _, _) :: (KEYWORD ";", _) :: _ -> ()
+ | [LIDENT _, _] -> ()
+ | _ -> raise Stream.Failure
+ in
+ loop (Stream.npeek 100 strm))
+ in
+ DELETE_RULE Gram expr:
+ "{"; test_record_field; label_expr_list; "}" END) ;;
+
DELETE_RULE Gram expr: "{"; TRY [expr LEVEL "."; "with"]; label_expr_list; "}" END;
(* Extending syntax *)
@@ -812,7 +830,7 @@ module Register(Id : sig val name: string end)(Pass : Pass) = struct
expr: LEVEL "simple"
[ [ KEYWORD "{"; lel = TRY [lel = label_expr_list; "}" -> lel] ->
- <:expr< { $lel$ } >>
+ Ast.ExRec (_loc, lel, Ast.ExNil _loc)
| KEYWORD "{shared#";
typ = TRY [ typ = OPT ctyp; KEYWORD "{" -> typ];
opt_lvl = dummy_set_level_shared_value_expr ;
|