mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
C++, add proper template introduction mangling
This commit is contained in:
parent
611ac9782a
commit
54dd5c5fd1
@ -869,6 +869,14 @@ class ASTTemplateIntroductionParameter(ASTBase):
|
||||
else:
|
||||
return '0' # we need to put something
|
||||
|
||||
def get_id_v2_as_arg(self):
|
||||
# used for the implicit requires clause
|
||||
res = self.identifier.get_id_v2()
|
||||
if self.parameterPack:
|
||||
return u'sp' + res
|
||||
else:
|
||||
return res
|
||||
|
||||
def __unicode__(self):
|
||||
res = []
|
||||
if self.parameterPack:
|
||||
@ -897,8 +905,14 @@ class ASTTemplateIntroduction(ASTBase):
|
||||
for param in self.params:
|
||||
res.append(param.get_id_v2())
|
||||
res.append("E")
|
||||
# TODO: add stuff for the implicit requires clause
|
||||
res.append("MissingRequiresMangling")
|
||||
# let's use X expr E, which is otherwise for constant template args
|
||||
res.append("X")
|
||||
res.append(self.concept.get_id_v2())
|
||||
res.append("I")
|
||||
for param in self.params:
|
||||
res.append(param.get_id_v2_as_arg())
|
||||
res.append("E")
|
||||
res.append("E")
|
||||
return ''.join(res)
|
||||
|
||||
def __unicode__(self):
|
||||
|
@ -422,31 +422,31 @@ def test_templates():
|
||||
raises(DefinitionError, parse, 'enum', 'abc::ns::foo{id_0, id_1, id_2} A')
|
||||
raises(DefinitionError, parse, 'enumerator', 'abc::ns::foo{id_0, id_1, id_2} A')
|
||||
check('class', 'abc::ns::foo{id_0, id_1, id_2} xyz::bar',
|
||||
None, 'I000EMissingRequiresManglingN3xyz3barE')
|
||||
None, 'I000EXN3abc2ns3fooEI4id_04id_14id_2EEN3xyz3barE')
|
||||
check('class', 'abc::ns::foo{id_0, id_1, ...id_2} xyz::bar',
|
||||
None, 'I00DpEMissingRequiresManglingN3xyz3barE')
|
||||
None, 'I00DpEXN3abc2ns3fooEI4id_04id_1sp4id_2EEN3xyz3barE')
|
||||
check('class', 'abc::ns::foo{id_0, id_1, id_2} xyz::bar<id_0, id_1, id_2>',
|
||||
None, 'I000EMissingRequiresManglingN3xyz3barI4id_04id_14id_2EE')
|
||||
None, 'I000EXN3abc2ns3fooEI4id_04id_14id_2EEN3xyz3barI4id_04id_14id_2EE')
|
||||
check('class', 'abc::ns::foo{id_0, id_1, ...id_2} xyz::bar<id_0, id_1, id_2...>',
|
||||
None, 'I00DpEMissingRequiresManglingN3xyz3barI4id_04id_1Dp4id_2EE')
|
||||
None, 'I00DpEXN3abc2ns3fooEI4id_04id_1sp4id_2EEN3xyz3barI4id_04id_1Dp4id_2EE')
|
||||
|
||||
check('class', 'template<> Concept{U} A<int>::B',
|
||||
None, 'IEI0EMissingRequiresManglingN1AIiE1BE')
|
||||
None, 'IEI0EX7ConceptI1UEEN1AIiE1BE')
|
||||
|
||||
check('type', 'abc::ns::foo{id_0, id_1, id_2} xyz::bar = ghi::qux',
|
||||
None, 'I000EMissingRequiresManglingN3xyz3barE')
|
||||
None, 'I000EXN3abc2ns3fooEI4id_04id_14id_2EEN3xyz3barE')
|
||||
check('type', 'abc::ns::foo{id_0, id_1, ...id_2} xyz::bar = ghi::qux',
|
||||
None, 'I00DpEMissingRequiresManglingN3xyz3barE')
|
||||
None, 'I00DpEXN3abc2ns3fooEI4id_04id_1sp4id_2EEN3xyz3barE')
|
||||
check('function', 'abc::ns::foo{id_0, id_1, id_2} void xyz::bar()',
|
||||
None, 'I000EMissingRequiresManglingN3xyz3barEv')
|
||||
None, 'I000EXN3abc2ns3fooEI4id_04id_14id_2EEN3xyz3barEv')
|
||||
check('function', 'abc::ns::foo{id_0, id_1, ...id_2} void xyz::bar()',
|
||||
None, 'I00DpEMissingRequiresManglingN3xyz3barEv')
|
||||
None, 'I00DpEXN3abc2ns3fooEI4id_04id_1sp4id_2EEN3xyz3barEv')
|
||||
check('member', 'abc::ns::foo{id_0, id_1, id_2} ghi::qux xyz::bar',
|
||||
None, 'I000EMissingRequiresManglingN3xyz3barE')
|
||||
None, 'I000EXN3abc2ns3fooEI4id_04id_14id_2EEN3xyz3barE')
|
||||
check('member', 'abc::ns::foo{id_0, id_1, ...id_2} ghi::qux xyz::bar',
|
||||
None, 'I00DpEMissingRequiresManglingN3xyz3barE')
|
||||
None, 'I00DpEXN3abc2ns3fooEI4id_04id_1sp4id_2EEN3xyz3barE')
|
||||
check('concept', 'Iterator{T, U} Another',
|
||||
None, 'I00EMissingRequiresMangling7Another')
|
||||
None, 'I00EX8IteratorI1T1UEE7Another')
|
||||
check('concept', 'template<typename ...Pack> Numerics = (... && Numeric<Pack>)',
|
||||
None, 'IDpE8Numerics')
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user