[cfe-dev] injecting a member function

John McCall rjmccall at apple.com
Fri Feb 18 10:18:51 PST 2011


On Feb 18, 2011, at 1:49 AM, Eric Niebler wrote:
> On 2/18/2011 3:41 PM, John McCall wrote:
>> On Feb 18, 2011, at 12:25 AM, Eric Niebler wrote:
>>> On 2/18/2011 2:58 PM, John McCall wrote:
>>>> 
>>>> I think you want to make some sort of PropertyAccessOperator
>>>> expression.  It would work basically like BinaryConditionalOperator
>>> 
>>> Thanks, John. Do you mean "ConditionalOperator" (which is ternary)?
>> 
>> No, I mean BinaryConditionalOperator, which represents the GNU
>> omitted-middle-operand ?: extension, and which has similar issues with
>> a sub-expression that's used in multiple places.  This is new in ToT.
> 
> Ah. That's explains why I didn't see it. I'm on a fork that is a bit
> behind your trunk, and we don't have it yet. Forgive me for being a bit
> slow on the uptake.

No worries;  I figured you were on a branch and just wanted to point
you at the new hotness. :)

>> It is represented in the AST:  it's an expression node.  Certain other
>> expression nodes can bind it to the result of an expression, which can
>> then be legitimately used in multiple places.  The overall effect is like
>> a "let" expression in a functional language, where the OVE acts as a
>> reference to the bound variable.  In functional syntax, my proposal was:
>> let tmp = obj in
>> tmp.setProp(tmp.getProp() + 1)
> 
> In practical terms, that means that, when evaluating tmp, evaluate obj
> (once), and thereafter all other times tmp is evaluated, just use the
> result already computed. And this Just Works wrt lvalues and rvalues.

Right.  When creating the OVE, you give it a type, value kind, and
value object kind matching the expression it gets bound to.

John.



More information about the cfe-dev mailing list