diff options
author | John Hodge <tpg@mutabah.net> | 2016-09-29 14:02:43 +0800 |
---|---|---|
committer | John Hodge <tpg@mutabah.net> | 2016-09-29 14:02:43 +0800 |
commit | a19bd7137b56c92f3363ea2eb6e2e4ed0a0fd271 (patch) | |
tree | f9c08869bd0465c71e3f4090127dafa9a4e6ae98 /src | |
parent | 8257316b6954c2de7a69d8272d295d34b7c5a20c (diff) | |
download | mrust-a19bd7137b56c92f3363ea2eb6e2e4ed0a0fd271.tar.gz |
HIR Typecheck Expr - Hackily support variadic functions
Diffstat (limited to 'src')
-rw-r--r-- | src/hir_typeck/expr_cs.cpp | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/src/hir_typeck/expr_cs.cpp b/src/hir_typeck/expr_cs.cpp index 6876add7..9dca74e7 100644 --- a/src/hir_typeck/expr_cs.cpp +++ b/src/hir_typeck/expr_cs.cpp @@ -1099,15 +1099,21 @@ namespace { TODO(node.span(), "Emit revisit when _CallPath is ambiguous - " << node.m_path); } assert( node.m_cache.m_arg_types.size() >= 1); + unsigned int exp_argc = node.m_cache.m_arg_types.size() - 1; - if( node.m_args.size() != node.m_cache.m_arg_types.size() - 1 ) { - ERROR(node.span(), E0000, "Incorrect number of arguments to " << node.m_path - << " - exp " << node.m_cache.m_arg_types.size()-1 << " got " << node.m_args.size()); + if( node.m_args.size() != exp_argc ) { + if( node.m_cache.m_fcn->m_variadic && node.m_args.size() > exp_argc ) { + } + else { + ERROR(node.span(), E0000, "Incorrect number of arguments to " << node.m_path + << " - exp " << exp_argc << " got " << node.m_args.size()); + } } } // Link arguments - for(unsigned int i = 0; i < node.m_args.size(); i ++) + // - NOTE: Uses the cache for the count because vaargs aren't checked (they're checked for suitability in expr_check.cpp) + for(unsigned int i = 0; i < node.m_cache.m_arg_types.size() - 1; i ++) { this->context.equate_types_coerce(node.span(), node.m_cache.m_arg_types[i], node.m_args[i]); } |