Index: src/utils.h |
diff --git a/src/utils.h b/src/utils.h |
index 86420b4793a0dc9793d441939288db73e3d86a5e..da5d0fcab88587b2f2437948b5929efba8480b10 100644 |
--- a/src/utils.h |
+++ b/src/utils.h |
@@ -1582,6 +1582,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_ |