summaryrefslogtreecommitdiff
path: root/sources
diff options
context:
space:
mode:
authorpaltherr <paltherr@epfl.ch>2003-04-01 08:39:29 +0000
committerpaltherr <paltherr@epfl.ch>2003-04-01 08:39:29 +0000
commit5092735baa0e79a464a45b96c395a8908556ead2 (patch)
treea3866a05a9d321776bfa9e4ede491cfb8e1c2161 /sources
parent5c510296ee4722412840f1a6c5eafce9051f69ed (diff)
downloadscala-5092735baa0e79a464a45b96c395a8908556ead2.tar.gz
scala-5092735baa0e79a464a45b96c395a8908556ead2.tar.bz2
scala-5092735baa0e79a464a45b96c395a8908556ead2.zip
- Fixed interpreter to catch MatchError
Diffstat (limited to 'sources')
-rw-r--r--sources/scala/tools/scalai/Evaluator.java8
1 files changed, 8 insertions, 0 deletions
diff --git a/sources/scala/tools/scalai/Evaluator.java b/sources/scala/tools/scalai/Evaluator.java
index 3f46f343fe..cdf1288390 100644
--- a/sources/scala/tools/scalai/Evaluator.java
+++ b/sources/scala/tools/scalai/Evaluator.java
@@ -17,6 +17,7 @@ import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import scala.runtime.RunTime;
+import scala.MatchError;
import scalac.symtab.Symbol;
import scalac.util.Debug;
@@ -301,6 +302,8 @@ public class Evaluator {
// !!! System.out.println("!!! constr " + constructor);
// !!! System.out.println("!!! nbargs " + args.length);
return constructor.newInstance(args);
+ } catch (MatchError exception) {
+ return exception(exception);
} catch (ExceptionInInitializerError exception) {
return exception(exception.getException());
} catch (InvocationTargetException exception) {
@@ -326,6 +329,8 @@ public class Evaluator {
private Object invoke(Object object, Method method, Object[] args) {
try {
return method.invoke(object, args);
+ } catch (MatchError exception) {
+ return exception(exception);
} catch (NullPointerException exception) {
return exception(exception);
} catch (ExceptionInInitializerError exception) {
@@ -524,6 +529,9 @@ public class Evaluator {
if (exception instanceof EvaluatorException) {
throw (EvaluatorException)exception;
}
+ if (exception instanceof MatchError) {
+ throw new EvaluatorException(exception, new Error());
+ }
if (exception instanceof Error) {
throw (Error)exception;
}