Esempio n. 1
0
 /// <summary>
 /// if文のコンパイル
 /// </summary>
 /// <param name="ilgen">IL Generator</param>
 /// <param name="stmt">if文</param>
 static void CompileIfStmt(ILGenerator ilgen, MIfStmt stmt)
 {
     var l1 = ilgen.DefineLabel();
     var l2 = ilgen.DefineLabel();
     CompileExpr(ilgen, stmt.Cond);
     ilgen.Emit(OpCodes.Brfalse, l1);
     CompileStmt(ilgen, stmt.ThenStmt);
     ilgen.Emit(OpCodes.Br, l2);
     ilgen.MarkLabel(l1);
     CompileStmt(ilgen, stmt.ElseStmt);
     ilgen.MarkLabel(l2);
 }
Esempio n. 2
0
 /// <summary>
 /// if文の型推論
 /// </summary>
 /// <param name="stmt">if文</param>
 static void TypeinfIfStmt(MIfStmt stmt)
 {
     TypeinfExpr(stmt.Cond);
     Unification(stmt.Pos, stmt.Cond.Type, new DotNetType(typeof(bool)));
     TypeinfStmt(stmt.ThenStmt);
     TypeinfStmt(stmt.ElseStmt);
 }