Class ThreadSafeSymbolTable

    • Constructor Detail

      • ThreadSafeSymbolTable

        public ThreadSafeSymbolTable​(boolean bDefineCommonSymbols)
    • Method Detail

      • copy

        public ISymbolTable copy()
        Description copied from interface: ISymbolTable
        Perform a semi-deep copy of this symbol table. Symbols need not be cloned.
        Specified by:
        copy in interface ISymbolTable
        Returns:
        A semi-deep copy of this symbol table.
      • getSymbols

        public Map getSymbols()
        Specified by:
        getSymbols in interface ISymbolTable
        Returns:
        A list of currently mapped ISymbols e.g., the values in a hash table based implementation.
      • getSymbols

        public Map getSymbols​(int iScopeOffset,
                              int iPrivateGlobalIndex)
        Specified by:
        getSymbols in interface ISymbolTable
        Parameters:
        iScopeOffset - Scopes positioned on the stack at an index greater than this number are not included. Very useful for examining a specific scope e.g., for a debugger. Note an index < 0 indicates that all scopes are included.
        Returns:
        A list of currently mapped ISymbols e.g., the values in a hash table based implementation.
      • getTotalSymbolCount

        public int getTotalSymbolCount()
        Specified by:
        getTotalSymbolCount in interface ISymbolTable
        Returns:
        the number of symbols exist in this table.
      • getScopeCount

        public int getScopeCount()
        Specified by:
        getScopeCount in interface ISymbolTable
        Returns:
        The number of scopes on the stack. These include all scopes: global, isolated, and local. Useful for recording a specific offset in the symbol table e.g., a debugger needs this to jump to a position in a call stack.
        See Also:
        ISymbolTable.getSymbols(int,int)
      • getPrivateGlobalScopeCount

        public int getPrivateGlobalScopeCount()
        Specified by:
        getPrivateGlobalScopeCount in interface ISymbolTable
        Returns:
        The number of scopes on the private global stack. Useful for recording a specific offset in the symbol table e.g., a debugger needs this to jump to a position in a call stack.
        See Also:
        ISymbolTable.getSymbols(int,int)
      • pushScope

        public IScope pushScope()
        Description copied from interface: ISymbolTable
        Push a local scope context onto the symbol table.
        Specified by:
        pushScope in interface ISymbolTable
        Returns:
        The pushed scope.
      • pushScope

        public IScope pushScope​(IScope scope)
        Description copied from interface: ISymbolTable
        Push a local scope context onto the symbol table.
        Specified by:
        pushScope in interface ISymbolTable
        Parameters:
        scope - the scope to push
        Returns:
        The pushed scope.
      • popScope

        public IScope popScope()
        Description copied from interface: ISymbolTable
        Pop a local scope context from the symbol table.

        See pushScope() for implementation suggestions.

        Specified by:
        popScope in interface ISymbolTable
        Returns:
        The popped scope.
      • pushIsolatedScope

        public IScope pushIsolatedScope​(IActivationContext activationCtx)
        Description copied from interface: ISymbolTable
        Push a scope that demarcates an activation record. The behavior is nearly identical to pushScope(), the [big] difference is that activation record scopes cannot access symbols from other activation record scopes.

        Use popScope() to pop a scope pushed via this method.

        Specified by:
        pushIsolatedScope in interface ISymbolTable
        Parameters:
        activationCtx - The context for the activation record.
        Returns:
        The isolated scope (aka the activation record).
      • defineCommonSymbols

        public void defineCommonSymbols()
        Description copied from interface: ISymbolTable
        Define symbols that are considered ubiquitous. There may be none.
        Specified by:
        defineCommonSymbols in interface ISymbolTable
      • hasIsolatedScope

        public boolean hasIsolatedScope()
        Description copied from interface: IStackProvider
        For compile-time use. Returns true iff an isolated scope is visible.
        Specified by:
        hasIsolatedScope in interface IStackProvider
      • getTargetSymbolTable

        public ISymbolTable getTargetSymbolTable()
      • getDefaultSymbolTable

        protected ISymbolTable getDefaultSymbolTable()
      • clearDefaultSymbolTable

        public void clearDefaultSymbolTable()
      • getThreadLocalSymbolTable

        protected abstract ISymbolTable getThreadLocalSymbolTable()
        Get a thread-local symbol table. This is typically an instance of StandardSymbol table you maintain in a simple ThreadLocal.