equal
deleted
inserted
replaced
8 package isabelle |
8 package isabelle |
9 |
9 |
10 |
10 |
11 object Exn |
11 object Exn |
12 { |
12 { |
|
13 /* user errors */ |
|
14 |
|
15 class User_Error(message: String) extends RuntimeException(message) |
|
16 { |
|
17 override def equals(that: Any): Boolean = |
|
18 that match { |
|
19 case other: User_Error => message == other.getMessage |
|
20 case _ => false |
|
21 } |
|
22 override def hashCode: Int = message.hashCode |
|
23 |
|
24 override def toString: String = "ERROR(" + message + ")" |
|
25 } |
|
26 |
|
27 object ERROR |
|
28 { |
|
29 def apply(message: String): User_Error = new User_Error(message) |
|
30 def unapply(exn: Throwable): Option[String] = user_message(exn) |
|
31 } |
|
32 |
|
33 def error(message: String): Nothing = throw ERROR(message) |
|
34 |
|
35 def cat_message(msg1: String, msg2: String): String = |
|
36 if (msg1 == "") msg2 |
|
37 else if (msg2 == "") msg1 |
|
38 else msg1 + "\n" + msg2 |
|
39 |
|
40 def cat_error(msg1: String, msg2: String): Nothing = |
|
41 error(cat_message(msg1, msg2)) |
|
42 |
|
43 |
13 /* exceptions as values */ |
44 /* exceptions as values */ |
14 |
45 |
15 sealed abstract class Result[A] |
46 sealed abstract class Result[A] |
16 { |
47 { |
17 def user_error: Result[A] = |
48 def user_error: Result[A] = |
86 |
117 |
87 /* message */ |
118 /* message */ |
88 |
119 |
89 def user_message(exn: Throwable): Option[String] = |
120 def user_message(exn: Throwable): Option[String] = |
90 if (exn.getClass == classOf[RuntimeException] || |
121 if (exn.getClass == classOf[RuntimeException] || |
91 exn.getClass == classOf[Library.User_Error]) |
122 exn.getClass == classOf[User_Error]) |
92 { |
123 { |
93 val msg = exn.getMessage |
124 val msg = exn.getMessage |
94 Some(if (msg == null || msg == "") "Error" else msg) |
125 Some(if (msg == null || msg == "") "Error" else msg) |
95 } |
126 } |
96 else if (exn.isInstanceOf[java.io.IOException]) |
127 else if (exn.isInstanceOf[java.io.IOException]) |