MegaBites-AI/Windows-powershell
0308
1// Copyright (c) Microsoft Corporation.2// Licensed under the MIT License.3 4using System.Collections.Generic;5using System.Diagnostics.CodeAnalysis;6using System.Linq;7using System.Reflection.Emit;8 9namespace System.Management.Automation.Language10{11 /// <summary>12 /// </summary>13#nullable enable14 public interface ICustomAstVisitor15 {16 /// <summary/>17 object? DefaultVisit(Ast ast) => null;18 19 /// <summary/>20 object? VisitErrorStatement(ErrorStatementAst errorStatementAst) => DefaultVisit(errorStatementAst);21 22 /// <summary/>23 object? VisitErrorExpression(ErrorExpressionAst errorExpressionAst) => DefaultVisit(errorExpressionAst);24 25 #region Script Blocks26 27 /// <summary/>28 object? VisitScriptBlock(ScriptBlockAst scriptBlockAst) => DefaultVisit(scriptBlockAst);29 30 /// <summary/>31 [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Param")]32 [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "param")]33 object? VisitParamBlock(ParamBlockAst paramBlockAst) => DefaultVisit(paramBlockAst);34 35 /// <summary/>36 object? VisitNamedBlock(NamedBlockAst namedBlockAst) => DefaultVisit(namedBlockAst);37 38 /// <summary/>39 object? VisitTypeConstraint(TypeConstraintAst typeConstraintAst) => DefaultVisit(typeConstraintAst);40 41 /// <summary/>42 object? VisitAttribute(AttributeAst attributeAst) => DefaultVisit(attributeAst);43 44 /// <summary/>45 object? VisitNamedAttributeArgument(NamedAttributeArgumentAst namedAttributeArgumentAst) => DefaultVisit(namedAttributeArgumentAst);46 47 /// <summary/>48 object? VisitParameter(ParameterAst parameterAst) => DefaultVisit(parameterAst);49 50 #endregion Script Blocks51 52 #region Statements53 54 /// <summary/>55 object? VisitFunctionDefinition(FunctionDefinitionAst functionDefinitionAst) => DefaultVisit(functionDefinitionAst);56 57 /// <summary/>58 object? VisitStatementBlock(StatementBlockAst statementBlockAst) => DefaultVisit(statementBlockAst);59 60 /// <summary/>61 object? VisitIfStatement(IfStatementAst ifStmtAst) => DefaultVisit(ifStmtAst);62 63 /// <summary/>64 object? VisitTrap(TrapStatementAst trapStatementAst) => DefaultVisit(trapStatementAst);65 66 /// <summary/>67 object? VisitSwitchStatement(SwitchStatementAst switchStatementAst) => DefaultVisit(switchStatementAst);68 69 /// <summary/>70 object? VisitDataStatement(DataStatementAst dataStatementAst) => DefaultVisit(dataStatementAst);71 72 /// <summary/>73 object? VisitForEachStatement(ForEachStatementAst forEachStatementAst) => DefaultVisit(forEachStatementAst);74 75 /// <summary/>76 object? VisitDoWhileStatement(DoWhileStatementAst doWhileStatementAst) => DefaultVisit(doWhileStatementAst);77 78 /// <summary/>79 object? VisitForStatement(ForStatementAst forStatementAst) => DefaultVisit(forStatementAst);80 81 /// <summary/>82 object? VisitWhileStatement(WhileStatementAst whileStatementAst) => DefaultVisit(whileStatementAst);83 84 /// <summary/>85 object? VisitCatchClause(CatchClauseAst catchClauseAst) => DefaultVisit(catchClauseAst);86 87 /// <summary/>88 object? VisitTryStatement(TryStatementAst tryStatementAst) => DefaultVisit(tryStatementAst);89 90 /// <summary/>91 object? VisitBreakStatement(BreakStatementAst breakStatementAst) => DefaultVisit(breakStatementAst);92 93 /// <summary/>94 object? VisitContinueStatement(ContinueStatementAst continueStatementAst) => DefaultVisit(continueStatementAst);95 96 /// <summary/>97 object? VisitReturnStatement(ReturnStatementAst returnStatementAst) => DefaultVisit(returnStatementAst);98 99 /// <summary/>100 object? VisitExitStatement(ExitStatementAst exitStatementAst) => DefaultVisit(exitStatementAst);101 102 /// <summary/>103 object? VisitThrowStatement(ThrowStatementAst throwStatementAst) => DefaultVisit(throwStatementAst);104 105 /// <summary/>106 object? VisitDoUntilStatement(DoUntilStatementAst doUntilStatementAst) => DefaultVisit(doUntilStatementAst);107 108 /// <summary/>109 object? VisitAssignmentStatement(AssignmentStatementAst assignmentStatementAst) => DefaultVisit(assignmentStatementAst);110 111 #endregion Statements112 113 #region Pipelines114 115 /// <summary/>116 object? VisitPipeline(PipelineAst pipelineAst) => DefaultVisit(pipelineAst);117 118 /// <summary/>119 object? VisitCommand(CommandAst commandAst) => DefaultVisit(commandAst);120 121 /// <summary/>122 object? VisitCommandExpression(CommandExpressionAst commandExpressionAst) => DefaultVisit(commandExpressionAst);123 124 /// <summary/>125 object? VisitCommandParameter(CommandParameterAst commandParameterAst) => DefaultVisit(commandParameterAst);126 127 /// <summary/>128 object? VisitFileRedirection(FileRedirectionAst fileRedirectionAst) => DefaultVisit(fileRedirectionAst);129 130 /// <summary/>131 object? VisitMergingRedirection(MergingRedirectionAst mergingRedirectionAst) => DefaultVisit(mergingRedirectionAst);132 133 #endregion Pipelines134 135 #region Expressions136 137 /// <summary/>138 object? VisitBinaryExpression(BinaryExpressionAst binaryExpressionAst) => DefaultVisit(binaryExpressionAst);139 140 /// <summary/>141 object? VisitUnaryExpression(UnaryExpressionAst unaryExpressionAst) => DefaultVisit(unaryExpressionAst);142 143 /// <summary/>144 object? VisitConvertExpression(ConvertExpressionAst convertExpressionAst) => DefaultVisit(convertExpressionAst);145 146 /// <summary/>147 object? VisitConstantExpression(ConstantExpressionAst constantExpressionAst) => DefaultVisit(constantExpressionAst);148 149 /// <summary/>150 object? VisitStringConstantExpression(StringConstantExpressionAst stringConstantExpressionAst) => DefaultVisit(stringConstantExpressionAst);151 152 /// <summary/>153 [SuppressMessage("Microsoft.Naming", "CA1702:CompoundWordsShouldBeCasedCorrectly", MessageId = "SubExpression")]154 [SuppressMessage("Microsoft.Naming", "CA1702:CompoundWordsShouldBeCasedCorrectly", MessageId = "subExpression")]155 object? VisitSubExpression(SubExpressionAst subExpressionAst) => DefaultVisit(subExpressionAst);156 157 /// <summary/>158 object? VisitUsingExpression(UsingExpressionAst usingExpressionAst) => DefaultVisit(usingExpressionAst);159 160 /// <summary/>161 object? VisitVariableExpression(VariableExpressionAst variableExpressionAst) => DefaultVisit(variableExpressionAst);162 163 /// <summary/>164 object? VisitTypeExpression(TypeExpressionAst typeExpressionAst) => DefaultVisit(typeExpressionAst);165 166 /// <summary/>167 object? VisitMemberExpression(MemberExpressionAst memberExpressionAst) => DefaultVisit(memberExpressionAst);168 169 /// <summary/>170 object? VisitInvokeMemberExpression(InvokeMemberExpressionAst invokeMemberExpressionAst) => DefaultVisit(invokeMemberExpressionAst);171 172 /// <summary/>173 object? VisitArrayExpression(ArrayExpressionAst arrayExpressionAst) => DefaultVisit(arrayExpressionAst);174 175 /// <summary/>176 object? VisitArrayLiteral(ArrayLiteralAst arrayLiteralAst) => DefaultVisit(arrayLiteralAst);177 178 /// <summary/>179 object? VisitHashtable(HashtableAst hashtableAst) => DefaultVisit(hashtableAst);180 181 /// <summary/>182 object? VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst) => DefaultVisit(scriptBlockExpressionAst);183 184 /// <summary/>185 [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Paren")]186 [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "paren")]187 object? VisitParenExpression(ParenExpressionAst parenExpressionAst) => DefaultVisit(parenExpressionAst);188 189 /// <summary/>190 object? VisitExpandableStringExpression(ExpandableStringExpressionAst expandableStringExpressionAst) => DefaultVisit(expandableStringExpressionAst);191 192 /// <summary/>193 object? VisitIndexExpression(IndexExpressionAst indexExpressionAst) => DefaultVisit(indexExpressionAst);194 195 /// <summary/>196 object? VisitAttributedExpression(AttributedExpressionAst attributedExpressionAst) => DefaultVisit(attributedExpressionAst);197 198 /// <summary/>199 object? VisitBlockStatement(BlockStatementAst blockStatementAst) => DefaultVisit(blockStatementAst);200 201 #endregion Expressions202 }203#nullable restore204 205 /// <summary/>206#nullable enable207 public interface ICustomAstVisitor2 : ICustomAstVisitor208 {209 /// <summary/>210 object? VisitTypeDefinition(TypeDefinitionAst typeDefinitionAst) => DefaultVisit(typeDefinitionAst);211 212 /// <summary/>213 object? VisitPropertyMember(PropertyMemberAst propertyMemberAst) => DefaultVisit(propertyMemberAst);214 215 /// <summary/>216 object? VisitFunctionMember(FunctionMemberAst functionMemberAst) => DefaultVisit(functionMemberAst);217 218 /// <summary/>219 object? VisitBaseCtorInvokeMemberExpression(BaseCtorInvokeMemberExpressionAst baseCtorInvokeMemberExpressionAst) => DefaultVisit(baseCtorInvokeMemberExpressionAst);220 221 /// <summary/>222 object? VisitUsingStatement(UsingStatementAst usingStatement) => DefaultVisit(usingStatement);223 224 /// <summary/>225 object? VisitConfigurationDefinition(ConfigurationDefinitionAst configurationDefinitionAst) => DefaultVisit(configurationDefinitionAst);226 227 /// <summary/>228 object? VisitDynamicKeywordStatement(DynamicKeywordStatementAst dynamicKeywordAst) => DefaultVisit(dynamicKeywordAst);229 230 /// <summary/>231 object? VisitTernaryExpression(TernaryExpressionAst ternaryExpressionAst) => DefaultVisit(ternaryExpressionAst);232 233 /// <summary/>234 object? VisitPipelineChain(PipelineChainAst statementChainAst) => DefaultVisit(statementChainAst);235 }236#nullable restore237 238#if DEBUG239 internal class CheckAllParentsSet : AstVisitor2240 {241 internal CheckAllParentsSet(Ast root)242 {243 this.Root = root;244 }245 246 private Ast Root { get; }247 248 internal AstVisitAction CheckParent(Ast ast)249 {250 if (ast != Root)251 {252 Diagnostics.Assert(ast.Parent != null, "Parent not set");253 }254 255 return AstVisitAction.Continue;256 }257 258 public override AstVisitAction VisitErrorStatement(ErrorStatementAst ast) { return CheckParent(ast); }259 260 public override AstVisitAction VisitErrorExpression(ErrorExpressionAst ast) { return CheckParent(ast); }261 262 public override AstVisitAction VisitScriptBlock(ScriptBlockAst ast) { return CheckParent(ast); }263 264 public override AstVisitAction VisitParamBlock(ParamBlockAst ast) { return CheckParent(ast); }265 266 public override AstVisitAction VisitNamedBlock(NamedBlockAst ast) { return CheckParent(ast); }267 268 public override AstVisitAction VisitTypeConstraint(TypeConstraintAst ast) { return CheckParent(ast); }269 270 public override AstVisitAction VisitAttribute(AttributeAst ast) { return CheckParent(ast); }271 272 public override AstVisitAction VisitParameter(ParameterAst ast) { return CheckParent(ast); }273 274 public override AstVisitAction VisitTypeExpression(TypeExpressionAst ast) { return CheckParent(ast); }275 276 public override AstVisitAction VisitFunctionDefinition(FunctionDefinitionAst ast) { return CheckParent(ast); }277 278 public override AstVisitAction VisitStatementBlock(StatementBlockAst ast) { return CheckParent(ast); }279 280 public override AstVisitAction VisitIfStatement(IfStatementAst ast) { return CheckParent(ast); }281 282 public override AstVisitAction VisitTrap(TrapStatementAst ast) { return CheckParent(ast); }283 284 public override AstVisitAction VisitSwitchStatement(SwitchStatementAst ast) { return CheckParent(ast); }285 286 public override AstVisitAction VisitDataStatement(DataStatementAst ast) { return CheckParent(ast); }287 288 public override AstVisitAction VisitForEachStatement(ForEachStatementAst ast) { return CheckParent(ast); }289 290 public override AstVisitAction VisitDoWhileStatement(DoWhileStatementAst ast) { return CheckParent(ast); }291 292 public override AstVisitAction VisitForStatement(ForStatementAst ast) { return CheckParent(ast); }293 294 public override AstVisitAction VisitWhileStatement(WhileStatementAst ast) { return CheckParent(ast); }295 296 public override AstVisitAction VisitCatchClause(CatchClauseAst ast) { return CheckParent(ast); }297 298 public override AstVisitAction VisitTryStatement(TryStatementAst ast) { return CheckParent(ast); }299 300 public override AstVisitAction VisitBreakStatement(BreakStatementAst ast) { return CheckParent(ast); }301 302 public override AstVisitAction VisitContinueStatement(ContinueStatementAst ast) { return CheckParent(ast); }303 304 public override AstVisitAction VisitReturnStatement(ReturnStatementAst ast) { return CheckParent(ast); }305 306 public override AstVisitAction VisitExitStatement(ExitStatementAst ast) { return CheckParent(ast); }307 308 public override AstVisitAction VisitThrowStatement(ThrowStatementAst ast) { return CheckParent(ast); }309 310 public override AstVisitAction VisitDoUntilStatement(DoUntilStatementAst ast) { return CheckParent(ast); }311 312 public override AstVisitAction VisitAssignmentStatement(AssignmentStatementAst ast) { return CheckParent(ast); }313 314 public override AstVisitAction VisitPipeline(PipelineAst ast) { return CheckParent(ast); }315 316 public override AstVisitAction VisitCommand(CommandAst ast) { return CheckParent(ast); }317 318 public override AstVisitAction VisitCommandExpression(CommandExpressionAst ast) { return CheckParent(ast); }319 320 public override AstVisitAction VisitCommandParameter(CommandParameterAst ast) { return CheckParent(ast); }321 322 public override AstVisitAction VisitMergingRedirection(MergingRedirectionAst ast) { return CheckParent(ast); }323 324 public override AstVisitAction VisitFileRedirection(FileRedirectionAst ast) { return CheckParent(ast); }325 326 public override AstVisitAction VisitBinaryExpression(BinaryExpressionAst ast) { return CheckParent(ast); }327 328 public override AstVisitAction VisitUnaryExpression(UnaryExpressionAst ast) { return CheckParent(ast); }329 330 public override AstVisitAction VisitConvertExpression(ConvertExpressionAst ast) { return CheckParent(ast); }331 332 public override AstVisitAction VisitConstantExpression(ConstantExpressionAst ast) { return CheckParent(ast); }333 334 public override AstVisitAction VisitStringConstantExpression(StringConstantExpressionAst ast) { return CheckParent(ast); }335 336 public override AstVisitAction VisitSubExpression(SubExpressionAst ast) { return CheckParent(ast); }337 338 public override AstVisitAction VisitUsingExpression(UsingExpressionAst ast) { return CheckParent(ast); }339 340 public override AstVisitAction VisitVariableExpression(VariableExpressionAst ast) { return CheckParent(ast); }341 342 public override AstVisitAction VisitMemberExpression(MemberExpressionAst ast) { return CheckParent(ast); }343 344 public override AstVisitAction VisitInvokeMemberExpression(InvokeMemberExpressionAst ast) { return CheckParent(ast); }345 346 public override AstVisitAction VisitArrayExpression(ArrayExpressionAst ast) { return CheckParent(ast); }347 348 public override AstVisitAction VisitArrayLiteral(ArrayLiteralAst ast) { return CheckParent(ast); }349 350 public override AstVisitAction VisitHashtable(HashtableAst ast) { return CheckParent(ast); }351 352 public override AstVisitAction VisitScriptBlockExpression(ScriptBlockExpressionAst ast) { return CheckParent(ast); }353 354 public override AstVisitAction VisitParenExpression(ParenExpressionAst ast) { return CheckParent(ast); }355 356 public override AstVisitAction VisitExpandableStringExpression(ExpandableStringExpressionAst ast) { return CheckParent(ast); }357 358 public override AstVisitAction VisitIndexExpression(IndexExpressionAst ast) { return CheckParent(ast); }359 360 public override AstVisitAction VisitAttributedExpression(AttributedExpressionAst ast) { return CheckParent(ast); }361 362 public override AstVisitAction VisitBlockStatement(BlockStatementAst ast) { return CheckParent(ast); }363 364 public override AstVisitAction VisitNamedAttributeArgument(NamedAttributeArgumentAst ast) { return CheckParent(ast); }365 366 public override AstVisitAction VisitTypeDefinition(TypeDefinitionAst ast) { return CheckParent(ast); }367 368 public override AstVisitAction VisitFunctionMember(FunctionMemberAst ast) { return CheckParent(ast); }369 370 public override AstVisitAction VisitPropertyMember(PropertyMemberAst ast) { return CheckParent(ast); }371 372 public override AstVisitAction VisitUsingStatement(UsingStatementAst ast) { return CheckParent(ast); }373 374 public override AstVisitAction VisitConfigurationDefinition(ConfigurationDefinitionAst ast) { return CheckParent(ast); }375 376 public override AstVisitAction VisitDynamicKeywordStatement(DynamicKeywordStatementAst ast) { return CheckParent(ast); }377 378 public override AstVisitAction VisitTernaryExpression(TernaryExpressionAst ast) => CheckParent(ast);379 380 public override AstVisitAction VisitPipelineChain(PipelineChainAst ast) => CheckParent(ast);381 }382 383 /// <summary>384 /// Check if <see cref="TypeConstraintAst"/> contains <see cref="TypeBuilder "/> type.385 /// </summary>386 internal class CheckTypeBuilder : AstVisitor2387 {388 public override AstVisitAction VisitTypeConstraint(TypeConstraintAst ast)389 {390 Type type = ast.TypeName.GetReflectionType();391 if (type != null)392 {393 Diagnostics.Assert(type is not TypeBuilder, "ReflectionType can never be TypeBuilder");394 }395 396 return AstVisitAction.Continue;397 }398 }399#endif400 401 /// <summary>402 /// Searches an AST, using the evaluation function provided by either of the constructors.403 /// </summary>404 internal class AstSearcher : AstVisitor2405 {406 #region External interface407 408 internal static IEnumerable<Ast> FindAll(Ast ast, Func<Ast, bool> predicate, bool searchNestedScriptBlocks)409 {410 Diagnostics.Assert(ast != null && predicate != null, "caller to verify arguments");411 412 var searcher = new AstSearcher(predicate, stopOnFirst: false, searchNestedScriptBlocks: searchNestedScriptBlocks);413 ast.InternalVisit(searcher);414 return searcher.Results;415 }416 417 internal static Ast FindFirst(Ast ast, Func<Ast, bool> predicate, bool searchNestedScriptBlocks)418 {419 Diagnostics.Assert(ast != null && predicate != null, "caller to verify arguments");420 421 var searcher = new AstSearcher(predicate, stopOnFirst: true, searchNestedScriptBlocks: searchNestedScriptBlocks);422 ast.InternalVisit(searcher);423 return searcher.Results.FirstOrDefault();424 }425 426 internal static bool Contains(Ast ast, Func<Ast, bool> predicate, bool searchNestedScriptBlocks)427 {428 Diagnostics.Assert(ast != null && predicate != null, "caller to verify arguments");429 430 var searcher = new AstSearcher(predicate, stopOnFirst: true, searchNestedScriptBlocks: searchNestedScriptBlocks);431 ast.InternalVisit(searcher);432 return searcher.Results.Count > 0;433 }434 435 internal static bool IsUsingDollarInput(Ast ast)436 {437 return (AstSearcher.Contains(438 ast,439 ast_ =>440 {441 var varAst = ast_ as VariableExpressionAst;442 if (varAst != null)443 {444 return varAst.VariablePath.IsVariable &&445 varAst.VariablePath.UnqualifiedPath.Equals(SpecialVariables.Input,446 StringComparison.OrdinalIgnoreCase);447 }448 449 return false;450 },451 searchNestedScriptBlocks: false));452 }453 454 #endregion External interface455 456 protected AstSearcher(Func<Ast, bool> callback, bool stopOnFirst, bool searchNestedScriptBlocks)457 {458 _callback = callback;459 _stopOnFirst = stopOnFirst;460 _searchNestedScriptBlocks = searchNestedScriptBlocks;461 this.Results = new List<Ast>();462 }463 464 private readonly Func<Ast, bool> _callback;465 private readonly bool _stopOnFirst;466 private readonly bool _searchNestedScriptBlocks;467 protected readonly List<Ast> Results;468 469 protected AstVisitAction Check(Ast ast)470 {471 if (_callback(ast))472 {473 Results.Add(ast);474 if (_stopOnFirst)475 {476 return AstVisitAction.StopVisit;477 }478 }479 480 return AstVisitAction.Continue;481 }482 483 protected AstVisitAction CheckScriptBlock(Ast ast)484 {485 var action = Check(ast);486 if (action == AstVisitAction.Continue && !_searchNestedScriptBlocks)487 {488 action = AstVisitAction.SkipChildren;489 }490 491 return action;492 }493 494 public override AstVisitAction VisitErrorStatement(ErrorStatementAst ast) { return Check(ast); }495 496 public override AstVisitAction VisitErrorExpression(ErrorExpressionAst ast) { return Check(ast); }497 498 public override AstVisitAction VisitScriptBlock(ScriptBlockAst ast) { return Check(ast); }499 500 public override AstVisitAction VisitParamBlock(ParamBlockAst ast) { return Check(ast); }501 502 public override AstVisitAction VisitNamedBlock(NamedBlockAst ast) { return Check(ast); }503 504 public override AstVisitAction VisitTypeConstraint(TypeConstraintAst ast) { return Check(ast); }505 506 public override AstVisitAction VisitAttribute(AttributeAst ast) { return Check(ast); }507 508 public override AstVisitAction VisitParameter(ParameterAst ast) { return Check(ast); }509 510 public override AstVisitAction VisitTypeExpression(TypeExpressionAst ast) { return Check(ast); }511 512 public override AstVisitAction VisitFunctionDefinition(FunctionDefinitionAst ast) { return CheckScriptBlock(ast); }513 514 public override AstVisitAction VisitStatementBlock(StatementBlockAst ast) { return Check(ast); }515 516 public override AstVisitAction VisitIfStatement(IfStatementAst ast) { return Check(ast); }517 518 public override AstVisitAction VisitTrap(TrapStatementAst ast) { return CheckScriptBlock(ast); }519 520 public override AstVisitAction VisitSwitchStatement(SwitchStatementAst ast) { return Check(ast); }521 522 public override AstVisitAction VisitDataStatement(DataStatementAst ast) { return Check(ast); }523 524 public override AstVisitAction VisitForEachStatement(ForEachStatementAst ast) { return Check(ast); }525 526 public override AstVisitAction VisitDoWhileStatement(DoWhileStatementAst ast) { return Check(ast); }527 528 public override AstVisitAction VisitForStatement(ForStatementAst ast) { return Check(ast); }529 530 public override AstVisitAction VisitWhileStatement(WhileStatementAst ast) { return Check(ast); }531 532 public override AstVisitAction VisitCatchClause(CatchClauseAst ast) { return Check(ast); }533 534 public override AstVisitAction VisitTryStatement(TryStatementAst ast) { return Check(ast); }535 536 public override AstVisitAction VisitBreakStatement(BreakStatementAst ast) { return Check(ast); }537 538 public override AstVisitAction VisitContinueStatement(ContinueStatementAst ast) { return Check(ast); }539 540 public override AstVisitAction VisitReturnStatement(ReturnStatementAst ast) { return Check(ast); }541 542 public override AstVisitAction VisitExitStatement(ExitStatementAst ast) { return Check(ast); }543 544 public override AstVisitAction VisitThrowStatement(ThrowStatementAst ast) { return Check(ast); }545 546 public override AstVisitAction VisitDoUntilStatement(DoUntilStatementAst ast) { return Check(ast); }547 548 public override AstVisitAction VisitAssignmentStatement(AssignmentStatementAst ast) { return Check(ast); }549 550 public override AstVisitAction VisitPipeline(PipelineAst ast) { return Check(ast); }551 552 public override AstVisitAction VisitCommand(CommandAst ast) { return Check(ast); }553 554 public override AstVisitAction VisitCommandExpression(CommandExpressionAst ast) { return Check(ast); }555 556 public override AstVisitAction VisitCommandParameter(CommandParameterAst ast) { return Check(ast); }557 558 public override AstVisitAction VisitMergingRedirection(MergingRedirectionAst ast) { return Check(ast); }559 560 public override AstVisitAction VisitFileRedirection(FileRedirectionAst ast) { return Check(ast); }561 562 public override AstVisitAction VisitBinaryExpression(BinaryExpressionAst ast) { return Check(ast); }563 564 public override AstVisitAction VisitUnaryExpression(UnaryExpressionAst ast) { return Check(ast); }565 566 public override AstVisitAction VisitConvertExpression(ConvertExpressionAst ast) { return Check(ast); }567 568 public override AstVisitAction VisitConstantExpression(ConstantExpressionAst ast) { return Check(ast); }569 570 public override AstVisitAction VisitStringConstantExpression(StringConstantExpressionAst ast) { return Check(ast); }571 572 public override AstVisitAction VisitSubExpression(SubExpressionAst ast) { return Check(ast); }573 574 public override AstVisitAction VisitUsingExpression(UsingExpressionAst ast) { return Check(ast); }575 576 public override AstVisitAction VisitVariableExpression(VariableExpressionAst ast) { return Check(ast); }577 578 public override AstVisitAction VisitMemberExpression(MemberExpressionAst ast) { return Check(ast); }579 580 public override AstVisitAction VisitInvokeMemberExpression(InvokeMemberExpressionAst ast) { return Check(ast); }581 582 public override AstVisitAction VisitArrayExpression(ArrayExpressionAst ast) { return Check(ast); }583 584 public override AstVisitAction VisitArrayLiteral(ArrayLiteralAst ast) { return Check(ast); }585 586 public override AstVisitAction VisitHashtable(HashtableAst ast) { return Check(ast); }587 588 public override AstVisitAction VisitScriptBlockExpression(ScriptBlockExpressionAst ast) { return CheckScriptBlock(ast); }589 590 public override AstVisitAction VisitParenExpression(ParenExpressionAst ast) { return Check(ast); }591 592 public override AstVisitAction VisitExpandableStringExpression(ExpandableStringExpressionAst ast) { return Check(ast); }593 594 public override AstVisitAction VisitIndexExpression(IndexExpressionAst ast) { return Check(ast); }595 596 public override AstVisitAction VisitAttributedExpression(AttributedExpressionAst ast) { return Check(ast); }597 598 public override AstVisitAction VisitNamedAttributeArgument(NamedAttributeArgumentAst ast) { return Check(ast); }599 600 public override AstVisitAction VisitTypeDefinition(TypeDefinitionAst ast) { return Check(ast); }601 602 public override AstVisitAction VisitPropertyMember(PropertyMemberAst ast) { return Check(ast); }603 604 public override AstVisitAction VisitFunctionMember(FunctionMemberAst ast) { return Check(ast); }605 606 public override AstVisitAction VisitUsingStatement(UsingStatementAst ast) { return Check(ast); }607 608 public override AstVisitAction VisitBlockStatement(BlockStatementAst ast) { return Check(ast); }609 610 public override AstVisitAction VisitConfigurationDefinition(ConfigurationDefinitionAst ast) { return Check(ast); }611 612 public override AstVisitAction VisitDynamicKeywordStatement(DynamicKeywordStatementAst ast) { return Check(ast); }613 614 public override AstVisitAction VisitTernaryExpression(TernaryExpressionAst ast) { return Check(ast); }615 616 public override AstVisitAction VisitPipelineChain(PipelineChainAst ast) { return Check(ast); }617 }618 619 /// <summary>620 /// Default implementation of <see cref="ICustomAstVisitor"/> interface.621 /// </summary>622 public abstract class DefaultCustomAstVisitor : ICustomAstVisitor623 {624 /// <summary/>625 public virtual object DefaultVisit(Ast ast) => null;626 627 /// <summary/>628 public virtual object VisitErrorStatement(ErrorStatementAst errorStatementAst) => DefaultVisit(errorStatementAst);629 630 /// <summary/>631 public virtual object VisitErrorExpression(ErrorExpressionAst errorExpressionAst) => DefaultVisit(errorExpressionAst);632 633 /// <summary/>634 public virtual object VisitScriptBlock(ScriptBlockAst scriptBlockAst) => DefaultVisit(scriptBlockAst);635 636 /// <summary/>637 public virtual object VisitParamBlock(ParamBlockAst paramBlockAst) => DefaultVisit(paramBlockAst);638 639 /// <summary/>640 public virtual object VisitNamedBlock(NamedBlockAst namedBlockAst) => DefaultVisit(namedBlockAst);641 642 /// <summary/>643 public virtual object VisitTypeConstraint(TypeConstraintAst typeConstraintAst) => DefaultVisit(typeConstraintAst);644 645 /// <summary/>646 public virtual object VisitAttribute(AttributeAst attributeAst) => DefaultVisit(attributeAst);647 648 /// <summary/>649 public virtual object VisitNamedAttributeArgument(NamedAttributeArgumentAst namedAttributeArgumentAst) => DefaultVisit(namedAttributeArgumentAst);650 651 /// <summary/>652 public virtual object VisitParameter(ParameterAst parameterAst) => DefaultVisit(parameterAst);653 654 /// <summary/>655 public virtual object VisitStatementBlock(StatementBlockAst statementBlockAst) => DefaultVisit(statementBlockAst);656 657 /// <summary/>658 public virtual object VisitIfStatement(IfStatementAst ifStmtAst) => DefaultVisit(ifStmtAst);659 660 /// <summary/>661 public virtual object VisitTrap(TrapStatementAst trapStatementAst) => DefaultVisit(trapStatementAst);662 663 /// <summary/>664 public virtual object VisitSwitchStatement(SwitchStatementAst switchStatementAst) => DefaultVisit(switchStatementAst);665 666 /// <summary/>667 public virtual object VisitDataStatement(DataStatementAst dataStatementAst) => DefaultVisit(dataStatementAst);668 669 /// <summary/>670 public virtual object VisitForEachStatement(ForEachStatementAst forEachStatementAst) => DefaultVisit(forEachStatementAst);671 672 /// <summary/>673 public virtual object VisitDoWhileStatement(DoWhileStatementAst doWhileStatementAst) => DefaultVisit(doWhileStatementAst);674 675 /// <summary/>676 public virtual object VisitForStatement(ForStatementAst forStatementAst) => DefaultVisit(forStatementAst);677 678 /// <summary/>679 public virtual object VisitWhileStatement(WhileStatementAst whileStatementAst) => DefaultVisit(whileStatementAst);680 681 /// <summary/>682 public virtual object VisitCatchClause(CatchClauseAst catchClauseAst) => DefaultVisit(catchClauseAst);683 684 /// <summary/>685 public virtual object VisitTryStatement(TryStatementAst tryStatementAst) => DefaultVisit(tryStatementAst);686 687 /// <summary/>688 public virtual object VisitBreakStatement(BreakStatementAst breakStatementAst) => DefaultVisit(breakStatementAst);689 690 /// <summary/>691 public virtual object VisitContinueStatement(ContinueStatementAst continueStatementAst) => DefaultVisit(continueStatementAst);692 693 /// <summary/>694 public virtual object VisitReturnStatement(ReturnStatementAst returnStatementAst) => DefaultVisit(returnStatementAst);695 696 /// <summary/>697 public virtual object VisitExitStatement(ExitStatementAst exitStatementAst) => DefaultVisit(exitStatementAst);698 699 /// <summary/>700 public virtual object VisitThrowStatement(ThrowStatementAst throwStatementAst) => DefaultVisit(throwStatementAst);701 702 /// <summary/>703 public virtual object VisitDoUntilStatement(DoUntilStatementAst doUntilStatementAst) => DefaultVisit(doUntilStatementAst);704 705 /// <summary/>706 public virtual object VisitAssignmentStatement(AssignmentStatementAst assignmentStatementAst) => DefaultVisit(assignmentStatementAst);707 708 /// <summary/>709 public virtual object VisitPipeline(PipelineAst pipelineAst) => DefaultVisit(pipelineAst);710 711 /// <summary/>712 public virtual object VisitCommand(CommandAst commandAst) => DefaultVisit(commandAst);713 714 /// <summary/>715 public virtual object VisitCommandExpression(CommandExpressionAst commandExpressionAst) => DefaultVisit(commandExpressionAst);716 717 /// <summary/>718 public virtual object VisitCommandParameter(CommandParameterAst commandParameterAst) => DefaultVisit(commandParameterAst);719 720 /// <summary/>721 public virtual object VisitFileRedirection(FileRedirectionAst fileRedirectionAst) => DefaultVisit(fileRedirectionAst);722 723 /// <summary/>724 public virtual object VisitMergingRedirection(MergingRedirectionAst mergingRedirectionAst) => DefaultVisit(mergingRedirectionAst);725 726 /// <summary/>727 public virtual object VisitBinaryExpression(BinaryExpressionAst binaryExpressionAst) => DefaultVisit(binaryExpressionAst);728 729 /// <summary/>730 public virtual object VisitUnaryExpression(UnaryExpressionAst unaryExpressionAst) => DefaultVisit(unaryExpressionAst);731 732 /// <summary/>733 public virtual object VisitConvertExpression(ConvertExpressionAst convertExpressionAst) => DefaultVisit(convertExpressionAst);734 735 /// <summary/>736 public virtual object VisitConstantExpression(ConstantExpressionAst constantExpressionAst) => DefaultVisit(constantExpressionAst);737 738 /// <summary/>739 public virtual object VisitStringConstantExpression(StringConstantExpressionAst stringConstantExpressionAst) => DefaultVisit(stringConstantExpressionAst);740 741 /// <summary/>742 public virtual object VisitSubExpression(SubExpressionAst subExpressionAst) => DefaultVisit(subExpressionAst);743 744 /// <summary/>745 public virtual object VisitUsingExpression(UsingExpressionAst usingExpressionAst) => DefaultVisit(usingExpressionAst);746 747 /// <summary/>748 public virtual object VisitVariableExpression(VariableExpressionAst variableExpressionAst) => DefaultVisit(variableExpressionAst);749 750 /// <summary/>751 public virtual object VisitTypeExpression(TypeExpressionAst typeExpressionAst) => DefaultVisit(typeExpressionAst);752 753 /// <summary/>754 public virtual object VisitMemberExpression(MemberExpressionAst memberExpressionAst) => DefaultVisit(memberExpressionAst);755 756 /// <summary/>757 public virtual object VisitInvokeMemberExpression(InvokeMemberExpressionAst invokeMemberExpressionAst) => DefaultVisit(invokeMemberExpressionAst);758 759 /// <summary/>760 public virtual object VisitArrayExpression(ArrayExpressionAst arrayExpressionAst) => DefaultVisit(arrayExpressionAst);761 762 /// <summary/>763 public virtual object VisitArrayLiteral(ArrayLiteralAst arrayLiteralAst) => DefaultVisit(arrayLiteralAst);764 765 /// <summary/>766 public virtual object VisitHashtable(HashtableAst hashtableAst) => DefaultVisit(hashtableAst);767 768 /// <summary/>769 public virtual object VisitParenExpression(ParenExpressionAst parenExpressionAst) => DefaultVisit(parenExpressionAst);770 771 /// <summary/>772 public virtual object VisitExpandableStringExpression(ExpandableStringExpressionAst expandableStringExpressionAst) => DefaultVisit(expandableStringExpressionAst);773 774 /// <summary/>775 public virtual object VisitIndexExpression(IndexExpressionAst indexExpressionAst) => DefaultVisit(indexExpressionAst);776 777 /// <summary/>778 public virtual object VisitAttributedExpression(AttributedExpressionAst attributedExpressionAst) => DefaultVisit(attributedExpressionAst);779 780 /// <summary/>781 public virtual object VisitBlockStatement(BlockStatementAst blockStatementAst) => DefaultVisit(blockStatementAst);782 783 /// <summary/>784 public virtual object VisitFunctionDefinition(FunctionDefinitionAst functionDefinitionAst) => DefaultVisit(functionDefinitionAst);785 786 /// <summary/>787 public virtual object VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst) => DefaultVisit(scriptBlockExpressionAst);788 }789 790 /// <summary>791 /// Default implementation of <see cref="ICustomAstVisitor2"/> interface.792 /// </summary>793 public abstract class DefaultCustomAstVisitor2 : DefaultCustomAstVisitor, ICustomAstVisitor2794 {795 /// <summary/>796 public virtual object VisitPropertyMember(PropertyMemberAst propertyMemberAst) => DefaultVisit(propertyMemberAst);797 798 /// <summary/>799 public virtual object VisitBaseCtorInvokeMemberExpression(BaseCtorInvokeMemberExpressionAst baseCtorInvokeMemberExpressionAst) => DefaultVisit(baseCtorInvokeMemberExpressionAst);800 801 /// <summary/>802 public virtual object VisitUsingStatement(UsingStatementAst usingStatement) => DefaultVisit(usingStatement);803 804 /// <summary/>805 public virtual object VisitConfigurationDefinition(ConfigurationDefinitionAst configurationAst) => DefaultVisit(configurationAst);806 807 /// <summary/>808 public virtual object VisitDynamicKeywordStatement(DynamicKeywordStatementAst dynamicKeywordAst) => DefaultVisit(dynamicKeywordAst);809 810 /// <summary/>811 public virtual object VisitTypeDefinition(TypeDefinitionAst typeDefinitionAst) => DefaultVisit(typeDefinitionAst);812 813 /// <summary/>814 public virtual object VisitFunctionMember(FunctionMemberAst functionMemberAst) => DefaultVisit(functionMemberAst);815 816 /// <summary/>817 public virtual object VisitTernaryExpression(TernaryExpressionAst ternaryExpressionAst) => DefaultVisit(ternaryExpressionAst);818 819 /// <summary/>820 public virtual object VisitPipelineChain(PipelineChainAst statementChainAst) => DefaultVisit(statementChainAst);821 }822}823 