| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 3928 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3939 isolate->factory()->NewFixedArray(3 + capture_count); | 3939 isolate->factory()->NewFixedArray(3 + capture_count); |
| 3940 Handle<String> match; | 3940 Handle<String> match; |
| 3941 if (!first) { | 3941 if (!first) { |
| 3942 match = isolate->factory()->NewProperSubString(subject, | 3942 match = isolate->factory()->NewProperSubString(subject, |
| 3943 match_start, | 3943 match_start, |
| 3944 match_end); | 3944 match_end); |
| 3945 } else { | 3945 } else { |
| 3946 match = isolate->factory()->NewSubString(subject, | 3946 match = isolate->factory()->NewSubString(subject, |
| 3947 match_start, | 3947 match_start, |
| 3948 match_end); | 3948 match_end); |
| 3949 first = false; | |
| 3950 } | 3949 } |
| 3951 elements->set(0, *match); | 3950 elements->set(0, *match); |
| 3952 for (int i = 1; i <= capture_count; i++) { | 3951 for (int i = 1; i <= capture_count; i++) { |
| 3953 int start = current_match[i * 2]; | 3952 int start = current_match[i * 2]; |
| 3954 if (start >= 0) { | 3953 if (start >= 0) { |
| 3955 int end = current_match[i * 2 + 1]; | 3954 int end = current_match[i * 2 + 1]; |
| 3956 ASSERT(start <= end); | 3955 ASSERT(start <= end); |
| 3957 Handle<String> substring = | 3956 Handle<String> substring; |
| 3958 isolate->factory()->NewProperSubString(subject, start, end); | 3957 if (!first) { |
| 3958 substring = |
| 3959 isolate->factory()->NewProperSubString(subject, start, end); |
| 3960 } else { |
| 3961 substring = |
| 3962 isolate->factory()->NewSubString(subject, start, end); |
| 3963 } |
| 3959 elements->set(i, *substring); | 3964 elements->set(i, *substring); |
| 3960 } else { | 3965 } else { |
| 3961 ASSERT(current_match[i * 2 + 1] < 0); | 3966 ASSERT(current_match[i * 2 + 1] < 0); |
| 3962 elements->set(i, isolate->heap()->undefined_value()); | 3967 elements->set(i, isolate->heap()->undefined_value()); |
| 3963 } | 3968 } |
| 3964 } | 3969 } |
| 3965 elements->set(capture_count + 1, Smi::FromInt(match_start)); | 3970 elements->set(capture_count + 1, Smi::FromInt(match_start)); |
| 3966 elements->set(capture_count + 2, *subject); | 3971 elements->set(capture_count + 2, *subject); |
| 3967 builder->Add(*isolate->factory()->NewJSArrayWithElements(elements)); | 3972 builder->Add(*isolate->factory()->NewJSArrayWithElements(elements)); |
| 3968 } | 3973 } |
| 3974 first = false; |
| 3969 } | 3975 } |
| 3970 | 3976 |
| 3971 // If we did not get the maximum number of matches, we can stop here | 3977 // If we did not get the maximum number of matches, we can stop here |
| 3972 // since there are no matches left. | 3978 // since there are no matches left. |
| 3973 if (num_matches < max_matches) break; | 3979 if (num_matches < max_matches) break; |
| 3974 | 3980 |
| 3975 if (match_end > match_start) { | 3981 if (match_end > match_start) { |
| 3976 pos = match_end; | 3982 pos = match_end; |
| 3977 } else { | 3983 } else { |
| 3978 pos = match_end + 1; | 3984 pos = match_end + 1; |
| (...skipping 9514 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 13493 // Handle last resort GC and make sure to allow future allocations | 13499 // Handle last resort GC and make sure to allow future allocations |
| 13494 // to grow the heap without causing GCs (if possible). | 13500 // to grow the heap without causing GCs (if possible). |
| 13495 isolate->counters()->gc_last_resort_from_js()->Increment(); | 13501 isolate->counters()->gc_last_resort_from_js()->Increment(); |
| 13496 isolate->heap()->CollectAllGarbage(Heap::kNoGCFlags, | 13502 isolate->heap()->CollectAllGarbage(Heap::kNoGCFlags, |
| 13497 "Runtime::PerformGC"); | 13503 "Runtime::PerformGC"); |
| 13498 } | 13504 } |
| 13499 } | 13505 } |
| 13500 | 13506 |
| 13501 | 13507 |
| 13502 } } // namespace v8::internal | 13508 } } // namespace v8::internal |
| OLD | NEW |