mirror of
https://github.com/nlohmann/json.git
synced 2026-04-28 10:49:25 +00:00
move the catch of std::invalid_argument into array_index()
This commit is contained in:
@@ -344,7 +344,15 @@ class json_pointer
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::size_t processed_chars = 0;
|
std::size_t processed_chars = 0;
|
||||||
const int res = std::stoi(s, &processed_chars);
|
int res = 0;
|
||||||
|
JSON_TRY
|
||||||
|
{
|
||||||
|
res = std::stoi(s, &processed_chars);
|
||||||
|
}
|
||||||
|
JSON_CATCH(std::invalid_argument&)
|
||||||
|
{
|
||||||
|
JSON_THROW(detail::parse_error::create(109, 0, "array index '" + s + "' is not a number"));
|
||||||
|
}
|
||||||
|
|
||||||
// check if the string was completely read
|
// check if the string was completely read
|
||||||
if (JSON_HEDLEY_UNLIKELY(processed_chars != s.size()))
|
if (JSON_HEDLEY_UNLIKELY(processed_chars != s.size()))
|
||||||
@@ -411,14 +419,7 @@ class json_pointer
|
|||||||
case detail::value_t::array:
|
case detail::value_t::array:
|
||||||
{
|
{
|
||||||
// create an entry in the array
|
// create an entry in the array
|
||||||
JSON_TRY
|
|
||||||
{
|
|
||||||
result = &result->operator[](static_cast<size_type>(array_index(reference_token)));
|
result = &result->operator[](static_cast<size_type>(array_index(reference_token)));
|
||||||
}
|
|
||||||
JSON_CATCH(std::invalid_argument&)
|
|
||||||
{
|
|
||||||
JSON_THROW(detail::parse_error::create(109, 0, "array index '" + reference_token + "' is not a number"));
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -496,16 +497,9 @@ class json_pointer
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
// convert array index to number; unchecked access
|
// convert array index to number; unchecked access
|
||||||
JSON_TRY
|
|
||||||
{
|
|
||||||
ptr = &ptr->operator[](
|
ptr = &ptr->operator[](
|
||||||
static_cast<size_type>(array_index(reference_token)));
|
static_cast<size_type>(array_index(reference_token)));
|
||||||
}
|
}
|
||||||
JSON_CATCH(std::invalid_argument&)
|
|
||||||
{
|
|
||||||
JSON_THROW(detail::parse_error::create(109, 0, "array index '" + reference_token + "' is not a number"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -548,14 +542,7 @@ class json_pointer
|
|||||||
}
|
}
|
||||||
|
|
||||||
// note: at performs range check
|
// note: at performs range check
|
||||||
JSON_TRY
|
|
||||||
{
|
|
||||||
ptr = &ptr->at(static_cast<size_type>(array_index(reference_token)));
|
ptr = &ptr->at(static_cast<size_type>(array_index(reference_token)));
|
||||||
}
|
|
||||||
JSON_CATCH(std::invalid_argument&)
|
|
||||||
{
|
|
||||||
JSON_THROW(detail::parse_error::create(109, 0, "array index '" + reference_token + "' is not a number"));
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -605,15 +592,8 @@ class json_pointer
|
|||||||
}
|
}
|
||||||
|
|
||||||
// use unchecked array access
|
// use unchecked array access
|
||||||
JSON_TRY
|
|
||||||
{
|
|
||||||
ptr = &ptr->operator[](
|
ptr = &ptr->operator[](
|
||||||
static_cast<size_type>(array_index(reference_token)));
|
static_cast<size_type>(array_index(reference_token)));
|
||||||
}
|
|
||||||
JSON_CATCH(std::invalid_argument&)
|
|
||||||
{
|
|
||||||
JSON_THROW(detail::parse_error::create(109, 0, "array index '" + reference_token + "' is not a number"));
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -656,14 +636,7 @@ class json_pointer
|
|||||||
}
|
}
|
||||||
|
|
||||||
// note: at performs range check
|
// note: at performs range check
|
||||||
JSON_TRY
|
|
||||||
{
|
|
||||||
ptr = &ptr->at(static_cast<size_type>(array_index(reference_token)));
|
ptr = &ptr->at(static_cast<size_type>(array_index(reference_token)));
|
||||||
}
|
|
||||||
JSON_CATCH(std::invalid_argument&)
|
|
||||||
{
|
|
||||||
JSON_THROW(detail::parse_error::create(109, 0, "array index '" + reference_token + "' is not a number"));
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -706,8 +679,6 @@ class json_pointer
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
JSON_TRY
|
|
||||||
{
|
|
||||||
const auto idx = static_cast<size_type>(array_index(reference_token));
|
const auto idx = static_cast<size_type>(array_index(reference_token));
|
||||||
if (idx >= ptr->size())
|
if (idx >= ptr->size())
|
||||||
{
|
{
|
||||||
@@ -718,12 +689,6 @@ class json_pointer
|
|||||||
ptr = &ptr->operator[](idx);
|
ptr = &ptr->operator[](idx);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
JSON_CATCH(std::invalid_argument&)
|
|
||||||
{
|
|
||||||
JSON_THROW(detail::parse_error::create(109, 0, "array index '" + reference_token + "' is not a number"));
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -10418,7 +10418,15 @@ class json_pointer
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::size_t processed_chars = 0;
|
std::size_t processed_chars = 0;
|
||||||
const int res = std::stoi(s, &processed_chars);
|
int res = 0;
|
||||||
|
JSON_TRY
|
||||||
|
{
|
||||||
|
res = std::stoi(s, &processed_chars);
|
||||||
|
}
|
||||||
|
JSON_CATCH(std::invalid_argument&)
|
||||||
|
{
|
||||||
|
JSON_THROW(detail::parse_error::create(109, 0, "array index '" + s + "' is not a number"));
|
||||||
|
}
|
||||||
|
|
||||||
// check if the string was completely read
|
// check if the string was completely read
|
||||||
if (JSON_HEDLEY_UNLIKELY(processed_chars != s.size()))
|
if (JSON_HEDLEY_UNLIKELY(processed_chars != s.size()))
|
||||||
@@ -10485,14 +10493,7 @@ class json_pointer
|
|||||||
case detail::value_t::array:
|
case detail::value_t::array:
|
||||||
{
|
{
|
||||||
// create an entry in the array
|
// create an entry in the array
|
||||||
JSON_TRY
|
|
||||||
{
|
|
||||||
result = &result->operator[](static_cast<size_type>(array_index(reference_token)));
|
result = &result->operator[](static_cast<size_type>(array_index(reference_token)));
|
||||||
}
|
|
||||||
JSON_CATCH(std::invalid_argument&)
|
|
||||||
{
|
|
||||||
JSON_THROW(detail::parse_error::create(109, 0, "array index '" + reference_token + "' is not a number"));
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -10570,16 +10571,9 @@ class json_pointer
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
// convert array index to number; unchecked access
|
// convert array index to number; unchecked access
|
||||||
JSON_TRY
|
|
||||||
{
|
|
||||||
ptr = &ptr->operator[](
|
ptr = &ptr->operator[](
|
||||||
static_cast<size_type>(array_index(reference_token)));
|
static_cast<size_type>(array_index(reference_token)));
|
||||||
}
|
}
|
||||||
JSON_CATCH(std::invalid_argument&)
|
|
||||||
{
|
|
||||||
JSON_THROW(detail::parse_error::create(109, 0, "array index '" + reference_token + "' is not a number"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -10622,14 +10616,7 @@ class json_pointer
|
|||||||
}
|
}
|
||||||
|
|
||||||
// note: at performs range check
|
// note: at performs range check
|
||||||
JSON_TRY
|
|
||||||
{
|
|
||||||
ptr = &ptr->at(static_cast<size_type>(array_index(reference_token)));
|
ptr = &ptr->at(static_cast<size_type>(array_index(reference_token)));
|
||||||
}
|
|
||||||
JSON_CATCH(std::invalid_argument&)
|
|
||||||
{
|
|
||||||
JSON_THROW(detail::parse_error::create(109, 0, "array index '" + reference_token + "' is not a number"));
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -10679,15 +10666,8 @@ class json_pointer
|
|||||||
}
|
}
|
||||||
|
|
||||||
// use unchecked array access
|
// use unchecked array access
|
||||||
JSON_TRY
|
|
||||||
{
|
|
||||||
ptr = &ptr->operator[](
|
ptr = &ptr->operator[](
|
||||||
static_cast<size_type>(array_index(reference_token)));
|
static_cast<size_type>(array_index(reference_token)));
|
||||||
}
|
|
||||||
JSON_CATCH(std::invalid_argument&)
|
|
||||||
{
|
|
||||||
JSON_THROW(detail::parse_error::create(109, 0, "array index '" + reference_token + "' is not a number"));
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -10730,14 +10710,7 @@ class json_pointer
|
|||||||
}
|
}
|
||||||
|
|
||||||
// note: at performs range check
|
// note: at performs range check
|
||||||
JSON_TRY
|
|
||||||
{
|
|
||||||
ptr = &ptr->at(static_cast<size_type>(array_index(reference_token)));
|
ptr = &ptr->at(static_cast<size_type>(array_index(reference_token)));
|
||||||
}
|
|
||||||
JSON_CATCH(std::invalid_argument&)
|
|
||||||
{
|
|
||||||
JSON_THROW(detail::parse_error::create(109, 0, "array index '" + reference_token + "' is not a number"));
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -10780,8 +10753,6 @@ class json_pointer
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
JSON_TRY
|
|
||||||
{
|
|
||||||
const auto idx = static_cast<size_type>(array_index(reference_token));
|
const auto idx = static_cast<size_type>(array_index(reference_token));
|
||||||
if (idx >= ptr->size())
|
if (idx >= ptr->size())
|
||||||
{
|
{
|
||||||
@@ -10792,12 +10763,6 @@ class json_pointer
|
|||||||
ptr = &ptr->operator[](idx);
|
ptr = &ptr->operator[](idx);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
JSON_CATCH(std::invalid_argument&)
|
|
||||||
{
|
|
||||||
JSON_THROW(detail::parse_error::create(109, 0, "array index '" + reference_token + "' is not a number"));
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user