| Index: runtime/vm/regexp_parser.cc
|
| diff --git a/runtime/vm/regexp_parser.cc b/runtime/vm/regexp_parser.cc
|
| index 257f0fee247c9e8176be7103073c990d22c1e5a2..5d10d0872ed132d3837468cb235349a247a24272 100644
|
| --- a/runtime/vm/regexp_parser.cc
|
| +++ b/runtime/vm/regexp_parser.cc
|
| @@ -2,9 +2,9 @@
|
| // for details. All rights reserved. Use of this source code is governed by a
|
| // BSD-style license that can be found in the LICENSE file.
|
|
|
| +#include "vm/regexp_parser.h"
|
| #include "vm/longjump.h"
|
| #include "vm/object_store.h"
|
| -#include "vm/regexp_parser.h"
|
|
|
| namespace dart {
|
|
|
| @@ -27,7 +27,6 @@ RegExpBuilder::RegExpBuilder()
|
| {
|
| }
|
|
|
| -
|
| void RegExpBuilder::FlushCharacters() {
|
| pending_empty_ = false;
|
| if (characters_ != NULL) {
|
| @@ -38,7 +37,6 @@ void RegExpBuilder::FlushCharacters() {
|
| }
|
| }
|
|
|
| -
|
| void RegExpBuilder::FlushText() {
|
| FlushCharacters();
|
| intptr_t num_text = text_.length();
|
| @@ -55,7 +53,6 @@ void RegExpBuilder::FlushText() {
|
| text_.Clear();
|
| }
|
|
|
| -
|
| void RegExpBuilder::AddCharacter(uint16_t c) {
|
| pending_empty_ = false;
|
| if (characters_ == NULL) {
|
| @@ -65,12 +62,10 @@ void RegExpBuilder::AddCharacter(uint16_t c) {
|
| LAST(ADD_CHAR);
|
| }
|
|
|
| -
|
| void RegExpBuilder::AddEmpty() {
|
| pending_empty_ = true;
|
| }
|
|
|
| -
|
| void RegExpBuilder::AddAtom(RegExpTree* term) {
|
| if (term->IsEmpty()) {
|
| AddEmpty();
|
| @@ -86,19 +81,16 @@ void RegExpBuilder::AddAtom(RegExpTree* term) {
|
| LAST(ADD_ATOM);
|
| }
|
|
|
| -
|
| void RegExpBuilder::AddAssertion(RegExpTree* assert) {
|
| FlushText();
|
| terms_.Add(assert);
|
| LAST(ADD_ASSERT);
|
| }
|
|
|
| -
|
| void RegExpBuilder::NewAlternative() {
|
| FlushTerms();
|
| }
|
|
|
| -
|
| void RegExpBuilder::FlushTerms() {
|
| FlushText();
|
| intptr_t num_terms = terms_.length();
|
| @@ -120,7 +112,6 @@ void RegExpBuilder::FlushTerms() {
|
| LAST(ADD_NONE);
|
| }
|
|
|
| -
|
| RegExpTree* RegExpBuilder::ToRegExp() {
|
| FlushTerms();
|
| intptr_t num_alternatives = alternatives_.length();
|
| @@ -138,7 +129,6 @@ RegExpTree* RegExpBuilder::ToRegExp() {
|
| return new (Z) RegExpDisjunction(alternatives);
|
| }
|
|
|
| -
|
| void RegExpBuilder::AddQuantifierToAtom(
|
| intptr_t min,
|
| intptr_t max,
|
| @@ -215,7 +205,6 @@ RegExpParser::RegExpParser(const String& in, String* error, bool multiline)
|
| Advance();
|
| }
|
|
|
| -
|
| uint32_t RegExpParser::Next() {
|
| if (has_next()) {
|
| return in().CharAt(next_pos_);
|
| @@ -224,7 +213,6 @@ uint32_t RegExpParser::Next() {
|
| }
|
| }
|
|
|
| -
|
| void RegExpParser::Advance() {
|
| if (next_pos_ < in().Length()) {
|
| current_ = in().CharAt(next_pos_);
|
| @@ -235,25 +223,21 @@ void RegExpParser::Advance() {
|
| }
|
| }
|
|
|
| -
|
| void RegExpParser::Reset(intptr_t pos) {
|
| next_pos_ = pos;
|
| has_more_ = (pos < in().Length());
|
| Advance();
|
| }
|
|
|
| -
|
| void RegExpParser::Advance(intptr_t dist) {
|
| next_pos_ += dist - 1;
|
| Advance();
|
| }
|
|
|
| -
|
| bool RegExpParser::simple() {
|
| return simple_;
|
| }
|
|
|
| -
|
| void RegExpParser::ReportError(const char* message) {
|
| failed_ = true;
|
| *error_ = String::New(message);
|
| @@ -266,7 +250,6 @@ void RegExpParser::ReportError(const char* message) {
|
| UNREACHABLE();
|
| }
|
|
|
| -
|
| // Pattern ::
|
| // Disjunction
|
| RegExpTree* RegExpParser::ParsePattern() {
|
| @@ -280,7 +263,6 @@ RegExpTree* RegExpParser::ParsePattern() {
|
| return result;
|
| }
|
|
|
| -
|
| // Disjunction ::
|
| // Alternative
|
| // Alternative | Disjunction
|
| @@ -632,7 +614,6 @@ RegExpTree* RegExpParser::ParseDisjunction() {
|
| }
|
| }
|
|
|
| -
|
| #ifdef DEBUG
|
| // Currently only used in an ASSERT.
|
| static bool IsSpecialClassEscape(uint32_t c) {
|
| @@ -650,7 +631,6 @@ static bool IsSpecialClassEscape(uint32_t c) {
|
| }
|
| #endif
|
|
|
| -
|
| // In order to know whether an escape is a backreference or not we have to scan
|
| // the entire regexp and find the number of capturing parentheses. However we
|
| // don't want to scan the regexp twice unless it is necessary. This mini-parser
|
| @@ -689,12 +669,10 @@ void RegExpParser::ScanForCaptures() {
|
| is_scanned_for_captures_ = true;
|
| }
|
|
|
| -
|
| static inline bool IsDecimalDigit(int32_t c) {
|
| return '0' <= c && c <= '9';
|
| }
|
|
|
| -
|
| bool RegExpParser::ParseBackReferenceIndex(intptr_t* index_out) {
|
| ASSERT('\\' == current());
|
| ASSERT('1' <= Next() && Next() <= '9');
|
| @@ -731,7 +709,6 @@ bool RegExpParser::ParseBackReferenceIndex(intptr_t* index_out) {
|
| return true;
|
| }
|
|
|
| -
|
| // QuantifierPrefix ::
|
| // { DecimalDigits }
|
| // { DecimalDigits , }
|
| @@ -799,7 +776,6 @@ bool RegExpParser::ParseIntervalQuantifier(intptr_t* min_out,
|
| return true;
|
| }
|
|
|
| -
|
| uint32_t RegExpParser::ParseOctalLiteral() {
|
| ASSERT(('0' <= current() && current() <= '7') || current() == kEndMarker);
|
| // For compatibility with some other browsers (not all), we parse
|
| @@ -817,7 +793,6 @@ uint32_t RegExpParser::ParseOctalLiteral() {
|
| return value;
|
| }
|
|
|
| -
|
| // Returns the value (0 .. 15) of a hexadecimal character c.
|
| // If c is not a legal hexadecimal character, returns a value < 0.
|
| static inline intptr_t HexValue(uint32_t c) {
|
| @@ -828,7 +803,6 @@ static inline intptr_t HexValue(uint32_t c) {
|
| return -1;
|
| }
|
|
|
| -
|
| bool RegExpParser::ParseHexEscape(intptr_t length, uint32_t* value) {
|
| intptr_t start = position();
|
| uint32_t val = 0;
|
| @@ -850,7 +824,6 @@ bool RegExpParser::ParseHexEscape(intptr_t length, uint32_t* value) {
|
| return true;
|
| }
|
|
|
| -
|
| uint32_t RegExpParser::ParseClassCharacterEscape() {
|
| ASSERT(current() == '\\');
|
| DEBUG_ASSERT(has_next() && !IsSpecialClassEscape(Next()));
|
| @@ -936,7 +909,6 @@ uint32_t RegExpParser::ParseClassCharacterEscape() {
|
| return 0;
|
| }
|
|
|
| -
|
| CharacterRange RegExpParser::ParseClassAtom(uint16_t* char_class) {
|
| ASSERT(0 == *char_class);
|
| uint32_t first = current();
|
| @@ -965,7 +937,6 @@ CharacterRange RegExpParser::ParseClassAtom(uint16_t* char_class) {
|
| }
|
| }
|
|
|
| -
|
| static const uint16_t kNoCharClass = 0;
|
|
|
| // Adds range or pre-defined character class to character ranges.
|
| @@ -981,7 +952,6 @@ static inline void AddRangeOrEscape(ZoneGrowableArray<CharacterRange>* ranges,
|
| }
|
| }
|
|
|
| -
|
| RegExpTree* RegExpParser::ParseCharacterClass() {
|
| static const char* kUnterminated = "Unterminated character class";
|
| static const char* kRangeOutOfOrder = "Range out of order in character class";
|
| @@ -1039,7 +1009,6 @@ RegExpTree* RegExpParser::ParseCharacterClass() {
|
| return new (Z) RegExpCharacterClass(ranges, is_negated);
|
| }
|
|
|
| -
|
| // ----------------------------------------------------------------------------
|
| // The Parser interface.
|
|
|
|
|