On Tue, Nov 13, 2018 at 11:46 AM Davide Italiano via lldb-commits < lldb-commits@lists.llvm.org> wrote:
> Author: davide > Date: Tue Nov 13 11:43:43 2018 > New Revision: 346783 > > URL: http://llvm.org/viewvc/llvm-project?rev=346783&view=rev > Log: > [Cocoa] Implement formatter for the new NSDate representation. > > <rdar://problem/46002786> > > Modified: > lldb/trunk/source/Plugins/Language/ObjC/Cocoa.cpp > > Modified: lldb/trunk/source/Plugins/Language/ObjC/Cocoa.cpp > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Language/ObjC/Cocoa.cpp?rev=346783&r1=346782&r2=346783&view=diff > > ============================================================================== > --- lldb/trunk/source/Plugins/Language/ObjC/Cocoa.cpp (original) > +++ lldb/trunk/source/Plugins/Language/ObjC/Cocoa.cpp Tue Nov 13 11:43:43 > 2018 > @@ -742,6 +742,60 @@ bool lldb_private::formatters::NSURLSumm > return false; > } > > +/// Bias value for tagged pointer exponents. > +/// Recommended values: > +/// 0x3e3: encodes all dates between distantPast and distantFuture > +/// except for the range within about 1e-28 second of the reference > date. > +/// 0x3ef: encodes all dates for a few million years beyond distantPast > and > +/// distantFuture, except within about 1e-25 second of the reference > date. > +const int TAGGED_DATE_EXPONENT_BIAS = 0x3ef; > + > +typedef union { > + struct { > + uint64_t fraction:52; // unsigned > + uint64_t exponent:11; // signed > + uint64_t sign:1; > + }; > + uint64_t i; > + double d; > +} DoubleBits; > +typedef union { > + struct { > + uint64_t fraction:52; // unsigned > + uint64_t exponent:7; // signed > + uint64_t sign:1; > + uint64_t unused:4; // placeholder for pointer tag bits > + }; > MSVC gives: warning C4201: nonstandard extension used: nameless struct/union > + uint64_t i; > +} TaggedDoubleBits; > + > +static uint64_t decodeExponent(uint64_t exp) { > + int64_t exp7 = exp; > + // Tagged exponent field is 7-bit signed. Sign-extend the value to 64 > bits > + // before performing arithmetic. > + int64_t exp11 = ((exp7 << 57) >> 57) + TAGGED_DATE_EXPONENT_BIAS; > + return exp11; > +} > this should probably be: return llvm::SignExtend64<7>(exp) + TAGGED_DATE_EXPONENT_BIAS; > + > +static uint64_t decodeTaggedTimeInterval(uint64_t encodedTimeInterval) { > + if (encodedTimeInterval == 0) > + return 0.0; > + if (encodedTimeInterval == std::numeric_limits<uint64_t>::max()) > + return -0.0; > + > + TaggedDoubleBits encodedBits = { .i = encodedTimeInterval }; > Designated initializers are C++20 which are not allowed in LLVM.
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits