diff options
author | paltherr <paltherr@epfl.ch> | 2003-04-01 08:39:29 +0000 |
---|---|---|
committer | paltherr <paltherr@epfl.ch> | 2003-04-01 08:39:29 +0000 |
commit | 5092735baa0e79a464a45b96c395a8908556ead2 (patch) | |
tree | a3866a05a9d321776bfa9e4ede491cfb8e1c2161 /sources | |
parent | 5c510296ee4722412840f1a6c5eafce9051f69ed (diff) | |
download | scala-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.java | 8 |
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; } |