docs: def add_symbol(self, symbol_name, namespace_stack, node, module):
          """Adds symbol_name defined in namespace_stack to the symbol table.
  
          Args:
            symbol_name: 'name of the symbol to lookup'
            namespace_stack: None or ['namespaces', 'symbol', 'defined', 'in']
            node: ast.Node that defines this symbol
            module: module (any object) this symbol is defined in
  
          Returns:
            bool(if symbol was *not* already present)
          """
          # TODO(nnorwitz): verify symbol_name doesn't contain :: ?
          if namespace_stack:
              # Handle non-global symbols (ie, in some namespace).
              last_namespace = self.namespaces
              for namespace in namespace_stack:
                  last_namespace = last_namespace.setdefault(namespace, {})
          else:
              last_namespace = self.namespaces[None]
          return self._add(symbol_name, last_namespace, node, module)