public override AstVisitAction VisitMergingRedirection(MergingRedirectionAst redirectionAst)
 {
     if (redirectionAst.ToStream != RedirectionStream.Output)
     {
         ThrowError(new ScriptBlockToPowerShellNotSupportedException("CanConvertOneOutputErrorRedir", null, AutomationExceptions.CanConvertOneOutputErrorRedir, new object[0]), redirectionAst);
     }
     return AstVisitAction.Continue;
 }
 /// <summary/>
 public virtual object VisitMergingRedirection(MergingRedirectionAst mergingRedirectionAst)
 {
     return _decorated.VisitMergingRedirection(mergingRedirectionAst);
 }
 /// <summary>
 /// Visit merging redirection
 /// </summary>
 /// <param name="mergingRedirectionAst"></param>
 /// <returns></returns>
 public object VisitMergingRedirection(MergingRedirectionAst mergingRedirectionAst)
 {
     return null;
 }
Example #4
0
 public override AstVisitAction VisitMergingRedirection(MergingRedirectionAst ast) { return CheckParent(ast); }
Example #5
0
 public object VisitMergingRedirection(MergingRedirectionAst mergingRedirectionAst)
 {
     return(false);
 }
Example #6
0
 public object VisitMergingRedirection(MergingRedirectionAst mergingRedirectionAst)
 {
     throw PSTraceSource.NewArgumentException("ast");
 }
Example #7
0
 public override AstVisitAction VisitMergingRedirection(MergingRedirectionAst ast)
 {
     return(Check(ast));
 }
Example #8
0
 public virtual AstVisitAction VisitMergingRedirection(MergingRedirectionAst redirectionAst)
 {
     return AstVisitAction.Continue;
 }
 public override AstVisitAction VisitMergingRedirection(MergingRedirectionAst mergingRedirectionAst)
 {
     this.ReportError(mergingRedirectionAst, () => ParserStrings.RedirectionNotSupportedInDataSection, new object[0]);
     return(AstVisitAction.Continue);
 }
 public object VisitMergingRedirection(MergingRedirectionAst mergingRedirectionAst) { throw new UnexpectedElementException(); }
Example #11
0
 /// <summary/>
 public virtual AstVisitAction VisitMergingRedirection(MergingRedirectionAst redirectionAst) => DefaultVisit(redirectionAst);
Example #12
0
 public object VisitMergingRedirection(MergingRedirectionAst mergingRedirectionAst)
 {
     return new MergingRedirection(mergingRedirectionAst.FromStream, mergingRedirectionAst.ToStream);
 }
Example #13
0
 private RedirectionAst RedirectionRule(RedirectionToken redirectionToken, RedirectionAst[] redirections, ref IScriptExtent extent)
 {
     RedirectionAst fileRedirectionAst;
     string allStream;
     FileRedirectionToken fileRedirectionToken = redirectionToken as FileRedirectionToken;
     if (fileRedirectionToken != null || redirectionToken as InputRedirectionToken != null)
     {
         ExpressionAst singleCommandArgument = this.GetSingleCommandArgument(Parser.CommandArgumentContext.FileName);
         if (singleCommandArgument == null)
         {
             this.ReportError(Parser.After(redirectionToken), ParserStrings.MissingFileSpecification, new object[0]);
             singleCommandArgument = new ErrorExpressionAst(redirectionToken.Extent, null);
         }
         if (fileRedirectionToken != null)
         {
             fileRedirectionAst = new FileRedirectionAst(Parser.ExtentOf(fileRedirectionToken, singleCommandArgument), fileRedirectionToken.FromStream, singleCommandArgument, fileRedirectionToken.Append);
         }
         else
         {
             object[] text = new object[1];
             text[0] = redirectionToken.Text;
             this.ReportError(redirectionToken.Extent, ParserStrings.RedirectionNotSupported, text);
             extent = Parser.ExtentOf(redirectionToken, singleCommandArgument);
             return null;
         }
     }
     else
     {
         MergingRedirectionToken mergingRedirectionToken = (MergingRedirectionToken)redirectionToken;
         RedirectionStream fromStream = mergingRedirectionToken.FromStream;
         RedirectionStream toStream = mergingRedirectionToken.ToStream;
         if (toStream == RedirectionStream.Output)
         {
             if (fromStream == toStream)
             {
                 object[] objArray = new object[1];
                 objArray[0] = mergingRedirectionToken.Text;
                 this.ReportError(redirectionToken.Extent, ParserStrings.RedirectionNotSupported, objArray);
             }
         }
         else
         {
             object[] text1 = new object[1];
             text1[0] = mergingRedirectionToken.Text;
             this.ReportError(redirectionToken.Extent, ParserStrings.RedirectionNotSupported, text1);
             toStream = RedirectionStream.Output;
         }
         fileRedirectionAst = new MergingRedirectionAst(mergingRedirectionToken.Extent, mergingRedirectionToken.FromStream, toStream);
     }
     if (redirections[(int)fileRedirectionAst.FromStream] != null)
     {
         RedirectionStream redirectionStream = fileRedirectionAst.FromStream;
         if (redirectionStream == RedirectionStream.All)
         {
             allStream = ParserStrings.AllStream;
         }
         else if (redirectionStream == RedirectionStream.Output)
         {
             allStream = ParserStrings.OutputStream;
         }
         else if (redirectionStream == RedirectionStream.Error)
         {
             allStream = ParserStrings.ErrorStream;
         }
         else if (redirectionStream == RedirectionStream.Warning)
         {
             allStream = ParserStrings.WarningStream;
         }
         else if (redirectionStream == RedirectionStream.Verbose)
         {
             allStream = ParserStrings.VerboseStream;
         }
         else if (redirectionStream == RedirectionStream.Debug)
         {
             allStream = ParserStrings.DebugStream;
         }
         else if (redirectionStream == RedirectionStream.Host)
         {
             allStream = ParserStrings.HostStream;
         }
         else
         {
             throw PSTraceSource.NewArgumentOutOfRangeException("result.FromStream", (object)fileRedirectionAst.FromStream);
         }
         object[] objArray1 = new object[1];
         objArray1[0] = allStream;
         this.ReportError(fileRedirectionAst.Extent, ParserStrings.StreamAlreadyRedirected, objArray1);
     }
     else
     {
         redirections[(int)fileRedirectionAst.FromStream] = fileRedirectionAst;
     }
     extent = fileRedirectionAst.Extent;
     return fileRedirectionAst;
 }
Example #14
0
        private RedirectionAst RedirectionRule(RedirectionToken redirectionToken, RedirectionAst[] redirections, ref IScriptExtent extent)
        {
            //G  redirections:
            //G      redirection
            //G      redirections   redirection
            //G  redirection:
            //G      merging-redirection-operator
            //G      file-redirection-operator   redirected-file-name
            //G  redirected-file-name:
            //G      command-argument
            //G      primary-expression

            RedirectionAst result;

            var fileRedirectionToken = redirectionToken as FileRedirectionToken;
            if (fileRedirectionToken != null || (redirectionToken is InputRedirectionToken))
            {
                // get location
                var filename = GetSingleCommandArgument(CommandArgumentContext.FileName);
                if (filename == null)
                {
                    // ErrorRecovery: Just pretend we have a filename and continue parsing.

                    ReportError(After(redirectionToken), () => ParserStrings.MissingFileSpecification);
                    filename = new ErrorExpressionAst(redirectionToken.Extent);
                }

                if (fileRedirectionToken == null)
                {
                    // Must be an input redirection
                    ReportError(redirectionToken.Extent, () => ParserStrings.RedirectionNotSupported, redirectionToken.Text);
                    extent = ExtentOf(redirectionToken, filename);
                    return null;
                }

                result = new FileRedirectionAst(ExtentOf(fileRedirectionToken, filename), fileRedirectionToken.FromStream,
                                                filename, fileRedirectionToken.Append);
            }
            else
            {
                var mergingRedirectionToken = (MergingRedirectionToken)redirectionToken;

                RedirectionStream fromStream = mergingRedirectionToken.FromStream;
                RedirectionStream toStream = mergingRedirectionToken.ToStream;
                if (toStream != RedirectionStream.Output)
                {
                    // Have we seen something like 1>&2 or 2>&3
                    // ErrorRecovery: This is just a semantic error, so no special recovery.

                    ReportError(redirectionToken.Extent, () => ParserStrings.RedirectionNotSupported, mergingRedirectionToken.Text);
                    toStream = RedirectionStream.Output;
                }
                else if (fromStream == toStream)
                {
                    // Make sure 1>&1, 2>&2, etc. is an error.
                    // ErrorRecovery: This is just a semantic error, so no special recovery.

                    ReportError(redirectionToken.Extent, () => ParserStrings.RedirectionNotSupported, mergingRedirectionToken.Text);
                }

                result = new MergingRedirectionAst(mergingRedirectionToken.Extent, mergingRedirectionToken.FromStream, toStream);
            }

            if (redirections[(int)result.FromStream] == null)
            {
                redirections[(int)result.FromStream] = result;
            }
            else
            {
                string errorStream;
                switch (result.FromStream)
                {
                    case RedirectionStream.All: errorStream = ParserStrings.AllStream; break;
                    case RedirectionStream.Output: errorStream = ParserStrings.OutputStream; break;
                    case RedirectionStream.Error: errorStream = ParserStrings.ErrorStream; break;
                    case RedirectionStream.Warning: errorStream = ParserStrings.WarningStream; break;
                    case RedirectionStream.Verbose: errorStream = ParserStrings.VerboseStream; break;
                    case RedirectionStream.Debug: errorStream = ParserStrings.DebugStream; break;
                    case RedirectionStream.Information: errorStream = ParserStrings.InformationStream; break;
                    default:
                        throw PSTraceSource.NewArgumentOutOfRangeException("result.FromStream", result.FromStream);
                }
                ReportError(result.Extent, () => ParserStrings.StreamAlreadyRedirected, errorStream);
            }

            extent = result.Extent;
            return result;
        }
Example #15
0
    public System.Object VisitMergingRedirection(System.Management.Automation.Language.MergingRedirectionAst mergingRedirectionAst)
    {
        IScriptExtent mappedExtent = MapExtent(mergingRedirectionAst.Extent);

        return(new MergingRedirectionAst(mappedExtent, mergingRedirectionAst.FromStream, mergingRedirectionAst.ToStream));
    }
Example #16
0
 public override AstVisitAction VisitMergingRedirection(MergingRedirectionAst ast)
 {
     return this.Check(ast);
 }
Example #17
0
 public override AstVisitAction VisitMergingRedirection(MergingRedirectionAst redirectionAst)
 {
     throw new NotImplementedException(); //VisitMergingRedirection(redirectionAst);
 }
Example #18
0
 public object VisitMergingRedirection(MergingRedirectionAst mergingRedirectionAst) { return AutomationNull.Value; }
Example #19
0
 /// <summary/>
 public virtual object VisitMergingRedirection(MergingRedirectionAst mergingRedirectionAst)
 {
     return(null);
 }
Example #20
0
 public object VisitMergingRedirection(MergingRedirectionAst mergingRedirectionAst) { throw PSTraceSource.NewArgumentException("ast"); }
Example #21
0
 public object VisitMergingRedirection(MergingRedirectionAst mergingRedirectionAst)
 {
     return false;
 }
Example #22
0
        public object VisitMergingRedirection(MergingRedirectionAst mergingRedirectionAst)
        {
            // Most Visit* methods return a Linq.Expression, this method being an exception.  VisitPipeline
            // may be able to pass a compile time array of redirections if all of the redirections are
            // constant.  Merging redirections never vary at runtime, so there is no sense in deferring
            // the creation of the merging object until runtime.

            return new MergingRedirection(mergingRedirectionAst.FromStream, mergingRedirectionAst.ToStream);
        }
Example #23
0
 /// <summary/>
 public virtual AstVisitAction VisitMergingRedirection(MergingRedirectionAst redirectionAst)
 {
     return(AstVisitAction.Continue);
 }
 public override AstVisitAction VisitMergingRedirection(MergingRedirectionAst mergingRedirectionAst)
 {
     this.ReportError(mergingRedirectionAst, () => ParserStrings.RedirectionNotSupportedInDataSection, new object[0]);
     return AstVisitAction.Continue;
 }
Example #25
0
 public object VisitMergingRedirection(MergingRedirectionAst mergingRedirectionAst)
 {
     return(AutomationNull.Value);
 }
 public object VisitMergingRedirection(MergingRedirectionAst mergingRedirectionAst)
 {
     throw new NotImplementedException();
 }