text: // 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) {
    slot_at(T::kThisIndex).store(self);
    slot_at(T::kHolderIndex).store(holder);
    slot_at(T::kDataIndex).store(data);
    slot_at(T::kIsolateIndex).store(reinterpret_cast<Object*>(isolate));
    slot_at(T::kShouldThrowOnErrorIndex)
        .store(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();
    slot_at(T::kReturnValueDefaultValueIndex).store(the_hole);
    slot_at(T::kReturnValueIndex).store(the_hole);
    DCHECK((*slot_at(T::kHolderIndex))->IsHeapObject());
    DCHECK((*slot_at(T::kIsolateIndex))->IsSmi());
  }
  
  FunctionCallbackArguments::FunctionCallbackArguments(
      internal::Isolate* isolate, internal::Object* data,
      internal::HeapObject* callee, internal::Object* holder,
      internal::HeapObject* new_target, internal::Address* argv, int argc)
      : Super(isolate), argv_(argv), argc_(argc) {
    slot_at(T::kDataIndex).store(data);
    slot_at(T::kHolderIndex).store(holder);
    slot_at(T::kNewTargetIndex).store(new_target);
    slot_at(T::kIsolateIndex).store(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();
    slot_at(T::kReturnValueDefaultValueIndex).store(the_hole);
    slot_at(T::kReturnValueIndex).store(the_hole);
    DCHECK((*slot_at(T::kHolderIndex))->IsHeapObject());
    DCHECK((*slot_at(T::kIsolateIndex))->IsSmi());
  }
  
  }  // namespace internal
  }  // namespace v8
  