Browse Source

Update contrib/libs/double-conversion to 3.3.0

robot-contrib 1 year ago
parent
commit
8dfcb1a9f5

+ 6 - 6
contrib/libs/double-conversion/double-conversion/bignum.cc

@@ -147,7 +147,7 @@ void Bignum::AssignHexString(Vector<const char> value) {
   }
   }
   if (tmp > 0) {
   if (tmp > 0) {
     DOUBLE_CONVERSION_ASSERT(tmp <= kBigitMask);
     DOUBLE_CONVERSION_ASSERT(tmp <= kBigitMask);
-    RawBigit(used_bigits_++) = (tmp & kBigitMask);
+    RawBigit(used_bigits_++) = static_cast<Bignum::Chunk>(tmp & kBigitMask);
   }
   }
   Clamp();
   Clamp();
 }
 }
@@ -204,7 +204,7 @@ void Bignum::AddBignum(const Bignum& other) {
     carry = sum >> kBigitSize;
     carry = sum >> kBigitSize;
     ++bigit_pos;
     ++bigit_pos;
   }
   }
-  used_bigits_ = (std::max)(bigit_pos, static_cast<int>(used_bigits_));
+  used_bigits_ = static_cast<int16_t>(std::max(bigit_pos, static_cast<int>(used_bigits_)));
   DOUBLE_CONVERSION_ASSERT(IsClamped());
   DOUBLE_CONVERSION_ASSERT(IsClamped());
 }
 }
 
 
@@ -240,7 +240,7 @@ void Bignum::ShiftLeft(const int shift_amount) {
   if (used_bigits_ == 0) {
   if (used_bigits_ == 0) {
     return;
     return;
   }
   }
-  exponent_ += (shift_amount / kBigitSize);
+  exponent_ += static_cast<int16_t>(shift_amount / kBigitSize);
   const int local_shift = shift_amount % kBigitSize;
   const int local_shift = shift_amount % kBigitSize;
   EnsureCapacity(used_bigits_ + 1);
   EnsureCapacity(used_bigits_ + 1);
   BigitsShiftLeft(local_shift);
   BigitsShiftLeft(local_shift);
@@ -418,7 +418,7 @@ void Bignum::Square() {
   DOUBLE_CONVERSION_ASSERT(accumulator == 0);
   DOUBLE_CONVERSION_ASSERT(accumulator == 0);
 
 
   // Don't forget to update the used_digits and the exponent.
   // Don't forget to update the used_digits and the exponent.
-  used_bigits_ = product_length;
+  used_bigits_ = static_cast<int16_t>(product_length);
   exponent_ *= 2;
   exponent_ *= 2;
   Clamp();
   Clamp();
 }
 }
@@ -739,8 +739,8 @@ void Bignum::Align(const Bignum& other) {
     for (int i = 0; i < zero_bigits; ++i) {
     for (int i = 0; i < zero_bigits; ++i) {
       RawBigit(i) = 0;
       RawBigit(i) = 0;
     }
     }
-    used_bigits_ += zero_bigits;
-    exponent_ -= zero_bigits;
+    used_bigits_ += static_cast<int16_t>(zero_bigits);
+    exponent_ -= static_cast<int16_t>(zero_bigits);
 
 
     DOUBLE_CONVERSION_ASSERT(used_bigits_ >= 0);
     DOUBLE_CONVERSION_ASSERT(used_bigits_ >= 0);
     DOUBLE_CONVERSION_ASSERT(exponent_ >= 0);
     DOUBLE_CONVERSION_ASSERT(exponent_ >= 0);

+ 8 - 1
contrib/libs/double-conversion/double-conversion/double-to-string.cc

@@ -79,7 +79,14 @@ void DoubleToStringConverter::CreateExponentialRepresentation(
     StringBuilder* result_builder) const {
     StringBuilder* result_builder) const {
   DOUBLE_CONVERSION_ASSERT(length != 0);
   DOUBLE_CONVERSION_ASSERT(length != 0);
   result_builder->AddCharacter(decimal_digits[0]);
   result_builder->AddCharacter(decimal_digits[0]);
-  if (length != 1) {
+  if (length == 1) {
+    if ((flags_ & EMIT_TRAILING_DECIMAL_POINT_IN_EXPONENTIAL) != 0) {
+      result_builder->AddCharacter('.');
+      if ((flags_ & EMIT_TRAILING_ZERO_AFTER_POINT_IN_EXPONENTIAL) != 0) {
+          result_builder->AddCharacter('0');
+      }
+    }
+  } else {
     result_builder->AddCharacter('.');
     result_builder->AddCharacter('.');
     result_builder->AddSubstring(&decimal_digits[1], length-1);
     result_builder->AddSubstring(&decimal_digits[1], length-1);
   }
   }

+ 26 - 1
contrib/libs/double-conversion/double-conversion/double-to-string.h

@@ -78,7 +78,9 @@ class DoubleToStringConverter {
     EMIT_TRAILING_DECIMAL_POINT = 2,
     EMIT_TRAILING_DECIMAL_POINT = 2,
     EMIT_TRAILING_ZERO_AFTER_POINT = 4,
     EMIT_TRAILING_ZERO_AFTER_POINT = 4,
     UNIQUE_ZERO = 8,
     UNIQUE_ZERO = 8,
-    NO_TRAILING_ZERO = 16
+    NO_TRAILING_ZERO = 16,
+    EMIT_TRAILING_DECIMAL_POINT_IN_EXPONENTIAL = 32,
+    EMIT_TRAILING_ZERO_AFTER_POINT_IN_EXPONENTIAL = 64
   };
   };
 
 
   // Flags should be a bit-or combination of the possible Flags-enum.
   // Flags should be a bit-or combination of the possible Flags-enum.
@@ -97,6 +99,13 @@ class DoubleToStringConverter {
   //    of the result in precision mode. Matches printf's %g.
   //    of the result in precision mode. Matches printf's %g.
   //    When EMIT_TRAILING_ZERO_AFTER_POINT is also given, one trailing zero is
   //    When EMIT_TRAILING_ZERO_AFTER_POINT is also given, one trailing zero is
   //    preserved.
   //    preserved.
+  //  - EMIT_TRAILING_DECIMAL_POINT_IN_EXPONENTIAL: when the input number has
+  //    exactly one significant digit and is converted into exponent form then a
+  //    trailing decimal point is appended to the significand in shortest mode
+  //    or in precision mode with one requested digit.
+  //  - EMIT_TRAILING_ZERO_AFTER_POINT_IN_EXPONENTIAL: in addition to a trailing
+  //    decimal point emits a trailing '0'-character. This flag requires the
+  //    EMIT_TRAILING_DECIMAL_POINT_IN_EXPONENTIAL flag.
   //
   //
   // Infinity symbol and nan_symbol provide the string representation for these
   // Infinity symbol and nan_symbol provide the string representation for these
   // special values. If the string is NULL and the special value is encountered
   // special values. If the string is NULL and the special value is encountered
@@ -132,6 +141,22 @@ class DoubleToStringConverter {
   //   ToPrecision(230.0, 2) -> "230."  with EMIT_TRAILING_DECIMAL_POINT.
   //   ToPrecision(230.0, 2) -> "230."  with EMIT_TRAILING_DECIMAL_POINT.
   //   ToPrecision(230.0, 2) -> "2.3e2" with EMIT_TRAILING_ZERO_AFTER_POINT.
   //   ToPrecision(230.0, 2) -> "2.3e2" with EMIT_TRAILING_ZERO_AFTER_POINT.
   //
   //
+  // When converting numbers with exactly one significant digit to exponent
+  // form in shortest mode or in precision mode with one requested digit, the
+  // EMIT_TRAILING_DECIMAL_POINT and EMIT_TRAILING_ZERO_AFTER_POINT flags have
+  // no effect. Use the EMIT_TRAILING_DECIMAL_POINT_IN_EXPONENTIAL flag to
+  // append a decimal point in this case and the
+  // EMIT_TRAILING_ZERO_AFTER_POINT_IN_EXPONENTIAL flag to also append a
+  // '0'-character in this case.
+  // Example with decimal_in_shortest_low = 0:
+  //   ToShortest(0.0009) -> "9e-4"
+  //     with EMIT_TRAILING_DECIMAL_POINT_IN_EXPONENTIAL deactivated.
+  //   ToShortest(0.0009) -> "9.e-4"
+  //     with EMIT_TRAILING_DECIMAL_POINT_IN_EXPONENTIAL activated.
+  //   ToShortest(0.0009) -> "9.0e-4"
+  //     with EMIT_TRAILING_DECIMAL_POINT_IN_EXPONENTIAL activated and
+  //     EMIT_TRAILING_ZERO_AFTER_POINT_IN_EXPONENTIAL activated.
+  //
   // The min_exponent_width is used for exponential representations.
   // The min_exponent_width is used for exponential representations.
   // The converter adds leading '0's to the exponent until the exponent
   // The converter adds leading '0's to the exponent until the exponent
   // is at least min_exponent_width digits long.
   // is at least min_exponent_width digits long.

+ 3 - 3
contrib/libs/double-conversion/ya.make

@@ -1,4 +1,4 @@
-# Generated by devtools/yamaker from nixpkgs 22.05.
+# Generated by devtools/yamaker from nixpkgs 22.11.
 
 
 LIBRARY()
 LIBRARY()
 
 
@@ -6,9 +6,9 @@ LICENSE(BSD-3-Clause)
 
 
 LICENSE_TEXTS(.yandex_meta/licenses.list.txt)
 LICENSE_TEXTS(.yandex_meta/licenses.list.txt)
 
 
-VERSION(3.2.1)
+VERSION(3.3.0)
 
 
-ORIGINAL_SOURCE(https://github.com/google/double-conversion/archive/v3.2.1.tar.gz)
+ORIGINAL_SOURCE(https://github.com/google/double-conversion/archive/v3.3.0.tar.gz)
 
 
 ADDINCL(
 ADDINCL(
     GLOBAL contrib/libs/double-conversion
     GLOBAL contrib/libs/double-conversion