Example #1
0
 /// <summary>
 /// let文のコンパイル
 /// </summary>
 /// <param name="ilgen">IL Generator</param>
 /// <param name="stmt">let文</param>
 static void CompileLetStmt(ILGenerator ilgen, MLetStmt stmt)
 {
     CompileExpr(ilgen, stmt.Expr);
     var builder = _scope_manager.Lookup(stmt.Pos, stmt.Name);
     if (builder is LocalVar)
     {
         ilgen.Emit(OpCodes.Stloc, ((LocalVar)builder).Builder);
     }
     else if (builder is ParamVar)
     {
         ilgen.Emit(OpCodes.Starg, ((ParamVar)builder).Index);
     }
     else
     {
         throw new NotImplementedException();
     }
 }
Example #2
0
 /// <summary>
 /// let文の型推論
 /// </summary>
 /// <param name="stmt">let文</param>
 static void TypeinfLetStmt(MLetStmt stmt)
 {
     TypeinfExpr(stmt.Expr);
     var t = env.Lookup(stmt.Pos, stmt.Name);
     if (t != stmt.Expr.Type)
     {
         throw new MError(stmt.Pos + ": 型エラー");
     }
 }