summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/hir_conv/expand_type.cpp14
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