1 /* This file contains the definitions and documentation for the
2 additional tree codes used in the Objective C front
end (see tree.def
3 for the standard codes
).
4 Copyright (C
) 1990, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2007, 2010
5 Free Software Foundation
, Inc.
7 This file is part of GCC.
9 GCC is free software
; you can redistribute it and
/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation
; either version
3, or (at your option
)
14 GCC is distributed in the hope that it will be useful
,
15 but WITHOUT ANY WARRANTY
; without even the implied warranty of
16 MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with GCC
; see the file COPYING3. If not see
21 <http
://www.gnu.org
/licenses
/>.
*/
24 /* Objective
-C types.
*/
25 DEFTREECODE (CLASS_INTERFACE_TYPE
, "class_interface_type", tcc_type
, 0)
26 DEFTREECODE (CLASS_IMPLEMENTATION_TYPE
, "class_implementation_type",
28 DEFTREECODE (CATEGORY_INTERFACE_TYPE
, "category_interface_type", tcc_type
, 0)
29 DEFTREECODE (CATEGORY_IMPLEMENTATION_TYPE
,"category_implementation_type",
31 DEFTREECODE (PROTOCOL_INTERFACE_TYPE
, "protocol_interface_type", tcc_type
, 0)
33 /* Objective
-C decls.
*/
34 DEFTREECODE (KEYWORD_DECL
, "keyword_decl", tcc_declaration
, 0)
35 DEFTREECODE (INSTANCE_METHOD_DECL
, "instance_method_decl", tcc_declaration
, 0)
36 DEFTREECODE (CLASS_METHOD_DECL
, "class_method_decl", tcc_declaration
, 0)
37 DEFTREECODE (PROPERTY_DECL
, "property_decl", tcc_declaration
, 0)
39 /* Objective
-C expressions.
*/
40 DEFTREECODE (MESSAGE_SEND_EXPR
, "message_send_expr", tcc_expression
, 3)
41 DEFTREECODE (CLASS_REFERENCE_EXPR
, "class_reference_expr", tcc_expression
, 1)
43 /* This tree is used to represent the expression
'object.property',
44 where
'object' is an Objective
-C object and
'property' is an
45 Objective
-C property. Operand
0 is the
object (the tree
46 representing the expression
), and Operand
1 is the
property (the
47 PROPERTY_DECL
). Operand
2 is the
'getter' call
, ready to be used
;
48 we pregenerate it because it is hard to generate it properly later
49 on. Operand
3 records whether using the
'getter' call should
50 generate a deprecation warning or not.
52 A PROPERTY_REF tree needs to be transformed into
'setter' and
53 'getter' calls at some point
; at the moment this happens in two
56 * if we detect that a modify expression is being applied to a
57 PROPERTY_REF
, then we transform that into a
'getter' call (this
58 happens in
build_modify_expr() or
cp_build_modify_expr()).
60 * else
, it will remain as a PROPERTY_REF until we get to
61 gimplification
; at that point
, we convert each PROPERTY_REF into
62 a
'getter' call during ObjC
/ObjC
++ gimplify. At that point
, it
63 is quite hard to build a
'getter' call
, but we have already built
64 it and we just need to swap Operand
2 in
, and emit the deprecation
65 warnings from Operand
3 if needed.
67 Please note that when the Objective
-C
2.0 "dot-syntax" 'object.component'
68 is encountered
, where
'component' is not a property but there are valid
69 setter
/getter methods for it
, an artificial PROPERTY_DECL is generated
70 and used in the PROPERTY_REF.
*/
71 DEFTREECODE (PROPERTY_REF
, "property_ref", tcc_expression
, 4)