src/Pure/Syntax/scan.ML
changeset 4968 c68a9c510c90
parent 4958 ad2acb8d2db4
child 5048 2af6b01e7ab6
equal deleted inserted replaced
4967:c9c481bc0216 4968:c68a9c510c90
   187       ([], _) => (finite' stopper scan (state, xs), src)
   187       ([], _) => (finite' stopper scan (state, xs), src)
   188     | (xs', src') => drain def_prmpt get stopper scan ((state, xs @ xs'), src'));
   188     | (xs', src') => drain def_prmpt get stopper scan ((state, xs @ xs'), src'));
   189 
   189 
   190 fun source' def_prmpt get unget stopper scanner opt_recover (state, src) =
   190 fun source' def_prmpt get unget stopper scanner opt_recover (state, src) =
   191   let
   191   let
   192     val drain_with = drain def_prmpt get stopper;
   192     fun drain_with scan = drain def_prmpt get stopper scan;
   193 
   193 
   194     fun drain_loop recover inp =
   194     fun drain_loop recover inp =
   195       drain_with (catch scanner) inp handle FAIL msg =>
   195       drain_with (catch scanner) inp handle FAIL msg =>
   196         (warning (if_none msg "Syntax error."); warning "Trying to recover ...";
   196         (warning (if_none msg "Syntax error."); warning "Trying to recover ...";
   197           drain_loop recover (apfst snd (drain_with recover inp)));
   197           drain_loop recover (apfst snd (drain_with recover inp)));