| Index: src/jsregexp.h
|
| diff --git a/src/jsregexp.h b/src/jsregexp.h
|
| index dfbb581ad650a82f7bd1f030aefdd4fafbd43963..300c0ef1386433427cdf311e28661df6e145efc9 100644
|
| --- a/src/jsregexp.h
|
| +++ b/src/jsregexp.h
|
| @@ -204,8 +204,8 @@ class RegExpImpl {
|
| static void SetIrregexpMaxRegisterCount(FixedArray* re, int value);
|
| static int IrregexpNumberOfCaptures(FixedArray* re);
|
| static int IrregexpNumberOfRegisters(FixedArray* re);
|
| - static ByteArray* IrregexpByteCode(FixedArray* re, bool is_ascii);
|
| - static Code* IrregexpNativeCode(FixedArray* re, bool is_ascii);
|
| + static ByteArray* IrregexpByteCode(FixedArray* re, bool is_one_byte);
|
| + static Code* IrregexpNativeCode(FixedArray* re, bool is_one_byte);
|
|
|
| // Limit the space regexps take up on the heap. In order to limit this we
|
| // would like to keep track of the amount of regexp code on the heap. This
|
| @@ -216,10 +216,11 @@ class RegExpImpl {
|
| static const int kRegWxpCompiledLimit = 1 * MB;
|
|
|
| private:
|
| - static bool CompileIrregexp(
|
| - Handle<JSRegExp> re, Handle<String> sample_subject, bool is_ascii);
|
| - static inline bool EnsureCompiledIrregexp(
|
| - Handle<JSRegExp> re, Handle<String> sample_subject, bool is_ascii);
|
| + static bool CompileIrregexp(Handle<JSRegExp> re,
|
| + Handle<String> sample_subject, bool is_one_byte);
|
| + static inline bool EnsureCompiledIrregexp(Handle<JSRegExp> re,
|
| + Handle<String> sample_subject,
|
| + bool is_one_byte);
|
| };
|
|
|
|
|
| @@ -262,7 +263,7 @@ class CharacterRange {
|
| bool is_valid() { return from_ <= to_; }
|
| bool IsEverything(uc16 max) { return from_ == 0 && to_ >= max; }
|
| bool IsSingleton() { return (from_ == to_); }
|
| - void AddCaseEquivalents(ZoneList<CharacterRange>* ranges, bool is_ascii,
|
| + void AddCaseEquivalents(ZoneList<CharacterRange>* ranges, bool is_one_byte,
|
| Zone* zone);
|
| static void Split(ZoneList<CharacterRange>* base,
|
| Vector<const int> overlay,
|
| @@ -526,11 +527,11 @@ class QuickCheckDetails {
|
| mask_(0),
|
| value_(0),
|
| cannot_match_(false) { }
|
| - bool Rationalize(bool ascii);
|
| + bool Rationalize(bool one_byte);
|
| // Merge in the information from another branch of an alternation.
|
| void Merge(QuickCheckDetails* other, int from_index);
|
| // Advance the current position by some amount.
|
| - void Advance(int by, bool ascii);
|
| + void Advance(int by, bool one_byte);
|
| void Clear();
|
| bool cannot_match() { return cannot_match_; }
|
| void set_cannot_match() { cannot_match_ = true; }
|
| @@ -624,11 +625,13 @@ class RegExpNode: public ZoneObject {
|
| UNREACHABLE();
|
| }
|
|
|
| - // If we know that the input is ASCII then there are some nodes that can
|
| + // If we know that the input is one-byte then there are some nodes that can
|
| // never match. This method returns a node that can be substituted for
|
| // itself, or NULL if the node can never match.
|
| - virtual RegExpNode* FilterASCII(int depth, bool ignore_case) { return this; }
|
| - // Helper for FilterASCII.
|
| + virtual RegExpNode* FilterOneByte(int depth, bool ignore_case) {
|
| + return this;
|
| + }
|
| + // Helper for FilterOneByte.
|
| RegExpNode* replacement() {
|
| DCHECK(info()->replacement_calculated);
|
| return replacement_;
|
| @@ -722,7 +725,7 @@ class SeqRegExpNode: public RegExpNode {
|
| : RegExpNode(on_success->zone()), on_success_(on_success) { }
|
| RegExpNode* on_success() { return on_success_; }
|
| void set_on_success(RegExpNode* node) { on_success_ = node; }
|
| - virtual RegExpNode* FilterASCII(int depth, bool ignore_case);
|
| + virtual RegExpNode* FilterOneByte(int depth, bool ignore_case);
|
| virtual void FillInBMInfo(int offset,
|
| int budget,
|
| BoyerMooreLookahead* bm,
|
| @@ -843,7 +846,7 @@ class TextNode: public SeqRegExpNode {
|
| int characters_filled_in,
|
| bool not_at_start);
|
| ZoneList<TextElement>* elements() { return elms_; }
|
| - void MakeCaseIndependent(bool is_ascii);
|
| + void MakeCaseIndependent(bool is_one_byte);
|
| virtual int GreedyLoopTextLength();
|
| virtual RegExpNode* GetSuccessorOfOmnivorousTextNode(
|
| RegExpCompiler* compiler);
|
| @@ -852,11 +855,11 @@ class TextNode: public SeqRegExpNode {
|
| BoyerMooreLookahead* bm,
|
| bool not_at_start);
|
| void CalculateOffsets();
|
| - virtual RegExpNode* FilterASCII(int depth, bool ignore_case);
|
| + virtual RegExpNode* FilterOneByte(int depth, bool ignore_case);
|
|
|
| private:
|
| enum TextEmitPassType {
|
| - NON_ASCII_MATCH, // Check for characters that can't match.
|
| + NON_LATIN1_MATCH, // Check for characters that can't match.
|
| SIMPLE_CHARACTER_MATCH, // Case-dependent single character check.
|
| NON_LETTER_CHARACTER_MATCH, // Check characters that have no case equivs.
|
| CASE_CHARACTER_MATCH, // Case-independent single character check.
|
| @@ -1081,7 +1084,7 @@ class ChoiceNode: public RegExpNode {
|
| virtual bool try_to_emit_quick_check_for_alternative(bool is_first) {
|
| return true;
|
| }
|
| - virtual RegExpNode* FilterASCII(int depth, bool ignore_case);
|
| + virtual RegExpNode* FilterOneByte(int depth, bool ignore_case);
|
|
|
| protected:
|
| int GreedyLoopTextLengthForAlternative(GuardedAlternative* alternative);
|
| @@ -1155,7 +1158,7 @@ class NegativeLookaheadChoiceNode: public ChoiceNode {
|
| virtual bool try_to_emit_quick_check_for_alternative(bool is_first) {
|
| return !is_first;
|
| }
|
| - virtual RegExpNode* FilterASCII(int depth, bool ignore_case);
|
| + virtual RegExpNode* FilterOneByte(int depth, bool ignore_case);
|
| };
|
|
|
|
|
| @@ -1183,7 +1186,7 @@ class LoopChoiceNode: public ChoiceNode {
|
| RegExpNode* continue_node() { return continue_node_; }
|
| bool body_can_be_zero_length() { return body_can_be_zero_length_; }
|
| virtual void Accept(NodeVisitor* visitor);
|
| - virtual RegExpNode* FilterASCII(int depth, bool ignore_case);
|
| + virtual RegExpNode* FilterOneByte(int depth, bool ignore_case);
|
|
|
| private:
|
| // AddAlternative is made private for loop nodes because alternatives
|
| @@ -1326,7 +1329,7 @@ class BoyerMooreLookahead : public ZoneObject {
|
| // point.
|
| int length_;
|
| RegExpCompiler* compiler_;
|
| - // 0x7f for ASCII, 0xffff for UTF-16.
|
| + // 0xff for Latin1, 0xffff for UTF-16.
|
| int max_char_;
|
| ZoneList<BoyerMoorePositionInfo*>* bitmaps_;
|
|
|
| @@ -1595,10 +1598,10 @@ FOR_EACH_NODE_TYPE(DECLARE_VISIT)
|
| // +-------+ +------------+
|
| class Analysis: public NodeVisitor {
|
| public:
|
| - Analysis(bool ignore_case, bool is_ascii)
|
| + Analysis(bool ignore_case, bool is_one_byte)
|
| : ignore_case_(ignore_case),
|
| - is_ascii_(is_ascii),
|
| - error_message_(NULL) { }
|
| + is_one_byte_(is_one_byte),
|
| + error_message_(NULL) {}
|
| void EnsureAnalyzed(RegExpNode* node);
|
|
|
| #define DECLARE_VISIT(Type) \
|
| @@ -1618,7 +1621,7 @@ FOR_EACH_NODE_TYPE(DECLARE_VISIT)
|
|
|
| private:
|
| bool ignore_case_;
|
| - bool is_ascii_;
|
| + bool is_one_byte_;
|
| const char* error_message_;
|
|
|
| DISALLOW_IMPLICIT_CONSTRUCTORS(Analysis);
|
| @@ -1657,13 +1660,11 @@ class RegExpEngine: public AllStatic {
|
| int num_registers;
|
| };
|
|
|
| - static CompilationResult Compile(RegExpCompileData* input,
|
| - bool ignore_case,
|
| - bool global,
|
| - bool multiline,
|
| + static CompilationResult Compile(RegExpCompileData* input, bool ignore_case,
|
| + bool global, bool multiline,
|
| Handle<String> pattern,
|
| Handle<String> sample_subject,
|
| - bool is_ascii, Zone* zone);
|
| + bool is_one_byte, Zone* zone);
|
|
|
| static void DotPrint(const char* label, RegExpNode* node, bool ignore_case);
|
| };
|
|
|