// YieldStatement private Statement Rewrite(YieldStatement node) { Expression expression = RewriteExpressionFreeTemps(node.Expression); // Yield needs empty stack too, so rewrite it always return(Ast.Yield(node.Span, expression)); }
// YieldStatement private void DefaultWalk(YieldStatement node) { if (Walk(node)) { WalkNode(node.Expression); } PostWalk(node); }
protected internal override void PostWalk(YieldStatement node) { // Assign the yield statement index for codegen int index = _topTargets.Count; TargetLabel label = new TargetLabel(); node.Target = new YieldTarget(index, label); foreach (ExceptionBlock eb in _tryBlocks) { // The exception statement must determine // the label for the enclosing code to jump to // to return to the given yield target label = eb.AddYieldTarget(label, index); } // Insert the top target to the top yields Debug.Assert(_topTargets.Count == index); _topTargets.Add(new YieldTarget(index, label)); }
protected internal override bool Walk(YieldStatement node) { _result.Yield = true; return(true); }
protected internal override bool Walk(YieldStatement node) { _result.Yield = true; return true; }
// YieldStatement private void Dump(YieldStatement node) { Out(".yield "); WalkNode(node.Expression); Out(";", Flow.NewLine); }
// Yield statement triggers rewrite protected internal override void PostWalk(YieldStatement node) { _rewrite = true; }