improved code generation and fixed emitter symbol table problem
[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         super(symtab, name);
18         this.enclosingScope = enclosingScope;
19     }
20
21     public Scope getEnclosingScope() 
22     {
23         return enclosingScope;
24     }
25
26     /** See if type is already defined in this package.  If not, look
27      *  for type on the disk in same package.  For example, first time
28      *  charj.lang.Chare fails to resolve.  Load from disk and put File
29      *  in package io which is in package charj.  Next time, File will
30      *  be found.
31      */
32     public ClassSymbol resolveType(String type) {
33         if (debug()) System.out.println(
34                 " PackageScope.resolveType(" + type + 
35                 "): examine " + toString());
36
37         // look for type in this package's members (other packages, classes)
38         if ( getMembers()!=null ) {
39             Symbol s = getMembers().get(type);
40             if ( s!=null && s instanceof ClassSymbol ) {
41                 if (debug()) System.out.println(
42                         " PackageScope.resolveType(" + type + "): found in " + 
43                         toString());
44                 return (ClassSymbol)s;
45             }
46         }
47         return null;
48     }
49
50     public Map<String, Symbol> getMembers() {
51         return members;
52     }
53
54     public String getFullyQualifiedName() {
55         if ( name.equals(SymbolTable.DEFAULT_PACKAGE_NAME) ) {
56             return null;
57         }
58         return super.getFullyQualifiedName();
59     }
60
61     public String toString() {
62         return "PackageScope[" + name + "]: " + members.keySet();
63     }
64 }