示例#1
0
        internal override AstVisitAction InternalVisit(AstVisitor visitor)
        {
            AstVisitAction action = visitor.VisitCommandExpression(this);

            switch (action)
            {
            case AstVisitAction.SkipChildren:
                return(AstVisitAction.Continue);

            case AstVisitAction.Continue:
                action = this.Expression.InternalVisit(visitor);
                break;
            }
            if (action == AstVisitAction.Continue)
            {
                foreach (RedirectionAst ast in base.Redirections)
                {
                    if (action == AstVisitAction.Continue)
                    {
                        action = ast.InternalVisit(visitor);
                    }
                }
            }
            return(action);
        }
示例#2
0
文件: Ast.cs 项目: JamesTryand/Pash2
        public void Visit(AstVisitor astVisitor)
        {
            Queue <Ast> queue = new Queue <Ast>();

            queue.Enqueue(this);

            while (queue.Any())
            {
                var            nextItem       = queue.Dequeue();
                AstVisitAction astVisitAction = DispatchVisitor(astVisitor, nextItem);

                switch (astVisitAction)
                {
                case AstVisitAction.Continue:
                    foreach (var item in nextItem.Children)
                    {
                        queue.Enqueue(item);
                    }
                    break;

                case AstVisitAction.SkipChildren:
                    break;

                case AstVisitAction.StopVisit:
                    return;

                default:
                    throw new InvalidOperationException(astVisitAction.ToString());
                }
            }
        }
示例#3
0
        internal override AstVisitAction InternalVisit(AstVisitor visitor)
        {
            AstVisitAction action = visitor.VisitTryStatement(this);

            switch (action)
            {
            case AstVisitAction.SkipChildren:
                return(AstVisitAction.Continue);

            case AstVisitAction.Continue:
                action = this.Body.InternalVisit(visitor);
                break;
            }
            if (action == AstVisitAction.Continue)
            {
                foreach (CatchClauseAst ast in this.CatchClauses)
                {
                    action = ast.InternalVisit(visitor);
                    if (action != AstVisitAction.Continue)
                    {
                        break;
                    }
                }
            }
            if ((action == AstVisitAction.Continue) && (this.Finally != null))
            {
                action = this.Finally.InternalVisit(visitor);
            }
            return(action);
        }
        internal override AstVisitAction InternalVisit(AstVisitor visitor)
        {
            AstVisitAction action = visitor.VisitInvokeMemberExpression(this);

            switch (action)
            {
            case AstVisitAction.SkipChildren:
                return(AstVisitAction.Continue);

            case AstVisitAction.Continue:
                action = base.Expression.InternalVisit(visitor);
                break;
            }
            if (action == AstVisitAction.Continue)
            {
                action = base.Member.InternalVisit(visitor);
            }
            if ((action == AstVisitAction.Continue) && (this.Arguments != null))
            {
                foreach (ExpressionAst ast in this.Arguments)
                {
                    action = ast.InternalVisit(visitor);
                    if (action != AstVisitAction.Continue)
                    {
                        return(action);
                    }
                }
            }
            return(action);
        }
示例#5
0
        public void Visit(AstVisitor astVisitor)
        {
            Queue <Ast> queue = new Queue <Ast>();

            queue.Enqueue(this);

            while (queue.Any())
            {
                var            nextAst        = queue.Dequeue();
                AstVisitAction astVisitAction = astVisitor.Visit(nextAst);

                switch (astVisitAction)
                {
                case AstVisitAction.Continue:
                    queue.EnqueueAll(nextAst.Children);
                    break;

                case AstVisitAction.SkipChildren:
                    break;

                case AstVisitAction.StopVisit:
                    return;

                default:
                    throw new InvalidOperationException(astVisitAction.ToString());
                }
            }
        }
示例#6
0
        internal override AstVisitAction InternalVisit(AstVisitor visitor)
        {
            AstVisitAction action = visitor.VisitParamBlock(this);

            switch (action)
            {
            case AstVisitAction.SkipChildren:
                return(AstVisitAction.Continue);

            case AstVisitAction.Continue:
                foreach (AttributeAst ast in this.Attributes)
                {
                    action = ast.InternalVisit(visitor);
                    if (action != AstVisitAction.Continue)
                    {
                        break;
                    }
                }
                break;
            }
            if (action == AstVisitAction.Continue)
            {
                foreach (ParameterAst ast2 in this.Parameters)
                {
                    action = ast2.InternalVisit(visitor);
                    if (action != AstVisitAction.Continue)
                    {
                        return(action);
                    }
                }
            }
            return(action);
        }
        internal override AstVisitAction InternalVisit(AstVisitor visitor)
        {
            AstVisitAction action = visitor.VisitFunctionDefinition(this);

            switch (action)
            {
            case AstVisitAction.SkipChildren:
                return(AstVisitAction.Continue);

            case AstVisitAction.Continue:
                if (this.Parameters != null)
                {
                    foreach (ParameterAst ast in this.Parameters)
                    {
                        action = ast.InternalVisit(visitor);
                        if (action != AstVisitAction.Continue)
                        {
                            break;
                        }
                    }
                }
                if (action == AstVisitAction.Continue)
                {
                    action = this.Body.InternalVisit(visitor);
                }
                break;
            }
            return(action);
        }
示例#8
0
        internal override AstVisitAction InternalVisit(AstVisitor visitor)
        {
            AstVisitAction action = visitor.VisitForStatement(this);

            if (action == AstVisitAction.SkipChildren)
            {
                return(AstVisitAction.Continue);
            }
            if ((action == AstVisitAction.Continue) && (this.Initializer != null))
            {
                action = this.Initializer.InternalVisit(visitor);
            }
            if ((action == AstVisitAction.Continue) && (base.Condition != null))
            {
                action = base.Condition.InternalVisit(visitor);
            }
            if ((action == AstVisitAction.Continue) && (this.Iterator != null))
            {
                action = this.Iterator.InternalVisit(visitor);
            }
            if (action == AstVisitAction.Continue)
            {
                action = base.Body.InternalVisit(visitor);
            }
            return(action);
        }
示例#9
0
        internal override AstVisitAction InternalVisit(AstVisitor visitor)
        {
            AstVisitAction action = visitor.VisitCommand(this);

            switch (action)
            {
            case AstVisitAction.SkipChildren:
                return(AstVisitAction.Continue);

            case AstVisitAction.Continue:
                foreach (CommandElementAst ast in this.CommandElements)
                {
                    action = ast.InternalVisit(visitor);
                    if (action != AstVisitAction.Continue)
                    {
                        break;
                    }
                }
                break;
            }
            if (action == AstVisitAction.Continue)
            {
                foreach (RedirectionAst ast2 in base.Redirections)
                {
                    if (action == AstVisitAction.Continue)
                    {
                        action = ast2.InternalVisit(visitor);
                    }
                }
            }
            return(action);
        }
示例#10
0
        internal override AstVisitAction InternalVisit(AstVisitor visitor)
        {
            AstVisitAction action = visitor.VisitSwitchStatement(this);

            switch (action)
            {
            case AstVisitAction.SkipChildren:
                return(AstVisitAction.Continue);

            case AstVisitAction.Continue:
                action = base.Condition.InternalVisit(visitor);
                break;
            }
            if (action == AstVisitAction.Continue)
            {
                foreach (Tuple <ExpressionAst, StatementBlockAst> tuple in this.Clauses)
                {
                    action = tuple.Item1.InternalVisit(visitor);
                    if (action != AstVisitAction.Continue)
                    {
                        break;
                    }
                    action = tuple.Item2.InternalVisit(visitor);
                    if (action != AstVisitAction.Continue)
                    {
                        break;
                    }
                }
            }
            if ((action == AstVisitAction.Continue) && (this.Default != null))
            {
                action = this.Default.InternalVisit(visitor);
            }
            return(action);
        }
示例#11
0
        internal override AstVisitAction InternalVisit(AstVisitor visitor)
        {
            AstVisitAction action = visitor.VisitAttribute(this);

            switch (action)
            {
            case AstVisitAction.SkipChildren:
                return(AstVisitAction.Continue);

            case AstVisitAction.Continue:
                foreach (ExpressionAst ast in this.PositionalArguments)
                {
                    action = ast.InternalVisit(visitor);
                    if (action != AstVisitAction.Continue)
                    {
                        break;
                    }
                }
                break;
            }
            if (action == AstVisitAction.Continue)
            {
                foreach (NamedAttributeArgumentAst ast2 in this.NamedArguments)
                {
                    action = ast2.InternalVisit(visitor);
                    if (action != AstVisitAction.Continue)
                    {
                        return(action);
                    }
                }
            }
            return(action);
        }
示例#12
0
        internal override AstVisitAction InternalVisit(AstVisitor visitor)
        {
            AstVisitAction action = visitor.VisitIfStatement(this);

            switch (action)
            {
            case AstVisitAction.SkipChildren:
                return(AstVisitAction.Continue);

            case AstVisitAction.Continue:
                foreach (Tuple <PipelineBaseAst, StatementBlockAst> tuple in this.Clauses)
                {
                    action = tuple.Item1.InternalVisit(visitor);
                    if (action != AstVisitAction.Continue)
                    {
                        break;
                    }
                    action = tuple.Item2.InternalVisit(visitor);
                    if (action != AstVisitAction.Continue)
                    {
                        break;
                    }
                }
                break;
            }
            if ((action == AstVisitAction.Continue) && (this.ElseClause != null))
            {
                action = this.ElseClause.InternalVisit(visitor);
            }
            return(action);
        }
示例#13
0
        internal override AstVisitAction InternalVisit(AstVisitor visitor)
        {
            AstVisitAction action = visitor.VisitParameter(this);

            switch (action)
            {
            case AstVisitAction.SkipChildren:
                return(AstVisitAction.Continue);

            case AstVisitAction.Continue:
                foreach (AttributeBaseAst ast in this.Attributes)
                {
                    action = ast.InternalVisit(visitor);
                    if (action != AstVisitAction.Continue)
                    {
                        break;
                    }
                }
                break;
            }
            if (action == AstVisitAction.Continue)
            {
                action = this.Name.InternalVisit(visitor);
            }
            if ((action == AstVisitAction.Continue) && (this.DefaultValue != null))
            {
                action = this.DefaultValue.InternalVisit(visitor);
            }
            return(action);
        }
示例#14
0
 internal static AstVisitAction InternalVisit(AstVisitor visitor, ReadOnlyCollection<TrapStatementAst> traps, ReadOnlyCollection<StatementAst> statements, AstVisitAction action)
 {
     if (action == AstVisitAction.SkipChildren)
     {
         return AstVisitAction.Continue;
     }
     if ((action == AstVisitAction.Continue) && (traps != null))
     {
         foreach (TrapStatementAst ast in traps)
         {
             action = ast.InternalVisit(visitor);
             if (action != AstVisitAction.Continue)
             {
                 break;
             }
         }
     }
     if ((action == AstVisitAction.Continue) && (statements != null))
     {
         foreach (StatementAst ast2 in statements)
         {
             action = ast2.InternalVisit(visitor);
             if (action != AstVisitAction.Continue)
             {
                 return action;
             }
         }
     }
     return action;
 }
示例#15
0
        internal override AstVisitAction InternalVisit(AstVisitor visitor)
        {
            AstVisitAction action = visitor.VisitScriptBlock(this);

            if (action == AstVisitAction.SkipChildren)
            {
                return(AstVisitAction.Continue);
            }
            if ((action == AstVisitAction.Continue) && (this.ParamBlock != null))
            {
                action = this.ParamBlock.InternalVisit(visitor);
            }
            if ((action == AstVisitAction.Continue) && (this.DynamicParamBlock != null))
            {
                action = this.DynamicParamBlock.InternalVisit(visitor);
            }
            if ((action == AstVisitAction.Continue) && (this.BeginBlock != null))
            {
                action = this.BeginBlock.InternalVisit(visitor);
            }
            if ((action == AstVisitAction.Continue) && (this.ProcessBlock != null))
            {
                action = this.ProcessBlock.InternalVisit(visitor);
            }
            if ((action == AstVisitAction.Continue) && (this.EndBlock != null))
            {
                action = this.EndBlock.InternalVisit(visitor);
            }
            return(action);
        }
示例#16
0
        internal override AstVisitAction InternalVisit(AstVisitor visitor)
        {
            AstVisitAction action = visitor.VisitHashtable(this);

            switch (action)
            {
            case AstVisitAction.SkipChildren:
                return(AstVisitAction.Continue);

            case AstVisitAction.Continue:
                foreach (Tuple <ExpressionAst, StatementAst> tuple in this.KeyValuePairs)
                {
                    action = tuple.Item1.InternalVisit(visitor);
                    if (action != AstVisitAction.Continue)
                    {
                        return(action);
                    }
                    action = tuple.Item2.InternalVisit(visitor);
                    if (action != AstVisitAction.Continue)
                    {
                        return(action);
                    }
                }
                break;
            }
            return(action);
        }
示例#17
0
 internal AstVisitAction CheckForPostAction(Ast ast, AstVisitAction action)
 {
     var postActionHandler = this as IAstPostVisitHandler;
     if (postActionHandler != null)
     {
         postActionHandler.PostVisit(ast);
     }
     return action;
 }
示例#18
0
        internal override AstVisitAction InternalVisit(AstVisitor visitor)
        {
            AstVisitAction action = visitor.VisitErrorStatement(this);

            if (action == AstVisitAction.SkipChildren)
            {
                return(AstVisitAction.Continue);
            }
            if ((action == AstVisitAction.Continue) && (this.NestedAst != null))
            {
                foreach (Ast ast in this.NestedAst)
                {
                    action = ast.InternalVisit(visitor);
                    if (action != AstVisitAction.Continue)
                    {
                        break;
                    }
                }
            }
            if ((action == AstVisitAction.Continue) && (this.Flags != null))
            {
                foreach (Tuple <Token, Ast> tuple in this.Flags.Values)
                {
                    if (tuple.Item2 != null)
                    {
                        action = tuple.Item2.InternalVisit(visitor);
                        if (action != AstVisitAction.Continue)
                        {
                            break;
                        }
                    }
                }
            }
            if ((action == AstVisitAction.Continue) && (this.Conditions != null))
            {
                foreach (Ast ast2 in this.Conditions)
                {
                    action = ast2.InternalVisit(visitor);
                    if (action != AstVisitAction.Continue)
                    {
                        break;
                    }
                }
            }
            if ((action == AstVisitAction.Continue) && (this.Bodies != null))
            {
                foreach (Ast ast3 in this.Bodies)
                {
                    action = ast3.InternalVisit(visitor);
                    if (action != AstVisitAction.Continue)
                    {
                        return(action);
                    }
                }
            }
            return(action);
        }
示例#19
0
        internal AstVisitAction CheckForPostAction(Ast ast, AstVisitAction action)
        {
            var postActionHandler = this as IAstPostVisitHandler;

            if (postActionHandler != null)
            {
                postActionHandler.PostVisit(ast);
            }
            return(action);
        }
示例#20
0
        internal override AstVisitAction InternalVisit(AstVisitor visitor)
        {
            AstVisitAction action = visitor.VisitTypeExpression(this);

            if (action != AstVisitAction.SkipChildren)
            {
                return(action);
            }
            return(AstVisitAction.Continue);
        }
示例#21
0
        internal override AstVisitAction InternalVisit(AstVisitor visitor)
        {
            AstVisitAction action = visitor.VisitMergingRedirection(this);

            if (action != AstVisitAction.SkipChildren)
            {
                return(action);
            }
            return(AstVisitAction.Continue);
        }
示例#22
0
        protected AstVisitAction CheckScriptBlock(Ast ast)
        {
            AstVisitAction skipChildren = this.Check(ast);

            if ((skipChildren == AstVisitAction.Continue) && !this._searchNestedScriptBlocks)
            {
                skipChildren = AstVisitAction.SkipChildren;
            }
            return(skipChildren);
        }
        internal override AstVisitAction InternalVisit(AstVisitor visitor)
        {
            AstVisitAction action = visitor.VisitScriptBlockExpression(this);
            switch (action)
            {
                case AstVisitAction.SkipChildren:
                    return AstVisitAction.Continue;

                case AstVisitAction.Continue:
                    action = this.ScriptBlock.InternalVisit(visitor);
                    break;
            }
            return action;
        }
示例#24
0
        internal override AstVisitAction InternalVisit(AstVisitor visitor)
        {
            AstVisitAction action = visitor.VisitReturnStatement(this);

            if (action == AstVisitAction.SkipChildren)
            {
                return(AstVisitAction.Continue);
            }
            if ((action == AstVisitAction.Continue) && (this.Pipeline != null))
            {
                action = this.Pipeline.InternalVisit(visitor);
            }
            return(action);
        }
示例#25
0
        internal override AstVisitAction InternalVisit(AstVisitor visitor)
        {
            AstVisitAction action = visitor.VisitCommandParameter(this);

            if (action == AstVisitAction.SkipChildren)
            {
                return(AstVisitAction.Continue);
            }
            if ((this.Argument != null) && (action == AstVisitAction.Continue))
            {
                action = this.Argument.InternalVisit(visitor);
            }
            return(action);
        }
        internal override AstVisitAction InternalVisit(AstVisitor visitor)
        {
            AstVisitAction action = visitor.VisitNamedAttributeArgument(this);

            switch (action)
            {
            case AstVisitAction.SkipChildren:
                return(AstVisitAction.Continue);

            case AstVisitAction.Continue:
                action = this.Argument.InternalVisit(visitor);
                break;
            }
            return(action);
        }
示例#27
0
        internal override AstVisitAction InternalVisit(AstVisitor visitor)
        {
            AstVisitAction action = visitor.VisitDataStatement(this);

            switch (action)
            {
            case AstVisitAction.SkipChildren:
                return(AstVisitAction.Continue);

            case AstVisitAction.Continue:
                action = this.Body.InternalVisit(visitor);
                break;
            }
            return(action);
        }
示例#28
0
        internal override AstVisitAction InternalVisit(AstVisitor visitor)
        {
            AstVisitAction action = visitor.VisitUnaryExpression(this);

            switch (action)
            {
            case AstVisitAction.SkipChildren:
                return(AstVisitAction.Continue);

            case AstVisitAction.Continue:
                action = this.Child.InternalVisit(visitor);
                break;
            }
            return(action);
        }
示例#29
0
        internal override AstVisitAction InternalVisit(AstVisitor visitor)
        {
            AstVisitAction action = visitor.VisitFileRedirection(this);

            switch (action)
            {
            case AstVisitAction.SkipChildren:
                return(AstVisitAction.Continue);

            case AstVisitAction.Continue:
                action = this.Location.InternalVisit(visitor);
                break;
            }
            return(action);
        }
示例#30
0
        internal override AstVisitAction InternalVisit(AstVisitor visitor)
        {
            AstVisitAction action = visitor.VisitNamedBlock(this);

            switch (action)
            {
            case AstVisitAction.SkipChildren:
                return(AstVisitAction.Continue);

            case AstVisitAction.Continue:
                action = StatementBlockAst.InternalVisit(visitor, this.Traps, this.Statements, action);
                break;
            }
            return(action);
        }
示例#31
0
        internal override AstVisitAction InternalVisit(AstVisitor visitor)
        {
            AstVisitAction action = visitor.VisitTrap(this);

            if (action == AstVisitAction.SkipChildren)
            {
                return(AstVisitAction.Continue);
            }
            if ((action == AstVisitAction.Continue) && (this.TrapType != null))
            {
                action = this.TrapType.InternalVisit(visitor);
            }
            if (action == AstVisitAction.Continue)
            {
                action = this.Body.InternalVisit(visitor);
            }
            return(action);
        }
        internal override AstVisitAction InternalVisit(AstVisitor visitor)
        {
            AstVisitAction action = visitor.VisitAssignmentStatement(this);

            switch (action)
            {
            case AstVisitAction.SkipChildren:
                return(AstVisitAction.Continue);

            case AstVisitAction.Continue:
                action = this.Left.InternalVisit(visitor);
                break;
            }
            if (action == AstVisitAction.Continue)
            {
                action = this.Right.InternalVisit(visitor);
            }
            return(action);
        }