Skip to content

Commit 1674a3b

Browse files
committed
fix: preserve extraction mode when copying members from derived classes
Fixes #1119
1 parent 2463633 commit 1674a3b

26 files changed

+148
-1129
lines changed

src/lib/Metadata/Finalizers/BaseMembersFinalizer.cpp

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -98,16 +98,6 @@ inheritBaseMembers(
9898
std::vector<SymbolID>& derived,
9999
std::vector<SymbolID> const& base)
100100
{
101-
Symbol const* derivedInfo = nullptr;
102-
auto const getDerivedInfo = [&]() -> Symbol const*
103-
{
104-
if (!derivedInfo)
105-
{
106-
derivedInfo = corpus_.find(derivedId);
107-
}
108-
return derivedInfo;
109-
};
110-
111101
for (SymbolID const& otherID: base)
112102
{
113103
// Find the info from the base class
@@ -173,14 +163,6 @@ inheritBaseMembers(
173163
std::format("{}-{}", toBase16Str(otherCopy->Parent),
174164
toBase16Str(otherInfo.id)));
175165
derived.push_back(otherCopy->id);
176-
// Get the extraction mode from the derived class
177-
if (otherCopy->Extraction == ExtractionMode::Dependency ||
178-
otherCopy->Extraction == ExtractionMode::ImplementationDefined)
179-
{
180-
Symbol const* derivedInfoPtr = getDerivedInfo();
181-
MRDOCS_CHECK_OR_CONTINUE(derivedInfoPtr);
182-
otherCopy->Extraction = derivedInfoPtr->Extraction;
183-
}
184166
corpus_.info_.insert(std::move(otherCopy));
185167
}
186168
}

test-files/golden-tests/config/extract-implicit-specializations/extract-implicit-specializations.adoc

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -36,27 +36,6 @@ struct A
3636
|
3737
|===
3838

39-
=== Member Functions
40-
41-
[cols=1]
42-
|===
43-
| Name
44-
| link:#A-value[`value`]
45-
|===
46-
47-
[#A-value]
48-
== link:#A[A]::value
49-
50-
=== Synopsis
51-
52-
Declared in `&lt;extract&hyphen;implicit&hyphen;specializations&period;cpp&gt;`
53-
54-
[source,cpp,subs="verbatim,replacements,macros,-callouts"]
55-
----
56-
int&
57-
value();
58-
----
59-
6039
[#B-00]
6140
== B
6241

test-files/golden-tests/config/extract-implicit-specializations/extract-implicit-specializations.html

Lines changed: 0 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -51,35 +51,8 @@ <h2>Base Classes</h2>
5151
</tbody>
5252
</table>
5353
</div>
54-
<h2>Member Functions</h2>
55-
<table style="table-layout: fixed; width: 100%;">
56-
<thead>
57-
<tr>
58-
<th>Name</th>
59-
</tr>
60-
</thead>
61-
<tbody>
62-
<tr>
63-
<td><a href="#A-value"><code>value</code></a> </td></tr>
64-
</tbody>
65-
</table>
66-
6754

6855

69-
</div>
70-
<div>
71-
<div>
72-
<h2 id="A-value">A::value</h2>
73-
</div>
74-
<div>
75-
<h3>Synopsis</h3>
76-
<div>
77-
Declared in <code>&lt;extract-implicit-specializations.cpp&gt;</code></div>
78-
<pre>
79-
<code class="source-code cpp">int&
80-
value();</code>
81-
</pre>
82-
</div>
8356
</div>
8457
<div>
8558
<div>

test-files/golden-tests/config/extract-implicit-specializations/extract-implicit-specializations.xml

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,6 @@
77
<base>
88
<type id="Bu/3QcmNOdsc7RSM3OKHnuCxGPU=" name="B&lt;int&gt;"/>
99
</base>
10-
<function name="value" id="i2Kh9WfDseks8Lnr/kapVaR9r4g=">
11-
<file short-path="extract-implicit-specializations.cpp" source-path="extract-implicit-specializations.cpp" line="3"/>
12-
<return>
13-
<type class="lvalue-reference">
14-
<pointee-type name="int"/>
15-
</type>
16-
</return>
17-
</function>
1810
</struct>
1911
<template>
2012
<tparam name="T" class="type"/>

test-files/golden-tests/config/inherit-base-members/copy-dependencies.adoc

Lines changed: 0 additions & 102 deletions
Original file line numberDiff line numberDiff line change
@@ -318,8 +318,6 @@ class derived
318318
| This function should be indirectly inherited by derived classes&period;
319319
| link:#derived-do_derived_shadowed[`do&lowbar;derived&lowbar;shadowed`]
320320
| This function should shadow the base class function&period;
321-
| link:#derived-excluded_inherited[`excluded&lowbar;inherited`]
322-
| This function should be inherited by derived classes&period;
323321
|===
324322

325323
=== Protected Member Functions
@@ -333,10 +331,6 @@ class derived
333331
| This function should shadow the excluded&lowbar;base function&period;
334332
| link:#base-do_derived_shadowed[`do&lowbar;derived&lowbar;shadowed`]
335333
| This function should be shadowed by derived classes&period;
336-
| link:#derived-do_excluded_inherited[`do&lowbar;excluded&lowbar;inherited`]
337-
| This function should be inherited by derived classes&period;
338-
| link:#derived-do_shadowed[`do&lowbar;shadowed`]
339-
| This function should be shadowed by derived classes&period;
340334
|===
341335

342336
[#derived-derived_shadowed]
@@ -377,51 +371,6 @@ do&lowbar;derived&lowbar;shadowed();
377371

378372
A class that derives from base and excluded&lowbar;base
379373

380-
[#derived-excluded_inherited]
381-
== link:#derived[derived]::excluded&lowbar;inherited
382-
383-
This function should be inherited by derived classes&period;
384-
385-
=== Synopsis
386-
387-
Declared in `&lt;copy&hyphen;dependencies&period;cpp&gt;`
388-
389-
[source,cpp,subs="verbatim,replacements,macros,-callouts"]
390-
----
391-
excluded&lowbar;base&
392-
excluded&lowbar;inherited();
393-
----
394-
395-
[#derived-do_excluded_inherited]
396-
== link:#derived[derived]::do&lowbar;excluded&lowbar;inherited
397-
398-
This function should be inherited by derived classes&period;
399-
400-
=== Synopsis
401-
402-
Declared in `&lt;copy&hyphen;dependencies&period;cpp&gt;`
403-
404-
[source,cpp,subs="verbatim,replacements,macros,-callouts"]
405-
----
406-
excluded&lowbar;base&
407-
do&lowbar;excluded&lowbar;inherited();
408-
----
409-
410-
[#derived-do_shadowed]
411-
== link:#derived[derived]::do&lowbar;shadowed
412-
413-
This function should be shadowed by derived classes&period;
414-
415-
=== Synopsis
416-
417-
Declared in `&lt;copy&hyphen;dependencies&period;cpp&gt;`
418-
419-
[source,cpp,subs="verbatim,replacements,macros,-callouts"]
420-
----
421-
excluded&lowbar;base&
422-
do&lowbar;shadowed();
423-
----
424-
425374
[#private_derived]
426375
== private&lowbar;derived
427376

@@ -547,12 +496,6 @@ class protected&lowbar;derived
547496
| This function should shadow the excluded&lowbar;base function&period;
548497
| link:#base-do_derived_shadowed[`do&lowbar;derived&lowbar;shadowed`]
549498
| This function should be shadowed by derived classes&period;
550-
| link:#protected_derived-do_excluded_inherited[`do&lowbar;excluded&lowbar;inherited`]
551-
| This function should be inherited by derived classes&period;
552-
| link:#protected_derived-do_shadowed[`do&lowbar;shadowed`]
553-
| This function should be shadowed by derived classes&period;
554-
| link:#protected_derived-excluded_inherited[`excluded&lowbar;inherited`]
555-
| This function should be inherited by derived classes&period;
556499
|===
557500

558501
[#protected_derived-derived_shadowed]
@@ -593,50 +536,5 @@ do&lowbar;derived&lowbar;shadowed();
593536

594537
A class that should inherit functions as protected&period;
595538

596-
[#protected_derived-do_excluded_inherited]
597-
== link:#protected_derived[protected&lowbar;derived]::do&lowbar;excluded&lowbar;inherited
598-
599-
This function should be inherited by derived classes&period;
600-
601-
=== Synopsis
602-
603-
Declared in `&lt;copy&hyphen;dependencies&period;cpp&gt;`
604-
605-
[source,cpp,subs="verbatim,replacements,macros,-callouts"]
606-
----
607-
excluded&lowbar;base&
608-
do&lowbar;excluded&lowbar;inherited();
609-
----
610-
611-
[#protected_derived-do_shadowed]
612-
== link:#protected_derived[protected&lowbar;derived]::do&lowbar;shadowed
613-
614-
This function should be shadowed by derived classes&period;
615-
616-
=== Synopsis
617-
618-
Declared in `&lt;copy&hyphen;dependencies&period;cpp&gt;`
619-
620-
[source,cpp,subs="verbatim,replacements,macros,-callouts"]
621-
----
622-
excluded&lowbar;base&
623-
do&lowbar;shadowed();
624-
----
625-
626-
[#protected_derived-excluded_inherited]
627-
== link:#protected_derived[protected&lowbar;derived]::excluded&lowbar;inherited
628-
629-
This function should be inherited by derived classes&period;
630-
631-
=== Synopsis
632-
633-
Declared in `&lt;copy&hyphen;dependencies&period;cpp&gt;`
634-
635-
[source,cpp,subs="verbatim,replacements,macros,-callouts"]
636-
----
637-
excluded&lowbar;base&
638-
excluded&lowbar;inherited();
639-
----
640-
641539

642540
[.small]#Created with https://www.mrdocs.com[MrDocs]#

test-files/golden-tests/config/inherit-base-members/copy-dependencies.html

Lines changed: 3 additions & 111 deletions
Original file line numberDiff line numberDiff line change
@@ -368,8 +368,7 @@ <h2>Member Functions</h2>
368368
<td><a href="#base-base_shadowed"><code>base_shadowed</code></a> </td><td>This function should shadow the excluded_base function.</td></tr><tr>
369369
<td><a href="#derived-derived_shadowed"><code>derived_shadowed</code></a> </td><td>This function should shadow the base class function.</td></tr><tr>
370370
<td><a href="#base_base-do_base_base_inherited"><code>do_base_base_inherited</code></a> </td><td>This function should be indirectly inherited by derived classes.</td></tr><tr>
371-
<td><a href="#derived-do_derived_shadowed"><code>do_derived_shadowed</code></a> </td><td>This function should shadow the base class function.</td></tr><tr>
372-
<td><a href="#derived-excluded_inherited"><code>excluded_inherited</code></a> </td><td>This function should be inherited by derived classes.</td></tr>
371+
<td><a href="#derived-do_derived_shadowed"><code>do_derived_shadowed</code></a> </td><td>This function should shadow the base class function.</td></tr>
373372
</tbody>
374373
</table>
375374

@@ -385,9 +384,7 @@ <h2>Protected Member Functions</h2>
385384
<tr>
386385
<td><a href="#base-do_base_inherited"><code>do_base_inherited</code></a> </td><td>This function should be inherited by derived classes.</td></tr><tr>
387386
<td><a href="#base-do_base_shadowed"><code>do_base_shadowed</code></a> </td><td>This function should shadow the excluded_base function.</td></tr><tr>
388-
<td><a href="#base-do_derived_shadowed"><code>do_derived_shadowed</code></a> </td><td>This function should be shadowed by derived classes.</td></tr><tr>
389-
<td><a href="#derived-do_excluded_inherited"><code>do_excluded_inherited</code></a> </td><td>This function should be inherited by derived classes.</td></tr><tr>
390-
<td><a href="#derived-do_shadowed"><code>do_shadowed</code></a> </td><td>This function should be shadowed by derived classes.</td></tr>
387+
<td><a href="#base-do_derived_shadowed"><code>do_derived_shadowed</code></a> </td><td>This function should be shadowed by derived classes.</td></tr>
391388
</tbody>
392389
</table>
393390

@@ -437,57 +434,6 @@ <h3>Return Value</h3>
437434
</div>
438435
<div>
439436
<div>
440-
<h2 id="derived-excluded_inherited">derived::excluded_inherited</h2>
441-
<div>
442-
<p>This function should be inherited by derived classes.</p>
443-
</div>
444-
</div>
445-
<div>
446-
<h3>Synopsis</h3>
447-
<div>
448-
Declared in <code>&lt;copy-dependencies.cpp&gt;</code></div>
449-
<pre>
450-
<code class="source-code cpp">excluded_base&
451-
excluded_inherited();</code>
452-
</pre>
453-
</div>
454-
</div>
455-
<div>
456-
<div>
457-
<h2 id="derived-do_excluded_inherited">derived::do_excluded_inherited</h2>
458-
<div>
459-
<p>This function should be inherited by derived classes.</p>
460-
</div>
461-
</div>
462-
<div>
463-
<h3>Synopsis</h3>
464-
<div>
465-
Declared in <code>&lt;copy-dependencies.cpp&gt;</code></div>
466-
<pre>
467-
<code class="source-code cpp">excluded_base&
468-
do_excluded_inherited();</code>
469-
</pre>
470-
</div>
471-
</div>
472-
<div>
473-
<div>
474-
<h2 id="derived-do_shadowed">derived::do_shadowed</h2>
475-
<div>
476-
<p>This function should be shadowed by derived classes.</p>
477-
</div>
478-
</div>
479-
<div>
480-
<h3>Synopsis</h3>
481-
<div>
482-
Declared in <code>&lt;copy-dependencies.cpp&gt;</code></div>
483-
<pre>
484-
<code class="source-code cpp">excluded_base&
485-
do_shadowed();</code>
486-
</pre>
487-
</div>
488-
</div>
489-
<div>
490-
<div>
491437
<h2 id="private_derived">private_derived</h2>
492438
<div>
493439
<p>A class that uses private inheritance only</p>
@@ -625,10 +571,7 @@ <h2>Protected Member Functions</h2>
625571
<td><a href="#base_base-do_base_base_inherited"><code>do_base_base_inherited</code></a> </td><td>This function should be indirectly inherited by derived classes.</td></tr><tr>
626572
<td><a href="#base-do_base_inherited"><code>do_base_inherited</code></a> </td><td>This function should be inherited by derived classes.</td></tr><tr>
627573
<td><a href="#base-do_base_shadowed"><code>do_base_shadowed</code></a> </td><td>This function should shadow the excluded_base function.</td></tr><tr>
628-
<td><a href="#base-do_derived_shadowed"><code>do_derived_shadowed</code></a> </td><td>This function should be shadowed by derived classes.</td></tr><tr>
629-
<td><a href="#protected_derived-do_excluded_inherited"><code>do_excluded_inherited</code></a> </td><td>This function should be inherited by derived classes.</td></tr><tr>
630-
<td><a href="#protected_derived-do_shadowed"><code>do_shadowed</code></a> </td><td>This function should be shadowed by derived classes.</td></tr><tr>
631-
<td><a href="#protected_derived-excluded_inherited"><code>excluded_inherited</code></a> </td><td>This function should be inherited by derived classes.</td></tr>
574+
<td><a href="#base-do_derived_shadowed"><code>do_derived_shadowed</code></a> </td><td>This function should be shadowed by derived classes.</td></tr>
632575
</tbody>
633576
</table>
634577

@@ -676,57 +619,6 @@ <h3>Return Value</h3>
676619
A class that should inherit functions as protected.
677620
</div>
678621
</div>
679-
<div>
680-
<div>
681-
<h2 id="protected_derived-do_excluded_inherited">protected_derived::do_excluded_inherited</h2>
682-
<div>
683-
<p>This function should be inherited by derived classes.</p>
684-
</div>
685-
</div>
686-
<div>
687-
<h3>Synopsis</h3>
688-
<div>
689-
Declared in <code>&lt;copy-dependencies.cpp&gt;</code></div>
690-
<pre>
691-
<code class="source-code cpp">excluded_base&
692-
do_excluded_inherited();</code>
693-
</pre>
694-
</div>
695-
</div>
696-
<div>
697-
<div>
698-
<h2 id="protected_derived-do_shadowed">protected_derived::do_shadowed</h2>
699-
<div>
700-
<p>This function should be shadowed by derived classes.</p>
701-
</div>
702-
</div>
703-
<div>
704-
<h3>Synopsis</h3>
705-
<div>
706-
Declared in <code>&lt;copy-dependencies.cpp&gt;</code></div>
707-
<pre>
708-
<code class="source-code cpp">excluded_base&
709-
do_shadowed();</code>
710-
</pre>
711-
</div>
712-
</div>
713-
<div>
714-
<div>
715-
<h2 id="protected_derived-excluded_inherited">protected_derived::excluded_inherited</h2>
716-
<div>
717-
<p>This function should be inherited by derived classes.</p>
718-
</div>
719-
</div>
720-
<div>
721-
<h3>Synopsis</h3>
722-
<div>
723-
Declared in <code>&lt;copy-dependencies.cpp&gt;</code></div>
724-
<pre>
725-
<code class="source-code cpp">excluded_base&
726-
excluded_inherited();</code>
727-
</pre>
728-
</div>
729-
</div>
730622

731623
</div>
732624
<div>

0 commit comments

Comments
 (0)