Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(152)

Side by Side Diff: src/mips64/code-stubs-mips64.cc

Issue 1587073003: Array length reduction should throw in strict mode if it can't delete an element. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Rebasing for relanding Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/mips/code-stubs-mips.cc ('k') | src/objects.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #if V8_TARGET_ARCH_MIPS64 5 #if V8_TARGET_ARCH_MIPS64
6 6
7 #include "src/bootstrapper.h" 7 #include "src/bootstrapper.h"
8 #include "src/code-stubs.h" 8 #include "src/code-stubs.h"
9 #include "src/codegen.h" 9 #include "src/codegen.h"
10 #include "src/ic/handler-compiler.h" 10 #include "src/ic/handler-compiler.h"
(...skipping 5589 matching lines...) Expand 10 before | Expand all | Expand 10 after
5600 bool is_store = this->is_store(); 5600 bool is_store = this->is_store();
5601 int argc = this->argc(); 5601 int argc = this->argc();
5602 bool call_data_undefined = this->call_data_undefined(); 5602 bool call_data_undefined = this->call_data_undefined();
5603 CallApiFunctionStubHelper(masm, ParameterCount(argc), is_store, 5603 CallApiFunctionStubHelper(masm, ParameterCount(argc), is_store,
5604 call_data_undefined); 5604 call_data_undefined);
5605 } 5605 }
5606 5606
5607 5607
5608 void CallApiGetterStub::Generate(MacroAssembler* masm) { 5608 void CallApiGetterStub::Generate(MacroAssembler* masm) {
5609 // ----------- S t a t e ------------- 5609 // ----------- S t a t e -------------
5610 // -- sp[0] : name 5610 // -- sp[0] : name
5611 // -- sp[4 - kArgsLength*4] : PropertyCallbackArguments object 5611 // -- sp[8 .. (8 + kArgsLength*8)] : v8::PropertyCallbackInfo::args_
5612 // -- ... 5612 // -- ...
5613 // -- a2 : api_function_address 5613 // -- a2 : api_function_address
5614 // ----------------------------------- 5614 // -----------------------------------
5615 5615
5616 Register api_function_address = ApiGetterDescriptor::function_address(); 5616 Register api_function_address = ApiGetterDescriptor::function_address();
5617 DCHECK(api_function_address.is(a2)); 5617 DCHECK(api_function_address.is(a2));
5618 5618
5619 __ mov(a0, sp); // a0 = Handle<Name> 5619 // v8::PropertyCallbackInfo::args_ array and name handle.
5620 __ Daddu(a1, a0, Operand(1 * kPointerSize)); // a1 = PCA 5620 const int kStackUnwindSpace = PropertyCallbackArguments::kArgsLength + 1;
5621
5622 // Load address of v8::PropertyAccessorInfo::args_ array and name handle.
5623 __ mov(a0, sp); // a0 = Handle<Name>
5624 __ Daddu(a1, a0, Operand(1 * kPointerSize)); // a1 = v8::PCI::args_
5621 5625
5622 const int kApiStackSpace = 1; 5626 const int kApiStackSpace = 1;
5623 FrameScope frame_scope(masm, StackFrame::MANUAL); 5627 FrameScope frame_scope(masm, StackFrame::MANUAL);
5624 __ EnterExitFrame(false, kApiStackSpace); 5628 __ EnterExitFrame(false, kApiStackSpace);
5625 5629
5626 // Create PropertyAccessorInfo instance on the stack above the exit frame with 5630 // Create v8::PropertyCallbackInfo object on the stack and initialize
5627 // a1 (internal::Object** args_) as the data. 5631 // it's args_ field.
5628 __ sd(a1, MemOperand(sp, 1 * kPointerSize)); 5632 __ sd(a1, MemOperand(sp, 1 * kPointerSize));
5629 __ Daddu(a1, sp, Operand(1 * kPointerSize)); // a1 = AccessorInfo& 5633 __ Daddu(a1, sp, Operand(1 * kPointerSize));
5630 5634 // a1 = v8::PropertyCallbackInfo&
5631 const int kStackUnwindSpace = PropertyCallbackArguments::kArgsLength + 1;
5632 5635
5633 ExternalReference thunk_ref = 5636 ExternalReference thunk_ref =
5634 ExternalReference::invoke_accessor_getter_callback(isolate()); 5637 ExternalReference::invoke_accessor_getter_callback(isolate());
5638
5639 // +3 is to skip prolog, return address and name handle.
5640 MemOperand return_value_operand(
5641 fp, (PropertyCallbackArguments::kReturnValueOffset + 3) * kPointerSize);
5635 CallApiFunctionAndReturn(masm, api_function_address, thunk_ref, 5642 CallApiFunctionAndReturn(masm, api_function_address, thunk_ref,
5636 kStackUnwindSpace, kInvalidStackOffset, 5643 kStackUnwindSpace, kInvalidStackOffset,
5637 MemOperand(fp, 6 * kPointerSize), NULL); 5644 return_value_operand, NULL);
5638 } 5645 }
5639 5646
5640 5647
5641 #undef __ 5648 #undef __
5642 5649
5643 } // namespace internal 5650 } // namespace internal
5644 } // namespace v8 5651 } // namespace v8
5645 5652
5646 #endif // V8_TARGET_ARCH_MIPS64 5653 #endif // V8_TARGET_ARCH_MIPS64
OLDNEW
« no previous file with comments | « src/mips/code-stubs-mips.cc ('k') | src/objects.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698