/********************************************************************++
Copyright (c) Microsoft Corporation. All rights reserved.
--********************************************************************/
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Reflection;
using System.Reflection.Emit;
namespace System.Management.Automation.Language
{
///
///
///
public interface ICustomAstVisitor
{
///
object VisitErrorStatement(ErrorStatementAst errorStatementAst);
///
object VisitErrorExpression(ErrorExpressionAst errorExpressionAst);
#region Script Blocks
///
object VisitScriptBlock(ScriptBlockAst scriptBlockAst);
///
[SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Param")]
[SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "param")]
object VisitParamBlock(ParamBlockAst paramBlockAst);
///
object VisitNamedBlock(NamedBlockAst namedBlockAst);
///
object VisitTypeConstraint(TypeConstraintAst typeConstraintAst);
///
object VisitAttribute(AttributeAst attributeAst);
///
object VisitNamedAttributeArgument(NamedAttributeArgumentAst namedAttributeArgumentAst);
///
object VisitParameter(ParameterAst parameterAst);
#endregion Script Blocks
#region Statements
///
object VisitFunctionDefinition(FunctionDefinitionAst functionDefinitionAst);
///
object VisitStatementBlock(StatementBlockAst statementBlockAst);
///
object VisitIfStatement(IfStatementAst ifStmtAst);
///
object VisitTrap(TrapStatementAst trapStatementAst);
///
object VisitSwitchStatement(SwitchStatementAst switchStatementAst);
///
object VisitDataStatement(DataStatementAst dataStatementAst);
///
object VisitForEachStatement(ForEachStatementAst forEachStatementAst);
///
object VisitDoWhileStatement(DoWhileStatementAst doWhileStatementAst);
///
object VisitForStatement(ForStatementAst forStatementAst);
///
object VisitWhileStatement(WhileStatementAst whileStatementAst);
///
object VisitCatchClause(CatchClauseAst catchClauseAst);
///
object VisitTryStatement(TryStatementAst tryStatementAst);
///
object VisitBreakStatement(BreakStatementAst breakStatementAst);
///
object VisitContinueStatement(ContinueStatementAst continueStatementAst);
///
object VisitReturnStatement(ReturnStatementAst returnStatementAst);
///
object VisitExitStatement(ExitStatementAst exitStatementAst);
///
object VisitThrowStatement(ThrowStatementAst throwStatementAst);
///
object VisitDoUntilStatement(DoUntilStatementAst doUntilStatementAst);
///
object VisitAssignmentStatement(AssignmentStatementAst assignmentStatementAst);
#endregion Statements
#region Pipelines
///
object VisitPipeline(PipelineAst pipelineAst);
///
object VisitCommand(CommandAst commandAst);
///
object VisitCommandExpression(CommandExpressionAst commandExpressionAst);
///
object VisitCommandParameter(CommandParameterAst commandParameterAst);
///
object VisitFileRedirection(FileRedirectionAst fileRedirectionAst);
///
object VisitMergingRedirection(MergingRedirectionAst mergingRedirectionAst);
#endregion Pipelines
#region Expressions
///
object VisitBinaryExpression(BinaryExpressionAst binaryExpressionAst);
///
object VisitUnaryExpression(UnaryExpressionAst unaryExpressionAst);
///
object VisitConvertExpression(ConvertExpressionAst convertExpressionAst);
///
object VisitConstantExpression(ConstantExpressionAst constantExpressionAst);
///
object VisitStringConstantExpression(StringConstantExpressionAst stringConstantExpressionAst);
///
[SuppressMessage("Microsoft.Naming", "CA1702:CompoundWordsShouldBeCasedCorrectly", MessageId = "SubExpression")]
[SuppressMessage("Microsoft.Naming", "CA1702:CompoundWordsShouldBeCasedCorrectly", MessageId = "subExpression")]
object VisitSubExpression(SubExpressionAst subExpressionAst);
///
object VisitUsingExpression(UsingExpressionAst usingExpressionAst);
///
object VisitVariableExpression(VariableExpressionAst variableExpressionAst);
///
object VisitTypeExpression(TypeExpressionAst typeExpressionAst);
///
object VisitMemberExpression(MemberExpressionAst memberExpressionAst);
///
object VisitInvokeMemberExpression(InvokeMemberExpressionAst invokeMemberExpressionAst);
///
object VisitArrayExpression(ArrayExpressionAst arrayExpressionAst);
///
object VisitArrayLiteral(ArrayLiteralAst arrayLiteralAst);
///
object VisitHashtable(HashtableAst hashtableAst);
///
object VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst);
///
[SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Paren")]
[SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "paren")]
object VisitParenExpression(ParenExpressionAst parenExpressionAst);
///
object VisitExpandableStringExpression(ExpandableStringExpressionAst expandableStringExpressionAst);
///
object VisitIndexExpression(IndexExpressionAst indexExpressionAst);
///
object VisitAttributedExpression(AttributedExpressionAst attributedExpressionAst);
///
object VisitBlockStatement(BlockStatementAst blockStatementAst);
#endregion Expressions
}
///
public interface ICustomAstVisitor2 : ICustomAstVisitor
{
///
object VisitTypeDefinition(TypeDefinitionAst typeDefinitionAst);
///
object VisitPropertyMember(PropertyMemberAst propertyMemberAst);
///
object VisitFunctionMember(FunctionMemberAst functionMemberAst);
///
object VisitBaseCtorInvokeMemberExpression(BaseCtorInvokeMemberExpressionAst baseCtorInvokeMemberExpressionAst);
///
object VisitUsingStatement(UsingStatementAst usingStatement);
///
object VisitConfigurationDefinition(ConfigurationDefinitionAst configurationDefinitionAst);
///
object VisitDynamicKeywordStatement(DynamicKeywordStatementAst dynamicKeywordAst);
}
#if DEBUG
class CheckAllParentsSet : AstVisitor2
{
internal CheckAllParentsSet(Ast root)
{
this.Root = root;
}
private Ast Root { get; set; }
internal AstVisitAction CheckParent(Ast ast)
{
if (ast != Root)
{
Diagnostics.Assert(ast.Parent != null, "Parent not set");
}
return AstVisitAction.Continue;
}
public override AstVisitAction VisitErrorStatement(ErrorStatementAst ast) { return CheckParent(ast); }
public override AstVisitAction VisitErrorExpression(ErrorExpressionAst ast) { return CheckParent(ast); }
public override AstVisitAction VisitScriptBlock(ScriptBlockAst ast) { return CheckParent(ast); }
public override AstVisitAction VisitParamBlock(ParamBlockAst ast) { return CheckParent(ast); }
public override AstVisitAction VisitNamedBlock(NamedBlockAst ast) { return CheckParent(ast); }
public override AstVisitAction VisitTypeConstraint(TypeConstraintAst ast) { return CheckParent(ast); }
public override AstVisitAction VisitAttribute(AttributeAst ast) { return CheckParent(ast); }
public override AstVisitAction VisitParameter(ParameterAst ast) { return CheckParent(ast); }
public override AstVisitAction VisitTypeExpression(TypeExpressionAst ast) { return CheckParent(ast); }
public override AstVisitAction VisitFunctionDefinition(FunctionDefinitionAst ast) { return CheckParent(ast); }
public override AstVisitAction VisitStatementBlock(StatementBlockAst ast) { return CheckParent(ast); }
public override AstVisitAction VisitIfStatement(IfStatementAst ast) { return CheckParent(ast); }
public override AstVisitAction VisitTrap(TrapStatementAst ast) { return CheckParent(ast); }
public override AstVisitAction VisitSwitchStatement(SwitchStatementAst ast) { return CheckParent(ast); }
public override AstVisitAction VisitDataStatement(DataStatementAst ast) { return CheckParent(ast); }
public override AstVisitAction VisitForEachStatement(ForEachStatementAst ast) { return CheckParent(ast); }
public override AstVisitAction VisitDoWhileStatement(DoWhileStatementAst ast) { return CheckParent(ast); }
public override AstVisitAction VisitForStatement(ForStatementAst ast) { return CheckParent(ast); }
public override AstVisitAction VisitWhileStatement(WhileStatementAst ast) { return CheckParent(ast); }
public override AstVisitAction VisitCatchClause(CatchClauseAst ast) { return CheckParent(ast); }
public override AstVisitAction VisitTryStatement(TryStatementAst ast) { return CheckParent(ast); }
public override AstVisitAction VisitBreakStatement(BreakStatementAst ast) { return CheckParent(ast); }
public override AstVisitAction VisitContinueStatement(ContinueStatementAst ast) { return CheckParent(ast); }
public override AstVisitAction VisitReturnStatement(ReturnStatementAst ast) { return CheckParent(ast); }
public override AstVisitAction VisitExitStatement(ExitStatementAst ast) { return CheckParent(ast); }
public override AstVisitAction VisitThrowStatement(ThrowStatementAst ast) { return CheckParent(ast); }
public override AstVisitAction VisitDoUntilStatement(DoUntilStatementAst ast) { return CheckParent(ast); }
public override AstVisitAction VisitAssignmentStatement(AssignmentStatementAst ast) { return CheckParent(ast); }
public override AstVisitAction VisitPipeline(PipelineAst ast) { return CheckParent(ast); }
public override AstVisitAction VisitCommand(CommandAst ast) { return CheckParent(ast); }
public override AstVisitAction VisitCommandExpression(CommandExpressionAst ast) { return CheckParent(ast); }
public override AstVisitAction VisitCommandParameter(CommandParameterAst ast) { return CheckParent(ast); }
public override AstVisitAction VisitMergingRedirection(MergingRedirectionAst ast) { return CheckParent(ast); }
public override AstVisitAction VisitFileRedirection(FileRedirectionAst ast) { return CheckParent(ast); }
public override AstVisitAction VisitBinaryExpression(BinaryExpressionAst ast) { return CheckParent(ast); }
public override AstVisitAction VisitUnaryExpression(UnaryExpressionAst ast) { return CheckParent(ast); }
public override AstVisitAction VisitConvertExpression(ConvertExpressionAst ast) { return CheckParent(ast); }
public override AstVisitAction VisitConstantExpression(ConstantExpressionAst ast) { return CheckParent(ast); }
public override AstVisitAction VisitStringConstantExpression(StringConstantExpressionAst ast) { return CheckParent(ast); }
public override AstVisitAction VisitSubExpression(SubExpressionAst ast) { return CheckParent(ast); }
public override AstVisitAction VisitUsingExpression(UsingExpressionAst ast) { return CheckParent(ast); }
public override AstVisitAction VisitVariableExpression(VariableExpressionAst ast) { return CheckParent(ast); }
public override AstVisitAction VisitMemberExpression(MemberExpressionAst ast) { return CheckParent(ast); }
public override AstVisitAction VisitInvokeMemberExpression(InvokeMemberExpressionAst ast) { return CheckParent(ast); }
public override AstVisitAction VisitArrayExpression(ArrayExpressionAst ast) { return CheckParent(ast); }
public override AstVisitAction VisitArrayLiteral(ArrayLiteralAst ast) { return CheckParent(ast); }
public override AstVisitAction VisitHashtable(HashtableAst ast) { return CheckParent(ast); }
public override AstVisitAction VisitScriptBlockExpression(ScriptBlockExpressionAst ast) { return CheckParent(ast); }
public override AstVisitAction VisitParenExpression(ParenExpressionAst ast) { return CheckParent(ast); }
public override AstVisitAction VisitExpandableStringExpression(ExpandableStringExpressionAst ast) { return CheckParent(ast); }
public override AstVisitAction VisitIndexExpression(IndexExpressionAst ast) { return CheckParent(ast); }
public override AstVisitAction VisitAttributedExpression(AttributedExpressionAst ast) { return CheckParent(ast); }
public override AstVisitAction VisitBlockStatement(BlockStatementAst ast) { return CheckParent(ast); }
public override AstVisitAction VisitNamedAttributeArgument(NamedAttributeArgumentAst ast) { return CheckParent(ast); }
public override AstVisitAction VisitTypeDefinition(TypeDefinitionAst ast) { return CheckParent(ast); }
public override AstVisitAction VisitFunctionMember(FunctionMemberAst ast) { return CheckParent(ast); }
public override AstVisitAction VisitPropertyMember(PropertyMemberAst ast) { return CheckParent(ast); }
public override AstVisitAction VisitUsingStatement(UsingStatementAst ast) { return CheckParent(ast); }
public override AstVisitAction VisitConfigurationDefinition(ConfigurationDefinitionAst ast) { return CheckParent(ast); }
public override AstVisitAction VisitDynamicKeywordStatement(DynamicKeywordStatementAst ast) { return CheckParent(ast); }
}
///
/// Check if contains type
///
class CheckTypeBuilder : AstVisitor2
{
public override AstVisitAction VisitTypeConstraint(TypeConstraintAst ast)
{
Type type = ast.TypeName.GetReflectionType();
if (type != null)
{
Diagnostics.Assert(!(type.GetTypeInfo() is TypeBuilder), "ReflectionType can never be TypeBuilder");
}
return AstVisitAction.Continue;
}
}
#endif
///
/// Searches an AST, using the evaluation function provided by either of the constructors
///
internal class AstSearcher : AstVisitor2
{
#region External interface
internal static IEnumerable FindAll(Ast ast, Func predicate, bool searchNestedScriptBlocks)
{
Diagnostics.Assert(ast != null && predicate != null, "caller to verify arguments");
var searcher = new AstSearcher(predicate, stopOnFirst: false, searchNestedScriptBlocks: searchNestedScriptBlocks);
ast.InternalVisit(searcher);
return searcher.Results;
}
internal static Ast FindFirst(Ast ast, Func predicate, bool searchNestedScriptBlocks)
{
Diagnostics.Assert(ast != null && predicate != null, "caller to verify arguments");
var searcher = new AstSearcher(predicate, stopOnFirst: true, searchNestedScriptBlocks: searchNestedScriptBlocks);
ast.InternalVisit(searcher);
return searcher.Results.FirstOrDefault();
}
internal static bool Contains(Ast ast, Func predicate, bool searchNestedScriptBlocks)
{
Diagnostics.Assert(ast != null && predicate != null, "caller to verify arguments");
var searcher = new AstSearcher(predicate, stopOnFirst: true, searchNestedScriptBlocks: searchNestedScriptBlocks);
ast.InternalVisit(searcher);
return searcher.Results.FirstOrDefault() != null;
}
internal static bool IsUsingDollarInput(Ast ast)
{
return (AstSearcher.Contains(
ast,
ast_ =>
{
var varAst = ast_ as VariableExpressionAst;
if (varAst != null)
{
return varAst.VariablePath.IsVariable &&
varAst.VariablePath.UnqualifiedPath.Equals(SpecialVariables.Input,
StringComparison.OrdinalIgnoreCase);
}
return false;
},
searchNestedScriptBlocks: false));
}
#endregion External interface
protected AstSearcher(Func callback, bool stopOnFirst, bool searchNestedScriptBlocks)
{
_callback = callback;
_stopOnFirst = stopOnFirst;
_searchNestedScriptBlocks = searchNestedScriptBlocks;
this.Results = new List();
}
private readonly Func _callback;
private readonly bool _stopOnFirst;
private readonly bool _searchNestedScriptBlocks;
protected readonly List Results;
protected AstVisitAction Check(Ast ast)
{
if (_callback(ast))
{
Results.Add(ast);
if (_stopOnFirst)
{
return AstVisitAction.StopVisit;
}
}
return AstVisitAction.Continue;
}
protected AstVisitAction CheckScriptBlock(Ast ast)
{
var action = Check(ast);
if (action == AstVisitAction.Continue && !_searchNestedScriptBlocks)
{
action = AstVisitAction.SkipChildren;
}
return action;
}
public override AstVisitAction VisitErrorStatement(ErrorStatementAst ast) { return Check(ast); }
public override AstVisitAction VisitErrorExpression(ErrorExpressionAst ast) { return Check(ast); }
public override AstVisitAction VisitScriptBlock(ScriptBlockAst ast) { return Check(ast); }
public override AstVisitAction VisitParamBlock(ParamBlockAst ast) { return Check(ast); }
public override AstVisitAction VisitNamedBlock(NamedBlockAst ast) { return Check(ast); }
public override AstVisitAction VisitTypeConstraint(TypeConstraintAst ast) { return Check(ast); }
public override AstVisitAction VisitAttribute(AttributeAst ast) { return Check(ast); }
public override AstVisitAction VisitParameter(ParameterAst ast) { return Check(ast); }
public override AstVisitAction VisitTypeExpression(TypeExpressionAst ast) { return Check(ast); }
public override AstVisitAction VisitFunctionDefinition(FunctionDefinitionAst ast) { return CheckScriptBlock(ast); }
public override AstVisitAction VisitStatementBlock(StatementBlockAst ast) { return Check(ast); }
public override AstVisitAction VisitIfStatement(IfStatementAst ast) { return Check(ast); }
public override AstVisitAction VisitTrap(TrapStatementAst ast) { return CheckScriptBlock(ast); }
public override AstVisitAction VisitSwitchStatement(SwitchStatementAst ast) { return Check(ast); }
public override AstVisitAction VisitDataStatement(DataStatementAst ast) { return Check(ast); }
public override AstVisitAction VisitForEachStatement(ForEachStatementAst ast) { return Check(ast); }
public override AstVisitAction VisitDoWhileStatement(DoWhileStatementAst ast) { return Check(ast); }
public override AstVisitAction VisitForStatement(ForStatementAst ast) { return Check(ast); }
public override AstVisitAction VisitWhileStatement(WhileStatementAst ast) { return Check(ast); }
public override AstVisitAction VisitCatchClause(CatchClauseAst ast) { return Check(ast); }
public override AstVisitAction VisitTryStatement(TryStatementAst ast) { return Check(ast); }
public override AstVisitAction VisitBreakStatement(BreakStatementAst ast) { return Check(ast); }
public override AstVisitAction VisitContinueStatement(ContinueStatementAst ast) { return Check(ast); }
public override AstVisitAction VisitReturnStatement(ReturnStatementAst ast) { return Check(ast); }
public override AstVisitAction VisitExitStatement(ExitStatementAst ast) { return Check(ast); }
public override AstVisitAction VisitThrowStatement(ThrowStatementAst ast) { return Check(ast); }
public override AstVisitAction VisitDoUntilStatement(DoUntilStatementAst ast) { return Check(ast); }
public override AstVisitAction VisitAssignmentStatement(AssignmentStatementAst ast) { return Check(ast); }
public override AstVisitAction VisitPipeline(PipelineAst ast) { return Check(ast); }
public override AstVisitAction VisitCommand(CommandAst ast) { return Check(ast); }
public override AstVisitAction VisitCommandExpression(CommandExpressionAst ast) { return Check(ast); }
public override AstVisitAction VisitCommandParameter(CommandParameterAst ast) { return Check(ast); }
public override AstVisitAction VisitMergingRedirection(MergingRedirectionAst ast) { return Check(ast); }
public override AstVisitAction VisitFileRedirection(FileRedirectionAst ast) { return Check(ast); }
public override AstVisitAction VisitBinaryExpression(BinaryExpressionAst ast) { return Check(ast); }
public override AstVisitAction VisitUnaryExpression(UnaryExpressionAst ast) { return Check(ast); }
public override AstVisitAction VisitConvertExpression(ConvertExpressionAst ast) { return Check(ast); }
public override AstVisitAction VisitConstantExpression(ConstantExpressionAst ast) { return Check(ast); }
public override AstVisitAction VisitStringConstantExpression(StringConstantExpressionAst ast) { return Check(ast); }
public override AstVisitAction VisitSubExpression(SubExpressionAst ast) { return Check(ast); }
public override AstVisitAction VisitUsingExpression(UsingExpressionAst ast) { return Check(ast); }
public override AstVisitAction VisitVariableExpression(VariableExpressionAst ast) { return Check(ast); }
public override AstVisitAction VisitMemberExpression(MemberExpressionAst ast) { return Check(ast); }
public override AstVisitAction VisitInvokeMemberExpression(InvokeMemberExpressionAst ast) { return Check(ast); }
public override AstVisitAction VisitArrayExpression(ArrayExpressionAst ast) { return Check(ast); }
public override AstVisitAction VisitArrayLiteral(ArrayLiteralAst ast) { return Check(ast); }
public override AstVisitAction VisitHashtable(HashtableAst ast) { return Check(ast); }
public override AstVisitAction VisitScriptBlockExpression(ScriptBlockExpressionAst ast) { return CheckScriptBlock(ast); }
public override AstVisitAction VisitParenExpression(ParenExpressionAst ast) { return Check(ast); }
public override AstVisitAction VisitExpandableStringExpression(ExpandableStringExpressionAst ast) { return Check(ast); }
public override AstVisitAction VisitIndexExpression(IndexExpressionAst ast) { return Check(ast); }
public override AstVisitAction VisitAttributedExpression(AttributedExpressionAst ast) { return Check(ast); }
public override AstVisitAction VisitNamedAttributeArgument(NamedAttributeArgumentAst ast) { return Check(ast); }
public override AstVisitAction VisitTypeDefinition(TypeDefinitionAst ast) { return Check(ast); }
public override AstVisitAction VisitPropertyMember(PropertyMemberAst ast) { return Check(ast); }
public override AstVisitAction VisitFunctionMember(FunctionMemberAst ast) { return Check(ast); }
public override AstVisitAction VisitUsingStatement(UsingStatementAst ast) { return Check(ast); }
public override AstVisitAction VisitBlockStatement(BlockStatementAst ast) { return Check(ast); }
public override AstVisitAction VisitConfigurationDefinition(ConfigurationDefinitionAst ast) { return Check(ast); }
public override AstVisitAction VisitDynamicKeywordStatement(DynamicKeywordStatementAst ast) { return Check(ast); }
}
///
/// Default implementation of interface
///
public abstract class DefaultCustomAstVisitor : ICustomAstVisitor
{
///
public virtual object VisitErrorStatement(ErrorStatementAst errorStatementAst) { return null; }
///
public virtual object VisitErrorExpression(ErrorExpressionAst errorExpressionAst) { return null; }
///
public virtual object VisitScriptBlock(ScriptBlockAst scriptBlockAst) { return null; }
///
public virtual object VisitParamBlock(ParamBlockAst paramBlockAst) { return null; }
///
public virtual object VisitNamedBlock(NamedBlockAst namedBlockAst) { return null; }
///
public virtual object VisitTypeConstraint(TypeConstraintAst typeConstraintAst) { return null; }
///
public virtual object VisitAttribute(AttributeAst attributeAst) { return null; }
///
public virtual object VisitNamedAttributeArgument(NamedAttributeArgumentAst namedAttributeArgumentAst) { return null; }
///
public virtual object VisitParameter(ParameterAst parameterAst) { return null; }
///
public virtual object VisitStatementBlock(StatementBlockAst statementBlockAst) { return null; }
///
public virtual object VisitIfStatement(IfStatementAst ifStmtAst) { return null; }
///
public virtual object VisitTrap(TrapStatementAst trapStatementAst) { return null; }
///
public virtual object VisitSwitchStatement(SwitchStatementAst switchStatementAst) { return null; }
///
public virtual object VisitDataStatement(DataStatementAst dataStatementAst) { return null; }
///
public virtual object VisitForEachStatement(ForEachStatementAst forEachStatementAst) { return null; }
///
public virtual object VisitDoWhileStatement(DoWhileStatementAst doWhileStatementAst) { return null; }
///
public virtual object VisitForStatement(ForStatementAst forStatementAst) { return null; }
///
public virtual object VisitWhileStatement(WhileStatementAst whileStatementAst) { return null; }
///
public virtual object VisitCatchClause(CatchClauseAst catchClauseAst) { return null; }
///
public virtual object VisitTryStatement(TryStatementAst tryStatementAst) { return null; }
///
public virtual object VisitBreakStatement(BreakStatementAst breakStatementAst) { return null; }
///
public virtual object VisitContinueStatement(ContinueStatementAst continueStatementAst) { return null; }
///
public virtual object VisitReturnStatement(ReturnStatementAst returnStatementAst) { return null; }
///
public virtual object VisitExitStatement(ExitStatementAst exitStatementAst) { return null; }
///
public virtual object VisitThrowStatement(ThrowStatementAst throwStatementAst) { return null; }
///
public virtual object VisitDoUntilStatement(DoUntilStatementAst doUntilStatementAst) { return null; }
///
public virtual object VisitAssignmentStatement(AssignmentStatementAst assignmentStatementAst) { return null; }
///
public virtual object VisitPipeline(PipelineAst pipelineAst) { return null; }
///
public virtual object VisitCommand(CommandAst commandAst) { return null; }
///
public virtual object VisitCommandExpression(CommandExpressionAst commandExpressionAst) { return null; }
///
public virtual object VisitCommandParameter(CommandParameterAst commandParameterAst) { return null; }
///
public virtual object VisitFileRedirection(FileRedirectionAst fileRedirectionAst) { return null; }
///
public virtual object VisitMergingRedirection(MergingRedirectionAst mergingRedirectionAst) { return null; }
///
public virtual object VisitBinaryExpression(BinaryExpressionAst binaryExpressionAst) { return null; }
///
public virtual object VisitUnaryExpression(UnaryExpressionAst unaryExpressionAst) { return null; }
///
public virtual object VisitConvertExpression(ConvertExpressionAst convertExpressionAst) { return null; }
///
public virtual object VisitConstantExpression(ConstantExpressionAst constantExpressionAst) { return null; }
///
public virtual object VisitStringConstantExpression(StringConstantExpressionAst stringConstantExpressionAst) { return null; }
///
public virtual object VisitSubExpression(SubExpressionAst subExpressionAst) { return null; }
///
public virtual object VisitUsingExpression(UsingExpressionAst usingExpressionAst) { return null; }
///
public virtual object VisitVariableExpression(VariableExpressionAst variableExpressionAst) { return null; }
///
public virtual object VisitTypeExpression(TypeExpressionAst typeExpressionAst) { return null; }
///
public virtual object VisitMemberExpression(MemberExpressionAst memberExpressionAst) { return null; }
///
public virtual object VisitInvokeMemberExpression(InvokeMemberExpressionAst invokeMemberExpressionAst) { return null; }
///
public virtual object VisitArrayExpression(ArrayExpressionAst arrayExpressionAst) { return null; }
///
public virtual object VisitArrayLiteral(ArrayLiteralAst arrayLiteralAst) { return null; }
///
public virtual object VisitHashtable(HashtableAst hashtableAst) { return null; }
///
public virtual object VisitParenExpression(ParenExpressionAst parenExpressionAst) { return null; }
///
public virtual object VisitExpandableStringExpression(ExpandableStringExpressionAst expandableStringExpressionAst) { return null; }
///
public virtual object VisitIndexExpression(IndexExpressionAst indexExpressionAst) { return null; }
///
public virtual object VisitAttributedExpression(AttributedExpressionAst attributedExpressionAst) { return null; }
///
public virtual object VisitBlockStatement(BlockStatementAst blockStatementAst) { return null; }
///
public virtual object VisitFunctionDefinition(FunctionDefinitionAst functionDefinitionAst) { return null; }
///
public virtual object VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst) { return null; }
}
///
/// Default implementation of interface
///
public abstract class DefaultCustomAstVisitor2 : DefaultCustomAstVisitor, ICustomAstVisitor2
{
///
public virtual object VisitPropertyMember(PropertyMemberAst propertyMemberAst) { return null; }
///
public virtual object VisitBaseCtorInvokeMemberExpression(BaseCtorInvokeMemberExpressionAst baseCtorInvokeMemberExpressionAst) { return null; }
///
public virtual object VisitUsingStatement(UsingStatementAst usingStatement) { return null; }
///
public virtual object VisitConfigurationDefinition(ConfigurationDefinitionAst configurationAst) { return null; }
///
public virtual object VisitDynamicKeywordStatement(DynamicKeywordStatementAst dynamicKeywordAst) { return null; }
///
public virtual object VisitTypeDefinition(TypeDefinitionAst typeDefinitionAst) { return null; }
///
public virtual object VisitFunctionMember(FunctionMemberAst functionMemberAst) { return null; }
}
}