summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJohn Hodge <tpg@mutabah.net>2016-09-29 14:02:43 +0800
committerJohn Hodge <tpg@mutabah.net>2016-09-29 14:02:43 +0800
commita19bd7137b56c92f3363ea2eb6e2e4ed0a0fd271 (patch)
treef9c08869bd0465c71e3f4090127dafa9a4e6ae98 /src
parent8257316b6954c2de7a69d8272d295d34b7c5a20c (diff)
downloadmrust-a19bd7137b56c92f3363ea2eb6e2e4ed0a0fd271.tar.gz
HIR Typecheck Expr - Hackily support variadic functions
Diffstat (limited to 'src')
-rw-r--r--src/hir_typeck/expr_cs.cpp14
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]);
}