[cfe-dev] Quick Questions: DeclRefExpr, TypedefDecl, TypedefType, and TemplateTypeParmDecl.

Larisse Voufo lvoufo at cs.indiana.edu
Tue Feb 8 10:16:32 PST 2011


Cool! Thanks! -- Larisse.

On Tue, Feb 8, 2011 at 12:31 PM, Douglas Gregor <dgregor at apple.com> wrote:

>
> On Feb 8, 2011, at 9:12 AM, Larisse Voufo wrote:
>
> 1 - The documentation for DeclRefExpr says the following:
>       "A <http://clang.llvm.org/doxygen/classA.html> reference to a
> declared variable, function, enum, etc."
>       Does this mean that DeclRefExprs also refer to types such as a
> concept's associated type
>       (declared with the typename keyword, as a TemplateTypeParmDecl) ?
>
>
> No. Look at the declaration hierarchy: DeclRefExpr stores a value
> (ValueDecl), but types are TypeDecls. Plus, a type reference is never an
> expression in the C family of languages.
>
> 2 -  How are TypedefTypes related to TypedefDecls, and possibly
> TemplateTypeParmDecl as well?
>
>
> TypedefType it's a reference to a TypedefDecl that occurs in the source.
> You can create a small file that has a typedef and refers to it, then look
> at the generated AST, to see how it works.
>
> TemplateTypeParmDecl is a bit messier, since the corresponding
> TemplateTypeParmType refers to depth/index rather than a specific
> declaration. We'd like it to refer to the declaration at some point in the
> future, but we're not there yet.
>
> 3-   I ran into this confusion when I was trying to modify the
> transformations on calls to concept's associated
>       functions and types. I can't decide which one of these methods would
> be the most appropriate or general
>       place for the change: TransformDeclRefExpr, or TransformDecl and
> TransformType (and/or even
>       TransformNestedNameSpecifier).
>       Basically, I'm trying to say: if the referred type or function (or
> variable) we are trying to transform is
>       declared within a concept defn context, then match it to the
> appropriate concept map, and change
>       the type or expression so that it now refers to the corresponding
> type or function (or variable) as defined
>       within the map context…
>
>
> The cleanest approach is probably just to create a new Type for references
> to associated types; then you can transform that associated type reference
> specifically.
>
> - Doug
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20110208/e886c124/attachment.html>


More information about the cfe-dev mailing list