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