| Index: src/scanner.cc
 | 
| diff --git a/src/scanner.cc b/src/scanner.cc
 | 
| index f6e354a23c2e91d7fdbdf7c6d6385c9b99421ef9..7c857136e71d4e1eee445235aa7d2f728a3159a5 100644
 | 
| --- a/src/scanner.cc
 | 
| +++ b/src/scanner.cc
 | 
| @@ -1393,20 +1393,41 @@ bool Scanner::ScanRegExpPattern(bool seen_equal) {
 | 
|  }
 | 
|  
 | 
|  
 | 
| -bool Scanner::ScanRegExpFlags() {
 | 
| +Maybe<RegExp::Flags> Scanner::ScanRegExpFlags() {
 | 
|    // Scan regular expression flags.
 | 
|    LiteralScope literal(this);
 | 
| +  int flags = 0;
 | 
|    while (c0_ >= 0 && unicode_cache_->IsIdentifierPart(c0_)) {
 | 
| -    if (c0_ != '\\') {
 | 
| -      AddLiteralCharAdvance();
 | 
| -    } else {
 | 
| -      return false;
 | 
| +    RegExp::Flags flag = RegExp::kNone;
 | 
| +    switch (c0_) {
 | 
| +      case 'g':
 | 
| +        flag = RegExp::kGlobal;
 | 
| +        break;
 | 
| +      case 'i':
 | 
| +        flag = RegExp::kIgnoreCase;
 | 
| +        break;
 | 
| +      case 'm':
 | 
| +        flag = RegExp::kMultiline;
 | 
| +        break;
 | 
| +      case 'u':
 | 
| +        if (!FLAG_harmony_unicode_regexps) return Nothing<RegExp::Flags>();
 | 
| +        flag = RegExp::kUnicode;
 | 
| +        break;
 | 
| +      case 'y':
 | 
| +        if (!FLAG_harmony_regexps) return Nothing<RegExp::Flags>();
 | 
| +        flag = RegExp::kSticky;
 | 
| +        break;
 | 
| +      default:
 | 
| +        return Nothing<RegExp::Flags>();
 | 
|      }
 | 
| +    if (flags & flag) return Nothing<RegExp::Flags>();
 | 
| +    AddLiteralCharAdvance();
 | 
| +    flags |= flag;
 | 
|    }
 | 
|    literal.Complete();
 | 
|  
 | 
|    next_.location.end_pos = source_pos();
 | 
| -  return true;
 | 
| +  return Just(RegExp::Flags(flags));
 | 
|  }
 | 
|  
 | 
|  
 | 
| 
 |