| 58 | |
| 59 | |
| 60 | class SymbolTable: |
| 61 | |
| 62 | def __init__(self, raw_table, filename): |
| 63 | self._table = raw_table |
| 64 | self._filename = filename |
| 65 | self._symbols = {} |
| 66 | |
| 67 | def __repr__(self): |
| 68 | if self.__class__ == SymbolTable: |
| 69 | kind = "" |
| 70 | else: |
| 71 | kind = "%s " % self.__class__.__name__ |
| 72 | |
| 73 | if self._table.name == "top": |
| 74 | return "<{0}SymbolTable for module {1}>".format(kind, self._filename) |
| 75 | else: |
| 76 | return "<{0}SymbolTable for {1} in {2}>".format(kind, |
| 77 | self._table.name, |
| 78 | self._filename) |
| 79 | |
| 80 | def get_type(self): |
| 81 | """Return the type of the symbol table. |
| 82 | |
| 83 | The value returned is one of the values in |
| 84 | the ``SymbolTableType`` enumeration. |
| 85 | """ |
| 86 | if self._table.type == _symtable.TYPE_MODULE: |
| 87 | return SymbolTableType.MODULE |
| 88 | if self._table.type == _symtable.TYPE_FUNCTION: |
| 89 | return SymbolTableType.FUNCTION |
| 90 | if self._table.type == _symtable.TYPE_CLASS: |
| 91 | return SymbolTableType.CLASS |
| 92 | if self._table.type == _symtable.TYPE_ANNOTATION: |
| 93 | return SymbolTableType.ANNOTATION |
| 94 | if self._table.type == _symtable.TYPE_TYPE_ALIAS: |
| 95 | return SymbolTableType.TYPE_ALIAS |
| 96 | if self._table.type == _symtable.TYPE_TYPE_PARAMETERS: |
| 97 | return SymbolTableType.TYPE_PARAMETERS |
| 98 | if self._table.type == _symtable.TYPE_TYPE_VARIABLE: |
| 99 | return SymbolTableType.TYPE_VARIABLE |
| 100 | assert False, f"unexpected type: {self._table.type}" |
| 101 | |
| 102 | def get_id(self): |
| 103 | """Return an identifier for the table. |
| 104 | """ |
| 105 | return self._table.id |
| 106 | |
| 107 | def get_name(self): |
| 108 | """Return the table's name. |
| 109 | |
| 110 | This corresponds to the name of the class, function |
| 111 | or 'top' if the table is for a class, function or |
| 112 | global respectively. |
| 113 | """ |
| 114 | return self._table.name |
| 115 | |
| 116 | def get_lineno(self): |
| 117 | """Return the number of the first line in the |