diff options
author | John Hodge <tpg@mutabah.net> | 2016-06-26 21:55:29 +0800 |
---|---|---|
committer | John Hodge <tpg@mutabah.net> | 2016-06-26 21:55:29 +0800 |
commit | e1d92ce17d029b1dbeffe0510b6462c2994fdcb0 (patch) | |
tree | 4cc4c548d21d03a17d7d27fcc3b184f570eabd84 | |
parent | cbb8a2b167ac50476c067f92c91184f12f67f7c1 (diff) | |
download | mrust-e1d92ce17d029b1dbeffe0510b6462c2994fdcb0.tar.gz |
HIR Typecheck - Fn type handling
-rw-r--r-- | src/hir/from_ast.cpp | 2 | ||||
-rw-r--r-- | src/hir_typeck/expr.cpp | 4 | ||||
-rw-r--r-- | src/parse/types.cpp | 2 |
3 files changed, 6 insertions, 2 deletions
diff --git a/src/hir/from_ast.cpp b/src/hir/from_ast.cpp index 4ea9ea8a..8a9d25fc 100644 --- a/src/hir/from_ast.cpp +++ b/src/hir/from_ast.cpp @@ -633,6 +633,8 @@ const ::HIR::SimplePath path_Sized = ::HIR::SimplePath("", {"marker", "Sized"}); box$( LowerHIR_Type(*e.info.m_rettype) ), mv$(args) }; + if( f.m_abi == "" ) + f.m_abi = "rust"; return ::HIR::TypeRef( ::HIR::TypeRef::Data::make_Function( mv$(f) ) ); ), (Generic, diff --git a/src/hir_typeck/expr.cpp b/src/hir_typeck/expr.cpp index 06de0f8a..482249d4 100644 --- a/src/hir_typeck/expr.cpp +++ b/src/hir_typeck/expr.cpp @@ -219,9 +219,9 @@ namespace typeck { ::HIR::FunctionType ft; ft.is_unsafe = e.is_unsafe; ft.m_abi = e.m_abi; - ft.m_rettype = box$( e.m_rettype->clone() ); + ft.m_rettype = box$( monomorphise_type_with(sp, *e.m_rettype, callback) ); for( const auto& arg : e.m_arg_types ) - ft.m_arg_types.push_back( arg.clone() ); + ft.m_arg_types.push_back( monomorphise_type_with(sp, arg, callback) ); rv = ::HIR::TypeRef( mv$(ft) ); ), (Closure, diff --git a/src/parse/types.cpp b/src/parse/types.cpp index 2dda3cab..6f3a3d58 100644 --- a/src/parse/types.cpp +++ b/src/parse/types.cpp @@ -212,6 +212,8 @@ TypeRef Parse_Type_Fn(TokenStream& lex, ::std::vector<::std::string> hrls) { if( GET_TOK(tok, lex) == TOK_STRING ) { abi = tok.str(); + if( abi == "" ) + ERROR(lex.getPosition(), E0000, "Empty ABI"); GET_TOK(tok, lex); } else { |