| Index: src/v8conversions.h
|
| diff --git a/src/v8conversions.h b/src/v8conversions.h
|
| index d3da9f8bb86db798e9ca5ad017a197b7bd5240d0..b449c8884216f0353bca9aaa8ba92aaeae9c2012 100644
|
| --- a/src/v8conversions.h
|
| +++ b/src/v8conversions.h
|
| @@ -55,26 +55,41 @@ double StringToDouble(UnicodeCache* unicode_cache,
|
| // Converts a string into an integer.
|
| double StringToInt(UnicodeCache* unicode_cache, String* str, int radix);
|
|
|
| -// Converts a number into size_t.
|
| -inline size_t NumberToSize(Isolate* isolate,
|
| - Object* number) {
|
| +inline bool TryNumberToSize(Isolate* isolate,
|
| + Object* number, size_t* result) {
|
| SealHandleScope shs(isolate);
|
| if (number->IsSmi()) {
|
| int value = Smi::cast(number)->value();
|
| - CHECK_GE(value, 0);
|
| ASSERT(
|
| - static_cast<unsigned>(Smi::kMaxValue)
|
| - <= std::numeric_limits<size_t>::max());
|
| - return static_cast<size_t>(value);
|
| + static_cast<unsigned>(Smi::kMaxValue)
|
| + <= std::numeric_limits<size_t>::max());
|
| + if (value >= 0) {
|
| + *result = static_cast<size_t>(value);
|
| + return true;
|
| + }
|
| + return false;
|
| } else {
|
| ASSERT(number->IsHeapNumber());
|
| double value = HeapNumber::cast(number)->value();
|
| - CHECK(value >= 0 &&
|
| - value <= std::numeric_limits<size_t>::max());
|
| - return static_cast<size_t>(value);
|
| + if (value >= 0 &&
|
| + value <= std::numeric_limits<size_t>::max()) {
|
| + *result = static_cast<size_t>(value);
|
| + return true;
|
| + } else {
|
| + return false;
|
| + }
|
| }
|
| }
|
|
|
| +// Converts a number into size_t.
|
| +inline size_t NumberToSize(Isolate* isolate,
|
| + Object* number) {
|
| + size_t result;
|
| + bool is_valid = TryNumberToSize(isolate, number, &result);
|
| + CHECK(is_valid);
|
| + return result;
|
| +}
|
| +
|
| } } // namespace v8::internal
|
|
|
| #endif // V8_V8CONVERSIONS_H_
|
|
|