[cfe-dev] [Patch] Make ParseAST() take ASTContext and TU params

Ted Kremenek kremenek at apple.com
Tue Jan 27 15:06:32 PST 2009


Hi Alex,

Sorry for not looking at this sooner.  The patch looks good, but I  
have two additional nits.

First, could you possibly add a comment to the prototype and  
definition of ParseAST indicating what is the behavior of  
TranslationUnit and ASTContext are null?  The postcondition for this  
situation is that once ParseAST completes then any subsequent accesses  
to the ASTs it provided is no longer valid (because they are  
reclaimed).  This should be explicitly stated, since the ASTConsumer  
(which lives beyond the call to ParseAST) could potentially have  
dangling references to the ASTs.

Second, does it make sense to pass in both a TranslationUnit and an  
ASTContext pointer?  Since TranslationUnit holds a reference to  
ASTContext, I think we only need a single argument.  If the  
TranslationUnit* is null then the ASTContext* is null as well.

Ted

On Jan 27, 2009, at 11:49 AM, Alexei Svitkine wrote:

> If no one objects to these changes, can someone commit this to the  
> repository?
>
> -Alexei
>
> On Tue, Jan 27, 2009 at 10:31 AM, Alexei Svitkine
> <alexei.svitkine at gmail.com> wrote:
>> On Mon, Jan 26, 2009 at 2:29 PM, Alexei Svitkine
>> <alexei.svitkine at gmail.com> wrote:
>>> Here's an updated patch that also removes the comment about the
>>> FreeMemory param which no longer exists.
>>>
>>> -Alexei
>>>
>>> On Sat, Jan 24, 2009 at 2:51 PM, Alexei Svitkine
>>> <alexei.svitkine at gmail.com> wrote:
>>>> You are right. Here's a revised patch.
>>>>
>>>> -Alexei
>>>>
>>>> On Sat, Jan 24, 2009 at 11:19 AM, Sebastian Redl
>>>> <sebastian.redl at getdesigned.at> wrote:
>>>>> Alexei Svitkine wrote:
>>>>>> Hi,
>>>>>>
>>>>>> Attached is a patch to make ParseAST() take ASTContext and
>>>>>> TranslationUnit as parameters, as suggested by Steve Naroff.
>>>>>>
>>>>>
>>>>> The double negative in the code confuses me somewhat, but isn't  
>>>>> this
>>>>> condition the wrong way round?
>>>>>
>>>>>> +    if (!DisableFree) {
>>>>>> +      Context = new ASTContext(PP.getLangOptions(),
>>>>>> PP.getSourceManager(),
>>>>>> +                               PP.getTargetInfo(),
>>>>>> +                               PP.getIdentifierTable(),
>>>>>> PP.getSelectorTable());
>>>>>> +      TU = new TranslationUnit(*Context);
>>>>>> +    }
>>>>>> +    ParseAST(PP, Consumer.get(), Context, TU, Stats);
>>>>>
>>>>> Previously, if DisableFree was true, FreeMemory was false, and  
>>>>> ParseAST
>>>>> didn't free the objects.
>>>>> Now, if DisableFree is true, the driver doesn't allocate  
>>>>> objects, so
>>>>> ParseAST does and will free them.
>>>>>
>>>>> Sebastian
>>>>>
>>>>
>>>
>>
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev




More information about the cfe-dev mailing list