Initial implementation of symbols and scopes with symbol table.
[charm.git] / src / langs / charj / src / charj / translator / Scope.java
1
2 package charj.translator;
3
4 import java.util.Map;
5
6 public interface Scope {
7     
8     /** Does this scope have a name?  Call it getScopeName not getName so
9      *  things are not confusing in SymbolWithScope subclasses that have a
10      *  symbol name and a scope name.
11      */
12     public String getScopeName();
13
14     public Scope getEnclosingScope();
15
16     public String getFullyQualifiedName();
17
18     public String getFullyQualifiedJavaName();    
19
20     /** Return a Map of all contained members */
21     public Map<String, Symbol> getMembers();
22
23     /** Look up name in this scope or in enclosing scope if not here;
24      *  don't look on disk for classes.
25      */
26     public Symbol resolve(String name);
27
28     public VariableSymbol resolveVariable(String name);
29
30     /** Look up a typename in this scope or in enclosing scope if not here.
31      *  Load from disk if necessary.
32      */
33     public ClassSymbol resolveType(String name);
34
35     /** To look up a method, we need to know number of arguments for overloading
36      *  so we need separate method to distinguish from resolve().
37      *  Don't return variables or classes.
38      */
39     public MethodSymbol resolveMethod(
40             String name, 
41             int numargs);
42
43     /** Sometimes we need to test if a name is a method, but we don't know
44      *  the full signature (or can't compute easily).  This identifies the
45      *  kind of thing 'name' is.
46      */
47     public boolean isMethod(String name);
48
49     /** Remove a name from this scope */
50     public Symbol remove(String name);
51
52     /** Define a symbol in the current scope */
53     public Symbol define(
54             String name, 
55             Symbol sym);
56 }
57
58