コード例 #1
0
ファイル: BranchChecking.cs プロジェクト: codehaus/boo
 override public void OnYieldStatement(YieldStatement node)
 {
     if (_state.CurrentTryBlockDepth > 0)
     {
         Error(CompilerErrorFactory.YieldInsideTryBlock(node));
     }
 }
コード例 #2
0
ファイル: YieldStatementTests.cs プロジェクト: tris2481/ILSpy
        public void YieldReturnStatementTest()
        {
            YieldStatement      yieldStmt = ParseUtilCSharp.ParseStatement <YieldStatement>("yield return \"Foo\";");
            PrimitiveExpression expr      = (PrimitiveExpression)yieldStmt.Expression;

            Assert.AreEqual("Foo", expr.Value);
        }
コード例 #3
0
            public override void OnYieldStatement(YieldStatement node)
            {
                noReturnStatement = false;

                IProjectContent pc         = context != null ? context.ProjectContent : ParserService.CurrentProjectContent;
                IReturnType     enumerable = new GetClassReturnType(pc, "System.Collections.Generic.IEnumerable", 1);

                // Prevent creating an infinite number of InferredReturnTypes in inferring cycles
                parentReturnType.expression = new NullLiteralExpression();
                IReturnType returnType;

                if (node.Expression == null)
                {
                    returnType = ConvertVisitor.GetDefaultReturnType(pc);
                }
                else
                {
                    returnType = new BooResolver().GetTypeOfExpression(node.Expression, context);
                }
                if (returnType != null)
                {
                    returnType.GetUnderlyingClass();                     // force to infer type
                }
                if (parentReturnType.expression == null)
                {
                    // inferrence cycle with parentReturnType
                    returnType = new GetClassReturnType(pc, "?", 0);
                }
                parentReturnType.expression = null;

                result = new ConstructedReturnType(enumerable, new IReturnType[] { returnType });
            }
コード例 #4
0
ファイル: InternalMethod.cs プロジェクト: codehaus/boo
 public void AddYieldStatement(YieldStatement stmt)
 {
     if (null == _yieldStatements)
     {
         _yieldStatements = new List();
     }
     _yieldStatements.Add(stmt);
 }
コード例 #5
0
ファイル: YieldStatementImpl.cs プロジェクト: codehaus/boo
        public override void Switch(IAstTransformer transformer, out Node resultingNode)
        {
            YieldStatement thisNode           = (YieldStatement)this;
            Statement      resultingTypedNode = thisNode;

            transformer.OnYieldStatement(thisNode, ref resultingTypedNode);
            resultingNode = resultingTypedNode;
        }
コード例 #6
0
ファイル: StricterErrorChecking.cs プロジェクト: codehaus/boo
 public override void LeaveYieldStatement(YieldStatement node)
 {
     if (null == node.Expression)
     {
         return;
     }
     CheckExpressionType(node.Expression);
 }
コード例 #7
0
ファイル: BooPrinterVisitor.cs プロジェクト: codehaus/boo
 override public void OnYieldStatement(YieldStatement node)
 {
     WriteIndented();
     WriteKeyword("yield ");
     Visit(node.Expression);
     Visit(node.Modifier);
     WriteLine();
 }
コード例 #8
0
ファイル: ReifyTypes.cs プロジェクト: richardbang83/GNet
        public override void LeaveYieldStatement(YieldStatement node)
        {
            if (node.Expression == null)
            {
                return;
            }

            TryToReify(node.Expression, GeneratorItemTypeFrom(_currentMethod.ReturnType) ?? TypeSystemServices.ObjectArrayType);
        }
コード例 #9
0
ファイル: FlowAnalyzer.cs プロジェクト: smx-smx/ValaSharp
        public override void visit_yield_statement(YieldStatement stmt)
        {
            if (unreachable(stmt))
            {
                return;
            }

            stmt.accept_children(this);
        }
コード例 #10
0
        public object VisitYieldStatement(YieldStatement yieldStatement, object data)
        {
            ReturnStatement rs = yieldStatement.Statement as ReturnStatement;

            if (rs == null)
            {
                return(new B.ReturnStatement(GetLexicalInfo(yieldStatement)));
            }
            return(new B.YieldStatement(GetLexicalInfo(yieldStatement), ConvertExpression(rs.Expression)));
        }
コード例 #11
0
        public void ParseYieldStatementTest()
        {
            //Create parser
            StatementParser statementParser = new StatementParser(Init("yield;"));
            YieldStatement  parsedYield     = statementParser.ParseYieldStatement();

            //Test yield instance
            Assert.AreEqual(typeof(YieldStatement), parsedYield.GetType());
            Assert.AreEqual("yield;", parsedYield.ToString());
        }
コード例 #12
0
 public DataType VisitYield(YieldStatement y)
 {
     if (y.Expression != null)
     {
         return(analyzer.TypeFactory.CreateList(y.Expression.Accept(this)));
     }
     else
     {
         return(DataType.None);
     }
 }
コード例 #13
0
ファイル: BooParserTestCase.cs プロジェクト: yantrabuddhi/boo
        public void TestYieldStmt1()
        {
            Boo.Lang.Compiler.Ast.Module module = ParseTestCase("yield_stmt_1.boo");

            Method         m  = (Method)module.Members[0];
            ForStatement   fs = (ForStatement)m.Body.Statements[0];
            YieldStatement ys = (YieldStatement)fs.Block.Statements[0];

            Assert.AreEqual("i", ((ReferenceExpression)ys.Expression).Name);
            Assert.AreEqual(StatementModifierType.If, ys.Modifier.Type);
        }
コード例 #14
0
        private void TryInferMethodReturnType(YieldStatement node)
        {
            var methodNode = node.GetAncestor <Method>();
            var method     = methodNode.Entity as InternalMethod;

            if (method == null || (method.ReturnType != TypeSystemServices.VoidType && method.ReturnType != null))
            {
                return;
            }

            methodNode.ReturnType = new SimpleTypeReference(TypeSystemServices.IEnumeratorType.Name);
        }
コード例 #15
0
        override public void LeaveYieldStatement(YieldStatement node)
        {
            Block block = new Block();

            block.Add(
                new ReturnStatement(
                    node.LexicalInfo,
                    CreateYieldInvocation(node.Expression),
                    null));
            block.Add(CreateLabel(node));
            ReplaceCurrentNode(block);
        }
コード例 #16
0
 public override void OnYieldStatement(YieldStatement node)
 {
     Write(Indent());
     Write("yield return ");
     if (node.Expression == null)
     {
         Write("null");
     }
     else
     {
         Visit(node.Expression);
     }
     WriteLine(";");
 }
コード例 #17
0
 public void Visit(YieldStatement astLeaf)
 {
     state.SetCursor(astLeaf);
       Context yieldContext;
       if (astLeaf.Expr.TryEvaluate(state, out yieldContext))
       {
     state.PushStatement(SyntaxHelper.AppendMember(
       yieldContext.FullPath,
       yieldContext.Symbol.IsString(),
       astLeaf.Type == TokenType.Encoded)
     );
       } else
       {
     //Unknown Member could also be a HelperCall with implied this as Parameter
     if (astLeaf.Expr is MemberExpression)
       astLeaf.TransformToHelperCall().Accept(this);
       }
 }
コード例 #18
0
        public override void visit_yield_statement(YieldStatement stmt)
        {
            if (!is_in_coroutine())
            {
                return;
            }

            if (stmt.yield_expression == null)
            {
                int state = emit_context.next_coroutine_state++;

                ccode.add_assignment(CCodeMemberAccess.pointer(new CCodeIdentifier("_data_"), "_state_"), new CCodeConstant(state.ToString()));
                ccode.add_return(new CCodeConstant("FALSE"));
                ccode.add_label("_state_%d".printf(state));
                ccode.add_statement(new CCodeEmptyStatement());

                return;
            }

            if (stmt.yield_expression.error)
            {
                stmt.error = true;
                return;
            }

            ccode.add_expression(get_cvalue(stmt.yield_expression));

            if (stmt.tree_can_fail && stmt.yield_expression.tree_can_fail)
            {
                // simple case, no node breakdown necessary

                add_simple_check(stmt.yield_expression);
            }

            /* free temporary objects */

            foreach (var value in temp_ref_values)
            {
                ccode.add_expression(destroy_value(value));
            }

            temp_ref_values.Clear();
        }
コード例 #19
0
 override public void OnYieldStatement(YieldStatement node)
 {
     if (_state.TryBlockDepth == _state.ProtectedBlockDepth)
     {
         // we are currently only in the protected blocks, not in any "except" or "ensure" blocks.
         foreach (TryStatement tryBlock in _state.TryBlocks)
         {
             // only allow yield in the try part of try-ensure blocks, fail if it is a try-except block
             if (tryBlock.FailureBlock != null || tryBlock.ExceptionHandlers.Count > 0)
             {
                 Error(CompilerErrorFactory.YieldInsideTryExceptOrEnsureBlock(node));
                 break;
             }
         }
     }
     else
     {
         Error(CompilerErrorFactory.YieldInsideTryExceptOrEnsureBlock(node));
     }
 }
コード例 #20
0
ファイル: XHTMLVisitor.cs プロジェクト: tvdstorm/waebric
        /// <summary>
        /// Interpret YieldStatement
        /// </summary>
        /// <param name="statement">YieldStatement to interpret</param>
        public override void Visit(YieldStatement statement)
        {
            if (YieldStack.Count == 0)
            {
                return;
            }

            //Pop from YieldStack and lets interpet it
            YieldElement yieldElement = YieldStack.Pop();

            if (yieldElement != null && yieldElement.GetRootElement() != null)
            {
                //Let's copy yieldstack, because there are possible yields in the yield.
                Stack <YieldElement> tempYieldStack = new Stack <YieldElement>();
                List <YieldElement>  yieldList      = YieldStack.ToList();
                foreach (YieldElement yieldNode in yieldList)
                {
                    tempYieldStack.Push(yieldNode);
                }

                //Lets interpret it with specific symboltable
                SymbolTable temp = (SymbolTable)SymbolTable.Clone();
                SymbolTable = yieldElement.GetSymbolTable();

                yieldElement.GetRootElement().AcceptVisitor(this);

                //Add some content when node is an expression or embedding
                if (yieldElement.GetRootElement() is Expression || yieldElement.GetRootElement() is Embedding)
                {
                    XHTMLElement element = new XHTMLElement(TextValue, Current);
                    element.SetTagState(false);
                    AddElement(element);
                }

                //Restore symboltable
                SymbolTable = temp;

                //Restore YieldStack in original shape before interpreting
                YieldStack = tempYieldStack;
            }
        }
コード例 #21
0
        public void Visit(YieldStatement astLeaf)
        {
            state.SetCursor(astLeaf);
            Context yieldContext;

            if (astLeaf.Expr.TryEvaluate(state, out yieldContext))
            {
                state.PushStatement(SyntaxHelper.AppendMember(
                                        yieldContext.FullPath,
                                        yieldContext.Symbol.IsString(),
                                        astLeaf.Type == TokenType.Encoded)
                                    );
            }
            else
            {
                //Unknown Member could also be a HelperCall with implied this as Parameter
                if (astLeaf.Expr is MemberExpression)
                {
                    astLeaf.TransformToHelperCall().Accept(this);
                }
            }
        }
コード例 #22
0
        override public void LeaveYieldStatement(YieldStatement node)
        {
            TryStatementInfo currentTry = (_tryStatementStack.Count > 0) ? _tryStatementStack.Peek() : null;

            if (currentTry != null)
            {
                ConvertTryStatement(currentTry);
            }
            Block block = new Block();

            block.Add(
                new ReturnStatement(
                    node.LexicalInfo,
                    CreateYieldInvocation(node.LexicalInfo, _labels.Count, node.Expression),
                    null));
            block.Add(CreateLabel(node));
            // setting the state back to the "running" state not required, as that state has the same ensure blocks
            // as the state we are currently in.
//			if (currentTry != null) {
//				block.Add(SetStateTo(currentTry._stateNumber));
//			}
            ReplaceCurrentNode(block);
        }
コード例 #23
0
ファイル: CSharpParser.cs プロジェクト: pgoron/monodevelop
			public override object Visit (Yield yieldStatement)
			{
				var result = new YieldStatement ();
				var location = LocationsBag.GetLocations (yieldStatement);
				
				result.AddChild (new CSharpTokenNode (Convert (yieldStatement.loc), "yield".Length), YieldStatement.YieldKeywordRole);
				if (location != null)
					result.AddChild (new CSharpTokenNode (Convert (location[0]), "return".Length), YieldStatement.ReturnKeywordRole);
				if (yieldStatement.Expr != null)
					result.AddChild ((INode)yieldStatement.Expr.Accept (this), YieldStatement.Roles.Expression);
				if (location != null)
					result.AddChild (new CSharpTokenNode (Convert (location[1]), ";".Length), YieldStatement.Roles.Semicolon);
				
				return result;
			}
コード例 #24
0
		public sealed override object VisitYieldStatement(YieldStatement yieldStatement, object data) {
			BeginVisit(yieldStatement);
			object result = TrackedVisitYieldStatement(yieldStatement, data);
			EndVisit(yieldStatement);
			return result;
		}
コード例 #25
0
 protected internal virtual void PostWalk(YieldStatement node) { }
コード例 #26
0
		public virtual object VisitYieldStatement(YieldStatement yieldStatement, object data) {
			Debug.Assert((yieldStatement != null));
			Debug.Assert((yieldStatement.Statement != null));
			nodeStack.Push(yieldStatement.Statement);
			yieldStatement.Statement.AcceptVisitor(this, data);
			yieldStatement.Statement = ((Statement)(nodeStack.Pop()));
			return null;
		}
コード例 #27
0
 private void Process_Yield_Statement(StringBuilder sb, YieldStatement statement)
 {
     sb.Append("yield ");
     if (statement.Expression == null)
     {
         sb.Append("break;");
     }
     else
     {
         sb.Append("return ").Append(FormatExpression(statement.Expression)).Append(";");
     }
 }
コード例 #28
0
ファイル: TotemWalker.cs プロジェクト: Alxandr/IronTotem
 // YieldStatement
 public override bool Walk(YieldStatement node)
 {
     return false;
 }
コード例 #29
0
 public override ControlFlowNode VisitYieldStatement(YieldStatement yieldStatement, ControlFlowNode data)
 {
     return(CreateConnectedEndNode(yieldStatement, data));
 }
コード例 #30
0
		public virtual object VisitYieldStatement(YieldStatement yieldStatement, object data) {
			throw new global::System.NotImplementedException("YieldStatement");
		}
コード例 #31
0
 public void VisitYieldStatement(YieldStatement yieldStmt)
 {
 }
コード例 #32
0
		public virtual object TrackedVisitYieldStatement(YieldStatement yieldStatement, object data) {
			return base.VisitYieldStatement(yieldStatement, data);
		}
コード例 #33
0
ファイル: Parser.cs プロジェクト: mgagne-atman/Projects
	void EmbeddedStatement(
#line  1528 "cs.ATG" 
out Statement statement) {

#line  1530 "cs.ATG" 
		TypeReference type = null;
		Expression expr = null;
		Statement embeddedStatement = null;
		statement = null;
		

#line  1536 "cs.ATG" 
		Location startLocation = la.Location; 
		if (la.kind == 16) {
			Block(
#line  1538 "cs.ATG" 
out statement);
		} else if (la.kind == 11) {
			lexer.NextToken();

#line  1541 "cs.ATG" 
			statement = new EmptyStatement(); 
		} else if (
#line  1544 "cs.ATG" 
UnCheckedAndLBrace()) {

#line  1544 "cs.ATG" 
			Statement block; bool isChecked = true; 
			if (la.kind == 58) {
				lexer.NextToken();
			} else if (la.kind == 118) {
				lexer.NextToken();

#line  1545 "cs.ATG" 
				isChecked = false;
			} else SynErr(197);
			Block(
#line  1546 "cs.ATG" 
out block);

#line  1546 "cs.ATG" 
			statement = isChecked ? (Statement)new CheckedStatement(block) : (Statement)new UncheckedStatement(block); 
		} else if (la.kind == 79) {
			IfStatement(
#line  1549 "cs.ATG" 
out statement);
		} else if (la.kind == 110) {
			lexer.NextToken();

#line  1551 "cs.ATG" 
			List<SwitchSection> switchSections = new List<SwitchSection>(); 
			Expect(20);
			Expr(
#line  1552 "cs.ATG" 
out expr);
			Expect(21);
			Expect(16);
			SwitchSections(
#line  1553 "cs.ATG" 
switchSections);
			Expect(17);

#line  1555 "cs.ATG" 
			statement = new SwitchStatement(expr, switchSections); 
		} else if (la.kind == 125) {
			lexer.NextToken();
			Expect(20);
			Expr(
#line  1558 "cs.ATG" 
out expr);
			Expect(21);
			EmbeddedStatement(
#line  1559 "cs.ATG" 
out embeddedStatement);

#line  1560 "cs.ATG" 
			statement = new DoLoopStatement(expr, embeddedStatement, ConditionType.While, ConditionPosition.Start);
		} else if (la.kind == 65) {
			lexer.NextToken();
			EmbeddedStatement(
#line  1562 "cs.ATG" 
out embeddedStatement);
			Expect(125);
			Expect(20);
			Expr(
#line  1563 "cs.ATG" 
out expr);
			Expect(21);
			Expect(11);

#line  1564 "cs.ATG" 
			statement = new DoLoopStatement(expr, embeddedStatement, ConditionType.While, ConditionPosition.End); 
		} else if (la.kind == 76) {
			lexer.NextToken();

#line  1566 "cs.ATG" 
			List<Statement> initializer = null; List<Statement> iterator = null; 
			Expect(20);
			if (StartOf(6)) {
				ForInitializer(
#line  1567 "cs.ATG" 
out initializer);
			}
			Expect(11);
			if (StartOf(6)) {
				Expr(
#line  1568 "cs.ATG" 
out expr);
			}
			Expect(11);
			if (StartOf(6)) {
				ForIterator(
#line  1569 "cs.ATG" 
out iterator);
			}
			Expect(21);
			EmbeddedStatement(
#line  1570 "cs.ATG" 
out embeddedStatement);

#line  1571 "cs.ATG" 
			statement = new ForStatement(initializer, expr, iterator, embeddedStatement); 
		} else if (la.kind == 77) {
			lexer.NextToken();
			Expect(20);
			Type(
#line  1573 "cs.ATG" 
out type);
			Identifier();

#line  1573 "cs.ATG" 
			string varName = t.val; 
			Expect(81);
			Expr(
#line  1574 "cs.ATG" 
out expr);
			Expect(21);
			EmbeddedStatement(
#line  1575 "cs.ATG" 
out embeddedStatement);

#line  1576 "cs.ATG" 
			statement = new ForeachStatement(type, varName , expr, embeddedStatement); 
		} else if (la.kind == 53) {
			lexer.NextToken();
			Expect(11);

#line  1579 "cs.ATG" 
			statement = new BreakStatement(); 
		} else if (la.kind == 61) {
			lexer.NextToken();
			Expect(11);

#line  1580 "cs.ATG" 
			statement = new ContinueStatement(); 
		} else if (la.kind == 78) {
			GotoStatement(
#line  1581 "cs.ATG" 
out statement);
		} else if (
#line  1583 "cs.ATG" 
IsYieldStatement()) {
			Expect(132);
			if (la.kind == 101) {
				lexer.NextToken();
				Expr(
#line  1584 "cs.ATG" 
out expr);

#line  1584 "cs.ATG" 
				statement = new YieldStatement(new ReturnStatement(expr)); 
			} else if (la.kind == 53) {
				lexer.NextToken();

#line  1585 "cs.ATG" 
				statement = new YieldStatement(new BreakStatement()); 
			} else SynErr(198);
			Expect(11);
		} else if (la.kind == 101) {
			lexer.NextToken();
			if (StartOf(6)) {
				Expr(
#line  1588 "cs.ATG" 
out expr);
			}
			Expect(11);

#line  1588 "cs.ATG" 
			statement = new ReturnStatement(expr); 
		} else if (la.kind == 112) {
			lexer.NextToken();
			if (StartOf(6)) {
				Expr(
#line  1589 "cs.ATG" 
out expr);
			}
			Expect(11);

#line  1589 "cs.ATG" 
			statement = new ThrowStatement(expr); 
		} else if (StartOf(6)) {
			StatementExpr(
#line  1592 "cs.ATG" 
out statement);
			while (!(la.kind == 0 || la.kind == 11)) {SynErr(199); lexer.NextToken(); }
			Expect(11);
		} else if (la.kind == 114) {
			TryStatement(
#line  1595 "cs.ATG" 
out statement);
		} else if (la.kind == 86) {
			lexer.NextToken();
			Expect(20);
			Expr(
#line  1598 "cs.ATG" 
out expr);
			Expect(21);
			EmbeddedStatement(
#line  1599 "cs.ATG" 
out embeddedStatement);

#line  1599 "cs.ATG" 
			statement = new LockStatement(expr, embeddedStatement); 
		} else if (la.kind == 121) {

#line  1602 "cs.ATG" 
			Statement resourceAcquisitionStmt = null; 
			lexer.NextToken();
			Expect(20);
			ResourceAcquisition(
#line  1604 "cs.ATG" 
out resourceAcquisitionStmt);
			Expect(21);
			EmbeddedStatement(
#line  1605 "cs.ATG" 
out embeddedStatement);

#line  1605 "cs.ATG" 
			statement = new UsingStatement(resourceAcquisitionStmt, embeddedStatement); 
		} else if (la.kind == 119) {
			lexer.NextToken();
			Block(
#line  1608 "cs.ATG" 
out embeddedStatement);

#line  1608 "cs.ATG" 
			statement = new UnsafeStatement(embeddedStatement); 
		} else if (la.kind == 74) {

#line  1610 "cs.ATG" 
			Statement pointerDeclarationStmt = null; 
			lexer.NextToken();
			Expect(20);
			ResourceAcquisition(
#line  1612 "cs.ATG" 
out pointerDeclarationStmt);
			Expect(21);
			EmbeddedStatement(
#line  1613 "cs.ATG" 
out embeddedStatement);

#line  1613 "cs.ATG" 
			statement = new FixedStatement(pointerDeclarationStmt, embeddedStatement); 
		} else SynErr(200);

#line  1615 "cs.ATG" 
		if (statement != null) {
		statement.StartLocation = startLocation;
		statement.EndLocation = t.EndLocation;
		}
		
	}
コード例 #34
0
ファイル: SyntaxNodeVisitor.cs プロジェクト: spreeker/waebric
 public virtual void Visit(YieldStatement statement)
 {
     VisitSubNodes(statement);
 }
コード例 #35
0
 public StringBuilder VisitYieldStatement(YieldStatement yieldStatement, int data)
 {
     throw new SLSharpException("SL# does not have iterators.");
 }
コード例 #36
0
 public override void OnYieldStatement(YieldStatement node)
 {
     throw new NotImplementedException();
 }
コード例 #37
0
        public void YieldBreakStatementTest()
        {
            YieldStatement yieldStmt = ParseUtilCSharp.ParseStatement <YieldStatement>("yield break;");

            Assert.IsTrue(yieldStmt.IsYieldBreak);
        }
コード例 #38
0
 public void VisitYield(YieldStatement y)
 {
     gen.Yield(y.Expression.Accept(xlat));
 }
コード例 #39
0
ファイル: TotemWalker.cs プロジェクト: Alxandr/IronTotem
 public override void PostWalk(YieldStatement node)
 {
 }
コード例 #40
0
ファイル: PyStatementWriter.cs プロジェクト: uxmal/pytocs
 public void VisitYield(YieldStatement y)
 {
     this.w.Write("yield");
     this.w.Write(" ");
     y.Expression.Write(writer);
 }
コード例 #41
0
ファイル: FunctionCompiler.cs プロジェクト: parhelia512/nginz
 public override void Accept(YieldStatement yieldStmt)
 {
     yieldStmt.VisitChildren(this);
     methodBuilder.Generator = true;
     methodBuilder.EmitInstruction(yieldStmt.Location, Opcode.Yield);
 }
コード例 #42
0
ファイル: StatementTranslator.cs プロジェクト: uxmal/pytocs
 public void VisitYield(YieldStatement y)
 {
     gen.Yield(y.Expression.Accept(xlat));
 }
コード例 #43
0
        /// <summary>
        /// Reads the next yield-statement from the file and returns it.
        /// </summary>
        /// <param name="parentProxy">Represents the parent item.</param>
        /// <param name="unsafeCode">Indicates whether the code being parsed resides in an unsafe code block.</param>
        /// <returns>Returns the statement.</returns>
        private YieldStatement GetYieldStatement(CodeUnitProxy parentProxy, bool unsafeCode)
        {
            Param.AssertNotNull(parentProxy, "parentProxy");
            Param.Ignore(unsafeCode);

            var statementProxy = new CodeUnitProxy(this.document);
            
            // Move past the yield keyword.
            this.GetToken(statementProxy, TokenType.Yield, SymbolType.Other);

            // Get the next word, which must either be break or return.
            Symbol symbol = this.PeekNextSymbol();

            YieldStatement.Type yieldType;
            Expression returnValue = null;

            if (symbol.SymbolType == SymbolType.Return)
            {
                yieldType = YieldStatement.Type.Return;
                this.GetToken(statementProxy, TokenType.Return, SymbolType.Return);

                // Get the expression to return.
                returnValue = this.GetNextExpression(statementProxy, ExpressionPrecedence.None, unsafeCode);
                if (returnValue == null)
                {
                    throw this.CreateSyntaxException();
                }
            }
            else if (symbol.SymbolType == SymbolType.Break)
            {
                yieldType = YieldStatement.Type.Break;
                this.GetToken(statementProxy, TokenType.Break, SymbolType.Break);
            }
            else
            {
                throw this.CreateSyntaxException();
            }

            // Get the closing semicolon.
            this.GetToken(statementProxy, TokenType.Semicolon, SymbolType.Semicolon);

            // Create and return the statement.
            var statement = new YieldStatement(statementProxy, yieldType, returnValue);
            parentProxy.Children.Add(statement);

            return statement;
        }
コード例 #44
0
ファイル: TotemWalker.cs プロジェクト: Alxandr/IronTotem
 // YieldStatement
 public virtual bool Walk(YieldStatement node)
 {
     return true;
 }
コード例 #45
0
		public virtual object VisitYieldStatement(YieldStatement yieldStatement, object data) {
			Debug.Assert((yieldStatement != null));
			Debug.Assert((yieldStatement.Statement != null));
			return yieldStatement.Statement.AcceptVisitor(this, data);
		}
コード例 #46
0
ファイル: TotemWalker.cs プロジェクト: Alxandr/IronTotem
 public virtual void PostWalk(YieldStatement node)
 {
 }
コード例 #47
0
 public virtual object VisitYieldStatement(YieldStatement yieldStatement, object data)
 {
     throw new global::System.NotImplementedException("YieldStatement");
 }
コード例 #48
0
 // YieldStatement
 protected internal virtual bool Walk(YieldStatement node) { return true; }
コード例 #49
0
		public object VisitYieldStatement(YieldStatement yieldStatement, object data)
		{
			ReturnStatement rs = yieldStatement.Statement as ReturnStatement;
			if (rs == null)
				return new B.ReturnStatement(GetLexicalInfo(yieldStatement));
			return new B.YieldStatement(GetLexicalInfo(yieldStatement), ConvertExpression(rs.Expression));
		}
コード例 #50
0
ファイル: Parser.cs プロジェクト: KnowNo/test-code-backup
 private void EmbeddedStatement(out ICSharpCode.NRefactory.Parser.AST.Statement statement)
 {
     TypeReference type = null;
     Expression expr = null;
     ICSharpCode.NRefactory.Parser.AST.Statement statement2 = null;
     statement = null;
     if (this.la.kind == 0x10)
     {
         this.Block(out statement);
     }
     else if (this.la.kind == 11)
     {
         base.lexer.NextToken();
         statement = new EmptyStatement();
     }
     else if (this.UnCheckedAndLBrace())
     {
         ICSharpCode.NRefactory.Parser.AST.Statement statement3;
         bool flag = true;
         if (this.la.kind == 0x39)
         {
             base.lexer.NextToken();
         }
         else if (this.la.kind == 0x75)
         {
             base.lexer.NextToken();
             flag = false;
         }
         else
         {
             base.SynErr(170);
         }
         this.Block(out statement3);
         statement = flag ? ((ICSharpCode.NRefactory.Parser.AST.Statement) new CheckedStatement(statement3)) : ((ICSharpCode.NRefactory.Parser.AST.Statement) new UncheckedStatement(statement3));
     }
     else if (this.la.kind == 0x4e)
     {
         base.lexer.NextToken();
         ICSharpCode.NRefactory.Parser.AST.Statement statement4 = null;
         base.Expect(20);
         this.Expr(out expr);
         base.Expect(0x15);
         this.EmbeddedStatement(out statement2);
         if (this.la.kind == 0x42)
         {
             base.lexer.NextToken();
             this.EmbeddedStatement(out statement4);
         }
         statement = (statement4 != null) ? new IfElseStatement(expr, statement2, statement4) : new IfElseStatement(expr, statement2);
         if ((statement4 is IfElseStatement) && ((statement4 as IfElseStatement).TrueStatement.Count == 1))
         {
             (statement as IfElseStatement).ElseIfSections.Add(new ElseIfSection((statement4 as IfElseStatement).Condition, (statement4 as IfElseStatement).TrueStatement[0]));
             (statement as IfElseStatement).ElseIfSections.AddRange((statement4 as IfElseStatement).ElseIfSections);
             (statement as IfElseStatement).FalseStatement = (statement4 as IfElseStatement).FalseStatement;
         }
     }
     else if (this.la.kind == 0x6d)
     {
         base.lexer.NextToken();
         List<ICSharpCode.NRefactory.Parser.AST.SwitchSection> switchSections = new List<ICSharpCode.NRefactory.Parser.AST.SwitchSection>();
         base.Expect(20);
         this.Expr(out expr);
         base.Expect(0x15);
         base.Expect(0x10);
         while ((this.la.kind == 0x36) || (this.la.kind == 0x3e))
         {
             ICSharpCode.NRefactory.Parser.AST.SwitchSection section;
             this.SwitchSection(out section);
             switchSections.Add(section);
         }
         base.Expect(0x11);
         statement = new SwitchStatement(expr, switchSections);
     }
     else if (this.la.kind == 0x7c)
     {
         base.lexer.NextToken();
         base.Expect(20);
         this.Expr(out expr);
         base.Expect(0x15);
         this.EmbeddedStatement(out statement2);
         statement = new DoLoopStatement(expr, statement2, ConditionType.While, ConditionPosition.Start);
     }
     else if (this.la.kind == 0x40)
     {
         base.lexer.NextToken();
         this.EmbeddedStatement(out statement2);
         base.Expect(0x7c);
         base.Expect(20);
         this.Expr(out expr);
         base.Expect(0x15);
         base.Expect(11);
         statement = new DoLoopStatement(expr, statement2, ConditionType.While, ConditionPosition.End);
     }
     else if (this.la.kind == 0x4b)
     {
         base.lexer.NextToken();
         List<ICSharpCode.NRefactory.Parser.AST.Statement> initializer = null;
         List<ICSharpCode.NRefactory.Parser.AST.Statement> iterator = null;
         base.Expect(20);
         if (this.StartOf(5))
         {
             this.ForInitializer(out initializer);
         }
         base.Expect(11);
         if (this.StartOf(5))
         {
             this.Expr(out expr);
         }
         base.Expect(11);
         if (this.StartOf(5))
         {
             this.ForIterator(out iterator);
         }
         base.Expect(0x15);
         this.EmbeddedStatement(out statement2);
         statement = new ForStatement(initializer, expr, iterator, statement2);
     }
     else if (this.la.kind == 0x4c)
     {
         base.lexer.NextToken();
         base.Expect(20);
         this.Type(out type);
         base.Expect(1);
         string val = this.t.val;
         Point location = this.t.Location;
         base.Expect(80);
         this.Expr(out expr);
         base.Expect(0x15);
         this.EmbeddedStatement(out statement2);
         statement = new ForeachStatement(type, val, expr, statement2);
         statement.EndLocation = this.t.EndLocation;
     }
     else if (this.la.kind == 0x34)
     {
         base.lexer.NextToken();
         base.Expect(11);
         statement = new BreakStatement();
     }
     else if (this.la.kind == 60)
     {
         base.lexer.NextToken();
         base.Expect(11);
         statement = new ContinueStatement();
     }
     else if (this.la.kind == 0x4d)
     {
         this.GotoStatement(out statement);
     }
     else if (this.IsYieldStatement())
     {
         base.Expect(1);
         if (this.la.kind == 100)
         {
             base.lexer.NextToken();
             this.Expr(out expr);
             statement = new YieldStatement(new ReturnStatement(expr));
         }
         else if (this.la.kind == 0x34)
         {
             base.lexer.NextToken();
             statement = new YieldStatement(new BreakStatement());
         }
         else
         {
             base.SynErr(0xab);
         }
         base.Expect(11);
     }
     else if (this.la.kind == 100)
     {
         base.lexer.NextToken();
         if (this.StartOf(5))
         {
             this.Expr(out expr);
         }
         base.Expect(11);
         statement = new ReturnStatement(expr);
     }
     else if (this.la.kind == 0x6f)
     {
         base.lexer.NextToken();
         if (this.StartOf(5))
         {
             this.Expr(out expr);
         }
         base.Expect(11);
         statement = new ThrowStatement(expr);
     }
     else if (this.StartOf(5))
     {
         this.StatementExpr(out statement);
         base.Expect(11);
     }
     else if (this.la.kind == 0x71)
     {
         this.TryStatement(out statement);
     }
     else if (this.la.kind == 0x55)
     {
         base.lexer.NextToken();
         base.Expect(20);
         this.Expr(out expr);
         base.Expect(0x15);
         this.EmbeddedStatement(out statement2);
         statement = new LockStatement(expr, statement2);
     }
     else if (this.la.kind == 120)
     {
         ICSharpCode.NRefactory.Parser.AST.Statement stmt = null;
         base.lexer.NextToken();
         base.Expect(20);
         this.ResourceAcquisition(out stmt);
         base.Expect(0x15);
         this.EmbeddedStatement(out statement2);
         statement = new UsingStatement(stmt, statement2);
     }
     else if (this.la.kind == 0x76)
     {
         base.lexer.NextToken();
         this.Block(out statement2);
         statement = new UnsafeStatement(statement2);
     }
     else if (this.la.kind == 0x49)
     {
         base.lexer.NextToken();
         base.Expect(20);
         this.Type(out type);
         if (type.PointerNestingLevel == 0)
         {
             this.Error("can only fix pointer types");
         }
         List<VariableDeclaration> pointerDeclarators = new List<VariableDeclaration>(1);
         base.Expect(1);
         string name = this.t.val;
         base.Expect(3);
         this.Expr(out expr);
         pointerDeclarators.Add(new VariableDeclaration(name, expr));
         while (this.la.kind == 14)
         {
             base.lexer.NextToken();
             base.Expect(1);
             name = this.t.val;
             base.Expect(3);
             this.Expr(out expr);
             pointerDeclarators.Add(new VariableDeclaration(name, expr));
         }
         base.Expect(0x15);
         this.EmbeddedStatement(out statement2);
         statement = new FixedStatement(type, pointerDeclarators, statement2);
     }
     else
     {
         base.SynErr(0xac);
     }
 }
コード例 #51
0
 // YieldStatement
 public bool Walk(YieldStatement node)
 {
     return(Process(node));
 }
コード例 #52
0
 public void VisitYieldStatement(YieldStatement yieldStmt)
 {
     yieldStmt.Expression.AcceptWalker(this);
 }
コード例 #53
0
 public void PostWalk(YieldStatement node)
 {
     PostProcess(node);
 }
コード例 #54
0
ファイル: CSharpParser.cs プロジェクト: pgoron/monodevelop
			public override object Visit (YieldBreak yieldBreakStatement)
			{
				var result = new YieldStatement ();
				var location = LocationsBag.GetLocations (yieldBreakStatement);
				result.AddChild (new CSharpTokenNode (Convert (yieldBreakStatement.loc), "yield".Length), YieldStatement.YieldKeywordRole);
				if (location != null) {
					result.AddChild (new CSharpTokenNode (Convert (location[0]), "break".Length), YieldStatement.BreakKeywordRole);
					result.AddChild (new CSharpTokenNode (Convert (location[1]), ";".Length), YieldStatement.Roles.Semicolon);
				}
				return result;
			}
コード例 #55
0
 override public void LeaveYieldStatement(YieldStatement node)
 {
     LeaveStatement(node);
 }
コード例 #56
0
ファイル: TotemParser.cs プロジェクト: Alxandr/IronTotem
        private Statement ParseYieldStatement()
        {
            FunctionDefinition current = CurrentFunction;
            if (current == null)
            {
                ReportSyntaxError(Resources.MisplacedYield);
                return null;
            }

            _isGenerator = true;
            current.IsGenerator = true;
            if (_return)
            {
                ReportSyntaxError(Resources.ReturnInGenerator);
                return null;
            }
            if (_isAsync)
            {
                ReportSyntaxError(Resources.YieldInAsyncFunction);
                return null;
            }

            Eat(TokenKind.KeywordYield);
            var start = GetStart();

            YieldStatement s;
            if (PeekToken(TokenKind.Semicolon))
                s = new YieldStatement(null);
            else
                s = new YieldStatement(ParseExpression());

            Eat(TokenKind.Semicolon);
            s.SetLoc(_globalParent, start, GetEnd());
            return s;
        }
コード例 #57
0
ファイル: TotemNameBinder.cs プロジェクト: Alxandr/IronTotem
 public override bool Walk(YieldStatement node)
 {
     node.Parent = _currentScope;
     return base.Walk(node);
 }