summaryrefslogtreecommitdiff
path: root/gcc/objc
diff options
context:
space:
mode:
authorNicola Pero <nicola.pero@meta-innovation.com>2010-11-03 13:39:39 +0000
committerNicola Pero <nicola@gcc.gnu.org>2010-11-03 13:39:39 +0000
commit22d8d6160281e66502cc39f5496119250f2b929c (patch)
treed7da73886d7150ae4b9af474952eace642cc12be /gcc/objc
parent68a22980da9a9705dff9d870e422c8efce414ae2 (diff)
downloadgcc-22d8d6160281e66502cc39f5496119250f2b929c.tar.gz
In gcc/: 2010-11-03 Nicola Pero <nicola.pero@meta-innovation.com>
In gcc/: 2010-11-03 Nicola Pero <nicola.pero@meta-innovation.com> Implemented -fobjc-std=objc1 flag. * doc/invoke.texi (Option Summary): Document -fobjc-std=objc1 option. * doc/standards.texi (Standards): Updated the section on Objective-C; mention support for Objective-C 2.0 features and the new -fstd-objc=objc1 flag to disable them. In gcc/c-family/: 2010-11-03 Nicola Pero <nicola.pero@meta-innovation.com> Implemented -fobjc-std=objc1 flag. * c.opt (fobjc-std=objc1): New option. In gcc/objc/: 2010-11-03 Nicola Pero <nicola.pero@meta-innovation.com> Implemented -fobjc-std=objc1 flag. * objc-act.c (objc_start_class_interface): If attributes are specified when flag_objc1_only is set, print an error. (objc_start_category_interface): Same change. (objc_start_protocol): Same change. (objc_add_method_declaration): Same change. (objc_start_method_definition): Same change. (objc_build_keyword_decl): Same change. (objc_set_method_opt): If flag_objc1_only is set, print an error. (objc_add_property_declaration): Same change. (objc_add_synthesize_declaration): Same change. (objc_add_dynamic_declaration): Same change. (objc_finish_foreach_loop): Same change. (objc_maybe_build_component_ref): If flag_objc1_only is set, return immediately. In gcc/testsuite/: 2010-11-03 Nicola Pero <nicola.pero@meta-innovation.com> Implemented -fobjc-std=objc1 flag. * objc.dg/fobjc-std-1.m: New. * obj-c++.dg/fobjc-std-1.mm: New. From-SVN: r166246
Diffstat (limited to 'gcc/objc')
-rw-r--r--gcc/objc/ChangeLog20
-rw-r--r--gcc/objc/objc-act.c66
2 files changed, 76 insertions, 10 deletions
diff --git a/gcc/objc/ChangeLog b/gcc/objc/ChangeLog
index 1d78c0c8c2f..61c5a961c3d 100644
--- a/gcc/objc/ChangeLog
+++ b/gcc/objc/ChangeLog
@@ -1,5 +1,25 @@
2010-11-03 Nicola Pero <nicola.pero@meta-innovation.com>
+ Implemented -fobjc-std=objc1 flag.
+ * objc-act.c (objc_start_class_interface): If attributes are
+ specified when flag_objc1_only is set, print an error.
+ (objc_start_category_interface): Same change.
+ (objc_start_protocol): Same change.
+ (objc_add_method_declaration): Same change.
+ (objc_start_method_definition): Same change.
+ (objc_build_keyword_decl): Same change.
+ (objc_set_visibility): If OBJC_IVAR_VIS_PACKAGE is used when
+ flag_objc1_set is set, print an error.
+ (objc_set_method_opt): If flag_objc1_only is set, print an error.
+ (objc_add_property_declaration): Same change.
+ (objc_add_synthesize_declaration): Same change.
+ (objc_add_dynamic_declaration): Same change.
+ (objc_finish_foreach_loop): Same change.
+ (objc_maybe_build_component_ref): If flag_objc1_only is set,
+ return immediately.
+
+2010-11-03 Nicola Pero <nicola.pero@meta-innovation.com>
+
* objc-act.c (maybe_make_artificial_property_decl): New.
(objc_maybe_build_component_ref): Call
maybe_make_artificial_property_decl if a property can not be
diff --git a/gcc/objc/objc-act.c b/gcc/objc/objc-act.c
index cfbcb3c6826..1c97f46775f 100644
--- a/gcc/objc/objc-act.c
+++ b/gcc/objc/objc-act.c
@@ -686,9 +686,14 @@ objc_start_class_interface (tree klass, tree super_class,
tree protos, tree attributes)
{
if (attributes)
- warning_at (input_location, OPT_Wattributes,
- "class attributes are not available in this version"
- " of the compiler, (ignored)");
+ {
+ if (flag_objc1_only)
+ error_at (input_location, "class attributes are not available in Objective-C 1.0");
+ else
+ warning_at (input_location, OPT_Wattributes,
+ "class attributes are not available in this version"
+ " of the compiler, (ignored)");
+ }
objc_interface_context
= objc_ivar_context
= start_class (CLASS_INTERFACE_TYPE, klass, super_class, protos);
@@ -700,9 +705,14 @@ objc_start_category_interface (tree klass, tree categ,
tree protos, tree attributes)
{
if (attributes)
- warning_at (input_location, OPT_Wattributes,
- "category attributes are not available in this version"
- " of the compiler, (ignored)");
+ {
+ if (flag_objc1_only)
+ error_at (input_location, "category attributes are not available in Objective-C 1.0");
+ else
+ warning_at (input_location, OPT_Wattributes,
+ "category attributes are not available in this version"
+ " of the compiler, (ignored)");
+ }
objc_interface_context
= start_class (CATEGORY_INTERFACE_TYPE, klass, categ, protos);
objc_ivar_chain
@@ -713,9 +723,14 @@ void
objc_start_protocol (tree name, tree protos, tree attributes)
{
if (attributes)
- warning_at (input_location, OPT_Wattributes,
- "protocol attributes are not available in this version"
- " of the compiler, (ignored)");
+ {
+ if (flag_objc1_only)
+ error_at (input_location, "protocol attributes are not available in Objective-C 1.0");
+ else
+ warning_at (input_location, OPT_Wattributes,
+ "protocol attributes are not available in this version"
+ " of the compiler, (ignored)");
+ }
objc_interface_context
= start_protocol (PROTOCOL_INTERFACE_TYPE, name, protos);
objc_method_optional_flag = false;
@@ -783,13 +798,21 @@ void
objc_set_visibility (objc_ivar_visibility_kind visibility)
{
if (visibility == OBJC_IVAR_VIS_PACKAGE)
- warning (0, "%<@package%> presently has the same effect as %<@public%>");
+ {
+ if (flag_objc1_only)
+ error ("%<@package%> is not available in Objective-C 1.0");
+ else
+ warning (0, "%<@package%> presently has the same effect as %<@public%>");
+ }
objc_ivar_visibility = visibility;
}
void
objc_set_method_opt (bool optional)
{
+ if (flag_objc1_only)
+ error_at (input_location, "@optional/@required are not available in Objective-C 1.0");
+
objc_method_optional_flag = optional;
if (!objc_interface_context
|| TREE_CODE (objc_interface_context) != PROTOCOL_INTERFACE_TYPE)
@@ -827,6 +850,9 @@ objc_add_property_declaration (location_t location, tree decl,
bool property_readonly = false;
objc_property_assign_semantics property_assign_semantics = OBJC_PROPERTY_ASSIGN;
+ if (flag_objc1_only)
+ error_at (input_location, "%<@property%> is not available in Objective-C 1.0");
+
if (parsed_property_readonly && parsed_property_readwrite)
{
error_at (location, "%<readonly%> attribute conflicts with %<readwrite%> attribute");
@@ -1155,6 +1181,11 @@ objc_maybe_build_component_ref (tree object, tree property_ident)
tree x = NULL_TREE;
tree rtype;
+ /* If we are in Objective-C 1.0 mode, properties are not
+ available. */
+ if (flag_objc1_only)
+ return NULL_TREE;
+
/* Try to determine quickly if 'object' is an Objective-C object or
not. If not, return. */
if (object == NULL_TREE || object == error_mark_node
@@ -1346,6 +1377,9 @@ objc_add_method_declaration (bool is_class_method, tree decl, tree attributes)
fatal_error ("method declaration not in @interface context");
}
+ if (flag_objc1_only && attributes)
+ error_at (input_location, "method attributes are not available in Objective-C 1.0");
+
objc_decl_method_attributes (&decl, attributes, 0);
objc_add_method (objc_interface_context,
decl,
@@ -6632,6 +6666,9 @@ objc_build_keyword_decl (tree key_name, tree arg_type,
{
tree keyword_decl;
+ if (flag_objc1_only && attributes)
+ error_at (input_location, "method argument attributes are not available in Objective-C 1.0");
+
/* If no type is specified, default to "id". */
arg_type = adjust_type_for_id_default (arg_type);
@@ -9339,6 +9376,9 @@ objc_add_synthesize_declaration (location_t location, tree property_and_ivar_lis
{
tree interface, chain;
+ if (flag_objc1_only)
+ error_at (input_location, "%<@synthesize%> is not available in Objective-C 1.0");
+
if (property_and_ivar_list == error_mark_node)
return;
@@ -9459,6 +9499,9 @@ objc_add_dynamic_declaration (location_t location, tree property_list)
{
tree interface, chain;
+ if (flag_objc1_only)
+ error_at (input_location, "%<@dynamic%> is not available in Objective-C 1.0");
+
if (property_list == error_mark_node)
return;
@@ -12163,6 +12206,9 @@ objc_finish_foreach_loop (location_t location, tree object_expression, tree coll
tree t;
int i;
+ if (flag_objc1_only)
+ error_at (location, "fast enumeration is not available in Objective-C 1.0");
+
if (object_expression == error_mark_node)
return;