Пример #1
0
 /// <summary>
 /// トップレベル関数定義を構築
 /// </summary>
 /// <param name="pos">ファイル位置</param>
 /// <param name="name">関数名</param>
 /// <param name="args">仮引数の列</param>
 /// <param name="body">本体の文</param>
 public MTopFun(string pos, string name, List<MArg> args, MStmt body)
     : base(pos)
 {
     Name = name;
     Args = args;
     RetType = new TypeVar();
     Body = body;
 }
Пример #2
0
 /// <summary>
 /// トップレベル関数の型推論
 /// </summary>
 /// <param name="stmt">トップレベル関数</param>
 static void TypeinfTopFun(MTopFun stmt)
 {
     var ret_type = new TypeVar();
     var func = new FunctionInfo(stmt.Args, ret_type);
     function_table.Add(stmt.Name, func);
     current_function = func;
     env.StartScope();
     foreach (var arg in stmt.Args)
     {
         env.Add(stmt.Pos, arg.Name, arg.Type);
     }
     TypeinfStmt(stmt.Body);
     env.EndScope();
     if (func.RetType.Reduce() == null)
     {
         Unification(stmt.Pos, new DotNetType(typeof(void)), stmt.RetType);
     }
     else
     {
         Unification(stmt.Pos, func.RetType, stmt.RetType);
     }
 }
Пример #3
0
 /// <summary>
 /// 式を構築
 /// </summary>
 /// <param name="pos">ファイル位置</param>
 public MExpr(string pos)
 {
     Pos = pos;
     Type = new TypeVar();
 }