1 | /* This file contains the definitions and documentation for the |
---|
2 | additional tree codes used in the GNU C++ compiler (see tree.def |
---|
3 | for the standard codes). |
---|
4 | Copyright (C) 1987, 1988, 1990, 1993 Free Software Foundation, Inc. |
---|
5 | Hacked by Michael Tiemann (tiemann@cygnus.com) |
---|
6 | |
---|
7 | This file is part of GNU CC. |
---|
8 | |
---|
9 | GNU CC 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 2, or (at your option) |
---|
12 | any later version. |
---|
13 | |
---|
14 | GNU CC 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. |
---|
18 | |
---|
19 | You should have received a copy of the GNU General Public License |
---|
20 | along with GNU CC; see the file COPYING. If not, write to |
---|
21 | the Free Software Foundation, 59 Temple Place - Suite 330, |
---|
22 | Boston, MA 02111-1307, USA. */ |
---|
23 | |
---|
24 | |
---|
25 | /* Reference to the contents of an offset |
---|
26 | (a value whose type is an OFFSET_TYPE). |
---|
27 | Operand 0 is the object within which the offset is taken. |
---|
28 | Operand 1 is the offset. The language independent OFFSET_REF |
---|
29 | just won't work for us. */ |
---|
30 | DEFTREECODE (CP_OFFSET_REF, "cp_offset_ref", "r", 2) |
---|
31 | |
---|
32 | /* For DELETE_EXPR, operand 0 is the store to be destroyed. |
---|
33 | Operand 1 is the value to pass to the destroying function |
---|
34 | saying whether the store should be deallocated as well. */ |
---|
35 | DEFTREECODE (DELETE_EXPR, "dl_expr", "e", 2) |
---|
36 | DEFTREECODE (VEC_DELETE_EXPR, "vec_dl_expr", "e", 2) |
---|
37 | |
---|
38 | /* For a UNSAVE_EXPR, operand 0 is the value to unsave. By unsave, we |
---|
39 | mean that all _EXPRs such as TARGET_EXPRs, SAVE_EXPRs, |
---|
40 | WITH_CLEANUP_EXPRs, CALL_EXPRs and RTL_EXPRs, that are protected |
---|
41 | from being evaluated more than once should be reset so that a new |
---|
42 | expand_expr call of this expr will cause those to be re-evaluated. |
---|
43 | This is useful when we want to reuse a tree in different places, |
---|
44 | but where we must re-expand. */ |
---|
45 | DEFTREECODE (UNSAVE_EXPR, "unsave_expr", "e", 1) |
---|
46 | |
---|
47 | /* Value is reference to particular overloaded class method. |
---|
48 | Operand 0 is the class name (an IDENTIFIER_NODE); |
---|
49 | operand 1 is the field (also an IDENTIFIER_NODE). |
---|
50 | The COMPLEXITY field holds the class level (usually 0). */ |
---|
51 | DEFTREECODE (SCOPE_REF, "scope_ref", "r", 2) |
---|
52 | |
---|
53 | /* When composing an object with a member, this is the result. |
---|
54 | Operand 0 is the object. Operand 1 is the member (usually |
---|
55 | a dereferenced pointer to member). */ |
---|
56 | DEFTREECODE (MEMBER_REF, "member_ref", "r", 2) |
---|
57 | |
---|
58 | /* Type conversion operator in C++. TREE_TYPE is type that this |
---|
59 | operator converts to. Operand is expression to be converted. */ |
---|
60 | DEFTREECODE (TYPE_EXPR, "type_expr", "e", 1) |
---|
61 | |
---|
62 | /* For CPLUS_NEW_EXPR, operand 0 is function which performs initialization, |
---|
63 | operand 1 is argument list to initialization function, |
---|
64 | and operand 2 is the slot which was allocated for this expression. */ |
---|
65 | DEFTREECODE (NEW_EXPR, "nw_expr", "e", 3) |
---|
66 | DEFTREECODE (VEC_NEW_EXPR, "vec_nw_expr", "e", 3) |
---|
67 | |
---|
68 | /* A throw expression. operand 0 is the expression, if there was one, |
---|
69 | else it is NULL_TREE. */ |
---|
70 | DEFTREECODE (THROW_EXPR, "throw_expr", "e", 1) |
---|
71 | |
---|
72 | /* Template definition. The following fields have the specified uses, |
---|
73 | although there are other macros in cp-tree.h that should be used for |
---|
74 | accessing this data. |
---|
75 | DECL_ARGUMENTS template parm vector |
---|
76 | DECL_TEMPLATE_INFO template text &c |
---|
77 | DECL_VINDEX list of instantiations already produced; |
---|
78 | only done for functions so far |
---|
79 | For class template: |
---|
80 | DECL_INITIAL associated templates (methods &c) |
---|
81 | DECL_RESULT null |
---|
82 | For non-class templates: |
---|
83 | TREE_TYPE type of object to be constructed |
---|
84 | DECL_RESULT decl for object to be created |
---|
85 | (e.g., FUNCTION_DECL with tmpl parms used) |
---|
86 | */ |
---|
87 | DEFTREECODE (TEMPLATE_DECL, "template_decl", "d", 0) |
---|
88 | |
---|
89 | /* Index into a template parameter list. This parameter must be a type. |
---|
90 | Use TYPE_FIELDS to find parmlist and index. */ |
---|
91 | DEFTREECODE (TEMPLATE_TYPE_PARM, "template_type_parm", "t", 0) |
---|
92 | |
---|
93 | /* Index into a template parameter list. This parameter must not be a |
---|
94 | type. */ |
---|
95 | DEFTREECODE (TEMPLATE_CONST_PARM, "template_const_parm", "c", 2) |
---|
96 | |
---|
97 | /* For uninstantiated parameterized types. |
---|
98 | TYPE_VALUES tree list: |
---|
99 | TREE_PURPOSE template decl |
---|
100 | TREE_VALUE parm vector |
---|
101 | TREE_CHAIN null |
---|
102 | Other useful fields to be defined later. */ |
---|
103 | DEFTREECODE (UNINSTANTIATED_P_TYPE, "uninstantiated_p_type", "t", 0) |
---|
104 | |
---|
105 | /* A thunk is a stub function. |
---|
106 | |
---|
107 | Thunks are used to implement multiple inheritance: |
---|
108 | At run-time, such a thunk subtracts THUNK_DELTA (an int, not a tree) |
---|
109 | from the this pointer, and then jumps to DECL_INITIAL |
---|
110 | (which is an ADDR_EXPR whose operand is a FUNCTION_DECL). |
---|
111 | |
---|
112 | Other kinds of thunks may be defined later. */ |
---|
113 | DEFTREECODE (THUNK_DECL, "thunk_decl", "d", 0) |
---|
114 | |
---|
115 | /* A namespace declaration. */ |
---|
116 | DEFTREECODE (NAMESPACE_DECL, "namespace_decl", "d", 0) |
---|