src/Pure/General/exn.scala
changeset 50423 027d405951c8
parent 48479 819f7a5f3e7f
child 51255 9db9e8c608ea
equal deleted inserted replaced
50422:ee729dbd1b7f 50423:027d405951c8
    43     else if (exn.isInstanceOf[RuntimeException]) Some(exn.toString)
    43     else if (exn.isInstanceOf[RuntimeException]) Some(exn.toString)
    44     else None
    44     else None
    45 
    45 
    46   def message(exn: Throwable): String =
    46   def message(exn: Throwable): String =
    47     user_message(exn) getOrElse exn.toString
    47     user_message(exn) getOrElse exn.toString
       
    48 
       
    49 
       
    50   /* recover from spurious crash */
       
    51 
       
    52   def recover[A](e: => A): A =
       
    53   {
       
    54     capture(e) match {
       
    55       case Res(x) => x
       
    56       case Exn(exn) =>
       
    57         capture(e) match {
       
    58           case Res(x) =>
       
    59             java.lang.System.err.println("Recovered from spurious crash after retry!")
       
    60             exn.printStackTrace()
       
    61             x
       
    62           case Exn(_) => throw exn
       
    63         }
       
    64     }
       
    65   }
    48 }
    66 }
    49 
    67