| Index: src/hydrogen.cc
|
| diff --git a/src/hydrogen.cc b/src/hydrogen.cc
|
| index 687d17890aafbd381e2c0b4079f0722c58d8a32f..a0f1e567a41a4d4657b9bdea276ce63944a73118 100644
|
| --- a/src/hydrogen.cc
|
| +++ b/src/hydrogen.cc
|
| @@ -1283,7 +1283,7 @@ HValue* HGraphBuilder::BuildWrapReceiver(HValue* object, HValue* function) {
|
| Handle<JSFunction> f = Handle<JSFunction>::cast(
|
| HConstant::cast(function)->handle(isolate()));
|
| SharedFunctionInfo* shared = f->shared();
|
| - if (!shared->is_sloppy_mode() || shared->native()) return object;
|
| + if (shared->strict_mode() == STRICT || shared->native()) return object;
|
| }
|
| return Add<HWrapReceiver>(object, function);
|
| }
|
| @@ -5602,7 +5602,7 @@ bool HOptimizedGraphBuilder::PropertyAccessInfo::CanAccessAsMonomorphic(
|
|
|
| static bool NeedsWrappingFor(Type* type, Handle<JSFunction> target) {
|
| return type->Is(Type::NumberOrString()) &&
|
| - target->shared()->is_sloppy_mode() &&
|
| + target->shared()->strict_mode() == SLOPPY &&
|
| !target->shared()->native();
|
| }
|
|
|
| @@ -5936,7 +5936,7 @@ void HOptimizedGraphBuilder::HandleGlobalVariableAssignment(
|
| HObjectAccess::ForContextSlot(Context::GLOBAL_OBJECT_INDEX));
|
| HStoreNamedGeneric* instr =
|
| Add<HStoreNamedGeneric>(global_object, var->name(),
|
| - value, function_strict_mode_flag());
|
| + value, function_strict_mode());
|
| USE(instr);
|
| ASSERT(instr->HasObservableSideEffects());
|
| Add<HSimulate>(ast_id, REMOVABLE_SIMULATE);
|
| @@ -5971,7 +5971,7 @@ void HOptimizedGraphBuilder::HandleCompoundAssignment(Assignment* expr) {
|
|
|
| case Variable::PARAMETER:
|
| case Variable::LOCAL:
|
| - if (var->mode() == CONST) {
|
| + if (var->mode() == CONST_LEGACY) {
|
| return Bailout(kUnsupportedConstCompoundAssignment);
|
| }
|
| BindIfLive(var, Top());
|
| @@ -6000,11 +6000,11 @@ void HOptimizedGraphBuilder::HandleCompoundAssignment(Assignment* expr) {
|
| mode = HStoreContextSlot::kCheckDeoptimize;
|
| break;
|
| case CONST:
|
| - return ast_context()->ReturnValue(Pop());
|
| - case CONST_HARMONY:
|
| // This case is checked statically so no need to
|
| // perform checks here
|
| UNREACHABLE();
|
| + case CONST_LEGACY:
|
| + return ast_context()->ReturnValue(Pop());
|
| default:
|
| mode = HStoreContextSlot::kNoCheck;
|
| }
|
| @@ -6069,6 +6069,10 @@ void HOptimizedGraphBuilder::VisitAssignment(Assignment* expr) {
|
|
|
| if (var->mode() == CONST) {
|
| if (expr->op() != Token::INIT_CONST) {
|
| + return Bailout(kNonInitializerAssignmentToConst);
|
| + }
|
| + } else if (var->mode() == CONST_LEGACY) {
|
| + if (expr->op() != Token::INIT_CONST_LEGACY) {
|
| CHECK_ALIVE(VisitForValue(expr->value()));
|
| return ast_context()->ReturnValue(Pop());
|
| }
|
| @@ -6079,10 +6083,6 @@ void HOptimizedGraphBuilder::VisitAssignment(Assignment* expr) {
|
| HValue* old_value = environment()->Lookup(var);
|
| Add<HUseConst>(old_value);
|
| }
|
| - } else if (var->mode() == CONST_HARMONY) {
|
| - if (expr->op() != Token::INIT_CONST_HARMONY) {
|
| - return Bailout(kNonInitializerAssignmentToConst);
|
| - }
|
| }
|
|
|
| if (proxy->IsArguments()) return Bailout(kAssignmentToArguments);
|
| @@ -6138,20 +6138,20 @@ void HOptimizedGraphBuilder::VisitAssignment(Assignment* expr) {
|
| mode = HStoreContextSlot::kCheckDeoptimize;
|
| break;
|
| case CONST:
|
| - return ast_context()->ReturnValue(Pop());
|
| - case CONST_HARMONY:
|
| // This case is checked statically so no need to
|
| // perform checks here
|
| UNREACHABLE();
|
| + case CONST_LEGACY:
|
| + return ast_context()->ReturnValue(Pop());
|
| default:
|
| mode = HStoreContextSlot::kNoCheck;
|
| }
|
| } else if (expr->op() == Token::INIT_VAR ||
|
| expr->op() == Token::INIT_LET ||
|
| - expr->op() == Token::INIT_CONST_HARMONY) {
|
| + expr->op() == Token::INIT_CONST) {
|
| mode = HStoreContextSlot::kNoCheck;
|
| } else {
|
| - ASSERT(expr->op() == Token::INIT_CONST);
|
| + ASSERT(expr->op() == Token::INIT_CONST_LEGACY);
|
|
|
| mode = HStoreContextSlot::kCheckIgnoreAssignment;
|
| }
|
| @@ -6245,8 +6245,7 @@ HInstruction* HOptimizedGraphBuilder::BuildNamedGeneric(
|
| if (access_type == LOAD) {
|
| return New<HLoadNamedGeneric>(object, name);
|
| } else {
|
| - return New<HStoreNamedGeneric>(
|
| - object, name, value, function_strict_mode_flag());
|
| + return New<HStoreNamedGeneric>(object, name, value, function_strict_mode());
|
| }
|
| }
|
|
|
| @@ -6260,8 +6259,7 @@ HInstruction* HOptimizedGraphBuilder::BuildKeyedGeneric(
|
| if (access_type == LOAD) {
|
| return New<HLoadKeyedGeneric>(object, key);
|
| } else {
|
| - return New<HStoreKeyedGeneric>(
|
| - object, key, value, function_strict_mode_flag());
|
| + return New<HStoreKeyedGeneric>(object, key, value, function_strict_mode());
|
| }
|
| }
|
|
|
| @@ -7949,7 +7947,7 @@ bool HOptimizedGraphBuilder::TryCallApply(Call* expr) {
|
| HValue* HOptimizedGraphBuilder::ImplicitReceiverFor(HValue* function,
|
| Handle<JSFunction> target) {
|
| SharedFunctionInfo* shared = target->shared();
|
| - if (shared->is_sloppy_mode() && !shared->native()) {
|
| + if (shared->strict_mode() == SLOPPY && !shared->native()) {
|
| // Cannot embed a direct reference to the global proxy
|
| // as is it dropped on deserialization.
|
| CHECK(!Serializer::enabled());
|
| @@ -8666,7 +8664,7 @@ void HOptimizedGraphBuilder::VisitDelete(UnaryOperation* expr) {
|
| HValue* function = AddLoadJSBuiltin(Builtins::DELETE);
|
| Add<HPushArgument>(obj);
|
| Add<HPushArgument>(key);
|
| - Add<HPushArgument>(Add<HConstant>(function_strict_mode_flag()));
|
| + Add<HPushArgument>(Add<HConstant>(function_strict_mode()));
|
| // TODO(olivf) InvokeFunction produces a check for the parameter count,
|
| // even though we are certain to pass the correct number of arguments here.
|
| HInstruction* instr = New<HInvokeFunction>(function, 3);
|
| @@ -8830,7 +8828,7 @@ void HOptimizedGraphBuilder::VisitCountOperation(CountOperation* expr) {
|
|
|
| if (proxy != NULL) {
|
| Variable* var = proxy->var();
|
| - if (var->mode() == CONST) {
|
| + if (var->mode() == CONST_LEGACY) {
|
| return Bailout(kUnsupportedCountOperationWithConst);
|
| }
|
| // Argument of the count operation is a variable, not a property.
|
| @@ -10038,7 +10036,7 @@ void HOptimizedGraphBuilder::VisitDeclarations(
|
| for (int i = 0; i < globals_.length(); ++i) array->set(i, *globals_.at(i));
|
| int flags = DeclareGlobalsEvalFlag::encode(current_info()->is_eval()) |
|
| DeclareGlobalsNativeFlag::encode(current_info()->is_native()) |
|
| - DeclareGlobalsLanguageMode::encode(current_info()->language_mode());
|
| + DeclareGlobalsStrictMode::encode(current_info()->strict_mode());
|
| Add<HDeclareGlobals>(array, flags);
|
| globals_.Clear();
|
| }
|
| @@ -10050,7 +10048,7 @@ void HOptimizedGraphBuilder::VisitVariableDeclaration(
|
| VariableProxy* proxy = declaration->proxy();
|
| VariableMode mode = declaration->mode();
|
| Variable* variable = proxy->var();
|
| - bool hole_init = mode == CONST || mode == CONST_HARMONY || mode == LET;
|
| + bool hole_init = mode == LET || mode == CONST || mode == CONST_LEGACY;
|
| switch (variable->location()) {
|
| case Variable::UNALLOCATED:
|
| globals_.Add(variable->name(), zone());
|
|
|