summaryrefslogtreecommitdiff
path: root/newsources/scala/MatchError.scala
blob: 4979df8717da7f6fc729292fe04a0d2108bb3c64 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
/*                     __                                               *\
**     ________ ___   / /  ___     Scala API                            **
**    / __/ __// _ | / /  / _ |    (c) 2002, LAMP/EPFL                  **
**  __\ \/ /__/ __ |/ /__/ __ |                                         **
** /____/\___/_/ |_/____/_/ | |                                         **
**                          |/                                          **
**                                                                      **
** $Id$
\*                                                                      */
package scala;


/** This class implements errors which are thrown whenever an
 *  object doesn't match any pattern of a pattern matching
 *  expression.
 *
 *  @author  Matthias Zenger
 *  @author  Martin Odersky
 *  @version 1.1, 05/03/2004
 */
object MatchError {

  // todo: change pattern matcher so that dummy type parameter T can be removed.
  def fail[T](source: String, line: Int): All = throw new MatchError(source, line);

  def report(source: String, line: Int, obj: Any) =
    try {
      throw new MatchError(source, line, obj.toString())
    } catch {
      case e: MatchError => throw e
      case e: Throwable => throw new MatchError(source, line)
    }
}

final class MatchError(msg: String) extends Error(msg) {
    def this(source: String, line: Int) =
      this(" in '" + source + "' at line " + line);
    def this(source: String, line: Int, obj: String) =
      this("for object " + obj + " in '" + source + "' at line " + line);
}