// Copyright 2012 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/objects/elements.h" #include "src/base/atomicops.h" #include "src/base/safe_conversions.h" #include "src/common/message-template.h" #include "src/execution/arguments.h" #include "src/execution/frames.h" #include "src/execution/isolate-inl.h" #include "src/execution/protectors-inl.h" #include "src/heap/factory.h" #include "src/heap/heap-inl.h" // For MaxNumberToStringCacheSize. #include "src/heap/heap-write-barrier-inl.h" #include "src/numbers/conversions.h" #include "src/objects/arguments-inl.h" #include "src/objects/hash-table-inl.h" #include "src/objects/js-array-buffer-inl.h" #include "src/objects/js-array-inl.h" #include "src/objects/js-shared-array-inl.h" #include "src/objects/keys.h" #include "src/objects/objects-inl.h" #include "src/objects/slots-atomic-inl.h" #include "src/objects/slots.h" #include "src/utils/utils.h" #include "third_party/fp16/src/include/fp16.h" // Each concrete ElementsAccessor can handle exactly one ElementsKind, // several abstract ElementsAccessor classes are used to allow sharing // common code. // // Inheritance hierarchy: // - ElementsAccessorBase (abstract) // - FastElementsAccessor (abstract) // - FastSmiOrObjectElementsAccessor // - FastPackedSmiElementsAccessor // - FastHoleySmiElementsAccessor // - FastPackedObjectElementsAccessor // - FastNonextensibleObjectElementsAccessor: template // - FastPackedNonextensibleObjectElementsAccessor // - FastHoleyNonextensibleObjectElementsAccessor // - FastSealedObjectElementsAccessor: template // - FastPackedSealedObjectElementsAccessor // - FastHoleySealedObjectElementsAccessor // - FastFrozenObjectElementsAccessor: template // - FastPackedFrozenObjectElementsAccessor // - FastHoleyFrozenObjectElementsAccessor // - FastHoleyObjectElementsAccessor // - FastDoubleElementsAccessor // - FastPackedDoubleElementsAccessor // - FastHoleyDoubleElementsAccessor // - TypedElementsAccessor: template, with instantiations: // - Uint8ElementsAccessor // - Int8ElementsAccessor // - Uint16ElementsAccessor // - Int16ElementsAccessor // - Uint32ElementsAccessor // - Int32ElementsAccessor // - Float32ElementsAccessor // - Float64ElementsAccessor // - Uint8ClampedElementsAccessor // - BigUint64ElementsAccessor // - BigInt64ElementsAccessor // - RabGsabUint8ElementsAccessor // - RabGsabInt8ElementsAccessor // - RabGsabUint16ElementsAccessor // - RabGsabInt16ElementsAccessor // - RabGsabUint32ElementsAccessor // - RabGsabInt32ElementsAccessor // - RabGsabFloat32ElementsAccessor // - RabGsabFloat64ElementsAccessor // - RabGsabUint8ClampedElementsAccessor // - RabGsabBigUint64ElementsAccessor // - RabGsabBigInt64ElementsAccessor // - DictionaryElementsAccessor // - SloppyArgumentsElementsAccessor // - FastSloppyArgumentsElementsAccessor // - SlowSloppyArgumentsElementsAccessor // - StringWrapperElementsAccessor // - FastStringWrapperElementsAccessor // - SlowStringWrapperElementsAccessor namespace v8 { namespace internal { namespace … // namespace MaybeHandle<Object> ArrayConstructInitializeElements( Handle<JSArray> array, JavaScriptArguments* args) { … } void CopyFastNumberJSArrayElementsToTypedArray(Address raw_context, Address raw_source, Address raw_destination, uintptr_t length, uintptr_t offset) { … } void CopyTypedArrayElementsToTypedArray(Address raw_source, Address raw_destination, uintptr_t length, uintptr_t offset) { … } void CopyTypedArrayElementsSlice(Address raw_source, Address raw_destination, uintptr_t start, uintptr_t end) { … } void ElementsAccessor::InitializeOncePerProcess() { … } void ElementsAccessor::TearDown() { … } Handle<JSArray> ElementsAccessor::Concat(Isolate* isolate, BuiltinArguments* args, uint32_t concat_size, uint32_t result_len) { … } ElementsAccessor** ElementsAccessor::elements_accessors_ = …; #undef ELEMENTS_LIST #undef RETURN_NOTHING_IF_NOT_SUCCESSFUL #undef RETURN_FAILURE_IF_NOT_SUCCESSFUL } // namespace internal } // namespace v8