[cfe-dev] Should we build semantically invalid nodes?
snaroff at apple.com
Sat Oct 25 10:28:49 PDT 2008
On Oct 25, 2008, at 10:28 AM, Argiris Kirtzidis wrote:
> Hey Steve, breaking up Sema is a ridiculous awesome idea!
Sounds like I struck a chord:-)
> Here's a thought I'd like to throw around..
> Could there be something like "composable Actions" ? The ASTBuilder
> would build the AST while Sema would do semantic checks and reject
> invalid nodes.
> This will cleanly separate the semantic checks from the AST building
> and, as you said, will make the code more maintainable.
Composable Actions is an idea I've always wanted to experiment with
(but haven't had a compelling reason to do so). If what you are
thinking of sounds compelling, then it might be a good place to
At this point, it's unclear if the semantics checks can always be
separated from the AST.
Are you certain the current AST's are appropriate for what you
> steve naroff wrote:
>> Hey Argiris,
>> Since clang supports multiple "Action" modules, why not have an
>> ASTBuilder class?
>> My intuition says simply passing in a flag to Sema won't be rich
>> enough. Over time, you would probably need several flags to get
>> Sema to do what you actually want. It just doesn't feel right to me.
>> On the other hand, AST's produced by an ASTBuilder class could be
>> segregated and managed differently. It gives you much more
>> flexibility to meet the needs of a more "fuzzy" environment (like
>> an IDE), including replacing some of the AST nodes (if the one's
>> were using in Sema aren't ideal). For example, the ASTBuilder class
>> might choose to have "real" (i.e. non-unique types) types
>> (something we've discussed before). Having the ability to get the
>> actual source location for type specifiers seems like a "must have"
>> feature for non-compiler clients.
>> I believe my suggestion is fairly easy to implement for Stmts/
>> Exprs. It is more difficult to implement for Decls/Types (since
>> Sema::ActOnDeclarator() does some "heavy lifting" to transform a
>> Declarator into a Decl/Type). If this were the only obstacle, we
>> could refactor the code into a Declarator library that both Action
>> modules could share. Since Declarators in C/C++ are very complex,
>> adding a layer might actually improve the maintenance of the code.
>> I think your desire for more fuzzy AST's is spot on. My only
>> concern is identifying clients for them and choosing an
>> implementation strategy that doesn't disrupt our most central/
>> complex Action module (i.e. Sema). We knew this day would come,
>> which is why the Action interface doesn't force you to use a
>> particular data structure (or any at all).
>> On Oct 25, 2008, at 4:21 AM, Argiris Kirtzidis wrote:
>>> Here's an alternative idea:
>>> How about we pass a flag at Sema to indicate that Sema should just
>>> the AST without semantic checks ?
>>> The meaning of this flag is not that it guarantees that
>>> *absolutely no*
>>> semantic checks are done, just that the focus is less on semantics
>>> more on getting a complete AST.
>>> The Action methods could be modified gradually to check this flag,
>>> on Sebastian's patch, if this flag is on, Sema::ActOnCXXCasts will
>>> the CheckXXXCast call and go to creating the CXXCastExpr directly.
>>> This addresses Doug's concerns about allowing invalid nodes while
>>> enabling clients that only care about a full AST.
>>> Any thoughts ?
>>> cfe-dev mailing list
>>> cfe-dev at cs.uiuc.edu
More information about the cfe-dev