[libcxx-commits] [libcxx] 41481b7 - [libcxx][NFC] tidy up money_get::__do_get's sign parsing
Daniel McIntosh via libcxx-commits
libcxx-commits at lists.llvm.org
Thu Nov 4 14:55:31 PDT 2021
Author: Daniel McIntosh
Date: 2021-11-04T17:55:28-04:00
New Revision: 41481b7db5c7b535060b3d36685eb5bb87d1c7d6
URL: https://github.com/llvm/llvm-project/commit/41481b7db5c7b535060b3d36685eb5bb87d1c7d6
DIFF: https://github.com/llvm/llvm-project/commit/41481b7db5c7b535060b3d36685eb5bb87d1c7d6.diff
LOG: [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
Added:
Modified:
libcxx/include/locale
Removed:
################################################################################
diff --git a/libcxx/include/locale b/libcxx/include/locale
index 7f5063a07650..2d37521de9a8 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:
{
More information about the libcxx-commits
mailing list