public override AstVisitAction VisitReturnStatement(ReturnStatementAst returnStatementAst)
        {
            var node = VisitSyntaxNode(returnStatementAst.Pipeline);

            _currentNode = new ReturnStatement(node);
            return(AstVisitAction.SkipChildren);
        }
Ejemplo n.º 2
0
 public override object VisitReturnStatement(ReturnStatementAst returnStatementAst)
 {
     // Can't count pipeline elements because here it is abstract. So we have to
     // add extra space in case of pipeline elements
     script_.Write("return ");
     VisitElement(returnStatementAst.Pipeline);
     return(returnStatementAst);
 }
Ejemplo n.º 3
0
        public override AstVisitAction VisitReturnStatement(ReturnStatementAst returnStatementAst)
        {
            if (returnStatementAst.Pipeline == null)
            {
                throw new ReturnException();
            }

            throw new NotImplementedException(); //VisitReturnStatement(returnStatementAst);
        }
Ejemplo n.º 4
0
        public void Return()
        {
            ReturnStatementAst returnStatementAst = ParseStatement("{ return }")
                                                    .PipelineElements[0]
                                                    .Expression
                                                    .ScriptBlock
                                                    .EndBlock
                                                    .Statements[0];

            Assert.Null(returnStatementAst.Pipeline);
        }
Ejemplo n.º 5
0
 public override AstVisitAction VisitReturnStatement(ReturnStatementAst ast)
 {
     return(DoNextAction(ast));
 }
 public override AstVisitAction VisitReturnStatement(ReturnStatementAst returnStatementAst)
 {
     return(Visit(returnStatementAst));
 }
Ejemplo n.º 7
0
 public override AstVisitAction VisitReturnStatement(ReturnStatementAst returnStatementAst)
 {
     throw new NotImplementedException(); //VisitReturnStatement(returnStatementAst);
 }
 object ICustomAstVisitor.VisitReturnStatement(ReturnStatementAst returnStatementAst) => VisitReturnStatement(returnStatementAst);
Ejemplo n.º 9
0
 public object VisitReturnStatement(ReturnStatementAst returnStatementAst)
 {
     return(false);
 }
Ejemplo n.º 10
0
 /// <summary/>
 public virtual AstVisitAction VisitReturnStatement(ReturnStatementAst returnStatementAst) => DefaultVisit(returnStatementAst);
Ejemplo n.º 11
0
 public object VisitReturnStatement(ReturnStatementAst returnStatementAst)
 {
     Console.WriteLine("Visited an ReturnStatementAst.");
     return(returnStatementAst);
 }
Ejemplo n.º 12
0
 public override StatementAst VisitReturnStatement(ReturnStatementAst returnStatementAst)
 => VisitStatement(base.VisitReturnStatement(returnStatementAst));
 public virtual TResult VisitReturnStatement(ReturnStatementAst returnStatementAst) => default(TResult);
 public static ReturnStatementAst Update(this ReturnStatementAst ast, PipelineBaseAst pipeline = null)
 {
     return(new ReturnStatementAst(ast.Extent, pipeline?.Clone() ?? ast.Pipeline?.Clone()));
 }
Ejemplo n.º 15
0
 public override AstVisitAction VisitReturnStatement(ReturnStatementAst returnStatementAst)
 {
     // TODO: add return statement explanation
     AstExplainer(returnStatementAst);
     return(base.VisitReturnStatement(returnStatementAst));
 }
Ejemplo n.º 16
0
 public object VisitReturnStatement(ReturnStatementAst returnStatementAst)
 {
     throw new UnexpectedElementException();
 }
 object ICustomAstVisitor.VisitReturnStatement(ReturnStatementAst returnStatementAst)
 => ProcessRewriter(VisitReturnStatement, returnStatementAst);
 public virtual StatementAst VisitReturnStatement(ReturnStatementAst returnStatementAst)
 {
     return(new ReturnStatementAst(
                returnStatementAst.Extent,
                returnStatementAst.Pipeline?.Rewrite(this, SyntaxKind.Pipeline)));
 }
Ejemplo n.º 19
0
 public object VisitReturnStatement(ReturnStatementAst returnStatementAst)
 {
     throw new NotImplementedException();
 }
Ejemplo n.º 20
0
 public override AstVisitAction VisitReturnStatement(ReturnStatementAst ast)
 {
     return(AstVisitAction.Continue);
 }
 public object VisitReturnStatement(ReturnStatementAst returnStatementAst)
 {
     throw PSTraceSource.NewArgumentException("ast");
 }
        public void ProcessReturnStatement(ReturnStatementAst returnStatement)
        {
            Guard.Against.Null(returnStatement, nameof(returnStatement));
            // return_stmt -> 'return' expr? ';'
            // 无返回值 - 有返回值

            if (!IsInFunction)
            {
                throw new SemanticException($"Cannot return out side of function defination");
            }

            var sessId = Guid.NewGuid().ToString()
            ;

            // load-retval-addr
            if (CodeGenerationEnabled && CurrentFunction.ReturnType != DataType.Void)
            {
                var instruction = Instruction.Pack("arga", 0);
                instruction.Comment = "load retval addr " + sessId;
                CurrentFunction.Builder.Bucket.Add(instruction);
            }

            DataType actualReturnType;

            if (returnStatement.ReturnExpression != null)
            {
                actualReturnType = ProcessExpression(returnStatement.ReturnExpression);
            }
            else
            {
                actualReturnType = DataType.Void;
            }

            if (actualReturnType != CurrentFunction.ReturnType)
            {
                throw new SemanticException(
                          $"Should return {CurrentFunction.ReturnType}, but return {actualReturnType}");
            }

            // returning-expr;
            if (actualReturnType == DataType.Void)
            {
                Debug.Assert(ExpressionBucket.InstructionList.Count == 0);
            }

            if (CodeGenerationEnabled)
            {
                var exprCode = ExpressionBucket.Pop();
                exprCode.ForEach(p => p.Comment += " " + sessId);
                CurrentFunction.Builder.Bucket.AddRange(exprCode);
            }

            // write-retval
            if (CodeGenerationEnabled && CurrentFunction.ReturnType != DataType.Void)
            {
                if (CodeGenerationEnabled)
                {
                    CurrentFunction.Builder.Bucket.Add(new Instruction("store.64"));
                }
            }

            // ret
            if (CodeGenerationEnabled)
            {
                CurrentFunction.Builder.Bucket.Add(new Instruction("ret")
                {
                    Comment = " " + sessId
                });
            }
        }
 public object VisitReturnStatement(ReturnStatementAst returnStatementAst) => null;
Ejemplo n.º 24
0
 public override AstVisitAction VisitReturnStatement(ReturnStatementAst returnStatementAst)
 {
     _wasFound       = true;
     _returnPipeline = returnStatementAst.Pipeline;
     return(AstVisitAction.StopVisit);
 }
Ejemplo n.º 25
0
 public override AstVisitAction VisitReturnStatement(ReturnStatementAst returnStatementAst)
 {
     Console.WriteLine("Visited an ReturnStatementAst.");
     Console.WriteLine("    " + returnStatementAst.ToString().Replace(Environment.NewLine, Environment.NewLine + "    "));
     return(AstVisitAction.Continue);
 }
Ejemplo n.º 26
0
 public virtual object VisitReturnStatement(ReturnStatementAst returnStatementAst)
 {
     VisitElement(returnStatementAst.Pipeline);
     return(returnStatementAst);
 }
        public object VisitReturnStatement(ReturnStatementAst returnStatementAst)
        {
            var newPipeline = VisitElement(returnStatementAst.Pipeline);

            return(new ReturnStatementAst(returnStatementAst.Extent, newPipeline));
        }
Ejemplo n.º 28
0
 public override AstVisitAction VisitReturnStatement(ReturnStatementAst ast)
 {
     return(Check(ast));
 }
Ejemplo n.º 29
0
 // ReturnStatementAst Extension Methods
 // New Methods Available:
 // - CreateNodeFromAST(NodeDepth, NodePosition, Parent) => Creates a Node
 public static ReturnNode CreateNodeFromAst(this ReturnStatementAst _ast, int _depth, int _position, Node _parent, Tree _tree)
 {
     return(new ReturnNode(_ast, _depth, _position, _parent, _tree));
 }
Ejemplo n.º 30
0
 public override AstVisitAction VisitReturnStatement(ReturnStatementAst returnStatementAst) => VisitAst(returnStatementAst);