Chromium Code Reviews| Index: src/ia32/full-codegen-ia32.cc |
| diff --git a/src/ia32/full-codegen-ia32.cc b/src/ia32/full-codegen-ia32.cc |
| index 3cdca4c6219e6b18e8fd64d82ab0c01d3628eb82..755e73552e3d69289279b414a21022ca6f8adb75 100644 |
| --- a/src/ia32/full-codegen-ia32.cc |
| +++ b/src/ia32/full-codegen-ia32.cc |
| @@ -740,7 +740,9 @@ void FullCodeGenerator::EmitDeclaration(Variable* variable, |
| prop->key()->AsLiteral()->handle()->IsSmi()); |
| __ Set(ecx, Immediate(prop->key()->AsLiteral()->handle())); |
| - Handle<Code> ic(Builtins::builtin(Builtins::KeyedStoreIC_Initialize)); |
| + Handle<Code> ic(Builtins::builtin(is_strict() |
| + ? Builtins::KeyedStoreIC_Initialize_Strict |
| + : Builtins::KeyedStoreIC_Initialize)); |
| EmitCallIC(ic, RelocInfo::CODE_TARGET); |
| } |
| } |
| @@ -1380,7 +1382,9 @@ void FullCodeGenerator::VisitObjectLiteral(ObjectLiteral* expr) { |
| VisitForAccumulatorValue(value); |
| __ mov(ecx, Immediate(key->handle())); |
| __ mov(edx, Operand(esp, 0)); |
| - Handle<Code> ic(Builtins::builtin(Builtins::StoreIC_Initialize)); |
| + Handle<Code> ic(Builtins::builtin( |
| + is_strict() ? Builtins::StoreIC_Initialize_Strict |
| + : Builtins::StoreIC_Initialize)); |
| EmitCallIC(ic, RelocInfo::CODE_TARGET); |
| PrepareForBailoutForId(key->id(), NO_REGISTERS); |
| } else { |
| @@ -1394,7 +1398,8 @@ void FullCodeGenerator::VisitObjectLiteral(ObjectLiteral* expr) { |
| VisitForStackValue(key); |
| VisitForStackValue(value); |
| if (property->emit_store()) { |
| - __ CallRuntime(Runtime::kSetProperty, 3); |
| + __ push(Immediate(Smi::FromInt(NONE))); // PropertyAttributes |
| + __ CallRuntime(Runtime::kSetProperty, 4); |
| } else { |
| __ Drop(3); |
| } |
| @@ -1985,7 +1990,9 @@ void FullCodeGenerator::EmitAssignment(Expression* expr, int bailout_ast_id) { |
| __ mov(edx, eax); |
| __ pop(eax); // Restore value. |
| __ mov(ecx, prop->key()->AsLiteral()->handle()); |
| - Handle<Code> ic(Builtins::builtin(Builtins::StoreIC_Initialize)); |
| + Handle<Code> ic(Builtins::builtin( |
| + is_strict() ? Builtins::StoreIC_Initialize_Strict |
| + : Builtins::StoreIC_Initialize)); |
| EmitCallIC(ic, RelocInfo::CODE_TARGET); |
| break; |
| } |
| @@ -2006,7 +2013,9 @@ void FullCodeGenerator::EmitAssignment(Expression* expr, int bailout_ast_id) { |
| __ pop(edx); |
| } |
| __ pop(eax); // Restore value. |
| - Handle<Code> ic(Builtins::builtin(Builtins::KeyedStoreIC_Initialize)); |
| + Handle<Code> ic(Builtins::builtin( |
| + is_strict() ? Builtins::KeyedStoreIC_Initialize_Strict |
| + : Builtins::KeyedStoreIC_Initialize)); |
| EmitCallIC(ic, RelocInfo::CODE_TARGET); |
| break; |
| } |
| @@ -2101,7 +2110,8 @@ void FullCodeGenerator::EmitVariableAssignment(Variable* var, |
| __ push(eax); // Value. |
| __ push(esi); // Context. |
| __ push(Immediate(var->name())); |
| - __ CallRuntime(Runtime::kStoreContextSlot, 3); |
| + __ push(Immediate(Smi::FromInt(strict_mode_flag()))); |
| + __ CallRuntime(Runtime::kStoreContextSlot, 4); |
|
Martin Maly
2011/02/24 06:33:34
function non_strict() {
with(o) { // o has read-
|
| break; |
| } |
| } |
| @@ -2132,7 +2142,9 @@ void FullCodeGenerator::EmitNamedPropertyAssignment(Assignment* expr) { |
| } else { |
| __ pop(edx); |
| } |
| - Handle<Code> ic(Builtins::builtin(Builtins::StoreIC_Initialize)); |
| + Handle<Code> ic(Builtins::builtin( |
| + is_strict() ? Builtins::StoreIC_Initialize_Strict |
| + : Builtins::StoreIC_Initialize)); |
| EmitCallIC(ic, RelocInfo::CODE_TARGET); |
| // If the assignment ends an initialization block, revert to fast case. |
| @@ -2170,7 +2182,9 @@ void FullCodeGenerator::EmitKeyedPropertyAssignment(Assignment* expr) { |
| } |
| // Record source code position before IC call. |
| SetSourcePosition(expr->position()); |
| - Handle<Code> ic(Builtins::builtin(Builtins::KeyedStoreIC_Initialize)); |
| + Handle<Code> ic(Builtins::builtin( |
| + is_strict() ? Builtins::KeyedStoreIC_Initialize_Strict |
| + : Builtins::KeyedStoreIC_Initialize)); |
| EmitCallIC(ic, RelocInfo::CODE_TARGET); |
| // If the assignment ends an initialization block, revert to fast case. |
| @@ -4023,7 +4037,9 @@ void FullCodeGenerator::VisitCountOperation(CountOperation* expr) { |
| case NAMED_PROPERTY: { |
| __ mov(ecx, prop->key()->AsLiteral()->handle()); |
| __ pop(edx); |
| - Handle<Code> ic(Builtins::builtin(Builtins::StoreIC_Initialize)); |
| + Handle<Code> ic(Builtins::builtin( |
| + is_strict() ? Builtins::StoreIC_Initialize_Strict |
| + : Builtins::StoreIC_Initialize)); |
| EmitCallIC(ic, RelocInfo::CODE_TARGET); |
| PrepareForBailoutForId(expr->AssignmentId(), TOS_REG); |
| if (expr->is_postfix()) { |
| @@ -4038,7 +4054,9 @@ void FullCodeGenerator::VisitCountOperation(CountOperation* expr) { |
| case KEYED_PROPERTY: { |
| __ pop(ecx); |
| __ pop(edx); |
| - Handle<Code> ic(Builtins::builtin(Builtins::KeyedStoreIC_Initialize)); |
| + Handle<Code> ic(Builtins::builtin( |
| + is_strict() ? Builtins::KeyedStoreIC_Initialize_Strict |
| + : Builtins::KeyedStoreIC_Initialize)); |
| EmitCallIC(ic, RelocInfo::CODE_TARGET); |
| PrepareForBailoutForId(expr->AssignmentId(), TOS_REG); |
| if (expr->is_postfix()) { |