summaryrefslogtreecommitdiff
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 ;