| // Copyright 2019 the V8 project authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include 'src/builtins/builtins-regexp-gen.h' |
| |
| namespace regexp { |
| |
| // ES#sec-regexp.prototype.test |
| // RegExp.prototype.test ( S ) |
| transitioning javascript builtin RegExpPrototypeTest( |
| js-implicit context: NativeContext, receiver: JSAny)(string: JSAny): JSAny { |
| const methodName: constexpr string = 'RegExp.prototype.test'; |
| const receiver = Cast<JSReceiver>(receiver) |
| otherwise ThrowTypeError( |
| MessageTemplate::kIncompatibleMethodReceiver, methodName); |
| const str: String = ToString_Inline(string); |
| if (IsFastRegExpPermissive(receiver)) { |
| RegExpPrototypeExecBodyWithoutResultFast( |
| UnsafeCast<JSRegExp>(receiver), str) |
| otherwise return False; |
| return True; |
| } |
| const matchIndices = RegExpExec(receiver, str); |
| return SelectBooleanConstant(matchIndices != Null); |
| } |
| |
| transitioning builtin RegExpPrototypeTestFast(implicit context: Context)( |
| receiver: JSRegExp, string: String): Object { |
| RegExpPrototypeExecBodyWithoutResultFast(receiver, string) |
| otherwise return False; |
| return True; |
| } |
| } |