help with front end and scopes

Richard Biener richard.guenther@gmail.com
Wed Apr 12 12:45:00 GMT 2017


On Wed, Apr 12, 2017 at 2:07 PM, Andre Groenewald
<adres.is.gevat@gmail.com> wrote:
> Thanks for the help. I just want to elaborate just a bit.
>
> So if I understand it correctly, only the function in my case are
> gimplified or the starting point.
>
> Lets say I initialised classVariable 10 outside a function.
> tree setVariable = build2(INIT_EXPR, void_type_node,
> classVariableDecl, build_int_cst_type(integer_type_node, 10));
> assume setVariable ends up in the statement list of TestClass correctly.
>
> Does it means that gcc will follow the chain from testFunc to
> TestClass (DECL_CONTEXT(testFunc) = TestClass) and then follows the
> stament list of TestClass ending up initialising classVariable by only
> submitting testFunc to gimple?

No.  You have to add that to the function body.  The only way to initialize
variables outside of function bodies is via DECL_INITIAL and that only
works for globals and constant initializers.

Richard.

> Regards,
> André
>
> On Wed, Apr 12, 2017 at 10:36 AM, Richard Biener
> <richard.guenther@gmail.com> wrote:
>> On April 12, 2017 10:24:31 AM GMT+02:00, Andre Groenewald <adres.is.gevat@gmail.com> wrote:
>>>I am a bit stuck on global, file and local name spaces and scopes.
>>>
>>>Normally my expression bindings is associated with a function, which
>>>makes the function the scope of all the variables.
>>>
>>>my front end can parse something like this:
>>>
>>>int testfunc(int parmVar)
>>>{
>>>  int testfuncVar;
>>>}
>>>
>>>int testfunc2(int funcVar)
>>>{
>>>  int testfuncVar2;
>>>}
>>>
>>>Every function is individually gimplified and added and finalized.
>>>Everything is chained and bind correctly.
>>>
>>>parser->Fndecl = build_fn_decl(functionName, fnDeclType);
>>>....
>>>gimplify_function_tree(parser->Fndecl);
>>>cgraph_node::finalize_function(parser->Fndecl, true);
>>>
>>>I want to expand my front end to something like this:
>>>
>>>module TestModule
>>>{
>>>  int moduleVariable;
>>>  class TestClass
>>>  {
>>>    int classVariable;
>>>    int testfunc(int parmVar)
>>>    {
>>>      int testfuncVar;
>>>    }
>>>  }
>>>}
>>>
>>>The question is what should TestModule be declared as, what tree type
>>>or declaration function, and also TestClass. How should TestModule be
>>>gimplified and then finalized.
>>
>> TestModule should be context of TestClass which should be context of testFunc which is the only thing gimplified.
>>
>> For TestModule you have the choice of NAMESPACE_DECL and TRANSLATION_UNIT_DECL.
>>
>> Richard.
>>
>>>Thank you
>>>André
>>



More information about the Gcc mailing list