Index: src/conversions.cc |
=================================================================== |
--- src/conversions.cc (revision 3427) |
+++ src/conversions.cc (working copy) |
@@ -100,14 +100,14 @@ |
} |
-static inline bool IsSpace(const char* str, int index) { |
+static inline bool IsSpace(const char* str, int index, V8Context* v8context) { |
ASSERT(index >= 0 && index < StrLength(str)); |
- return Scanner::kIsWhiteSpace.get(str[index]); |
+ return v8context->scanner_data_.kIsWhiteSpace_.get(str[index]); |
} |
-static inline bool IsSpace(String* str, int index) { |
- return Scanner::kIsWhiteSpace.get(str->Get(index)); |
+static inline bool IsSpace(String* str, int index, V8Context* v8context) { |
+ return v8context->scanner_data_.kIsWhiteSpace_.get(str->Get(index)); |
} |
@@ -272,8 +272,9 @@ |
int len = GetLength(str); |
+ V8Context* const v8context = v8_context(); |
// Skip leading spaces. |
- while ((index < len) && IsSpace(str, index)) index++; |
+ while ((index < len) && IsSpace(str, index, v8context)) index++; |
// Is the string empty? |
if (index >= len) return empty_string_val; |
@@ -334,7 +335,7 @@ |
if ((flags & ALLOW_TRAILING_JUNK) == 0) { |
// skip trailing spaces |
- while ((index < len) && IsSpace(str, index)) index++; |
+ while ((index < len) && IsSpace(str, index, v8context)) index++; |
// string ending with junk? |
if (index < len) return JUNK_STRING_VALUE; |
} |
@@ -352,6 +353,7 @@ |
return InternalStringToDouble(str, flags, empty_string_val); |
} |
+static MutexLockAdapter mutex_lock(OS::CreateMutex()); |
extern "C" char* dtoa(double d, int mode, int ndigits, |
int* decpt, int* sign, char** rve); |
@@ -381,7 +383,7 @@ |
default: { |
int decimal_point; |
int sign; |
- |
+ V8SharedStateLocker dtoa_locker(&mutex_lock); |
char* decimal_rep = dtoa(v, 0, 0, &decimal_point, &sign, NULL); |
int length = StrLength(decimal_rep); |
@@ -464,6 +466,7 @@ |
// Find a sufficiently precise decimal representation of n. |
int decimal_point; |
int sign; |
+ V8SharedStateLocker dtoa_locker(&mutex_lock); |
char* decimal_rep = dtoa(abs_value, 3, f, &decimal_point, &sign, NULL); |
int decimal_rep_length = StrLength(decimal_rep); |
@@ -552,6 +555,7 @@ |
int decimal_point; |
int sign; |
char* decimal_rep = NULL; |
+ V8SharedStateLocker dtoa_locker(&mutex_lock); |
if (f == -1) { |
decimal_rep = dtoa(value, 0, 0, &decimal_point, &sign, NULL); |
f = StrLength(decimal_rep) - 1; |
@@ -585,6 +589,7 @@ |
// Find a sufficiently precise decimal representation of n. |
int decimal_point; |
int sign; |
+ V8SharedStateLocker dtoa_locker(&mutex_lock); |
char* decimal_rep = dtoa(value, 2, p, &decimal_point, &sign, NULL); |
int decimal_rep_length = StrLength(decimal_rep); |
ASSERT(decimal_rep_length <= p); |