[libc-commits] [PATCH] D130405: Implement TZ Variable Parsing Function.
Jeff Bailey via Phabricator via libc-commits
libc-commits at lists.llvm.org
Tue Jul 26 10:59:52 PDT 2022
jeffbailey added a comment.
Took a quick review while I had a break this morning.
================
Comment at: libc/src/time/time_zone_posix.cpp:18
+cpp::Optional<int> PosixTimeZone::ParseInt(int min, int max) {
+ if (m_spec.size() == 0)
+ return cpp::Nullopt;
----------------
(Here and below)
================
Comment at: libc/src/time/time_zone_posix.cpp:68
+cpp::Optional<int32_t> PosixTimeZone::ParseOffset(int min_hour, int max_hour,
+ int sign) {
+ if (m_spec.size() == 0)
----------------
I keep wondering if this should be bool instead of int. I think it's always plus one or negative one, never zero or another value.
================
Comment at: libc/src/time/time_zone_posix.cpp:85
+ cpp::Optional<int> result = ParseInt(min_hour, max_hour);
+ if (!result.has_value())
+ return cpp::Nullopt;
----------------
The various `.has_value()` are redundant as optional supports `operator bool` for these. (Here and below)
================
Comment at: libc/src/time/time_zone_posix.cpp:120
+ // Parse month.
+ cpp::Optional<int> result = ParseInt(1, 12);
+ if (!result.has_value())
----------------
Could ParseInt be a template and return int8_t, unit16_t, etc? That way the static_casts below wouldn't be needed.
================
Comment at: libc/src/time/time_zone_posix.cpp:237
+bool PosixTimeZone::UpdateStdOffset() {
+ const cpp::Optional<int32_t> offset = ParseOffset(0, 24, -1);
+ if (!offset.has_value())
----------------
We should have a comment saying why this is negative here. Especially since if what it parses after this has a negative, it will invert this to a positive.
(Also in UpdateDstOffset)
================
Comment at: libc/test/src/time/TZHelper.h:20
+static inline __llvm_libc::time_zone_posix::PosixTimeZone
+initialize_posix_time_zone_data(
+ __llvm_libc::cpp::StringView spec, __llvm_libc::cpp::StringView std_abbr,
----------------
Instead of this could the callers just use a designated initializer directly?
```PosixTimeZone res{
.m_std_abbr = std_abbr,
.m_std_offset = std_offset,
(etc...)
```
That way this function and the others here wouldn't be needed and it would be clearer when reading it that the arguments aren't accidentally in the wrong order.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D130405/new/
https://reviews.llvm.org/D130405
More information about the libc-commits
mailing list