// 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: Context, receiver: JSAny)(string: JSAny): JSAny { const methodName: constexpr string = 'RegExp.prototype.test'; const receiver = Cast(receiver) otherwise ThrowTypeError(kIncompatibleMethodReceiver, methodName); const str: String = ToString_Inline(context, string); if (IsFastRegExpPermissive(receiver)) { RegExpPrototypeExecBodyWithoutResultFast( UnsafeCast(receiver), str) otherwise return False; return True; } const matchIndices = RegExpExec(receiver, str); return SelectBooleanConstant(matchIndices != Null); } extern macro RegExpBuiltinsAssembler::IsFastRegExpWithOriginalExec( implicit context: Context)(JSRegExp): bool; transitioning builtin RegExpPrototypeTestFast(implicit context: Context)( receiver: JSRegExp, string: String): Object { assert(IsFastRegExpWithOriginalExec(receiver)); RegExpPrototypeExecBodyWithoutResultFast(receiver, string) otherwise return False; return True; } }