| From f056d5f4cc818a6b9da93e93b5d47cdd7cfb5ca5 Mon Sep 17 00:00:00 2001 |
| From: Piotr Bialecki <bialpio@chromium.org> |
| Date: Tue, 10 Oct 2023 11:26:05 -0700 |
| Subject: [PATCH] SentencePiece: introduce no-exceptions mode |
| |
| --- |
| third_party/sentencepiece/src/src/util.cc | 4 +++ |
| .../src/third_party/darts_clone/darts.h | 35 +++++++++---------- |
| 2 files changed, 20 insertions(+), 19 deletions(-) |
| |
| diff --git a/third_party/sentencepiece/src/src/util.cc b/third_party/sentencepiece/src/src/util.cc |
| index 322406cbc2782..c5e5289807a0c 100644 |
| --- a/third_party/sentencepiece/src/src/util.cc |
| +++ b/third_party/sentencepiece/src/src/util.cc |
| @@ -32,11 +32,15 @@ void SetRandomGeneratorSeed(unsigned int seed) { |
| } |
| |
| uint32 GetRandomGeneratorSeed() { |
| +#if !SENTENCEPIECE_DISABLE_EXCEPTIONS |
| try { |
| +#endif |
| return g_seed == kDefaultSeed ? std::random_device{}() : g_seed.load(); |
| +#if !SENTENCEPIECE_DISABLE_EXCEPTIONS |
| } catch (...) { |
| return g_seed.load(); |
| } |
| +#endif |
| } |
| |
| namespace logging { |
| diff --git a/third_party/sentencepiece/src/third_party/darts_clone/darts.h b/third_party/sentencepiece/src/third_party/darts_clone/darts.h |
| index f9b32b1ec615b..9b975545aece1 100644 |
| --- a/third_party/sentencepiece/src/third_party/darts_clone/darts.h |
| +++ b/third_party/sentencepiece/src/third_party/darts_clone/darts.h |
| @@ -5,6 +5,10 @@ |
| #include <exception> |
| #include <new> |
| |
| +#if DARTS_DISABLE_EXCEPTIONS |
| +#include "absl/log/absl_check.h" |
| +#endif |
| + |
| #define DARTS_VERSION "0.32" |
| |
| // DARTS_THROW() throws a <Darts::Exception> whose message starts with the |
| @@ -15,9 +19,14 @@ |
| #define DARTS_INT_TO_STR(value) #value |
| #define DARTS_LINE_TO_STR(line) DARTS_INT_TO_STR(line) |
| #define DARTS_LINE_STR DARTS_LINE_TO_STR(__LINE__) |
| + |
| +#if DARTS_DISABLE_EXCEPTIONS |
| +#define DARTS_THROW(msg) ABSL_CHECK(false) << msg |
| +#else |
| #define DARTS_THROW(msg) \ |
| throw Darts::Details::Exception(__FILE__ ":" DARTS_LINE_STR \ |
| ": exception: " msg) |
| +#endif |
| |
| namespace Darts { |
| |
| @@ -74,6 +83,7 @@ class DoubleArrayUnit { |
| // Copyable. |
| }; |
| |
| +#if !DARTS_DISABLE_EXCEPTIONS |
| // Darts-clone throws an <Exception> for memory allocation failure, invalid |
| // arguments or a too large offset. The last case means that there are too many |
| // keys in the given set of keys. Note that the `msg' of <Exception> must be a |
| @@ -96,6 +106,7 @@ class Exception : public std::exception { |
| // Disallows operator=. |
| Exception& operator=(const Exception&); |
| }; |
| +#endif // !DARTS_DISABLE_EXCEPTIONS |
| |
| } // namespace Details |
| |
| @@ -373,15 +384,9 @@ int DoubleArrayImpl<A, B, T, C>::open(const char* file_name, |
| } |
| } |
| |
| - unit_type* buf; |
| - try { |
| - buf = new unit_type[size]; |
| - for (id_type i = 0; i < 256; ++i) { |
| - buf[i] = units[i]; |
| - } |
| - } catch (const std::bad_alloc&) { |
| - std::fclose(file); |
| - DARTS_THROW("failed to open double-array: std::bad_alloc"); |
| + unit_type* buf = new unit_type[size]; |
| + for (id_type i = 0; i < 256; ++i) { |
| + buf[i] = units[i]; |
| } |
| |
| if (size > 256) { |
| @@ -688,11 +693,7 @@ void AutoPool<T>::resize_buf(std::size_t size) { |
| } |
| |
| AutoArray<char> buf; |
| - try { |
| - buf.reset(new char[sizeof(T) * capacity]); |
| - } catch (const std::bad_alloc&) { |
| - DARTS_THROW("failed to resize pool: std::bad_alloc"); |
| - } |
| + buf.reset(new char[sizeof(T) * capacity]); |
| |
| if (size_ > 0) { |
| T* src = reinterpret_cast<T*>(&buf_[0]); |
| @@ -804,11 +805,7 @@ class BitVector { |
| }; |
| |
| inline void BitVector::build() { |
| - try { |
| - ranks_.reset(new id_type[units_.size()]); |
| - } catch (const std::bad_alloc&) { |
| - DARTS_THROW("failed to build rank index: std::bad_alloc"); |
| - } |
| + ranks_.reset(new id_type[units_.size()]); |
| |
| num_ones_ = 0; |
| for (std::size_t i = 0; i < units_.size(); ++i) { |
| -- |
| 2.42.0.609.gbb76f46606-goog |
| |