This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Suggestion for improving C++ parser memory usage


Roger Sayle wrote:

The first observation is that cp_parser_implicitly_scoped_statement
can be tweaked such that the return type is void rather than tree,
as its result is never used.

Yes.


> Next a call to cp_lexer_peek_token can be
used to enter a switch statement that determines if the following keyword
or token can't possibly need its own scope.  For example, ";" but
hopefully as RID_IF and many of the remaining C++ constructs.

From my limited understanding of C++ parsing, statements such as
RID_IF, RID_WHILE, RID_DO and RID_FOR don't/can't use an immediately
enclosing scope, as they open new scopes for their conditions and
bodies.

Yes, what you say is correct. I am not sure how common that kind of nesting is, but if it turns out to be common your optimization might indeed be a win.


Another approach would be to try to be lazier; set a flag that said that we are in an implicit scope, and then create the actual scoping statement only when it was needed. That would be a much more invasive change; you would need to find all places where an object with a destructor (including temporary objects) is created, and create the scope at that point. I'm not suggesting trying to do this, but it would handle things like:

  if (x)
    f(3);

which your approach would not.

You should of course verify that for:

  if (X x)
    ;

the destructor for "x" is run at the end of the "if", and not at the end of the enclosing scope.

--
Mark Mitchell
CodeSourcery, LLC
mark@codesourcery.com
(916) 791-8304


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]