Exemple #1
0
    public System.Object VisitScriptBlockExpression(System.Management.Automation.Language.ScriptBlockExpressionAst scriptBlockExpressionAst)
    {
        IScriptExtent mappedExtent = MapExtent(scriptBlockExpressionAst.Extent);

        ScriptBlockAst mappedScriptBlock = (ScriptBlockAst)VisitScriptBlock(scriptBlockExpressionAst.ScriptBlock);

        return(new ScriptBlockExpressionAst(mappedExtent, mappedScriptBlock));
    }
 /// <summary/>
 public virtual object VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst)
 {
     return _decorated.VisitScriptBlockExpression(scriptBlockExpressionAst);
 }
 /// <summary>
 /// Visit ScriptBlockExpression
 /// </summary>
 /// <param name="scriptBlockExpressionAst"></param>
 /// <returns></returns>
 public object VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst)
 {
     // Don't recurse into the script block, it's variables are distinct from the script block
     // we're currently analyzing.
     return null;
 }
 public override AstVisitAction VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst)
 {
     this.ReportError(scriptBlockExpressionAst, () => ParserStrings.ScriptBlockNotSupportedInDataSection, new object[0]);
     return AstVisitAction.Continue;
 }
Exemple #5
0
 public object VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst)
 {
     // The script block is not visited until it is executed, executing a script block expression node simply
     // builds a new script block without analyzing it.
     //
     // A wrapper is returned so we can cache the script block and return clones that are pre-compiled if
     // the expression is evaluated more than once (e.g. in a loop, or if the containing function/script
     // is called again.)
     return Expression.Call(
         Expression.Constant(new ScriptBlockExpressionWrapper(scriptBlockExpressionAst.ScriptBlock)),
         CachedReflectionInfo.ScriptBlockExpressionWrapper_GetScriptBlock,
         _executionContextParameter,
         ExpressionCache.Constant(false)
         );
 }
Exemple #6
0
 public object VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst)
 {
     return(ScriptBlock.Create(scriptBlockExpressionAst.Extent.Text));
 }
 public object VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst)
 {
     return new ScriptBlock(scriptBlockExpressionAst.ScriptBlock, false);
 }
Exemple #8
0
            public override AstVisitAction VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst)
            {
                if (scriptBlockExpressionAst.Extent.ContainsLineAndColumn(_breakpoint.Line, _breakpoint.Column))
                {
                    _result = true;
                    return AstVisitAction.StopVisit;
                }

                // We don't need to visit the body, we're just checking extents of the topmost functions.
                // We'll visit the bodies eventually, but only when the nested function/script is executed.
                return AstVisitAction.SkipChildren;
            }
Exemple #9
0
 /// <summary/>
 public virtual AstVisitAction VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst) => DefaultVisit(scriptBlockExpressionAst);
 public override AstVisitAction VisitScriptBlockExpression(ScriptBlockExpressionAst ast)
 {
     return(CheckScriptBlock(ast));
 }
 /// <summary/>
 public virtual object VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst)
 {
     return(null);
 }
Exemple #12
0
 public object VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst)
 {
     return Expression.Call(Expression.Constant(new ScriptBlockExpressionWrapper(scriptBlockExpressionAst.ScriptBlock)), CachedReflectionInfo.ScriptBlockExpressionWrapper_GetScriptBlock, _executionContextParameter, ExpressionCache.Constant(false));
 }
Exemple #13
0
 public object VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst)
 {
     return(this.CheckingAttributeArgument);
 }
 public override AstVisitAction VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst)
 {
     return AstVisitAction.SkipChildren;
 }
Exemple #15
0
 public override AstVisitAction VisitScriptBlockExpression(ScriptBlockExpressionAst ast) { return CheckParent(ast); }
Exemple #16
0
 public override AstVisitAction VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst)
 {
     _symbolTable.EnterScope(scriptBlockExpressionAst.ScriptBlock, ScopeType.ScriptBlock);
     return AstVisitAction.Continue;
 }
Exemple #17
0
 public override AstVisitAction VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst)
 {
     ConfigurationDefinitionAst configAst = Ast.GetAncestorAst<ConfigurationDefinitionAst>(scriptBlockExpressionAst);
     //
     // Check within a configuration statement, if there is undefined DSC resources (DynamicKeyword) was used
     // for example,
     //
     //      Configuration TestConfig
     //      {
     //          SomeDSCResource bla
     //          {
     //              Property = "value"
     //          }
     //      }
     //
     // SomeDSCResource is not default DSC Resource, in this case, a parse error should be generated to
     // indicate that SomeDSCResource is not defined. Parser generates a command call (CommandAst) to function
     // "SomeDSCResource" followed by a ScriptBlockExpressionAst. Following code check if there are patterns
     // that one ScriptBlockExpressionAst follows a CommandAst, and report Parser error(s) if true.
     //
     if (configAst != null)
     {
         var ast = scriptBlockExpressionAst.Parent; // Traverse all ancestor ast to find NamedBlockAst
         PipelineAst statementAst = null; // The nearest ancestor PipelineAst of the 'scriptBlockExpressionAst'
         int ancestorNodeLevel = 0; // The nearest ancestor PipelineAst should be two level above the 'scriptBlockExpressionAst'
         while ((ast != null) && (ancestorNodeLevel <= 2))
         {
             //
             // Find nearest ancestor NamedBlockAst
             //
             var namedBlockedAst = ast as NamedBlockAst;
             if ((namedBlockedAst != null) && (statementAst != null) && (ancestorNodeLevel == 2))
             {
                 int index = namedBlockedAst.Statements.IndexOf(statementAst);
                 if (index > 0)
                 {
                     //
                     // Check if previous Statement is CommandAst
                     //
                     var pipelineAst = namedBlockedAst.Statements[index - 1] as PipelineAst;
                     if (pipelineAst != null && pipelineAst.PipelineElements.Count == 1)
                     {
                         var commandAst = pipelineAst.PipelineElements[0] as CommandAst;
                         if (commandAst != null &&
                             commandAst.CommandElements.Count <= 2 &&
                             commandAst.DefiningKeyword == null)
                         {
                             // Here indicates a CommandAst followed by a ScriptBlockExpression,
                             // which is invalid if the DSC resource is not defined
                             var commandNameAst = commandAst.CommandElements[0] as StringConstantExpressionAst;
                             if (commandNameAst != null)
                             {
                                 _parser.ReportError(commandNameAst.Extent, () => ParserStrings.ResourceNotDefined, commandNameAst.Extent.Text);
                             }
                         }
                     }
                 }
                 break;
             }
             statementAst = ast as PipelineAst;
             ancestorNodeLevel++;
             ast = ast.Parent;
         }
     }
     return AstVisitAction.Continue;
 }
Exemple #18
0
 public override AstVisitAction VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst)
 {
     if (scriptBlockExpressionAst.Extent.ContainsLineAndColumn(this._breakpoint.Line, this._breakpoint.Column))
     {
         this._result = true;
         return AstVisitAction.StopVisit;
     }
     return AstVisitAction.SkipChildren;
 }
Exemple #19
0
 public virtual AstVisitAction VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst)
 {
     return AstVisitAction.Continue;
 }
 public object VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst)
 {
     throw new UnexpectedElementException();
 }
Exemple #21
0
 /// <summary/>
 public virtual AstVisitAction VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst)
 {
     return(AstVisitAction.Continue);
 }
 public override AstVisitAction VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst)
 {
     this.ReportError(scriptBlockExpressionAst, () => ParserStrings.ScriptBlockNotSupportedInDataSection, new object[0]);
     return(AstVisitAction.Continue);
 }
Exemple #23
0
 public object VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst)
 {
     // Returning a ScriptBlock instance itself is OK, bad stuff only happens
     // when invoking one (which is blocked)
     return(true);
 }
Exemple #24
0
 public override AstVisitAction VisitScriptBlockExpression(ScriptBlockExpressionAst ast)
 {
     return this.CheckScriptBlock(ast);
 }
Exemple #25
0
 public override AstVisitAction VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst)
 {
     _symbolTable.EnterScope(scriptBlockExpressionAst.ScriptBlock, ScopeType.ScriptBlock);
     return(AstVisitAction.Continue);
 }
Exemple #26
0
 public object VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst)
 {
     CheckIsConstant(scriptBlockExpressionAst, "Caller to verify ast is constant");
     return(new ScriptBlock(scriptBlockExpressionAst.ScriptBlock, isFilter: false));
 }
Exemple #27
0
 public object VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst)
 {
     return null;
 }
Exemple #28
0
 public object VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst)
 {
     // A script block expression is a constant when we're generating metadata, but when
     // we're generating code, we need to create new script blocks so we can't use a constant.
     // Also - we have no way to describe a script block when generating .Net metadata, so
     // we must disallow script blocks as attribute arguments on/inside a class.
     return CheckingAttributeArgument && !CheckingClassAttributeArguments;
 }
 /// <summary>
 /// Visit ScriptBlock
 /// </summary>
 /// <param name="scriptBlockExpressionAst"></param>
 /// <returns></returns>
 public override AstVisitAction VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst)
 {
     // We don't want to discover any variables in script block expressions - they get their own scope.
     return AstVisitAction.Continue;
 }
Exemple #30
0
 public object VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst)
 {
     CheckIsConstant(scriptBlockExpressionAst, "Caller to verify ast is constant");
     return new ScriptBlock(scriptBlockExpressionAst.ScriptBlock, isFilter: false);
 }
        public override AstVisitAction VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst)
        {
            ThrowError(new ScriptBlockToPowerShellNotSupportedException(
                           "CantConvertWithScriptBlocks",
                           null,
                           AutomationExceptions.CantConvertWithScriptBlocks),
                       scriptBlockExpressionAst);

            return AstVisitAction.SkipChildren;
        }
Exemple #32
0
 public object VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst)
 {
     // Returning a ScriptBlock instance itself is OK, bad stuff only happens
     // when invoking one (which is blocked)
     return true;
 }
Exemple #33
0
 public override object VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst)
 {
     _symbolResolver._symbolTable.LeaveScope();
     return null;
 }
Exemple #34
0
 public object VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst)
 {
     return ScriptBlock.Create(scriptBlockExpressionAst.Extent.Text);
 }
Exemple #35
0
        public override AstVisitAction VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst)
        {
            this._pipelineCommandRuntime.WriteObject(new ScriptBlock(scriptBlockExpressionAst.ScriptBlock));

            return AstVisitAction.SkipChildren;
        }
Exemple #36
0
 public override object VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst)
 {
     _symbolResolver._symbolTable.LeaveScope();
     return(null);
 }
Exemple #37
0
 public override AstVisitAction VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst)
 {
     throw new NotImplementedException(); //VisitScriptBlockExpression(scriptBlockExpressionAst);
 }
 /// <summary>
 /// Similar to visitnamedblock
 /// </summary>
 /// <param name="sbAst"></param>
 /// <returns></returns>
 public override AstVisitAction VisitScriptBlockExpression(ScriptBlockExpressionAst sbAst)
 {
     return VisitActionHelper(sbAst);
 }
 public object VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst)
 {
     return this.CheckingAttributeArgument;
 }
        public object VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst)
        {
            var endBlock = scriptBlockExpressionAst.ScriptBlock.EndBlock;
            foreach (var statement in endBlock.Statements)
            {
                Visit(statement);
            }

            return unit;
        }