From cdecd1b162d565a96ad6f6ed3c6f2a756732ba9e Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Sat, 15 Apr 2017 11:46:42 +0200 Subject: [PATCH 1/4] Fix warning: enumeration value not handled in switch ./src/json.hpp:1968:21: warning: enumeration value 'discarded' not explicitly handled in switch [-Wswitch-enum] --- src/json.hpp | 21 +++++++++++---------- src/json.hpp.re2c | 21 +++++++++++---------- 2 files changed, 22 insertions(+), 20 deletions(-) diff --git a/src/json.hpp b/src/json.hpp index 3b8925a3f..45a29e516 100644 --- a/src/json.hpp +++ b/src/json.hpp @@ -1970,59 +1970,60 @@ class basic_json case value_t::object: { object = create(); - break; + return; } case value_t::array: { array = create(); - break; + return; } case value_t::string: { string = create(""); - break; + return; } case value_t::boolean: { boolean = boolean_t(false); - break; + return; } case value_t::number_integer: { number_integer = number_integer_t(0); - break; + return; } case value_t::number_unsigned: { number_unsigned = number_unsigned_t(0); - break; + return; } case value_t::number_float: { number_float = number_float_t(0.0); - break; + return; } case value_t::null: { - break; + return; } - default: + case value_t::discarded: { if (t == value_t::null) { JSON_THROW(other_error::create(500, "961c151d2e87f2686a955a9be24d316f1362bf21 2.1.1")); // LCOV_EXCL_LINE } - break; + return; } } + assert(false); } /// constructor for strings diff --git a/src/json.hpp.re2c b/src/json.hpp.re2c index eca19ccff..ebae0d152 100644 --- a/src/json.hpp.re2c +++ b/src/json.hpp.re2c @@ -1970,59 +1970,60 @@ class basic_json case value_t::object: { object = create(); - break; + return; } case value_t::array: { array = create(); - break; + return; } case value_t::string: { string = create(""); - break; + return; } case value_t::boolean: { boolean = boolean_t(false); - break; + return; } case value_t::number_integer: { number_integer = number_integer_t(0); - break; + return; } case value_t::number_unsigned: { number_unsigned = number_unsigned_t(0); - break; + return; } case value_t::number_float: { number_float = number_float_t(0.0); - break; + return; } case value_t::null: { - break; + return; } - default: + case value_t::discarded: { if (t == value_t::null) { JSON_THROW(other_error::create(500, "961c151d2e87f2686a955a9be24d316f1362bf21 2.1.1")); // LCOV_EXCL_LINE } - break; + return; } } + assert(false); } /// constructor for strings From 523cc215146923b6c4d86a2de0491cecb184d2ac Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Sat, 15 Apr 2017 13:13:36 +0200 Subject: [PATCH 2/4] Fix warning: enumeration value not handled in switch ./src/json.hpp:9339:21: warning: enumeration values 'number_integer', 'number_unsigned', and 'number_float' not explicitly handled in switch [-Wswitch-enum] --- src/json.hpp | 35 ++++++++++++++++++----------------- src/json.hpp.re2c | 35 ++++++++++++++++++----------------- 2 files changed, 36 insertions(+), 34 deletions(-) diff --git a/src/json.hpp b/src/json.hpp index 45a29e516..0ed49acce 100644 --- a/src/json.hpp +++ b/src/json.hpp @@ -9335,25 +9335,26 @@ class basic_json */ std::string type_name() const { + switch (m_type) { - switch (m_type) - { - case value_t::null: - return "null"; - case value_t::object: - return "object"; - case value_t::array: - return "array"; - case value_t::string: - return "string"; - case value_t::boolean: - return "boolean"; - case value_t::discarded: - return "discarded"; - default: - return "number"; - } + case value_t::null: + return "null"; + case value_t::object: + return "object"; + case value_t::array: + return "array"; + case value_t::string: + return "string"; + case value_t::boolean: + return "boolean"; + case value_t::discarded: + return "discarded"; + case value_t::number_unsigned: + case value_t::number_integer: + case value_t::number_float: + return "number"; } + assert(false); } diff --git a/src/json.hpp.re2c b/src/json.hpp.re2c index ebae0d152..fa970385e 100644 --- a/src/json.hpp.re2c +++ b/src/json.hpp.re2c @@ -9335,25 +9335,26 @@ class basic_json */ std::string type_name() const { + switch (m_type) { - switch (m_type) - { - case value_t::null: - return "null"; - case value_t::object: - return "object"; - case value_t::array: - return "array"; - case value_t::string: - return "string"; - case value_t::boolean: - return "boolean"; - case value_t::discarded: - return "discarded"; - default: - return "number"; - } + case value_t::null: + return "null"; + case value_t::object: + return "object"; + case value_t::array: + return "array"; + case value_t::string: + return "string"; + case value_t::boolean: + return "boolean"; + case value_t::discarded: + return "discarded"; + case value_t::number_unsigned: + case value_t::number_integer: + case value_t::number_float: + return "number"; } + assert(false); } From 14dcd918a815ab37b18b4c8a03d2159c8aaa74f3 Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Sat, 15 Apr 2017 13:18:41 +0200 Subject: [PATCH 3/4] Fix warning: enumeration value not handled in switch In this case the switch is useless since the other cases are already excluded by the initial asserts. Removing the switch altogether seems the best way forward. --- src/json.hpp | 42 ++++++++++++++++-------------------------- src/json.hpp.re2c | 42 ++++++++++++++++-------------------------- 2 files changed, 32 insertions(+), 52 deletions(-) diff --git a/src/json.hpp b/src/json.hpp index 0ed49acce..d06954be3 100644 --- a/src/json.hpp +++ b/src/json.hpp @@ -12093,37 +12093,27 @@ basic_json_parser_74: strtonum num_converter(reinterpret_cast(m_start), reinterpret_cast(m_cursor)); - switch (token) + if (token == lexer::token_type::value_unsigned) { - case lexer::token_type::value_unsigned: + number_unsigned_t val; + if (num_converter.to(val)) { - number_unsigned_t val; - if (num_converter.to(val)) - { - // parsing successful - result.m_type = value_t::number_unsigned; - result.m_value = val; - return true; - } - break; + // parsing successful + result.m_type = value_t::number_unsigned; + result.m_value = val; + return true; } + } - case lexer::token_type::value_integer: + if (token == lexer::token_type::value_integer) + { + number_integer_t val; + if (num_converter.to(val)) { - number_integer_t val; - if (num_converter.to(val)) - { - // parsing successful - result.m_type = value_t::number_integer; - result.m_value = val; - return true; - } - break; - } - - default: - { - break; + // parsing successful + result.m_type = value_t::number_integer; + result.m_value = val; + return true; } } diff --git a/src/json.hpp.re2c b/src/json.hpp.re2c index fa970385e..c2582290e 100644 --- a/src/json.hpp.re2c +++ b/src/json.hpp.re2c @@ -11126,37 +11126,27 @@ class basic_json strtonum num_converter(reinterpret_cast(m_start), reinterpret_cast(m_cursor)); - switch (token) + if (token == lexer::token_type::value_unsigned) { - case lexer::token_type::value_unsigned: + number_unsigned_t val; + if (num_converter.to(val)) { - number_unsigned_t val; - if (num_converter.to(val)) - { - // parsing successful - result.m_type = value_t::number_unsigned; - result.m_value = val; - return true; - } - break; + // parsing successful + result.m_type = value_t::number_unsigned; + result.m_value = val; + return true; } + } - case lexer::token_type::value_integer: + if (token == lexer::token_type::value_integer) + { + number_integer_t val; + if (num_converter.to(val)) { - number_integer_t val; - if (num_converter.to(val)) - { - // parsing successful - result.m_type = value_t::number_integer; - result.m_value = val; - return true; - } - break; - } - - default: - { - break; + // parsing successful + result.m_type = value_t::number_integer; + result.m_value = val; + return true; } } From 54c966979cdf1aa180e1adc33db9686306a3d832 Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Sat, 15 Apr 2017 13:26:25 +0200 Subject: [PATCH 4/4] Fix warning: enumeration value not handled in switch ./src/json.hpp:2821:17: warning: 6 enumeration values not explicitly handled in switch: 'null', 'boolean', 'number_integer'... [-Wswitch-enum] --- src/json.hpp | 16 +++++++++++----- src/json.hpp.re2c | 16 +++++++++++----- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/src/json.hpp b/src/json.hpp index d06954be3..69e18a2ab 100644 --- a/src/json.hpp +++ b/src/json.hpp @@ -2825,7 +2825,7 @@ class basic_json AllocatorType alloc; alloc.destroy(m_value.object); alloc.deallocate(m_value.object, 1); - break; + return; } case value_t::array: @@ -2833,7 +2833,7 @@ class basic_json AllocatorType alloc; alloc.destroy(m_value.array); alloc.deallocate(m_value.array, 1); - break; + return; } case value_t::string: @@ -2841,15 +2841,21 @@ class basic_json AllocatorType alloc; alloc.destroy(m_value.string); alloc.deallocate(m_value.string, 1); - break; + return; } - default: + case value_t::null: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::discarded: { // all other types need no specific destructor - break; + return; } } + assert(false); } /// @} diff --git a/src/json.hpp.re2c b/src/json.hpp.re2c index c2582290e..a067bf8e1 100644 --- a/src/json.hpp.re2c +++ b/src/json.hpp.re2c @@ -2825,7 +2825,7 @@ class basic_json AllocatorType alloc; alloc.destroy(m_value.object); alloc.deallocate(m_value.object, 1); - break; + return; } case value_t::array: @@ -2833,7 +2833,7 @@ class basic_json AllocatorType alloc; alloc.destroy(m_value.array); alloc.deallocate(m_value.array, 1); - break; + return; } case value_t::string: @@ -2841,15 +2841,21 @@ class basic_json AllocatorType alloc; alloc.destroy(m_value.string); alloc.deallocate(m_value.string, 1); - break; + return; } - default: + case value_t::null: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::discarded: { // all other types need no specific destructor - break; + return; } } + assert(false); } /// @}