C# Class Pchp.CodeAnalysis.FlowAnalysis.AnalysisVisitor

Inheritance: Pchp.CodeAnalysis.Semantics.Graph.GraphVisitor
Afficher le fichier Open project: iolevel/peachpie

Private Properties

Свойство Type Description
AnalysisVisitor Pchp.CodeAnalysis.Semantics.Graph
AssertState void
TraverseToBlock void
VisitCondition void

Méthodes publiques

Méthode Description
VisitBinaryExpression ( BoundBinaryEx x ) : void
VisitCFG ( ControlFlowGraph x ) : void
VisitCFGBlock ( BoundBlock x ) : void
VisitCFGCaseBlock ( CaseBlock x ) : void
VisitCFGCatchBlock ( CatchBlock x ) : void
VisitCFGConditionalEdge ( ConditionalEdge x ) : void
VisitCFGExitBlock ( ExitBlock x ) : void
VisitCFGForeachEnumereeEdge ( ForeachEnumereeEdge x ) : void
VisitCFGForeachMoveNextEdge ( ForeachMoveNextEdge x ) : void
VisitCFGSimpleEdge ( SimpleEdge x ) : void
VisitCFGSwitchEdge ( SwitchEdge x ) : void
VisitCFGTryCatchEdge ( TryCatchEdge x ) : void
VisitInstanceOf ( BoundInstanceOfEx x ) : void
VisitUnaryExpression ( BoundUnaryEx x ) : void

Méthodes protégées

Méthode Description
HandleTraversableUse ( BoundExpression varuse ) : TypeRefMask

Handles use of variable as foreach iterator value.

SetVar ( string name, TypeRefMask typemask ) : TypeRefMask

Sets type of local variable in current state.

Visit ( BoundBinaryEx x, ConditionBranch branch ) : void
Visit ( BoundInstanceOfEx x, ConditionBranch branch ) : void
Visit ( BoundUnaryEx x, ConditionBranch branch ) : void
VisitCFGBlockInit ( BoundBlock x ) : void

Called to initialize VisitCFGBlock call. Sets _state to known initial block state.

Private Methods

Méthode Description
AnalysisVisitor ( Worklist worklist ) : Pchp.CodeAnalysis.Semantics.Graph

Creates an instance of AnalysisVisitor that can analyse a block.

AssertState ( ) : void

Debug assert the state is initialized therefore we are in the middle on a block analysis.

TraverseToBlock ( FlowState state, BoundBlock target ) : void

Helper method that merges state with the target block and determines whether to continue by visiting the target block.

Only for traversing into blocks within the same routine (same type context).

VisitCondition ( BoundExpression condition, ConditionBranch branch ) : void

Visits condition used to branch execution to true or false branch.

Because of minimal evaluation there is different FlowState for true and false branches, AND and OR operators have to take this into account. Also some other constructs may have side-effect for known branch, eg. ($x instanceof X) implies ($x is X) in True branch.

Method Details

HandleTraversableUse() protected méthode

Handles use of variable as foreach iterator value.
protected HandleTraversableUse ( BoundExpression varuse ) : TypeRefMask
varuse Pchp.CodeAnalysis.Semantics.BoundExpression
Résultat TypeRefMask

SetVar() protected méthode

Sets type of local variable in current state.
protected SetVar ( string name, TypeRefMask typemask ) : TypeRefMask
name string
typemask TypeRefMask
Résultat TypeRefMask

Visit() protected méthode

protected Visit ( BoundBinaryEx x, ConditionBranch branch ) : void
x Pchp.CodeAnalysis.Semantics.BoundBinaryEx
branch ConditionBranch
Résultat void

Visit() protected méthode

protected Visit ( BoundInstanceOfEx x, ConditionBranch branch ) : void
x Pchp.CodeAnalysis.Semantics.BoundInstanceOfEx
branch ConditionBranch
Résultat void

Visit() protected méthode

protected Visit ( BoundUnaryEx x, ConditionBranch branch ) : void
x Pchp.CodeAnalysis.Semantics.BoundUnaryEx
branch ConditionBranch
Résultat void

VisitBinaryExpression() public final méthode

public final VisitBinaryExpression ( BoundBinaryEx x ) : void
x Pchp.CodeAnalysis.Semantics.BoundBinaryEx
Résultat void

VisitCFG() public méthode

public VisitCFG ( ControlFlowGraph x ) : void
x Pchp.CodeAnalysis.Semantics.Graph.ControlFlowGraph
Résultat void

VisitCFGBlock() public méthode

public VisitCFGBlock ( BoundBlock x ) : void
x Pchp.CodeAnalysis.Semantics.Graph.BoundBlock
Résultat void

VisitCFGBlockInit() protected méthode

Called to initialize VisitCFGBlock call. Sets _state to known initial block state.
protected VisitCFGBlockInit ( BoundBlock x ) : void
x Pchp.CodeAnalysis.Semantics.Graph.BoundBlock
Résultat void

VisitCFGCaseBlock() public méthode

public VisitCFGCaseBlock ( CaseBlock x ) : void
x CaseBlock
Résultat void

VisitCFGCatchBlock() public méthode

public VisitCFGCatchBlock ( CatchBlock x ) : void
x CatchBlock
Résultat void

VisitCFGConditionalEdge() public méthode

public VisitCFGConditionalEdge ( ConditionalEdge x ) : void
x Pchp.CodeAnalysis.Semantics.Graph.ConditionalEdge
Résultat void

VisitCFGExitBlock() public méthode

public VisitCFGExitBlock ( ExitBlock x ) : void
x Pchp.CodeAnalysis.Semantics.Graph.ExitBlock
Résultat void

VisitCFGForeachEnumereeEdge() public méthode

public VisitCFGForeachEnumereeEdge ( ForeachEnumereeEdge x ) : void
x Pchp.CodeAnalysis.Semantics.Graph.ForeachEnumereeEdge
Résultat void

VisitCFGForeachMoveNextEdge() public méthode

public VisitCFGForeachMoveNextEdge ( ForeachMoveNextEdge x ) : void
x Pchp.CodeAnalysis.Semantics.Graph.ForeachMoveNextEdge
Résultat void

VisitCFGSimpleEdge() public méthode

public VisitCFGSimpleEdge ( SimpleEdge x ) : void
x Pchp.CodeAnalysis.Semantics.Graph.SimpleEdge
Résultat void

VisitCFGSwitchEdge() public méthode

public VisitCFGSwitchEdge ( SwitchEdge x ) : void
x Pchp.CodeAnalysis.Semantics.Graph.SwitchEdge
Résultat void

VisitCFGTryCatchEdge() public méthode

public VisitCFGTryCatchEdge ( TryCatchEdge x ) : void
x Pchp.CodeAnalysis.Semantics.Graph.TryCatchEdge
Résultat void

VisitInstanceOf() public final méthode

public final VisitInstanceOf ( BoundInstanceOfEx x ) : void
x Pchp.CodeAnalysis.Semantics.BoundInstanceOfEx
Résultat void

VisitUnaryExpression() public final méthode

public final VisitUnaryExpression ( BoundUnaryEx x ) : void
x Pchp.CodeAnalysis.Semantics.BoundUnaryEx
Résultat void