diff options
-rw-r--r-- | src/hir_conv/expand_type.cpp | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/src/hir_conv/expand_type.cpp b/src/hir_conv/expand_type.cpp index 6b06a748..2dfffb73 100644 --- a/src/hir_conv/expand_type.cpp +++ b/src/hir_conv/expand_type.cpp @@ -21,8 +21,14 @@ // Anything else - leave it be ), (TypeAlias, - if( !is_expr && path.m_params.m_types.size() != e2.m_params.m_types.size() ) { - ERROR(sp, E0000, "Mismatched parameter count in " << path << ", expected " << e2.m_params.m_types.size() << " got " << path.m_params.m_types.size()); + auto pp = path.m_params.clone(); + if( !is_expr ) { + while( pp.m_types.size() < e2.m_params.m_types.size() && e2.m_params.m_types[pp.m_types.size()].m_default != ::HIR::TypeRef() ) { + pp.m_types.push_back( e2.m_params.m_types[pp.m_types.size()].m_default.clone() ); + } + if( pp.m_types.size() != e2.m_params.m_types.size() ) { + ERROR(sp, E0000, "Mismatched parameter count in " << path << ", expected " << e2.m_params.m_types.size() << " got " << pp.m_types.size()); + } } if( e2.m_params.m_types.size() > 0 ) { // TODO: Better `monomorphise_type` @@ -33,8 +39,8 @@ } else if( (ge.binding >> 8) == 0 ) { auto idx = ge.binding & 0xFF; - if( idx < path.m_params.m_types.size() ) - return path.m_params.m_types[idx]; + if( idx < pp.m_types.size() ) + return pp.m_types[idx]; else if( is_expr ) return empty_type; else |