Index: src/runtime.cc |
=================================================================== |
--- src/runtime.cc (revision 9139) |
+++ src/runtime.cc (working copy) |
@@ -5984,6 +5984,19 @@ |
int pattern_length = pattern->length(); |
RUNTIME_ASSERT(pattern_length > 0); |
+ if (limit == 0xffffffffu) { |
+ Handle<Object> cached_answer(StringSplitCache::Lookup( |
+ isolate->heap()->string_split_cache(), |
+ *subject, |
+ *pattern)); |
+ if (*cached_answer != Smi::FromInt(0)) { |
+ Handle<JSArray> result = |
+ isolate->factory()->NewJSArrayWithElements( |
+ Handle<FixedArray>::cast(cached_answer)); |
+ return *result; |
+ } |
+ } |
+ |
// The limit can be very large (0xffffffffu), but since the pattern |
// isn't empty, we can never create more parts than ~half the length |
// of the subject. |
@@ -6077,6 +6090,14 @@ |
part_start = part_end + pattern_length; |
} |
+ if (limit == 0xffffffffu) { |
+ StringSplitCache::Enter(isolate->heap(), |
+ isolate->heap()->string_split_cache(), |
+ *subject, |
+ *pattern, |
+ *elements); |
+ } |
+ |
return *result; |
} |