From 41481b7db5c7b535060b3d36685eb5bb87d1c7d6 Mon Sep 17 00:00:00 2001 From: Daniel McIntosh Date: Fri, 16 Jul 2021 13:39:31 -0400 Subject: [PATCH] [libcxx][NFC] tidy up money_get::__do_get's sign parsing Same logic, but much easier to read this way Reviewed By: ldionne, #libc, Mordante Differential Revision: https://reviews.llvm.org/D112958 --- libcxx/include/locale | 66 ++++++++++++++++++--------------------------------- 1 file changed, 23 insertions(+), 43 deletions(-) diff --git a/libcxx/include/locale b/libcxx/include/locale index 7f5063a..2d37521 100644 --- a/libcxx/include/locale +++ b/libcxx/include/locale @@ -2892,51 +2892,31 @@ money_get<_CharT, _InputIterator>::__do_get(iter_type& __b, iter_type __e, } break; case money_base::sign: - if (__psn.size() + __nsn.size() > 0) + if (__psn.size() > 0 && *__b == __psn[0]) { - if (__psn.size() == 0 || __nsn.size() == 0) - { // sign is optional - if (__psn.size() > 0) - { // __nsn.size() == 0 - if (*__b == __psn[0]) - { - ++__b; - if (__psn.size() > 1) - __trailing_sign = &__psn; - } - else - __neg = true; - } - else if (*__b == __nsn[0]) // __nsn.size() > 0 && __psn.size() == 0 - { - ++__b; - __neg = true; - if (__nsn.size() > 1) - __trailing_sign = &__nsn; - } - } - else // sign is required - { - if (*__b == __psn[0]) - { - ++__b; - if (__psn.size() > 1) - __trailing_sign = &__psn; - } - else if (*__b == __nsn[0]) - { - ++__b; - __neg = true; - if (__nsn.size() > 1) - __trailing_sign = &__nsn; - } - else - { - __err |= ios_base::failbit; - return false; - } - } + ++__b; + __neg = false; + if (__psn.size() > 1) + __trailing_sign = &__psn; + break; + } + if (__nsn.size() > 0 && *__b == __nsn[0]) + { + ++__b; + __neg = true; + if (__nsn.size() > 1) + __trailing_sign = &__nsn; + break; + } + if (__psn.size() > 0 && __nsn.size() > 0) + { // sign is required + __err |= ios_base::failbit; + return false; } + if (__psn.size() == 0 && __nsn.size() == 0) + // locale has no way of specifying a sign. Use the initial value of __neg as a default + break; + __neg = (__nsn.size() == 0); break; case money_base::symbol: { -- 2.7.4