The AST tree modification. Edited.

Andi Hellmund andi@mail.lxgcc.net
Fri Oct 7 02:06:00 GMT 2011


Hi,

as an addition to Balaji's answer. Please find attached an extract of a 
sample front-end generating various types of tree nodes (e.g. arrays, 
structs, ...). This used to work with an older version of GCC, but I'm 
not sure if this still works with the most recent version. Anyway, it 
should give you some pointers for further investigations ...

Best regards,
Andi


> Hello,
> 	For most of the things you are looking for, please look for a function called build_decl. It is used in several places inside GCC. Let me give you a small example,
>
> If you do the following:
>
> tree x = build_decl (UNKNOWN_LOCATION, VAR_DECL, get_identifer("ii"), integer_type_node)
>
> you will declare a variable called "ii" of type "integer."
>
> Similarly, to create a new internal structure, if do something like this:
>
> tree struct_frame = lang_hooks.make_type (RECORD_TYPE);
> tree struct_field = build_decl (UNKNOWN_LOCATION, FIELD_DECL, get_identifier("variable"), integer_type_node)
> TREE_CHAIN(struct_field) = struct_frame
>
> You will create the following internal structure
>
> struct {
>     int variable;
> }
>
> I hope this helps you get started.
>
> Thanks,
>
> Balaji V .Iyer.
>
> -----Original Message-----
> From: niXman [mailto:i.nixman@gmail.com]
> Sent: Monday, October 03, 2011 6:51 PM
> To: gcc@gcc.gnu.org
> Subject: The AST tree modification. Edited.
>
> Hi everybody!
> It is necessary to implement a plug-in for GCC designed to collect the information on types of translation unit, and generate static const array of types rtti_ex _ on its base;  //////////////////////////////////////
> enum class type_ {
>     char_, uchar_, short_, ushort_, int_, uint_, long_, ulong_,
>     int64_, uint64_, array_, pointer_, double_, long_double_, float_,
>     class_
> };
>
> struct rtti_ex_ { //<<<<<<<<<<<<<<<<<<<<<<<<<
>     const char* name;
>     const type_ type;
>     const size_t size;
>     const size_t align;
>     const size_t offset;
> };
>
> // generated from plugin.
> static const rtti_ex_ rtti_ex_array_[] = {
>     {...},
>     {...},
>     {...}
> };
> /////////////////////////////////////
>
> There aren't any problems with information collection from AST. There is a complexity with AST modification:
> 1. How to declare a variable?
> 2. How to declare the typedef?
> 3. How to declare a structure?
> 4. How to declare an array of structures?
> I suppose that there should be a function like: tree make_subtree (const char* source); which result I could insert in the corresponding node. But I haven't found it.
>
> Please, give me some links on this subject. It is very desirable, if you could give some links with examples.
>
> Thanks.
>    

-------------- next part --------------
A non-text attachment was scrubbed...
Name: sfe_example.c
Type: text/x-csrc
Size: 11420 bytes
Desc: not available
URL: <https://gcc.gnu.org/pipermail/gcc/attachments/20111007/8be8dd94/attachment.bin>


More information about the Gcc mailing list