KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > kawa > standard > define_alias


1 package kawa.standard;
2 import kawa.lang.*;
3 import gnu.lists.*;
4 import gnu.mapping.*;
5 import gnu.expr.*;
6 import gnu.bytecode.*;
7
8 public class define_alias extends Syntax
9 {
10   public static final define_alias define_alias = new define_alias();
11   static { define_alias.setName("define-alias"); }
12
13   public boolean scanForDefinitions (Pair st, java.util.Vector JavaDoc forms,
14                                      ScopeExp defs, Translator tr)
15   {
16     Object JavaDoc formCdr = st.cdr;
17     SyntaxForm formSyntax = null;
18     while (formCdr instanceof SyntaxForm)
19       {
20     formSyntax = (SyntaxForm) formCdr;
21     formCdr = formSyntax.form;
22       }
23     if (formCdr instanceof Pair)
24       {
25         Pair p = (Pair) formCdr;
26         SyntaxForm nameSyntax = formSyntax;
27         Object JavaDoc name = p.car;
28         while (name instanceof SyntaxForm)
29           {
30             nameSyntax = (SyntaxForm) name;
31             name = nameSyntax.form;
32           }
33         formCdr = p.cdr;
34         while (formCdr instanceof SyntaxForm)
35           {
36             formSyntax = (SyntaxForm) formCdr;
37             formCdr = formSyntax.form;
38           }
39         if ((name instanceof String JavaDoc || name instanceof Symbol)
40             && formCdr instanceof Pair
41             && (p = (Pair) formCdr).cdr == LList.Empty)
42           {
43             Declaration decl = tr.define(name, nameSyntax, defs);
44             decl.setIndirectBinding(true);
45             decl.setAlias(true);
46             Expression arg = tr.rewrite_car(p, formSyntax);
47             if (arg instanceof ReferenceExp)
48               ((ReferenceExp) arg).setDontDereference(true);
49             else
50               arg = location.rewrite(arg, tr);
51             tr.mustCompileHere(); // For simplicity.
52
tr.push(decl);
53             SetExp sexp = new SetExp(decl, arg);
54             tr.setLineOf(sexp);
55             decl.noteValue(arg);
56             sexp.setDefining (true);
57             if (! (arg instanceof ReferenceExp))
58               decl.setType(ClassType.make("gnu.mapping.Location"));
59             forms.addElement(sexp);
60             return true;
61           }
62       }
63     tr.error('e', "invalid syntax for define-alias");
64     return false;
65   }
66
67   public Expression rewrite (Object JavaDoc obj, Translator tr)
68   {
69     return tr.syntaxError ("define-alias is only allowed in a <body>");
70   }
71 }
72
Popular Tags