Class ThreadSafeSymbolTable

java.lang.Object
gw.lang.parser.ThreadSafeSymbolTable
All Implemented Interfaces:
IStackProvider, ISymbolTable
Direct Known Subclasses:
CompiledGosuClassSymbolTable

public abstract class ThreadSafeSymbolTable extends Object implements ISymbolTable
  • Field Details

  • Constructor Details

    • ThreadSafeSymbolTable

      public ThreadSafeSymbolTable(boolean bDefineCommonSymbols)
  • Method Details

    • 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.
    • getSymbol

      public ISymbol getSymbol(CharSequence name)
      Specified by:
      getSymbol in interface ISymbolTable
      Returns:
      The symbol mapped to the specified name.
    • putSymbol

      public void putSymbol(ISymbol symbol)
      Description copied from interface: ISymbolTable
      Maps a name to a symbol in the table.
      Specified by:
      putSymbol in interface ISymbolTable
    • removeSymbol

      public ISymbol removeSymbol(CharSequence name)
      Description copied from interface: ISymbolTable
      Removes a previously mapped symbol.
      Specified by:
      removeSymbol in interface ISymbolTable
      Parameters:
      name - The name mapped to the symbol to remove.
    • 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:
    • 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:
    • 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.
    • pushPrivateGlobalScope

      public void pushPrivateGlobalScope(IScope scope)
      Description copied from interface: ISymbolTable
      Push a global scope you specify onto the private global scope space. Useful for handling private global scopes for libraries, namespaces, etc. As this functionality is primarily for Gosu runtime, you'll likely never need to call this.

      If you need to push a scope with restricted visibility, consider calling pushIsolatedScope() instead.

      Specified by:
      pushPrivateGlobalScope in interface ISymbolTable
      See Also:
    • popGlobalScope

      public void popGlobalScope(IScope scope)
      Description copied from interface: ISymbolTable
      Pops a global scope previously pushed via pushGlobalScope( IScope ) or pushPrivateGlobalScope( IScope ).

      You probably shouldn't call this method.

      Specified by:
      popGlobalScope in interface ISymbolTable
      See Also:
    • 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.
    • peekScope

      public IScope peekScope()
      Specified by:
      peekScope in interface ISymbolTable
      Returns:
      the currently active scope
    • peekScope

      public IScope peekScope(int iPos)
      Specified by:
      peekScope in interface ISymbolTable
    • popScope

      public IScope popScope(IScope scope)
      Specified by:
      popScope in interface ISymbolTable
    • 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
    • getNextStackIndex

      public int getNextStackIndex()
      Description copied from interface: IStackProvider
      For compile-time assignment of stack indexes.
      Specified by:
      getNextStackIndex in interface IStackProvider
    • getNextStackIndexForScope

      public int getNextStackIndexForScope(IScope scope)
      Description copied from interface: IStackProvider
      For compile-time assignment of stack indexes at a particular scope.
      Specified by:
      getNextStackIndexForScope in interface IStackProvider
    • 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
    • getThisSymbolFromStackOrMap

      public ISymbol getThisSymbolFromStackOrMap()
      Description copied from interface: ISymbolTable
      Get the 'this' symbol from either the stack or the table.
      Specified by:
      getThisSymbolFromStackOrMap in interface ISymbolTable
    • getTargetSymbolTable

      public ISymbolTable getTargetSymbolTable()
    • isSymbolWithinScope

      public boolean isSymbolWithinScope(ISymbol sym, IScope scope)
      Specified by:
      isSymbolWithinScope in interface ISymbolTable
      Returns:
      true if the given symbol is within the given scope
    • peekIsolatedScope

      public IScope peekIsolatedScope()
      Specified by:
      peekIsolatedScope in interface ISymbolTable
      Returns:
      the top-most isolated scope
    • 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.