[Lldb-commits] [PATCH] D83217: [lldb][formatters] Add support for printing NSConstantDate and fix distantPast value
Raphael Isemann via Phabricator via lldb-commits
lldb-commits at lists.llvm.org
Wed Jul 15 01:28:44 PDT 2020
This revision was automatically updated to reflect the committed changes.
Closed by commit rG001c78de35cc: [lldb][formatters] Add support for printing NSConstantDate and fix distantPast… (authored by teemperor).
Herald added a project: LLDB.
Herald added a subscriber: lldb-commits.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D83217/new/
https://reviews.llvm.org/D83217
Files:
lldb/source/Plugins/Language/ObjC/Cocoa.cpp
lldb/test/API/functionalities/data-formatter/data-formatter-objc/TestDataFormatterObjCNSDate.py
lldb/test/API/functionalities/data-formatter/data-formatter-objc/main.m
Index: lldb/test/API/functionalities/data-formatter/data-formatter-objc/main.m
===================================================================
--- lldb/test/API/functionalities/data-formatter/data-formatter-objc/main.m
+++ lldb/test/API/functionalities/data-formatter/data-formatter-objc/main.m
@@ -663,6 +663,9 @@
NSDate *date_1970_plus_05 = [NSDate dateWithTimeIntervalSince1970:0.5];
NSDate *date_1970_plus_04 = [NSDate dateWithTimeIntervalSince1970:0.4];
+ NSDate *distant_past = [NSDate distantPast];
+ NSDate *distant_future = [NSDate distantFuture];
+
CFAbsoluteTime date1_abs = CFDateGetAbsoluteTime(date1);
CFAbsoluteTime date2_abs = CFDateGetAbsoluteTime(date2);
CFAbsoluteTime date3_abs = CFDateGetAbsoluteTime(date3);
Index: lldb/test/API/functionalities/data-formatter/data-formatter-objc/TestDataFormatterObjCNSDate.py
===================================================================
--- lldb/test/API/functionalities/data-formatter/data-formatter-objc/TestDataFormatterObjCNSDate.py
+++ lldb/test/API/functionalities/data-formatter/data-formatter-objc/TestDataFormatterObjCNSDate.py
@@ -67,3 +67,6 @@
substrs=[
'(CFMutableBitVectorRef) mut_bv = ',
'1110 0110 1011 0000 1101 1010 1000 1111 0011 0101 1101 0001 00'])
+
+ self.expect_expr("distant_past", result_summary="0001-01-01 00:00:00 UTC")
+ self.expect_expr("distant_future", result_summary="4001-01-01 00:00:00 UTC")
Index: lldb/source/Plugins/Language/ObjC/Cocoa.cpp
===================================================================
--- lldb/source/Plugins/Language/ObjC/Cocoa.cpp
+++ lldb/source/Plugins/Language/ObjC/Cocoa.cpp
@@ -818,13 +818,14 @@
static const ConstString g___NSDate("__NSDate");
static const ConstString g___NSTaggedDate("__NSTaggedDate");
static const ConstString g_NSCalendarDate("NSCalendarDate");
+ static const ConstString g_NSConstantDate("NSConstantDate");
if (class_name.IsEmpty())
return false;
uint64_t info_bits = 0, value_bits = 0;
if ((class_name == g_NSDate) || (class_name == g___NSDate) ||
- (class_name == g___NSTaggedDate)) {
+ (class_name == g___NSTaggedDate) || (class_name == g_NSConstantDate)) {
if (descriptor->GetTaggedPointerInfo(&info_bits, &value_bits)) {
date_value_bits = ((value_bits << 8) | (info_bits << 4));
memcpy(&date_value, &date_value_bits, sizeof(date_value_bits));
@@ -850,8 +851,14 @@
} else
return false;
- if (date_value == -63114076800) {
- stream.Printf("0001-12-30 00:00:00 +0000");
+ // FIXME: It seems old dates are not formatted according to NSDate's calendar
+ // so we hardcode distantPast's value so that it looks like LLDB is doing
+ // the right thing.
+
+ // The relative time in seconds from Cocoa Epoch to [NSDate distantPast].
+ const double RelSecondsFromCocoaEpochToNSDateDistantPast = -63114076800;
+ if (date_value == RelSecondsFromCocoaEpochToNSDateDistantPast) {
+ stream.Printf("0001-01-01 00:00:00 UTC");
return true;
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D83217.278102.patch
Type: text/x-patch
Size: 3058 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20200715/21391153/attachment-0001.bin>
More information about the lldb-commits
mailing list