Example #1
0
 /// <summary>
 /// if式のコンパイル
 /// </summary>
 /// <param name="ilgen">IL Generator</param>
 /// <param name="expr">if式</param>
 static void CompileIfExpr(ILGenerator ilgen, MIfExpr expr)
 {
     var l1 = ilgen.DefineLabel();
     var l2 = ilgen.DefineLabel();
     CompileExpr(ilgen, expr.Cond);
     ilgen.Emit(OpCodes.Brfalse, l1);
     CompileExpr(ilgen, expr.ThenExpr);
     ilgen.Emit(OpCodes.Br, l2);
     ilgen.MarkLabel(l1);
     CompileExpr(ilgen, expr.ElseExpr);
     ilgen.MarkLabel(l2);
 }
Example #2
0
 /// <summary>
 /// if式の型推論
 /// </summary>
 /// <param name="expr">if式</param>
 static void TypeinfIfExpr(MIfExpr expr)
 {
     TypeinfExpr(expr.Cond);
     Unification(expr.Pos, expr.Cond.Type, new DotNetType(typeof(bool)));
     TypeinfExpr(expr.ThenExpr);
     TypeinfExpr(expr.ElseExpr);
     Unification(expr.Pos, expr.ThenExpr.Type, expr.ElseExpr.Type);
 }