Sébastien Ferré avatar Sébastien Ferré committed 7a69181

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

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
     [ [ "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" ->
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.