// Copyright 2016 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.
#ifndef V8_REGEXP_REGEXP_UTILS_H_
#define V8_REGEXP_REGEXP_UTILS_H_
#include "src/objects.h"
namespace v8 {
namespace internal {
class RegExpMatchInfo;
// Helper methods for C++ regexp builtins.
class RegExpUtils : public AllStatic {
public:
// Last match info accessors.
static Handle<String> GenericCaptureGetter(Isolate* isolate,
Handle<RegExpMatchInfo> match_info,
int capture, bool* ok = nullptr);
// Last index (RegExp.lastIndex) accessors.
static MUST_USE_RESULT MaybeHandle<Object> SetLastIndex(
Isolate* isolate, Handle<JSReceiver> regexp, int value);
static MUST_USE_RESULT MaybeHandle<Object> GetLastIndex(
Isolate* isolate, Handle<JSReceiver> recv);
// ES#sec-regexpexec Runtime Semantics: RegExpExec ( R, S )
static MUST_USE_RESULT MaybeHandle<Object> RegExpExec(
Isolate* isolate, Handle<JSReceiver> regexp, Handle<String> string,
Handle<Object> exec);
// ES#sec-isregexp IsRegExp ( argument )
// Includes checking of the match property.
static Maybe<bool> IsRegExp(Isolate* isolate, Handle<Object> object);
// Checks whether the given object is an unmodified JSRegExp instance.
// Neither the object's map, nor its prototype's map may be modified.
static bool IsUnmodifiedRegExp(Isolate* isolate, Handle<Object> obj);
// ES#sec-advancestringindex
// AdvanceStringIndex ( S, index, unicode )
static int AdvanceStringIndex(Isolate* isolate, Handle<String> string,
int index, bool unicode);
static MUST_USE_RESULT MaybeHandle<Object> SetAdvancedStringIndex(
Isolate* isolate, Handle<JSReceiver> regexp, Handle<String> string,
bool unicode);
};
} // namespace internal
} // namespace v8
#endif // V8_REGEXP_REGEXP_UTILS_H_