Index: src/objects.cc |
diff --git a/src/objects.cc b/src/objects.cc |
index 0a3508dcccabf243d24dd5789a784cf73abeb544..b25f1ee9b4a69b4da9aa18eb547ac0d4706d6d61 100644 |
--- a/src/objects.cc |
+++ b/src/objects.cc |
@@ -7256,18 +7256,18 @@ MaybeObject* JSFunction::SetPrototype(Object* value) { |
Object* JSFunction::RemovePrototype() { |
Context* global_context = context()->global_context(); |
- Map* no_prototype_map = shared()->strict_mode() |
- ? global_context->strict_mode_function_without_prototype_map() |
- : global_context->function_without_prototype_map(); |
+ Map* no_prototype_map = shared()->is_classic_mode() |
+ ? global_context->function_without_prototype_map() |
+ : global_context->strict_mode_function_without_prototype_map(); |
if (map() == no_prototype_map) { |
// Be idempotent. |
return this; |
} |
- ASSERT(!shared()->strict_mode() || |
- map() == global_context->strict_mode_function_map()); |
- ASSERT(shared()->strict_mode() || map() == global_context->function_map()); |
+ ASSERT(map() == (shared()->is_classic_mode() |
+ ? global_context->function_map() |
+ : global_context->strict_mode_function_map())); |
set_map(no_prototype_map); |
set_prototype_or_initial_map(no_prototype_map->GetHeap()->the_hole_value()); |
@@ -10297,11 +10297,11 @@ class StringSharedKey : public HashTableKey { |
public: |
StringSharedKey(String* source, |
SharedFunctionInfo* shared, |
- StrictModeFlag strict_mode, |
+ LanguageMode language_mode, |
int scope_position) |
: source_(source), |
shared_(shared), |
- strict_mode_(strict_mode), |
+ language_mode_(language_mode), |
scope_position_(scope_position) { } |
bool IsMatch(Object* other) { |
@@ -10309,11 +10309,12 @@ class StringSharedKey : public HashTableKey { |
FixedArray* other_array = FixedArray::cast(other); |
SharedFunctionInfo* shared = SharedFunctionInfo::cast(other_array->get(0)); |
if (shared != shared_) return false; |
- int strict_unchecked = Smi::cast(other_array->get(2))->value(); |
- ASSERT(strict_unchecked == kStrictMode || |
- strict_unchecked == kNonStrictMode); |
- StrictModeFlag strict_mode = static_cast<StrictModeFlag>(strict_unchecked); |
- if (strict_mode != strict_mode_) return false; |
+ int language_unchecked = Smi::cast(other_array->get(2))->value(); |
+ ASSERT(language_unchecked == CLASSIC_MODE || |
+ language_unchecked == STRICT_MODE || |
+ language_unchecked == EXTENDED_MODE); |
+ LanguageMode language_mode = static_cast<LanguageMode>(language_unchecked); |
+ if (language_mode != language_mode_) return false; |
int scope_position = Smi::cast(other_array->get(3))->value(); |
if (scope_position != scope_position_) return false; |
String* source = String::cast(other_array->get(1)); |
@@ -10322,7 +10323,7 @@ class StringSharedKey : public HashTableKey { |
static uint32_t StringSharedHashHelper(String* source, |
SharedFunctionInfo* shared, |
- StrictModeFlag strict_mode, |
+ LanguageMode language_mode, |
int scope_position) { |
uint32_t hash = source->Hash(); |
if (shared->HasSourceCode()) { |
@@ -10333,7 +10334,8 @@ class StringSharedKey : public HashTableKey { |
// collection. |
Script* script = Script::cast(shared->script()); |
hash ^= String::cast(script->source())->Hash(); |
- if (strict_mode == kStrictMode) hash ^= 0x8000; |
+ if (language_mode == STRICT_MODE) hash ^= 0x8000; |
+ if (language_mode == EXTENDED_MODE) hash ^= 0x0080; |
hash += scope_position; |
} |
return hash; |
@@ -10341,19 +10343,21 @@ class StringSharedKey : public HashTableKey { |
uint32_t Hash() { |
return StringSharedHashHelper( |
- source_, shared_, strict_mode_, scope_position_); |
+ source_, shared_, language_mode_, scope_position_); |
} |
uint32_t HashForObject(Object* obj) { |
FixedArray* other_array = FixedArray::cast(obj); |
SharedFunctionInfo* shared = SharedFunctionInfo::cast(other_array->get(0)); |
String* source = String::cast(other_array->get(1)); |
- int strict_unchecked = Smi::cast(other_array->get(2))->value(); |
- ASSERT(strict_unchecked == kStrictMode || |
- strict_unchecked == kNonStrictMode); |
- StrictModeFlag strict_mode = static_cast<StrictModeFlag>(strict_unchecked); |
+ int language_unchecked = Smi::cast(other_array->get(2))->value(); |
+ ASSERT(language_unchecked == CLASSIC_MODE || |
+ language_unchecked == STRICT_MODE || |
+ language_unchecked == EXTENDED_MODE); |
+ LanguageMode language_mode = static_cast<LanguageMode>(language_unchecked); |
int scope_position = Smi::cast(other_array->get(3))->value(); |
- return StringSharedHashHelper(source, shared, strict_mode, scope_position); |
+ return StringSharedHashHelper( |
+ source, shared, language_mode, scope_position); |
} |
MUST_USE_RESULT MaybeObject* AsObject() { |
@@ -10364,7 +10368,7 @@ class StringSharedKey : public HashTableKey { |
FixedArray* other_array = FixedArray::cast(obj); |
other_array->set(0, shared_); |
other_array->set(1, source_); |
- other_array->set(2, Smi::FromInt(strict_mode_)); |
+ other_array->set(2, Smi::FromInt(language_mode_)); |
other_array->set(3, Smi::FromInt(scope_position_)); |
return other_array; |
} |
@@ -10372,7 +10376,7 @@ class StringSharedKey : public HashTableKey { |
private: |
String* source_; |
SharedFunctionInfo* shared_; |
- StrictModeFlag strict_mode_; |
+ LanguageMode language_mode_; |
int scope_position_; |
}; |
@@ -11528,11 +11532,11 @@ Object* CompilationCacheTable::Lookup(String* src) { |
Object* CompilationCacheTable::LookupEval(String* src, |
Context* context, |
- StrictModeFlag strict_mode, |
+ LanguageMode language_mode, |
int scope_position) { |
StringSharedKey key(src, |
context->closure()->shared(), |
- strict_mode, |
+ language_mode, |
scope_position); |
int entry = FindEntry(&key); |
if (entry == kNotFound) return GetHeap()->undefined_value(); |
@@ -11572,7 +11576,7 @@ MaybeObject* CompilationCacheTable::PutEval(String* src, |
int scope_position) { |
StringSharedKey key(src, |
context->closure()->shared(), |
- value->strict_mode_flag(), |
+ value->language_mode(), |
scope_position); |
Object* obj; |
{ MaybeObject* maybe_obj = EnsureCapacity(1, &key); |