{{#> markup/dynamic-level-h level=2 }}Introduced Symbols{{/markup/dynamic-level-h~}}
-{{#if (any_of_by symbol.shadows "doc")}}
+{{#if (any_of_by symbol.shadowDeclarations "doc")}}
@@ -195,7 +195,7 @@
-{{#each symbol.shadows}}
+{{#each symbol.shadowDeclarations}}
| {{> symbol/qualified-name . }} |
{{> doc/block/inline-brief doc.brief }} |
@@ -211,7 +211,7 @@
-{{#each symbol.shadows}}
+{{#each symbol.shadowDeclarations}}
| {{> symbol/qualified-name . }} |
diff --git a/src/lib/AST/ASTVisitor.cpp b/src/lib/AST/ASTVisitor.cpp
index 10f5703615..2c582f7d1d 100644
--- a/src/lib/AST/ASTVisitor.cpp
+++ b/src/lib/AST/ASTVisitor.cpp
@@ -920,7 +920,7 @@ populate(
}
}
- I.Class = toFunctionClass(D->getDeclKind());
+ I.FuncClass = toFunctionClass(D->getDeclKind());
// extract the return type in direct dependency mode
// if it contains a placeholder type which is
diff --git a/src/lib/CorpusImpl.cpp b/src/lib/CorpusImpl.cpp
index 59808272a5..bf22ea7a09 100644
--- a/src/lib/CorpusImpl.cpp
+++ b/src/lib/CorpusImpl.cpp
@@ -583,7 +583,7 @@ lookupImpl(
}
else if (component.isConversion())
{
- MRDOCS_CHECK_OR(M.Class == FunctionClass::Conversion, matchRes);
+ MRDOCS_CHECK_OR(M.FuncClass == FunctionClass::Conversion, matchRes);
MRDOCS_CHECK_OR(component.ConversionType == M.ReturnType, matchRes);
}
else
diff --git a/src/lib/Gen/xml/XMLWriter.cpp b/src/lib/Gen/xml/XMLWriter.cpp
index 3aebf8c731..af5e526c0b 100644
--- a/src/lib/Gen/xml/XMLWriter.cpp
+++ b/src/lib/Gen/xml/XMLWriter.cpp
@@ -187,8 +187,8 @@ writeFunction(
constexpr std::string_view functionTagName = "function";
tags_.open(functionTagName, {
- { "class", toString(I.Class),
- I.Class != FunctionClass::Normal },
+ { "class", toString(I.FuncClass),
+ I.FuncClass != FunctionClass::Normal },
{ "name", I.Name },
{ I.Access },
{ "exception-spec", except_spec,
diff --git a/src/lib/Metadata/Finalizers/BaseMembersFinalizer.cpp b/src/lib/Metadata/Finalizers/BaseMembersFinalizer.cpp
index 7fd45175db..a87fb7a107 100644
--- a/src/lib/Metadata/Finalizers/BaseMembersFinalizer.cpp
+++ b/src/lib/Metadata/Finalizers/BaseMembersFinalizer.cpp
@@ -119,8 +119,8 @@ inheritBaseMembers(
// Check if we're not attempt to copy a special member function
if (auto const *funcPtr = otherInfoPtr->asFunctionPtr()) {
MRDOCS_CHECK_OR_CONTINUE(
- !is_one_of(funcPtr->Class, {FunctionClass::Constructor,
- FunctionClass::Destructor}));
+ !is_one_of(funcPtr->FuncClass, {FunctionClass::Constructor,
+ FunctionClass::Destructor}));
}
// Check if derived class has a member that shadows the base member
diff --git a/src/lib/Metadata/Finalizers/DocComment/Function.hpp b/src/lib/Metadata/Finalizers/DocComment/Function.hpp
index 17e60423aa..7e3724d28b 100644
--- a/src/lib/Metadata/Finalizers/DocComment/Function.hpp
+++ b/src/lib/Metadata/Finalizers/DocComment/Function.hpp
@@ -25,14 +25,14 @@ bool
isSpecialFunction(FunctionSymbol const& I)
{
return
- I.Class != FunctionClass::Normal ||
+ I.FuncClass != FunctionClass::Normal ||
I.OverloadedOperator != OperatorKind::None;
}
bool
isDefaultConstructor(FunctionSymbol const& I)
{
- return I.Class == FunctionClass::Constructor && I.Params.empty();
+ return I.FuncClass == FunctionClass::Constructor && I.Params.empty();
}
template
@@ -41,7 +41,7 @@ isCopyOrMoveConstructorOrAssignment(FunctionSymbol const& I)
{
if constexpr (!assignment)
{
- MRDOCS_CHECK_OR(I.Class == FunctionClass::Constructor, false);
+ MRDOCS_CHECK_OR(I.FuncClass == FunctionClass::Constructor, false);
}
else
{
@@ -122,7 +122,7 @@ innermostTypenameString(Polymorphic const& T)
bool
populateFunctionBriefFromClass(FunctionSymbol& I, CorpusImpl const& corpus)
{
- switch (I.Class)
+ switch (I.FuncClass)
{
case FunctionClass::Normal:
return false;
@@ -315,7 +315,7 @@ populateFunctionReturnsForSpecial(
Polymorphic const& innerR,
CorpusImpl const& corpus)
{
- if (I.Class == FunctionClass::Conversion)
+ if (I.FuncClass == FunctionClass::Conversion)
{
if (auto* brief = getInfoBrief(innerR, corpus))
{
@@ -529,7 +529,7 @@ setCntrOrAssignParamName(
MRDOCS_CHECK_OR(I.Params.size() == 1, false);
MRDOCS_CHECK_OR(I.IsRecordMethod, false);
MRDOCS_CHECK_OR(
- I.Class == FunctionClass::Constructor ||
+ I.FuncClass == FunctionClass::Constructor ||
I.OverloadedOperator == OperatorKind::Equal,
false);
auto paramNames =
@@ -645,7 +645,7 @@ setCntrOrAssignParamDoc(
MRDOCS_CHECK_OR(index == 0, false);
MRDOCS_CHECK_OR(I.IsRecordMethod, false);
MRDOCS_CHECK_OR(
- I.Class == FunctionClass::Constructor ||
+ I.FuncClass == FunctionClass::Constructor ||
I.OverloadedOperator == OperatorKind::Equal,
false);
diff --git a/src/lib/Metadata/Finalizers/DocComment/Overloads.hpp b/src/lib/Metadata/Finalizers/DocComment/Overloads.hpp
index c48ba576f6..b2ee136380 100644
--- a/src/lib/Metadata/Finalizers/DocComment/Overloads.hpp
+++ b/src/lib/Metadata/Finalizers/DocComment/Overloads.hpp
@@ -63,7 +63,7 @@ populateOverloadsBriefIfAllSameBrief(OverloadsSymbol& I, Range&& functionsWithBr
bool
populateOverloadsFromClass(OverloadsSymbol& I)
{
- switch (I.Class)
+ switch (I.FuncClass)
{
case FunctionClass::Normal:
return false;
diff --git a/src/lib/Metadata/Finalizers/DocCommentFinalizer.cpp b/src/lib/Metadata/Finalizers/DocCommentFinalizer.cpp
index 53bd465773..91651c4173 100644
--- a/src/lib/Metadata/Finalizers/DocCommentFinalizer.cpp
+++ b/src/lib/Metadata/Finalizers/DocCommentFinalizer.cpp
@@ -832,7 +832,7 @@ generateAutoFunctionMetadata(FunctionSymbol& I) const
return;
}
- if (!is_one_of(I.Class, {
+ if (!is_one_of(I.FuncClass, {
FunctionClass::Constructor,
FunctionClass::Destructor }) &&
I.doc->returns.empty())
diff --git a/src/lib/Metadata/Finalizers/SortMembersFinalizer.cpp b/src/lib/Metadata/Finalizers/SortMembersFinalizer.cpp
index c6fd50ca72..f769b4c84b 100644
--- a/src/lib/Metadata/Finalizers/SortMembersFinalizer.cpp
+++ b/src/lib/Metadata/Finalizers/SortMembersFinalizer.cpp
@@ -37,7 +37,7 @@ struct SymbolIDCompareFn
std::same_as ||
std::same_as)
{
- return I.Class;
+ return I.FuncClass;
}
return std::nullopt;
}
diff --git a/src/lib/Metadata/Source.cpp b/src/lib/Metadata/Source.cpp
index 817a5dd662..8b26eaf6b2 100644
--- a/src/lib/Metadata/Source.cpp
+++ b/src/lib/Metadata/Source.cpp
@@ -5,6 +5,7 @@
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
// Copyright (c) 2023 Vinnie Falco (vinnie.falco@gmail.com)
+// Copyright (c) 2025 Gennaro Prota (gennaro.prota@gmail.com)
//
// Official repository: https://github.com/cppalliance/mrdocs
//
@@ -14,27 +15,12 @@
#include
#include
#include
+#include
#include
#include
namespace mrdocs {
-std::string_view
-toString(FileKind kind)
-{
- switch(kind)
- {
- case FileKind::Source:
- return "source";
- case FileKind::System:
- return "system";
- case FileKind::Other:
- return "other";
- default:
- MRDOCS_UNREACHABLE();
- };
-}
-
namespace
{
template
@@ -107,12 +93,7 @@ tag_invoke(
IO& io,
Location const& loc)
{
- io.map("fullPath", loc.FullPath);
- io.map("shortPath", loc.ShortPath);
- io.map("sourcePath", loc.SourcePath);
- io.map("line", loc.LineNumber);
- io.map("column", loc.ColumnNumber);
- io.map("documented", loc.Documented);
+ mapWithDescribe(io, loc, nullptr);
}
void
diff --git a/src/lib/Metadata/Symbol/Function.cpp b/src/lib/Metadata/Symbol/Function.cpp
index 8a2c20ad2f..7d85dcec55 100644
--- a/src/lib/Metadata/Symbol/Function.cpp
+++ b/src/lib/Metadata/Symbol/Function.cpp
@@ -271,24 +271,6 @@ getOperatorReadableName(
MRDOCS_UNREACHABLE();
}
-dom::String
-toString(FunctionClass const kind) noexcept
-{
- switch(kind)
- {
- case FunctionClass::Normal:
- return "normal";
- case FunctionClass::Constructor:
- return "constructor";
- case FunctionClass::Conversion:
- return "conversion";
- case FunctionClass::Destructor:
- return "destructor";
- default:
- MRDOCS_UNREACHABLE();
- }
-}
-
void
merge(Param& I, Param&& Other)
{
@@ -387,9 +369,9 @@ merge(FunctionSymbol& I, FunctionSymbol&& Other)
{
MRDOCS_ASSERT(canMerge(I, Other));
merge(I.asInfo(), std::move(Other.asInfo()));
- if (I.Class == FunctionClass::Normal)
+ if (I.FuncClass == FunctionClass::Normal)
{
- I.Class = Other.Class;
+ I.FuncClass = Other.FuncClass;
}
I.ReturnType = std::move(Other.ReturnType);
std::size_t const n = std::min(I.Params.size(), Other.Params.size());
diff --git a/src/lib/Metadata/Symbol/Overloads.cpp b/src/lib/Metadata/Symbol/Overloads.cpp
index a6b1b49967..0d505b7318 100644
--- a/src/lib/Metadata/Symbol/Overloads.cpp
+++ b/src/lib/Metadata/Symbol/Overloads.cpp
@@ -48,7 +48,7 @@ addMember(OverloadsSymbol& I, FunctionSymbol const& Member)
I.Name = Member.Name;
I.Access = Member.Access;
I.Extraction = Member.Extraction;
- I.Class = Member.Class;
+ I.FuncClass = Member.FuncClass;
I.OverloadedOperator = Member.OverloadedOperator;
I.ReturnType = Member.ReturnType;
}
diff --git a/src/lib/Metadata/Symbol/Record.cpp b/src/lib/Metadata/Symbol/Record.cpp
index 75b464128f..919778df52 100644
--- a/src/lib/Metadata/Symbol/Record.cpp
+++ b/src/lib/Metadata/Symbol/Record.cpp
@@ -4,6 +4,7 @@
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
// Copyright (c) 2023 Krystian Stasiowski (sdkrystian@gmail.com)
+// Copyright (c) 2025 Gennaro Prota (gennaro.prota@gmail.com)
//
// Official repository: https://github.com/cppalliance/mrdocs
//
@@ -11,27 +12,11 @@
#include
#include
#include
+#include
#include
namespace mrdocs {
-dom::String
-toString(
- RecordKeyKind kind) noexcept
-{
- switch(kind)
- {
- case RecordKeyKind::Struct:
- return "struct";
- case RecordKeyKind::Class:
- return "class";
- case RecordKeyKind::Union:
- return "union";
- default:
- MRDOCS_UNREACHABLE();
- }
-}
-
namespace {
void
reduceSymbolIDs(
@@ -165,12 +150,10 @@ tag_invoke(
BaseInfo const& I,
DomCorpus const* domCorpus)
{
- io.map("access", I.Access);
+ mapWithDescribe(io, I, domCorpus);
io.map("isPublic", I.Access == AccessKind::Public);
io.map("isProtected", I.Access == AccessKind::Protected);
io.map("isPrivate", I.Access == AccessKind::Private);
- io.map("isVirtual", I.IsVirtual);
- io.map("type", dom::ValueFrom(I.Type, domCorpus));
}
void
diff --git a/src/lib/Support/LegibleNames.cpp b/src/lib/Support/LegibleNames.cpp
index bca33e95de..5594733924 100644
--- a/src/lib/Support/LegibleNames.cpp
+++ b/src/lib/Support/LegibleNames.cpp
@@ -49,24 +49,24 @@ getUnnamedInfoName(Symbol const& I)
if (auto const* FI = I.asFunctionPtr())
{
// don't use the reserved prefix for overloaded operators
- if(FI->Class == FunctionClass::Normal &&
+ if(FI->FuncClass == FunctionClass::Normal &&
FI->OverloadedOperator != OperatorKind::None)
{
return std::string(getSafeOperatorName(
FI->OverloadedOperator, true));
}
- func_idx = to_underlying(FI->Class);
+ func_idx = to_underlying(FI->FuncClass);
}
if (auto const* FI = I.asOverloadsPtr())
{
// don't use the reserved prefix for overloaded operators
- if(FI->Class == FunctionClass::Normal &&
+ if(FI->FuncClass == FunctionClass::Normal &&
FI->OverloadedOperator != OperatorKind::None)
{
return std::string(getSafeOperatorName(
FI->OverloadedOperator, true));
}
- func_idx = to_underlying(FI->Class);
+ func_idx = to_underlying(FI->FuncClass);
}
MRDOCS_ASSERT(func_idx < std::size(func_reserved));
return std::string(func_reserved[func_idx]);
@@ -219,7 +219,7 @@ class LegibleNames::Impl
{
// functions can be explicitly specialized,
// and can be overloaded
- if (t.Class != FunctionClass::Normal ||
+ if (t.FuncClass != FunctionClass::Normal ||
t.OverloadedOperator != OperatorKind::None)
{
return getUnnamedInfoName(t);
diff --git a/third-party/recipes/boost_describe.json b/third-party/recipes/boost_describe.json
new file mode 100644
index 0000000000..5e748c797d
--- /dev/null
+++ b/third-party/recipes/boost_describe.json
@@ -0,0 +1,15 @@
+{
+ "name": "boost_describe",
+ "version": "1.89.0",
+ "source": {
+ "type": "zip",
+ "url": "https://github.com/boostorg/describe/archive/refs/tags/boost-1.89.0.zip"
+ },
+ "dependencies": [
+ "boost_mp11"
+ ],
+ "source_dir": "/boost_describe",
+ "build_dir": "/boost_describe",
+ "install_dir": "/boost_describe",
+ "build_type": ""
+}
diff --git a/third-party/recipes/boost_mp11.json b/third-party/recipes/boost_mp11.json
new file mode 100644
index 0000000000..3765227ea4
--- /dev/null
+++ b/third-party/recipes/boost_mp11.json
@@ -0,0 +1,13 @@
+{
+ "name": "boost_mp11",
+ "version": "1.89.0",
+ "source": {
+ "type": "zip",
+ "url": "https://github.com/boostorg/mp11/archive/refs/tags/boost-1.89.0.zip"
+ },
+ "dependencies": [],
+ "source_dir": "/boost_mp11",
+ "build_dir": "/boost_mp11",
+ "install_dir": "/boost_mp11",
+ "build_type": ""
+}