|
|
1.1 root 1: \input texinfo @c -*-texinfo-*-
2: @c %**start of header
3: @setfilename g++int.info
4: @settitle G++ internals
5: @setchapternewpage odd
6: @c %**end of header
7:
8: @node Top, Limitations of g++, (dir), (dir)
9: @chapter Internal Architecture of the Compiler
10:
11: This is meant to describe the C++ frontend for gcc in detail.
12: Questions and comments to mrs@@cygnus.com.
13:
14: @menu
15: * Limitations of g++::
16: * Routines::
17: * Implementation Specifics::
18: * Glossary::
19: * Macros::
20: * Typical Behavior::
21: * Coding Conventions::
22: * Error Reporting::
23: * Concept Index::
24: @end menu
25:
26: @node Limitations of g++, Routines, Top, Top
27: @section Limitations of g++
28:
29: @itemize @bullet
30: @item
31: Limitations on input source code: 240 nesting levels with the parser
32: stacksize (YYSTACKSIZE) set to 500 (the default), and requires around
33: 16.4k swap space per nesting level. The parser needs about 2.09 *
34: number of nesting levels worth of stackspace.
35:
36: @cindex pushdecl_class_level
37: @item
38: I suspect there are other uses of pushdecl_class_level that do not call
39: set_identifier_type_value in tandem with the call to
40: pushdecl_class_level. It would seem to be an omission.
41:
42: @cindex delete, two argument
43: @item
44: For two argument delete, the second argument is always calculated by
45: ``virtual_size ='' in the source. It currently has a problem, in that
46: object size is not calculated by the virtual destructor and passed back
47: for the second parameter to delete. Destructors need to return a value
48: just like constructors. ANSI C++ Jun 5 92 wp 12.5.6
49:
50: The second argument is magically deleted in build_method_call, if it is
51: not used. It needs to be deleted for global operator delete also.
52:
53: @cindex visibility checking
54: @item
55: Visibility checking in general is unimplemented, there are a few cases
56: where it is implemented. grok_enum_decls should be used in more places
57: to do visibility checking, but this is only the tip of a bigger problem.
58:
59: @cindex @code{volatile}
60: @item
61: @code{volatile} is not implemented in general.
62:
63: @cindex pointers to members
64: @item
65: Pointers to members are only minimally supported, and there are places
66: where the grammar doesn't even properly accept them yet.
67:
68: @end itemize
69:
70: @node Routines, Implementation Specifics, Limitations of g++, Top
71: @section Routines
72:
73: This section describes some of the routines used in the C++ front-end.
74:
75: @code{build_vtable} and @code{prepare_fresh_vtable} is used only within
76: the @file{cp-class.c} file, and only in @code{finish_struct} and
77: @code{modify_vtable_entries}.
78:
79: @code{build_vtable}, @code{prepare_fresh_vtable}, and
80: @code{finish_struct} are the only routines that set @code{DECL_VPARENT}.
81:
82: @code{finish_struct} can steal the virtual function table from parents,
83: this prohibits related_vslot from working. When finish_struct steals,
84: we know that
85:
86: @example
87: get_binfo (DECL_FIELD_CONTEXT (CLASSTYPE_VFIELD (t)), t, 0)
88: @end example
89:
90: @noindent
91: will get the related binfo.
92:
93: @code{layout_basetypes} does something with the VIRTUALS.
94:
95: Supposedly (according to Tiemann) most of the breadth first searching
96: done, like in @code{get_base_distance} and in @code{get_binfo} was not
97: because of any design decision. I have since found out the at least one
98: part of the compiler needs the notion of depth first binfo searching, I
99: am going to try and convert the whole thing, it should just work. The
100: term left-most refers to the depth first left-most node. It uses
101: @code{MAIN_VARIANT == type} as the condition to get left-most, because
102: the things that have @code{BINFO_OFFSET}s of zero are shared and will
103: have themselves as their own @code{MAIN_VARIANT}s. The non-shared right
104: ones, are copies of the left-most one, hence if it is its own
105: @code{MAIN_VARIENT}, we know it IS a left-most one, if it is not, it is
106: a non-left-most one.
107:
108: @code{get_base_distance}'s path and distance matters in its use in:
109:
110: @itemize @bullet
111: @item
112: @code{prepare_fresh_vtable} (the code is probably wrong)
113: @item
114: @code{init_vfields} Depends upon distance probably in a safe way,
115: build_offset_ref might use partial paths to do further lookups,
116: hack_identifier is probably not properly checking visibility.
117:
118: @item
119: @code{get_first_matching_virtual} probably should check for
120: @code{get_base_distance} returning -2.
121:
122: @item
123: @code{resolve_offset_ref} should be called in a more deterministic
124: manner. Right now, it is called in some random contexts, like for
125: arguments at @code{build_method_call} time, @code{default_conversion}
126: time, @code{convert_arguments} time, @code{build_unary_op} time,
127: @code{build_c_cast} time, @code{build_modify_expr} time,
128: @code{convert_for_assignment} time, and
129: @code{convert_for_initialization} time.
130:
131: But, there are still more contexts it needs to be called in, one was the
132: ever simple:
133:
134: @example
135: if (obj.*pmi != 7)
136: @dots{}
137: @end example
138:
139: Seems that the problems were due to the fact that @code{TREE_TYPE} of
140: the @code{OFFSET_REF} was not a @code{OFFSET_TYPE}, but rather the type
141: of the referent (like @code{INTEGER_TYPE}). This problem was fixed by
142: changing @code{default_conversion} to check @code{TREE_CODE (x)},
143: instead of only checking @code{TREE_CODE (TREE_TYPE (x))} to see if it
144: was @code{OFFSET_TYPE}.
145:
146: @end itemize
147:
148: @node Implementation Specifics, Glossary, Routines, Top
149: @section Implementation Specifics
150:
151: @itemize @bullet
152: @item Explicit Initialization
153:
154: The global list @code{current_member_init_list} contains the list of
155: mem-initializers specified in a constructor declaration. For example:
156:
157: @example
158: foo::foo() : a(1), b(2) @{@}
159: @end example
160:
161: @noindent
162: will initialize @samp{a} with 1 and @samp{b} with 2.
163: @code{expand_member_init} places each initialization (a with 1) on the
164: global list. Then, when the fndecl is being processed,
165: @code{emit_base_init} runs down the list, initializing them. It used to
166: be the case that g++ first ran down @code{current_member_init_list},
167: then ran down the list of members initializing the ones that weren't
168: explicitly initialized. Things were rewritten to perform the
169: initializations in order of declaration in the class. So, for the above
170: example, @samp{a} and @samp{b} will be initialized in the order that
171: they were declared:
172:
173: @example
174: class foo @{ public: int b; int a; foo (); @};
175: @end example
176:
177: @noindent
178: Thus, @samp{b} will be initialized with 2 first, then @samp{a} will be
179: initialized with 1, regardless of how they're listed in the mem-initializer.
180:
181: @item Argument Matching
182:
183: In early 1993, the argument matching scheme in @sc{gnu} C++ changed
184: significantly. The original code was completely replaced with a new
185: method that will, hopefully, be easier to understand and make fixing
186: specific cases much easier.
187:
188: The @samp{-fansi-overloading} option is used to enable the new code; at
189: some point in the future, it will become the default behavior of the
190: compiler.
191:
192: The file @file{cp-call.c} contains all of the new work, in the functions
193: @code{rank_for_overload}, @code{compute_harshness},
194: @code{compute_conversion_costs}, and @code{ideal_candidate}.
195:
196: Instead of using obscure numerical values, the quality of an argument
197: match is now represented by clear, individual codes. The new data
198: structure @code{struct harshness} (it used to be an @code{unsigned}
199: number) contains:
200:
201: @enumerate a
202: @item the @samp{code} field, to signify what was involved in matching two
203: arguments;
204: @item the @samp{distance} field, used in situations where inheritance
205: decides which function should be called (one is ``closer'' than
206: another);
207: @item and the @samp{int_penalty} field, used by some codes as a tie-breaker.
208: @end enumerate
209:
210: The @samp{code} field is a number with a given bit set for each type of
211: code, OR'd together. The new codes are:
212:
213: @itemize @bullet
214: @item @code{EVIL_CODE}
215: The argument was not a permissible match.
216:
217: @item @code{CONST_CODE}
218: Currently, this is only used by @code{compute_conversion_costs}, to
219: distinguish when a non-@code{const} member function is called from a
220: @code{const} member function.
221:
222: @item @code{ELLIPSIS_CODE}
223: A match against an ellipsis @samp{...} is considered worse than all others.
224:
225: @item @code{USER_CODE}
226: Used for a match involving a user-defined conversion.
227:
228: @item @code{STD_CODE}
229: A match involving a standard conversion.
230:
231: @item @code{PROMO_CODE}
232: A match involving an integral promotion. For these, the
233: @code{int_penalty} field is used to handle the ARM's rule (XXX cite)
234: that a smaller @code{unsigned} type should promote to a @code{int}, not
235: to an @code{unsigned int}.
236:
237: @item @code{QUAL_CODE}
238: Used to mark use of qualifiers like @code{const} and @code{volatile}.
239:
240: @item @code{TRIVIAL_CODE}
241: Used for trivial conversions. The @samp{int_penalty} field is used by
242: @code{convert_harshness} to communicate further penalty information back
243: to @code{build_overload_call_real} when deciding which function should
244: be call.
245: @end itemize
246:
247: The functions @code{convert_to_aggr} and @code{build_method_call} use
248: @code{compute_conversion_costs} to rate each argument's suitability for
249: a given candidate function (that's how we get the list of candidates for
250: @code{ideal_candidate}).
251:
252: @end itemize
253:
254: @node Glossary, Macros, Implementation Specifics, Top
255: @section Glossary
256:
257: @table @r
258: @item binfo
259: The main data structure in the compiler used to represent the
260: inheritance relationships between classes. The data in the binfo can be
261: accessed by the BINFO_ accessor macros.
262:
263: @item vtable
264: @itemx virtual function table
265:
266: The virtual function table holds information used in virtual function
267: dispatching. In the compiler, they are usually referred to as vtables,
268: or vtbls. The first index is not used in the normal way, I believe it
269: is probably used for the virtual destructor.
270:
271: @item vfield
272:
273: vfields can be thought of as the base information needed to build
274: vtables. For every vtable that exists for a class, there is a vfield.
275: See also vtable and virtual function table pointer. When a type is used
276: as a base class to another type, the virtual function table for the
277: derived class can be based upon the vtable for the base class, just
278: extended to include the additional virtual methods declared in the
279: derived class.
280:
281: @item virtual function table pointer
282:
283: These are @code{FIELD_DECL}s that are pointer types that point to
284: vtables. See also vtable and vfield.
285: @end table
286:
287: @node Macros, Typical Behavior, Glossary, Top
288: @section Macros
289:
290: This section describes some of the macros used on trees. The list
291: should be alphabetical. Eventually all macros should be documented
292: here. There are some postscript drawings that can be used to better
293: understnad from of the more complex data structures, contact Mike Stump
294: (@code{mrs@@cygnus.com}) for information about them.
295:
296: @table @code
297: @item BINFO_BASETYPES
298: A vector of additional binfos for the types inherited by this basetype.
299: The binfos are fully unshared (except for virtual bases, in which
300: case the binfo structure is shared).
301:
302: If this basetype describes type D as inherited in C,
303: and if the basetypes of D are E anf F,
304: then this vector contains binfos for inheritance of E and F by C.
305:
306: Has values of:
307:
308: TREE_VECs
309:
310:
311: @item BINFO_INHERITANCE_CHAIN
312: Temporarily used to represent specific inheritances. It usually points
313: to the binfo associated with the lesser derived type, but it can be
314: reversed by reverse_path. For example:
315:
316: @example
317: Z ZbY least derived
318: |
319: Y YbX
320: |
321: X Xb most derived
322:
323: TYPE_BINFO (X) == Xb
324: BINFO_INHERITANCE_CHAIN (Xb) == YbX
325: BINFO_INHERITANCE_CHAIN (Yb) == ZbY
326: BINFO_INHERITANCE_CHAIN (Zb) == 0
327: @end example
328:
329: Not sure is the above is really true, get_base_distance has is point
330: towards the most derived type, opposite from above.
331:
332: Set by build_vbase_path, recursive_bounded_basetype_p,
333: get_base_distance, lookup_field, lookup_fnfields, and reverse_path.
334:
335: What things can this be used on:
336:
337: TREE_VECs that are binfos
338:
339:
340: @item BINFO_OFFSET
341: The offset where this basetype appears in its containing type.
342: BINFO_OFFSET slot holds the offset (in bytes) from the base of the
343: complete object to the base of the part of the object that is allocated
344: on behalf of this `type'. This is always 0 except when there is
345: multiple inheritance.
346:
347: Used on TREE_VEC_ELTs of the binfos BINFO_BASETYPES (...) for example.
348:
349:
350: @item BINFO_VIRTUALS
351: A unique list of functions for the virtual function table. See also
352: TYPE_BINFO_VIRTUALS.
353:
354: What things can this be used on:
355:
356: TREE_VECs that are binfos
357:
358:
359: @item BINFO_VTABLE
360: Used to find the VAR_DECL that is the virtual function table associated
361: with this binfo. See also TYPE_BINFO_VTABLE. To get the virtual
362: function table pointer, see CLASSTYPE_VFIELD.
363:
364: What things can this be used on:
365:
366: TREE_VECs that are binfos
367:
368: Has values of:
369:
370: VAR_DECLs that are virtual function tables
371:
372:
373: @item BLOCK_SUPERCONTEXT
374: In the outermost scope of each function, it points to the FUNCTION_DECL
375: node. It aids in better DWARF support of inline functions.
376:
377:
378: @item CLASSTYPE_TAGS
379: CLASSTYPE_TAGS is a linked (via TREE_CHAIN) list of member classes of a
380: class. TREE_PURPOSE is the name, TREE_VALUE is the type (pushclass scans
381: these and calls pushtag on them.)
382:
383: finish_struct scans these to produce TYPE_DECLs to add to the
384: TYPE_FIELDS of the type.
385:
386: It is expected that name found in the TREE_PURPOSE slot is unique,
387: resolve_scope_to_name is one such place that depends upon this
388: uniqueness.
389:
390:
391: @item CLASSTYPE_METHOD_VEC
392: The following is true after finish_struct has been called (on the
393: class?) but not before. Before finish_struct is called, things are
394: different to some extent. Contains a TREE_VEC of methods of the class.
395: The TREE_VEC_LENGTH is the number of differently named methods plus one
396: for the 0th entry. The 0th entry is always allocated, and reserved for
397: ctors and dtors. If there are none, TREE_VEC_ELT(N,0) == NULL_TREE.
398: Each entry of the TREE_VEC is a FUNCTION_DECL. For each FUNCTION_DECL,
399: there is a DECL_CHAIN slot. If the FUNCTION_DECL is the last one with a
400: given name, the DECL_CHAIN slot is NULL_TREE. Otherwise it is the next
401: method that has the same name (but a different signature). It would
402: seem that it is not true that because the DECL_CHAIN slot is used in
403: this way, we cannot call pushdecl to put the method in the global scope
404: (cause that would overwrite the TREE_CHAIN slot), because they use
405: different _CHAINs. finish_struct_methods setups up one version of the
406: TREE_CHAIN slots on the FUNCTION_DECLs.
407:
408: friends are kept in TREE_LISTs, so that there's no need to use their
409: TREE_CHAIN slot for anything.
410:
411: Has values of:
412:
413: TREE_VECs
414:
415:
416: @item CLASSTYPE_VFIELD
417: Seems to be in the process of being renamed TYPE_VFIELD. Use on types
418: to get the main virtual function table pointer. To get the virtual
419: function table use BINFO_VTABLE (TYPE_BINFO ()).
420:
421: Has values of:
422:
423: FIELD_DECLs that are virtual function table pointers
424:
425: What things can this be used on:
426:
427: RECORD_TYPEs
428:
429:
430: @item DECL_CLASS_CONTEXT
431: Identifys the context that the _DECL was found in. For virtual function
432: tables, it points to the type associated with the virtual function
433: table. See also DECL_CONTEXT, DECL_FIELD_CONTEXT and DECL_FCONTEXT.
434:
435: The difference between this and DECL_CONTEXT, is that for virtuals
436: functions like:
437:
438: @example
439: struct A
440: @{
441: virtual int f ();
442: @};
443:
444: struct B : A
445: @{
446: int f ();
447: @};
448:
449: DECL_CONTEXT (A::f) == A
450: DECL_CLASS_CONTEXT (A::f) == A
451:
452: DECL_CONTEXT (B::f) == A
453: DECL_CLASS_CONTEXT (B::f) == B
454: @end example
455:
456: Has values of:
457:
458: RECORD_TYPEs, or UNION_TYPEs
459:
460: What things can this be used on:
461:
462: TYPE_DECLs, _DECLs
463:
464:
465: @item DECL_CONTEXT
466: Identifys the context that the _DECL was found in. Can be used on
467: virtual function tables to find the type associated with the virtual
468: function table, but since they are FIELD_DECLs, DECL_FIELD_CONTEXT is a
469: better access method. Internally the same as DECL_FIELD_CONTEXT, so
470: don't us both. See also DECL_FIELD_CONTEXT, DECL_FCONTEXT and
471: DECL_CLASS_CONTEXT.
472:
473: Has values of:
474:
475: RECORD_TYPEs
476:
477:
478: What things can this be used on:
479:
480: @display
481: VAR_DECLs that are virtual function tables
482: _DECLs
483: @end display
484:
485:
486: @item DECL_FIELD_CONTEXT
487: Identifys the context that the FIELD_DECL was found in. Internally the
488: same as DECL_CONTEXT, so don't us both. See also DECL_CONTEXT,
489: DECL_FCONTEXT and DECL_CLASS_CONTEXT.
490:
491: Has values of:
492:
493: RECORD_TYPEs
494:
495: What things can this be used on:
496:
497: @display
498: FIELD_DECLs that are virtual function pointers
499: FIELD_DECLs
500: @end display
501:
502:
503: @item DECL_NESTED_TYPENAME
504: Holds the fully qualified type name. Example, Base::Derived.
505:
506: Has values of:
507:
508: IDENTIFIER_NODEs
509:
510: What things can this be used on:
511:
512: TYPE_DECLs
513:
514:
515: @item DECL_NAME
516:
517: Has values of:
518:
519: @display
520: 0 for things that don't have names
521: IDENTIFIER_NODEs for TYPE_DECLs
522: @end display
523:
524: @item DECL_IGNORED_P
525: A bit that can be set to inform the debug information output routines in
526: the backend that a certain _DECL node should be totally ignored.
527:
528: Used in cases where it is known that the debugging information will be
529: output in another file, or where a sub-type is known not to be needed
530: because the enclosing type is not needed.
531:
532: A compiler constructed virtual destructor in derived classes that do not
533: define an exlicit destructor that was defined exlicit in a base class
534: has this bit set as well. Also used on __FUNCTION__ and
535: __PRETTY_FUNCTION__ to mark they are ``compiler generated.'' c-decl and
536: c-lex.c both want DECL_IGNORED_P set for ``internally generated vars,''
537: and ``user-invisible variable.''
538:
539: Functions built by the C++ front-end such as default destructors,
540: virtual desctructors and default constructors want to be marked that
541: they are compiler generated, but unsure why.
542:
543: Currently, it is used in an absolute way in the C++ front-end, as an
544: optimization, to tell the debug information output routines to not
545: generate debugging information that will be output by another separately
546: compiled file.
547:
548:
549: @item DECL_VIRTUAL_P
550: A flag used on FIELD_DECLs and VAR_DECLs. (Documentation in tree.h is
551: wrong.) Used in VAR_DECLs to indicate that the variable is a vtable.
552: It is also used in FIELD_DECLs for vtable pointers.
553:
554: What things can this be used on:
555:
556: FIELD_DECLs and VAR_DECLs
557:
558:
559: @item DECL_VPARENT
560: Used to point to the parent type of the vtable if there is one, else it
561: is just the type associated with the vtable. Because of the sharing of
562: virtual function tables that goes on, this slot is not very useful, and
563: is in fact, not used in the compiler at all. It can be removed.
564:
565: What things can this be used on:
566:
567: VAR_DECLs that are virtual function tables
568:
569: Has values of:
570:
571: RECORD_TYPEs maybe UNION_TYPEs
572:
573:
574: @item DECL_FCONTEXT
575: Used to find the first baseclass in which this FIELD_DECL is defined.
576: See also DECL_CONTEXT, DECL_FIELD_CONTEXT and DECL_CLASS_CONTEXT.
577:
578: How it is used:
579:
580: Used when writing out debugging information about vfield and
581: vbase decls.
582:
583: What things can this be used on:
584:
585: FIELD_DECLs that are virtual function pointers
586: FIELD_DECLs
587:
588:
589: @item DECL_REFERENCE_SLOT
590: Used to hold the initialize for the reference.
591:
592: What things can this be used on:
593:
594: PARM_DECLs and VAR_DECLs that have a reference type
595:
596:
597: @item DECL_VINDEX
598: Used for FUNCTION_DECLs in two different ways. Before the structure
599: containing the FUNCTION_DECL is laid out, DECL_VINDEX may point to a
600: FUNCTION_DECL in a base class which is the FUNCTION_DECL which this
601: FUNCTION_DECL will replace as a virtual function. When the class is
602: laid out, this pointer is changed to an INTEGER_CST node which is
603: suitable to find an index into the virtual function table. See
604: get_vtable_entry as to how one can find the right index into the virtual
605: function table. The first index 0, of a virtual function table it not
606: used in the normal way, so the first real index is 1.
607:
608: DECL_VINDEX may be a TREE_LIST, that would seem to be a list of
609: overridden FUNCTION_DECLs. add_virtual_function has code to deal with
610: this when it uses the variable base_fndecl_list, but it would seem that
611: somehow, it is possible for the TREE_LIST to pursist until method_call,
612: and it should not.
613:
614:
615: What things can this be used on:
616:
617: FUNCTION_DECLs
618:
619:
620: @item DECL_SOURCE_FILE
621: Identifies what source file a particular declaration was found in.
622:
623: Has values of:
624:
625: "<built-in>" on TYPE_DECLs to mean the typedef is built in
626:
627:
628: @item DECL_SOURCE_LINE
629: Identifies what source line number in the source file the declaration
630: was found at.
631:
632: Has values of:
633:
634: @display
635: 0 for an undefined label
636:
637: 0 for TYPE_DECLs that are internally generated
638:
639: 0 for FUNCTION_DECLs for functions generated by the compiler
640: (not yet, but should be)
641:
642: 0 for ``magic'' arguments to functions, that the user has no
643: control over
644: @end display
645:
646:
647: @item TREE_USED
648:
649: Has values of:
650:
651: 0 for unused labels
652:
653:
654: @item TREE_ADDRESSABLE
655: A flag that is set for any type that has a constructor.
656:
657:
658: @item TREE_COMPLEXITY
659: They seem a kludge way to track recursion, poping, and pushing. They only
660: appear in cp-decl.c and cp-decl2.c, so the are a good candidate for
661: proper fixing, and removal.
662:
663:
664: @item TREE_PRIVATE
665: Set for FIELD_DECLs by finish_struct. But not uniformly set.
666:
667: The following routines do something with PRIVATE visibility:
668: build_method_call, alter_visibility, finish_struct_methods,
669: finish_struct, convert_to_aggr, CWriteLanguageDecl, CWriteLanguageType,
670: CWriteUseObject, compute_visibility, lookup_field, dfs_pushdecl,
671: GNU_xref_member, dbxout_type_fields, dbxout_type_method_1
672:
673:
674: @item TREE_PROTECTED
675: The following routines do something with PROTECTED visibility:
676: build_method_call, alter_visibility, finish_struct, convert_to_aggr,
677: CWriteLanguageDecl, CWriteLanguageType, CWriteUseObject,
678: compute_visibility, lookup_field, GNU_xref_member, dbxout_type_fields,
679: dbxout_type_method_1
680:
681:
682: @item TYPE_BINFO
683: Used to get the binfo for the type.
684:
685: Has values of:
686:
687: TREE_VECs that are binfos
688:
689: What things can this be used on:
690:
691: RECORD_TYPEs
692:
693:
694: @item TYPE_BINFO_BASETYPES
695: See also BINFO_BASETYPES.
696:
697: @item TYPE_BINFO_VIRTUALS
698: A unique list of functions for the virtual function table. See also
699: BINFO_VIRTUALS.
700:
701: What things can this be used on:
702:
703: RECORD_TYPEs
704:
705:
706: @item TYPE_BINFO_VTABLE
707: Points to the virtual function table associated with the given type.
708: See also BINFO_VTABLE.
709:
710: What things can this be used on:
711:
712: RECORD_TYPEs
713:
714: Has values of:
715:
716: VAR_DECLs that are virtual function tables
717:
718:
719: @item TYPE_NAME
720: Names the type.
721:
722: Has values of:
723:
724: @display
725: 0 for things that don't have names.
726: should be IDENTIFIER_NODE for RECORD_TYPEs UNION_TYPEs and
727: ENUM_TYPEs.
728: TYPE_DECL for RECORD_TYPEs, UNION_TYPEs and ENUM_TYPEs, but
729: shouldn't be.
730: TYPE_DECL for typedefs, unsure why.
731: @end display
732:
733: What things can one use this on:
734:
735: @display
736: TYPE_DECLs
737: RECORD_TYPEs
738: UNION_TYPEs
739: ENUM_TYPEs
740: @end display
741:
742: History:
743:
744: It currently points to the TYPE_DECL for RECORD_TYPEs,
745: UNION_TYPEs and ENUM_TYPEs, but it should be history soon.
746:
747:
748: @item TYPE_METHODS
749: Synonym for @code{CLASSTYPE_METHOD_VEC}. Chained together with
750: @code{TREE_CHAIN}. @file{dbxout.c} uses this to get at the methods of a
751: class.
752:
753:
754: @item TYPE_DECL
755: Used to represent typedefs, and used to represent bindings layers.
756:
757: Components:
758:
759: DECL_NAME is the name of the typedef. For example, foo would
760: be found in the DECL_NAME slot when @code{typedef int foo;} is
761: seen.
762:
763: DECL_SOURCE_LINE identifies what source line number in the
764: source file the declaration was found at. A value of 0
765: indicates that this TYPE_DECL is just an internal binding layer
766: marker, and does not correspond to a user suppiled typedef.
767:
768: DECL_SOURCE_FILE
769:
770: @item TYPE_FIELDS
771: A linked list (via @code{TREE_CHAIN}) of member types of a class. The
772: list can contain @code{TYPE_DECL}s, but there can also be other things
773: in the list apparently. See also @code{CLASSTYPE_TAGS}.
774:
775:
776: @item TYPE_VIRTUAL_P
777: A flag used on a @code{FIELD_DECL} or a @code{VAR_DECL}, indicates it is
778: a virtual function table or a pointer to one. When used on a
779: @code{FUNCTION_DECL}, indicates that it is a virtual function. When
780: used on an @code{IDENTIFIER_NODE}, indicates that a function with this
781: same name exists and has been declared virtual.
782:
783: When used on types, it indicates that the type has virtual functions, or
784: is derived from one that does.
785:
786: Not sure if the above about virtual function tables is still true. See
787: also info on @code{DECL_VIRTUAL_P}.
788:
789: What things can this be used on:
790:
791: FIELD_DECLs, VAR_DECLs, FUNCTION_DECLs, IDENTIFIER_NODEs
792:
793:
794: @item VF_BASETYPE_VALUE
795: Get the associated type from the binfo that caused the given vfield to
796: exist. This is the least derived class (the most parent class) that
797: needed a virtual function table. It is probably the case that all uses
798: of this field are misguided, but they need to be examined on a
799: case-by-case basis. See history for more information on why the
800: previous statement was made.
801:
802: What things can this be used on:
803:
804: TREE_LISTs that are vfields
805:
806: History:
807:
808: This field was used to determine if a virtual function table's
809: slot should be filled in with a certain virtual function, by
810: checking to see if the type returned by VF_BASETYPE_VALUE was a
811: parent of the context in which the old virtual function existed.
812: This incorrectly assumes that a given type _could_ not appear as
813: a parent twice in a given inheritance lattice. For single
814: inheritance, this would in fact work, because a type could not
815: possibly appear more than once in an inheritance lattice, but
816: with multiple inheritance, a type can appear more than once.
817:
818:
819: @item VF_BINFO_VALUE
820: Identifies the binfo that caused this vfield to exist. Can use
821: @code{TREE_VIA_VIRTUAL} on result to find out if it is a virtual base
822: class. Related to the binfo found by
823:
824: @example
825: get_binfo (VF_BASETYPE_VALUE (vfield), t, 0)
826: @end example
827:
828: @noindent
829: where @samp{t} is the type that has the given vfield.
830:
831: @example
832: get_binfo (VF_BASETYPE_VALUE (vfield), t, 0)
833: @end example
834:
835: @noindent
836: will return the binfo for the the given vfield.
837:
838: May or may not be set at @code{modify_vtable_entries} time. Set at
839: @code{finish_base_struct} time.
840:
841: What things can this be used on:
842:
843: TREE_LISTs that are vfields
844:
845:
846: @item VF_DERIVED_VALUE
847: Identifies the type of the most derived class of the vfield, excluding
848: the the class this vfield is for.
849:
850: What things can this be used on:
851:
852: TREE_LISTs that are vfields
853:
854:
855: @item VF_NORMAL_VALUE
856: Identifies the type of the most derived class of the vfield, including
857: the class this vfield is for.
858:
859: What things can this be used on:
860:
861: TREE_LISTs that are vfields
862:
863:
864: @item WRITABLE_VTABLES
865: This is a option that can be defined when building the compiler, that
866: will cause the compiler to output vtables into the data segment so that
867: the vtables maybe written. This is undefined by default, because
868: normally the vtables should be unwritable. People that implement object
869: I/O facilities may, or people that want to change the dynamic type of
870: objects may want to have the vtables writable. Another way of achieving
871: this would be to make a copy of the vtable into writable memory, but the
872: drawback there is that that method only changes the type for one object.
873:
874: @end table
875:
876: @node Typical Behavior, Coding Conventions, Macros, Top
877: @section Typical Behavior
878:
879: @cindex parse errors
880:
881: Whenever seemingly normal code fails with errors like
882: @code{syntax error at `\@{'}, it's highly likely that grokdeclarator is
883: returning a NULL_TREE for whatever reason.
884:
885: @node Coding Conventions, Error Reporting, Typical Behavior, Top
886: @section Coding Conventions
887:
888: It should never be that case that trees are modified in-place by the
889: back-end, @emph{unless} it is guaranteed that the semantics are the same
890: no matter how shared the tree structure is. @file{fold-const.c} still
891: has some cases where this is not true, but rms hypothesizes that this
892: will never be a problem.
893:
894: @node Error Reporting, Concept Index, Coding Conventions, Top
895: @section Error Reporting
896:
897: The C++ frontend uses a call-back mechanism to allow functions to print
898: out reasonable strings for types and functions without putting extra
899: logic in the functions where errors are found. The interface is through
900: the @code{lang_error} function (or @code{lang_warning}, etc.). The
901: syntax is exactly like that of @code{error}, except that a few more
902: conversions are supported:
903:
904: @itemize @bullet
905: @item
906: %D indicates a *_DECL node
907: @item
908: %T indicates a *_TYPE node
909: @item
910: %E indicates a *_EXPR node (currently only used for default parameters
911: in FUNCTION_DECLs)
912: @end itemize
913:
914: For a more verbose message (@code{class foo} as opposed to just @code{foo},
915: including the return type for functions), use %#c.
916: To have the line number on the error message indicate the line of the
917: DECL, use @code{lang_error_at} and its ilk.
918:
919: @node Concept Index, , Error Reporting, Top
920: @section Concept Index
921:
922: @printindex cp
923:
924: @bye
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.