Interface FlowScope

All Superinterfaces:
Annotation, LatticeElement, StaticScope, StaticTypedScope

public interface FlowScope extends StaticTypedScope, LatticeElement
A symbol table for inferring types during data flow analysis.

Each flow scope represents the types of all variables in the scope at a particular point in the flow analysis.

  • Method Details

    • withSyntacticScope

      FlowScope withSyntacticScope(StaticTypedScope scope)
      Returns a flow scope with the given syntactic scope, which may be required to be a specific subclass, such as TypedScope.
    • inferSlotType

      @CheckReturnValue FlowScope inferSlotType(String symbol, JSType type)
      Returns a flow scope with the type of the given symbol updated to type.
      Throws:
      IllegalArgumentException - If no slot for this symbol exists.
    • inferQualifiedSlot

      @CheckReturnValue FlowScope inferQualifiedSlot(Node node, String symbol, JSType bottomType, JSType inferredType, boolean declare)
      Returns a flow scope with the type of the given symbol updated to inferredType. Updates are not performed in-place.

      When traversing the control flow of a function, simple names are declared at the bottom of the flow lattice. But there are far too many qualified names to be able to do this and be performant. So the bottoms of qualified names are declared lazily.

      Therefore, when inferring a qualified slot, we need both the "bottom" type of the slot when we enter the scope, and the current type being inferred.

    • getDeclarationScope

      StaticTypedScope getDeclarationScope()
      Returns the underlying TypedScope.