| Index: sdk/lib/_internal/compiler/implementation/lib/regexp_helper.dart
|
| diff --git a/sdk/lib/_internal/compiler/implementation/lib/regexp_helper.dart b/sdk/lib/_internal/compiler/implementation/lib/regexp_helper.dart
|
| index 336664e712c743e70020a13aac30b16e1217cdd8..b62b0b5c5b46e2d45906f891556561f8d88101ae 100644
|
| --- a/sdk/lib/_internal/compiler/implementation/lib/regexp_helper.dart
|
| +++ b/sdk/lib/_internal/compiler/implementation/lib/regexp_helper.dart
|
| @@ -30,12 +30,12 @@ regExpAttachGlobalNative(JSSyntaxRegExp regExp) {
|
|
|
| regExpMakeNative(JSSyntaxRegExp regExp, {bool global: false}) {
|
| String pattern = regExp.pattern;
|
| - bool multiLine = regExp.multiLine;
|
| - bool ignoreCase = regExp.ignoreCase;
|
| + bool isMultiLine = regExp.isMultiLine;
|
| + bool isCaseSensitive = regExp.isCaseSensitive;
|
| checkString(pattern);
|
| StringBuffer sb = new StringBuffer();
|
| - if (multiLine) sb.add('m');
|
| - if (ignoreCase) sb.add('i');
|
| + if (isMultiLine) sb.add('m');
|
| + if (!isCaseSensitive) sb.add('i');
|
| if (global) sb.add('g');
|
| try {
|
| return JS('var', r'new RegExp(#, #)', pattern, sb.toString());
|
| @@ -49,15 +49,15 @@ int regExpMatchStart(m) => JS('int', r'#.index', m);
|
|
|
| class JSSyntaxRegExp implements RegExp {
|
| final String _pattern;
|
| - final bool _multiLine;
|
| - final bool _ignoreCase;
|
| + final bool _isMultiLine;
|
| + final bool _isCaseSensitive;
|
|
|
| const JSSyntaxRegExp(String pattern,
|
| {bool multiLine: false,
|
| - bool ignoreCase: false})
|
| + bool caseSensitive: true})
|
| : _pattern = pattern,
|
| - _multiLine = multiLine,
|
| - _ignoreCase = ignoreCase;
|
| + _isMultiLine = multiLine,
|
| + _isCaseSensitive = caseSensitive;
|
|
|
| Match firstMatch(String str) {
|
| List<String> m = regExpExec(this, checkString(str));
|
| @@ -81,13 +81,14 @@ class JSSyntaxRegExp implements RegExp {
|
| }
|
|
|
| String get pattern => _pattern;
|
| - bool get multiLine => _multiLine;
|
| - bool get ignoreCase => _ignoreCase;
|
| + bool get isMultiLine => _isMultiLine;
|
| + bool get isCaseSensitive => _isCaseSensitive;
|
|
|
| static JSSyntaxRegExp _globalVersionOf(JSSyntaxRegExp other) {
|
| - JSSyntaxRegExp re = new JSSyntaxRegExp(other.pattern,
|
| - multiLine: other.multiLine,
|
| - ignoreCase: other.ignoreCase);
|
| + JSSyntaxRegExp re =
|
| + new JSSyntaxRegExp(other.pattern,
|
| + multiLine: other.isMultiLine,
|
| + caseSensitive: other.isCaseSensitive);
|
| regExpAttachGlobalNative(re);
|
| return re;
|
| }
|
| @@ -122,50 +123,29 @@ class _MatchImplementation implements Match {
|
| }
|
| }
|
|
|
| -class _AllMatchesIterable implements Iterable<Match> {
|
| +class _AllMatchesIterable extends Iterable<Match> {
|
| final JSSyntaxRegExp _re;
|
| final String _str;
|
|
|
| const _AllMatchesIterable(this._re, this._str);
|
|
|
| - Iterator<Match> iterator() => new _AllMatchesIterator(_re, _str);
|
| + Iterator<Match> get iterator => new _AllMatchesIterator(_re, _str);
|
| }
|
|
|
| class _AllMatchesIterator implements Iterator<Match> {
|
| final RegExp _re;
|
| final String _str;
|
| - Match _next;
|
| - bool _done;
|
| + Match _current;
|
|
|
| _AllMatchesIterator(JSSyntaxRegExp re, String this._str)
|
| - : _done = false, _re = JSSyntaxRegExp._globalVersionOf(re);
|
| + : _re = JSSyntaxRegExp._globalVersionOf(re);
|
|
|
| - Match next() {
|
| - if (!hasNext) {
|
| - throw new StateError("No more elements");
|
| - }
|
| -
|
| - // _next is set by [hasNext].
|
| - var next = _next;
|
| - _next = null;
|
| - return next;
|
| - }
|
| -
|
| - bool get hasNext {
|
| - if (_done) {
|
| - return false;
|
| - } else if (_next != null) {
|
| - return true;
|
| - }
|
| + Match get current => _current;
|
|
|
| + bool moveNext() {
|
| // firstMatch actually acts as nextMatch because of
|
| // hidden global flag.
|
| - _next = _re.firstMatch(_str);
|
| - if (_next == null) {
|
| - _done = true;
|
| - return false;
|
| - } else {
|
| - return true;
|
| - }
|
| + _current = _re.firstMatch(_str);
|
| + return _current != null;
|
| }
|
| }
|
|
|