Chromium Code Reviews

Side by Side Diff: src/x64/lithium-codegen-x64.cc

Issue 6576024: (early draft) Strict mode - throw exception on assignment to read only property. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 9 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | | Annotate | Revision Log
OLDNEW
1 // Copyright 2011 the V8 project authors. All rights reserved. 1 // Copyright 2011 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 2488 matching lines...)
2499 } 2499 }
2500 } 2500 }
2501 } 2501 }
2502 2502
2503 2503
2504 void LCodeGen::DoStoreNamedGeneric(LStoreNamedGeneric* instr) { 2504 void LCodeGen::DoStoreNamedGeneric(LStoreNamedGeneric* instr) {
2505 ASSERT(ToRegister(instr->object()).is(rdx)); 2505 ASSERT(ToRegister(instr->object()).is(rdx));
2506 ASSERT(ToRegister(instr->value()).is(rax)); 2506 ASSERT(ToRegister(instr->value()).is(rax));
2507 2507
2508 __ Move(rcx, instr->hydrogen()->name()); 2508 __ Move(rcx, instr->hydrogen()->name());
2509 Handle<Code> ic(Builtins::builtin(Builtins::StoreIC_Initialize)); 2509 Handle<Code> ic(Builtins::builtin(
2510 info_->is_strict() ? Builtins::StoreIC_Initialize_Strict
2511 : Builtins::StoreIC_Initialize));
2510 CallCode(ic, RelocInfo::CODE_TARGET, instr); 2512 CallCode(ic, RelocInfo::CODE_TARGET, instr);
2511 } 2513 }
2512 2514
2513 2515
2514 void LCodeGen::DoStorePixelArrayElement(LStorePixelArrayElement* instr) { 2516 void LCodeGen::DoStorePixelArrayElement(LStorePixelArrayElement* instr) {
2515 Register external_pointer = ToRegister(instr->external_pointer()); 2517 Register external_pointer = ToRegister(instr->external_pointer());
2516 Register key = ToRegister(instr->key()); 2518 Register key = ToRegister(instr->key());
2517 Register value = ToRegister(instr->value()); 2519 Register value = ToRegister(instr->value());
2518 2520
2519 { // Clamp the value to [0..255]. 2521 { // Clamp the value to [0..255].
(...skipping 48 matching lines...)
2568 __ RecordWrite(elements, key, value); 2570 __ RecordWrite(elements, key, value);
2569 } 2571 }
2570 } 2572 }
2571 2573
2572 2574
2573 void LCodeGen::DoStoreKeyedGeneric(LStoreKeyedGeneric* instr) { 2575 void LCodeGen::DoStoreKeyedGeneric(LStoreKeyedGeneric* instr) {
2574 ASSERT(ToRegister(instr->object()).is(rdx)); 2576 ASSERT(ToRegister(instr->object()).is(rdx));
2575 ASSERT(ToRegister(instr->key()).is(rcx)); 2577 ASSERT(ToRegister(instr->key()).is(rcx));
2576 ASSERT(ToRegister(instr->value()).is(rax)); 2578 ASSERT(ToRegister(instr->value()).is(rax));
2577 2579
2578 Handle<Code> ic(Builtins::builtin(Builtins::KeyedStoreIC_Initialize)); 2580 Handle<Code> ic(Builtins::builtin(
2581 info_->is_strict() ? Builtins::KeyedStoreIC_Initialize_Strict
2582 : Builtins::KeyedStoreIC_Initialize));
2579 CallCode(ic, RelocInfo::CODE_TARGET, instr); 2583 CallCode(ic, RelocInfo::CODE_TARGET, instr);
2580 } 2584 }
2581 2585
2582 2586
2583 void LCodeGen::DoStringCharCodeAt(LStringCharCodeAt* instr) { 2587 void LCodeGen::DoStringCharCodeAt(LStringCharCodeAt* instr) {
2584 class DeferredStringCharCodeAt: public LDeferredCode { 2588 class DeferredStringCharCodeAt: public LDeferredCode {
2585 public: 2589 public:
2586 DeferredStringCharCodeAt(LCodeGen* codegen, LStringCharCodeAt* instr) 2590 DeferredStringCharCodeAt(LCodeGen* codegen, LStringCharCodeAt* instr)
2587 : LDeferredCode(codegen), instr_(instr) { } 2591 : LDeferredCode(codegen), instr_(instr) { }
2588 virtual void Generate() { codegen()->DoDeferredStringCharCodeAt(instr_); } 2592 virtual void Generate() { codegen()->DoDeferredStringCharCodeAt(instr_); }
(...skipping 846 matching lines...)
3435 RegisterEnvironmentForDeoptimization(environment); 3439 RegisterEnvironmentForDeoptimization(environment);
3436 ASSERT(osr_pc_offset_ == -1); 3440 ASSERT(osr_pc_offset_ == -1);
3437 osr_pc_offset_ = masm()->pc_offset(); 3441 osr_pc_offset_ = masm()->pc_offset();
3438 } 3442 }
3439 3443
3440 #undef __ 3444 #undef __
3441 3445
3442 } } // namespace v8::internal 3446 } } // namespace v8::internal
3443 3447
3444 #endif // V8_TARGET_ARCH_X64 3448 #endif // V8_TARGET_ARCH_X64
OLDNEW

Powered by Google App Engine