Inheritance: ReturnStatement
コード例 #1
0
ファイル: codegen.cs プロジェクト: shugo/babel
 public override void VisitYield(YieldStatement yield)
 {
     if (exceptionLevel > 0) {
         report.Error(yield.Location,
                      "`yield' statements may not appear " +
                      "in `protect' statements.");
         return;
     }
     if (yield.Value != null) {
         ilGenerator.Emit(OpCodes.Ldarg_0);
         yield.Value.Accept(this);
         BoxIfNecessary(yield.Value.RawType,
                        currentIter.Current.FieldType);
         ilGenerator.Emit(OpCodes.Stfld, currentIter.Current);
     }
     ilGenerator.Emit(OpCodes.Ldarg_0);
     ilGenerator.Emit(OpCodes.Ldc_I4, yield.ResumePoint.Index);
     ilGenerator.Emit(OpCodes.Stfld, currentIter.CurrentPosition);
     ilGenerator.Emit(OpCodes.Ldc_I4_1);
     ilGenerator.Emit(OpCodes.Br, returnLabel);
     ilGenerator.MarkLabel(yield.ResumePoint.Label);
 }
コード例 #2
0
ファイル: typecheck.cs プロジェクト: shugo/babel
 public override void VisitYield(YieldStatement yield)
 {
     if (currentIter == null) {
         report.Error(yield.Location,
                      "`yield' statements may not appear in routines.");
         return;
     }
     CheckReturnValue(yield);
     yield.ResumePoint.Index = currentIter.ResumePoints.Count;
     currentIter.ResumePoints.Add(yield.ResumePoint);
 }
コード例 #3
0
ファイル: node.cs プロジェクト: shugo/babel
 public virtual void VisitYield(YieldStatement yield)
 {
 }