| 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);
|
|
|