[cfe-dev] clang::Stmt, what's a child?

Eric Niebler eric at boostpro.com
Wed Feb 23 23:38:09 PST 2011


On 2/24/2011 2:26 PM, John McCall wrote:
> On Feb 23, 2011, at 11:02 PM, Eric Niebler wrote:
>> With my change, the AST for *both* will be stored under a new node type.
>> So, what should child_begin and child_end iterate over for this node
>> type? (My hunch is that only the rewritten node is really a child.)
> 
> Yes, I think only the nodes that will actually be executed should be
> "children" in that sense;  thus the rewritten tree and any tree whose
> values will be bound to OpaqueValueExprs, but not the OVEs
> themselves.

Ah, interesting. Thanks, John. Let's take the example AST you posted in
a previous thread:

  (PropertyAccessOperator int
    # The original operand, for source fidelity
    (MemberExpr int lvalue property
      (DeclRefExpr "obj" Obj lvalue))
    # The opaque value expression
    (OpaqueValueExpr 0xabcdef Obj lvalue)
    # The expression whose result the OpaqueValueExpr will be bound to
    (DeclRefExpr "obj" Obj lvalue)
    # The expression to evaluate, expressed in terms of the OVE
    (CXXMemberCallExpr void
      (MemberExpr void(int) .setBase
        (OpaqueValueExpr 0xabcdef Obj lvalue))
      (CXXMemberCallExpr int
        (MemberExpr PropTy() .getBase
          (OpaqueValueExpr 0xabcdef Obj lvalue)))))

I was thinking that only the last subexpr of PAO (the "expression to
evaluate") should be a logical "child" of PAO. But you seem to be saying
that the third subexpr above (the "expression whose result the
OpaqueValueExpr will be bound to") should also be a logical child.

This seems reasonable, but I just want to make sure that's really what
you are suggesting.

-- 
Eric Niebler
BoostPro Computing
http://www.boostpro.com

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 551 bytes
Desc: OpenPGP digital signature
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20110224/e3feaab0/attachment.sig>


More information about the cfe-dev mailing list