improved code generation and fixed emitter symbol table problem
[charm.git] / src / langs / charj / src / charj / translator / Symbol.java
1
2 package charj.translator;
3
4 import charj.translator.CharjAST;
5 import org.antlr.runtime.TokenStream;
6
7 public class Symbol {
8     /** All symbols at least have a name */
9     public String name;
10
11     /** Classes, methods, variables, and closures have types */
12     public ClassSymbol type;
13
14     /** All symbols know what scope contains them. */
15     public Scope scope;
16
17     /** All symbols know which symbol table they are apart of */
18     public SymbolTable symtab;
19
20     /** Often we want to know where in tree this symbol was defined. */
21     public CharjAST definition;
22
23     /** To print definition, we need to know where tokens live */
24     public TokenStream definitionTokenStream;
25
26     public Symbol(SymbolTable _symtab) {
27         symtab = _symtab;
28     }
29
30     public Symbol(
31             SymbolTable _symtab, 
32             String _name, 
33             ClassSymbol _type) {
34         this(_symtab);
35         name = _name;
36         type = _type;
37     }
38
39     /** Just in case we need to do some name mangling */
40     public String getMangledName() {
41         return name;
42     }
43
44     public boolean debug() {
45         return symtab.translator.debug();
46     }
47
48     public String toString() {
49         String info = "";
50         if (name != null)
51             info += name + ", ";
52         if (type != null)
53             info += type + ", ";
54         if (scope != null)
55             info += scope;
56         return "Symbol(" + info + ")";
57     }
58 }