Index: src/utils.h |
diff --git a/src/utils.h b/src/utils.h |
index eeb098752198d4f1ef6333bf64464e90113f61d7..2d4bb2b1109d4c4d8b71fdf1f8f061d298c500da 100644 |
--- a/src/utils.h |
+++ b/src/utils.h |
@@ -11,6 +11,7 @@ |
#include "allocation.h" |
#include "checks.h" |
+#include "list.h" |
#include "globals.h" |
#include "platform.h" |
#include "vector.h" |
@@ -1551,6 +1552,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_ |