Thanks Andi, thanks Balaji.

2011/10/7 Andi Hellmund <a...@mail.lxgcc.net>
>
> 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.nix...@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.
>>
>

Reply via email to