adhoc recovery from spurious NPEs, similar quantum-effect behind 7c8ce63a3c00;
authorwenzelm
Fri, 07 Dec 2012 20:39:09 +0100
changeset 514437a78a74139f5
parent 51442 2b6bd4771fd7
child 51444 f8cd5e53653b
adhoc recovery from spurious NPEs, similar quantum-effect behind 7c8ce63a3c00;
src/Pure/Isar/outer_syntax.scala
     1.1 --- a/src/Pure/Isar/outer_syntax.scala	Fri Dec 07 18:20:33 2012 +0100
     1.2 +++ b/src/Pure/Isar/outer_syntax.scala	Fri Dec 07 20:39:09 2012 +0100
     1.3 @@ -112,32 +112,34 @@
     1.4    /* tokenize */
     1.5  
     1.6    def scan(input: Reader[Char]): List[Token] =
     1.7 -  {
     1.8 -    import lexicon._
     1.9 +    Exn.recover  // FIXME !?
    1.10 +    {
    1.11 +      import lexicon._
    1.12  
    1.13 -    parseAll(rep(token(is_command)), input) match {
    1.14 -      case Success(tokens, _) => tokens
    1.15 -      case _ => error("Unexpected failure of tokenizing input:\n" + input.source.toString)
    1.16 +      parseAll(rep(token(is_command)), input) match {
    1.17 +        case Success(tokens, _) => tokens
    1.18 +        case _ => error("Unexpected failure of tokenizing input:\n" + input.source.toString)
    1.19 +      }
    1.20      }
    1.21 -  }
    1.22  
    1.23    def scan(input: CharSequence): List[Token] =
    1.24      scan(new CharSequenceReader(input))
    1.25  
    1.26    def scan_context(input: CharSequence, context: Scan.Context): (List[Token], Scan.Context) =
    1.27 -  {
    1.28 -    import lexicon._
    1.29 +    Exn.recover  // FIXME !?
    1.30 +    {
    1.31 +      import lexicon._
    1.32  
    1.33 -    var in: Reader[Char] = new CharSequenceReader(input)
    1.34 -    val toks = new mutable.ListBuffer[Token]
    1.35 -    var ctxt = context
    1.36 -    while (!in.atEnd) {
    1.37 -      parse(token_context(is_command, ctxt), in) match {
    1.38 -        case Success((x, c), rest) => { toks += x; ctxt = c; in = rest }
    1.39 -        case NoSuccess(_, rest) =>
    1.40 -          error("Unexpected failure of tokenizing input:\n" + rest.source.toString)
    1.41 +      var in: Reader[Char] = new CharSequenceReader(input)
    1.42 +      val toks = new mutable.ListBuffer[Token]
    1.43 +      var ctxt = context
    1.44 +      while (!in.atEnd) {
    1.45 +        parse(token_context(is_command, ctxt), in) match {
    1.46 +          case Success((x, c), rest) => { toks += x; ctxt = c; in = rest }
    1.47 +          case NoSuccess(_, rest) =>
    1.48 +            error("Unexpected failure of tokenizing input:\n" + rest.source.toString)
    1.49 +        }
    1.50        }
    1.51 +      (toks.toList, ctxt)
    1.52      }
    1.53 -    (toks.toList, ctxt)
    1.54 -  }
    1.55  }