KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > gnu > commonlisp > lang > function


1 package gnu.commonlisp.lang;
2 import gnu.mapping.*;
3 import gnu.expr.*;
4 import gnu.lists.*;
5 import kawa.lang.*;
6
7 public class function extends Syntax
8 {
9   Syntax lambda;
10
11   public function(Syntax lambda)
12   {
13     this.lambda = lambda;
14   }
15
16   public Expression rewriteForm (Pair form, Translator tr)
17   {
18     Object JavaDoc obj = form.cdr;
19     if (obj instanceof Pair)
20       {
21     Pair pair = (Pair) obj;
22     if (pair.cdr != LList.Empty)
23       return tr.syntaxError("too many forms after 'function'");
24     Object JavaDoc name = pair.car;
25     if (name instanceof String JavaDoc || name instanceof Symbol)
26       {
27         ReferenceExp rexp = new ReferenceExp(name);
28         rexp.setProcedureName(true);
29         rexp.setFlag(ReferenceExp.PREFER_BINDING2);
30         return rexp;
31       }
32     if (name instanceof Pair)
33       {
34         pair = (Pair) name;
35         name = pair.car;
36         if (name instanceof String JavaDoc ? "lambda".equals(name)
37         : (name instanceof Symbol
38            && "lambda".equals(((Symbol) name).getName())))
39           return lambda.rewriteForm(pair, tr);
40       }
41       }
42     return tr.syntaxError("function must be followed by name or lambda expression");
43   }
44 }
45
Popular Tags