상속: 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)
 {
 }