[cfe-commits] r44156 - in /cfe/trunk: Driver/RewriteTest.cpp Sema/SemaExpr.cpp include/clang/AST/Expr.h

Chris Lattner clattner at apple.com
Thu Nov 15 10:21:56 PST 2007


On Nov 15, 2007, at 9:33 AM, Fariborz Jahanian wrote:
>>> --- cfe/trunk/include/clang/AST/Expr.h (original)
>>> +++ cfe/trunk/include/clang/AST/Expr.h Wed Nov 14 20:58:25 2007
>>> @@ -1256,18 +1256,23 @@
>>>  class ObjcIvarDecl *D;
>>>  SourceLocation Loc;
>>>  Expr *Base;
>>> -  bool IsArrow;      // True if this is "X->F", false if this is
>>> "X.F".
>>> +  bool IsArrow:1;      // True if this is "X->F", false if this is
>>> "X.F".
>>> +  bool IsFreeIvar:1;   // True if ivar reference has no base (self
>>> assumed).
>>
>> What is IsFreeIvar used for?  Shouldn't references to fields of the
>> current objects just use a declrefexpr?
>
> It is ivar reference without the base expressions ('self') is  
> assumed. This is to 'attach' the base during rewrite and also for  
> pretty printing to come out exactly as user wrote the code. Use of  
> declrefexpr probably masks what user wrote.

I assume that this is similar to a C++ example like this:

class foo {
   int x;

   int bar() { return x; }
};

Why is it more natural to refer to "x" as a field reference than as a  
declref of the FieldDecl?  I know that GCC explicitly does lowering  
when is parses (making this a field reference off the hidden this/ 
self parameter), but that doesn't seem like the right choice for our  
ASTs.

Thoughts?

-Chris




More information about the cfe-commits mailing list