Interface FlowScope
-
- All Superinterfaces:
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 Summary
All Methods Instance Methods Abstract Methods Modifier and Type Method Description StaticTypedScope
getDeclarationScope()
Returns the underlying TypedScope.FlowScope
inferQualifiedSlot(Node node, java.lang.String symbol, JSType bottomType, JSType inferredType, boolean declare)
Returns a flow scope with the type of the givensymbol
updated toinferredType
.FlowScope
inferSlotType(java.lang.String symbol, JSType type)
Returns a flow scope with the type of the givensymbol
updated totype
.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.-
Methods inherited from interface com.google.javascript.rhino.StaticScope
getRootNode, getTopmostScopeOfEventualDeclaration
-
Methods inherited from interface com.google.javascript.rhino.jstype.StaticTypedScope
getOwnSlot, getParentScope, getSlot, getTypeOfThis, lookupQualifiedName
-
-
-
-
Method Detail
-
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(java.lang.String symbol, JSType type)
Returns a flow scope with the type of the givensymbol
updated totype
.- Throws:
java.lang.IllegalArgumentException
- If no slot for this symbol exists.
-
inferQualifiedSlot
@CheckReturnValue FlowScope inferQualifiedSlot(Node node, java.lang.String symbol, JSType bottomType, JSType inferredType, boolean declare)
Returns a flow scope with the type of the givensymbol
updated toinferredType
. 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.
-
-