Commits

Sébastien Ferré  committed 7a69181

Dcg.check predicate receives context and cursor; notation '@' for Dcg.rise.

  • Participants
  • Parent commits 5c4eb08

Comments (0)

Files changed (2)

    param = p1 when expr_bool else expr_string ==> guard p1 expr_string (fun param -> expr_bool)
 *)
 
-class ['ctx,'cursor,'msg] check (name : string) (pred : unit -> bool) (ctx : 'ctx) (cursor : 'cursor) =
+class ['ctx,'cursor,'msg] check (name : string) (pred : 'ctx -> 'cursor -> bool) (ctx : 'ctx) (cursor : 'cursor) =
   object (self)
     val mutable state = `Begin
 
       match state with
       | `Begin ->
 	  state <- `End;
-	  if pred ()
+	  if pred ctx cursor
 	  then
 	    Parsed (ctx, (), cursor)
 	  else

File dcg/pa_dcg.ml

     [ [ "EOF" ->
         <:patt< _ >>, <:expr< Matcher.eof >>
       | "when"; s = str; e = expr LEVEL "top" ->
-	  let f = <:expr< fun () -> $e$ >> in
+	  let f = <:expr< fun _ _ -> $e$ >> in
 	  <:patt< _ >>, <:expr< Dcg.check $s$ $f$ >>
+      | "@"; x = ipatt ->
+	  x, <:expr< Dcg.rise >>
       | "?"; x = ipatt ->
 	  x, <:expr< Dcg.get_context >>
       | "!"; e = expr LEVEL "top" ->