Index: src/utils.h |
diff --git a/src/utils.h b/src/utils.h |
index a2e3be535d3dc017afdc70a343479c2378bc7771..67b8d79a5f6a586bc1cf1bc4c942798bebc10dcb 100644 |
--- a/src/utils.h |
+++ b/src/utils.h |
@@ -1572,6 +1572,36 @@ class StringBuilder : public SimpleStringBuilder { |
}; |
+bool DoubleToBoolean(double d); |
+ |
+template <typename Stream> |
+bool StringToArrayIndex(Stream* stream, uint32_t* index) { |
+ uint16_t ch = stream->GetNext(); |
+ |
+ // If the string begins with a '0' character, it must only consist |
+ // of it to be a legal array index. |
+ if (ch == '0') { |
+ *index = 0; |
+ return !stream->HasMore(); |
+ } |
+ |
+ // Convert string to uint32 array index; character by character. |
+ int d = ch - '0'; |
+ if (d < 0 || d > 9) return false; |
+ uint32_t result = d; |
+ while (stream->HasMore()) { |
+ d = stream->GetNext() - '0'; |
+ if (d < 0 || d > 9) return false; |
+ // Check that the new result is below the 32 bit limit. |
+ if (result > 429496729U - ((d > 5) ? 1 : 0)) return false; |
+ result = (result * 10) + d; |
+ } |
+ |
+ *index = result; |
+ return true; |
+} |
+ |
+ |
} } // namespace v8::internal |
#endif // V8_UTILS_H_ |