+2011-04-12 Nicola Pero <nicola.pero@meta-innovation.com>
+
+ * objc-act.c (printable_ivar_name): New.
+ (add_instance_variable): Call printable_ivar_name() when an error
+ message needs to be printed. Do not prepare the instance variable
+ for printing unless there is an actual error.
+
2011-04-12 Nicola Pero <nicola.pero@meta-innovation.com>
* objc-act.c (objc_is_class_name, objc_is_id): For efficiency,
}
#endif
+/* Produce a printable version of an ivar name. This is only used
+ inside add_instance_variable. */
+static const char *
+printable_ivar_name (tree field_decl)
+{
+ if (DECL_NAME (field_decl))
+ return identifier_to_locale (IDENTIFIER_POINTER (DECL_NAME (field_decl)));
+ else
+ return _("<unnamed>");
+}
+
/* Called after parsing each instance variable declaration. Necessary to
preserve typedefs and implement public/private...
tree field_decl)
{
tree field_type = TREE_TYPE (field_decl);
- const char *ivar_name = DECL_NAME (field_decl)
- ? identifier_to_locale (IDENTIFIER_POINTER (DECL_NAME (field_decl)))
- : _("<unnamed>");
#ifdef OBJCPLUS
if (TREE_CODE (field_type) == REFERENCE_TYPE)
{
error ("illegal reference type specified for instance variable %qs",
- ivar_name);
+ printable_ivar_name (field_decl));
/* Return class as is without adding this ivar. */
return klass;
}
|| TYPE_SIZE (field_type) == error_mark_node)
/* 'type[0]' is allowed, but 'type[]' is not! */
{
- error ("instance variable %qs has unknown size", ivar_name);
+ error ("instance variable %qs has unknown size",
+ printable_ivar_name (field_decl));
/* Return class as is without adding this ivar. */
return klass;
}
to calculate the offset of the next instance variable. */
if (flexible_array_type_p (field_type))
{
- error ("instance variable %qs uses flexible array member", ivar_name);
+ error ("instance variable %qs uses flexible array member",
+ printable_ivar_name (field_decl));
/* Return class as is without adding this ivar. */
return klass;
}
error ("type %qE has virtual member functions", type_name);
error ("illegal aggregate type %qE specified "
"for instance variable %qs",
- type_name, ivar_name);
+ type_name, printable_ivar_name (field_decl));
/* Return class as is without adding this ivar. */
return klass;
}