Initial implementation of symbols and scopes with symbol table.
[charm.git] / src / langs / charj / src / charj / translator / PackageScope.java
1
2 package charj.translator;
3
4 import java.util.HashMap;
5 import java.util.Map;
6
7 public class PackageScope extends SymbolWithScope {
8
9     /** List of packages and classes in this package */
10     Map<String, Symbol> members = new HashMap();
11     Scope enclosingScope;
12
13     public PackageScope(
14             SymbolTable symtab, 
15             String name, 
16             Scope enclosingScope) 
17     {
18         super(symtab, name);
19         this.enclosingScope = enclosingScope;
20     }
21
22     public Scope getEnclosingScope() 
23     {
24         return enclosingScope;
25     }
26
27     /** See if type is already defined in this package.  If not, look
28      *  for type on the disk in same package.  For example, first time
29      *  mantra::io::File fails to resolve.  Load from disk and put File
30      *  in package io which is in package mantra.  Next time, File will
31      *  be found.
32      */
33     public ClassSymbol resolveType(String type) 
34     {
35         if (debug()) System.out.println(
36                 "PackageScope.resolveType(" + type + 
37                 "): examine " + toString());
38
39         // look for type in this package's members (other packages, classes)
40         if ( getMembers()!=null ) {
41             Symbol s = getMembers().get(type);
42             if ( s!=null && s instanceof ClassSymbol ) {
43                 if (debug()) System.out.println(
44                         "PackageScope.resolveType(" + type + "): found in " + 
45                         toString());
46                 return (ClassSymbol)s;
47             }
48         }
49         return null;
50     }
51
52     public Map<String, Symbol> getMembers() 
53     {
54         return members;
55     }
56
57     public String getFullyQualifiedName() 
58     {
59         if ( name.equals(SymbolTable.DEFAULT_PACKAGE_NAME) ) {
60             return null;
61         }
62         return super.getFullyQualifiedName();
63     }
64
65     public String getFullyQualifiedJavaName() 
66     {
67         if ( name.equals(SymbolTable.DEFAULT_PACKAGE_NAME) ) {
68             return null;
69         }
70         return super.getFullyQualifiedJavaName();
71     }
72
73     public String toString() 
74     {
75         return "PackageScope[" + name + "]: " + members.keySet();
76     }
77 }