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