OLD | NEW |
1 // Copyright 2016 the V8 project authors. All rights reserved. | 1 // Copyright 2016 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "src/builtins/builtins-utils.h" | 5 #include "src/builtins/builtins-utils.h" |
6 #include "src/builtins/builtins.h" | 6 #include "src/builtins/builtins.h" |
7 | 7 |
8 #include "src/code-factory.h" | 8 #include "src/code-factory.h" |
9 #include "src/regexp/jsregexp.h" | 9 #include "src/regexp/jsregexp.h" |
10 #include "src/regexp/regexp-utils.h" | 10 #include "src/regexp/regexp-utils.h" |
(...skipping 1272 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1283 | 1283 |
1284 Factory* factory = isolate->factory(); | 1284 Factory* factory = isolate->factory(); |
1285 | 1285 |
1286 Handle<Object> string_obj = args.atOrUndefined(isolate, 1); | 1286 Handle<Object> string_obj = args.atOrUndefined(isolate, 1); |
1287 Handle<Object> limit_obj = args.atOrUndefined(isolate, 2); | 1287 Handle<Object> limit_obj = args.atOrUndefined(isolate, 2); |
1288 | 1288 |
1289 Handle<String> string; | 1289 Handle<String> string; |
1290 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, string, | 1290 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, string, |
1291 Object::ToString(isolate, string_obj)); | 1291 Object::ToString(isolate, string_obj)); |
1292 | 1292 |
| 1293 if (RegExpUtils::IsUnmodifiedRegExp(isolate, recv)) { |
| 1294 RETURN_RESULT_OR_FAILURE( |
| 1295 isolate, |
| 1296 RegExpSplit(isolate, Handle<JSRegExp>::cast(recv), string, limit_obj)); |
| 1297 } |
| 1298 |
1293 Handle<JSFunction> regexp_fun = isolate->regexp_function(); | 1299 Handle<JSFunction> regexp_fun = isolate->regexp_function(); |
1294 Handle<Object> ctor; | 1300 Handle<Object> ctor; |
1295 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( | 1301 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
1296 isolate, ctor, SpeciesConstructor(isolate, recv, regexp_fun)); | 1302 isolate, ctor, SpeciesConstructor(isolate, recv, regexp_fun)); |
1297 | 1303 |
1298 if (recv->IsJSRegExp() && *ctor == *regexp_fun) { | |
1299 Handle<Object> exec; | |
1300 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( | |
1301 isolate, exec, JSObject::GetProperty( | |
1302 recv, factory->NewStringFromAsciiChecked("exec"))); | |
1303 if (RegExpUtils::IsBuiltinExec(exec)) { | |
1304 RETURN_RESULT_OR_FAILURE( | |
1305 isolate, RegExpSplit(isolate, Handle<JSRegExp>::cast(recv), string, | |
1306 limit_obj)); | |
1307 } | |
1308 } | |
1309 | |
1310 Handle<Object> flags_obj; | 1304 Handle<Object> flags_obj; |
1311 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( | 1305 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
1312 isolate, flags_obj, JSObject::GetProperty(recv, factory->flags_string())); | 1306 isolate, flags_obj, JSObject::GetProperty(recv, factory->flags_string())); |
1313 | 1307 |
1314 Handle<String> flags; | 1308 Handle<String> flags; |
1315 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, flags, | 1309 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, flags, |
1316 Object::ToString(isolate, flags_obj)); | 1310 Object::ToString(isolate, flags_obj)); |
1317 | 1311 |
1318 Handle<String> u_str = factory->LookupSingleCharacterStringFromCode('u'); | 1312 Handle<String> u_str = factory->LookupSingleCharacterStringFromCode('u'); |
1319 const bool unicode = (String::IndexOf(isolate, flags, u_str, 0) >= 0); | 1313 const bool unicode = (String::IndexOf(isolate, flags, u_str, 0) >= 0); |
(...skipping 375 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1695 a->Bind(&if_matched); | 1689 a->Bind(&if_matched); |
1696 { | 1690 { |
1697 Node* result = ConstructNewResultFromMatchInfo(isolate, a, context, | 1691 Node* result = ConstructNewResultFromMatchInfo(isolate, a, context, |
1698 match_indices, string); | 1692 match_indices, string); |
1699 a->Return(result); | 1693 a->Return(result); |
1700 } | 1694 } |
1701 } | 1695 } |
1702 | 1696 |
1703 } // namespace internal | 1697 } // namespace internal |
1704 } // namespace v8 | 1698 } // namespace v8 |
OLD | NEW |