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