]> git.ipfire.org Git - thirdparty/gcc.git/commit - gcc/gengtype.c
Handle simple inheritance in gengtype
authordmalcolm <dmalcolm@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 29 Oct 2013 01:01:52 +0000 (01:01 +0000)
committerdmalcolm <dmalcolm@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 29 Oct 2013 01:01:52 +0000 (01:01 +0000)
commit2b5c57c555b1974d26afb21fd2050ac8a9c434ca
tree500792a83215ba241bd2dddaaebc624b38f6e335
parent2dd7b8859597a1620b0e4cf488678f1166ca6958
Handle simple inheritance in gengtype

* gengtype-parse.c (opts_have): Drop "static" so that
we can use this from gengtype.c.
* gengtype.c (set_gc_used_type): Mark any base class as used;
update field traversal to visit inherited fields.
(output_mangled_typename):  Convert references to classes within
an inheritance hierarchy to reference the ultimate base class,
since only it will have gt_ functions.
(get_string_option): New.
(walk_subclasses): New.
(walk_type): Treat GTY structs that have a "desc" as being the
root of an inheritance hierarchy.  Generate a switch on it
within the marking function which walks all subclasses, adding
cases for them via walk_subclasses.  For subclasses, visit all
fields of the type (including inherited ones).
(write_func_for_structure): Don't write fns for subclasses, only
for the ultimate base class within an inheritance hierarchy.
Subclasses-marking will be handled by the base class marking
functions.
(write_types): Likewise.
(write_local_func_for_structure): Likewise.
(USED_BY_TYPED_GC_P): Emit allocators for subclasses that have
a "tag" option (and are thus concrete subclasses).
(write_root): Use the marker function for the ultimate base class.
* gengtype.h (FOR_ALL_INHERITED_FIELDS): New.
(opts_have): Add declaration.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@204146 138bc75d-0d04-0410-961f-82ee72b054a4
gcc/ChangeLog
gcc/gengtype-parse.c
gcc/gengtype.c
gcc/gengtype.h