summaryrefslogtreecommitdiff
path: root/js/src/new-regexp/regexp.h
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/new-regexp/regexp.h')
-rw-r--r--js/src/new-regexp/regexp.h195
1 files changed, 0 insertions, 195 deletions
diff --git a/js/src/new-regexp/regexp.h b/js/src/new-regexp/regexp.h
deleted file mode 100644
index f1e403bf0..000000000
--- a/js/src/new-regexp/regexp.h
+++ /dev/null
@@ -1,195 +0,0 @@
-// Copyright 2012 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_H_
-#define V8_REGEXP_REGEXP_H_
-
-#include "new-regexp/regexp-error.h"
-#include "new-regexp/regexp-shim.h"
-
-namespace v8 {
-namespace internal {
-
-class RegExpNode;
-class RegExpTree;
-
-enum class RegExpCompilationTarget : int { kBytecode, kNative };
-
-// TODO(jgruber): Do not expose in regexp.h.
-// TODO(jgruber): Consider splitting between ParseData and CompileData.
-struct RegExpCompileData {
- // The parsed AST as produced by the RegExpParser.
- RegExpTree* tree = nullptr;
-
- // The compiled Node graph as produced by RegExpTree::ToNode methods.
- RegExpNode* node = nullptr;
-
- // Either the generated code as produced by the compiler or a trampoline
- // to the interpreter.
- Object code;
-
- // True, iff the pattern is a 'simple' atom with zero captures. In other
- // words, the pattern consists of a string with no metacharacters and special
- // regexp features, and can be implemented as a standard string search.
- bool simple = true;
-
- // True, iff the pattern is anchored at the start of the string with '^'.
- bool contains_anchor = false;
-
- // Only use if the pattern contains named captures. If so, this contains a
- // mapping of capture names to capture indices.
- Handle<FixedArray> capture_name_map;
-
- // The error message. Only used if an error occurred during parsing or
- // compilation.
- RegExpError error = RegExpError::kNone;
-
- // The position at which the error was detected. Only used if an
- // error occurred.
- int error_pos = 0;
-
- // The number of capture groups, without the global capture \0.
- int capture_count = 0;
-
- // The number of registers used by the generated code.
- int register_count = 0;
-
- // The compilation target (bytecode or native code).
- RegExpCompilationTarget compilation_target;
-};
-
-class RegExp final : public AllStatic {
- public:
- // Whether the irregexp engine generates interpreter bytecode.
- static bool CanGenerateBytecode() {
- return FLAG_regexp_interpret_all || FLAG_regexp_tier_up;
- }
-
- // Parses the RegExp pattern and prepares the JSRegExp object with
- // generic data and choice of implementation - as well as what
- // the implementation wants to store in the data field.
- // Returns false if compilation fails.
- V8_WARN_UNUSED_RESULT static MaybeHandle<Object> Compile(
- Isolate* isolate, Handle<JSRegExp> re, Handle<String> pattern,
- JSRegExp::Flags flags, uint32_t backtrack_limit);
-
- enum CallOrigin : int {
- kFromRuntime = 0,
- kFromJs = 1,
- };
-
- // See ECMA-262 section 15.10.6.2.
- // This function calls the garbage collector if necessary.
- V8_EXPORT_PRIVATE V8_WARN_UNUSED_RESULT static MaybeHandle<Object> Exec(
- Isolate* isolate, Handle<JSRegExp> regexp, Handle<String> subject,
- int index, Handle<RegExpMatchInfo> last_match_info);
-
- // Integral return values used throughout regexp code layers.
- static constexpr int kInternalRegExpFailure = 0;
- static constexpr int kInternalRegExpSuccess = 1;
- static constexpr int kInternalRegExpException = -1;
- static constexpr int kInternalRegExpRetry = -2;
-
- enum IrregexpResult : int32_t {
- RE_FAILURE = kInternalRegExpFailure,
- RE_SUCCESS = kInternalRegExpSuccess,
- RE_EXCEPTION = kInternalRegExpException,
- };
-
- // Prepare a RegExp for being executed one or more times (using
- // IrregexpExecOnce) on the subject.
- // This ensures that the regexp is compiled for the subject, and that
- // the subject is flat.
- // Returns the number of integer spaces required by IrregexpExecOnce
- // as its "registers" argument. If the regexp cannot be compiled,
- // an exception is set as pending, and this function returns negative.
- static int IrregexpPrepare(Isolate* isolate, Handle<JSRegExp> regexp,
- Handle<String> subject);
-
- // Set last match info. If match is nullptr, then setting captures is
- // omitted.
- static Handle<RegExpMatchInfo> SetLastMatchInfo(
- Isolate* isolate, Handle<RegExpMatchInfo> last_match_info,
- Handle<String> subject, int capture_count, int32_t* match);
-
- V8_EXPORT_PRIVATE static bool CompileForTesting(Isolate* isolate, Zone* zone,
- RegExpCompileData* input,
- JSRegExp::Flags flags,
- Handle<String> pattern,
- Handle<String> sample_subject,
- bool is_one_byte);
-
- V8_EXPORT_PRIVATE static void DotPrintForTesting(const char* label,
- RegExpNode* node);
-
- static const int kRegExpTooLargeToOptimize = 20 * KB;
-};
-
-// Uses a special global mode of irregexp-generated code to perform a global
-// search and return multiple results at once. As such, this is essentially an
-// iterator over multiple results (retrieved batch-wise in advance).
-class RegExpGlobalCache final {
- public:
- RegExpGlobalCache(Handle<JSRegExp> regexp, Handle<String> subject,
- Isolate* isolate);
-
- ~RegExpGlobalCache();
-
- // Fetch the next entry in the cache for global regexp match results.
- // This does not set the last match info. Upon failure, nullptr is
- // returned. The cause can be checked with Result(). The previous result is
- // still in available in memory when a failure happens.
- int32_t* FetchNext();
-
- int32_t* LastSuccessfulMatch();
-
- bool HasException() { return num_matches_ < 0; }
-
- private:
- int AdvanceZeroLength(int last_index);
-
- int num_matches_;
- int max_matches_;
- int current_match_index_;
- int registers_per_match_;
- // Pointer to the last set of captures.
- int32_t* register_array_;
- int register_array_size_;
- Handle<JSRegExp> regexp_;
- Handle<String> subject_;
- Isolate* isolate_;
-};
-
-// Caches results for specific regexp queries on the isolate. At the time of
-// writing, this is used during global calls to RegExp.prototype.exec and
-// @@split.
-class RegExpResultsCache final : public AllStatic {
- public:
- enum ResultsCacheType { REGEXP_MULTIPLE_INDICES, STRING_SPLIT_SUBSTRINGS };
-
- // Attempt to retrieve a cached result. On failure, 0 is returned as a Smi.
- // On success, the returned result is guaranteed to be a COW-array.
- static Object Lookup(Heap* heap, String key_string, Object key_pattern,
- FixedArray* last_match_out, ResultsCacheType type);
- // Attempt to add value_array to the cache specified by type. On success,
- // value_array is turned into a COW-array.
- static void Enter(Isolate* isolate, Handle<String> key_string,
- Handle<Object> key_pattern, Handle<FixedArray> value_array,
- Handle<FixedArray> last_match_cache, ResultsCacheType type);
- static void Clear(FixedArray cache);
-
- static constexpr int kRegExpResultsCacheSize = 0x100;
-
- private:
- static constexpr int kStringOffset = 0;
- static constexpr int kPatternOffset = 1;
- static constexpr int kArrayOffset = 2;
- static constexpr int kLastMatchOffset = 3;
- static constexpr int kArrayEntriesPerCacheEntry = 4;
-};
-
-} // namespace internal
-} // namespace v8
-
-#endif // V8_REGEXP_REGEXP_H_