[cfe-dev] [PATCH]: Parsing for C++ classes
clattner at apple.com
Tue Jun 24 11:11:01 PDT 2008
On Jun 24, 2008, at 11:07 AM, Argiris Kirtzidis wrote:
> Chris Lattner wrote:
>> + /// LexedMethodStacks - During parsing of a top (non-nested) C++
>> class, its
>> + /// inline method definitions and the inline method definitions
>> of its nested
>> + /// classes are lexed and stored here.
>> + /// A new lexed methods stack is pushed for local classes in
>> inline methods.
>> + std::stack< std::stack<LexedMethod> > LexedMethodStacks;
>> Out of curiousity, why use a std::stack instead of std::deque or
> About the outer stack, it's the last "MethodTokensForOneClass"
> pushed that is going to be used for adding lexed methods, so a stack
> seems appropriate.
> About the inner stack, there won't be a difference whether it's a
> stack, list or deque, although std::vector might not be as
> appropriate since there's no need to have LexedMethods in contiguous
> Since a std::stack was already brought in for the outer stack, I
> figured I could use it again to avoid bringing in an additional
std::stack is actually not a container, it is an adaptor that wraps
std::deque (by default).
>> These really push one 'nested class' worth of methods, right? It
>> might be better to name these "PushClassStack" or something.
> Ok to both suggestions.
> Just a sidenote, I think these containers and methods will need
> refactoring to accomodate other types of "delayed parsing", like
> default parameters. So they are subject to change; probably a new
> class will be added for all this.
Makes sense, using a new struct (even with one member) is even better
than a typedef!
>> In Parser::ConsumeAndStoreUntil, do you think it would make sense
>> to specialize it for T=r_brace, or do you expect other clients?
> This method calls itself recursively for braces and parentheses.
More information about the cfe-dev