KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > kawa > lang > NamedException


1 package kawa.lang;
2 import gnu.mapping.*;
3
4 /** Used to implement catch/throw named handlers as in Guile:
5   * (catch 'key (lambda () ... (throw 'key ARGS ...) ...)
6   * (lambda (KEY ARGS ...) HANDLER))
7   */

8
9 public class NamedException extends RuntimeException JavaDoc
10 {
11   String JavaDoc name;
12   // Arguments to throw (including, for efficiency, the name).
13
Object JavaDoc[] args;
14
15   public NamedException (String JavaDoc name, Object JavaDoc[] args)
16   {
17     this.name = name;
18     this.args = args;
19   }
20
21   public void checkMatch (Object JavaDoc key)
22   {
23     if (key != this.name && key != Boolean.TRUE)
24       throw this;
25   }
26
27   public Object JavaDoc applyHandler (Object JavaDoc key, Procedure handler) throws Throwable JavaDoc
28   {
29     checkMatch(key);
30     return handler.applyN(args);
31   }
32
33   public String JavaDoc toString()
34   {
35     StringBuffer JavaDoc buf = new StringBuffer JavaDoc();
36     buf.append("#<ERROR");
37     int i = 0;
38     int len = args.length;
39     // Skip initial 'misc-error as generated by the error procedure.
40
if (len > 1 && args[0] == "misc-error")
41       i++;
42     for ( ; i < len; i++)
43       {
44     buf.append(' ');
45     buf.append(args[i]);
46       }
47     buf.append(">");
48     return buf.toString();
49   }
50 }
51
Popular Tags