mirror of
https://github.com/boostorg/docca.git
synced 2026-01-19 04:12:08 +00:00
work around repeated members of template specializations
This commit is contained in:
28
docca.py
28
docca.py
@@ -782,12 +782,14 @@ class Scope(Entity):
|
||||
'enum': Enum,
|
||||
}[kind]
|
||||
member = factory(member_def, section, self, index)
|
||||
if member is None:
|
||||
continue
|
||||
if type(member) is OverloadSet:
|
||||
key = (member.name, member.access, member.kind)
|
||||
self.members[key] = member
|
||||
else:
|
||||
if member and member.name in self.members:
|
||||
member = work_around_repeated_member(self, member)
|
||||
if member is None:
|
||||
continue
|
||||
assert member.name not in self.members
|
||||
self.members[member.name] = member
|
||||
|
||||
@@ -1146,6 +1148,28 @@ class TypeAlias(Member, Type):
|
||||
delattr(self, '_aliased')
|
||||
|
||||
|
||||
def work_around_repeated_member(scope, member):
|
||||
scope_loc = scope.location
|
||||
member_loc = member.location
|
||||
old_member = scope.members[member.name]
|
||||
old_member_loc = old_member.location
|
||||
if (scope.is_specialization and
|
||||
scope_loc and
|
||||
member_loc and
|
||||
old_member_loc and
|
||||
member_loc.file == scope_loc.file and
|
||||
member_loc.line >= scope_loc.line and
|
||||
(old_member_loc.file != scope_loc.file or
|
||||
old_member_loc.line < scope_loc.line)):
|
||||
# the new member's declaration is in the same file as the
|
||||
# specialization's declaration and follows it; the old member's
|
||||
# declarattion is either in a different file or preceeds the
|
||||
# specialization's declaration
|
||||
del scope.members[member.name]
|
||||
return member
|
||||
return None
|
||||
|
||||
|
||||
class AcceptOneorNone(argparse.Action):
|
||||
def __init__(self, option_strings, dest, **kwargs):
|
||||
if kwargs.get('nargs') is not None:
|
||||
|
||||
@@ -135,10 +135,10 @@ class Section(Block): # A sequence of blocks with an optional title
|
||||
def __getitem__(self, pos) -> Block
|
||||
|
||||
class ParameterList(Block):
|
||||
parameters = 'param'
|
||||
return_values = 'retval'
|
||||
exceptions = 'exception'
|
||||
template_parameters = 'templateparam'
|
||||
Parameters = 'param'
|
||||
ReturnValues = 'retval'
|
||||
Exceptions = 'exception'
|
||||
TemplateParameters = 'templateparam'
|
||||
|
||||
self.kind -> str # 'param', 'templateparam', etc
|
||||
|
||||
|
||||
Reference in New Issue
Block a user