mirror of
https://github.com/ToruNiina/toml11.git
synced 2025-09-17 17:58:09 +08:00
improve error message for conflicting tables
This commit is contained in:
@@ -1004,24 +1004,35 @@ insert_nested_key(table& root, const toml::value& v,
|
|||||||
{
|
{
|
||||||
if(tab->count(k) == 1) // there is already an array of table
|
if(tab->count(k) == 1) // there is already an array of table
|
||||||
{
|
{
|
||||||
if(!(tab->at(k).is(value_t::Array)))
|
if(tab->at(k).is(value_t::Table))
|
||||||
|
{
|
||||||
|
// show special err msg for conflicting table
|
||||||
|
throw syntax_error(format_underline(concat_to_string(
|
||||||
|
"[error] toml::insert_value: array of table (\"",
|
||||||
|
format_dotted_keys(first, last), "\") cannot insert"
|
||||||
|
"ed"), get_region(tab->at(k)), "table already defined",
|
||||||
|
get_region(v), "this conflicts with the previous table"));
|
||||||
|
}
|
||||||
|
else if(!(tab->at(k).is(value_t::Array)))
|
||||||
{
|
{
|
||||||
throw syntax_error(format_underline(concat_to_string(
|
throw syntax_error(format_underline(concat_to_string(
|
||||||
"[error] toml::insert_value: target value (\"",
|
"[error] toml::insert_value: array of table (\"",
|
||||||
format_dotted_keys(first, last), "\") is"
|
format_dotted_keys(first, last), "\") collides with"
|
||||||
" not an array of tables"), get_region(tab->at(k)),
|
" existing value"), get_region(tab->at(k)),
|
||||||
concat_to_string("actual type is ", tab->at(k).type()),
|
concat_to_string("this ", tab->at(k).type(), "value"
|
||||||
get_region(v), "this is an array of tables"));
|
"already exists"), get_region(v), "while inserting"
|
||||||
|
"this array-of-tables"));
|
||||||
}
|
}
|
||||||
array& a = tab->at(k).template cast<toml::value_t::Array>();
|
array& a = tab->at(k).template cast<toml::value_t::Array>();
|
||||||
if(!(a.front().is(value_t::Table)))
|
if(!(a.front().is(value_t::Table)))
|
||||||
{
|
{
|
||||||
throw syntax_error(format_underline(concat_to_string(
|
throw syntax_error(format_underline(concat_to_string(
|
||||||
"[error] toml::insert_value: target value (\"",
|
"[error] toml::insert_value: array of table (\"",
|
||||||
format_dotted_keys(first, last), "\") is"
|
format_dotted_keys(first, last), "\") collides with"
|
||||||
" not an array of tables"), get_region(tab->at(k)),
|
" existing value"), get_region(tab->at(k)),
|
||||||
concat_to_string("actual type is ", tab->at(k).type()),
|
concat_to_string("this ", tab->at(k).type(), "value"
|
||||||
get_region(v), "this is an array of tables"));
|
"already exists"), get_region(v), "while inserting"
|
||||||
|
"this array-of-tables"));
|
||||||
}
|
}
|
||||||
a.push_back(v);
|
a.push_back(v);
|
||||||
return ok(true);
|
return ok(true);
|
||||||
|
Reference in New Issue
Block a user