[cxx-abi-dev] Mangling C++0x Lambdas

David Vandevoorde daveed at edg.com
Wed Dec 17 16:28:07 UTC 2008


On Dec 17, 2008, at 11:17 AM, Doug Gregor wrote:

> On Wed, Dec 17, 2008 at 8:00 AM, David Vandevoorde <daveed at edg.com>  
> wrote:
>>
>> On Dec 17, 2008, at 10:39 AM, John Freeman wrote:
>>
>>> Doug Gregor wrote:
>>>>
>>>> We need something that encodes the context of the lambda (function
>>>> "::foo" with no parameters) followed by, perhaps, a numbering  
>>>> scheme
>>>> within that context. The context encoding needs to account for (at
>>>> least) inline functions, classes, and namespaces.
>>>>
>>>
>>> This sounds like a problem that must have been encountered  
>>> before.  Is
>>> there already a solution for it?  At least for the unnumbered  
>>> portion?
>>
>>
>> Yes, see 5.1.6.  We can reuse that general scheme for local  
>> lambdas.  E.g.:
>>
>>       <local-lambda-name> := Z <function encoding> E l  
>> [<discriminator>]
>>
>> and maybe introduce something similar for local unnamed classes:
>>
>>       <local-unnamed-class_name> := Z <function encoding> E u
>> [<discriminator>]
>>
>>
>> A tougher problem are namespace-scope lambdas (e.g., in  
>> initializers or
>> default arguments).
>
> In an initializer, we could mangle the name of the entity being
> initialized (and then a counter, in case there are multiple lambdas in
> the initializer).


I'm not sure that we need to deal with the initializer case at all,  
because I _think_ that such a lambda would only be referenced  
internally.


> In a default argument, we could mangle it as if it's part of the
> entity where the default argument lives (in a function or template).


I believe it would require a different code from the entities local to  
that function/template, though (since the the two might not coexist in  
the same translation unit).

I'm concerned that there might be other contexts where there isn't a  
"top-level" entity to key off from.  For example, explicit template  
instantiations are such a context.  Like initializers, I think any  
lambda there would be purely internal, and so there wouldn't be an  
issue in that particular case.  But are there other contexts?

	Daveed




More information about the cxx-abi-dev mailing list