fixed parser memory leak (fixes #64)

also:
- build/infra improvements
- updated submodules
- updated conformance tests
- misc code review/refactors
- library version bump
- TOML version bump
This commit is contained in:
Mark Gillard 2020-10-09 08:50:15 +03:00
parent aca6327cd8
commit fe0ac89500
62 changed files with 901 additions and 300 deletions

View File

@ -2,7 +2,7 @@
[![Releases](https://img.shields.io/github/v/release/marzer/tomlplusplus?style=flat-square)](https://github.com/marzer/tomlplusplus/releases)
[![C++17](docs/badge-C++17.svg)][cpp_compilers]
[![C++20](docs/badge-C++20.svg)][cpp_compilers]
[![TOML](docs/badge-TOML.svg)][v1.0.0-rc.2]
[![TOML](docs/badge-TOML.svg)][v1.0.0-rc.3]
[![MIT license](docs/badge-license-MIT.svg)](./LICENSE)
[![CircleCI](https://img.shields.io/circleci/build/github/marzer/tomlplusplus?label=circle%20ci&logo=circleci&logoColor=white&style=flat-square)](https://circleci.com/gh/marzer/tomlplusplus)
[![Mentioned in Awesome C++](docs/badge-awesome.svg)](https://github.com/fffaraz/awesome-cpp)
@ -19,7 +19,7 @@
# Library features
- Header-only
- Supports the latest [TOML] release ([v1.0.0-rc.2]), plus optional support for some [unreleased TOML language features]
- Supports the latest [TOML] release ([v1.0.0-rc.3]), plus optional support for some [unreleased TOML language features]
- C++17 (plus some C++20 features where available, e.g. experimental support for char8_t strings)
- Proper UTF-8 handling (incl. BOM)
- Works with or without exceptions
@ -165,12 +165,13 @@ defines `TOML_LANG_MAJOR`, `TOML_LANG_MINOR` and `TOML_LANG_PATCH`.
> _`#define TOML_UNRELEASED_FEATURES 1` to enable these features (see [Configuration](#Configuration))._
### 🔹 **TOML v1.0.0-rc.2:**
### 🔹 **TOML v1.0.0-rc.3:**
All features supported, including:
- [#356]: Allow leading zeros in the exponent part of a float
- [#567]: Control characters are not permitted in comments
- [#571]: Allow raw tabs inside strings
- [#665]: Make arrays heterogeneous
- [#766]: Allow comments before commas in arrays
### 🔹 **TOML v0.5.0:**
All features supported.
@ -202,6 +203,7 @@ UTF-8 decoding is performed using a state machine based on Bjoern Hoehrmann's '[
- **[@Reedbeta](https://github.com/Reedbeta)** - Fixed a bug and added additional Visual Studio debugger native visualizers
- **[@shdnx](https://github.com/shdnx)** - Fixed a bug on GCC 8.2.0 and some meson config issues
- **[@sobczyk](https://github.com/sobczyk)** - Reported some bugs
- **[@sneves](https://github.com/sneves)** - Reported a bug
- **[@traversaro](https://github.com/traversaro)** - Added vcpkg support and reported a bunch of bugs
- **[@ximion](https://github.com/ximion)** - Added support for installation with meson
- **[@whiterabbit963](https://github.com/whiterabbit963)** - Fixed a bug with value_or conversions
@ -227,7 +229,7 @@ though you're welcome to reach out via other means. In order of likely response
[TOML]: https://toml.io/
[TOML master]: https://github.com/toml-lang/toml/blob/master/README.md
[TOML issues list]: https://github.com/toml-lang/toml/issues
[v1.0.0-rc.2]: https://toml.io/en/v1.0.0-rc.2
[v1.0.0-rc.3]: https://toml.io/en/v1.0.0-rc.3
[CONTRIBUTING]: ./CONTRIBUTING.md
[LICENSE]: ./LICENSE
[Flexible and Economical UTF-8 Decoder]: http://bjoern.hoehrmann.de/utf-8/decoder/dfa/
@ -246,6 +248,7 @@ though you're welcome to reach out via other means. In order of likely response
[#671]: https://github.com/toml-lang/toml/issues/671
[#687]: https://github.com/toml-lang/toml/issues/687
[#709]: https://github.com/toml-lang/toml/pull/709
[#766]: https://github.com/toml-lang/toml/issues/766
[LICENSE-utf8-decoder]: ./LICENSE-utf8-decoder
[something better than std::optional]: https://github.com/TartanLlama/optional
[m.css]: https://mcss.mosra.cz/documentation/doxygen

View File

@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="112" height="20" role="img" aria-label="TOML: v1.0.0-rc.2"><title>TOML: v1.0.0-rc.2</title><g shape-rendering="crispEdges"><rect width="41" height="20" fill="#555"/><rect x="41" width="71" height="20" fill="#007ec6"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><text x="215" y="140" transform="scale(.1)" fill="#fff" textLength="310">TOML</text><text x="755" y="140" transform="scale(.1)" fill="#fff" textLength="610">v1.0.0-rc.2</text></g></svg>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="112" height="20" role="img" aria-label="TOML: v1.0.0-rc.3"><title>TOML: v1.0.0-rc.3</title><g shape-rendering="crispEdges"><rect width="41" height="20" fill="#555"/><rect x="41" width="71" height="20" fill="#007ec6"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><text x="215" y="140" transform="scale(.1)" fill="#fff" textLength="310">TOML</text><text x="755" y="140" transform="scale(.1)" fill="#fff" textLength="610">v1.0.0-rc.3</text></g></svg>

Before

Width:  |  Height:  |  Size: 636 B

After

Width:  |  Height:  |  Size: 636 B

View File

@ -6,7 +6,7 @@
//////////////////////////////////////////////////////////////////////
///
/// \section mainpage-features Features
/// - Supports the latest [TOML](https://toml.io/) release ([v1.0.0-rc.2](https://toml.io/en/v1.0.0-rc.2)), plus
/// - Supports the latest [TOML](https://toml.io/) release ([v1.0.0-rc.3](https://toml.io/en/v1.0.0-rc.3)), plus
/// optional support for some unreleased TOML features
/// - Supports serializing to JSON
/// - Proper UTF-8 handling (incl. BOM)
@ -316,7 +316,7 @@
/// auto tbl = toml::table{{
/// { "lib", "toml++" },
/// { "cpp", toml::array{ 17, 20, "and beyond" } },
/// { "toml", toml::array{ "1.0.0-rc.2", "and beyond" } },
/// { "toml", toml::array{ "1.0.0-rc.3", "and beyond" } },
/// { "repo", "https://github.com/marzer/tomlplusplus/" },
/// { "author", toml::table{{
/// { "name", "Mark Gillard" },
@ -343,7 +343,7 @@
/// cpp = [ 17, 20, 'and beyond' ]
/// lib = 'toml++'
/// repo = 'https://github.com/marzer/tomlplusplus/'
/// toml = [ '1.0.0-rc.2', 'and beyond' ]
/// toml = [ '1.0.0-rc.3', 'and beyond' ]
///
/// [author]
/// github = 'https://github.com/marzer'
@ -366,7 +366,7 @@
/// "lib" : "toml++",
/// "repo" : "https://github.com/marzer/tomlplusplus/",
/// "toml" : [
/// "1.0.0-rc.2",
/// "1.0.0-rc.3",
/// "and beyond"
/// ]
/// }

View File

@ -162,6 +162,7 @@ pre.m-code .c1
}
/* int and float literals */
pre.m-code .mb,
pre.m-code .mi,
pre.m-code .mf,
pre.m-code .mh

2
extern/Catch2 vendored

@ -1 +1 @@
Subproject commit ad1940f336b4527544d435372a5f5c65fe7d783d
Subproject commit 87074da73ecb1c2e7c35fd14f50ca21c4c002adc

2
extern/mcss vendored

@ -1 +1 @@
Subproject commit e6eff549fb5edeabacf01369d6b845a2a59c2ebe
Subproject commit de86049b87f8dc12c022406c201abb533bc78f68

2
extern/toml-test vendored

@ -1 +1 @@
Subproject commit 280497fa5f12e43d7233aed0d74e07ca61ef176b
Subproject commit 6538e544c3c32ca5134769fbd6dd1005f29a0c26

View File

@ -108,6 +108,7 @@ TOML_POP_WARNINGS // TOML_DISABLE_SPAM_WARNINGS
#undef TOML_LANG_HIGHER_THAN
#undef TOML_LANG_UNRELEASED
#undef TOML_LAUNDER
#undef TOML_LIFETIME_HOOKS
#undef TOML_LIKELY
#undef TOML_MAKE_BITOPS
#undef TOML_MAKE_VERSION

View File

@ -315,6 +315,11 @@ TOML_NAMESPACE_START
elements.emplace_back(impl::make_node(std::forward<T>(val)));
}
#if TOML_LIFETIME_HOOKS
void lh_ctor() noexcept;
void lh_dtor() noexcept;
#endif
public:
using value_type = node;
@ -346,6 +351,9 @@ TOML_NAMESPACE_START
/// \brief Move-assignment operator.
array& operator= (array&& rhs) noexcept;
/// \brief Destructor.
~array() noexcept override;
/// \brief Constructs an array with one or more initial elements.
///
/// \detail \cpp
@ -395,8 +403,11 @@ TOML_NAMESPACE_START
...
);
}
}
#if TOML_LIFETIME_HOOKS
lh_ctor();
#endif
}
[[nodiscard]] node_type type() const noexcept override;
[[nodiscard]] bool is_table() const noexcept override;

View File

@ -15,8 +15,29 @@
TOML_NAMESPACE_START
{
#if TOML_LIFETIME_HOOKS
TOML_EXTERNAL_LINKAGE
array::array() noexcept = default;
void array::lh_ctor() noexcept
{
TOML_ARRAY_CREATED;
}
TOML_EXTERNAL_LINKAGE
void array::lh_dtor() noexcept
{
TOML_ARRAY_DESTROYED;
}
#endif
TOML_EXTERNAL_LINKAGE
array::array() noexcept
{
#if TOML_LIFETIME_HOOKS
lh_ctor();
#endif
}
TOML_EXTERNAL_LINKAGE
array::array(const array& other) noexcept
@ -25,13 +46,21 @@ TOML_NAMESPACE_START
elements.reserve(other.elements.size());
for (const auto& elem : other)
elements.emplace_back(impl::make_node(elem));
#if TOML_LIFETIME_HOOKS
lh_ctor();
#endif
}
TOML_EXTERNAL_LINKAGE
array::array(array&& other) noexcept
: node{ std::move(other) },
elements{ std::move(other.elements) }
{}
{
#if TOML_LIFETIME_HOOKS
lh_ctor();
#endif
}
TOML_EXTERNAL_LINKAGE
array& array::operator= (const array& rhs) noexcept
@ -58,6 +87,14 @@ TOML_NAMESPACE_START
return *this;
}
TOML_EXTERNAL_LINKAGE
array::~array() noexcept
{
#if TOML_LIFETIME_HOOKS
lh_dtor();
#endif
}
TOML_EXTERNAL_LINKAGE
void array::preinsertion_resize(size_t idx, size_t count) noexcept
{

View File

@ -39,6 +39,15 @@ TOML_DISABLE_SWITCH_WARNINGS
TOML_ANON_NAMESPACE_START
{
template <typename... T>
[[nodiscard]]
TOML_ATTR(const)
constexpr bool is_match(char32_t codepoint, T... vals) noexcept
{
static_assert((std::is_same_v<char32_t, T> && ...));
return ((codepoint == vals) || ...);
}
template <uint64_t> struct parse_integer_traits;
template <> struct parse_integer_traits<2> final
{
@ -239,6 +248,65 @@ TOML_ANON_NAMESPACE_START
#define push_parse_scope_1(scope, line) push_parse_scope_2(scope, line)
#define push_parse_scope(scope) push_parse_scope_1(scope, __LINE__)
// Q: "why not std::unique_ptr??
// A: It caused a lot of bloat on some implementations so this exists an internal substitute.
class node_ptr
{
private:
toml::node* node_ = {};
public:
TOML_NODISCARD_CTOR
node_ptr() noexcept = default;
TOML_NODISCARD_CTOR
explicit node_ptr(toml::node* n) noexcept
: node_{ n }
{}
~node_ptr() noexcept
{
delete node_;
}
node_ptr& operator=(toml::node* val) noexcept
{
if (val != node_)
{
delete node_;
node_ = val;
}
return *this;
}
node_ptr(const node_ptr&) = delete;
node_ptr& operator=(const node_ptr&) = delete;
node_ptr(node_ptr&&) = delete;
node_ptr& operator=(node_ptr&&) = delete;
[[nodiscard]]
TOML_ATTR(pure)
operator bool() const noexcept
{
return node_ != nullptr;
}
[[nodiscard]]
TOML_ATTR(pure)
toml::node* get() const noexcept
{
return node_;
}
[[nodiscard]]
toml::node* release() noexcept
{
auto n = node_;
node_ = nullptr;
return n;
}
};
struct parsed_key final
{
std::vector<std::string> segments;
@ -247,7 +315,7 @@ TOML_ANON_NAMESPACE_START
struct parsed_key_value_pair final
{
parsed_key key;
toml::node* value;
node_ptr value;
};
}
@ -1808,7 +1876,7 @@ TOML_IMPL_NAMESPACE_START
set_error_and_return_default("values may not begin with underscores"sv);
const auto begin_pos = cp->position;
node* val{};
node_ptr val;
do
{
@ -2024,17 +2092,17 @@ TOML_IMPL_NAMESPACE_START
else if (has_any(has_x))
{
val = new value{ parse_integer<16>() };
reinterpret_cast<value<int64_t>*>(val)->flags(value_flags::format_as_hexadecimal);
reinterpret_cast<value<int64_t>*>(val.get())->flags(value_flags::format_as_hexadecimal);
}
else if (has_any(has_o))
{
val = new value{ parse_integer<8>() };
reinterpret_cast<value<int64_t>*>(val)->flags(value_flags::format_as_octal);
reinterpret_cast<value<int64_t>*>(val.get())->flags(value_flags::format_as_octal);
}
else if (has_any(has_b))
{
val = new value{ parse_integer<2>() };
reinterpret_cast<value<int64_t>*>(val)->flags(value_flags::format_as_binary);
reinterpret_cast<value<int64_t>*>(val.get())->flags(value_flags::format_as_binary);
}
else if (has_any(has_e) || (has_any(begins_zero | begins_digit) && chars[1] == U'.'))
val = new value{ parse_float() };
@ -2075,14 +2143,14 @@ TOML_IMPL_NAMESPACE_START
// 0b10
case bzero_msk | has_b:
val = new value{ parse_integer<2>() };
reinterpret_cast<value<int64_t>*>(val)->flags(value_flags::format_as_binary);
reinterpret_cast<value<int64_t>*>(val.get())->flags(value_flags::format_as_binary);
break;
//=================== octal integers
// 0o10
case bzero_msk | has_o:
val = new value{ parse_integer<8>() };
reinterpret_cast<value<int64_t>*>(val)->flags(value_flags::format_as_octal);
reinterpret_cast<value<int64_t>*>(val.get())->flags(value_flags::format_as_octal);
break;
//=================== decimal integers
@ -2101,7 +2169,7 @@ TOML_IMPL_NAMESPACE_START
// 0x10
case bzero_msk | has_x:
val = new value{ parse_integer<16>() };
reinterpret_cast<value<int64_t>*>(val)->flags(value_flags::format_as_hexadecimal);
reinterpret_cast<value<int64_t>*>(val.get())->flags(value_flags::format_as_hexadecimal);
break;
//=================== decimal floats
@ -2275,8 +2343,8 @@ TOML_IMPL_NAMESPACE_START
}
#endif
val->source_ = { begin_pos, current_position(1), reader.source_path() };
return val;
val.get()->source_ = { begin_pos, current_position(1), reader.source_path() };
return val.release();
}
[[nodiscard]]
@ -2293,7 +2361,7 @@ TOML_IMPL_NAMESPACE_START
while (!is_error())
{
#if TOML_LANG_UNRELEASED // toml/issues/687 (unicode bare keys)
if (is_unicode_combining_mark(*cp))
if (is_combining_mark(*cp))
set_error_and_return_default("bare keys may not begin with unicode combining marks"sv);
else
#endif
@ -2378,7 +2446,7 @@ TOML_IMPL_NAMESPACE_START
// get the value
if (is_value_terminator(*cp))
set_error_and_return_default("expected value, saw '"sv, to_sv(*cp), "'"sv);
return { std::move(key), parse_value() };
return { std::move(key), node_ptr{ parse_value() } };
}
[[nodiscard]]
@ -2592,12 +2660,12 @@ TOML_IMPL_NAMESPACE_START
).first->second.get();
dotted_key_tables.push_back(&child->ref_cast<table>());
dotted_key_tables.back()->inline_ = true;
child->source_ = kvp.value->source_;
child->source_ = kvp.value.get()->source_;
}
else if (!child->is_table() || !find(dotted_key_tables, &child->ref_cast<table>()))
set_error("cannot redefine existing "sv, to_sv(child->type()), " as dotted key-value pair"sv);
else
child->source_.end = kvp.value->source_.end;
child->source_.end = kvp.value.get()->source_.end;
return_if_error();
tab = &child->ref_cast<table>();
}
@ -2605,7 +2673,7 @@ TOML_IMPL_NAMESPACE_START
if (auto conflicting_node = tab->get(kvp.key.segments.back()))
{
if (conflicting_node->type() == kvp.value->type())
if (conflicting_node->type() == kvp.value.get()->type())
set_error(
"cannot redefine existing "sv, to_sv(conflicting_node->type()),
" '"sv, to_sv(recording_buffer), "'"sv
@ -2614,14 +2682,14 @@ TOML_IMPL_NAMESPACE_START
set_error(
"cannot redefine existing "sv, to_sv(conflicting_node->type()),
" '"sv, to_sv(recording_buffer),
"' as "sv, to_sv(kvp.value->type())
"' as "sv, to_sv(kvp.value.get()->type())
);
}
return_if_error();
tab->map.emplace(
std::move(kvp.key.segments.back()),
std::unique_ptr<node>{ kvp.value }
std::unique_ptr<node>{ kvp.value.release() }
);
}
@ -2776,8 +2844,8 @@ TOML_IMPL_NAMESPACE_START
// skip opening '['
advance_and_return_if_error_or_eof({});
auto arr = new array{};
auto& vals = arr->elements;
node_ptr arr{ new array{} };
auto& vals = reinterpret_cast<array*>(arr.get())->elements;
enum parse_elem : int
{
none,
@ -2827,7 +2895,7 @@ TOML_IMPL_NAMESPACE_START
}
return_if_error({});
return arr;
return reinterpret_cast<array*>(arr.release());
}
TOML_EXTERNAL_LINKAGE
@ -2841,8 +2909,8 @@ TOML_IMPL_NAMESPACE_START
// skip opening '{'
advance_and_return_if_error_or_eof({});
auto tab = new table{};
tab->inline_ = true;
node_ptr tab{ new table{} };
reinterpret_cast<table*>(tab.get())->inline_ = true;
enum parse_elem : int
{
none,
@ -2902,7 +2970,7 @@ TOML_IMPL_NAMESPACE_START
else
{
prev = kvp;
parse_key_value_pair_and_insert(tab);
parse_key_value_pair_and_insert(reinterpret_cast<table*>(tab.get()));
}
}
@ -2912,7 +2980,7 @@ TOML_IMPL_NAMESPACE_START
}
return_if_error({});
return tab;
return reinterpret_cast<table*>(tab.release());
}
TOML_API

View File

@ -473,6 +473,10 @@ is no longer necessary.
return static_cast<type>(::toml::impl::unwrap_enum(lhs) | ::toml::impl::unwrap_enum(rhs)); \
}
#ifndef TOML_LIFETIME_HOOKS
#define TOML_LIFETIME_HOOKS 0
#endif
//#====================================================================================================================
//# EXTENDED INT AND FLOAT TYPES
//#====================================================================================================================
@ -485,7 +489,7 @@ is no longer necessary.
&& __FLT16_MIN_10_EXP__ == -4 \
&& __FLT16_MAX_EXP__ == 16 \
&& __FLT16_MAX_10_EXP__ == 4
#if (TOML_ARM && TOML_GCC) || TOML_CLANG
#if TOML_ARM && (TOML_GCC || TOML_CLANG)
#define TOML_FP16 __fp16
#endif
#if TOML_ARM && TOML_CLANG // not present in g++

View File

@ -210,6 +210,11 @@ TOML_NAMESPACE_START
impl::string_map<std::unique_ptr<node>> map;
bool inline_ = false;
#if TOML_LIFETIME_HOOKS
void lh_ctor() noexcept;
void lh_dtor() noexcept;
#endif
table(impl::table_init_pair*, size_t) noexcept;
public:
@ -237,6 +242,9 @@ TOML_NAMESPACE_START
/// \brief Move-assignment operator.
table& operator= (table&& rhs) noexcept;
/// \brief Destructor.
~table() noexcept override;
/// \brief Constructs a table with one or more initial key-value pairs.
///
/// \detail \cpp
@ -270,7 +278,11 @@ TOML_NAMESPACE_START
TOML_NODISCARD_CTOR
explicit table(impl::table_init_pair(&& arr)[N]) noexcept
: table{ arr, N }
{}
{
#if TOML_LIFETIME_HOOKS
lh_ctor();
#endif
}
[[nodiscard]] node_type type() const noexcept override;
[[nodiscard]] bool is_table() const noexcept override;

View File

@ -16,8 +16,29 @@
TOML_NAMESPACE_START
{
#if TOML_LIFETIME_HOOKS
TOML_EXTERNAL_LINKAGE
table::table() noexcept {}
void table::lh_ctor() noexcept
{
TOML_TABLE_CREATED;
}
TOML_EXTERNAL_LINKAGE
void table::lh_dtor() noexcept
{
TOML_TABLE_DESTROYED;
}
#endif
TOML_EXTERNAL_LINKAGE
table::table() noexcept
{
#if TOML_LIFETIME_HOOKS
lh_ctor();
#endif
}
TOML_EXTERNAL_LINKAGE
table::table(const table& other) noexcept
@ -26,6 +47,10 @@ TOML_NAMESPACE_START
{
for (auto&& [k, v] : other)
map.emplace_hint(map.end(), k, impl::make_node(v));
#if TOML_LIFETIME_HOOKS
lh_ctor();
#endif
}
TOML_EXTERNAL_LINKAGE
@ -33,7 +58,11 @@ TOML_NAMESPACE_START
: node{ std::move(other) },
map{ std::move(other.map) },
inline_{ other.inline_ }
{}
{
#if TOML_LIFETIME_HOOKS
lh_ctor();
#endif
}
TOML_EXTERNAL_LINKAGE
table& table::operator= (const table& rhs) noexcept
@ -61,6 +90,14 @@ TOML_NAMESPACE_START
return *this;
}
TOML_EXTERNAL_LINKAGE
table::~table() noexcept
{
#if TOML_LIFETIME_HOOKS
lh_dtor();
#endif
}
TOML_EXTERNAL_LINKAGE
table::table(impl::table_init_pair* pairs, size_t count) noexcept
{

View File

@ -8,15 +8,6 @@
TOML_IMPL_NAMESPACE_START
{
template <typename... T>
[[nodiscard]]
TOML_ATTR(const)
constexpr bool is_match(char32_t codepoint, T... vals) noexcept
{
static_assert((std::is_same_v<char32_t, T> && ...));
return ((codepoint == vals) || ...);
}
[[nodiscard]]
TOML_ATTR(const)
constexpr bool is_ascii_whitespace(char32_t codepoint) noexcept
@ -26,7 +17,7 @@ TOML_IMPL_NAMESPACE_START
[[nodiscard]]
TOML_ATTR(const)
constexpr bool is_unicode_whitespace(char32_t codepoint) noexcept
constexpr bool is_non_ascii_whitespace(char32_t codepoint) noexcept
{
// see: https://en.wikipedia.org/wiki/Whitespace_character#Unicode
// (characters that don't say "is a line-break")
@ -44,7 +35,7 @@ TOML_IMPL_NAMESPACE_START
TOML_ATTR(const)
constexpr bool is_whitespace(char32_t codepoint) noexcept
{
return is_ascii_whitespace(codepoint) || is_unicode_whitespace(codepoint);
return is_ascii_whitespace(codepoint) || is_non_ascii_whitespace(codepoint);
}
template <bool IncludeCarriageReturn = true>
@ -58,7 +49,7 @@ TOML_IMPL_NAMESPACE_START
[[nodiscard]]
TOML_ATTR(const)
constexpr bool is_unicode_line_break(char32_t codepoint) noexcept
constexpr bool is_non_ascii_line_break(char32_t codepoint) noexcept
{
// see https://en.wikipedia.org/wiki/Whitespace_character#Unicode
// (characters that say "is a line-break")
@ -74,7 +65,7 @@ TOML_IMPL_NAMESPACE_START
TOML_ATTR(const)
constexpr bool is_line_break(char32_t codepoint) noexcept
{
return is_ascii_line_break<IncludeCarriageReturn>(codepoint) || is_unicode_line_break(codepoint);
return is_ascii_line_break<IncludeCarriageReturn>(codepoint) || is_non_ascii_line_break(codepoint);
}
[[nodiscard]]
@ -140,7 +131,7 @@ TOML_IMPL_NAMESPACE_START
//# Ll, Lm, Lo, Lt, Lu
[[nodiscard]]
TOML_ATTR(const)
constexpr bool is_unicode_letter(char32_t c) noexcept
constexpr bool is_non_ascii_letter(char32_t c) noexcept
{
if (U'\xAA' > c || c > U'\U0003134A')
return false;
@ -176,7 +167,7 @@ TOML_IMPL_NAMESPACE_START
};
return bitmask_table_1[(static_cast<uint_least64_t>(c) - 0xAAull) / 0x40ull]
& (0x1ull << ((static_cast<uint_least64_t>(c) - 0xAAull) % 0x40ull));
// 1922 codepoints from 124 ranges (spanning a search area of 3147)
// 1922 code units from 124 ranges (spanning a search area of 3145)
}
case 0x01: // [1] 0CF5 - 193F
{
@ -201,7 +192,7 @@ TOML_IMPL_NAMESPACE_START
};
return bitmask_table_1[(static_cast<uint_least64_t>(c) - 0xD04ull) / 0x40ull]
& (0x1ull << ((static_cast<uint_least64_t>(c) - 0xD04ull) % 0x40ull));
// 2239 codepoints from 83 ranges (spanning a search area of 3147)
// 2239 code units from 83 ranges (spanning a search area of 3099)
}
case 0x02: // [2] 1940 - 258A
{
@ -222,7 +213,7 @@ TOML_IMPL_NAMESPACE_START
};
return bitmask_table_1[(static_cast<uint_least64_t>(c) - 0x1950ull) / 0x40ull]
& (0x1ull << ((static_cast<uint_least64_t>(c) - 0x1950ull) % 0x40ull));
// 1184 codepoints from 59 ranges (spanning a search area of 3147)
// 1184 code units from 59 ranges (spanning a search area of 2101)
}
case 0x03: // [3] 258B - 31D5
{
@ -240,7 +231,7 @@ TOML_IMPL_NAMESPACE_START
};
return bitmask_table_1[(static_cast<uint_least64_t>(c) - 0x2C00ull) / 0x40ull]
& (0x1ull << (static_cast<uint_least64_t>(c) % 0x40ull));
// 771 codepoints from 30 ranges (spanning a search area of 3147)
// 771 code units from 30 ranges (spanning a search area of 1472)
}
case 0x04: return (U'\u31F0' <= c && c <= U'\u31FF') || U'\u3400' <= c;
case 0x06: return c <= U'\u4DBF' || U'\u4E00' <= c;
@ -267,7 +258,7 @@ TOML_IMPL_NAMESPACE_START
};
return bitmask_table_1[(static_cast<uint_least64_t>(c) - 0xA079ull) / 0x40ull]
& (0x1ull << ((static_cast<uint_least64_t>(c) - 0xA079ull) % 0x40ull));
// 2554 codepoints from 52 ranges (spanning a search area of 3147)
// 2554 code units from 52 ranges (spanning a search area of 3147)
}
case 0x11: return c <= U'\uD7A3' || (U'\uD7B0' <= c && c <= U'\uD7C6') || (U'\uD7CB' <= c && c <= U'\uD7FB');
case 0x14: // [20] F686 - 102D0
@ -291,7 +282,7 @@ TOML_IMPL_NAMESPACE_START
};
return bitmask_table_1[(static_cast<uint_least64_t>(c) - 0xF900ull) / 0x40ull]
& (0x1ull << (static_cast<uint_least64_t>(c) % 0x40ull));
// 1710 codepoints from 34 ranges (spanning a search area of 3147)
// 1710 code units from 34 ranges (spanning a search area of 2513)
}
case 0x15: // [21] 102D1 - 10F1B
{
@ -317,7 +308,7 @@ TOML_IMPL_NAMESPACE_START
};
return bitmask_table_1[(static_cast<uint_least64_t>(c) - 0x10300ull) / 0x40ull]
& (0x1ull << (static_cast<uint_least64_t>(c) % 0x40ull));
// 1620 codepoints from 48 ranges (spanning a search area of 3147)
// 1620 code units from 48 ranges (spanning a search area of 3100)
}
case 0x16: // [22] 10F1C - 11B66
{
@ -342,7 +333,7 @@ TOML_IMPL_NAMESPACE_START
};
return bitmask_table_1[(static_cast<uint_least64_t>(c) - 0x10F1Cull) / 0x40ull]
& (0x1ull << ((static_cast<uint_least64_t>(c) - 0x10F1Cull) % 0x40ull));
// 1130 codepoints from 67 ranges (spanning a search area of 3147)
// 1130 code units from 67 ranges (spanning a search area of 3037)
}
case 0x17: // [23] 11B67 - 127B1
{
@ -364,7 +355,7 @@ TOML_IMPL_NAMESPACE_START
};
return bitmask_table_1[(static_cast<uint_least64_t>(c) - 0x11C00ull) / 0x40ull]
& (0x1ull << (static_cast<uint_least64_t>(c) % 0x40ull));
// 1304 codepoints from 16 ranges (spanning a search area of 3147)
// 1304 code units from 16 ranges (spanning a search area of 2372)
}
case 0x18: return U'\U00013000' <= c;
case 0x19: return c <= U'\U0001342E';
@ -390,7 +381,7 @@ TOML_IMPL_NAMESPACE_START
};
return bitmask_table_1[(static_cast<uint_least64_t>(c) - 0x16800ull) / 0x40ull]
& (0x1ull << (static_cast<uint_least64_t>(c) % 0x40ull));
// 1250 codepoints from 14 ranges (spanning a search area of 3147)
// 1250 code units from 14 ranges (spanning a search area of 2420)
}
case 0x1F: return c <= U'\U000187F7' || U'\U00018800' <= c;
case 0x20: return c <= U'\U00018CD5' || (U'\U00018D00' <= c && c <= U'\U00018D08');
@ -407,7 +398,7 @@ TOML_IMPL_NAMESPACE_START
};
return bitmask_table_1[(static_cast<uint_least64_t>(c) - 0x1B000ull) / 0x40ull]
& (0x1ull << (static_cast<uint_least64_t>(c) % 0x40ull));
// 690 codepoints from 4 ranges (spanning a search area of 3147)
// 690 code units from 4 ranges (spanning a search area of 764)
}
case 0x24: // [36] 1BB36 - 1C780
{
@ -420,7 +411,8 @@ TOML_IMPL_NAMESPACE_START
case 0x02: return (1u << (static_cast<uint_least32_t>(c) - 0x1BC80u)) & 0x3FF01FFu;
default: return true;
}
// 139 codepoints from 4 ranges (spanning a search area of 3147)
// 139 code units from 4 ranges (spanning a search area of 154)
TOML_UNREACHABLE;
}
case 0x26: // [38] 1D3CC - 1E016
{
@ -436,7 +428,7 @@ TOML_IMPL_NAMESPACE_START
};
return bitmask_table_1[(static_cast<uint_least64_t>(c) - 0x1D400ull) / 0x40ull]
& (0x1ull << (static_cast<uint_least64_t>(c) % 0x40ull));
// 936 codepoints from 30 ranges (spanning a search area of 3147)
// 936 code units from 30 ranges (spanning a search area of 972)
}
case 0x27: // [39] 1E017 - 1EC61
{
@ -457,7 +449,7 @@ TOML_IMPL_NAMESPACE_START
};
return bitmask_table_1[(static_cast<uint_least64_t>(c) - 0x1E100ull) / 0x40ull]
& (0x1ull << (static_cast<uint_least64_t>(c) % 0x40ull));
// 363 codepoints from 7 ranges (spanning a search area of 3147)
// 363 code units from 7 ranges (spanning a search area of 2124)
}
case 0x28: // [40] 1EC62 - 1F8AC
{
@ -472,7 +464,8 @@ TOML_IMPL_NAMESPACE_START
case 0x02: return (1ull << (static_cast<uint_least64_t>(c) - 0x1EE80u)) & 0xFFFFBEE0FFFFBFFull;
TOML_NO_DEFAULT_CASE;
}
// 141 codepoints from 33 ranges (spanning a search area of 3147)
// 141 code units from 33 ranges (spanning a search area of 188)
TOML_UNREACHABLE;
}
case 0x29: return U'\U00020000' <= c;
case 0x37: return c <= U'\U0002A6DD' || U'\U0002A700' <= c;
@ -483,14 +476,15 @@ TOML_IMPL_NAMESPACE_START
case 0x3E: return U'\U00030000' <= c;
TOML_NO_DEFAULT_CASE;
}
// 131189 codepoints from 620 ranges (spanning a search area of 1114112)
// 131189 code units from 620 ranges (spanning a search area of 201377)
TOML_UNREACHABLE;
}
//# Returns true if a codepoint belongs to any of these categories:
//# Nd, Nl
[[nodiscard]]
TOML_ATTR(const)
constexpr bool is_unicode_number(char32_t c) noexcept
constexpr bool is_non_ascii_number(char32_t c) noexcept
{
if (U'\u0660' > c || c > U'\U0001FBF9')
return false;
@ -519,7 +513,7 @@ TOML_IMPL_NAMESPACE_START
};
return bitmask_table_1[(static_cast<uint_least64_t>(c) - 0x660ull) / 0x40ull]
& (0x1ull << ((static_cast<uint_least64_t>(c) - 0x660ull) % 0x40ull));
// 130 codepoints from 13 ranges (spanning a search area of 2007)
// 130 code units from 13 ranges (spanning a search area of 1936)
}
case 0x01: // [1] 0E37 - 160D
{
@ -534,7 +528,7 @@ TOML_IMPL_NAMESPACE_START
};
return bitmask_table_1[(static_cast<uint_least64_t>(c) - 0xE50ull) / 0x40ull]
& (0x1ull << ((static_cast<uint_least64_t>(c) - 0xE50ull) % 0x40ull));
// 50 codepoints from 5 ranges (spanning a search area of 2007)
// 50 code units from 5 ranges (spanning a search area of 586)
}
case 0x02: // [2] 160E - 1DE4
{
@ -552,7 +546,7 @@ TOML_IMPL_NAMESPACE_START
};
return bitmask_table_1[(static_cast<uint_least64_t>(c) - 0x16EEull) / 0x40ull]
& (0x1ull << ((static_cast<uint_least64_t>(c) - 0x16EEull) % 0x40ull));
// 103 codepoints from 11 ranges (spanning a search area of 2007)
// 103 code units from 11 ranges (spanning a search area of 1388)
}
case 0x03: return U'\u2160' <= c && c <= U'\u2188' && (1ull << (static_cast<uint_least64_t>(c) - 0x2160u)) & 0x1E7FFFFFFFFull;
case 0x05: return U'\u3007' <= c && c <= U'\u303A' && (1ull << (static_cast<uint_least64_t>(c) - 0x3007u)) & 0xE0007FC000001ull;
@ -571,7 +565,7 @@ TOML_IMPL_NAMESPACE_START
};
return bitmask_table_1[(static_cast<uint_least64_t>(c) - 0xA620ull) / 0x40ull]
& (0x1ull << ((static_cast<uint_least64_t>(c) - 0xA620ull) % 0x40ull));
// 70 codepoints from 7 ranges (spanning a search area of 2007)
// 70 code units from 7 ranges (spanning a search area of 1082)
}
case 0x15: return U'\uABF0' <= c && c <= U'\uABF9';
case 0x1F: return U'\uFF10' <= c && c <= U'\uFF19';
@ -590,7 +584,7 @@ TOML_IMPL_NAMESPACE_START
};
return bitmask_table_1[(static_cast<uint_least64_t>(c) - 0x10140ull) / 0x40ull]
& (0x1ull << (static_cast<uint_least64_t>(c) % 0x40ull));
// 70 codepoints from 5 ranges (spanning a search area of 2007)
// 70 code units from 5 ranges (spanning a search area of 874)
}
case 0x21: return (U'\U00010D30' <= c && c <= U'\U00010D39') || (U'\U00011066' <= c && c <= U'\U0001106F');
case 0x22: // [34] 110EE - 118C4
@ -610,7 +604,7 @@ TOML_IMPL_NAMESPACE_START
};
return bitmask_table_1[(static_cast<uint_least64_t>(c) - 0x110F0ull) / 0x40ull]
& (0x1ull << ((static_cast<uint_least64_t>(c) - 0x110F0ull) % 0x40ull));
// 90 codepoints from 9 ranges (spanning a search area of 2007)
// 90 code units from 9 ranges (spanning a search area of 1610)
}
case 0x23: // [35] 118C5 - 1209B
{
@ -627,7 +621,7 @@ TOML_IMPL_NAMESPACE_START
};
return bitmask_table_1[(static_cast<uint_least64_t>(c) - 0x118E0ull) / 0x40ull]
& (0x1ull << ((static_cast<uint_least64_t>(c) - 0x118E0ull) % 0x40ull));
// 50 codepoints from 5 ranges (spanning a search area of 2007)
// 50 code units from 5 ranges (spanning a search area of 1226)
}
case 0x24: return U'\U00012400' <= c && c <= U'\U0001246E';
case 0x2D: return (U'\U00016A60' <= c && c <= U'\U00016A69') || (U'\U00016B50' <= c && c <= U'\U00016B59');
@ -637,14 +631,15 @@ TOML_IMPL_NAMESPACE_START
case 0x3F: return U'\U0001FBF0' <= c;
TOML_NO_DEFAULT_CASE;
}
// 876 codepoints from 72 ranges (spanning a search area of 1114112)
// 876 code units from 72 ranges (spanning a search area of 128410)
TOML_UNREACHABLE;
}
//# Returns true if a codepoint belongs to any of these categories:
//# Mn, Mc
[[nodiscard]]
TOML_ATTR(const)
constexpr bool is_unicode_combining_mark(char32_t c) noexcept
constexpr bool is_combining_mark(char32_t c) noexcept
{
if (U'\u0300' > c || c > U'\U000E01EF')
return false;
@ -711,7 +706,7 @@ TOML_IMPL_NAMESPACE_START
};
return bitmask_table_1[(static_cast<uint_least64_t>(c) - 0x300ull) / 0x40ull]
& (0x1ull << (static_cast<uint_least64_t>(c) % 0x40ull));
// 1106 codepoints from 156 ranges (spanning a search area of 14332)
// 1106 code units from 156 ranges (spanning a search area of 11675)
}
case 0x02: // [2] 72F8 - AAF3
{
@ -728,7 +723,7 @@ TOML_IMPL_NAMESPACE_START
};
return bitmask_table_1[(static_cast<uint_least64_t>(c) - 0xA66Full) / 0x40ull]
& (0x1ull << ((static_cast<uint_least64_t>(c) - 0xA66Full) % 0x40ull));
// 137 codepoints from 28 ranges (spanning a search area of 14332)
// 137 code units from 28 ranges (spanning a search area of 1153)
}
case 0x03: return (U'\uAAF5' <= c && c <= U'\uAAF6') || (U'\uABE3' <= c && c <= U'\uABEA') || (U'\uABEC' <= c && c <= U'\uABED');
case 0x04: // [4] E2F0 - 11AEB
@ -773,7 +768,7 @@ TOML_IMPL_NAMESPACE_START
};
return bitmask_table_1[(static_cast<uint_least64_t>(c) - 0xFB1Eull) / 0x40ull]
& (0x1ull << ((static_cast<uint_least64_t>(c) - 0xFB1Eull) % 0x40ull));
// 402 codepoints from 63 ranges (spanning a search area of 14332)
// 402 code units from 63 ranges (spanning a search area of 8060)
}
case 0x05: // [5] 11AEC - 152E7
{
@ -788,7 +783,7 @@ TOML_IMPL_NAMESPACE_START
};
return bitmask_table_1[(static_cast<uint_least64_t>(c) - 0x11C2Full) / 0x40ull]
& (0x1ull << ((static_cast<uint_least64_t>(c) - 0x11C2Full) % 0x40ull));
// 85 codepoints from 13 ranges (spanning a search area of 14332)
// 85 code units from 13 ranges (spanning a search area of 712)
}
case 0x06: // [6] 152E8 - 18AE3
{
@ -806,7 +801,7 @@ TOML_IMPL_NAMESPACE_START
};
return bitmask_table_1[(static_cast<uint_least64_t>(c) - 0x16AF0ull) / 0x40ull]
& (0x1ull << ((static_cast<uint_least64_t>(c) - 0x16AF0ull) % 0x40ull));
// 75 codepoints from 7 ranges (spanning a search area of 14332)
// 75 code units from 7 ranges (spanning a search area of 1282)
}
case 0x07: return U'\U0001BC9D' <= c && c <= U'\U0001BC9E';
case 0x08: // [8] 1C2E0 - 1FADB
@ -843,12 +838,13 @@ TOML_IMPL_NAMESPACE_START
};
return bitmask_table_1[(static_cast<uint_least64_t>(c) - 0x1D165ull) / 0x40ull]
& (0x1ull << ((static_cast<uint_least64_t>(c) - 0x1D165ull) % 0x40ull));
// 223 codepoints from 21 ranges (spanning a search area of 14332)
// 223 code units from 21 ranges (spanning a search area of 6118)
}
case 0x3F: return U'\U000E0100' <= c;
TOML_NO_DEFAULT_CASE;
}
// 2282 codepoints from 293 ranges (spanning a search area of 1114112)
// 2282 code units from 293 ranges (spanning a search area of 917232)
TOML_UNREACHABLE;
}
#endif // TOML_LANG_UNRELEASED
@ -863,9 +859,9 @@ TOML_IMPL_NAMESPACE_START
|| codepoint == U'_'
#if TOML_LANG_UNRELEASED // toml/issues/644 ('+' in bare keys) & toml/issues/687 (unicode bare keys)
|| codepoint == U'+'
|| is_unicode_letter(codepoint)
|| is_unicode_number(codepoint)
|| is_unicode_combining_mark(codepoint)
|| is_non_ascii_letter(codepoint)
|| is_non_ascii_number(codepoint)
|| is_combining_mark(codepoint)
#endif
;
}
@ -880,8 +876,8 @@ TOML_IMPL_NAMESPACE_START
|| codepoint == U'}'
|| codepoint == U','
|| codepoint == U'#'
|| is_unicode_line_break(codepoint)
|| is_unicode_whitespace(codepoint)
|| is_non_ascii_line_break(codepoint)
|| is_non_ascii_whitespace(codepoint)
;
}

View File

@ -202,6 +202,18 @@ TOML_NAMESPACE_START
ValueType val_;
value_flags flags_ = value_flags::none;
#if TOML_LIFETIME_HOOKS
void lh_ctor() noexcept
{
TOML_VALUE_CREATED;
}
void lh_dtor() noexcept
{
TOML_VALUE_DESTROYED;
}
#endif
public:
/// \brief The value's underlying data type.
@ -229,7 +241,11 @@ TOML_NAMESPACE_START
impl::native_value_maker<value_type, std::decay_t<Args>...>::make(std::forward<Args>(args)...)
)))
: val_(impl::native_value_maker<value_type, std::decay_t<Args>...>::make(std::forward<Args>(args)...))
{}
{
#if TOML_LIFETIME_HOOKS
lh_ctor();
#endif
}
/// \brief Copy constructor.
TOML_NODISCARD_CTOR
@ -237,7 +253,11 @@ TOML_NAMESPACE_START
: node{ other },
val_{ other.val_ },
flags_{ other.flags_ }
{}
{
#if TOML_LIFETIME_HOOKS
lh_ctor();
#endif
}
/// \brief Move constructor.
TOML_NODISCARD_CTOR
@ -245,7 +265,11 @@ TOML_NAMESPACE_START
: node{ std::move(other) },
val_{ std::move(other.val_) },
flags_{ other.flags_ }
{}
{
#if TOML_LIFETIME_HOOKS
lh_ctor();
#endif
}
/// \brief Copy-assignment operator.
value& operator= (const value& rhs) noexcept
@ -268,6 +292,13 @@ TOML_NAMESPACE_START
return *this;
}
#if TOML_LIFETIME_HOOKS
~value() noexcept override
{
lh_dtor();
}
#endif
/// \brief Returns the value's node type identifier.
///
/// \returns One of:

View File

@ -6,7 +6,7 @@
#pragma once
#define TOML_LIB_MAJOR 2
#define TOML_LIB_MINOR 1
#define TOML_LIB_MINOR 2
#define TOML_LIB_PATCH 0
#define TOML_LANG_MAJOR 1

View File

@ -1,7 +1,7 @@
project(
'tomlplusplus',
'cpp',
version : '2.1.0',
version : '2.2.0',
meson_version : '>=0.53.0',
license : 'MIT',
default_options : [
@ -35,6 +35,7 @@ is_clang = compiler.get_id() == 'clang'
is_msvc = compiler.get_id() == 'msvc'
is_icc_cl = compiler.get_id() == 'intel-cl'
is_icc = is_icc_cl or compiler.get_id() == 'intel'
is_lld = compiler.get_linker_id() == 'ld.lld'
is_debug = get_option('debug')
is_release = not is_debug
is_pedantic = get_option('pedantic')
@ -81,7 +82,7 @@ if is_gcc
language : 'cpp'
)
if is_pedantic
add_project_arguments([
add_project_arguments(
'-Wcast-align',
'-Wcast-qual',
'-Wctor-dtor-privacy',
@ -119,13 +120,15 @@ if is_gcc
'-Wwrite-strings',
'-Wmissing-noreturn',
'-Wsuggest-attribute=const',
'-Wsuggest-attribute=pure'
],
'-Wsuggest-attribute=pure',
language : 'cpp'
)
endif
if is_release
add_project_arguments('-fmerge-constants', language : 'cpp')
add_project_arguments(
'-fmerge-constants',
language : 'cpp'
)
endif
endif
@ -151,7 +154,11 @@ if is_clang
add_project_arguments('-ftime-trace', language : 'cpp')
endif
if is_release
add_project_arguments('-Oz', '-fmerge-all-constants', language : 'cpp')
add_project_arguments(
'-Oz',
'-fmerge-all-constants',
language : 'cpp'
)
endif
endif
@ -234,6 +241,11 @@ elif is_release
overrides += 'strip=true'
endif
# LTO
if is_lld or is_debug
overrides += 'b_lto=false'
endif
#######################################################################################################################
# c++ 20 check
# (used by tests)
@ -310,17 +322,18 @@ compiler_supports_char8 = compiler_supports_cpp20 and compiler.links('''
compiler_supports_consteval = compiler_supports_cpp20 and compiler.compiles('''
consteval int kek() noexcept
consteval int test() noexcept
{
return 42;
}
int main()
{
return kek();
constexpr auto val = test(); // test() should be compiletime-callable
return val;
}
''',
name : 'supports consteval',
name : 'supports consteval keyword',
args : compiler_supports_cpp20_args
)
@ -354,8 +367,6 @@ if is_gcc
compiler_supports_float16_args += '-mfp16-format=ieee'
endif
compiler_supports_fp16 = compiler.links('''
@0@
int main()
{
static_assert(sizeof(__fp16) == 2);
@ -364,7 +375,7 @@ compiler_supports_fp16 = compiler.links('''
const auto f3 = static_cast<__fp16>(0.2L);
return 0;
}
'''.format(float_16_preprocessor_checks),
''',
name : 'supports __fp16',
args : compiler_supports_float16_args
)

View File

@ -29,46 +29,66 @@ inline_namespaces = [
inline_namespace_explainer = 'All members of this namespace are automatically members of the parent namespace. ' \
+ 'It does not require an explicit \'using\' statement.'
type_names = [
#------ standard types
'size_t',
'uint8_t',
'uint16_t',
'uint32_t',
'uint64_t',
'int8_t',
#------ standard/built-in types
'_Float16',
'__float128',
'__fp16',
'__int128_t',
'__m128',
'__m128d',
'__m128i',
'__m256',
'__m256d',
'__m256i',
'__m512',
'__m512d',
'__m512i',
'__m64',
'__uint128_t',
'bool',
'byte',
'char',
'const_iterator',
'double',
'exception',
'float',
'fstream',
'ifstream',
'int',
'int128_t',
'int16_t',
'int32_t',
'int64_t',
'ptrdiff_t',
'int8_t',
'intptr_t',
'uintptr_t',
'exception',
'istream',
'istringstream',
'iterator',
'const_iterator',
'void',
'char',
'wchar_t',
'int',
'long',
'ofstream',
'optional',
'ostream',
'ostringstream',
'pair',
'ptrdiff_t',
'short',
'signed',
'unsigned',
'float',
'double',
'bool',
'pair',
'tuple',
'istream',
'ostream',
'ifstream',
'ofstream',
'stringstream',
'istringstream',
'ostringstream',
'string_view',
'size_t',
'span',
'string',
'byte',
'optional',
'string_view',
'stringstream',
'tuple',
'uint128_t',
'uint16_t',
'uint32_t',
'uint64_t',
'uint8_t',
'uintptr_t',
'unsigned',
'vector',
'void',
'wchar_t',
#------ toml++ types
'node',
'table',
@ -144,6 +164,7 @@ external_links = [
(r'std::enable_if(?:_t)?', 'https://en.cppreference.com/w/cpp/types/enable_if'),
(r'std::exceptions?', 'https://en.cppreference.com/w/cpp/error/exception'),
(r'std::has_single_bit(?:\(\))?', 'https://en.cppreference.com/w/cpp/numeric/has_single_bit'),
(r'std::hash', 'https://en.cppreference.com/w/cpp/utility/hash'),
(r'std::initializer_lists?', 'https://en.cppreference.com/w/cpp/utility/initializer_list'),
(r'std::integral_constants?', 'https://en.cppreference.com/w/cpp/types/integral_constant'),
(r'std::is_(?:nothrow_)?convertible(?:_v)?', 'https://en.cppreference.com/w/cpp/types/is_convertible'),
@ -177,6 +198,8 @@ external_links = [
(r'std::spans?', 'https://en.cppreference.com/w/cpp/container/span'),
(r'std::to_address(?:\(\))?', 'https://en.cppreference.com/w/cpp/memory/to_address'),
(r'std::tuples?', 'https://en.cppreference.com/w/cpp/utility/tuple'),
(r'std::tuple_size(?:_v)?', 'https://en.cppreference.com/w/cpp/utility/tuple/tuple_size'),
(r'std::tuple_element(?:_t)?', 'https://en.cppreference.com/w/cpp/utility/tuple/tuple_element'),
(r'std::type_identity(?:_t)?', 'https://en.cppreference.com/w/cpp/types/type_identity'),
(r'std::underlying_type(?:_t)?', 'https://en.cppreference.com/w/cpp/types/underlying_type'),
(r'std::unique_ptrs?', 'https://en.cppreference.com/w/cpp/memory/unique_ptr'),
@ -219,11 +242,12 @@ external_links = [
+ r')',
'https://en.cppreference.com/w/cpp/preprocessor/replace'
),
(r'(?:_Float|__fp)16s?','https://gcc.gnu.org/onlinedocs/gcc/Half-Precision.html'),
# toml-specific
(r'toml::values?', 'classtoml_1_1value.html'),
(r'(toml::)?date_times?', 'structtoml_1_1date__time.html'),
(r'(toml::)?time', 'structtoml_1_1time.html'),
(r'(toml::)?dates?', 'structtoml_1_1date.html')
(r'(?:toml::)values?', 'classtoml_1_1value.html'),
(r'(?:toml::)?date_times?', 'structtoml_1_1date__time.html'),
(r'(?:toml::)times?', 'structtoml_1_1time.html'),
(r'(?:toml::)dates?', 'structtoml_1_1date.html')
]
header_overrides = [
@ -245,9 +269,9 @@ badges = [
'https://en.cppreference.com/w/cpp/compiler_support'
),
(
'TOML v1.0.0-rc.2',
'TOML v1.0.0-rc.3',
'badge-TOML.svg',
'https://toml.io/en/v1.0.0-rc.2'
'https://toml.io/en/v1.0.0-rc.3'
),
(None, None, None), # <br>
(
@ -1110,9 +1134,9 @@ def main():
, IndexPageFix()
, ModifiersFix1()
, ModifiersFix2()
, InlineNamespaceFix1()
, InlineNamespaceFix2()
, InlineNamespaceFix3()
#, InlineNamespaceFix1()
#, InlineNamespaceFix2()
#, InlineNamespaceFix3()
, ExtDocLinksFix()
, EnableIfFix()
, ExternalLinksFix()

View File

@ -150,6 +150,7 @@ def main():
preamble.append('''
// TOML Language Specifications:
// latest: https://github.com/toml-lang/toml/blob/master/README.md
// v1.0.0-rc.3: https://toml.io/en/v1.0.0-rc.3
// v1.0.0-rc.2: https://toml.io/en/v1.0.0-rc.2
// v1.0.0-rc.1: https://toml.io/en/v1.0.0-rc.1
// v0.5.0: https://toml.io/en/v0.5.0

View File

@ -81,6 +81,7 @@ def main():
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>tests.h</PrecompiledHeaderFile>
<PreprocessorDefinitions>TOML_UNRELEASED_FEATURES={unreleased_features};%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>LEAK_TESTS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">_HAS_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">SHOULD_HAVE_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'!='false'">SHOULD_HAVE_EXCEPTIONS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@ -129,6 +130,7 @@ def main():
<ItemGroup>
<ClInclude Include="..\..\tests\catch2.h" />
<ClInclude Include="..\..\tests\evil_macros.h" />
<ClInclude Include="..\..\tests\leakproof.h" />
<ClInclude Include="..\..\tests\settings.h" />
<ClInclude Include="..\..\tests\tests.h" />
<ClInclude Include="..\..\tests\tloptional.h" />

View File

@ -2,3 +2,6 @@ requests
bs4
pyyaml
python-dateutil
jinja2
pygments
html5lib

View File

@ -247,6 +247,11 @@ answer = 42)"sv;
[a.'b']
[a.'b'.c]
answer = 42)"sv;
static constexpr auto table_without_super = R"(# [x] you
# [x.y] don't
# [x.y.z] need these
[x.y.z.w] # for this to work
[x] # defining a super-table afterwards is ok)"sv;
static constexpr auto underscored_float = R"(electron_mass = 9_109.109_383e-3_4)"sv;
static constexpr auto underscored_integer = R"(million = 1_000_000)"sv;
static constexpr auto unicode_escape = R"(answer4 = "\u03B4"
@ -1120,6 +1125,26 @@ ue)"sv },
REQUIRE(tbl == expected);
});
parsing_should_succeed(FILE_LINE_ARGS, table_without_super, [](toml::table&& tbl)
{
auto expected = toml::table{{
{
R"(x)"sv, toml::table{{
{
R"(y)"sv, toml::table{{
{
R"(z)"sv, toml::table{{
{ R"(w)"sv, toml::table{} },
}}
},
}}
},
}}
},
}};
REQUIRE(tbl == expected);
});
parsing_should_succeed(FILE_LINE_ARGS, underscored_float, [](toml::table&& tbl)
{
auto expected = toml::table{{

View File

@ -7,6 +7,27 @@
#include "catch2.h"
#include <clocale>
#if LEAK_TESTS
#include <iostream>
#include <iomanip>
#include <atomic>
#include "leakproof.h"
using namespace std::string_view_literals;
namespace leakproof
{
static std::atomic_llong total_created_ = 0LL;
static std::atomic_llong tables_ = 0LL;
static std::atomic_llong arrays_ = 0LL;
static std::atomic_llong values_ = 0LL;
void table_created() noexcept { tables_++; total_created_++; }
void array_created() noexcept { arrays_++; total_created_++; }
void value_created() noexcept { values_++; total_created_++; }
void table_destroyed() noexcept { tables_--; }
void array_destroyed() noexcept { arrays_--; }
void value_destroyed() noexcept { values_--; }
}
#endif
int main(int argc, char* argv[])
{
#ifdef _WIN32
@ -14,5 +35,28 @@ int main(int argc, char* argv[])
#endif
std::setlocale(LC_ALL, "");
std::locale::global(std::locale(""));
return Catch::Session().run(argc, argv);
if (auto result = Catch::Session().run(argc, argv))
return result;
#if LEAK_TESTS
constexpr auto handle_leak_result = [](std::string_view name, long long count) noexcept
{
std::cout << "\n"sv << name << ": "sv << std::right << std::setw(6) << count;
if (count > 0LL)
std::cout << " *** LEAK DETECTED ***"sv;
if (count < 0LL)
std::cout << " *** UNBALANCED LIFETIME CALLS ***"sv;
return count == 0LL;
};
std::cout << "\n---------- leak test results ----------"sv;
bool ok = true;
ok = handle_leak_result("tables"sv, leakproof::tables_.load()) && ok;
ok = handle_leak_result("arrays"sv, leakproof::arrays_.load()) && ok;
ok = handle_leak_result("values"sv, leakproof::values_.load()) && ok;
std::cout << "\n(total objects created: "sv << leakproof::total_created_.load() << ")"sv;
std::cout << "\n---------------------------------------"sv;
return ok ? 0 : -1;
#else
return 0;
#endif
}

19
tests/leakproof.h Normal file
View File

@ -0,0 +1,19 @@
#pragma once
namespace leakproof
{
void table_created() noexcept;
void array_created() noexcept;
void value_created() noexcept;
void table_destroyed() noexcept;
void array_destroyed() noexcept;
void value_destroyed() noexcept;
}
#define TOML_LIFETIME_HOOKS 1
#define TOML_TABLE_CREATED ::leakproof::table_created()
#define TOML_TABLE_DESTROYED ::leakproof::table_destroyed()
#define TOML_ARRAY_CREATED ::leakproof::array_created()
#define TOML_ARRAY_DESTROYED ::leakproof::array_destroyed()
#define TOML_VALUE_CREATED ::leakproof::value_created()
#define TOML_VALUE_DESTROYED ::leakproof::value_destroyed()

View File

@ -13,6 +13,12 @@
#ifndef USE_SINGLE_HEADER
#define USE_SINGLE_HEADER 0
#endif
#if defined(LEAK_TESTS) && LEAK_TESTS
#define TOML_CONFIG_HEADER "leakproof.h"
#else
#undef LEAK_TESTS
#define LEAK_TESTS 0
#endif
// use tl::optional?
#if defined(USE_TARTANLLAMA_OPTIONAL) && USE_TARTANLLAMA_OPTIONAL

View File

@ -16,13 +16,13 @@ inline constexpr func_type* funcs[] =
impl::is_ascii_line_break<true>,
impl::is_decimal_digit,
impl::is_string_delimiter,
impl::is_unicode_whitespace,
impl::is_unicode_line_break,
impl::is_non_ascii_whitespace,
impl::is_non_ascii_line_break,
impl::is_unicode_surrogate,
#if TOML_LANG_UNRELEASED
impl::is_unicode_letter,
impl::is_unicode_number,
impl::is_unicode_combining_mark,
impl::is_non_ascii_letter,
impl::is_non_ascii_number,
impl::is_combining_mark,
#endif
};
@ -178,9 +178,9 @@ TEST_CASE("unicode - is_string_delimiter")
REQUIRE(not_in(fn, { U'(', unimax }));
}
TEST_CASE("unicode - is_unicode_whitespace")
TEST_CASE("unicode - is_non_ascii_whitespace")
{
static constexpr auto fn = is_unicode_whitespace;
static constexpr auto fn = is_non_ascii_whitespace;
REQUIRE(not_in(fn, { U'\0', U'\u009F' }));
REQUIRE(in_only(fn, U'\u00A0' ));
REQUIRE(not_in(fn, { U'\u00A1', U'\u167F' }));
@ -196,9 +196,9 @@ TEST_CASE("unicode - is_unicode_whitespace")
REQUIRE(not_in(fn, { U'\u3001', unimax }));
}
TEST_CASE("unicode - is_unicode_line_break")
TEST_CASE("unicode - is_non_ascii_line_break")
{
static constexpr auto fn = is_unicode_line_break;
static constexpr auto fn = is_non_ascii_line_break;
REQUIRE(not_in(fn, { U'\0', U'\u0084' }));
REQUIRE(in_only(fn, U'\u0085' ));
REQUIRE(not_in(fn, { U'\u0086', U'\u2027' }));

371
toml.hpp
View File

@ -1,6 +1,6 @@
//----------------------------------------------------------------------------------------------------------------------
//
// toml++ v2.1.0
// toml++ v2.2.0
// https://github.com/marzer/tomlplusplus
// SPDX-License-Identifier: MIT
//
@ -17,6 +17,7 @@
//
// TOML Language Specifications:
// latest: https://github.com/toml-lang/toml/blob/master/README.md
// v1.0.0-rc.3: https://toml.io/en/v1.0.0-rc.3
// v1.0.0-rc.2: https://toml.io/en/v1.0.0-rc.2
// v1.0.0-rc.1: https://toml.io/en/v1.0.0-rc.1
// v0.5.0: https://toml.io/en/v0.5.0
@ -486,6 +487,10 @@ is no longer necessary.
return static_cast<type>(::toml::impl::unwrap_enum(lhs) | ::toml::impl::unwrap_enum(rhs)); \
}
#ifndef TOML_LIFETIME_HOOKS
#define TOML_LIFETIME_HOOKS 0
#endif
#ifdef __FLT16_MANT_DIG__
#if __FLT_RADIX__ == 2 \
&& __FLT16_MANT_DIG__ == 11 \
@ -494,7 +499,7 @@ is no longer necessary.
&& __FLT16_MIN_10_EXP__ == -4 \
&& __FLT16_MAX_EXP__ == 16 \
&& __FLT16_MAX_10_EXP__ == 4
#if (TOML_ARM && TOML_GCC) || TOML_CLANG
#if TOML_ARM && (TOML_GCC || TOML_CLANG)
#define TOML_FP16 __fp16
#endif
#if TOML_ARM && TOML_CLANG // not present in g++
@ -516,7 +521,7 @@ is no longer necessary.
#endif
#define TOML_LIB_MAJOR 2
#define TOML_LIB_MINOR 1
#define TOML_LIB_MINOR 2
#define TOML_LIB_PATCH 0
#define TOML_LANG_MAJOR 1
@ -2764,6 +2769,18 @@ TOML_NAMESPACE_START
ValueType val_;
value_flags flags_ = value_flags::none;
#if TOML_LIFETIME_HOOKS
void lh_ctor() noexcept
{
TOML_VALUE_CREATED;
}
void lh_dtor() noexcept
{
TOML_VALUE_DESTROYED;
}
#endif
public:
using value_type = ValueType;
@ -2780,21 +2797,33 @@ TOML_NAMESPACE_START
impl::native_value_maker<value_type, std::decay_t<Args>...>::make(std::forward<Args>(args)...)
)))
: val_(impl::native_value_maker<value_type, std::decay_t<Args>...>::make(std::forward<Args>(args)...))
{}
{
#if TOML_LIFETIME_HOOKS
lh_ctor();
#endif
}
TOML_NODISCARD_CTOR
value(const value& other) noexcept
: node{ other },
val_{ other.val_ },
flags_{ other.flags_ }
{}
{
#if TOML_LIFETIME_HOOKS
lh_ctor();
#endif
}
TOML_NODISCARD_CTOR
value(value&& other) noexcept
: node{ std::move(other) },
val_{ std::move(other.val_) },
flags_{ other.flags_ }
{}
{
#if TOML_LIFETIME_HOOKS
lh_ctor();
#endif
}
value& operator= (const value& rhs) noexcept
{
@ -2815,6 +2844,13 @@ TOML_NAMESPACE_START
return *this;
}
#if TOML_LIFETIME_HOOKS
~value() noexcept override
{
lh_dtor();
}
#endif
[[nodiscard]] node_type type() const noexcept override { return impl::node_type_of<value_type>; }
[[nodiscard]] bool is_table() const noexcept override { return false; }
[[nodiscard]] bool is_array() const noexcept override { return false; }
@ -3623,6 +3659,11 @@ TOML_NAMESPACE_START
elements.emplace_back(impl::make_node(std::forward<T>(val)));
}
#if TOML_LIFETIME_HOOKS
void lh_ctor() noexcept;
void lh_dtor() noexcept;
#endif
public:
using value_type = node;
@ -3644,6 +3685,8 @@ TOML_NAMESPACE_START
array& operator= (const array&) noexcept;
array& operator= (array&& rhs) noexcept;
~array() noexcept override;
template <typename ElemType, typename... ElemTypes, typename = std::enable_if_t<
(sizeof...(ElemTypes) > 0_sz)
|| !std::is_same_v<impl::remove_cvref_t<ElemType>, array>
@ -3660,6 +3703,10 @@ TOML_NAMESPACE_START
...
);
}
#if TOML_LIFETIME_HOOKS
lh_ctor();
#endif
}
[[nodiscard]] node_type type() const noexcept override;
@ -4127,6 +4174,11 @@ TOML_NAMESPACE_START
impl::string_map<std::unique_ptr<node>> map;
bool inline_ = false;
#if TOML_LIFETIME_HOOKS
void lh_ctor() noexcept;
void lh_dtor() noexcept;
#endif
table(impl::table_init_pair*, size_t) noexcept;
public:
@ -4145,11 +4197,17 @@ TOML_NAMESPACE_START
table& operator= (const table&) noexcept;
table& operator= (table&& rhs) noexcept;
~table() noexcept override;
template <size_t N>
TOML_NODISCARD_CTOR
explicit table(impl::table_init_pair(&& arr)[N]) noexcept
: table{ arr, N }
{}
{
#if TOML_LIFETIME_HOOKS
lh_ctor();
#endif
}
[[nodiscard]] node_type type() const noexcept override;
[[nodiscard]] bool is_table() const noexcept override;
@ -4891,15 +4949,6 @@ TOML_POP_WARNINGS // TOML_DISABLE_ARITHMETIC_WARNINGS
TOML_IMPL_NAMESPACE_START
{
template <typename... T>
[[nodiscard]]
TOML_ATTR(const)
constexpr bool is_match(char32_t codepoint, T... vals) noexcept
{
static_assert((std::is_same_v<char32_t, T> && ...));
return ((codepoint == vals) || ...);
}
[[nodiscard]]
TOML_ATTR(const)
constexpr bool is_ascii_whitespace(char32_t codepoint) noexcept
@ -4909,7 +4958,7 @@ TOML_IMPL_NAMESPACE_START
[[nodiscard]]
TOML_ATTR(const)
constexpr bool is_unicode_whitespace(char32_t codepoint) noexcept
constexpr bool is_non_ascii_whitespace(char32_t codepoint) noexcept
{
// see: https://en.wikipedia.org/wiki/Whitespace_character#Unicode
// (characters that don't say "is a line-break")
@ -4927,7 +4976,7 @@ TOML_IMPL_NAMESPACE_START
TOML_ATTR(const)
constexpr bool is_whitespace(char32_t codepoint) noexcept
{
return is_ascii_whitespace(codepoint) || is_unicode_whitespace(codepoint);
return is_ascii_whitespace(codepoint) || is_non_ascii_whitespace(codepoint);
}
template <bool IncludeCarriageReturn = true>
@ -4941,7 +4990,7 @@ TOML_IMPL_NAMESPACE_START
[[nodiscard]]
TOML_ATTR(const)
constexpr bool is_unicode_line_break(char32_t codepoint) noexcept
constexpr bool is_non_ascii_line_break(char32_t codepoint) noexcept
{
// see https://en.wikipedia.org/wiki/Whitespace_character#Unicode
// (characters that say "is a line-break")
@ -4957,7 +5006,7 @@ TOML_IMPL_NAMESPACE_START
TOML_ATTR(const)
constexpr bool is_line_break(char32_t codepoint) noexcept
{
return is_ascii_line_break<IncludeCarriageReturn>(codepoint) || is_unicode_line_break(codepoint);
return is_ascii_line_break<IncludeCarriageReturn>(codepoint) || is_non_ascii_line_break(codepoint);
}
[[nodiscard]]
@ -5021,7 +5070,7 @@ TOML_IMPL_NAMESPACE_START
[[nodiscard]]
TOML_ATTR(const)
constexpr bool is_unicode_letter(char32_t c) noexcept
constexpr bool is_non_ascii_letter(char32_t c) noexcept
{
if (U'\xAA' > c || c > U'\U0003134A')
return false;
@ -5057,7 +5106,7 @@ TOML_IMPL_NAMESPACE_START
};
return bitmask_table_1[(static_cast<uint_least64_t>(c) - 0xAAull) / 0x40ull]
& (0x1ull << ((static_cast<uint_least64_t>(c) - 0xAAull) % 0x40ull));
// 1922 codepoints from 124 ranges (spanning a search area of 3147)
// 1922 code units from 124 ranges (spanning a search area of 3145)
}
case 0x01: // [1] 0CF5 - 193F
{
@ -5082,7 +5131,7 @@ TOML_IMPL_NAMESPACE_START
};
return bitmask_table_1[(static_cast<uint_least64_t>(c) - 0xD04ull) / 0x40ull]
& (0x1ull << ((static_cast<uint_least64_t>(c) - 0xD04ull) % 0x40ull));
// 2239 codepoints from 83 ranges (spanning a search area of 3147)
// 2239 code units from 83 ranges (spanning a search area of 3099)
}
case 0x02: // [2] 1940 - 258A
{
@ -5103,7 +5152,7 @@ TOML_IMPL_NAMESPACE_START
};
return bitmask_table_1[(static_cast<uint_least64_t>(c) - 0x1950ull) / 0x40ull]
& (0x1ull << ((static_cast<uint_least64_t>(c) - 0x1950ull) % 0x40ull));
// 1184 codepoints from 59 ranges (spanning a search area of 3147)
// 1184 code units from 59 ranges (spanning a search area of 2101)
}
case 0x03: // [3] 258B - 31D5
{
@ -5121,7 +5170,7 @@ TOML_IMPL_NAMESPACE_START
};
return bitmask_table_1[(static_cast<uint_least64_t>(c) - 0x2C00ull) / 0x40ull]
& (0x1ull << (static_cast<uint_least64_t>(c) % 0x40ull));
// 771 codepoints from 30 ranges (spanning a search area of 3147)
// 771 code units from 30 ranges (spanning a search area of 1472)
}
case 0x04: return (U'\u31F0' <= c && c <= U'\u31FF') || U'\u3400' <= c;
case 0x06: return c <= U'\u4DBF' || U'\u4E00' <= c;
@ -5148,7 +5197,7 @@ TOML_IMPL_NAMESPACE_START
};
return bitmask_table_1[(static_cast<uint_least64_t>(c) - 0xA079ull) / 0x40ull]
& (0x1ull << ((static_cast<uint_least64_t>(c) - 0xA079ull) % 0x40ull));
// 2554 codepoints from 52 ranges (spanning a search area of 3147)
// 2554 code units from 52 ranges (spanning a search area of 3147)
}
case 0x11: return c <= U'\uD7A3' || (U'\uD7B0' <= c && c <= U'\uD7C6') || (U'\uD7CB' <= c && c <= U'\uD7FB');
case 0x14: // [20] F686 - 102D0
@ -5172,7 +5221,7 @@ TOML_IMPL_NAMESPACE_START
};
return bitmask_table_1[(static_cast<uint_least64_t>(c) - 0xF900ull) / 0x40ull]
& (0x1ull << (static_cast<uint_least64_t>(c) % 0x40ull));
// 1710 codepoints from 34 ranges (spanning a search area of 3147)
// 1710 code units from 34 ranges (spanning a search area of 2513)
}
case 0x15: // [21] 102D1 - 10F1B
{
@ -5198,7 +5247,7 @@ TOML_IMPL_NAMESPACE_START
};
return bitmask_table_1[(static_cast<uint_least64_t>(c) - 0x10300ull) / 0x40ull]
& (0x1ull << (static_cast<uint_least64_t>(c) % 0x40ull));
// 1620 codepoints from 48 ranges (spanning a search area of 3147)
// 1620 code units from 48 ranges (spanning a search area of 3100)
}
case 0x16: // [22] 10F1C - 11B66
{
@ -5223,7 +5272,7 @@ TOML_IMPL_NAMESPACE_START
};
return bitmask_table_1[(static_cast<uint_least64_t>(c) - 0x10F1Cull) / 0x40ull]
& (0x1ull << ((static_cast<uint_least64_t>(c) - 0x10F1Cull) % 0x40ull));
// 1130 codepoints from 67 ranges (spanning a search area of 3147)
// 1130 code units from 67 ranges (spanning a search area of 3037)
}
case 0x17: // [23] 11B67 - 127B1
{
@ -5245,7 +5294,7 @@ TOML_IMPL_NAMESPACE_START
};
return bitmask_table_1[(static_cast<uint_least64_t>(c) - 0x11C00ull) / 0x40ull]
& (0x1ull << (static_cast<uint_least64_t>(c) % 0x40ull));
// 1304 codepoints from 16 ranges (spanning a search area of 3147)
// 1304 code units from 16 ranges (spanning a search area of 2372)
}
case 0x18: return U'\U00013000' <= c;
case 0x19: return c <= U'\U0001342E';
@ -5271,7 +5320,7 @@ TOML_IMPL_NAMESPACE_START
};
return bitmask_table_1[(static_cast<uint_least64_t>(c) - 0x16800ull) / 0x40ull]
& (0x1ull << (static_cast<uint_least64_t>(c) % 0x40ull));
// 1250 codepoints from 14 ranges (spanning a search area of 3147)
// 1250 code units from 14 ranges (spanning a search area of 2420)
}
case 0x1F: return c <= U'\U000187F7' || U'\U00018800' <= c;
case 0x20: return c <= U'\U00018CD5' || (U'\U00018D00' <= c && c <= U'\U00018D08');
@ -5288,7 +5337,7 @@ TOML_IMPL_NAMESPACE_START
};
return bitmask_table_1[(static_cast<uint_least64_t>(c) - 0x1B000ull) / 0x40ull]
& (0x1ull << (static_cast<uint_least64_t>(c) % 0x40ull));
// 690 codepoints from 4 ranges (spanning a search area of 3147)
// 690 code units from 4 ranges (spanning a search area of 764)
}
case 0x24: // [36] 1BB36 - 1C780
{
@ -5301,7 +5350,8 @@ TOML_IMPL_NAMESPACE_START
case 0x02: return (1u << (static_cast<uint_least32_t>(c) - 0x1BC80u)) & 0x3FF01FFu;
default: return true;
}
// 139 codepoints from 4 ranges (spanning a search area of 3147)
// 139 code units from 4 ranges (spanning a search area of 154)
TOML_UNREACHABLE;
}
case 0x26: // [38] 1D3CC - 1E016
{
@ -5317,7 +5367,7 @@ TOML_IMPL_NAMESPACE_START
};
return bitmask_table_1[(static_cast<uint_least64_t>(c) - 0x1D400ull) / 0x40ull]
& (0x1ull << (static_cast<uint_least64_t>(c) % 0x40ull));
// 936 codepoints from 30 ranges (spanning a search area of 3147)
// 936 code units from 30 ranges (spanning a search area of 972)
}
case 0x27: // [39] 1E017 - 1EC61
{
@ -5338,7 +5388,7 @@ TOML_IMPL_NAMESPACE_START
};
return bitmask_table_1[(static_cast<uint_least64_t>(c) - 0x1E100ull) / 0x40ull]
& (0x1ull << (static_cast<uint_least64_t>(c) % 0x40ull));
// 363 codepoints from 7 ranges (spanning a search area of 3147)
// 363 code units from 7 ranges (spanning a search area of 2124)
}
case 0x28: // [40] 1EC62 - 1F8AC
{
@ -5353,7 +5403,8 @@ TOML_IMPL_NAMESPACE_START
case 0x02: return (1ull << (static_cast<uint_least64_t>(c) - 0x1EE80u)) & 0xFFFFBEE0FFFFBFFull;
TOML_NO_DEFAULT_CASE;
}
// 141 codepoints from 33 ranges (spanning a search area of 3147)
// 141 code units from 33 ranges (spanning a search area of 188)
TOML_UNREACHABLE;
}
case 0x29: return U'\U00020000' <= c;
case 0x37: return c <= U'\U0002A6DD' || U'\U0002A700' <= c;
@ -5364,12 +5415,13 @@ TOML_IMPL_NAMESPACE_START
case 0x3E: return U'\U00030000' <= c;
TOML_NO_DEFAULT_CASE;
}
// 131189 codepoints from 620 ranges (spanning a search area of 1114112)
// 131189 code units from 620 ranges (spanning a search area of 201377)
TOML_UNREACHABLE;
}
[[nodiscard]]
TOML_ATTR(const)
constexpr bool is_unicode_number(char32_t c) noexcept
constexpr bool is_non_ascii_number(char32_t c) noexcept
{
if (U'\u0660' > c || c > U'\U0001FBF9')
return false;
@ -5398,7 +5450,7 @@ TOML_IMPL_NAMESPACE_START
};
return bitmask_table_1[(static_cast<uint_least64_t>(c) - 0x660ull) / 0x40ull]
& (0x1ull << ((static_cast<uint_least64_t>(c) - 0x660ull) % 0x40ull));
// 130 codepoints from 13 ranges (spanning a search area of 2007)
// 130 code units from 13 ranges (spanning a search area of 1936)
}
case 0x01: // [1] 0E37 - 160D
{
@ -5413,7 +5465,7 @@ TOML_IMPL_NAMESPACE_START
};
return bitmask_table_1[(static_cast<uint_least64_t>(c) - 0xE50ull) / 0x40ull]
& (0x1ull << ((static_cast<uint_least64_t>(c) - 0xE50ull) % 0x40ull));
// 50 codepoints from 5 ranges (spanning a search area of 2007)
// 50 code units from 5 ranges (spanning a search area of 586)
}
case 0x02: // [2] 160E - 1DE4
{
@ -5431,7 +5483,7 @@ TOML_IMPL_NAMESPACE_START
};
return bitmask_table_1[(static_cast<uint_least64_t>(c) - 0x16EEull) / 0x40ull]
& (0x1ull << ((static_cast<uint_least64_t>(c) - 0x16EEull) % 0x40ull));
// 103 codepoints from 11 ranges (spanning a search area of 2007)
// 103 code units from 11 ranges (spanning a search area of 1388)
}
case 0x03: return U'\u2160' <= c && c <= U'\u2188' && (1ull << (static_cast<uint_least64_t>(c) - 0x2160u)) & 0x1E7FFFFFFFFull;
case 0x05: return U'\u3007' <= c && c <= U'\u303A' && (1ull << (static_cast<uint_least64_t>(c) - 0x3007u)) & 0xE0007FC000001ull;
@ -5450,7 +5502,7 @@ TOML_IMPL_NAMESPACE_START
};
return bitmask_table_1[(static_cast<uint_least64_t>(c) - 0xA620ull) / 0x40ull]
& (0x1ull << ((static_cast<uint_least64_t>(c) - 0xA620ull) % 0x40ull));
// 70 codepoints from 7 ranges (spanning a search area of 2007)
// 70 code units from 7 ranges (spanning a search area of 1082)
}
case 0x15: return U'\uABF0' <= c && c <= U'\uABF9';
case 0x1F: return U'\uFF10' <= c && c <= U'\uFF19';
@ -5469,7 +5521,7 @@ TOML_IMPL_NAMESPACE_START
};
return bitmask_table_1[(static_cast<uint_least64_t>(c) - 0x10140ull) / 0x40ull]
& (0x1ull << (static_cast<uint_least64_t>(c) % 0x40ull));
// 70 codepoints from 5 ranges (spanning a search area of 2007)
// 70 code units from 5 ranges (spanning a search area of 874)
}
case 0x21: return (U'\U00010D30' <= c && c <= U'\U00010D39') || (U'\U00011066' <= c && c <= U'\U0001106F');
case 0x22: // [34] 110EE - 118C4
@ -5489,7 +5541,7 @@ TOML_IMPL_NAMESPACE_START
};
return bitmask_table_1[(static_cast<uint_least64_t>(c) - 0x110F0ull) / 0x40ull]
& (0x1ull << ((static_cast<uint_least64_t>(c) - 0x110F0ull) % 0x40ull));
// 90 codepoints from 9 ranges (spanning a search area of 2007)
// 90 code units from 9 ranges (spanning a search area of 1610)
}
case 0x23: // [35] 118C5 - 1209B
{
@ -5506,7 +5558,7 @@ TOML_IMPL_NAMESPACE_START
};
return bitmask_table_1[(static_cast<uint_least64_t>(c) - 0x118E0ull) / 0x40ull]
& (0x1ull << ((static_cast<uint_least64_t>(c) - 0x118E0ull) % 0x40ull));
// 50 codepoints from 5 ranges (spanning a search area of 2007)
// 50 code units from 5 ranges (spanning a search area of 1226)
}
case 0x24: return U'\U00012400' <= c && c <= U'\U0001246E';
case 0x2D: return (U'\U00016A60' <= c && c <= U'\U00016A69') || (U'\U00016B50' <= c && c <= U'\U00016B59');
@ -5516,12 +5568,13 @@ TOML_IMPL_NAMESPACE_START
case 0x3F: return U'\U0001FBF0' <= c;
TOML_NO_DEFAULT_CASE;
}
// 876 codepoints from 72 ranges (spanning a search area of 1114112)
// 876 code units from 72 ranges (spanning a search area of 128410)
TOML_UNREACHABLE;
}
[[nodiscard]]
TOML_ATTR(const)
constexpr bool is_unicode_combining_mark(char32_t c) noexcept
constexpr bool is_combining_mark(char32_t c) noexcept
{
if (U'\u0300' > c || c > U'\U000E01EF')
return false;
@ -5588,7 +5641,7 @@ TOML_IMPL_NAMESPACE_START
};
return bitmask_table_1[(static_cast<uint_least64_t>(c) - 0x300ull) / 0x40ull]
& (0x1ull << (static_cast<uint_least64_t>(c) % 0x40ull));
// 1106 codepoints from 156 ranges (spanning a search area of 14332)
// 1106 code units from 156 ranges (spanning a search area of 11675)
}
case 0x02: // [2] 72F8 - AAF3
{
@ -5605,7 +5658,7 @@ TOML_IMPL_NAMESPACE_START
};
return bitmask_table_1[(static_cast<uint_least64_t>(c) - 0xA66Full) / 0x40ull]
& (0x1ull << ((static_cast<uint_least64_t>(c) - 0xA66Full) % 0x40ull));
// 137 codepoints from 28 ranges (spanning a search area of 14332)
// 137 code units from 28 ranges (spanning a search area of 1153)
}
case 0x03: return (U'\uAAF5' <= c && c <= U'\uAAF6') || (U'\uABE3' <= c && c <= U'\uABEA') || (U'\uABEC' <= c && c <= U'\uABED');
case 0x04: // [4] E2F0 - 11AEB
@ -5650,7 +5703,7 @@ TOML_IMPL_NAMESPACE_START
};
return bitmask_table_1[(static_cast<uint_least64_t>(c) - 0xFB1Eull) / 0x40ull]
& (0x1ull << ((static_cast<uint_least64_t>(c) - 0xFB1Eull) % 0x40ull));
// 402 codepoints from 63 ranges (spanning a search area of 14332)
// 402 code units from 63 ranges (spanning a search area of 8060)
}
case 0x05: // [5] 11AEC - 152E7
{
@ -5665,7 +5718,7 @@ TOML_IMPL_NAMESPACE_START
};
return bitmask_table_1[(static_cast<uint_least64_t>(c) - 0x11C2Full) / 0x40ull]
& (0x1ull << ((static_cast<uint_least64_t>(c) - 0x11C2Full) % 0x40ull));
// 85 codepoints from 13 ranges (spanning a search area of 14332)
// 85 code units from 13 ranges (spanning a search area of 712)
}
case 0x06: // [6] 152E8 - 18AE3
{
@ -5683,7 +5736,7 @@ TOML_IMPL_NAMESPACE_START
};
return bitmask_table_1[(static_cast<uint_least64_t>(c) - 0x16AF0ull) / 0x40ull]
& (0x1ull << ((static_cast<uint_least64_t>(c) - 0x16AF0ull) % 0x40ull));
// 75 codepoints from 7 ranges (spanning a search area of 14332)
// 75 code units from 7 ranges (spanning a search area of 1282)
}
case 0x07: return U'\U0001BC9D' <= c && c <= U'\U0001BC9E';
case 0x08: // [8] 1C2E0 - 1FADB
@ -5720,12 +5773,13 @@ TOML_IMPL_NAMESPACE_START
};
return bitmask_table_1[(static_cast<uint_least64_t>(c) - 0x1D165ull) / 0x40ull]
& (0x1ull << ((static_cast<uint_least64_t>(c) - 0x1D165ull) % 0x40ull));
// 223 codepoints from 21 ranges (spanning a search area of 14332)
// 223 code units from 21 ranges (spanning a search area of 6118)
}
case 0x3F: return U'\U000E0100' <= c;
TOML_NO_DEFAULT_CASE;
}
// 2282 codepoints from 293 ranges (spanning a search area of 1114112)
// 2282 code units from 293 ranges (spanning a search area of 917232)
TOML_UNREACHABLE;
}
#endif // TOML_LANG_UNRELEASED
@ -5740,9 +5794,9 @@ TOML_IMPL_NAMESPACE_START
|| codepoint == U'_'
#if TOML_LANG_UNRELEASED // toml/issues/644 ('+' in bare keys) & toml/issues/687 (unicode bare keys)
|| codepoint == U'+'
|| is_unicode_letter(codepoint)
|| is_unicode_number(codepoint)
|| is_unicode_combining_mark(codepoint)
|| is_non_ascii_letter(codepoint)
|| is_non_ascii_number(codepoint)
|| is_combining_mark(codepoint)
#endif
;
}
@ -5757,8 +5811,8 @@ TOML_IMPL_NAMESPACE_START
|| codepoint == U'}'
|| codepoint == U','
|| codepoint == U'#'
|| is_unicode_line_break(codepoint)
|| is_unicode_whitespace(codepoint)
|| is_non_ascii_line_break(codepoint)
|| is_non_ascii_whitespace(codepoint)
;
}
@ -7576,8 +7630,29 @@ TOML_NAMESPACE_END
TOML_NAMESPACE_START
{
#if TOML_LIFETIME_HOOKS
TOML_EXTERNAL_LINKAGE
array::array() noexcept = default;
void array::lh_ctor() noexcept
{
TOML_ARRAY_CREATED;
}
TOML_EXTERNAL_LINKAGE
void array::lh_dtor() noexcept
{
TOML_ARRAY_DESTROYED;
}
#endif
TOML_EXTERNAL_LINKAGE
array::array() noexcept
{
#if TOML_LIFETIME_HOOKS
lh_ctor();
#endif
}
TOML_EXTERNAL_LINKAGE
array::array(const array& other) noexcept
@ -7586,13 +7661,21 @@ TOML_NAMESPACE_START
elements.reserve(other.elements.size());
for (const auto& elem : other)
elements.emplace_back(impl::make_node(elem));
#if TOML_LIFETIME_HOOKS
lh_ctor();
#endif
}
TOML_EXTERNAL_LINKAGE
array::array(array&& other) noexcept
: node{ std::move(other) },
elements{ std::move(other.elements) }
{}
{
#if TOML_LIFETIME_HOOKS
lh_ctor();
#endif
}
TOML_EXTERNAL_LINKAGE
array& array::operator= (const array& rhs) noexcept
@ -7619,6 +7702,14 @@ TOML_NAMESPACE_START
return *this;
}
TOML_EXTERNAL_LINKAGE
array::~array() noexcept
{
#if TOML_LIFETIME_HOOKS
lh_dtor();
#endif
}
TOML_EXTERNAL_LINKAGE
void array::preinsertion_resize(size_t idx, size_t count) noexcept
{
@ -7886,8 +7977,29 @@ TOML_NAMESPACE_END
TOML_NAMESPACE_START
{
#if TOML_LIFETIME_HOOKS
TOML_EXTERNAL_LINKAGE
table::table() noexcept {}
void table::lh_ctor() noexcept
{
TOML_TABLE_CREATED;
}
TOML_EXTERNAL_LINKAGE
void table::lh_dtor() noexcept
{
TOML_TABLE_DESTROYED;
}
#endif
TOML_EXTERNAL_LINKAGE
table::table() noexcept
{
#if TOML_LIFETIME_HOOKS
lh_ctor();
#endif
}
TOML_EXTERNAL_LINKAGE
table::table(const table& other) noexcept
@ -7896,6 +8008,10 @@ TOML_NAMESPACE_START
{
for (auto&& [k, v] : other)
map.emplace_hint(map.end(), k, impl::make_node(v));
#if TOML_LIFETIME_HOOKS
lh_ctor();
#endif
}
TOML_EXTERNAL_LINKAGE
@ -7903,7 +8019,11 @@ TOML_NAMESPACE_START
: node{ std::move(other) },
map{ std::move(other.map) },
inline_{ other.inline_ }
{}
{
#if TOML_LIFETIME_HOOKS
lh_ctor();
#endif
}
TOML_EXTERNAL_LINKAGE
table& table::operator= (const table& rhs) noexcept
@ -7931,6 +8051,14 @@ TOML_NAMESPACE_START
return *this;
}
TOML_EXTERNAL_LINKAGE
table::~table() noexcept
{
#if TOML_LIFETIME_HOOKS
lh_dtor();
#endif
}
TOML_EXTERNAL_LINKAGE
table::table(impl::table_init_pair* pairs, size_t count) noexcept
{
@ -8628,6 +8756,15 @@ TOML_DISABLE_SWITCH_WARNINGS
TOML_ANON_NAMESPACE_START
{
template <typename... T>
[[nodiscard]]
TOML_ATTR(const)
constexpr bool is_match(char32_t codepoint, T... vals) noexcept
{
static_assert((std::is_same_v<char32_t, T> && ...));
return ((codepoint == vals) || ...);
}
template <uint64_t> struct parse_integer_traits;
template <> struct parse_integer_traits<2> final
{
@ -8828,6 +8965,65 @@ TOML_ANON_NAMESPACE_START
#define push_parse_scope_1(scope, line) push_parse_scope_2(scope, line)
#define push_parse_scope(scope) push_parse_scope_1(scope, __LINE__)
// Q: "why not std::unique_ptr??
// A: It caused a lot of bloat on some implementations so this exists an internal substitute.
class node_ptr
{
private:
toml::node* node_ = {};
public:
TOML_NODISCARD_CTOR
node_ptr() noexcept = default;
TOML_NODISCARD_CTOR
explicit node_ptr(toml::node* n) noexcept
: node_{ n }
{}
~node_ptr() noexcept
{
delete node_;
}
node_ptr& operator=(toml::node* val) noexcept
{
if (val != node_)
{
delete node_;
node_ = val;
}
return *this;
}
node_ptr(const node_ptr&) = delete;
node_ptr& operator=(const node_ptr&) = delete;
node_ptr(node_ptr&&) = delete;
node_ptr& operator=(node_ptr&&) = delete;
[[nodiscard]]
TOML_ATTR(pure)
operator bool() const noexcept
{
return node_ != nullptr;
}
[[nodiscard]]
TOML_ATTR(pure)
toml::node* get() const noexcept
{
return node_;
}
[[nodiscard]]
toml::node* release() noexcept
{
auto n = node_;
node_ = nullptr;
return n;
}
};
struct parsed_key final
{
std::vector<std::string> segments;
@ -8836,7 +9032,7 @@ TOML_ANON_NAMESPACE_START
struct parsed_key_value_pair final
{
parsed_key key;
toml::node* value;
node_ptr value;
};
}
@ -10395,7 +10591,7 @@ TOML_IMPL_NAMESPACE_START
set_error_and_return_default("values may not begin with underscores"sv);
const auto begin_pos = cp->position;
node* val{};
node_ptr val;
do
{
@ -10611,17 +10807,17 @@ TOML_IMPL_NAMESPACE_START
else if (has_any(has_x))
{
val = new value{ parse_integer<16>() };
reinterpret_cast<value<int64_t>*>(val)->flags(value_flags::format_as_hexadecimal);
reinterpret_cast<value<int64_t>*>(val.get())->flags(value_flags::format_as_hexadecimal);
}
else if (has_any(has_o))
{
val = new value{ parse_integer<8>() };
reinterpret_cast<value<int64_t>*>(val)->flags(value_flags::format_as_octal);
reinterpret_cast<value<int64_t>*>(val.get())->flags(value_flags::format_as_octal);
}
else if (has_any(has_b))
{
val = new value{ parse_integer<2>() };
reinterpret_cast<value<int64_t>*>(val)->flags(value_flags::format_as_binary);
reinterpret_cast<value<int64_t>*>(val.get())->flags(value_flags::format_as_binary);
}
else if (has_any(has_e) || (has_any(begins_zero | begins_digit) && chars[1] == U'.'))
val = new value{ parse_float() };
@ -10662,14 +10858,14 @@ TOML_IMPL_NAMESPACE_START
// 0b10
case bzero_msk | has_b:
val = new value{ parse_integer<2>() };
reinterpret_cast<value<int64_t>*>(val)->flags(value_flags::format_as_binary);
reinterpret_cast<value<int64_t>*>(val.get())->flags(value_flags::format_as_binary);
break;
//=================== octal integers
// 0o10
case bzero_msk | has_o:
val = new value{ parse_integer<8>() };
reinterpret_cast<value<int64_t>*>(val)->flags(value_flags::format_as_octal);
reinterpret_cast<value<int64_t>*>(val.get())->flags(value_flags::format_as_octal);
break;
//=================== decimal integers
@ -10688,7 +10884,7 @@ TOML_IMPL_NAMESPACE_START
// 0x10
case bzero_msk | has_x:
val = new value{ parse_integer<16>() };
reinterpret_cast<value<int64_t>*>(val)->flags(value_flags::format_as_hexadecimal);
reinterpret_cast<value<int64_t>*>(val.get())->flags(value_flags::format_as_hexadecimal);
break;
//=================== decimal floats
@ -10862,8 +11058,8 @@ TOML_IMPL_NAMESPACE_START
}
#endif
val->source_ = { begin_pos, current_position(1), reader.source_path() };
return val;
val.get()->source_ = { begin_pos, current_position(1), reader.source_path() };
return val.release();
}
[[nodiscard]]
@ -10880,7 +11076,7 @@ TOML_IMPL_NAMESPACE_START
while (!is_error())
{
#if TOML_LANG_UNRELEASED // toml/issues/687 (unicode bare keys)
if (is_unicode_combining_mark(*cp))
if (is_combining_mark(*cp))
set_error_and_return_default("bare keys may not begin with unicode combining marks"sv);
else
#endif
@ -10965,7 +11161,7 @@ TOML_IMPL_NAMESPACE_START
// get the value
if (is_value_terminator(*cp))
set_error_and_return_default("expected value, saw '"sv, to_sv(*cp), "'"sv);
return { std::move(key), parse_value() };
return { std::move(key), node_ptr{ parse_value() } };
}
[[nodiscard]]
@ -11179,12 +11375,12 @@ TOML_IMPL_NAMESPACE_START
).first->second.get();
dotted_key_tables.push_back(&child->ref_cast<table>());
dotted_key_tables.back()->inline_ = true;
child->source_ = kvp.value->source_;
child->source_ = kvp.value.get()->source_;
}
else if (!child->is_table() || !find(dotted_key_tables, &child->ref_cast<table>()))
set_error("cannot redefine existing "sv, to_sv(child->type()), " as dotted key-value pair"sv);
else
child->source_.end = kvp.value->source_.end;
child->source_.end = kvp.value.get()->source_.end;
return_if_error();
tab = &child->ref_cast<table>();
}
@ -11192,7 +11388,7 @@ TOML_IMPL_NAMESPACE_START
if (auto conflicting_node = tab->get(kvp.key.segments.back()))
{
if (conflicting_node->type() == kvp.value->type())
if (conflicting_node->type() == kvp.value.get()->type())
set_error(
"cannot redefine existing "sv, to_sv(conflicting_node->type()),
" '"sv, to_sv(recording_buffer), "'"sv
@ -11201,14 +11397,14 @@ TOML_IMPL_NAMESPACE_START
set_error(
"cannot redefine existing "sv, to_sv(conflicting_node->type()),
" '"sv, to_sv(recording_buffer),
"' as "sv, to_sv(kvp.value->type())
"' as "sv, to_sv(kvp.value.get()->type())
);
}
return_if_error();
tab->map.emplace(
std::move(kvp.key.segments.back()),
std::unique_ptr<node>{ kvp.value }
std::unique_ptr<node>{ kvp.value.release() }
);
}
@ -11361,8 +11557,8 @@ TOML_IMPL_NAMESPACE_START
// skip opening '['
advance_and_return_if_error_or_eof({});
auto arr = new array{};
auto& vals = arr->elements;
node_ptr arr{ new array{} };
auto& vals = reinterpret_cast<array*>(arr.get())->elements;
enum parse_elem : int
{
none,
@ -11412,7 +11608,7 @@ TOML_IMPL_NAMESPACE_START
}
return_if_error({});
return arr;
return reinterpret_cast<array*>(arr.release());
}
TOML_EXTERNAL_LINKAGE
@ -11426,8 +11622,8 @@ TOML_IMPL_NAMESPACE_START
// skip opening '{'
advance_and_return_if_error_or_eof({});
auto tab = new table{};
tab->inline_ = true;
node_ptr tab{ new table{} };
reinterpret_cast<table*>(tab.get())->inline_ = true;
enum parse_elem : int
{
none,
@ -11487,7 +11683,7 @@ TOML_IMPL_NAMESPACE_START
else
{
prev = kvp;
parse_key_value_pair_and_insert(tab);
parse_key_value_pair_and_insert(reinterpret_cast<table*>(tab.get()));
}
}
@ -11496,7 +11692,7 @@ TOML_IMPL_NAMESPACE_START
}
return_if_error({});
return tab;
return reinterpret_cast<table*>(tab.release());
}
TOML_API
@ -11823,6 +12019,7 @@ TOML_POP_WARNINGS // TOML_DISABLE_SPAM_WARNINGS
#undef TOML_LANG_HIGHER_THAN
#undef TOML_LANG_UNRELEASED
#undef TOML_LAUNDER
#undef TOML_LIFETIME_HOOKS
#undef TOML_LIKELY
#undef TOML_MAKE_BITOPS
#undef TOML_MAKE_VERSION

View File

@ -38,6 +38,7 @@
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>tests.h</PrecompiledHeaderFile>
<PreprocessorDefinitions>TOML_UNRELEASED_FEATURES=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>LEAK_TESTS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">_HAS_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">SHOULD_HAVE_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'!='false'">SHOULD_HAVE_EXCEPTIONS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@ -86,6 +87,7 @@
<ItemGroup>
<ClInclude Include="..\..\tests\catch2.h" />
<ClInclude Include="..\..\tests\evil_macros.h" />
<ClInclude Include="..\..\tests\leakproof.h" />
<ClInclude Include="..\..\tests\settings.h" />
<ClInclude Include="..\..\tests\tests.h" />
<ClInclude Include="..\..\tests\tloptional.h" />

View File

@ -38,6 +38,7 @@
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>tests.h</PrecompiledHeaderFile>
<PreprocessorDefinitions>TOML_UNRELEASED_FEATURES=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>LEAK_TESTS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">_HAS_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">SHOULD_HAVE_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'!='false'">SHOULD_HAVE_EXCEPTIONS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@ -86,6 +87,7 @@
<ItemGroup>
<ClInclude Include="..\..\tests\catch2.h" />
<ClInclude Include="..\..\tests\evil_macros.h" />
<ClInclude Include="..\..\tests\leakproof.h" />
<ClInclude Include="..\..\tests\settings.h" />
<ClInclude Include="..\..\tests\tests.h" />
<ClInclude Include="..\..\tests\tloptional.h" />

View File

@ -38,6 +38,7 @@
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>tests.h</PrecompiledHeaderFile>
<PreprocessorDefinitions>TOML_UNRELEASED_FEATURES=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>LEAK_TESTS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">_HAS_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">SHOULD_HAVE_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'!='false'">SHOULD_HAVE_EXCEPTIONS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@ -86,6 +87,7 @@
<ItemGroup>
<ClInclude Include="..\..\tests\catch2.h" />
<ClInclude Include="..\..\tests\evil_macros.h" />
<ClInclude Include="..\..\tests\leakproof.h" />
<ClInclude Include="..\..\tests\settings.h" />
<ClInclude Include="..\..\tests\tests.h" />
<ClInclude Include="..\..\tests\tloptional.h" />

View File

@ -38,6 +38,7 @@
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>tests.h</PrecompiledHeaderFile>
<PreprocessorDefinitions>TOML_UNRELEASED_FEATURES=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>LEAK_TESTS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">_HAS_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">SHOULD_HAVE_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'!='false'">SHOULD_HAVE_EXCEPTIONS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@ -86,6 +87,7 @@
<ItemGroup>
<ClInclude Include="..\..\tests\catch2.h" />
<ClInclude Include="..\..\tests\evil_macros.h" />
<ClInclude Include="..\..\tests\leakproof.h" />
<ClInclude Include="..\..\tests\settings.h" />
<ClInclude Include="..\..\tests\tests.h" />
<ClInclude Include="..\..\tests\tloptional.h" />

View File

@ -38,6 +38,7 @@
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>tests.h</PrecompiledHeaderFile>
<PreprocessorDefinitions>TOML_UNRELEASED_FEATURES=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>LEAK_TESTS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">_HAS_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">SHOULD_HAVE_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'!='false'">SHOULD_HAVE_EXCEPTIONS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@ -86,6 +87,7 @@
<ItemGroup>
<ClInclude Include="..\..\tests\catch2.h" />
<ClInclude Include="..\..\tests\evil_macros.h" />
<ClInclude Include="..\..\tests\leakproof.h" />
<ClInclude Include="..\..\tests\settings.h" />
<ClInclude Include="..\..\tests\tests.h" />
<ClInclude Include="..\..\tests\tloptional.h" />

View File

@ -38,6 +38,7 @@
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>tests.h</PrecompiledHeaderFile>
<PreprocessorDefinitions>TOML_UNRELEASED_FEATURES=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>LEAK_TESTS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">_HAS_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">SHOULD_HAVE_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'!='false'">SHOULD_HAVE_EXCEPTIONS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@ -86,6 +87,7 @@
<ItemGroup>
<ClInclude Include="..\..\tests\catch2.h" />
<ClInclude Include="..\..\tests\evil_macros.h" />
<ClInclude Include="..\..\tests\leakproof.h" />
<ClInclude Include="..\..\tests\settings.h" />
<ClInclude Include="..\..\tests\tests.h" />
<ClInclude Include="..\..\tests\tloptional.h" />

View File

@ -38,6 +38,7 @@
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>tests.h</PrecompiledHeaderFile>
<PreprocessorDefinitions>TOML_UNRELEASED_FEATURES=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>LEAK_TESTS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">_HAS_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">SHOULD_HAVE_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'!='false'">SHOULD_HAVE_EXCEPTIONS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@ -86,6 +87,7 @@
<ItemGroup>
<ClInclude Include="..\..\tests\catch2.h" />
<ClInclude Include="..\..\tests\evil_macros.h" />
<ClInclude Include="..\..\tests\leakproof.h" />
<ClInclude Include="..\..\tests\settings.h" />
<ClInclude Include="..\..\tests\tests.h" />
<ClInclude Include="..\..\tests\tloptional.h" />

View File

@ -38,6 +38,7 @@
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>tests.h</PrecompiledHeaderFile>
<PreprocessorDefinitions>TOML_UNRELEASED_FEATURES=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>LEAK_TESTS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">_HAS_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">SHOULD_HAVE_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'!='false'">SHOULD_HAVE_EXCEPTIONS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@ -86,6 +87,7 @@
<ItemGroup>
<ClInclude Include="..\..\tests\catch2.h" />
<ClInclude Include="..\..\tests\evil_macros.h" />
<ClInclude Include="..\..\tests\leakproof.h" />
<ClInclude Include="..\..\tests\settings.h" />
<ClInclude Include="..\..\tests\tests.h" />
<ClInclude Include="..\..\tests\tloptional.h" />

View File

@ -38,6 +38,7 @@
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>tests.h</PrecompiledHeaderFile>
<PreprocessorDefinitions>TOML_UNRELEASED_FEATURES=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>LEAK_TESTS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">_HAS_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">SHOULD_HAVE_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'!='false'">SHOULD_HAVE_EXCEPTIONS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@ -86,6 +87,7 @@
<ItemGroup>
<ClInclude Include="..\..\tests\catch2.h" />
<ClInclude Include="..\..\tests\evil_macros.h" />
<ClInclude Include="..\..\tests\leakproof.h" />
<ClInclude Include="..\..\tests\settings.h" />
<ClInclude Include="..\..\tests\tests.h" />
<ClInclude Include="..\..\tests\tloptional.h" />

View File

@ -38,6 +38,7 @@
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>tests.h</PrecompiledHeaderFile>
<PreprocessorDefinitions>TOML_UNRELEASED_FEATURES=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>LEAK_TESTS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">_HAS_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">SHOULD_HAVE_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'!='false'">SHOULD_HAVE_EXCEPTIONS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@ -86,6 +87,7 @@
<ItemGroup>
<ClInclude Include="..\..\tests\catch2.h" />
<ClInclude Include="..\..\tests\evil_macros.h" />
<ClInclude Include="..\..\tests\leakproof.h" />
<ClInclude Include="..\..\tests\settings.h" />
<ClInclude Include="..\..\tests\tests.h" />
<ClInclude Include="..\..\tests\tloptional.h" />

View File

@ -38,6 +38,7 @@
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>tests.h</PrecompiledHeaderFile>
<PreprocessorDefinitions>TOML_UNRELEASED_FEATURES=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>LEAK_TESTS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">_HAS_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">SHOULD_HAVE_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'!='false'">SHOULD_HAVE_EXCEPTIONS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@ -86,6 +87,7 @@
<ItemGroup>
<ClInclude Include="..\..\tests\catch2.h" />
<ClInclude Include="..\..\tests\evil_macros.h" />
<ClInclude Include="..\..\tests\leakproof.h" />
<ClInclude Include="..\..\tests\settings.h" />
<ClInclude Include="..\..\tests\tests.h" />
<ClInclude Include="..\..\tests\tloptional.h" />

View File

@ -38,6 +38,7 @@
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>tests.h</PrecompiledHeaderFile>
<PreprocessorDefinitions>TOML_UNRELEASED_FEATURES=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>LEAK_TESTS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">_HAS_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">SHOULD_HAVE_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'!='false'">SHOULD_HAVE_EXCEPTIONS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@ -86,6 +87,7 @@
<ItemGroup>
<ClInclude Include="..\..\tests\catch2.h" />
<ClInclude Include="..\..\tests\evil_macros.h" />
<ClInclude Include="..\..\tests\leakproof.h" />
<ClInclude Include="..\..\tests\settings.h" />
<ClInclude Include="..\..\tests\tests.h" />
<ClInclude Include="..\..\tests\tloptional.h" />

View File

@ -38,6 +38,7 @@
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>tests.h</PrecompiledHeaderFile>
<PreprocessorDefinitions>TOML_UNRELEASED_FEATURES=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>LEAK_TESTS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">_HAS_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">SHOULD_HAVE_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'!='false'">SHOULD_HAVE_EXCEPTIONS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@ -86,6 +87,7 @@
<ItemGroup>
<ClInclude Include="..\..\tests\catch2.h" />
<ClInclude Include="..\..\tests\evil_macros.h" />
<ClInclude Include="..\..\tests\leakproof.h" />
<ClInclude Include="..\..\tests\settings.h" />
<ClInclude Include="..\..\tests\tests.h" />
<ClInclude Include="..\..\tests\tloptional.h" />

View File

@ -38,6 +38,7 @@
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>tests.h</PrecompiledHeaderFile>
<PreprocessorDefinitions>TOML_UNRELEASED_FEATURES=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>LEAK_TESTS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">_HAS_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">SHOULD_HAVE_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'!='false'">SHOULD_HAVE_EXCEPTIONS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@ -86,6 +87,7 @@
<ItemGroup>
<ClInclude Include="..\..\tests\catch2.h" />
<ClInclude Include="..\..\tests\evil_macros.h" />
<ClInclude Include="..\..\tests\leakproof.h" />
<ClInclude Include="..\..\tests\settings.h" />
<ClInclude Include="..\..\tests\tests.h" />
<ClInclude Include="..\..\tests\tloptional.h" />

View File

@ -38,6 +38,7 @@
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>tests.h</PrecompiledHeaderFile>
<PreprocessorDefinitions>TOML_UNRELEASED_FEATURES=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>LEAK_TESTS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">_HAS_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">SHOULD_HAVE_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'!='false'">SHOULD_HAVE_EXCEPTIONS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@ -86,6 +87,7 @@
<ItemGroup>
<ClInclude Include="..\..\tests\catch2.h" />
<ClInclude Include="..\..\tests\evil_macros.h" />
<ClInclude Include="..\..\tests\leakproof.h" />
<ClInclude Include="..\..\tests\settings.h" />
<ClInclude Include="..\..\tests\tests.h" />
<ClInclude Include="..\..\tests\tloptional.h" />

View File

@ -38,6 +38,7 @@
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>tests.h</PrecompiledHeaderFile>
<PreprocessorDefinitions>TOML_UNRELEASED_FEATURES=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>LEAK_TESTS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">_HAS_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">SHOULD_HAVE_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'!='false'">SHOULD_HAVE_EXCEPTIONS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@ -86,6 +87,7 @@
<ItemGroup>
<ClInclude Include="..\..\tests\catch2.h" />
<ClInclude Include="..\..\tests\evil_macros.h" />
<ClInclude Include="..\..\tests\leakproof.h" />
<ClInclude Include="..\..\tests\settings.h" />
<ClInclude Include="..\..\tests\tests.h" />
<ClInclude Include="..\..\tests\tloptional.h" />

View File

@ -38,6 +38,7 @@
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>tests.h</PrecompiledHeaderFile>
<PreprocessorDefinitions>TOML_UNRELEASED_FEATURES=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>LEAK_TESTS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">_HAS_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">SHOULD_HAVE_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'!='false'">SHOULD_HAVE_EXCEPTIONS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@ -86,6 +87,7 @@
<ItemGroup>
<ClInclude Include="..\..\tests\catch2.h" />
<ClInclude Include="..\..\tests\evil_macros.h" />
<ClInclude Include="..\..\tests\leakproof.h" />
<ClInclude Include="..\..\tests\settings.h" />
<ClInclude Include="..\..\tests\tests.h" />
<ClInclude Include="..\..\tests\tloptional.h" />

View File

@ -38,6 +38,7 @@
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>tests.h</PrecompiledHeaderFile>
<PreprocessorDefinitions>TOML_UNRELEASED_FEATURES=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>LEAK_TESTS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">_HAS_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">SHOULD_HAVE_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'!='false'">SHOULD_HAVE_EXCEPTIONS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@ -86,6 +87,7 @@
<ItemGroup>
<ClInclude Include="..\..\tests\catch2.h" />
<ClInclude Include="..\..\tests\evil_macros.h" />
<ClInclude Include="..\..\tests\leakproof.h" />
<ClInclude Include="..\..\tests\settings.h" />
<ClInclude Include="..\..\tests\tests.h" />
<ClInclude Include="..\..\tests\tloptional.h" />

View File

@ -38,6 +38,7 @@
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>tests.h</PrecompiledHeaderFile>
<PreprocessorDefinitions>TOML_UNRELEASED_FEATURES=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>LEAK_TESTS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">_HAS_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">SHOULD_HAVE_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'!='false'">SHOULD_HAVE_EXCEPTIONS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@ -86,6 +87,7 @@
<ItemGroup>
<ClInclude Include="..\..\tests\catch2.h" />
<ClInclude Include="..\..\tests\evil_macros.h" />
<ClInclude Include="..\..\tests\leakproof.h" />
<ClInclude Include="..\..\tests\settings.h" />
<ClInclude Include="..\..\tests\tests.h" />
<ClInclude Include="..\..\tests\tloptional.h" />

View File

@ -38,6 +38,7 @@
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>tests.h</PrecompiledHeaderFile>
<PreprocessorDefinitions>TOML_UNRELEASED_FEATURES=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>LEAK_TESTS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">_HAS_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">SHOULD_HAVE_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'!='false'">SHOULD_HAVE_EXCEPTIONS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@ -86,6 +87,7 @@
<ItemGroup>
<ClInclude Include="..\..\tests\catch2.h" />
<ClInclude Include="..\..\tests\evil_macros.h" />
<ClInclude Include="..\..\tests\leakproof.h" />
<ClInclude Include="..\..\tests\settings.h" />
<ClInclude Include="..\..\tests\tests.h" />
<ClInclude Include="..\..\tests\tloptional.h" />

View File

@ -38,6 +38,7 @@
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>tests.h</PrecompiledHeaderFile>
<PreprocessorDefinitions>TOML_UNRELEASED_FEATURES=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>LEAK_TESTS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">_HAS_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">SHOULD_HAVE_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'!='false'">SHOULD_HAVE_EXCEPTIONS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@ -86,6 +87,7 @@
<ItemGroup>
<ClInclude Include="..\..\tests\catch2.h" />
<ClInclude Include="..\..\tests\evil_macros.h" />
<ClInclude Include="..\..\tests\leakproof.h" />
<ClInclude Include="..\..\tests\settings.h" />
<ClInclude Include="..\..\tests\tests.h" />
<ClInclude Include="..\..\tests\tloptional.h" />

View File

@ -38,6 +38,7 @@
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>tests.h</PrecompiledHeaderFile>
<PreprocessorDefinitions>TOML_UNRELEASED_FEATURES=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>LEAK_TESTS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">_HAS_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">SHOULD_HAVE_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'!='false'">SHOULD_HAVE_EXCEPTIONS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@ -86,6 +87,7 @@
<ItemGroup>
<ClInclude Include="..\..\tests\catch2.h" />
<ClInclude Include="..\..\tests\evil_macros.h" />
<ClInclude Include="..\..\tests\leakproof.h" />
<ClInclude Include="..\..\tests\settings.h" />
<ClInclude Include="..\..\tests\tests.h" />
<ClInclude Include="..\..\tests\tloptional.h" />

View File

@ -38,6 +38,7 @@
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>tests.h</PrecompiledHeaderFile>
<PreprocessorDefinitions>TOML_UNRELEASED_FEATURES=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>LEAK_TESTS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">_HAS_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">SHOULD_HAVE_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'!='false'">SHOULD_HAVE_EXCEPTIONS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@ -86,6 +87,7 @@
<ItemGroup>
<ClInclude Include="..\..\tests\catch2.h" />
<ClInclude Include="..\..\tests\evil_macros.h" />
<ClInclude Include="..\..\tests\leakproof.h" />
<ClInclude Include="..\..\tests\settings.h" />
<ClInclude Include="..\..\tests\tests.h" />
<ClInclude Include="..\..\tests\tloptional.h" />

View File

@ -38,6 +38,7 @@
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>tests.h</PrecompiledHeaderFile>
<PreprocessorDefinitions>TOML_UNRELEASED_FEATURES=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>LEAK_TESTS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">_HAS_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">SHOULD_HAVE_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'!='false'">SHOULD_HAVE_EXCEPTIONS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@ -86,6 +87,7 @@
<ItemGroup>
<ClInclude Include="..\..\tests\catch2.h" />
<ClInclude Include="..\..\tests\evil_macros.h" />
<ClInclude Include="..\..\tests\leakproof.h" />
<ClInclude Include="..\..\tests\settings.h" />
<ClInclude Include="..\..\tests\tests.h" />
<ClInclude Include="..\..\tests\tloptional.h" />

View File

@ -38,6 +38,7 @@
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>tests.h</PrecompiledHeaderFile>
<PreprocessorDefinitions>TOML_UNRELEASED_FEATURES=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>LEAK_TESTS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">_HAS_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">SHOULD_HAVE_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'!='false'">SHOULD_HAVE_EXCEPTIONS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@ -86,6 +87,7 @@
<ItemGroup>
<ClInclude Include="..\..\tests\catch2.h" />
<ClInclude Include="..\..\tests\evil_macros.h" />
<ClInclude Include="..\..\tests\leakproof.h" />
<ClInclude Include="..\..\tests\settings.h" />
<ClInclude Include="..\..\tests\tests.h" />
<ClInclude Include="..\..\tests\tloptional.h" />

View File

@ -38,6 +38,7 @@
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>tests.h</PrecompiledHeaderFile>
<PreprocessorDefinitions>TOML_UNRELEASED_FEATURES=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>LEAK_TESTS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">_HAS_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">SHOULD_HAVE_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'!='false'">SHOULD_HAVE_EXCEPTIONS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@ -86,6 +87,7 @@
<ItemGroup>
<ClInclude Include="..\..\tests\catch2.h" />
<ClInclude Include="..\..\tests\evil_macros.h" />
<ClInclude Include="..\..\tests\leakproof.h" />
<ClInclude Include="..\..\tests\settings.h" />
<ClInclude Include="..\..\tests\tests.h" />
<ClInclude Include="..\..\tests\tloptional.h" />

View File

@ -38,6 +38,7 @@
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>tests.h</PrecompiledHeaderFile>
<PreprocessorDefinitions>TOML_UNRELEASED_FEATURES=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>LEAK_TESTS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">_HAS_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">SHOULD_HAVE_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'!='false'">SHOULD_HAVE_EXCEPTIONS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@ -86,6 +87,7 @@
<ItemGroup>
<ClInclude Include="..\..\tests\catch2.h" />
<ClInclude Include="..\..\tests\evil_macros.h" />
<ClInclude Include="..\..\tests\leakproof.h" />
<ClInclude Include="..\..\tests\settings.h" />
<ClInclude Include="..\..\tests\tests.h" />
<ClInclude Include="..\..\tests\tloptional.h" />

View File

@ -38,6 +38,7 @@
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>tests.h</PrecompiledHeaderFile>
<PreprocessorDefinitions>TOML_UNRELEASED_FEATURES=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>LEAK_TESTS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">_HAS_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">SHOULD_HAVE_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'!='false'">SHOULD_HAVE_EXCEPTIONS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@ -86,6 +87,7 @@
<ItemGroup>
<ClInclude Include="..\..\tests\catch2.h" />
<ClInclude Include="..\..\tests\evil_macros.h" />
<ClInclude Include="..\..\tests\leakproof.h" />
<ClInclude Include="..\..\tests\settings.h" />
<ClInclude Include="..\..\tests\tests.h" />
<ClInclude Include="..\..\tests\tloptional.h" />

View File

@ -38,6 +38,7 @@
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>tests.h</PrecompiledHeaderFile>
<PreprocessorDefinitions>TOML_UNRELEASED_FEATURES=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>LEAK_TESTS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">_HAS_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">SHOULD_HAVE_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'!='false'">SHOULD_HAVE_EXCEPTIONS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@ -86,6 +87,7 @@
<ItemGroup>
<ClInclude Include="..\..\tests\catch2.h" />
<ClInclude Include="..\..\tests\evil_macros.h" />
<ClInclude Include="..\..\tests\leakproof.h" />
<ClInclude Include="..\..\tests\settings.h" />
<ClInclude Include="..\..\tests\tests.h" />
<ClInclude Include="..\..\tests\tloptional.h" />

View File

@ -38,6 +38,7 @@
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>tests.h</PrecompiledHeaderFile>
<PreprocessorDefinitions>TOML_UNRELEASED_FEATURES=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>LEAK_TESTS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">_HAS_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">SHOULD_HAVE_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'!='false'">SHOULD_HAVE_EXCEPTIONS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@ -86,6 +87,7 @@
<ItemGroup>
<ClInclude Include="..\..\tests\catch2.h" />
<ClInclude Include="..\..\tests\evil_macros.h" />
<ClInclude Include="..\..\tests\leakproof.h" />
<ClInclude Include="..\..\tests\settings.h" />
<ClInclude Include="..\..\tests\tests.h" />
<ClInclude Include="..\..\tests\tloptional.h" />

View File

@ -38,6 +38,7 @@
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>tests.h</PrecompiledHeaderFile>
<PreprocessorDefinitions>TOML_UNRELEASED_FEATURES=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>LEAK_TESTS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">_HAS_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">SHOULD_HAVE_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'!='false'">SHOULD_HAVE_EXCEPTIONS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@ -86,6 +87,7 @@
<ItemGroup>
<ClInclude Include="..\..\tests\catch2.h" />
<ClInclude Include="..\..\tests\evil_macros.h" />
<ClInclude Include="..\..\tests\leakproof.h" />
<ClInclude Include="..\..\tests\settings.h" />
<ClInclude Include="..\..\tests\tests.h" />
<ClInclude Include="..\..\tests\tloptional.h" />

View File

@ -38,6 +38,7 @@
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>tests.h</PrecompiledHeaderFile>
<PreprocessorDefinitions>TOML_UNRELEASED_FEATURES=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>LEAK_TESTS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">_HAS_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'=='false'">SHOULD_HAVE_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'%(ExceptionHandling)'!='false'">SHOULD_HAVE_EXCEPTIONS=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@ -86,6 +87,7 @@
<ItemGroup>
<ClInclude Include="..\..\tests\catch2.h" />
<ClInclude Include="..\..\tests\evil_macros.h" />
<ClInclude Include="..\..\tests\leakproof.h" />
<ClInclude Include="..\..\tests\settings.h" />
<ClInclude Include="..\..\tests\tests.h" />
<ClInclude Include="..\..\tests\tloptional.h" />

View File

@ -71,8 +71,8 @@
<None Include="..\docs\Doxyfile" />
<None Include="..\docs\Doxyfile-mcss" />
<None Include="..\docs\main_page.dox" />
<None Include="..\docs\tomlplusplus.css" />
<None Include="..\docs\tomlplusplus.js" />
<None Include="..\docs\muu.css" />
<None Include="..\docs\muu.js" />
<None Include="..\LICENSE" />
<None Include="..\meson.build" />
<None Include="..\python\ci_single_header_check.py" />
@ -89,6 +89,7 @@
</ItemGroup>
<ItemGroup>
<Text Include="..\meson_options.txt" />
<Text Include="..\python\requirements.txt" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
</Project>

View File

@ -98,12 +98,6 @@
<None Include="..\docs\Doxyfile-mcss">
<Filter>docs</Filter>
</None>
<None Include="..\docs\tomlplusplus.css">
<Filter>docs</Filter>
</None>
<None Include="..\docs\tomlplusplus.js">
<Filter>docs</Filter>
</None>
<None Include="..\CONTRIBUTING.md" />
<None Include="..\meson.build" />
<None Include="toml++.props" />
@ -123,6 +117,12 @@
</None>
<None Include="..\CODE_OF_CONDUCT.md" />
<None Include="..\LICENSE" />
<None Include="..\docs\muu.css">
<Filter>docs</Filter>
</None>
<None Include="..\docs\muu.js">
<Filter>docs</Filter>
</None>
</ItemGroup>
<ItemGroup>
<Filter Include="include">
@ -140,5 +140,8 @@
</ItemGroup>
<ItemGroup>
<Text Include="..\meson_options.txt" />
<Text Include="..\python\requirements.txt">
<Filter>python</Filter>
</Text>
</ItemGroup>
</Project>