Chromium Code Reviews| Index: src/ia32/ic-ia32.cc |
| diff --git a/src/ia32/ic-ia32.cc b/src/ia32/ic-ia32.cc |
| index 73cd60df56f4b5d41cfb15452cc2f5b2c5b38c02..fdcd2d4c0c4bc6036abfa00e617f088ffc06e696 100644 |
| --- a/src/ia32/ic-ia32.cc |
| +++ b/src/ia32/ic-ia32.cc |
| @@ -761,7 +761,8 @@ void KeyedLoadIC::GenerateIndexedInterceptor(MacroAssembler* masm) { |
| } |
| -void KeyedStoreIC::GenerateGeneric(MacroAssembler* masm) { |
| +void KeyedStoreIC::GenerateGeneric(MacroAssembler* masm, |
| + StrictModeFlag strict_mode) { |
| // ----------- S t a t e ------------- |
| // -- eax : value |
| // -- ecx : key |
| @@ -801,7 +802,7 @@ void KeyedStoreIC::GenerateGeneric(MacroAssembler* masm) { |
| // Slow case: call runtime. |
| __ bind(&slow); |
| - GenerateRuntimeSetProperty(masm); |
| + GenerateRuntimeSetProperty(masm, strict_mode); |
| // Check whether the elements is a pixel array. |
| __ bind(&check_pixel_array); |
| @@ -1488,7 +1489,7 @@ void KeyedLoadIC::GenerateRuntimeGetProperty(MacroAssembler* masm) { |
| void StoreIC::GenerateMegamorphic(MacroAssembler* masm, |
| - Code::ExtraICState extra_ic_state) { |
| + StrictModeFlag strict_mode) { |
| // ----------- S t a t e ------------- |
| // -- eax : value |
| // -- ecx : name |
| @@ -1499,7 +1500,7 @@ void StoreIC::GenerateMegamorphic(MacroAssembler* masm, |
| Code::Flags flags = Code::ComputeFlags(Code::STORE_IC, |
| NOT_IN_LOOP, |
| MONOMORPHIC, |
| - extra_ic_state); |
| + strict_mode); |
| StubCache::GenerateProbe(masm, flags, edx, ecx, ebx, no_reg); |
| // Cache miss: Jump to runtime. |
| @@ -1617,7 +1618,7 @@ void StoreIC::GenerateNormal(MacroAssembler* masm) { |
| } |
| -void StoreIC::GenerateGlobalProxy(MacroAssembler* masm) { |
| +void StoreIC::GenerateGlobalProxy(MacroAssembler* masm, StrictModeFlag strict) { |
| // ----------- S t a t e ------------- |
| // -- eax : value |
| // -- ecx : name |
| @@ -1628,14 +1629,17 @@ void StoreIC::GenerateGlobalProxy(MacroAssembler* masm) { |
| __ push(edx); |
| __ push(ecx); |
| __ push(eax); |
| - __ push(ebx); |
| + __ push(Immediate(Smi::FromInt(NONE))); // PropertyAttributes |
| + __ push(Immediate(Smi::FromInt(strict))); |
| + __ push(ebx); // return address |
| // Do tail-call to runtime routine. |
| - __ TailCallRuntime(Runtime::kSetProperty, 3, 1); |
| + __ TailCallRuntime(Runtime::kSetProperty, 5, 1); |
|
Martin Maly
2011/02/27 23:04:04
I am keeping the argument count to 4-5. I hear the
Lasse Reichstein
2011/02/28 11:18:30
You could combine the values into a "StoreICFlag"
Martin Maly
2011/03/01 01:40:29
I will keep it as-is for now.
|
| } |
| -void KeyedStoreIC::GenerateRuntimeSetProperty(MacroAssembler* masm) { |
| +void KeyedStoreIC::GenerateRuntimeSetProperty(MacroAssembler* masm, |
| + StrictModeFlag strict_mode) { |
| // ----------- S t a t e ------------- |
| // -- eax : value |
| // -- ecx : key |
| @@ -1647,10 +1651,12 @@ void KeyedStoreIC::GenerateRuntimeSetProperty(MacroAssembler* masm) { |
| __ push(edx); |
| __ push(ecx); |
| __ push(eax); |
| - __ push(ebx); |
| + __ push(Immediate(Smi::FromInt(NONE))); // PropertyAttributes |
| + __ push(Immediate(Smi::FromInt(strict_mode))); // Strict mode. |
| + __ push(ebx); // return address |
| // Do tail-call to runtime routine. |
| - __ TailCallRuntime(Runtime::kSetProperty, 3, 1); |
| + __ TailCallRuntime(Runtime::kSetProperty, 5, 1); |
| } |