# HG changeset patch # User wenzelm # Date 1217877857 -7200 # Node ID 8dbf5761a24acbedc3e01d4b5f31d1ef3018cb00 # Parent a7444ded92cf39246f55006e27f5b63b1e608499 abstract type Scan.stopper; diff -r a7444ded92cf -r 8dbf5761a24a src/Pure/General/source.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 = diff -r a7444ded92cf -r 8dbf5761a24a src/Pure/General/symbol.ML --- 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; diff -r a7444ded92cf -r 8dbf5761a24a src/Pure/Isar/args.ML --- 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; diff -r a7444ded92cf -r 8dbf5761a24a src/Pure/ML/ml_lex.ML --- 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 diff -r a7444ded92cf -r 8dbf5761a24a src/Pure/Syntax/simple_syntax.ML --- 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 diff -r a7444ded92cf -r 8dbf5761a24a src/Pure/Thy/thy_output.ML --- 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);