| Index: src/objects.cc
 | 
| diff --git a/src/objects.cc b/src/objects.cc
 | 
| index 2347d1b5647df89193ffbb793b50295a6fa28a22..c6a737ea0adbdec3f1b6eee896b20cc675a64802 100644
 | 
| --- a/src/objects.cc
 | 
| +++ b/src/objects.cc
 | 
| @@ -519,7 +519,7 @@ Handle<Object> JSProxy::SetElementWithHandler(Handle<JSProxy> proxy,
 | 
|                                                Handle<JSReceiver> receiver,
 | 
|                                                uint32_t index,
 | 
|                                                Handle<Object> value,
 | 
| -                                              StrictModeFlag strict_mode) {
 | 
| +                                              StrictMode strict_mode) {
 | 
|    Isolate* isolate = proxy->GetIsolate();
 | 
|    Handle<String> name = isolate->factory()->Uint32ToString(index);
 | 
|    return SetPropertyWithHandler(
 | 
| @@ -2144,7 +2144,7 @@ Handle<Object> JSObject::AddProperty(Handle<JSObject> object,
 | 
|                                       Handle<Name> name,
 | 
|                                       Handle<Object> value,
 | 
|                                       PropertyAttributes attributes,
 | 
| -                                     StrictModeFlag strict_mode,
 | 
| +                                     StrictMode strict_mode,
 | 
|                                       JSReceiver::StoreFromKeyed store_mode,
 | 
|                                       ExtensibilityCheck extensibility_check,
 | 
|                                       ValueType value_type,
 | 
| @@ -2160,7 +2160,7 @@ Handle<Object> JSObject::AddProperty(Handle<JSObject> object,
 | 
|  
 | 
|    if (extensibility_check == PERFORM_EXTENSIBILITY_CHECK &&
 | 
|        !object->map()->is_extensible()) {
 | 
| -    if (strict_mode == kSloppyMode) {
 | 
| +    if (strict_mode == SLOPPY) {
 | 
|        return value;
 | 
|      } else {
 | 
|        Handle<Object> args[1] = { name };
 | 
| @@ -2233,7 +2233,7 @@ Handle<Object> JSObject::SetPropertyPostInterceptor(
 | 
|      Handle<Name> name,
 | 
|      Handle<Object> value,
 | 
|      PropertyAttributes attributes,
 | 
| -    StrictModeFlag strict_mode) {
 | 
| +    StrictMode strict_mode) {
 | 
|    // Check local property, ignore interceptor.
 | 
|    LookupResult result(object->GetIsolate());
 | 
|    object->LocalLookupRealNamedProperty(*name, &result);
 | 
| @@ -2848,7 +2848,7 @@ Handle<Object> JSObject::SetPropertyWithInterceptor(
 | 
|      Handle<Name> name,
 | 
|      Handle<Object> value,
 | 
|      PropertyAttributes attributes,
 | 
| -    StrictModeFlag strict_mode) {
 | 
| +    StrictMode strict_mode) {
 | 
|    // TODO(rossberg): Support symbols in the API.
 | 
|    if (name->IsSymbol()) return value;
 | 
|    Isolate* isolate = object->GetIsolate();
 | 
| @@ -2880,7 +2880,7 @@ Handle<Object> JSReceiver::SetProperty(Handle<JSReceiver> object,
 | 
|                                         Handle<Name> name,
 | 
|                                         Handle<Object> value,
 | 
|                                         PropertyAttributes attributes,
 | 
| -                                       StrictModeFlag strict_mode,
 | 
| +                                       StrictMode strict_mode,
 | 
|                                         StoreFromKeyed store_mode) {
 | 
|    LookupResult result(object->GetIsolate());
 | 
|    object->LocalLookup(*name, &result, true);
 | 
| @@ -2897,7 +2897,7 @@ Handle<Object> JSObject::SetPropertyWithCallback(Handle<JSObject> object,
 | 
|                                                   Handle<Name> name,
 | 
|                                                   Handle<Object> value,
 | 
|                                                   Handle<JSObject> holder,
 | 
| -                                                 StrictModeFlag strict_mode) {
 | 
| +                                                 StrictMode strict_mode) {
 | 
|    Isolate* isolate = object->GetIsolate();
 | 
|  
 | 
|    // We should never get here to initialize a const with the hole
 | 
| @@ -2956,9 +2956,7 @@ Handle<Object> JSObject::SetPropertyWithCallback(Handle<JSObject> object,
 | 
|        return SetPropertyWithDefinedSetter(
 | 
|            object, Handle<JSReceiver>::cast(setter), value);
 | 
|      } else {
 | 
| -      if (strict_mode == kSloppyMode) {
 | 
| -        return value;
 | 
| -      }
 | 
| +      if (strict_mode == SLOPPY) return value;
 | 
|        Handle<Object> args[2] = { name, holder };
 | 
|        Handle<Object> error =
 | 
|            isolate->factory()->NewTypeError("no_setter_in_callback",
 | 
| @@ -3009,7 +3007,7 @@ Handle<Object> JSObject::SetElementWithCallbackSetterInPrototypes(
 | 
|      uint32_t index,
 | 
|      Handle<Object> value,
 | 
|      bool* found,
 | 
| -    StrictModeFlag strict_mode) {
 | 
| +    StrictMode strict_mode) {
 | 
|    Isolate *isolate = object->GetIsolate();
 | 
|    for (Handle<Object> proto = handle(object->GetPrototype(), isolate);
 | 
|         !proto->IsNull();
 | 
| @@ -3049,7 +3047,7 @@ Handle<Object> JSObject::SetPropertyViaPrototypes(Handle<JSObject> object,
 | 
|                                                    Handle<Name> name,
 | 
|                                                    Handle<Object> value,
 | 
|                                                    PropertyAttributes attributes,
 | 
| -                                                  StrictModeFlag strict_mode,
 | 
| +                                                  StrictMode strict_mode,
 | 
|                                                    bool* done) {
 | 
|    Isolate* isolate = object->GetIsolate();
 | 
|  
 | 
| @@ -3093,7 +3091,7 @@ Handle<Object> JSObject::SetPropertyViaPrototypes(Handle<JSObject> object,
 | 
|  
 | 
|    // If we get here with *done true, we have encountered a read-only property.
 | 
|    if (*done) {
 | 
| -    if (strict_mode == kSloppyMode) return value;
 | 
| +    if (strict_mode == SLOPPY) return value;
 | 
|      Handle<Object> args[] = { name, object };
 | 
|      Handle<Object> error = isolate->factory()->NewTypeError(
 | 
|          "strict_read_only_property", HandleVector(args, ARRAY_SIZE(args)));
 | 
| @@ -3461,7 +3459,7 @@ Handle<Object> JSObject::SetPropertyWithFailedAccessCheck(
 | 
|      Handle<Name> name,
 | 
|      Handle<Object> value,
 | 
|      bool check_prototype,
 | 
| -    StrictModeFlag strict_mode) {
 | 
| +    StrictMode strict_mode) {
 | 
|    if (check_prototype && !result->IsProperty()) {
 | 
|      object->LookupRealNamedPropertyInPrototypes(*name, result);
 | 
|    }
 | 
| @@ -3528,7 +3526,7 @@ Handle<Object> JSReceiver::SetProperty(Handle<JSReceiver> object,
 | 
|                                         Handle<Name> key,
 | 
|                                         Handle<Object> value,
 | 
|                                         PropertyAttributes attributes,
 | 
| -                                       StrictModeFlag strict_mode,
 | 
| +                                       StrictMode strict_mode,
 | 
|                                         StoreFromKeyed store_mode) {
 | 
|    if (result->IsHandler()) {
 | 
|      return JSProxy::SetPropertyWithHandler(handle(result->proxy()),
 | 
| @@ -3560,7 +3558,7 @@ Handle<Object> JSProxy::SetPropertyWithHandler(Handle<JSProxy> proxy,
 | 
|                                                 Handle<Name> name,
 | 
|                                                 Handle<Object> value,
 | 
|                                                 PropertyAttributes attributes,
 | 
| -                                               StrictModeFlag strict_mode) {
 | 
| +                                               StrictMode strict_mode) {
 | 
|    Isolate* isolate = proxy->GetIsolate();
 | 
|  
 | 
|    // TODO(rossberg): adjust once there is a story for symbols vs proxies.
 | 
| @@ -3580,7 +3578,7 @@ Handle<Object> JSProxy::SetPropertyViaPrototypesWithHandler(
 | 
|      Handle<Name> name,
 | 
|      Handle<Object> value,
 | 
|      PropertyAttributes attributes,
 | 
| -    StrictModeFlag strict_mode,
 | 
| +    StrictMode strict_mode,
 | 
|      bool* done) {
 | 
|    Isolate* isolate = proxy->GetIsolate();
 | 
|    Handle<Object> handler(proxy->handler(), isolate);  // Trap might morph proxy.
 | 
| @@ -3648,7 +3646,7 @@ Handle<Object> JSProxy::SetPropertyViaPrototypesWithHandler(
 | 
|      ASSERT(writable->IsTrue() || writable->IsFalse());
 | 
|      *done = writable->IsFalse();
 | 
|      if (!*done) return isolate->factory()->the_hole_value();
 | 
| -    if (strict_mode == kSloppyMode) return value;
 | 
| +    if (strict_mode == SLOPPY) return value;
 | 
|      Handle<Object> args[] = { name, receiver };
 | 
|      Handle<Object> error = isolate->factory()->NewTypeError(
 | 
|          "strict_read_only_property", HandleVector(args, ARRAY_SIZE(args)));
 | 
| @@ -3667,7 +3665,7 @@ Handle<Object> JSProxy::SetPropertyViaPrototypesWithHandler(
 | 
|          receiver, Handle<JSReceiver>::cast(setter), value);
 | 
|    }
 | 
|  
 | 
| -  if (strict_mode == kSloppyMode) return value;
 | 
| +  if (strict_mode == SLOPPY) return value;
 | 
|    Handle<Object> args2[] = { name, proxy };
 | 
|    Handle<Object> error = isolate->factory()->NewTypeError(
 | 
|        "no_setter_in_callback", HandleVector(args2, ARRAY_SIZE(args2)));
 | 
| @@ -3917,7 +3915,7 @@ Handle<Object> JSObject::SetPropertyUsingTransition(
 | 
|      // of the map. If we get a fast copy of the map, all field representations
 | 
|      // will be tagged since the transition is omitted.
 | 
|      return JSObject::AddProperty(
 | 
| -        object, name, value, attributes, kSloppyMode,
 | 
| +        object, name, value, attributes, SLOPPY,
 | 
|          JSReceiver::CERTAINLY_NOT_STORE_FROM_KEYED,
 | 
|          JSReceiver::OMIT_EXTENSIBILITY_CHECK,
 | 
|          JSObject::FORCE_TAGGED, FORCE_FIELD, OMIT_TRANSITION);
 | 
| @@ -4029,7 +4027,7 @@ Handle<Object> JSObject::SetPropertyForResult(Handle<JSObject> object,
 | 
|                                                Handle<Name> name,
 | 
|                                                Handle<Object> value,
 | 
|                                                PropertyAttributes attributes,
 | 
| -                                              StrictModeFlag strict_mode,
 | 
| +                                              StrictMode strict_mode,
 | 
|                                                StoreFromKeyed store_mode) {
 | 
|    Isolate* isolate = object->GetIsolate();
 | 
|  
 | 
| @@ -4078,7 +4076,7 @@ Handle<Object> JSObject::SetPropertyForResult(Handle<JSObject> object,
 | 
|    }
 | 
|  
 | 
|    if (lookup->IsProperty() && lookup->IsReadOnly()) {
 | 
| -    if (strict_mode == kStrictMode) {
 | 
| +    if (strict_mode == STRICT) {
 | 
|        Handle<Object> args[] = { name, object };
 | 
|        Handle<Object> error = isolate->factory()->NewTypeError(
 | 
|            "strict_read_only_property", HandleVector(args, ARRAY_SIZE(args)));
 | 
| @@ -4184,7 +4182,7 @@ Handle<Object> JSObject::SetLocalPropertyIgnoreAttributes(
 | 
|    if (object->IsAccessCheckNeeded()) {
 | 
|      if (!isolate->MayNamedAccess(*object, *name, v8::ACCESS_SET)) {
 | 
|        return SetPropertyWithFailedAccessCheck(object, &lookup, name, value,
 | 
| -                                              false, kSloppyMode);
 | 
| +                                              false, SLOPPY);
 | 
|      }
 | 
|    }
 | 
|  
 | 
| @@ -4207,7 +4205,7 @@ Handle<Object> JSObject::SetLocalPropertyIgnoreAttributes(
 | 
|      TransitionFlag flag = lookup.IsFound()
 | 
|          ? OMIT_TRANSITION : INSERT_TRANSITION;
 | 
|      // Neither properties nor transitions found.
 | 
| -    return AddProperty(object, name, value, attributes, kSloppyMode,
 | 
| +    return AddProperty(object, name, value, attributes, SLOPPY,
 | 
|          MAY_BE_STORE_FROM_KEYED, extensibility_check, value_type, mode, flag);
 | 
|    }
 | 
|  
 | 
| @@ -5412,7 +5410,7 @@ bool JSObject::ReferencesObject(Object* obj) {
 | 
|      // Get the constructor function for arguments array.
 | 
|      JSObject* arguments_boilerplate =
 | 
|          heap->isolate()->context()->native_context()->
 | 
| -            arguments_boilerplate();
 | 
| +            sloppy_arguments_boilerplate();
 | 
|      JSFunction* arguments_function =
 | 
|          JSFunction::cast(arguments_boilerplate->map()->constructor());
 | 
|  
 | 
| @@ -5796,7 +5794,7 @@ Handle<JSObject> JSObjectWalkVisitor<ContextObject>::StructureWalk(
 | 
|            if (copying) {
 | 
|              // Creating object copy for literals. No strict mode needed.
 | 
|              CHECK_NOT_EMPTY_HANDLE(isolate, JSObject::SetProperty(
 | 
| -                copy, key_string, result, NONE, kSloppyMode));
 | 
| +                copy, key_string, result, NONE, SLOPPY));
 | 
|            }
 | 
|          }
 | 
|        }
 | 
| @@ -9800,15 +9798,15 @@ void JSFunction::SetPrototype(Handle<JSFunction> function,
 | 
|  
 | 
|  void JSFunction::RemovePrototype() {
 | 
|    Context* native_context = context()->native_context();
 | 
| -  Map* no_prototype_map = shared()->is_sloppy_mode()
 | 
| -      ? native_context->function_without_prototype_map()
 | 
| -      : native_context->strict_mode_function_without_prototype_map();
 | 
| +  Map* no_prototype_map = shared()->strict_mode() == SLOPPY
 | 
| +      ? native_context->sloppy_function_without_prototype_map()
 | 
| +      : native_context->strict_function_without_prototype_map();
 | 
|  
 | 
|    if (map() == no_prototype_map) return;
 | 
|  
 | 
| -  ASSERT(map() == (shared()->is_sloppy_mode()
 | 
| -                   ? native_context->function_map()
 | 
| -                   : native_context->strict_mode_function_map()));
 | 
| +  ASSERT(map() == (shared()->strict_mode() == SLOPPY
 | 
| +                   ? native_context->sloppy_function_map()
 | 
| +                   : native_context->strict_function_map()));
 | 
|  
 | 
|    set_map(no_prototype_map);
 | 
|    set_prototype_or_initial_map(no_prototype_map->GetHeap()->the_hole_value());
 | 
| @@ -11070,9 +11068,7 @@ void Code::PrintExtraICState(FILE* out, Kind kind, ExtraICState extra) {
 | 
|    switch (kind) {
 | 
|      case STORE_IC:
 | 
|      case KEYED_STORE_IC:
 | 
| -      if (extra == kStrictMode) {
 | 
| -        name = "STRICT";
 | 
| -      }
 | 
| +      if (extra == STRICT) name = "STRICT";
 | 
|        break;
 | 
|      default:
 | 
|        break;
 | 
| @@ -11482,12 +11478,12 @@ MaybeObject* JSArray::SetElementsLength(Object* len) {
 | 
|    if (delete_count > 0) {
 | 
|      for (int i = indices.length() - 1; i >= 0; i--) {
 | 
|        JSObject::SetElement(deleted, indices[i] - index, old_values[i], NONE,
 | 
| -                           kSloppyMode);
 | 
| +                           SLOPPY);
 | 
|      }
 | 
|  
 | 
|      SetProperty(deleted, isolate->factory()->length_string(),
 | 
|                  isolate->factory()->NewNumberFromUint(delete_count),
 | 
| -                NONE, kSloppyMode);
 | 
| +                NONE, SLOPPY);
 | 
|    }
 | 
|  
 | 
|    EnqueueSpliceRecord(self, index, deleted, add_count);
 | 
| @@ -11926,7 +11922,7 @@ Handle<Object> JSObject::SetElementWithInterceptor(
 | 
|      uint32_t index,
 | 
|      Handle<Object> value,
 | 
|      PropertyAttributes attributes,
 | 
| -    StrictModeFlag strict_mode,
 | 
| +    StrictMode strict_mode,
 | 
|      bool check_prototype,
 | 
|      SetPropertyMode set_mode) {
 | 
|    Isolate* isolate = object->GetIsolate();
 | 
| @@ -12014,7 +12010,7 @@ Handle<Object> JSObject::SetElementWithCallback(Handle<JSObject> object,
 | 
|                                                  uint32_t index,
 | 
|                                                  Handle<Object> value,
 | 
|                                                  Handle<JSObject> holder,
 | 
| -                                                StrictModeFlag strict_mode) {
 | 
| +                                                StrictMode strict_mode) {
 | 
|    Isolate* isolate = object->GetIsolate();
 | 
|  
 | 
|    // We should never get here to initialize a const with the hole
 | 
| @@ -12053,9 +12049,7 @@ Handle<Object> JSObject::SetElementWithCallback(Handle<JSObject> object,
 | 
|        return SetPropertyWithDefinedSetter(
 | 
|            object, Handle<JSReceiver>::cast(setter), value);
 | 
|      } else {
 | 
| -      if (strict_mode == kSloppyMode) {
 | 
| -        return value;
 | 
| -      }
 | 
| +      if (strict_mode == SLOPPY) return value;
 | 
|        Handle<Object> key(isolate->factory()->NewNumberFromUint(index));
 | 
|        Handle<Object> args[2] = { key, holder };
 | 
|        Handle<Object> error = isolate->factory()->NewTypeError(
 | 
| @@ -12103,7 +12097,7 @@ bool JSObject::HasDictionaryArgumentsElements() {
 | 
|  Handle<Object> JSObject::SetFastElement(Handle<JSObject> object,
 | 
|                                          uint32_t index,
 | 
|                                          Handle<Object> value,
 | 
| -                                        StrictModeFlag strict_mode,
 | 
| +                                        StrictMode strict_mode,
 | 
|                                          bool check_prototype) {
 | 
|    ASSERT(object->HasFastSmiOrObjectElements() ||
 | 
|           object->HasFastArgumentsElements());
 | 
| @@ -12232,7 +12226,7 @@ Handle<Object> JSObject::SetDictionaryElement(Handle<JSObject> object,
 | 
|                                                uint32_t index,
 | 
|                                                Handle<Object> value,
 | 
|                                                PropertyAttributes attributes,
 | 
| -                                              StrictModeFlag strict_mode,
 | 
| +                                              StrictMode strict_mode,
 | 
|                                                bool check_prototype,
 | 
|                                                SetPropertyMode set_mode) {
 | 
|    ASSERT(object->HasDictionaryElements() ||
 | 
| @@ -12264,7 +12258,7 @@ Handle<Object> JSObject::SetDictionaryElement(Handle<JSObject> object,
 | 
|              attributes, NORMAL, details.dictionary_index());
 | 
|          dictionary->DetailsAtPut(entry, details);
 | 
|        } else if (details.IsReadOnly() && !element->IsTheHole()) {
 | 
| -        if (strict_mode == kSloppyMode) {
 | 
| +        if (strict_mode == SLOPPY) {
 | 
|            return isolate->factory()->undefined_value();
 | 
|          } else {
 | 
|            Handle<Object> number = isolate->factory()->NewNumberFromUint(index);
 | 
| @@ -12302,7 +12296,7 @@ Handle<Object> JSObject::SetDictionaryElement(Handle<JSObject> object,
 | 
|      // When we set the is_extensible flag to false we always force the
 | 
|      // element into dictionary mode (and force them to stay there).
 | 
|      if (!object->map()->is_extensible()) {
 | 
| -      if (strict_mode == kSloppyMode) {
 | 
| +      if (strict_mode == SLOPPY) {
 | 
|          return isolate->factory()->undefined_value();
 | 
|        } else {
 | 
|          Handle<Object> number = isolate->factory()->NewNumberFromUint(index);
 | 
| @@ -12375,7 +12369,7 @@ Handle<Object> JSObject::SetFastDoubleElement(
 | 
|      Handle<JSObject> object,
 | 
|      uint32_t index,
 | 
|      Handle<Object> value,
 | 
| -    StrictModeFlag strict_mode,
 | 
| +    StrictMode strict_mode,
 | 
|      bool check_prototype) {
 | 
|    ASSERT(object->HasFastDoubleElements());
 | 
|  
 | 
| @@ -12472,7 +12466,7 @@ Handle<Object> JSReceiver::SetElement(Handle<JSReceiver> object,
 | 
|                                        uint32_t index,
 | 
|                                        Handle<Object> value,
 | 
|                                        PropertyAttributes attributes,
 | 
| -                                      StrictModeFlag strict_mode) {
 | 
| +                                      StrictMode strict_mode) {
 | 
|    if (object->IsJSProxy()) {
 | 
|      return JSProxy::SetElementWithHandler(
 | 
|          Handle<JSProxy>::cast(object), object, index, value, strict_mode);
 | 
| @@ -12485,7 +12479,7 @@ Handle<Object> JSReceiver::SetElement(Handle<JSReceiver> object,
 | 
|  Handle<Object> JSObject::SetOwnElement(Handle<JSObject> object,
 | 
|                                         uint32_t index,
 | 
|                                         Handle<Object> value,
 | 
| -                                       StrictModeFlag strict_mode) {
 | 
| +                                       StrictMode strict_mode) {
 | 
|    ASSERT(!object->HasExternalArrayElements());
 | 
|    return JSObject::SetElement(object, index, value, NONE, strict_mode, false);
 | 
|  }
 | 
| @@ -12495,7 +12489,7 @@ Handle<Object> JSObject::SetElement(Handle<JSObject> object,
 | 
|                                      uint32_t index,
 | 
|                                      Handle<Object> value,
 | 
|                                      PropertyAttributes attributes,
 | 
| -                                    StrictModeFlag strict_mode,
 | 
| +                                    StrictMode strict_mode,
 | 
|                                      bool check_prototype,
 | 
|                                      SetPropertyMode set_mode) {
 | 
|    Isolate* isolate = object->GetIsolate();
 | 
| @@ -12628,7 +12622,7 @@ Handle<Object> JSObject::SetElementWithoutInterceptor(
 | 
|      uint32_t index,
 | 
|      Handle<Object> value,
 | 
|      PropertyAttributes attributes,
 | 
| -    StrictModeFlag strict_mode,
 | 
| +    StrictMode strict_mode,
 | 
|      bool check_prototype,
 | 
|      SetPropertyMode set_mode) {
 | 
|    ASSERT(object->HasDictionaryElements() ||
 | 
| @@ -13713,11 +13707,11 @@ class StringSharedKey : public HashTableKey {
 | 
|   public:
 | 
|    StringSharedKey(String* source,
 | 
|                    SharedFunctionInfo* shared,
 | 
| -                  LanguageMode language_mode,
 | 
| +                  StrictMode strict_mode,
 | 
|                    int scope_position)
 | 
|        : source_(source),
 | 
|          shared_(shared),
 | 
| -        language_mode_(language_mode),
 | 
| +        strict_mode_(strict_mode),
 | 
|          scope_position_(scope_position) { }
 | 
|  
 | 
|    bool IsMatch(Object* other) {
 | 
| @@ -13725,12 +13719,10 @@ class StringSharedKey : public HashTableKey {
 | 
|      FixedArray* other_array = FixedArray::cast(other);
 | 
|      SharedFunctionInfo* shared = SharedFunctionInfo::cast(other_array->get(0));
 | 
|      if (shared != shared_) return false;
 | 
| -    int language_unchecked = Smi::cast(other_array->get(2))->value();
 | 
| -    ASSERT(language_unchecked == SLOPPY_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 strict_unchecked = Smi::cast(other_array->get(2))->value();
 | 
| +    ASSERT(strict_unchecked == SLOPPY || strict_unchecked == STRICT);
 | 
| +    StrictMode strict_mode = static_cast<StrictMode>(strict_unchecked);
 | 
| +    if (strict_mode != strict_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));
 | 
| @@ -13739,7 +13731,7 @@ class StringSharedKey : public HashTableKey {
 | 
|  
 | 
|    static uint32_t StringSharedHashHelper(String* source,
 | 
|                                           SharedFunctionInfo* shared,
 | 
| -                                         LanguageMode language_mode,
 | 
| +                                         StrictMode strict_mode,
 | 
|                                           int scope_position) {
 | 
|      uint32_t hash = source->Hash();
 | 
|      if (shared->HasSourceCode()) {
 | 
| @@ -13750,8 +13742,7 @@ class StringSharedKey : public HashTableKey {
 | 
|        // collection.
 | 
|        Script* script = Script::cast(shared->script());
 | 
|        hash ^= String::cast(script->source())->Hash();
 | 
| -      if (language_mode == STRICT_MODE) hash ^= 0x8000;
 | 
| -      if (language_mode == EXTENDED_MODE) hash ^= 0x0080;
 | 
| +      if (strict_mode == STRICT) hash ^= 0x8000;
 | 
|        hash += scope_position;
 | 
|      }
 | 
|      return hash;
 | 
| @@ -13759,21 +13750,19 @@ class StringSharedKey : public HashTableKey {
 | 
|  
 | 
|    uint32_t Hash() {
 | 
|      return StringSharedHashHelper(
 | 
| -        source_, shared_, language_mode_, scope_position_);
 | 
| +        source_, shared_, strict_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 language_unchecked = Smi::cast(other_array->get(2))->value();
 | 
| -    ASSERT(language_unchecked == SLOPPY_MODE ||
 | 
| -           language_unchecked == STRICT_MODE ||
 | 
| -           language_unchecked == EXTENDED_MODE);
 | 
| -    LanguageMode language_mode = static_cast<LanguageMode>(language_unchecked);
 | 
| +    int strict_unchecked = Smi::cast(other_array->get(2))->value();
 | 
| +    ASSERT(strict_unchecked == SLOPPY || strict_unchecked == STRICT);
 | 
| +    StrictMode strict_mode = static_cast<StrictMode>(strict_unchecked);
 | 
|      int scope_position = Smi::cast(other_array->get(3))->value();
 | 
|      return StringSharedHashHelper(
 | 
| -        source, shared, language_mode, scope_position);
 | 
| +        source, shared, strict_mode, scope_position);
 | 
|    }
 | 
|  
 | 
|    MUST_USE_RESULT MaybeObject* AsObject(Heap* heap) {
 | 
| @@ -13784,7 +13773,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(language_mode_));
 | 
| +    other_array->set(2, Smi::FromInt(strict_mode_));
 | 
|      other_array->set(3, Smi::FromInt(scope_position_));
 | 
|      return other_array;
 | 
|    }
 | 
| @@ -13792,7 +13781,7 @@ class StringSharedKey : public HashTableKey {
 | 
|   private:
 | 
|    String* source_;
 | 
|    SharedFunctionInfo* shared_;
 | 
| -  LanguageMode language_mode_;
 | 
| +  StrictMode strict_mode_;
 | 
|    int scope_position_;
 | 
|  };
 | 
|  
 | 
| @@ -14985,22 +14974,11 @@ MaybeObject* StringTable::LookupKey(HashTableKey* key, Object** s) {
 | 
|  }
 | 
|  
 | 
|  
 | 
| -// The key for the script compilation cache is dependent on the mode flags,
 | 
| -// because they change the global language mode and thus binding behaviour.
 | 
| -// If flags change at some point, we must ensure that we do not hit the cache
 | 
| -// for code compiled with different settings.
 | 
| -static LanguageMode CurrentGlobalLanguageMode() {
 | 
| -  return FLAG_use_strict
 | 
| -      ? (FLAG_harmony_scoping ? EXTENDED_MODE : STRICT_MODE)
 | 
| -      : SLOPPY_MODE;
 | 
| -}
 | 
| -
 | 
| -
 | 
|  Object* CompilationCacheTable::Lookup(String* src, Context* context) {
 | 
|    SharedFunctionInfo* shared = context->closure()->shared();
 | 
|    StringSharedKey key(src,
 | 
|                        shared,
 | 
| -                      CurrentGlobalLanguageMode(),
 | 
| +                      FLAG_use_strict ? STRICT : SLOPPY,
 | 
|                        RelocInfo::kNoPosition);
 | 
|    int entry = FindEntry(&key);
 | 
|    if (entry == kNotFound) return GetHeap()->undefined_value();
 | 
| @@ -15010,11 +14988,11 @@ Object* CompilationCacheTable::Lookup(String* src, Context* context) {
 | 
|  
 | 
|  Object* CompilationCacheTable::LookupEval(String* src,
 | 
|                                            Context* context,
 | 
| -                                          LanguageMode language_mode,
 | 
| +                                          StrictMode strict_mode,
 | 
|                                            int scope_position) {
 | 
|    StringSharedKey key(src,
 | 
|                        context->closure()->shared(),
 | 
| -                      language_mode,
 | 
| +                      strict_mode,
 | 
|                        scope_position);
 | 
|    int entry = FindEntry(&key);
 | 
|    if (entry == kNotFound) return GetHeap()->undefined_value();
 | 
| @@ -15037,7 +15015,7 @@ MaybeObject* CompilationCacheTable::Put(String* src,
 | 
|    SharedFunctionInfo* shared = context->closure()->shared();
 | 
|    StringSharedKey key(src,
 | 
|                        shared,
 | 
| -                      CurrentGlobalLanguageMode(),
 | 
| +                      FLAG_use_strict ? STRICT : SLOPPY,
 | 
|                        RelocInfo::kNoPosition);
 | 
|    CompilationCacheTable* cache;
 | 
|    MaybeObject* maybe_cache = EnsureCapacity(1, &key);
 | 
| @@ -15061,7 +15039,7 @@ MaybeObject* CompilationCacheTable::PutEval(String* src,
 | 
|                                              int scope_position) {
 | 
|    StringSharedKey key(src,
 | 
|                        context->closure()->shared(),
 | 
| -                      value->language_mode(),
 | 
| +                      value->strict_mode(),
 | 
|                        scope_position);
 | 
|    Object* obj;
 | 
|    { MaybeObject* maybe_obj = EnsureCapacity(1, &key);
 | 
| 
 |