summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Hodge <tpg@mutabah.net>2016-06-26 21:55:29 +0800
committerJohn Hodge <tpg@mutabah.net>2016-06-26 21:55:29 +0800
commite1d92ce17d029b1dbeffe0510b6462c2994fdcb0 (patch)
tree4cc4c548d21d03a17d7d27fcc3b184f570eabd84
parentcbb8a2b167ac50476c067f92c91184f12f67f7c1 (diff)
downloadmrust-e1d92ce17d029b1dbeffe0510b6462c2994fdcb0.tar.gz
HIR Typecheck - Fn type handling
-rw-r--r--src/hir/from_ast.cpp2
-rw-r--r--src/hir_typeck/expr.cpp4
-rw-r--r--src/parse/types.cpp2
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 {