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_ |