| Index: src/runtime/runtime-regexp.cc
|
| diff --git a/src/runtime/runtime-regexp.cc b/src/runtime/runtime-regexp.cc
|
| index be9adfff41e5ac6794a7f704ede272ba88506f58..e2cf2028d9da87fc66af6efb856e83fc865fef85 100644
|
| --- a/src/runtime/runtime-regexp.cc
|
| +++ b/src/runtime/runtime-regexp.cc
|
| @@ -805,7 +805,7 @@ static JSRegExp::Flags RegExpFlagsFromString(Handle<String> flags,
|
| uint32_t value = JSRegExp::NONE;
|
| int length = flags->length();
|
| // A longer flags string cannot be valid.
|
| - if (length > 4) return JSRegExp::Flags(0);
|
| + if (length > 5) return JSRegExp::Flags(0);
|
| for (int i = 0; i < length; i++) {
|
| uint32_t flag = JSRegExp::NONE;
|
| switch (flags->Get(i)) {
|
| @@ -818,6 +818,10 @@ static JSRegExp::Flags RegExpFlagsFromString(Handle<String> flags,
|
| case 'm':
|
| flag = JSRegExp::MULTILINE;
|
| break;
|
| + case 'u':
|
| + if (!FLAG_harmony_unicode) return JSRegExp::Flags(0);
|
| + flag = JSRegExp::UNICODE_ESCAPES;
|
| + break;
|
| case 'y':
|
| if (!FLAG_harmony_regexps) return JSRegExp::Flags(0);
|
| flag = JSRegExp::STICKY;
|
| @@ -859,10 +863,12 @@ RUNTIME_FUNCTION(Runtime_RegExpInitializeAndCompile) {
|
| Handle<Object> ignore_case = factory->ToBoolean(flags.is_ignore_case());
|
| Handle<Object> multiline = factory->ToBoolean(flags.is_multiline());
|
| Handle<Object> sticky = factory->ToBoolean(flags.is_sticky());
|
| + Handle<Object> unicode = factory->ToBoolean(flags.is_unicode());
|
|
|
| Map* map = regexp->map();
|
| Object* constructor = map->constructor();
|
| - if (!FLAG_harmony_regexps && constructor->IsJSFunction() &&
|
| + if (!FLAG_harmony_regexps && !FLAG_harmony_unicode &&
|
| + constructor->IsJSFunction() &&
|
| JSFunction::cast(constructor)->initial_map() == map) {
|
| // If we still have the original map, set in-object properties directly.
|
| // Both true and false are immovable immortal objects so no need for write
|
| @@ -896,6 +902,10 @@ RUNTIME_FUNCTION(Runtime_RegExpInitializeAndCompile) {
|
| JSObject::SetOwnPropertyIgnoreAttributes(regexp, factory->sticky_string(),
|
| sticky, final).Check();
|
| }
|
| + if (FLAG_harmony_unicode) {
|
| + JSObject::SetOwnPropertyIgnoreAttributes(
|
| + regexp, factory->unicode_string(), unicode, final).Check();
|
| + }
|
| JSObject::SetOwnPropertyIgnoreAttributes(
|
| regexp, factory->last_index_string(), zero, writable).Check();
|
| }
|
|
|