summaryrefslogtreecommitdiff
path: root/clang-plugin
diff options
context:
space:
mode:
authorPhilip Withnall <philip.withnall@collabora.co.uk>2015-01-27 12:40:29 +0000
committerPhilip Withnall <philip.withnall@collabora.co.uk>2015-01-27 12:41:29 +0000
commit5ada22dc9b8009285ffcce8a77e4d30da5397153 (patch)
tree4e0d7916e4f7b8e2e2414cd670bc853f1c215eb9 /clang-plugin
parent18a0019e43607ec26e048080efcb0c75b86a78da (diff)
gir-attributes: Consider instance parameters in argument counts
This fixes emitting the ‘unexpected mismatch in number of arguments’ warning message for all GObject methods.
Diffstat (limited to 'clang-plugin')
-rw-r--r--clang-plugin/gir-attributes.cpp25
1 files changed, 18 insertions, 7 deletions
diff --git a/clang-plugin/gir-attributes.cpp b/clang-plugin/gir-attributes.cpp
index 2e47cf8..3878a98 100644
--- a/clang-plugin/gir-attributes.cpp
+++ b/clang-plugin/gir-attributes.cpp
@@ -207,10 +207,15 @@ GirAttributesConsumer::_handle_function_decl (FunctionDecl& func)
unsigned int err_params =
(g_function_info_get_flags (callable_info) &
GI_FUNCTION_THROWS) ? 1 : 0;
+ unsigned int obj_params =
+ (g_base_info_get_container (info) != NULL &&
+ g_function_info_get_flags (callable_info) &
+ GI_FUNCTION_IS_METHOD) ? 1 : 0;
/* Sanity check. */
- if (k + err_params != func.getNumParams ()) {
- WARN ("Number of GIR callable parameters (" << k << ") "
+ if (obj_params + k + err_params != func.getNumParams ()) {
+ WARN ("Number of GIR callable parameters (" <<
+ obj_params + k + err_params << ") "
"differs from number of C formal parameters (" <<
func.getNumParams () << "). Ignoring function " <<
func_name << "().");
@@ -267,12 +272,13 @@ GirAttributesConsumer::_handle_function_decl (FunctionDecl& func)
g_type_info_get_array_fixed_size (&type_info));
if (_arg_is_nonnull (arg, type_info)) {
- DEBUG ("Got nonnull arg " << j << " from GIR.");
- non_null_args.push_back (j);
+ DEBUG ("Got nonnull arg " << obj_params + j <<
+ " from GIR.");
+ non_null_args.push_back (obj_params + j);
}
if (_type_should_be_const (transfer, type_tag)) {
- ParmVarDecl *parm = func.getParamDecl (j);
+ ParmVarDecl *parm = func.getParamDecl (obj_params + j);
QualType t = parm->getType ();
if (!t.isConstant (parm->getASTContext ()))
@@ -449,10 +455,15 @@ GirAttributesChecker::_handle_function_decl (FunctionDecl& func)
unsigned int err_params =
(g_function_info_get_flags (callable_info) &
GI_FUNCTION_THROWS) ? 1 : 0;
+ unsigned int obj_params =
+ (g_base_info_get_container (info) != NULL &&
+ g_function_info_get_flags (callable_info) &
+ GI_FUNCTION_IS_METHOD) ? 1 : 0;
/* Sanity check. */
- if (k + err_params != func.getNumParams ()) {
- WARN ("Number of GIR callable parameters (" << k << ") "
+ if (obj_params + k + err_params != func.getNumParams ()) {
+ WARN ("Number of GIR callable parameters (" <<
+ obj_params + k + err_params << ") "
"differs from number of C formal parameters (" <<
func.getNumParams () << "). Ignoring function " <<
func_name << "().");