| Index: third_party/WebKit/Source/wtf/dtoa/double.h
 | 
| diff --git a/third_party/WebKit/Source/wtf/dtoa/double.h b/third_party/WebKit/Source/wtf/dtoa/double.h
 | 
| index 686c2e64c53b55a8cba3b5767589d0afc6f706f7..add5414c4d97b034ed4afd73734bf97020a52207 100644
 | 
| --- a/third_party/WebKit/Source/wtf/dtoa/double.h
 | 
| +++ b/third_party/WebKit/Source/wtf/dtoa/double.h
 | 
| @@ -1,249 +1,9 @@
 | 
| -// Copyright 2010 the V8 project authors. All rights reserved.
 | 
| -// Redistribution and use in source and binary forms, with or without
 | 
| -// modification, are permitted provided that the following conditions are
 | 
| -// met:
 | 
| -//
 | 
| -//     * Redistributions of source code must retain the above copyright
 | 
| -//       notice, this list of conditions and the following disclaimer.
 | 
| -//     * Redistributions in binary form must reproduce the above
 | 
| -//       copyright notice, this list of conditions and the following
 | 
| -//       disclaimer in the documentation and/or other materials provided
 | 
| -//       with the distribution.
 | 
| -//     * Neither the name of Google Inc. nor the names of its
 | 
| -//       contributors may be used to endorse or promote products derived
 | 
| -//       from this software without specific prior written permission.
 | 
| -//
 | 
| -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 | 
| -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 | 
| -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 | 
| -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 | 
| -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
| -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 | 
| -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 | 
| -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 | 
| -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
| -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
| -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
| +// Copyright 2017 The Chromium Authors. All rights reserved.
 | 
| +// Use of this source code is governed by a BSD-style license that can be
 | 
| +// found in the LICENSE file.
 | 
|  
 | 
| -#ifndef DOUBLE_CONVERSION_DOUBLE_H_
 | 
| -#define DOUBLE_CONVERSION_DOUBLE_H_
 | 
| +#include "platform/wtf/dtoa/double.h"
 | 
|  
 | 
| -#include "diy-fp.h"
 | 
| -
 | 
| -namespace WTF {
 | 
| -
 | 
| -namespace double_conversion {
 | 
| -
 | 
| -// We assume that doubles and uint64_t have the same endianness.
 | 
| -static uint64_t double_to_uint64(double d) {
 | 
| -  return BitCast<uint64_t>(d);
 | 
| -}
 | 
| -static double uint64_to_double(uint64_t d64) {
 | 
| -  return BitCast<double>(d64);
 | 
| -}
 | 
| -
 | 
| -// Helper functions for doubles.
 | 
| -class Double {
 | 
| - public:
 | 
| -  static const uint64_t kSignMask = UINT64_2PART_C(0x80000000, 00000000);
 | 
| -  static const uint64_t kExponentMask = UINT64_2PART_C(0x7FF00000, 00000000);
 | 
| -  static const uint64_t kSignificandMask = UINT64_2PART_C(0x000FFFFF, FFFFFFFF);
 | 
| -  static const uint64_t kHiddenBit = UINT64_2PART_C(0x00100000, 00000000);
 | 
| -  static const int kPhysicalSignificandSize = 52;  // Excludes the hidden bit.
 | 
| -  static const int kSignificandSize = 53;
 | 
| -
 | 
| -  Double() : d64_(0) {}
 | 
| -  explicit Double(double d) : d64_(double_to_uint64(d)) {}
 | 
| -  explicit Double(uint64_t d64) : d64_(d64) {}
 | 
| -  explicit Double(DiyFp diy_fp) : d64_(DiyFpToUint64(diy_fp)) {}
 | 
| -
 | 
| -  // The value encoded by this Double must be greater or equal to +0.0.
 | 
| -  // It must not be special (infinity, or NaN).
 | 
| -  DiyFp AsDiyFp() const {
 | 
| -    DCHECK_GT(Sign(), 0);
 | 
| -    DCHECK(!IsSpecial());
 | 
| -    return DiyFp(Significand(), Exponent());
 | 
| -  }
 | 
| -
 | 
| -  // The value encoded by this Double must be strictly greater than 0.
 | 
| -  DiyFp AsNormalizedDiyFp() const {
 | 
| -    DCHECK_GT(value(), 0.0);
 | 
| -    uint64_t f = Significand();
 | 
| -    int e = Exponent();
 | 
| -
 | 
| -    // The current double could be a denormal.
 | 
| -    while ((f & kHiddenBit) == 0) {
 | 
| -      f <<= 1;
 | 
| -      e--;
 | 
| -    }
 | 
| -    // Do the final shifts in one go.
 | 
| -    f <<= DiyFp::kSignificandSize - kSignificandSize;
 | 
| -    e -= DiyFp::kSignificandSize - kSignificandSize;
 | 
| -    return DiyFp(f, e);
 | 
| -  }
 | 
| -
 | 
| -  // Returns the double's bit as uint64.
 | 
| -  uint64_t AsUint64() const { return d64_; }
 | 
| -
 | 
| -  // Returns the next greater double. Returns +infinity on input +infinity.
 | 
| -  double NextDouble() const {
 | 
| -    if (d64_ == kInfinity)
 | 
| -      return Double(kInfinity).value();
 | 
| -    if (Sign() < 0 && Significand() == 0) {
 | 
| -      // -0.0
 | 
| -      return 0.0;
 | 
| -    }
 | 
| -    if (Sign() < 0) {
 | 
| -      return Double(d64_ - 1).value();
 | 
| -    } else {
 | 
| -      return Double(d64_ + 1).value();
 | 
| -    }
 | 
| -  }
 | 
| -
 | 
| -  int Exponent() const {
 | 
| -    if (IsDenormal())
 | 
| -      return kDenormalExponent;
 | 
| -
 | 
| -    uint64_t d64 = AsUint64();
 | 
| -    int biased_e =
 | 
| -        static_cast<int>((d64 & kExponentMask) >> kPhysicalSignificandSize);
 | 
| -    return biased_e - kExponentBias;
 | 
| -  }
 | 
| -
 | 
| -  uint64_t Significand() const {
 | 
| -    uint64_t d64 = AsUint64();
 | 
| -    uint64_t significand = d64 & kSignificandMask;
 | 
| -    if (!IsDenormal()) {
 | 
| -      return significand + kHiddenBit;
 | 
| -    } else {
 | 
| -      return significand;
 | 
| -    }
 | 
| -  }
 | 
| -
 | 
| -  // Returns true if the double is a denormal.
 | 
| -  bool IsDenormal() const {
 | 
| -    uint64_t d64 = AsUint64();
 | 
| -    return (d64 & kExponentMask) == 0;
 | 
| -  }
 | 
| -
 | 
| -  // We consider denormals not to be special.
 | 
| -  // Hence only Infinity and NaN are special.
 | 
| -  bool IsSpecial() const {
 | 
| -    uint64_t d64 = AsUint64();
 | 
| -    return (d64 & kExponentMask) == kExponentMask;
 | 
| -  }
 | 
| -
 | 
| -  bool IsNan() const {
 | 
| -    uint64_t d64 = AsUint64();
 | 
| -    return ((d64 & kExponentMask) == kExponentMask) &&
 | 
| -           ((d64 & kSignificandMask) != 0);
 | 
| -  }
 | 
| -
 | 
| -  bool IsInfinite() const {
 | 
| -    uint64_t d64 = AsUint64();
 | 
| -    return ((d64 & kExponentMask) == kExponentMask) &&
 | 
| -           ((d64 & kSignificandMask) == 0);
 | 
| -  }
 | 
| -
 | 
| -  int Sign() const {
 | 
| -    uint64_t d64 = AsUint64();
 | 
| -    return (d64 & kSignMask) == 0 ? 1 : -1;
 | 
| -  }
 | 
| -
 | 
| -  // Precondition: the value encoded by this Double must be greater or equal
 | 
| -  // than +0.0.
 | 
| -  DiyFp UpperBoundary() const {
 | 
| -    DCHECK_GT(Sign(), 0);
 | 
| -    return DiyFp(Significand() * 2 + 1, Exponent() - 1);
 | 
| -  }
 | 
| -
 | 
| -  // Computes the two boundaries of this.
 | 
| -  // The bigger boundary (m_plus) is normalized. The lower boundary has the same
 | 
| -  // exponent as m_plus.
 | 
| -  // Precondition: the value encoded by this Double must be greater than 0.
 | 
| -  void NormalizedBoundaries(DiyFp* out_m_minus, DiyFp* out_m_plus) const {
 | 
| -    DCHECK_GT(value(), 0.0);
 | 
| -    DiyFp v = this->AsDiyFp();
 | 
| -    bool significand_is_zero = (v.f() == kHiddenBit);
 | 
| -    DiyFp m_plus = DiyFp::Normalize(DiyFp((v.f() << 1) + 1, v.e() - 1));
 | 
| -    DiyFp m_minus;
 | 
| -    if (significand_is_zero && v.e() != kDenormalExponent) {
 | 
| -      // The boundary is closer. Think of v = 1000e10 and v- = 9999e9.
 | 
| -      // Then the boundary (== (v - v-)/2) is not just at a distance of 1e9 but
 | 
| -      // at a distance of 1e8.
 | 
| -      // The only exception is for the smallest normal: the largest denormal is
 | 
| -      // at the same distance as its successor.
 | 
| -      // Note: denormals have the same exponent as the smallest normals.
 | 
| -      m_minus = DiyFp((v.f() << 2) - 1, v.e() - 2);
 | 
| -    } else {
 | 
| -      m_minus = DiyFp((v.f() << 1) - 1, v.e() - 1);
 | 
| -    }
 | 
| -    m_minus.set_f(m_minus.f() << (m_minus.e() - m_plus.e()));
 | 
| -    m_minus.set_e(m_plus.e());
 | 
| -    *out_m_plus = m_plus;
 | 
| -    *out_m_minus = m_minus;
 | 
| -  }
 | 
| -
 | 
| -  double value() const { return uint64_to_double(d64_); }
 | 
| -
 | 
| -  // Returns the significand size for a given order of magnitude.
 | 
| -  // If v = f*2^e with 2^p-1 <= f <= 2^p then p+e is v's order of magnitude.
 | 
| -  // This function returns the number of significant binary digits v will have
 | 
| -  // once it's encoded into a double. In almost all cases this is equal to
 | 
| -  // kSignificandSize. The only exceptions are denormals. They start with
 | 
| -  // leading zeroes and their effective significand-size is hence smaller.
 | 
| -  static int SignificandSizeForOrderOfMagnitude(int order) {
 | 
| -    if (order >= (kDenormalExponent + kSignificandSize)) {
 | 
| -      return kSignificandSize;
 | 
| -    }
 | 
| -    if (order <= kDenormalExponent)
 | 
| -      return 0;
 | 
| -    return order - kDenormalExponent;
 | 
| -  }
 | 
| -
 | 
| -  static double Infinity() { return Double(kInfinity).value(); }
 | 
| -
 | 
| -  static double NaN() { return Double(kNaN).value(); }
 | 
| -
 | 
| - private:
 | 
| -  static const int kExponentBias = 0x3FF + kPhysicalSignificandSize;
 | 
| -  static const int kDenormalExponent = -kExponentBias + 1;
 | 
| -  static const int kMaxExponent = 0x7FF - kExponentBias;
 | 
| -  static const uint64_t kInfinity = UINT64_2PART_C(0x7FF00000, 00000000);
 | 
| -  static const uint64_t kNaN = UINT64_2PART_C(0x7FF80000, 00000000);
 | 
| -
 | 
| -  const uint64_t d64_;
 | 
| -
 | 
| -  static uint64_t DiyFpToUint64(DiyFp diy_fp) {
 | 
| -    uint64_t significand = diy_fp.f();
 | 
| -    int exponent = diy_fp.e();
 | 
| -    while (significand > kHiddenBit + kSignificandMask) {
 | 
| -      significand >>= 1;
 | 
| -      exponent++;
 | 
| -    }
 | 
| -    if (exponent >= kMaxExponent) {
 | 
| -      return kInfinity;
 | 
| -    }
 | 
| -    if (exponent < kDenormalExponent) {
 | 
| -      return 0;
 | 
| -    }
 | 
| -    while (exponent > kDenormalExponent && (significand & kHiddenBit) == 0) {
 | 
| -      significand <<= 1;
 | 
| -      exponent--;
 | 
| -    }
 | 
| -    uint64_t biased_exponent;
 | 
| -    if (exponent == kDenormalExponent && (significand & kHiddenBit) == 0) {
 | 
| -      biased_exponent = 0;
 | 
| -    } else {
 | 
| -      biased_exponent = static_cast<uint64_t>(exponent + kExponentBias);
 | 
| -    }
 | 
| -    return (significand & kSignificandMask) |
 | 
| -           (biased_exponent << kPhysicalSignificandSize);
 | 
| -  }
 | 
| -};
 | 
| -
 | 
| -}  // namespace double_conversion
 | 
| -
 | 
| -}  // namespace WTF
 | 
| -
 | 
| -#endif  // DOUBLE_CONVERSION_DOUBLE_H_
 | 
| +// The contents of this header was moved to platform/wtf as part of
 | 
| +// WTF migration project. See the following post for details:
 | 
| +// https://groups.google.com/a/chromium.org/d/msg/blink-dev/tLdAZCTlcAA/bYXVT8gYCAAJ
 | 
| 
 |