abstract type Scan.stopper;
authorwenzelm
Mon, 04 Aug 2008 21:24:17 +0200
changeset 27732 8dbf5761a24a
parent 27731 a7444ded92cf
child 27733 d3d7038fb7b5
abstract type Scan.stopper;
src/Pure/General/source.ML
src/Pure/General/symbol.ML
src/Pure/Isar/args.ML
src/Pure/ML/ml_lex.ML
src/Pure/Syntax/simple_syntax.ML
src/Pure/Thy/thy_output.ML
--- a/src/Pure/General/source.ML	Mon Aug 04 21:24:15 2008 +0200
+++ b/src/Pure/General/source.ML	Mon Aug 04 21:24:17 2008 +0200
@@ -21,10 +21,10 @@
   val of_string: string -> (string, string list) source
   val exhausted: ('a, 'b) source -> ('a, 'a list) source
   val tty: (string, unit) source
-  val source': 'a -> 'b * ('b -> bool) -> ('a * 'b list -> 'c list * ('a * 'b list)) ->
+  val source': 'a -> 'b Scan.stopper -> ('a * 'b list -> 'c list * ('a * 'b list)) ->
     (bool * (string -> 'a * 'b list -> 'c list * ('a * 'b list))) option ->
     ('b, 'e) source -> ('c, 'a * ('b, 'e) source) source
-  val source: 'a * ('a -> bool) -> ('a list -> 'b list * 'a list) ->
+  val source: 'a Scan.stopper -> ('a list -> 'b list * 'a list) ->
     (bool * (string -> 'a list -> 'b list * 'a list)) option ->
     ('a, 'd) source -> ('b, ('a, 'd) source) source
 end;
@@ -148,7 +148,7 @@
         | SOME (interactive, recover) =>
             (drain (Scan.catch scan) inp handle Fail msg =>
               (if interactive then Output.error_msg msg else ();
-                drain (Scan.unless (Scan.lift (Scan.one (#2 stopper))) (recover msg)) inp)));
+                drain (Scan.unless (Scan.lift (Scan.one (Scan.is_stopper stopper))) (recover msg)) inp)));
   in (ys, (state', unget (xs', src'))) end;
 
 fun source' init_state stopper scan recover src =
--- a/src/Pure/General/symbol.ML	Mon Aug 04 21:24:15 2008 +0200
+++ b/src/Pure/General/symbol.ML	Mon Aug 04 21:24:17 2008 +0200
@@ -21,7 +21,7 @@
   val is_utf8_trailer: symbol -> bool
   val eof: symbol
   val is_eof: symbol -> bool
-  val stopper: symbol * (symbol -> bool)
+  val stopper: symbol Scan.stopper
   val sync: symbol
   val is_sync: symbol -> bool
   val malformed: symbol
@@ -120,7 +120,7 @@
 val eof = "";
 fun is_eof s = s = eof;
 fun not_eof s = s <> eof;
-val stopper = (eof, is_eof);
+val stopper = Scan.stopper (K eof) is_eof;
 
 val sync = "\\<^sync>";
 fun is_sync s = s = sync;
--- a/src/Pure/Isar/args.ML	Mon Aug 04 21:24:15 2008 +0200
+++ b/src/Pure/Isar/args.ML	Mon Aug 04 21:24:17 2008 +0200
@@ -23,7 +23,7 @@
   val mk_fact: thm list -> T
   val mk_attribute: (morphism -> attribute) -> T
   val eof: T
-  val stopper: T * (T -> bool)
+  val stopper: T Scan.stopper
   val not_eof: T -> bool
   type src
   val src: (string * T list) * Position.T -> src
@@ -161,7 +161,7 @@
 fun is_eof (Arg ((EOF, _, _), _)) = true
   | is_eof _ = false;
 
-val stopper = (eof, is_eof);
+val stopper = Scan.stopper (K eof) is_eof;
 val not_eof = not o is_eof;
 
 
--- a/src/Pure/ML/ml_lex.ML	Mon Aug 04 21:24:15 2008 +0200
+++ b/src/Pure/ML/ml_lex.ML	Mon Aug 04 21:24:17 2008 +0200
@@ -11,7 +11,7 @@
     Keyword | Ident | LongIdent | TypeVar | Word | Int | Real | Char | String |
     Space | Comment | Error of string | EOF
   eqtype token
-  val stopper: token * (token -> bool)
+  val stopper: token Scan.stopper
   val is_regular: token -> bool
   val is_improper: token -> bool
   val pos_of: token -> string
@@ -43,7 +43,7 @@
 fun is_eof (Token (_, (EOF, _))) = true
   | is_eof _ = false;
 
-val stopper = (eof, is_eof);
+val stopper = Scan.stopper (K eof) is_eof;
 
 
 fun is_regular (Token (_, (Error _, _))) = false
--- a/src/Pure/Syntax/simple_syntax.ML	Mon Aug 04 21:24:15 2008 +0200
+++ b/src/Pure/Syntax/simple_syntax.ML	Mon Aug 04 21:24:17 2008 +0200
@@ -22,7 +22,7 @@
 val eof = Lexicon.EndToken;
 fun is_eof tk = tk = Lexicon.EndToken;
 
-val stopper = (eof, is_eof);
+val stopper = Scan.stopper (K eof) is_eof;
 val not_eof = not o is_eof;
 
 val lexicon = Scan.make_lexicon
--- a/src/Pure/Thy/thy_output.ML	Mon Aug 04 21:24:15 2008 +0200
+++ b/src/Pure/Thy/thy_output.ML	Mon Aug 04 21:24:17 2008 +0200
@@ -363,12 +363,11 @@
 
     (* spans *)
 
-    val stopper =
-      ((NONE, (BasicToken (#1 T.stopper), ("", 0))),
-        fn (_, (BasicToken x, _)) => #2 T.stopper x | _ => false);
+    val is_eof = fn (_, (BasicToken x, _)) => T.is_eof x | _ => false;
+    val stopper = Scan.stopper (K (NONE, (BasicToken T.eof, ("", 0)))) is_eof;
 
     val cmd = Scan.one (is_some o fst);
-    val non_cmd = Scan.one (is_none o fst andf not o #2 stopper) >> #2;
+    val non_cmd = Scan.one (is_none o fst andf not o is_eof) >> #2;
 
     val comments = Scan.many (comment_token o fst o snd);
     val blank = Scan.one (blank_token o fst o snd);