Class ChainableReverseAbstractInterpreter
- java.lang.Object
-
- com.google.javascript.jscomp.type.ChainableReverseAbstractInterpreter
-
- All Implemented Interfaces:
ReverseAbstractInterpreter
- Direct Known Subclasses:
ClosureReverseAbstractInterpreter
,SemanticReverseAbstractInterpreter
public abstract class ChainableReverseAbstractInterpreter extends java.lang.Object implements ReverseAbstractInterpreter
Chainable reverse abstract interpreter providing basic functionality.
-
-
Field Summary
Fields Modifier and Type Field Description protected CodingConvention
convention
-
Constructor Summary
Constructors Constructor Description ChainableReverseAbstractInterpreter(CodingConvention convention, JSTypeRegistry typeRegistry)
Constructs an interpreter, which is the only link in a chain.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description ChainableReverseAbstractInterpreter
append(ChainableReverseAbstractInterpreter lastLink)
Appends a link tothis
, returning the updated last link.protected void
declareNameInScope(FlowScope scope, Node node, JSType type)
Declares a refined type inscope
for the name represented bynode
.protected FlowScope
firstPreciserScopeKnowingConditionOutcome(Node condition, FlowScope blindScope, boolean outcome)
Calculates the preciser scope starting with the first link.ChainableReverseAbstractInterpreter
getFirst()
Gets the first link of this chain.protected JSType
getRestrictedWithoutNull(JSType type)
Returns a version of type where null is not present.protected JSType
getRestrictedWithoutUndefined(JSType type)
Returns a version of type where undefined is not present.protected JSType
getTypeIfRefinable(Node node, FlowScope scope)
Returns the type of a node in the given scope if the node corresponds to a name whose type is capable of being refined.protected FlowScope
nextPreciserScopeKnowingConditionOutcome(Node condition, FlowScope blindScope, boolean outcome)
Delegates the calculation of the preciser scope to the next link.-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface com.google.javascript.jscomp.type.ReverseAbstractInterpreter
getPreciserScopeKnowingConditionOutcome
-
-
-
-
Field Detail
-
convention
protected final CodingConvention convention
-
-
Constructor Detail
-
ChainableReverseAbstractInterpreter
public ChainableReverseAbstractInterpreter(CodingConvention convention, JSTypeRegistry typeRegistry)
Constructs an interpreter, which is the only link in a chain. Interpreters can be appended usingappend(com.google.javascript.jscomp.type.ChainableReverseAbstractInterpreter)
.
-
-
Method Detail
-
append
public ChainableReverseAbstractInterpreter append(ChainableReverseAbstractInterpreter lastLink)
Appends a link tothis
, returning the updated last link.The pattern
new X().append(new Y())...append(new Z())
forms a chain starting with X, then Y, then ... Z.- Parameters:
lastLink
- a chainable interpreter, with no next link- Returns:
- the updated last link
-
getFirst
public ChainableReverseAbstractInterpreter getFirst()
Gets the first link of this chain.
-
firstPreciserScopeKnowingConditionOutcome
protected FlowScope firstPreciserScopeKnowingConditionOutcome(Node condition, FlowScope blindScope, boolean outcome)
Calculates the preciser scope starting with the first link.
-
nextPreciserScopeKnowingConditionOutcome
protected FlowScope nextPreciserScopeKnowingConditionOutcome(Node condition, FlowScope blindScope, boolean outcome)
Delegates the calculation of the preciser scope to the next link. If there is no next link, returns the blind scope.
-
getTypeIfRefinable
protected JSType getTypeIfRefinable(Node node, FlowScope scope)
Returns the type of a node in the given scope if the node corresponds to a name whose type is capable of being refined.- Returns:
- The current type of the node if it can be refined, null otherwise.
-
declareNameInScope
protected void declareNameInScope(FlowScope scope, Node node, JSType type)
Declares a refined type inscope
for the name represented bynode
. It must be possible to refine the type of the given node in the given scope, as determined bygetTypeIfRefinable(com.google.javascript.rhino.Node, com.google.javascript.jscomp.type.FlowScope)
.
-
getRestrictedWithoutUndefined
protected final JSType getRestrictedWithoutUndefined(JSType type)
Returns a version of type where undefined is not present.
-
-