| // Copyright 2018 the V8 project authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "src/api-arguments.h" |
| |
| #include "src/api-arguments-inl.h" |
| |
| namespace v8 { |
| namespace internal { |
| |
| PropertyCallbackArguments::PropertyCallbackArguments(Isolate* isolate, |
| Object* data, Object* self, |
| JSObject* holder, |
| ShouldThrow should_throw) |
| : Super(isolate) { |
| Object** values = this->begin(); |
| values[T::kThisIndex] = self; |
| values[T::kHolderIndex] = holder; |
| values[T::kDataIndex] = data; |
| values[T::kIsolateIndex] = reinterpret_cast<Object*>(isolate); |
| values[T::kShouldThrowOnErrorIndex] = |
| Smi::FromInt(should_throw == kThrowOnError ? 1 : 0); |
| |
| // Here the hole is set as default value. |
| // It cannot escape into js as it's removed in Call below. |
| HeapObject* the_hole = ReadOnlyRoots(isolate).the_hole_value(); |
| values[T::kReturnValueDefaultValueIndex] = the_hole; |
| values[T::kReturnValueIndex] = the_hole; |
| DCHECK(values[T::kHolderIndex]->IsHeapObject()); |
| DCHECK(values[T::kIsolateIndex]->IsSmi()); |
| } |
| |
| FunctionCallbackArguments::FunctionCallbackArguments( |
| internal::Isolate* isolate, internal::Object* data, |
| internal::HeapObject* callee, internal::Object* holder, |
| internal::HeapObject* new_target, internal::Object** argv, int argc) |
| : Super(isolate), argv_(argv), argc_(argc) { |
| Object** values = begin(); |
| values[T::kDataIndex] = data; |
| values[T::kHolderIndex] = holder; |
| values[T::kNewTargetIndex] = new_target; |
| values[T::kIsolateIndex] = reinterpret_cast<internal::Object*>(isolate); |
| // Here the hole is set as default value. |
| // It cannot escape into js as it's remove in Call below. |
| HeapObject* the_hole = ReadOnlyRoots(isolate).the_hole_value(); |
| values[T::kReturnValueDefaultValueIndex] = the_hole; |
| values[T::kReturnValueIndex] = the_hole; |
| DCHECK(values[T::kHolderIndex]->IsHeapObject()); |
| DCHECK(values[T::kIsolateIndex]->IsSmi()); |
| } |
| |
| } // namespace internal |
| } // namespace v8 |