KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > kawa > standard > module_name


1 package kawa.standard;
2 import kawa.lang.*;
3 import gnu.expr.*;
4 import gnu.lists.*;
5 import gnu.mapping.Symbol;
6
7 public class module_name extends Syntax
8 {
9   public static final module_name module_name = new module_name();
10   static { module_name.setName("module-name"); }
11
12   public void scanForm (Pair form, ScopeExp defs, Translator tr)
13   {
14     Object JavaDoc form_cdr = form.cdr;
15     SyntaxForm nameSyntax = null;
16     while (form_cdr instanceof SyntaxForm)
17       {
18     nameSyntax = (SyntaxForm) form_cdr;
19     form_cdr = nameSyntax.form;
20       }
21     Object JavaDoc arg = form_cdr instanceof Pair ? ((Pair) form_cdr).car : null;
22     while (arg instanceof SyntaxForm)
23       {
24     nameSyntax = (SyntaxForm) arg;
25     arg = nameSyntax.form;
26       }
27     String JavaDoc name = null;
28     Pair p;
29     String JavaDoc err = null;
30     Declaration decl = null;
31     if (arg instanceof Pair && (p = (Pair) arg).car == "quote")
32       {
33     arg = p.cdr;
34     if (! (arg instanceof Pair)
35         || (p = (Pair) arg).cdr != LList.Empty
36         || ! (p.car instanceof String JavaDoc))
37       err = "invalid quoted symbol for 'module-name'";
38         else
39           name = (String JavaDoc) p.car;
40       }
41     else if (arg instanceof FString)
42       name = arg.toString();
43     else if (arg instanceof String JavaDoc || arg instanceof Symbol)
44       {
45     name = arg.toString();
46     int len = name.length();
47     if (len > 2
48         && name.charAt(0) == '<'
49         && name.charAt(len-1) == '>')
50       {
51         name = name.substring(1, len-1);
52             decl = tr.define(arg, nameSyntax, defs);
53       }
54     else
55       err = "not implemented: plain name in module-name";
56       }
57     else
58       err = "un-implemented expression in module-name";
59     if (err != null)
60       tr.formStack.add(tr.syntaxError(err));
61     else
62       {
63         int index = name.lastIndexOf('.');
64         String JavaDoc className = name;
65         if (index >= 0)
66           tr.classPrefix = name.substring(0, index+1);
67         else
68           {
69             name = tr.classPrefix + name;
70             className = tr.classPrefix + Compilation.mangleName(name);
71           }
72         ModuleExp module = tr.getModule();
73         if (tr.mainClass == null)
74           tr.mainClass = new gnu.bytecode.ClassType(className);
75         else
76           {
77             String JavaDoc oldName = tr.mainClass.getName();
78             if (oldName == null)
79               tr.mainClass.setName(className);
80             else if (! oldName.equals(className))
81               tr.syntaxError("duplicate module-name: old name: "+oldName);
82           }
83         module.setType(tr.mainClass);
84         module.setName(name);
85
86         if (decl != null)
87           {
88             decl.noteValue(module);
89             decl.setFlag(Declaration.IS_CONSTANT|Declaration.PRIVATE_SPECIFIED);
90             decl.setPrivate(true);
91             decl.setType(Compilation.typeClassType);
92           }
93         tr.mustCompileHere();
94       }
95   }
96 }
97
Popular Tags