Pretty printers for versioned namespace

François Dumont frs.dumont@gmail.com
Mon Jan 30 20:41:00 GMT 2017


Hi

     I tried to use your patch but failed so far. Situation with 
autoreconf is a little bit strange. On my system the default autoreconf 
is version 2.69. When using it I have:

/home/fdt/dev/gcc/git/libstdc++-v3>/usr/bin/autoreconf
configure.ac:4: error: Please use exactly Autoconf 2.64 instead of 2.69.

     So I install version 2.64 and when using it I now have:

/home/fdt/dev/gcc/git/libstdc++-v3>autoreconf
configure.ac:74: error: Autoconf version 2.65 or higher is required

Is there some doc about this ?

I don't know what is the impact of it but is there a plan to allow 
version 2.69 to work out of the box ?

Thanks,
François


So after I install the version 2.64 as required

On 19/01/2017 22:21, Jonathan Wakely wrote:
> On 19/01/17 22:01 +0100, François Dumont wrote:
>> On 10/01/2017 13:39, Jonathan Wakely wrote:
>>> I've committed the attached patch, which passes the tests for the
>>> default configuration and the versioned namespace configuration.
>>>
>>> I added another helper function, strip_versioned_namespace, which is
>>> more expressive than doing typename.replace(vers_nsp, '') everywhere.
>>> I've also renamed vers_nsp to _versioned_namespace (using the naming
>>> convention for global variables private to the module). I've added
>>> checks so that if that variable is None then the extra printers and
>>> special cases for the versioned namespace are skipped. That's not
>>> currently used, but it would allow us to optimise things later if
>>> needed.
>>
>> Very nice feature indeed, see below.
>>
>>>
>>> I also needed to update the new SharedPtrMethodsMatcher to add
>>> "(__\d+)?" to the regular expression.
>>>
>>>
>>>> @@ -1392,47 +1406,54 @@ def register_type_printers(obj):
>>>>    add_one_type_printer(obj, 'discard_block_engine', 'ranlux48')
>>>>    add_one_type_printer(obj, 'shuffle_order_engine', 'knuth_b')
>>>>
>>>> +    # Consider optional versioned namespace
>>>> +    opt_nsp = '(' + vers_nsp + ')?'
>>>> +
>>>>    # Do not show defaulted template arguments in class templates
>>>>    add_one_template_type_printer(obj, 'unique_ptr<T>',
>>>> -            'unique_ptr<(.*), std::default_delete<\\1 ?> >',
>>>> -            'unique_ptr<{1}>')
>>>> +        '{0}unique_ptr<(.*), std::{0}default_delete<\\2 ?>
>>>>> '.format(opt_nsp),
>>>> +        'unique_ptr<{2}>')
>>>
>>> This is ugly. Mixing python string formatting with regular expressions
>>> makes it harder to read, and is inconsistent with how the versioned
>>> namespace is handled elsewhere. In Printer.add_version and
>>> add_one_type_printer we just register two names, one using std:: and
>>> one using std::__7::. We can do the same for the template type
>>> printers.
>>
>>    Yes, your approach is much nicer even if it results in more type 
>> printer registered.
>>
>>    My plan was to submit the attached patch but this doesn't work as 
>> the python module seems to be loaded before libstdc++.so. If you know 
>> a way to test for versioned namespace before starting registering 
>> printers this patch might still be useful. Otherwise I will just 
>> forget it.
>
> See the attached patch, which decides at configure-time whether to
> enable the versioned namespace printers or not. This is what I had in
> mind.
>
>
>



More information about the Libstdc++ mailing list