Typed arrays should be rewritten
authorfpizlo@apple.com <fpizlo@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 15 Aug 2013 20:43:06 +0000 (20:43 +0000)
committerfpizlo@apple.com <fpizlo@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 15 Aug 2013 20:43:06 +0000 (20:43 +0000)
https://bugs.webkit.org/show_bug.cgi?id=119064

.:

Reviewed by Oliver Hunt.

Automake work courtesy of Zan Dobersek <zdobersek@igalia.com>.

* Source/autotools/symbols.filter:

Source/JavaScriptCore:

Reviewed by Oliver Hunt.

Typed arrays were previously deficient in several major ways:

- They were defined separately in WebCore and in the jsc shell. The two
  implementations were different, and the jsc shell one was basically wrong.
  The WebCore one was quite awful, also.

- Typed arrays were not visible to the JIT except through some weird hooks.
  For example, the JIT could not ask "what is the Structure that this typed
  array would have if I just allocated it from this global object". Also,
  it was difficult to wire any of the typed array intrinsics, because most
  of the functionality wasn't visible anywhere in JSC.

- Typed array allocation was brain-dead. Allocating a typed array involved
  two JS objects, two GC weak handles, and three malloc allocations.

- Neutering. It involved keeping tabs on all native views but not the view
  wrappers, even though the native views can autoneuter just by asking the
  buffer if it was neutered anytime you touch them; while the JS view
  wrappers are the ones that you really want to reach out to.

- Common case-ing. Most typed arrays have one buffer and one view, and
  usually nobody touches the buffer. Yet we created all of that stuff
  anyway, using data structures optimized for the case where you had a lot
  of views.

- Semantic goofs. Typed arrays should, in the future, behave like ES
  features rather than DOM features, for example when it comes to exceptions.
  Firefox already does this and I agree with them.

This patch cleanses our codebase of these sins:

- Typed arrays are almost entirely defined in JSC. Only the lifecycle
  management of native references to buffers is left to WebCore.

- Allocating a typed array requires either two GC allocations (a cell and a
  copied storage vector) or one GC allocation, a malloc allocation, and a
  weak handle (a cell and a malloc'd storage vector, plus a finalizer for the
  latter). The latter is only used for oversize arrays. Remember that before
  it was 7 allocations no matter what.

- Typed arrays require just 4 words of overhead: Structure*, Butterfly*,
  mode/length, void* vector. Before it was a lot more than that - remember,
  there were five additional objects that did absolutely nothing for anybody.

- Native views aren't tracked by the buffer, or by the wrappers. They are
  transient. In the future we'll probably switch to not even having them be
  malloc'd.

- Native array buffers have an efficient way of tracking all of their JS view
  wrappers, both for neutering, and for lifecycle management. The GC
  special-cases native array buffers. This saves a bunch of grief; for example
  it means that a JS view wrapper can refer to its buffer via the butterfly,
  which would be dead by the time we went to finalize.

- Typed array semantics now match Firefox, which also happens to be where the
  standards are going. The discussion on webkit-dev seemed to confirm that
  Chrome is also heading in this direction. This includes making
  Uint8ClampedArray not a subtype of Uint8Array, and getting rid of
  ArrayBufferView as a JS-visible construct.

This is up to a 10x speed-up on programs that allocate a lot of typed arrays.
It's a 1% speed-up on Octane. It also opens up a bunch of possibilities for
further typed array optimizations in the JSC JITs, including inlining typed
array allocation, inlining more of the accessors, reducing the cost of type
checks, etc.

An additional property of this patch is that typed arrays are mostly
implemented using templates. This deduplicates a bunch of code, but does mean
that we need some hacks for exporting s_info's of template classes. See
JSGenericTypedArrayView.h and JSTypedArrays.cpp. Those hacks are fairly
low-impact compared to code duplication.

Automake work courtesy of Zan Dobersek <zdobersek@igalia.com>.

* CMakeLists.txt:
* DerivedSources.make:
* GNUmakefile.list.am:
* JSCTypedArrayStubs.h: Removed.
* JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
* JavaScriptCore.xcodeproj/project.pbxproj:
* Target.pri:
* bytecode/ByValInfo.h:
(JSC::hasOptimizableIndexingForClassInfo):
(JSC::jitArrayModeForClassInfo):
(JSC::typedArrayTypeForJITArrayMode):
* bytecode/SpeculatedType.cpp:
(JSC::speculationFromClassInfo):
* dfg/DFGArrayMode.cpp:
(JSC::DFG::toTypedArrayType):
* dfg/DFGArrayMode.h:
(JSC::DFG::ArrayMode::typedArrayType):
* dfg/DFGSpeculativeJIT.cpp:
(JSC::DFG::SpeculativeJIT::checkArray):
(JSC::DFG::SpeculativeJIT::compileGetByValOnIntTypedArray):
(JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray):
(JSC::DFG::SpeculativeJIT::compileGetByValOnFloatTypedArray):
(JSC::DFG::SpeculativeJIT::compilePutByValForFloatTypedArray):
(JSC::DFG::SpeculativeJIT::compileGetIndexedPropertyStorage):
(JSC::DFG::SpeculativeJIT::compileGetArrayLength):
* dfg/DFGSpeculativeJIT.h:
* dfg/DFGSpeculativeJIT32_64.cpp:
(JSC::DFG::SpeculativeJIT::compile):
* dfg/DFGSpeculativeJIT64.cpp:
(JSC::DFG::SpeculativeJIT::compile):
* heap/CopyToken.h:
* heap/DeferGC.h:
(JSC::DeferGCForAWhile::DeferGCForAWhile):
(JSC::DeferGCForAWhile::~DeferGCForAWhile):
* heap/GCIncomingRefCounted.h: Added.
(JSC::GCIncomingRefCounted::GCIncomingRefCounted):
(JSC::GCIncomingRefCounted::~GCIncomingRefCounted):
(JSC::GCIncomingRefCounted::numberOfIncomingReferences):
(JSC::GCIncomingRefCounted::incomingReferenceAt):
(JSC::GCIncomingRefCounted::singletonFlag):
(JSC::GCIncomingRefCounted::hasVectorOfCells):
(JSC::GCIncomingRefCounted::hasAnyIncoming):
(JSC::GCIncomingRefCounted::hasSingleton):
(JSC::GCIncomingRefCounted::singleton):
(JSC::GCIncomingRefCounted::vectorOfCells):
* heap/GCIncomingRefCountedInlines.h: Added.
(JSC::::addIncomingReference):
(JSC::::filterIncomingReferences):
* heap/GCIncomingRefCountedSet.h: Added.
(JSC::GCIncomingRefCountedSet::size):
* heap/GCIncomingRefCountedSetInlines.h: Added.
(JSC::::GCIncomingRefCountedSet):
(JSC::::~GCIncomingRefCountedSet):
(JSC::::addReference):
(JSC::::sweep):
(JSC::::removeAll):
(JSC::::removeDead):
* heap/Heap.cpp:
(JSC::Heap::addReference):
(JSC::Heap::extraSize):
(JSC::Heap::size):
(JSC::Heap::capacity):
(JSC::Heap::collect):
(JSC::Heap::decrementDeferralDepth):
(JSC::Heap::decrementDeferralDepthAndGCIfNeeded):
* heap/Heap.h:
* interpreter/CallFrame.h:
(JSC::ExecState::dataViewTable):
* jit/JIT.h:
* jit/JITPropertyAccess.cpp:
(JSC::JIT::privateCompileGetByVal):
(JSC::JIT::privateCompilePutByVal):
(JSC::JIT::emitIntTypedArrayGetByVal):
(JSC::JIT::emitFloatTypedArrayGetByVal):
(JSC::JIT::emitIntTypedArrayPutByVal):
(JSC::JIT::emitFloatTypedArrayPutByVal):
* jsc.cpp:
(GlobalObject::finishCreation):
* runtime/ArrayBuffer.cpp:
(JSC::ArrayBuffer::transfer):
* runtime/ArrayBuffer.h:
(JSC::ArrayBuffer::createAdopted):
(JSC::ArrayBuffer::ArrayBuffer):
(JSC::ArrayBuffer::gcSizeEstimateInBytes):
(JSC::ArrayBuffer::pin):
(JSC::ArrayBuffer::unpin):
(JSC::ArrayBufferContents::tryAllocate):
* runtime/ArrayBufferView.cpp:
(JSC::ArrayBufferView::ArrayBufferView):
(JSC::ArrayBufferView::~ArrayBufferView):
(JSC::ArrayBufferView::setNeuterable):
* runtime/ArrayBufferView.h:
(JSC::ArrayBufferView::isNeutered):
(JSC::ArrayBufferView::buffer):
(JSC::ArrayBufferView::baseAddress):
(JSC::ArrayBufferView::byteOffset):
(JSC::ArrayBufferView::verifySubRange):
(JSC::ArrayBufferView::clampOffsetAndNumElements):
(JSC::ArrayBufferView::calculateOffsetAndLength):
* runtime/ClassInfo.h:
* runtime/CommonIdentifiers.h:
* runtime/DataView.cpp: Added.
(JSC::DataView::DataView):
(JSC::DataView::create):
(JSC::DataView::wrap):
* runtime/DataView.h: Added.
(JSC::DataView::byteLength):
(JSC::DataView::getType):
(JSC::DataView::get):
(JSC::DataView::set):
* runtime/Float32Array.h:
* runtime/Float64Array.h:
* runtime/GenericTypedArrayView.h: Added.
(JSC::GenericTypedArrayView::data):
(JSC::GenericTypedArrayView::set):
(JSC::GenericTypedArrayView::setRange):
(JSC::GenericTypedArrayView::zeroRange):
(JSC::GenericTypedArrayView::zeroFill):
(JSC::GenericTypedArrayView::length):
(JSC::GenericTypedArrayView::byteLength):
(JSC::GenericTypedArrayView::item):
(JSC::GenericTypedArrayView::checkInboundData):
(JSC::GenericTypedArrayView::getType):
* runtime/GenericTypedArrayViewInlines.h: Added.
(JSC::::GenericTypedArrayView):
(JSC::::create):
(JSC::::createUninitialized):
(JSC::::subarray):
(JSC::::wrap):
* runtime/IndexingHeader.h:
(JSC::IndexingHeader::arrayBuffer):
(JSC::IndexingHeader::setArrayBuffer):
* runtime/Int16Array.h:
* runtime/Int32Array.h:
* runtime/Int8Array.h:
* runtime/JSArrayBuffer.cpp: Added.
(JSC::JSArrayBuffer::JSArrayBuffer):
(JSC::JSArrayBuffer::finishCreation):
(JSC::JSArrayBuffer::create):
(JSC::JSArrayBuffer::createStructure):
(JSC::JSArrayBuffer::getOwnPropertySlot):
(JSC::JSArrayBuffer::getOwnPropertyDescriptor):
(JSC::JSArrayBuffer::put):
(JSC::JSArrayBuffer::defineOwnProperty):
(JSC::JSArrayBuffer::deleteProperty):
(JSC::JSArrayBuffer::getOwnNonIndexPropertyNames):
* runtime/JSArrayBuffer.h: Added.
(JSC::JSArrayBuffer::impl):
(JSC::toArrayBuffer):
* runtime/JSArrayBufferConstructor.cpp: Added.
(JSC::JSArrayBufferConstructor::JSArrayBufferConstructor):
(JSC::JSArrayBufferConstructor::finishCreation):
(JSC::JSArrayBufferConstructor::create):
(JSC::JSArrayBufferConstructor::createStructure):
(JSC::constructArrayBuffer):
(JSC::JSArrayBufferConstructor::getConstructData):
(JSC::JSArrayBufferConstructor::getCallData):
* runtime/JSArrayBufferConstructor.h: Added.
* runtime/JSArrayBufferPrototype.cpp: Added.
(JSC::arrayBufferProtoFuncSlice):
(JSC::JSArrayBufferPrototype::JSArrayBufferPrototype):
(JSC::JSArrayBufferPrototype::finishCreation):
(JSC::JSArrayBufferPrototype::create):
(JSC::JSArrayBufferPrototype::createStructure):
* runtime/JSArrayBufferPrototype.h: Added.
* runtime/JSArrayBufferView.cpp: Added.
(JSC::JSArrayBufferView::ConstructionContext::ConstructionContext):
(JSC::JSArrayBufferView::JSArrayBufferView):
(JSC::JSArrayBufferView::finishCreation):
(JSC::JSArrayBufferView::getOwnPropertySlot):
(JSC::JSArrayBufferView::getOwnPropertyDescriptor):
(JSC::JSArrayBufferView::put):
(JSC::JSArrayBufferView::defineOwnProperty):
(JSC::JSArrayBufferView::deleteProperty):
(JSC::JSArrayBufferView::getOwnNonIndexPropertyNames):
(JSC::JSArrayBufferView::finalize):
* runtime/JSArrayBufferView.h: Added.
(JSC::JSArrayBufferView::sizeOf):
(JSC::JSArrayBufferView::ConstructionContext::operator!):
(JSC::JSArrayBufferView::ConstructionContext::structure):
(JSC::JSArrayBufferView::ConstructionContext::vector):
(JSC::JSArrayBufferView::ConstructionContext::length):
(JSC::JSArrayBufferView::ConstructionContext::mode):
(JSC::JSArrayBufferView::ConstructionContext::butterfly):
(JSC::JSArrayBufferView::mode):
(JSC::JSArrayBufferView::vector):
(JSC::JSArrayBufferView::length):
(JSC::JSArrayBufferView::offsetOfVector):
(JSC::JSArrayBufferView::offsetOfLength):
(JSC::JSArrayBufferView::offsetOfMode):
* runtime/JSArrayBufferViewInlines.h: Added.
(JSC::JSArrayBufferView::slowDownAndWasteMemoryIfNecessary):
(JSC::JSArrayBufferView::buffer):
(JSC::JSArrayBufferView::impl):
(JSC::JSArrayBufferView::neuter):
(JSC::JSArrayBufferView::byteOffset):
* runtime/JSCell.cpp:
(JSC::JSCell::slowDownAndWasteMemory):
(JSC::JSCell::getTypedArrayImpl):
* runtime/JSCell.h:
* runtime/JSDataView.cpp: Added.
(JSC::JSDataView::JSDataView):
(JSC::JSDataView::create):
(JSC::JSDataView::createUninitialized):
(JSC::JSDataView::set):
(JSC::JSDataView::typedImpl):
(JSC::JSDataView::getOwnPropertySlot):
(JSC::JSDataView::getOwnPropertyDescriptor):
(JSC::JSDataView::slowDownAndWasteMemory):
(JSC::JSDataView::getTypedArrayImpl):
(JSC::JSDataView::createStructure):
* runtime/JSDataView.h: Added.
* runtime/JSDataViewPrototype.cpp: Added.
(JSC::JSDataViewPrototype::JSDataViewPrototype):
(JSC::JSDataViewPrototype::create):
(JSC::JSDataViewPrototype::createStructure):
(JSC::JSDataViewPrototype::getOwnPropertySlot):
(JSC::JSDataViewPrototype::getOwnPropertyDescriptor):
(JSC::getData):
(JSC::setData):
(JSC::dataViewProtoFuncGetInt8):
(JSC::dataViewProtoFuncGetInt16):
(JSC::dataViewProtoFuncGetInt32):
(JSC::dataViewProtoFuncGetUint8):
(JSC::dataViewProtoFuncGetUint16):
(JSC::dataViewProtoFuncGetUint32):
(JSC::dataViewProtoFuncGetFloat32):
(JSC::dataViewProtoFuncGetFloat64):
(JSC::dataViewProtoFuncSetInt8):
(JSC::dataViewProtoFuncSetInt16):
(JSC::dataViewProtoFuncSetInt32):
(JSC::dataViewProtoFuncSetUint8):
(JSC::dataViewProtoFuncSetUint16):
(JSC::dataViewProtoFuncSetUint32):
(JSC::dataViewProtoFuncSetFloat32):
(JSC::dataViewProtoFuncSetFloat64):
* runtime/JSDataViewPrototype.h: Added.
* runtime/JSFloat32Array.h: Added.
* runtime/JSFloat64Array.h: Added.
* runtime/JSGenericTypedArrayView.h: Added.
(JSC::JSGenericTypedArrayView::byteLength):
(JSC::JSGenericTypedArrayView::byteSize):
(JSC::JSGenericTypedArrayView::typedVector):
(JSC::JSGenericTypedArrayView::canGetIndexQuickly):
(JSC::JSGenericTypedArrayView::canSetIndexQuickly):
(JSC::JSGenericTypedArrayView::getIndexQuicklyAsNativeValue):
(JSC::JSGenericTypedArrayView::getIndexQuicklyAsDouble):
(JSC::JSGenericTypedArrayView::getIndexQuickly):
(JSC::JSGenericTypedArrayView::setIndexQuicklyToNativeValue):
(JSC::JSGenericTypedArrayView::setIndexQuicklyToDouble):
(JSC::JSGenericTypedArrayView::setIndexQuickly):
(JSC::JSGenericTypedArrayView::canAccessRangeQuickly):
(JSC::JSGenericTypedArrayView::typedImpl):
(JSC::JSGenericTypedArrayView::createStructure):
(JSC::JSGenericTypedArrayView::info):
(JSC::toNativeTypedView):
* runtime/JSGenericTypedArrayViewConstructor.h: Added.
* runtime/JSGenericTypedArrayViewConstructorInlines.h: Added.
(JSC::::JSGenericTypedArrayViewConstructor):
(JSC::::finishCreation):
(JSC::::create):
(JSC::::createStructure):
(JSC::constructGenericTypedArrayView):
(JSC::::getConstructData):
(JSC::::getCallData):
* runtime/JSGenericTypedArrayViewInlines.h: Added.
(JSC::::JSGenericTypedArrayView):
(JSC::::create):
(JSC::::createUninitialized):
(JSC::::validateRange):
(JSC::::setWithSpecificType):
(JSC::::set):
(JSC::::getOwnPropertySlot):
(JSC::::getOwnPropertyDescriptor):
(JSC::::put):
(JSC::::defineOwnProperty):
(JSC::::deleteProperty):
(JSC::::getOwnPropertySlotByIndex):
(JSC::::putByIndex):
(JSC::::deletePropertyByIndex):
(JSC::::getOwnNonIndexPropertyNames):
(JSC::::getOwnPropertyNames):
(JSC::::visitChildren):
(JSC::::copyBackingStore):
(JSC::::slowDownAndWasteMemory):
(JSC::::getTypedArrayImpl):
* runtime/JSGenericTypedArrayViewPrototype.h: Added.
* runtime/JSGenericTypedArrayViewPrototypeInlines.h: Added.
(JSC::genericTypedArrayViewProtoFuncSet):
(JSC::genericTypedArrayViewProtoFuncSubarray):
(JSC::::JSGenericTypedArrayViewPrototype):
(JSC::::finishCreation):
(JSC::::create):
(JSC::::createStructure):
* runtime/JSGlobalObject.cpp:
(JSC::JSGlobalObject::reset):
(JSC::JSGlobalObject::visitChildren):
* runtime/JSGlobalObject.h:
(JSC::JSGlobalObject::arrayBufferPrototype):
(JSC::JSGlobalObject::arrayBufferStructure):
(JSC::JSGlobalObject::typedArrayStructure):
* runtime/JSInt16Array.h: Added.
* runtime/JSInt32Array.h: Added.
* runtime/JSInt8Array.h: Added.
* runtime/JSTypedArrayConstructors.cpp: Added.
* runtime/JSTypedArrayConstructors.h: Added.
* runtime/JSTypedArrayPrototypes.cpp: Added.
* runtime/JSTypedArrayPrototypes.h: Added.
* runtime/JSTypedArrays.cpp: Added.
* runtime/JSTypedArrays.h: Added.
* runtime/JSUint16Array.h: Added.
* runtime/JSUint32Array.h: Added.
* runtime/JSUint8Array.h: Added.
* runtime/JSUint8ClampedArray.h: Added.
* runtime/Operations.h:
* runtime/Options.h:
* runtime/SimpleTypedArrayController.cpp: Added.
(JSC::SimpleTypedArrayController::SimpleTypedArrayController):
(JSC::SimpleTypedArrayController::~SimpleTypedArrayController):
(JSC::SimpleTypedArrayController::toJS):
* runtime/SimpleTypedArrayController.h: Added.
* runtime/Structure.h:
(JSC::Structure::couldHaveIndexingHeader):
* runtime/StructureInlines.h:
(JSC::Structure::hasIndexingHeader):
* runtime/TypedArrayAdaptors.h: Added.
(JSC::IntegralTypedArrayAdaptor::toNative):
(JSC::IntegralTypedArrayAdaptor::toJSValue):
(JSC::IntegralTypedArrayAdaptor::toDouble):
(JSC::FloatTypedArrayAdaptor::toNative):
(JSC::FloatTypedArrayAdaptor::toJSValue):
(JSC::FloatTypedArrayAdaptor::toDouble):
(JSC::Uint8ClampedAdaptor::toNative):
(JSC::Uint8ClampedAdaptor::toJSValue):
(JSC::Uint8ClampedAdaptor::toDouble):
(JSC::Uint8ClampedAdaptor::clamp):
* runtime/TypedArrayController.cpp: Added.
(JSC::TypedArrayController::TypedArrayController):
(JSC::TypedArrayController::~TypedArrayController):
* runtime/TypedArrayController.h: Added.
* runtime/TypedArrayDescriptor.h: Removed.
* runtime/TypedArrayInlines.h: Added.
* runtime/TypedArrayType.cpp: Added.
(JSC::classInfoForType):
(WTF::printInternal):
* runtime/TypedArrayType.h: Added.
(JSC::toIndex):
(JSC::isTypedView):
(JSC::elementSize):
(JSC::isInt):
(JSC::isFloat):
(JSC::isSigned):
(JSC::isClamped):
* runtime/TypedArrays.h: Added.
* runtime/Uint16Array.h:
* runtime/Uint32Array.h:
* runtime/Uint8Array.h:
* runtime/Uint8ClampedArray.h:
* runtime/VM.cpp:
(JSC::VM::VM):
(JSC::VM::~VM):
* runtime/VM.h:

Source/WebCore:

Reviewed by Oliver Hunt.

Typed arrays are now implemented in JavaScriptCore, and WebCore is merely a
client of them. There is only one layering violation: WebCore installs a
WebCoreTypedArrayController on VM, which makes the
ArrayBuffer<->JSArrayBuffer relationship resemble DOM wrappers. By default,
JSC makes the ownership go one way; the JSArrayBuffer keeps the ArrayBuffer
alive but if ArrayBuffer is kept alive from native code then the
JSArrayByffer may die. WebCoreTypedArrayController will keep the
JSArrayBuffer alive if the ArrayBuffer is in the opaque root set.

To make non-JSDOMWrappers behave like DOM wrappers, a bunch of code is
changed to make most references to wrappers refer to JSObject* rather than
JSDOMWrapper*.

Array buffer views are now transient; the JS array buffer view wrappers
don't own them or keep them alive. This required a bunch of changes to make
bindings code use RefPtr<ArrayBufferView> to hold onto their views.

Also there is a bunch of new code to make JSC-provided array buffers and
views obey the toJS/to<ClassName> idiom for wrapping and unwrapping.

Finally, the DataView API is now completely different: the JSDataView
provides the same user-visible JS API but using its own internal magic; the
C++ code that uses DataView now uses a rather different API that is not
aware of usual DOM semantics, since it's in JSC and not WebCore. It's
equally useful for all of WebCore's purposes, but some code had to change
to adapt the new conventions.

Some tests have been changed or rebased due to changes in behavior, that
bring us into conformance with where the standards are going and allow us to
match Firefox behavior.

Automake work and some additional GTK changes courtesy of
Zan Dobersek <zdobersek@igalia.com>.

Additional Qt changes courtesy of Arunprasad Rajkumar <arurajku@cisco.com>.

* CMakeLists.txt:
* DerivedSources.make:
* ForwardingHeaders/runtime/DataView.h: Added.
* ForwardingHeaders/runtime/JSArrayBuffer.h: Added.
* ForwardingHeaders/runtime/JSArrayBufferView.h: Added.
* ForwardingHeaders/runtime/JSDataView.h: Added.
* ForwardingHeaders/runtime/JSTypedArrays.h: Added.
* ForwardingHeaders/runtime/TypedArrayController.h: Added.
* ForwardingHeaders/runtime/TypedArrayInlines.h: Added.
* ForwardingHeaders/runtime/TypedArrays.h: Added.
* GNUmakefile.list.am:
* Modules/webaudio/RealtimeAnalyser.h:
* Target.pri:
* UseJSC.cmake:
* WebCore.exp.in:
* WebCore.vcxproj/WebCore.vcxproj:
* WebCore.xcodeproj/project.pbxproj:
* bindings/js/DOMWrapperWorld.h:
* bindings/js/JSArrayBufferCustom.cpp: Removed.
* bindings/js/JSArrayBufferViewHelper.h: Removed.
* bindings/js/JSAudioContextCustom.cpp:
* bindings/js/JSBindingsAllInOne.cpp:
* bindings/js/JSBlobCustom.cpp:
* bindings/js/JSCSSRuleCustom.cpp:
(WebCore::toJS):
* bindings/js/JSCSSValueCustom.cpp:
(WebCore::toJS):
* bindings/js/JSCryptoCustom.cpp:
(WebCore::JSCrypto::getRandomValues):
* bindings/js/JSDOMBinding.h:
(WebCore::wrapperOwner):
(WebCore::wrapperContext):
(WebCore::getInlineCachedWrapper):
(WebCore::setInlineCachedWrapper):
(WebCore::clearInlineCachedWrapper):
(WebCore::getCachedWrapper):
(WebCore::cacheWrapper):
(WebCore::uncacheWrapper):
(WebCore::wrap):
(WebCore::toJS):
(WebCore::toArrayBufferView):
(WebCore::toInt8Array):
(WebCore::toInt16Array):
(WebCore::toInt32Array):
(WebCore::toUint8Array):
(WebCore::toUint8ClampedArray):
(WebCore::toUint16Array):
(WebCore::toUint32Array):
(WebCore::toFloat32Array):
(WebCore::toFloat64Array):
(WebCore::toDataView):
* bindings/js/JSDataViewCustom.cpp: Removed.
* bindings/js/JSDictionary.cpp:
* bindings/js/JSDictionary.h:
* bindings/js/JSDocumentCustom.cpp:
(WebCore::JSDocument::location):
(WebCore::toJS):
* bindings/js/JSEventCustom.cpp:
(WebCore::toJS):
* bindings/js/JSFileReaderCustom.cpp:
* bindings/js/JSHTMLCollectionCustom.cpp:
(WebCore::toJS):
* bindings/js/JSHTMLTemplateElementCustom.cpp:
(WebCore::JSHTMLTemplateElement::content):
* bindings/js/JSImageDataCustom.cpp:
(WebCore::toJS):
* bindings/js/JSInjectedScriptHostCustom.cpp:
* bindings/js/JSMessageEventCustom.cpp:
* bindings/js/JSMessagePortCustom.cpp:
* bindings/js/JSSVGPathSegCustom.cpp:
(WebCore::toJS):
* bindings/js/JSStyleSheetCustom.cpp:
(WebCore::toJS):
* bindings/js/JSTrackCustom.cpp:
(WebCore::toJS):
* bindings/js/JSWebGLRenderingContextCustom.cpp:
* bindings/js/JSXMLHttpRequestCustom.cpp:
(WebCore::JSXMLHttpRequest::send):
* bindings/js/SerializedScriptValue.cpp:
(WebCore::SerializedScriptValue::transferArrayBuffers):
* bindings/js/WebCoreJSClientData.h:
(WebCore::initNormalWorldClientData):
* bindings/js/WebCoreTypedArrayController.cpp: Added.
(WebCore::WebCoreTypedArrayController::WebCoreTypedArrayController):
(WebCore::WebCoreTypedArrayController::~WebCoreTypedArrayController):
(WebCore::WebCoreTypedArrayController::toJS):
(WebCore::WebCoreTypedArrayController::JSArrayBufferOwner::isReachableFromOpaqueRoots):
(WebCore::WebCoreTypedArrayController::JSArrayBufferOwner::finalize):
* bindings/js/WebCoreTypedArrayController.h: Added.
(WebCore::WebCoreTypedArrayController::wrapperOwner):
* bindings/scripts/CodeGenerator.pm:
(ForAllParents):
(ParseInterface):
(SkipIncludeHeader):
(IsTypedArrayType):
(IsWrapperType):
* bindings/scripts/CodeGeneratorJS.pm:
(AddIncludesForType):
(GenerateHeader):
(GenerateImplementation):
(GenerateParametersCheck):
(GetNativeType):
(JSValueToNative):
(NativeToJSValue):
(GenerateConstructorDefinition):
(GenerateConstructorHelperMethods):
* fileapi/WebKitBlobBuilder.cpp:
(WebCore::BlobBuilder::append):
* fileapi/WebKitBlobBuilder.h:
* html/canvas/ArrayBuffer.idl: Removed.
* html/canvas/ArrayBufferView.idl: Removed.
* html/canvas/DataView.cpp: Removed.
* html/canvas/DataView.h: Removed.
* html/canvas/DataView.idl: Removed.
* html/canvas/Float32Array.idl: Removed.
* html/canvas/Float64Array.idl: Removed.
* html/canvas/Int16Array.idl: Removed.
* html/canvas/Int32Array.idl: Removed.
* html/canvas/Int8Array.idl: Removed.
* html/canvas/Uint16Array.idl: Removed.
* html/canvas/Uint32Array.idl: Removed.
* html/canvas/Uint8Array.idl: Removed.
* html/canvas/Uint8ClampedArray.idl: Removed.
* html/canvas/WebGLRenderingContext.cpp:
(WebCore::WebGLRenderingContext::readPixels):
(WebCore::WebGLRenderingContext::validateTexFuncData):
* page/Crypto.cpp:
* platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
(WebCore::MediaPlayerPrivateAVFoundationObjC::shouldWaitForLoadingOfResource):
(WebCore::MediaPlayerPrivateAVFoundationObjC::extractKeyURIKeyIDAndCertificateFromInitData):
* platform/graphics/filters/FECustomFilter.h:
* platform/graphics/filters/FEGaussianBlur.cpp:
* platform/graphics/filters/FilterEffect.cpp:
* testing/MockCDM.cpp:

Source/WebKit2:

Reviewed by Oliver Hunt.

You don't need to include JSUint8Array anymore if you just want to
unwrap one; JSDOMBinding gives you all of the things you need.

* WebProcess/InjectedBundle/InjectedBundle.cpp:

Source/WTF:

Reviewed by Oliver Hunt.

- Added the notion of a reference counted object that can be marked Deferred,
  which is like a special-purpose upref.

- Added a common byte flipper.

Automake work courtesy of Zan Dobersek <zdobersek@igalia.com>.

* GNUmakefile.list.am:
* WTF.xcodeproj/project.pbxproj:
* wtf/DeferrableRefCounted.h: Added.
(WTF::DeferrableRefCountedBase::ref):
(WTF::DeferrableRefCountedBase::hasOneRef):
(WTF::DeferrableRefCountedBase::refCount):
(WTF::DeferrableRefCountedBase::isDeferred):
(WTF::DeferrableRefCountedBase::DeferrableRefCountedBase):
(WTF::DeferrableRefCountedBase::~DeferrableRefCountedBase):
(WTF::DeferrableRefCountedBase::derefBase):
(WTF::DeferrableRefCountedBase::setIsDeferredBase):
(WTF::DeferrableRefCounted::deref):
(WTF::DeferrableRefCounted::setIsDeferred):
(WTF::DeferrableRefCounted::DeferrableRefCounted):
(WTF::DeferrableRefCounted::~DeferrableRefCounted):
* wtf/FlipBytes.h: Added.
(WTF::needToFlipBytesIfLittleEndian):
(WTF::flipBytes):
(WTF::flipBytesIfLittleEndian):

LayoutTests:

Reviewed by Oliver Hunt.

* fast/canvas/webgl/array-set-invalid-arguments-expected.txt:
* fast/canvas/webgl/array-set-out-of-bounds-expected.txt:
* fast/canvas/webgl/array-unit-tests-expected.txt:
* fast/canvas/webgl/array-unit-tests.html:
* fast/canvas/webgl/data-view-crash-expected.txt:
* fast/canvas/webgl/script-tests/arraybuffer-transfer-of-control.js:
(checkView):
* fast/dom/call-a-constructor-as-a-function-expected.txt:
* fast/dom/call-a-constructor-as-a-function.html:
* fast/js/constructor-length.html:
* fast/js/global-constructors-attributes-dedicated-worker-expected.txt:
* fast/js/global-constructors-attributes-expected.txt:
* fast/js/global-constructors-attributes-shared-worker-expected.txt:
* fast/js/regress/ArrayBuffer-Int8Array-alloc-expected.txt: Added.
* fast/js/regress/ArrayBuffer-Int8Array-alloc-huge-long-lived-expected.txt: Added.
* fast/js/regress/ArrayBuffer-Int8Array-alloc-huge-long-lived.html: Added.
* fast/js/regress/ArrayBuffer-Int8Array-alloc-large-long-lived-expected.txt: Added.
* fast/js/regress/ArrayBuffer-Int8Array-alloc-large-long-lived.html: Added.
* fast/js/regress/ArrayBuffer-Int8Array-alloc-long-lived-buffer-expected.txt: Added.
* fast/js/regress/ArrayBuffer-Int8Array-alloc-long-lived-buffer.html: Added.
* fast/js/regress/ArrayBuffer-Int8Array-alloc-long-lived-expected.txt: Added.
* fast/js/regress/ArrayBuffer-Int8Array-alloc-long-lived.html: Added.
* fast/js/regress/ArrayBuffer-Int8Array-alloc.html: Added.
* fast/js/regress/Int32Array-Int8Array-view-alloc-expected.txt: Added.
* fast/js/regress/Int32Array-Int8Array-view-alloc.html: Added.
* fast/js/regress/Int32Array-alloc-expected.txt: Added.
* fast/js/regress/Int32Array-alloc-huge-expected.txt: Added.
* fast/js/regress/Int32Array-alloc-huge-long-lived-expected.txt: Added.
* fast/js/regress/Int32Array-alloc-huge-long-lived.html: Added.
* fast/js/regress/Int32Array-alloc-huge.html: Added.
* fast/js/regress/Int32Array-alloc-large-expected.txt: Added.
* fast/js/regress/Int32Array-alloc-large-long-lived-expected.txt: Added.
* fast/js/regress/Int32Array-alloc-large-long-lived.html: Added.
* fast/js/regress/Int32Array-alloc-large.html: Added.
* fast/js/regress/Int32Array-alloc-long-lived-expected.txt: Added.
* fast/js/regress/Int32Array-alloc-long-lived.html: Added.
* fast/js/regress/Int32Array-alloc.html: Added.
* fast/js/regress/script-tests/ArrayBuffer-Int8Array-alloc-huge-long-lived.js: Added.
* fast/js/regress/script-tests/ArrayBuffer-Int8Array-alloc-large-long-lived.js: Added.
* fast/js/regress/script-tests/ArrayBuffer-Int8Array-alloc-long-lived-buffer.js: Added.
* fast/js/regress/script-tests/ArrayBuffer-Int8Array-alloc-long-lived.js: Added.
* fast/js/regress/script-tests/ArrayBuffer-Int8Array-alloc.js: Added.
* fast/js/regress/script-tests/Int32Array-Int8Array-view-alloc.js: Added.
* fast/js/regress/script-tests/Int32Array-alloc-huge-long-lived.js: Added.
* fast/js/regress/script-tests/Int32Array-alloc-huge.js: Added.
* fast/js/regress/script-tests/Int32Array-alloc-large-long-lived.js: Added.
* fast/js/regress/script-tests/Int32Array-alloc-large.js: Added.
* fast/js/regress/script-tests/Int32Array-alloc-long-lived.js: Added.
* fast/js/regress/script-tests/Int32Array-alloc.js: Added.
* platform/mac/fast/js/constructor-length-expected.txt:
* webgl/resources/webgl_test_files/conformance/typedarrays/array-unit-tests.html:
* webgl/resources/webgl_test_files/conformance/typedarrays/data-view-test.html:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@154127 268f45cc-cd09-0410-ab3c-d52691b4dbfc

233 files changed:
ChangeLog
LayoutTests/ChangeLog
LayoutTests/fast/canvas/webgl/array-set-invalid-arguments-expected.txt
LayoutTests/fast/canvas/webgl/array-set-out-of-bounds-expected.txt
LayoutTests/fast/canvas/webgl/array-unit-tests-expected.txt
LayoutTests/fast/canvas/webgl/array-unit-tests.html
LayoutTests/fast/canvas/webgl/data-view-crash-expected.txt
LayoutTests/fast/canvas/webgl/script-tests/arraybuffer-transfer-of-control.js
LayoutTests/fast/dom/call-a-constructor-as-a-function-expected.txt
LayoutTests/fast/dom/call-a-constructor-as-a-function.html
LayoutTests/fast/js/constructor-length.html
LayoutTests/fast/js/global-constructors-attributes-dedicated-worker-expected.txt
LayoutTests/fast/js/global-constructors-attributes-expected.txt
LayoutTests/fast/js/global-constructors-attributes-shared-worker-expected.txt
LayoutTests/fast/js/regress/ArrayBuffer-Int8Array-alloc-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/regress/ArrayBuffer-Int8Array-alloc-huge-long-lived-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/regress/ArrayBuffer-Int8Array-alloc-huge-long-lived.html [new file with mode: 0644]
LayoutTests/fast/js/regress/ArrayBuffer-Int8Array-alloc-large-long-lived-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/regress/ArrayBuffer-Int8Array-alloc-large-long-lived.html [new file with mode: 0644]
LayoutTests/fast/js/regress/ArrayBuffer-Int8Array-alloc-long-lived-buffer-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/regress/ArrayBuffer-Int8Array-alloc-long-lived-buffer.html [new file with mode: 0644]
LayoutTests/fast/js/regress/ArrayBuffer-Int8Array-alloc-long-lived-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/regress/ArrayBuffer-Int8Array-alloc-long-lived.html [new file with mode: 0644]
LayoutTests/fast/js/regress/ArrayBuffer-Int8Array-alloc.html [new file with mode: 0644]
LayoutTests/fast/js/regress/Int32Array-Int8Array-view-alloc-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/regress/Int32Array-Int8Array-view-alloc.html [new file with mode: 0644]
LayoutTests/fast/js/regress/Int32Array-alloc-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/regress/Int32Array-alloc-huge-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/regress/Int32Array-alloc-huge-long-lived-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/regress/Int32Array-alloc-huge-long-lived.html [new file with mode: 0644]
LayoutTests/fast/js/regress/Int32Array-alloc-huge.html [new file with mode: 0644]
LayoutTests/fast/js/regress/Int32Array-alloc-large-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/regress/Int32Array-alloc-large-long-lived-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/regress/Int32Array-alloc-large-long-lived.html [new file with mode: 0644]
LayoutTests/fast/js/regress/Int32Array-alloc-large.html [new file with mode: 0644]
LayoutTests/fast/js/regress/Int32Array-alloc-long-lived-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/regress/Int32Array-alloc-long-lived.html [new file with mode: 0644]
LayoutTests/fast/js/regress/Int32Array-alloc.html [new file with mode: 0644]
LayoutTests/fast/js/regress/script-tests/ArrayBuffer-Int8Array-alloc-huge-long-lived.js [new file with mode: 0644]
LayoutTests/fast/js/regress/script-tests/ArrayBuffer-Int8Array-alloc-large-long-lived.js [new file with mode: 0644]
LayoutTests/fast/js/regress/script-tests/ArrayBuffer-Int8Array-alloc-long-lived-buffer.js [new file with mode: 0644]
LayoutTests/fast/js/regress/script-tests/ArrayBuffer-Int8Array-alloc-long-lived.js [new file with mode: 0644]
LayoutTests/fast/js/regress/script-tests/ArrayBuffer-Int8Array-alloc.js [new file with mode: 0644]
LayoutTests/fast/js/regress/script-tests/Int32Array-Int8Array-view-alloc.js [new file with mode: 0644]
LayoutTests/fast/js/regress/script-tests/Int32Array-alloc-huge-long-lived.js [new file with mode: 0644]
LayoutTests/fast/js/regress/script-tests/Int32Array-alloc-huge.js [new file with mode: 0644]
LayoutTests/fast/js/regress/script-tests/Int32Array-alloc-large-long-lived.js [new file with mode: 0644]
LayoutTests/fast/js/regress/script-tests/Int32Array-alloc-large.js [new file with mode: 0644]
LayoutTests/fast/js/regress/script-tests/Int32Array-alloc-long-lived.js [new file with mode: 0644]
LayoutTests/fast/js/regress/script-tests/Int32Array-alloc.js [new file with mode: 0644]
LayoutTests/platform/mac/fast/js/constructor-length-expected.txt
LayoutTests/webgl/resources/webgl_test_files/conformance/typedarrays/array-unit-tests.html
LayoutTests/webgl/resources/webgl_test_files/conformance/typedarrays/data-view-test.html
Source/JavaScriptCore/CMakeLists.txt
Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/DerivedSources.make
Source/JavaScriptCore/DerivedSources.pri
Source/JavaScriptCore/GNUmakefile.list.am
Source/JavaScriptCore/JSCTypedArrayStubs.h [deleted file]
Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj
Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
Source/JavaScriptCore/Target.pri
Source/JavaScriptCore/bytecode/ByValInfo.h
Source/JavaScriptCore/bytecode/SpeculatedType.cpp
Source/JavaScriptCore/dfg/DFGArrayMode.cpp
Source/JavaScriptCore/dfg/DFGArrayMode.h
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h
Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp
Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp
Source/JavaScriptCore/heap/CopyToken.h
Source/JavaScriptCore/heap/DeferGC.h
Source/JavaScriptCore/heap/GCIncomingRefCounted.h [new file with mode: 0644]
Source/JavaScriptCore/heap/GCIncomingRefCountedInlines.h [new file with mode: 0644]
Source/JavaScriptCore/heap/GCIncomingRefCountedSet.h [moved from Source/WebCore/html/canvas/Int16Array.idl with 55% similarity]
Source/JavaScriptCore/heap/GCIncomingRefCountedSetInlines.h [new file with mode: 0644]
Source/JavaScriptCore/heap/Heap.cpp
Source/JavaScriptCore/heap/Heap.h
Source/JavaScriptCore/heap/WeakInlines.h
Source/JavaScriptCore/interpreter/CallFrame.h
Source/JavaScriptCore/jit/JIT.h
Source/JavaScriptCore/jit/JITPropertyAccess.cpp
Source/JavaScriptCore/jsc.cpp
Source/JavaScriptCore/runtime/ArrayBuffer.cpp
Source/JavaScriptCore/runtime/ArrayBuffer.h
Source/JavaScriptCore/runtime/ArrayBufferView.cpp
Source/JavaScriptCore/runtime/ArrayBufferView.h
Source/JavaScriptCore/runtime/ClassInfo.h
Source/JavaScriptCore/runtime/CommonIdentifiers.h
Source/JavaScriptCore/runtime/DataView.cpp [new file with mode: 0644]
Source/JavaScriptCore/runtime/DataView.h [new file with mode: 0644]
Source/JavaScriptCore/runtime/Float32Array.h
Source/JavaScriptCore/runtime/Float64Array.h
Source/JavaScriptCore/runtime/GenericTypedArrayView.h [new file with mode: 0644]
Source/JavaScriptCore/runtime/GenericTypedArrayViewInlines.h [new file with mode: 0644]
Source/JavaScriptCore/runtime/IndexingHeader.h
Source/JavaScriptCore/runtime/Int16Array.h
Source/JavaScriptCore/runtime/Int32Array.h
Source/JavaScriptCore/runtime/Int8Array.h
Source/JavaScriptCore/runtime/JSArrayBuffer.cpp [new file with mode: 0644]
Source/JavaScriptCore/runtime/JSArrayBuffer.h [new file with mode: 0644]
Source/JavaScriptCore/runtime/JSArrayBufferConstructor.cpp [new file with mode: 0644]
Source/JavaScriptCore/runtime/JSArrayBufferConstructor.h [moved from Source/JavaScriptCore/runtime/TypedArrayDescriptor.h with 56% similarity]
Source/JavaScriptCore/runtime/JSArrayBufferPrototype.cpp [new file with mode: 0644]
Source/JavaScriptCore/runtime/JSArrayBufferPrototype.h [new file with mode: 0644]
Source/JavaScriptCore/runtime/JSArrayBufferView.cpp [new file with mode: 0644]
Source/JavaScriptCore/runtime/JSArrayBufferView.h [new file with mode: 0644]
Source/JavaScriptCore/runtime/JSArrayBufferViewInlines.h [new file with mode: 0644]
Source/JavaScriptCore/runtime/JSCell.cpp
Source/JavaScriptCore/runtime/JSCell.h
Source/JavaScriptCore/runtime/JSDataView.cpp [new file with mode: 0644]
Source/JavaScriptCore/runtime/JSDataView.h [new file with mode: 0644]
Source/JavaScriptCore/runtime/JSDataViewPrototype.cpp [new file with mode: 0644]
Source/JavaScriptCore/runtime/JSDataViewPrototype.h [moved from Source/WebCore/html/canvas/Uint32Array.idl with 54% similarity]
Source/JavaScriptCore/runtime/JSFloat32Array.h [moved from Source/WebCore/html/canvas/ArrayBufferView.idl with 72% similarity]
Source/JavaScriptCore/runtime/JSFloat64Array.h [moved from Source/WebCore/html/canvas/ArrayBuffer.idl with 68% similarity]
Source/JavaScriptCore/runtime/JSGenericTypedArrayView.h [new file with mode: 0644]
Source/JavaScriptCore/runtime/JSGenericTypedArrayViewConstructor.h [moved from Source/WebCore/html/canvas/Int32Array.idl with 52% similarity]
Source/JavaScriptCore/runtime/JSGenericTypedArrayViewConstructorInlines.h [new file with mode: 0644]
Source/JavaScriptCore/runtime/JSGenericTypedArrayViewInlines.h [new file with mode: 0644]
Source/JavaScriptCore/runtime/JSGenericTypedArrayViewPrototype.h [new file with mode: 0644]
Source/JavaScriptCore/runtime/JSGenericTypedArrayViewPrototypeInlines.h [new file with mode: 0644]
Source/JavaScriptCore/runtime/JSGlobalObject.cpp
Source/JavaScriptCore/runtime/JSGlobalObject.h
Source/JavaScriptCore/runtime/JSInt16Array.h [moved from Source/WebCore/html/canvas/Uint8Array.idl with 55% similarity]
Source/JavaScriptCore/runtime/JSInt32Array.h [new file with mode: 0644]
Source/JavaScriptCore/runtime/JSInt8Array.h [new file with mode: 0644]
Source/JavaScriptCore/runtime/JSTypedArrayConstructors.cpp [new file with mode: 0644]
Source/JavaScriptCore/runtime/JSTypedArrayConstructors.h [new file with mode: 0644]
Source/JavaScriptCore/runtime/JSTypedArrayPrototypes.cpp [new file with mode: 0644]
Source/JavaScriptCore/runtime/JSTypedArrayPrototypes.h [new file with mode: 0644]
Source/JavaScriptCore/runtime/JSTypedArrays.cpp [moved from Source/WebCore/html/canvas/Int8Array.idl with 57% similarity]
Source/JavaScriptCore/runtime/JSTypedArrays.h [new file with mode: 0644]
Source/JavaScriptCore/runtime/JSUint16Array.h [new file with mode: 0644]
Source/JavaScriptCore/runtime/JSUint32Array.h [new file with mode: 0644]
Source/JavaScriptCore/runtime/JSUint8Array.h [new file with mode: 0644]
Source/JavaScriptCore/runtime/JSUint8ClampedArray.h [moved from Source/WebCore/html/canvas/Uint16Array.idl with 56% similarity]
Source/JavaScriptCore/runtime/Operations.h
Source/JavaScriptCore/runtime/Options.h
Source/JavaScriptCore/runtime/SimpleTypedArrayController.cpp [new file with mode: 0644]
Source/JavaScriptCore/runtime/SimpleTypedArrayController.h [new file with mode: 0644]
Source/JavaScriptCore/runtime/Structure.h
Source/JavaScriptCore/runtime/StructureInlines.h
Source/JavaScriptCore/runtime/TypedArrayAdaptors.h [new file with mode: 0644]
Source/JavaScriptCore/runtime/TypedArrayController.cpp [new file with mode: 0644]
Source/JavaScriptCore/runtime/TypedArrayController.h [new file with mode: 0644]
Source/JavaScriptCore/runtime/TypedArrayInlines.h [new file with mode: 0644]
Source/JavaScriptCore/runtime/TypedArrayType.cpp [new file with mode: 0644]
Source/JavaScriptCore/runtime/TypedArrayType.h [new file with mode: 0644]
Source/JavaScriptCore/runtime/TypedArrays.h [new file with mode: 0644]
Source/JavaScriptCore/runtime/Uint16Array.h
Source/JavaScriptCore/runtime/Uint32Array.h
Source/JavaScriptCore/runtime/Uint8Array.h
Source/JavaScriptCore/runtime/Uint8ClampedArray.h
Source/JavaScriptCore/runtime/VM.cpp
Source/JavaScriptCore/runtime/VM.h
Source/WTF/ChangeLog
Source/WTF/GNUmakefile.list.am
Source/WTF/WTF.vcxproj/WTF.vcxproj
Source/WTF/WTF.xcodeproj/project.pbxproj
Source/WTF/wtf/CMakeLists.txt
Source/WTF/wtf/DeferrableRefCounted.h [new file with mode: 0644]
Source/WTF/wtf/FlipBytes.h [new file with mode: 0644]
Source/WebCore/CMakeLists.txt
Source/WebCore/ChangeLog
Source/WebCore/DerivedSources.make
Source/WebCore/DerivedSources.pri
Source/WebCore/ForwardingHeaders/runtime/DataView.h [new file with mode: 0644]
Source/WebCore/ForwardingHeaders/runtime/JSArrayBuffer.h [new file with mode: 0644]
Source/WebCore/ForwardingHeaders/runtime/JSArrayBufferView.h [new file with mode: 0644]
Source/WebCore/ForwardingHeaders/runtime/JSDataView.h [new file with mode: 0644]
Source/WebCore/ForwardingHeaders/runtime/JSTypedArrays.h [new file with mode: 0644]
Source/WebCore/ForwardingHeaders/runtime/TypedArrayController.h [new file with mode: 0644]
Source/WebCore/ForwardingHeaders/runtime/TypedArrayInlines.h [new file with mode: 0644]
Source/WebCore/ForwardingHeaders/runtime/TypedArrays.h [new file with mode: 0644]
Source/WebCore/GNUmakefile.list.am
Source/WebCore/Modules/webaudio/RealtimeAnalyser.h
Source/WebCore/Target.pri
Source/WebCore/UseJSC.cmake
Source/WebCore/WebCore.exp.in
Source/WebCore/WebCore.vcxproj/WebCore.vcxproj
Source/WebCore/WebCore.xcodeproj/project.pbxproj
Source/WebCore/bindings/js/DOMWrapperWorld.h
Source/WebCore/bindings/js/JSArrayBufferViewHelper.h [deleted file]
Source/WebCore/bindings/js/JSAudioContextCustom.cpp
Source/WebCore/bindings/js/JSBindingsAllInOne.cpp
Source/WebCore/bindings/js/JSBlobCustom.cpp
Source/WebCore/bindings/js/JSCSSRuleCustom.cpp
Source/WebCore/bindings/js/JSCSSValueCustom.cpp
Source/WebCore/bindings/js/JSCryptoCustom.cpp
Source/WebCore/bindings/js/JSDOMBinding.h
Source/WebCore/bindings/js/JSDataViewCustom.cpp [deleted file]
Source/WebCore/bindings/js/JSDictionary.cpp
Source/WebCore/bindings/js/JSDictionary.h
Source/WebCore/bindings/js/JSDocumentCustom.cpp
Source/WebCore/bindings/js/JSEventCustom.cpp
Source/WebCore/bindings/js/JSFileReaderCustom.cpp
Source/WebCore/bindings/js/JSHTMLCollectionCustom.cpp
Source/WebCore/bindings/js/JSHTMLTemplateElementCustom.cpp
Source/WebCore/bindings/js/JSImageDataCustom.cpp
Source/WebCore/bindings/js/JSInjectedScriptHostCustom.cpp
Source/WebCore/bindings/js/JSMessageEventCustom.cpp
Source/WebCore/bindings/js/JSMessagePortCustom.cpp
Source/WebCore/bindings/js/JSSVGPathSegCustom.cpp
Source/WebCore/bindings/js/JSStyleSheetCustom.cpp
Source/WebCore/bindings/js/JSTrackCustom.cpp
Source/WebCore/bindings/js/JSWebGLRenderingContextCustom.cpp
Source/WebCore/bindings/js/JSXMLHttpRequestCustom.cpp
Source/WebCore/bindings/js/SerializedScriptValue.cpp
Source/WebCore/bindings/js/WebCoreJSClientData.h
Source/WebCore/bindings/js/WebCoreTypedArrayController.cpp [new file with mode: 0644]
Source/WebCore/bindings/js/WebCoreTypedArrayController.h [moved from Source/WebCore/bindings/js/JSArrayBufferCustom.cpp with 53% similarity]
Source/WebCore/bindings/scripts/CodeGenerator.pm
Source/WebCore/bindings/scripts/CodeGeneratorJS.pm
Source/WebCore/bridge/qt/qt_runtime.cpp
Source/WebCore/fileapi/WebKitBlobBuilder.cpp
Source/WebCore/fileapi/WebKitBlobBuilder.h
Source/WebCore/html/canvas/DataView.cpp [deleted file]
Source/WebCore/html/canvas/DataView.h [deleted file]
Source/WebCore/html/canvas/DataView.idl [deleted file]
Source/WebCore/html/canvas/Float32Array.idl [deleted file]
Source/WebCore/html/canvas/Float64Array.idl [deleted file]
Source/WebCore/html/canvas/Uint8ClampedArray.idl [deleted file]
Source/WebCore/html/canvas/WebGLRenderingContext.cpp
Source/WebCore/page/Crypto.cpp
Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm
Source/WebCore/platform/graphics/filters/FECustomFilter.h
Source/WebCore/platform/graphics/filters/FEGaussianBlur.cpp
Source/WebCore/platform/graphics/filters/FilterEffect.cpp
Source/WebCore/testing/MockCDM.cpp
Source/WebKit2/ChangeLog
Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp
Source/autotools/symbols.filter

index 892c806..c65508a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2013-08-14  Filip Pizlo  <fpizlo@apple.com>
+
+        Typed arrays should be rewritten
+        https://bugs.webkit.org/show_bug.cgi?id=119064
+
+        Reviewed by Oliver Hunt.
+
+        Automake work courtesy of Zan Dobersek <zdobersek@igalia.com>.
+
+        * Source/autotools/symbols.filter:
+
 2013-08-14  Tim Horton  <timothy_horton@apple.com>
 
         Un-inline dataLog dumpers for IntSize and IntPoint
index 2f65174..846ada0 100644 (file)
@@ -1,3 +1,63 @@
+2013-08-14  Filip Pizlo  <fpizlo@apple.com>
+
+        Typed arrays should be rewritten
+        https://bugs.webkit.org/show_bug.cgi?id=119064
+
+        Reviewed by Oliver Hunt.
+
+        * fast/canvas/webgl/array-set-invalid-arguments-expected.txt:
+        * fast/canvas/webgl/array-set-out-of-bounds-expected.txt:
+        * fast/canvas/webgl/array-unit-tests-expected.txt:
+        * fast/canvas/webgl/array-unit-tests.html:
+        * fast/canvas/webgl/data-view-crash-expected.txt:
+        * fast/canvas/webgl/script-tests/arraybuffer-transfer-of-control.js:
+        (checkView):
+        * fast/dom/call-a-constructor-as-a-function-expected.txt:
+        * fast/dom/call-a-constructor-as-a-function.html:
+        * fast/js/constructor-length.html:
+        * fast/js/global-constructors-attributes-dedicated-worker-expected.txt:
+        * fast/js/global-constructors-attributes-expected.txt:
+        * fast/js/global-constructors-attributes-shared-worker-expected.txt:
+        * fast/js/regress/ArrayBuffer-Int8Array-alloc-expected.txt: Added.
+        * fast/js/regress/ArrayBuffer-Int8Array-alloc-huge-long-lived-expected.txt: Added.
+        * fast/js/regress/ArrayBuffer-Int8Array-alloc-huge-long-lived.html: Added.
+        * fast/js/regress/ArrayBuffer-Int8Array-alloc-large-long-lived-expected.txt: Added.
+        * fast/js/regress/ArrayBuffer-Int8Array-alloc-large-long-lived.html: Added.
+        * fast/js/regress/ArrayBuffer-Int8Array-alloc-long-lived-buffer-expected.txt: Added.
+        * fast/js/regress/ArrayBuffer-Int8Array-alloc-long-lived-buffer.html: Added.
+        * fast/js/regress/ArrayBuffer-Int8Array-alloc-long-lived-expected.txt: Added.
+        * fast/js/regress/ArrayBuffer-Int8Array-alloc-long-lived.html: Added.
+        * fast/js/regress/ArrayBuffer-Int8Array-alloc.html: Added.
+        * fast/js/regress/Int32Array-Int8Array-view-alloc-expected.txt: Added.
+        * fast/js/regress/Int32Array-Int8Array-view-alloc.html: Added.
+        * fast/js/regress/Int32Array-alloc-expected.txt: Added.
+        * fast/js/regress/Int32Array-alloc-huge-expected.txt: Added.
+        * fast/js/regress/Int32Array-alloc-huge-long-lived-expected.txt: Added.
+        * fast/js/regress/Int32Array-alloc-huge-long-lived.html: Added.
+        * fast/js/regress/Int32Array-alloc-huge.html: Added.
+        * fast/js/regress/Int32Array-alloc-large-expected.txt: Added.
+        * fast/js/regress/Int32Array-alloc-large-long-lived-expected.txt: Added.
+        * fast/js/regress/Int32Array-alloc-large-long-lived.html: Added.
+        * fast/js/regress/Int32Array-alloc-large.html: Added.
+        * fast/js/regress/Int32Array-alloc-long-lived-expected.txt: Added.
+        * fast/js/regress/Int32Array-alloc-long-lived.html: Added.
+        * fast/js/regress/Int32Array-alloc.html: Added.
+        * fast/js/regress/script-tests/ArrayBuffer-Int8Array-alloc-huge-long-lived.js: Added.
+        * fast/js/regress/script-tests/ArrayBuffer-Int8Array-alloc-large-long-lived.js: Added.
+        * fast/js/regress/script-tests/ArrayBuffer-Int8Array-alloc-long-lived-buffer.js: Added.
+        * fast/js/regress/script-tests/ArrayBuffer-Int8Array-alloc-long-lived.js: Added.
+        * fast/js/regress/script-tests/ArrayBuffer-Int8Array-alloc.js: Added.
+        * fast/js/regress/script-tests/Int32Array-Int8Array-view-alloc.js: Added.
+        * fast/js/regress/script-tests/Int32Array-alloc-huge-long-lived.js: Added.
+        * fast/js/regress/script-tests/Int32Array-alloc-huge.js: Added.
+        * fast/js/regress/script-tests/Int32Array-alloc-large-long-lived.js: Added.
+        * fast/js/regress/script-tests/Int32Array-alloc-large.js: Added.
+        * fast/js/regress/script-tests/Int32Array-alloc-long-lived.js: Added.
+        * fast/js/regress/script-tests/Int32Array-alloc.js: Added.
+        * platform/mac/fast/js/constructor-length-expected.txt:
+        * webgl/resources/webgl_test_files/conformance/typedarrays/array-unit-tests.html:
+        * webgl/resources/webgl_test_files/conformance/typedarrays/data-view-test.html:
+
 2013-08-15  Oliver Hunt  <oliver@apple.com>
 
         <https://webkit.org/b/119830> Assigning to a readonly global results in DFG byte code parse failure
index 6e5bd04..63987ec 100644 (file)
@@ -2,27 +2,27 @@ Verifies that attempting to set invalid elements to a Typed Array throws an exce
 
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
-PASS typedArray.set() threw exception TypeError: Not enough arguments.
-PASS typedArray.set('hello world') threw exception TypeError: Invalid argument.
-PASS typedArray.set(otherArray, 1) threw exception RangeError: Index is out of range..
-PASS typedArray.set() threw exception TypeError: Not enough arguments.
-PASS typedArray.set('hello world') threw exception TypeError: Invalid argument.
-PASS typedArray.set(otherArray, 1) threw exception RangeError: Index is out of range..
-PASS typedArray.set() threw exception TypeError: Not enough arguments.
-PASS typedArray.set('hello world') threw exception TypeError: Invalid argument.
-PASS typedArray.set(otherArray, 1) threw exception RangeError: Index is out of range..
-PASS typedArray.set() threw exception TypeError: Not enough arguments.
-PASS typedArray.set('hello world') threw exception TypeError: Invalid argument.
-PASS typedArray.set(otherArray, 1) threw exception RangeError: Index is out of range..
-PASS typedArray.set() threw exception TypeError: Not enough arguments.
-PASS typedArray.set('hello world') threw exception TypeError: Invalid argument.
-PASS typedArray.set(otherArray, 1) threw exception RangeError: Index is out of range..
-PASS typedArray.set() threw exception TypeError: Not enough arguments.
-PASS typedArray.set('hello world') threw exception TypeError: Invalid argument.
-PASS typedArray.set(otherArray, 1) threw exception RangeError: Index is out of range..
-PASS typedArray.set() threw exception TypeError: Not enough arguments.
-PASS typedArray.set('hello world') threw exception TypeError: Invalid argument.
-PASS typedArray.set(otherArray, 1) threw exception RangeError: Index is out of range..
+PASS typedArray.set() threw exception TypeError: Expected at least one argument.
+PASS typedArray.set('hello world') threw exception TypeError: First argument should be an object.
+PASS typedArray.set(otherArray, 1) threw exception RangeError: Range consisting of offset and length are out of bounds.
+PASS typedArray.set() threw exception TypeError: Expected at least one argument.
+PASS typedArray.set('hello world') threw exception TypeError: First argument should be an object.
+PASS typedArray.set(otherArray, 1) threw exception RangeError: Range consisting of offset and length are out of bounds.
+PASS typedArray.set() threw exception TypeError: Expected at least one argument.
+PASS typedArray.set('hello world') threw exception TypeError: First argument should be an object.
+PASS typedArray.set(otherArray, 1) threw exception RangeError: Range consisting of offset and length are out of bounds.
+PASS typedArray.set() threw exception TypeError: Expected at least one argument.
+PASS typedArray.set('hello world') threw exception TypeError: First argument should be an object.
+PASS typedArray.set(otherArray, 1) threw exception RangeError: Range consisting of offset and length are out of bounds.
+PASS typedArray.set() threw exception TypeError: Expected at least one argument.
+PASS typedArray.set('hello world') threw exception TypeError: First argument should be an object.
+PASS typedArray.set(otherArray, 1) threw exception RangeError: Range consisting of offset and length are out of bounds.
+PASS typedArray.set() threw exception TypeError: Expected at least one argument.
+PASS typedArray.set('hello world') threw exception TypeError: First argument should be an object.
+PASS typedArray.set(otherArray, 1) threw exception RangeError: Range consisting of offset and length are out of bounds.
+PASS typedArray.set() threw exception TypeError: Expected at least one argument.
+PASS typedArray.set('hello world') threw exception TypeError: First argument should be an object.
+PASS typedArray.set(otherArray, 1) threw exception RangeError: Range consisting of offset and length are out of bounds.
 PASS successfullyParsed is true
 
 TEST COMPLETE
index bcc7d85..c5daf1b 100644 (file)
@@ -4,26 +4,26 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE
 
 Regression test for https://bugs.webkit.org/show_bug.cgi?id=33352 : Passing array that is too large to set method of WebGLArrays does not throw an exception
 Testing Int8Array
-PASS webGLArray.set([4, 5], 1) threw exception RangeError: Index is out of range..
-PASS webGLArray.set([4, 5, 6]) threw exception RangeError: Index is out of range..
+PASS webGLArray.set([4, 5], 1) threw exception RangeError: Range consisting of offset and length are out of bounds.
+PASS webGLArray.set([4, 5, 6]) threw exception RangeError: Range consisting of offset and length are out of bounds.
 Testing Uint8Array
-PASS webGLArray.set([4, 5], 1) threw exception RangeError: Index is out of range..
-PASS webGLArray.set([4, 5, 6]) threw exception RangeError: Index is out of range..
+PASS webGLArray.set([4, 5], 1) threw exception RangeError: Range consisting of offset and length are out of bounds.
+PASS webGLArray.set([4, 5, 6]) threw exception RangeError: Range consisting of offset and length are out of bounds.
 Testing Int16Array
-PASS webGLArray.set([4, 5], 1) threw exception RangeError: Index is out of range..
-PASS webGLArray.set([4, 5, 6]) threw exception RangeError: Index is out of range..
+PASS webGLArray.set([4, 5], 1) threw exception RangeError: Range consisting of offset and length are out of bounds.
+PASS webGLArray.set([4, 5, 6]) threw exception RangeError: Range consisting of offset and length are out of bounds.
 Testing Uint16Array
-PASS webGLArray.set([4, 5], 1) threw exception RangeError: Index is out of range..
-PASS webGLArray.set([4, 5, 6]) threw exception RangeError: Index is out of range..
+PASS webGLArray.set([4, 5], 1) threw exception RangeError: Range consisting of offset and length are out of bounds.
+PASS webGLArray.set([4, 5, 6]) threw exception RangeError: Range consisting of offset and length are out of bounds.
 Testing Int32Array
-PASS webGLArray.set([4, 5], 1) threw exception RangeError: Index is out of range..
-PASS webGLArray.set([4, 5, 6]) threw exception RangeError: Index is out of range..
+PASS webGLArray.set([4, 5], 1) threw exception RangeError: Range consisting of offset and length are out of bounds.
+PASS webGLArray.set([4, 5, 6]) threw exception RangeError: Range consisting of offset and length are out of bounds.
 Testing Uint32Array
-PASS webGLArray.set([4, 5], 1) threw exception RangeError: Index is out of range..
-PASS webGLArray.set([4, 5, 6]) threw exception RangeError: Index is out of range..
+PASS webGLArray.set([4, 5], 1) threw exception RangeError: Range consisting of offset and length are out of bounds.
+PASS webGLArray.set([4, 5, 6]) threw exception RangeError: Range consisting of offset and length are out of bounds.
 Testing Float32Array
-PASS webGLArray.set([4, 5], 1) threw exception RangeError: Index is out of range..
-PASS webGLArray.set([4, 5, 6]) threw exception RangeError: Index is out of range..
+PASS webGLArray.set([4, 5], 1) threw exception RangeError: Range consisting of offset and length are out of bounds.
+PASS webGLArray.set([4, 5, 6]) threw exception RangeError: Range consisting of offset and length are out of bounds.
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 7ff651c..b41dbb1 100644 (file)
@@ -4,19 +4,9 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE
 
 PASS testSlice
 test inheritance hierarchy of typed array views
-PASS ArrayBufferView does not have [NoInterfaceObject] extended attribute and should be defined
-PASS new Int8Array(1) instanceof ArrayBufferView is true
-PASS new Uint8Array(1) instanceof ArrayBufferView is true
-PASS new Uint8ClampedArray(1) instanceof ArrayBufferView is true
-PASS new Int16Array(1) instanceof ArrayBufferView is true
-PASS new Uint16Array(1) instanceof ArrayBufferView is true
-PASS new Int32Array(1) instanceof ArrayBufferView is true
-PASS new Uint32Array(1) instanceof ArrayBufferView is true
-PASS new Float32Array(1) instanceof ArrayBufferView is true
-PASS new Float64Array(1) instanceof ArrayBufferView is true
-PASS new DataView(new ArrayBuffer(8)) instanceof ArrayBufferView is true
-PASS new ArrayBufferView() threw TypeError
-PASS new Uint8ClampedArray(1) instanceof Uint8Array is true
+PASS ArrayBufferView should be undefined and is
+WARN: shouldBe() expects string arguments
+PASS new Uint8ClampedArray(1) instanceof Uint8Array is false
 PASS test Float32Array SetAndGetPos10ToNeg10
 PASS test Float32Array ConstructWithArrayOfSignedValues
 PASS test Float32Array ConstructWithTypedArrayOfSignedValues
index 37dd412..997aeda 100644 (file)
@@ -119,26 +119,12 @@ function testInheritanceHierarchy() {
 
   try {
     var foo = ArrayBufferView;
-    testPassed('ArrayBufferView does not have [NoInterfaceObject] extended attribute and should be defined');
-
-    shouldBe('new Int8Array(1) instanceof ArrayBufferView', 'true');
-    shouldBe('new Uint8Array(1) instanceof ArrayBufferView', 'true');
-    shouldBe('new Uint8ClampedArray(1) instanceof ArrayBufferView', 'true');
-    shouldBe('new Int16Array(1) instanceof ArrayBufferView', 'true');
-    shouldBe('new Uint16Array(1) instanceof ArrayBufferView', 'true');
-    shouldBe('new Int32Array(1) instanceof ArrayBufferView', 'true');
-    shouldBe('new Uint32Array(1) instanceof ArrayBufferView', 'true');
-    shouldBe('new Float32Array(1) instanceof ArrayBufferView', 'true');
-    shouldBe('new Float64Array(1) instanceof ArrayBufferView', 'true');
-    shouldBe('new DataView(new ArrayBuffer(8)) instanceof ArrayBufferView', 'true');
-
-    shouldThrowTypeError(function() { new ArrayBufferView() }, "new ArrayBufferView()");
+    testFailed("ArrayBufferView should be undefined but is defined");
   } catch (e) {
-    testFailed('ArrayBufferView does not have [NoInterfaceObject] extended attribute but was not defined');
+    testPassed('ArrayBufferView should be undefined and is');
   }
 
-  // There is currently only one kind of view that inherits from another
-  shouldBe('new Uint8ClampedArray(1) instanceof Uint8Array', 'true');
+  shouldBe('new Uint8ClampedArray(1) instanceof Uint8Array', false);
 }
 
 //
index 6e201b2..556151a 100644 (file)
@@ -2,8 +2,8 @@ Test that DataView does not crash with bad offset or length.
 
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
-PASS view = new DataView(array.buffer, -4500000000) threw exception RangeError: Size is too large (or is negative)..
-PASS view = new DataView(array.buffer, -4500000000, 4500000000) threw exception RangeError: Size is too large (or is negative)..
+PASS view = new DataView(array.buffer, -4500000000) threw exception RangeError: Byte offset and length out of range of buffer.
+PASS view = new DataView(array.buffer, -4500000000, 4500000000) threw exception RangeError: Byte offset and length out of range of buffer.
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 4e1ede2..0d235ca 100644 (file)
@@ -13,6 +13,7 @@ var basicBufferTypes =
     ["Uint32", Uint32Array, 4],
     ["Int8", Int8Array, 1],
     ["Uint8", Uint8Array, 1],
+    ["Uint8Clamped", Uint8ClampedArray, 1],
     ["Int16", Int16Array, 2],
     ["Uint16", Uint16Array, 2],
     ["Float32", Float32Array, 4],
@@ -200,7 +201,7 @@ function checkView(testName, typedArrayType, view)
     }
     if (view.buffer.byteLength !== arraySize ||
         (!(view instanceof DataView) && view.length !== arrayEffectiveSize / view.BYTES_PER_ELEMENT)) {
-        testFailed(testName + ": view has the wrong length (" + view.length + ")");
+        testFailed(testName + ": view has the wrong length (" + view.length + " instead of " + arrayEffectiveSize + " / " + view.BYTES_PER_ELEMENT + ")");
         return false;
     }
     if (view.byteOffset !== arrayOffset) {
index 0906fdc..050d20d 100644 (file)
@@ -3,25 +3,15 @@ This tests if TypeError is thrown or not when we call a constructor as a normal
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-PASS ArrayBuffer() threw exception TypeError: ArrayBufferConstructor is not a function (evaluating 'ArrayBuffer()').
 SKIP AudioContext is not implemented.
 PASS FormData() threw exception TypeError: FormDataConstructor is not a function (evaluating 'FormData()').
-PASS DataView() threw exception TypeError: DataViewConstructor is not a function (evaluating 'DataView()').
 PASS EventSource() threw exception TypeError: EventSourceConstructor is not a function (evaluating 'EventSource()').
 PASS FileReader() threw exception TypeError: FileReaderConstructor is not a function (evaluating 'FileReader()').
-PASS Float32Array() threw exception TypeError: Float32ArrayConstructor is not a function (evaluating 'Float32Array()').
-PASS Float64Array() threw exception TypeError: Float64ArrayConstructor is not a function (evaluating 'Float64Array()').
 PASS Audio() threw exception TypeError: AudioConstructor is not a function (evaluating 'Audio()').
 PASS Image() threw exception TypeError: ImageConstructor is not a function (evaluating 'Image()').
 PASS Option() threw exception TypeError: OptionConstructor is not a function (evaluating 'Option()').
-PASS Int16Array() threw exception TypeError: Int16ArrayConstructor is not a function (evaluating 'Int16Array()').
-PASS Int32Array() threw exception TypeError: Int32ArrayConstructor is not a function (evaluating 'Int32Array()').
-PASS Int8Array() threw exception TypeError: Int8ArrayConstructor is not a function (evaluating 'Int8Array()').
 PASS MessageChannel() threw exception TypeError: MessageChannelConstructor is not a function (evaluating 'MessageChannel()').
 PASS SharedWorker() threw exception TypeError: SharedWorkerConstructor is not a function (evaluating 'SharedWorker()').
-PASS Uint16Array() threw exception TypeError: Uint16ArrayConstructor is not a function (evaluating 'Uint16Array()').
-PASS Uint32Array() threw exception TypeError: Uint32ArrayConstructor is not a function (evaluating 'Uint32Array()').
-PASS Uint8Array() threw exception TypeError: Uint8ArrayConstructor is not a function (evaluating 'Uint8Array()').
 PASS WebKitCSSMatrix() threw exception TypeError: WebKitCSSMatrixConstructor is not a function (evaluating 'WebKitCSSMatrix()').
 PASS WebKitPoint() threw exception TypeError: WebKitPointConstructor is not a function (evaluating 'WebKitPoint()').
 PASS WebSocket() threw exception TypeError: WebSocketConstructor is not a function (evaluating 'WebSocket()').
index bfe8aa6..3f6a641 100644 (file)
@@ -6,7 +6,7 @@
 
 description("This tests if TypeError is thrown or not when we call a constructor as a normal function.");
 
-var test_constructors = ["ArrayBuffer", "AudioContext", "FormData", "DataView", "EventSource", "FileReader", "Float32Array", "Float64Array", "Audio", "Image", "Option", "Int16Array", "Int32Array", "Int8Array", "MessageChannel", "SharedWorker", "Uint16Array", "Uint32Array", "Uint8Array", "WebKitCSSMatrix", "WebKitPoint", "WebSocket", "Worker", "XMLHttpRequest", "XSLTProcessor"];
+var test_constructors = ["AudioContext", "FormData", "EventSource", "FileReader", "Audio", "Image", "Option", "MessageChannel", "SharedWorker", "WebKitCSSMatrix", "WebKitPoint", "WebSocket", "Worker", "XMLHttpRequest", "XSLTProcessor"];
 
 test_constructors.forEach(function (constructor) {
     if (eval("window." + constructor))
index bd886ad..1093b4d 100644 (file)
@@ -15,18 +15,18 @@ shouldBe('CloseEvent.length', '1');
 shouldBe('CustomEvent.length', '1');
 shouldBe('DOMFormData.length', '0');
 shouldBe('DOMParser.length', '0');
-shouldBe('DataView.length', '1');
+shouldBe('DataView.length', '3');
 shouldBe('ErrorEvent.length', '1');
 shouldBe('Event.length', '1');
 shouldBe('EventSource.length', '1');
-shouldBe('Float32Array.length', '1');
-shouldBe('Float64Array.length', '1');
+shouldBe('Float32Array.length', '3');
+shouldBe('Float64Array.length', '3');
 shouldBe('FileReader.length', '0');
 shouldBe('FileReaderSync.length', '0');
 shouldBe('HashChangeEvent.length', '1');
-shouldBe('Int16Array.length', '1');
-shouldBe('Int32Array.length', '1');
-shouldBe('Int8Array.length', '1');
+shouldBe('Int16Array.length', '3');
+shouldBe('Int32Array.length', '3');
+shouldBe('Int8Array.length', '3');
 shouldBe('Intent.length', '3');
 shouldBe('MediaController.length', '0');
 shouldBe('MediaStream.length', '0');
@@ -42,10 +42,10 @@ shouldBe('SharedWorker.length', '1');
 shouldBe('StorageEvent.length', '1');
 shouldBe('TextTrackCue.length', '3');
 shouldBe('TrackEvent.length', '1');
-shouldBe('Uint16Array.length', '1');
-shouldBe('Uint32Array.length', '1');
-shouldBe('Uint8Array.length', '1');
-shouldBe('Uint8ClampedArray.length', '1');
+shouldBe('Uint16Array.length', '3');
+shouldBe('Uint32Array.length', '3');
+shouldBe('Uint8Array.length', '3');
+shouldBe('Uint8ClampedArray.length', '3');
 shouldBe('WebGLContextEvent.length', '1');
 shouldBe('WebKitAnimationEvent.length', '1');
 shouldBe('WebKitCSSMatrix.length', '0');
index 5838169..b01c42f 100644 (file)
@@ -4,21 +4,11 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE
 
 
 Starting worker: script-tests/global-constructors-attributes.js
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'ArrayBuffer').value is ArrayBuffer
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'ArrayBuffer').hasOwnProperty('get') is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'ArrayBuffer').hasOwnProperty('set') is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'ArrayBuffer').enumerable is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'ArrayBuffer').configurable is true
 PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Blob').value is Blob
 PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Blob').hasOwnProperty('get') is false
 PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Blob').hasOwnProperty('set') is false
 PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Blob').enumerable is false
 PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Blob').configurable is true
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'DataView').value is DataView
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'DataView').hasOwnProperty('get') is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'DataView').hasOwnProperty('set') is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'DataView').enumerable is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'DataView').configurable is true
 PASS [Worker] Object.getOwnPropertyDescriptor(global, 'DedicatedWorkerGlobalScope').value is DedicatedWorkerGlobalScope
 PASS [Worker] Object.getOwnPropertyDescriptor(global, 'DedicatedWorkerGlobalScope').hasOwnProperty('get') is false
 PASS [Worker] Object.getOwnPropertyDescriptor(global, 'DedicatedWorkerGlobalScope').hasOwnProperty('set') is false
@@ -39,31 +29,6 @@ PASS [Worker] Object.getOwnPropertyDescriptor(global, 'FileReaderSync').hasOwnPr
 PASS [Worker] Object.getOwnPropertyDescriptor(global, 'FileReaderSync').hasOwnProperty('set') is false
 PASS [Worker] Object.getOwnPropertyDescriptor(global, 'FileReaderSync').enumerable is false
 PASS [Worker] Object.getOwnPropertyDescriptor(global, 'FileReaderSync').configurable is true
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Float32Array').value is Float32Array
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Float32Array').hasOwnProperty('get') is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Float32Array').hasOwnProperty('set') is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Float32Array').enumerable is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Float32Array').configurable is true
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Float64Array').value is Float64Array
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Float64Array').hasOwnProperty('get') is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Float64Array').hasOwnProperty('set') is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Float64Array').enumerable is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Float64Array').configurable is true
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Int16Array').value is Int16Array
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Int16Array').hasOwnProperty('get') is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Int16Array').hasOwnProperty('set') is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Int16Array').enumerable is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Int16Array').configurable is true
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Int32Array').value is Int32Array
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Int32Array').hasOwnProperty('get') is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Int32Array').hasOwnProperty('set') is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Int32Array').enumerable is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Int32Array').configurable is true
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Int8Array').value is Int8Array
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Int8Array').hasOwnProperty('get') is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Int8Array').hasOwnProperty('set') is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Int8Array').enumerable is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Int8Array').configurable is true
 PASS [Worker] Object.getOwnPropertyDescriptor(global, 'MessageChannel').value is MessageChannel
 PASS [Worker] Object.getOwnPropertyDescriptor(global, 'MessageChannel').hasOwnProperty('get') is false
 PASS [Worker] Object.getOwnPropertyDescriptor(global, 'MessageChannel').hasOwnProperty('set') is false
@@ -79,26 +44,6 @@ PASS [Worker] Object.getOwnPropertyDescriptor(global, 'URL').hasOwnProperty('get
 PASS [Worker] Object.getOwnPropertyDescriptor(global, 'URL').hasOwnProperty('set') is false
 PASS [Worker] Object.getOwnPropertyDescriptor(global, 'URL').enumerable is false
 PASS [Worker] Object.getOwnPropertyDescriptor(global, 'URL').configurable is true
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Uint16Array').value is Uint16Array
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Uint16Array').hasOwnProperty('get') is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Uint16Array').hasOwnProperty('set') is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Uint16Array').enumerable is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Uint16Array').configurable is true
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Uint32Array').value is Uint32Array
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Uint32Array').hasOwnProperty('get') is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Uint32Array').hasOwnProperty('set') is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Uint32Array').enumerable is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Uint32Array').configurable is true
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Uint8Array').value is Uint8Array
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Uint8Array').hasOwnProperty('get') is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Uint8Array').hasOwnProperty('set') is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Uint8Array').enumerable is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Uint8Array').configurable is true
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Uint8ClampedArray').value is Uint8ClampedArray
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Uint8ClampedArray').hasOwnProperty('get') is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Uint8ClampedArray').hasOwnProperty('set') is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Uint8ClampedArray').enumerable is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Uint8ClampedArray').configurable is true
 PASS [Worker] Object.getOwnPropertyDescriptor(global, 'WebSocket').value is WebSocket
 PASS [Worker] Object.getOwnPropertyDescriptor(global, 'WebSocket').hasOwnProperty('get') is false
 PASS [Worker] Object.getOwnPropertyDescriptor(global, 'WebSocket').hasOwnProperty('set') is false
index 64aba99..fd18b60 100644 (file)
@@ -8,16 +8,6 @@ PASS Object.getOwnPropertyDescriptor(global, 'AnalyserNode').hasOwnProperty('get
 PASS Object.getOwnPropertyDescriptor(global, 'AnalyserNode').hasOwnProperty('set') is false
 PASS Object.getOwnPropertyDescriptor(global, 'AnalyserNode').enumerable is false
 PASS Object.getOwnPropertyDescriptor(global, 'AnalyserNode').configurable is true
-PASS Object.getOwnPropertyDescriptor(global, 'ArrayBuffer').value is ArrayBuffer
-PASS Object.getOwnPropertyDescriptor(global, 'ArrayBuffer').hasOwnProperty('get') is false
-PASS Object.getOwnPropertyDescriptor(global, 'ArrayBuffer').hasOwnProperty('set') is false
-PASS Object.getOwnPropertyDescriptor(global, 'ArrayBuffer').enumerable is false
-PASS Object.getOwnPropertyDescriptor(global, 'ArrayBuffer').configurable is true
-PASS Object.getOwnPropertyDescriptor(global, 'ArrayBufferView').value is ArrayBufferView
-PASS Object.getOwnPropertyDescriptor(global, 'ArrayBufferView').hasOwnProperty('get') is false
-PASS Object.getOwnPropertyDescriptor(global, 'ArrayBufferView').hasOwnProperty('set') is false
-PASS Object.getOwnPropertyDescriptor(global, 'ArrayBufferView').enumerable is false
-PASS Object.getOwnPropertyDescriptor(global, 'ArrayBufferView').configurable is true
 PASS Object.getOwnPropertyDescriptor(global, 'Attr').value is Attr
 PASS Object.getOwnPropertyDescriptor(global, 'Attr').hasOwnProperty('get') is false
 PASS Object.getOwnPropertyDescriptor(global, 'Attr').hasOwnProperty('set') is false
@@ -263,11 +253,6 @@ PASS Object.getOwnPropertyDescriptor(global, 'DOMTokenList').hasOwnProperty('get
 PASS Object.getOwnPropertyDescriptor(global, 'DOMTokenList').hasOwnProperty('set') is false
 PASS Object.getOwnPropertyDescriptor(global, 'DOMTokenList').enumerable is false
 PASS Object.getOwnPropertyDescriptor(global, 'DOMTokenList').configurable is true
-PASS Object.getOwnPropertyDescriptor(global, 'DataView').value is DataView
-PASS Object.getOwnPropertyDescriptor(global, 'DataView').hasOwnProperty('get') is false
-PASS Object.getOwnPropertyDescriptor(global, 'DataView').hasOwnProperty('set') is false
-PASS Object.getOwnPropertyDescriptor(global, 'DataView').enumerable is false
-PASS Object.getOwnPropertyDescriptor(global, 'DataView').configurable is true
 PASS Object.getOwnPropertyDescriptor(global, 'DelayNode').value is DelayNode
 PASS Object.getOwnPropertyDescriptor(global, 'DelayNode').hasOwnProperty('get') is false
 PASS Object.getOwnPropertyDescriptor(global, 'DelayNode').hasOwnProperty('set') is false
@@ -348,16 +333,6 @@ PASS Object.getOwnPropertyDescriptor(global, 'FileReader').hasOwnProperty('get')
 PASS Object.getOwnPropertyDescriptor(global, 'FileReader').hasOwnProperty('set') is false
 PASS Object.getOwnPropertyDescriptor(global, 'FileReader').enumerable is false
 PASS Object.getOwnPropertyDescriptor(global, 'FileReader').configurable is true
-PASS Object.getOwnPropertyDescriptor(global, 'Float32Array').value is Float32Array
-PASS Object.getOwnPropertyDescriptor(global, 'Float32Array').hasOwnProperty('get') is false
-PASS Object.getOwnPropertyDescriptor(global, 'Float32Array').hasOwnProperty('set') is false
-PASS Object.getOwnPropertyDescriptor(global, 'Float32Array').enumerable is false
-PASS Object.getOwnPropertyDescriptor(global, 'Float32Array').configurable is true
-PASS Object.getOwnPropertyDescriptor(global, 'Float64Array').value is Float64Array
-PASS Object.getOwnPropertyDescriptor(global, 'Float64Array').hasOwnProperty('get') is false
-PASS Object.getOwnPropertyDescriptor(global, 'Float64Array').hasOwnProperty('set') is false
-PASS Object.getOwnPropertyDescriptor(global, 'Float64Array').enumerable is false
-PASS Object.getOwnPropertyDescriptor(global, 'Float64Array').configurable is true
 PASS Object.getOwnPropertyDescriptor(global, 'FocusEvent').value is FocusEvent
 PASS Object.getOwnPropertyDescriptor(global, 'FocusEvent').hasOwnProperty('get') is false
 PASS Object.getOwnPropertyDescriptor(global, 'FocusEvent').hasOwnProperty('set') is false
@@ -748,21 +723,6 @@ PASS Object.getOwnPropertyDescriptor(global, 'ImageData').hasOwnProperty('get')
 PASS Object.getOwnPropertyDescriptor(global, 'ImageData').hasOwnProperty('set') is false
 PASS Object.getOwnPropertyDescriptor(global, 'ImageData').enumerable is false
 PASS Object.getOwnPropertyDescriptor(global, 'ImageData').configurable is true
-PASS Object.getOwnPropertyDescriptor(global, 'Int16Array').value is Int16Array
-PASS Object.getOwnPropertyDescriptor(global, 'Int16Array').hasOwnProperty('get') is false
-PASS Object.getOwnPropertyDescriptor(global, 'Int16Array').hasOwnProperty('set') is false
-PASS Object.getOwnPropertyDescriptor(global, 'Int16Array').enumerable is false
-PASS Object.getOwnPropertyDescriptor(global, 'Int16Array').configurable is true
-PASS Object.getOwnPropertyDescriptor(global, 'Int32Array').value is Int32Array
-PASS Object.getOwnPropertyDescriptor(global, 'Int32Array').hasOwnProperty('get') is false
-PASS Object.getOwnPropertyDescriptor(global, 'Int32Array').hasOwnProperty('set') is false
-PASS Object.getOwnPropertyDescriptor(global, 'Int32Array').enumerable is false
-PASS Object.getOwnPropertyDescriptor(global, 'Int32Array').configurable is true
-PASS Object.getOwnPropertyDescriptor(global, 'Int8Array').value is Int8Array
-PASS Object.getOwnPropertyDescriptor(global, 'Int8Array').hasOwnProperty('get') is false
-PASS Object.getOwnPropertyDescriptor(global, 'Int8Array').hasOwnProperty('set') is false
-PASS Object.getOwnPropertyDescriptor(global, 'Int8Array').enumerable is false
-PASS Object.getOwnPropertyDescriptor(global, 'Int8Array').configurable is true
 PASS Object.getOwnPropertyDescriptor(global, 'KeyboardEvent').value is KeyboardEvent
 PASS Object.getOwnPropertyDescriptor(global, 'KeyboardEvent').hasOwnProperty('get') is false
 PASS Object.getOwnPropertyDescriptor(global, 'KeyboardEvent').hasOwnProperty('set') is false
@@ -1798,26 +1758,6 @@ PASS Object.getOwnPropertyDescriptor(global, 'URL').hasOwnProperty('get') is fal
 PASS Object.getOwnPropertyDescriptor(global, 'URL').hasOwnProperty('set') is false
 PASS Object.getOwnPropertyDescriptor(global, 'URL').enumerable is false
 PASS Object.getOwnPropertyDescriptor(global, 'URL').configurable is true
-PASS Object.getOwnPropertyDescriptor(global, 'Uint16Array').value is Uint16Array
-PASS Object.getOwnPropertyDescriptor(global, 'Uint16Array').hasOwnProperty('get') is false
-PASS Object.getOwnPropertyDescriptor(global, 'Uint16Array').hasOwnProperty('set') is false
-PASS Object.getOwnPropertyDescriptor(global, 'Uint16Array').enumerable is false
-PASS Object.getOwnPropertyDescriptor(global, 'Uint16Array').configurable is true
-PASS Object.getOwnPropertyDescriptor(global, 'Uint32Array').value is Uint32Array
-PASS Object.getOwnPropertyDescriptor(global, 'Uint32Array').hasOwnProperty('get') is false
-PASS Object.getOwnPropertyDescriptor(global, 'Uint32Array').hasOwnProperty('set') is false
-PASS Object.getOwnPropertyDescriptor(global, 'Uint32Array').enumerable is false
-PASS Object.getOwnPropertyDescriptor(global, 'Uint32Array').configurable is true
-PASS Object.getOwnPropertyDescriptor(global, 'Uint8Array').value is Uint8Array
-PASS Object.getOwnPropertyDescriptor(global, 'Uint8Array').hasOwnProperty('get') is false
-PASS Object.getOwnPropertyDescriptor(global, 'Uint8Array').hasOwnProperty('set') is false
-PASS Object.getOwnPropertyDescriptor(global, 'Uint8Array').enumerable is false
-PASS Object.getOwnPropertyDescriptor(global, 'Uint8Array').configurable is true
-PASS Object.getOwnPropertyDescriptor(global, 'Uint8ClampedArray').value is Uint8ClampedArray
-PASS Object.getOwnPropertyDescriptor(global, 'Uint8ClampedArray').hasOwnProperty('get') is false
-PASS Object.getOwnPropertyDescriptor(global, 'Uint8ClampedArray').hasOwnProperty('set') is false
-PASS Object.getOwnPropertyDescriptor(global, 'Uint8ClampedArray').enumerable is false
-PASS Object.getOwnPropertyDescriptor(global, 'Uint8ClampedArray').configurable is true
 PASS Object.getOwnPropertyDescriptor(global, 'WaveShaperNode').value is WaveShaperNode
 PASS Object.getOwnPropertyDescriptor(global, 'WaveShaperNode').hasOwnProperty('get') is false
 PASS Object.getOwnPropertyDescriptor(global, 'WaveShaperNode').hasOwnProperty('set') is false
index 6f683b8..12267a8 100644 (file)
@@ -4,21 +4,11 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE
 
 
 Starting worker: script-tests/global-constructors-attributes.js
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'ArrayBuffer').value is ArrayBuffer
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'ArrayBuffer').hasOwnProperty('get') is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'ArrayBuffer').hasOwnProperty('set') is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'ArrayBuffer').enumerable is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'ArrayBuffer').configurable is true
 PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Blob').value is Blob
 PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Blob').hasOwnProperty('get') is false
 PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Blob').hasOwnProperty('set') is false
 PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Blob').enumerable is false
 PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Blob').configurable is true
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'DataView').value is DataView
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'DataView').hasOwnProperty('get') is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'DataView').hasOwnProperty('set') is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'DataView').enumerable is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'DataView').configurable is true
 PASS [Worker] Object.getOwnPropertyDescriptor(global, 'EventSource').value is EventSource
 PASS [Worker] Object.getOwnPropertyDescriptor(global, 'EventSource').hasOwnProperty('get') is false
 PASS [Worker] Object.getOwnPropertyDescriptor(global, 'EventSource').hasOwnProperty('set') is false
@@ -34,31 +24,6 @@ PASS [Worker] Object.getOwnPropertyDescriptor(global, 'FileReaderSync').hasOwnPr
 PASS [Worker] Object.getOwnPropertyDescriptor(global, 'FileReaderSync').hasOwnProperty('set') is false
 PASS [Worker] Object.getOwnPropertyDescriptor(global, 'FileReaderSync').enumerable is false
 PASS [Worker] Object.getOwnPropertyDescriptor(global, 'FileReaderSync').configurable is true
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Float32Array').value is Float32Array
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Float32Array').hasOwnProperty('get') is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Float32Array').hasOwnProperty('set') is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Float32Array').enumerable is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Float32Array').configurable is true
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Float64Array').value is Float64Array
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Float64Array').hasOwnProperty('get') is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Float64Array').hasOwnProperty('set') is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Float64Array').enumerable is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Float64Array').configurable is true
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Int16Array').value is Int16Array
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Int16Array').hasOwnProperty('get') is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Int16Array').hasOwnProperty('set') is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Int16Array').enumerable is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Int16Array').configurable is true
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Int32Array').value is Int32Array
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Int32Array').hasOwnProperty('get') is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Int32Array').hasOwnProperty('set') is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Int32Array').enumerable is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Int32Array').configurable is true
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Int8Array').value is Int8Array
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Int8Array').hasOwnProperty('get') is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Int8Array').hasOwnProperty('set') is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Int8Array').enumerable is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Int8Array').configurable is true
 PASS [Worker] Object.getOwnPropertyDescriptor(global, 'MessageChannel').value is MessageChannel
 PASS [Worker] Object.getOwnPropertyDescriptor(global, 'MessageChannel').hasOwnProperty('get') is false
 PASS [Worker] Object.getOwnPropertyDescriptor(global, 'MessageChannel').hasOwnProperty('set') is false
@@ -79,26 +44,6 @@ PASS [Worker] Object.getOwnPropertyDescriptor(global, 'URL').hasOwnProperty('get
 PASS [Worker] Object.getOwnPropertyDescriptor(global, 'URL').hasOwnProperty('set') is false
 PASS [Worker] Object.getOwnPropertyDescriptor(global, 'URL').enumerable is false
 PASS [Worker] Object.getOwnPropertyDescriptor(global, 'URL').configurable is true
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Uint16Array').value is Uint16Array
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Uint16Array').hasOwnProperty('get') is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Uint16Array').hasOwnProperty('set') is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Uint16Array').enumerable is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Uint16Array').configurable is true
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Uint32Array').value is Uint32Array
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Uint32Array').hasOwnProperty('get') is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Uint32Array').hasOwnProperty('set') is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Uint32Array').enumerable is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Uint32Array').configurable is true
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Uint8Array').value is Uint8Array
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Uint8Array').hasOwnProperty('get') is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Uint8Array').hasOwnProperty('set') is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Uint8Array').enumerable is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Uint8Array').configurable is true
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Uint8ClampedArray').value is Uint8ClampedArray
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Uint8ClampedArray').hasOwnProperty('get') is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Uint8ClampedArray').hasOwnProperty('set') is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Uint8ClampedArray').enumerable is false
-PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Uint8ClampedArray').configurable is true
 PASS [Worker] Object.getOwnPropertyDescriptor(global, 'WebSocket').value is WebSocket
 PASS [Worker] Object.getOwnPropertyDescriptor(global, 'WebSocket').hasOwnProperty('get') is false
 PASS [Worker] Object.getOwnPropertyDescriptor(global, 'WebSocket').hasOwnProperty('set') is false
diff --git a/LayoutTests/fast/js/regress/ArrayBuffer-Int8Array-alloc-expected.txt b/LayoutTests/fast/js/regress/ArrayBuffer-Int8Array-alloc-expected.txt
new file mode 100644 (file)
index 0000000..7078913
--- /dev/null
@@ -0,0 +1,10 @@
+JSRegress/ArrayBuffer-Int8Array-alloc
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS no exception thrown
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/fast/js/regress/ArrayBuffer-Int8Array-alloc-huge-long-lived-expected.txt b/LayoutTests/fast/js/regress/ArrayBuffer-Int8Array-alloc-huge-long-lived-expected.txt
new file mode 100644 (file)
index 0000000..b2e81f8
--- /dev/null
@@ -0,0 +1,10 @@
+JSRegress/ArrayBuffer-Int8Array-alloc-huge-long-lived
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS no exception thrown
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/fast/js/regress/ArrayBuffer-Int8Array-alloc-huge-long-lived.html b/LayoutTests/fast/js/regress/ArrayBuffer-Int8Array-alloc-huge-long-lived.html
new file mode 100644 (file)
index 0000000..060bef3
--- /dev/null
@@ -0,0 +1,12 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<script src="../resources/js-test-pre.js"></script>
+</head>
+<body>
+<script src="resources/regress-pre.js"></script>
+<script src="script-tests/ArrayBuffer-Int8Array-alloc-huge-long-lived.js"></script>
+<script src="resources/regress-post.js"></script>
+<script src="../resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/fast/js/regress/ArrayBuffer-Int8Array-alloc-large-long-lived-expected.txt b/LayoutTests/fast/js/regress/ArrayBuffer-Int8Array-alloc-large-long-lived-expected.txt
new file mode 100644 (file)
index 0000000..e4b495a
--- /dev/null
@@ -0,0 +1,10 @@
+JSRegress/ArrayBuffer-Int8Array-alloc-large-long-lived
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS no exception thrown
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/fast/js/regress/ArrayBuffer-Int8Array-alloc-large-long-lived.html b/LayoutTests/fast/js/regress/ArrayBuffer-Int8Array-alloc-large-long-lived.html
new file mode 100644 (file)
index 0000000..dfe616b
--- /dev/null
@@ -0,0 +1,12 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<script src="../resources/js-test-pre.js"></script>
+</head>
+<body>
+<script src="resources/regress-pre.js"></script>
+<script src="script-tests/ArrayBuffer-Int8Array-alloc-large-long-lived.js"></script>
+<script src="resources/regress-post.js"></script>
+<script src="../resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/fast/js/regress/ArrayBuffer-Int8Array-alloc-long-lived-buffer-expected.txt b/LayoutTests/fast/js/regress/ArrayBuffer-Int8Array-alloc-long-lived-buffer-expected.txt
new file mode 100644 (file)
index 0000000..c90f1f3
--- /dev/null
@@ -0,0 +1,10 @@
+JSRegress/ArrayBuffer-Int8Array-alloc-long-lived-buffer
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS no exception thrown
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/fast/js/regress/ArrayBuffer-Int8Array-alloc-long-lived-buffer.html b/LayoutTests/fast/js/regress/ArrayBuffer-Int8Array-alloc-long-lived-buffer.html
new file mode 100644 (file)
index 0000000..4a703c6
--- /dev/null
@@ -0,0 +1,12 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<script src="../resources/js-test-pre.js"></script>
+</head>
+<body>
+<script src="resources/regress-pre.js"></script>
+<script src="script-tests/ArrayBuffer-Int8Array-alloc-long-lived-buffer.js"></script>
+<script src="resources/regress-post.js"></script>
+<script src="../resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/fast/js/regress/ArrayBuffer-Int8Array-alloc-long-lived-expected.txt b/LayoutTests/fast/js/regress/ArrayBuffer-Int8Array-alloc-long-lived-expected.txt
new file mode 100644 (file)
index 0000000..5c699ed
--- /dev/null
@@ -0,0 +1,10 @@
+JSRegress/ArrayBuffer-Int8Array-alloc-long-lived
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS no exception thrown
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/fast/js/regress/ArrayBuffer-Int8Array-alloc-long-lived.html b/LayoutTests/fast/js/regress/ArrayBuffer-Int8Array-alloc-long-lived.html
new file mode 100644 (file)
index 0000000..b3b7a02
--- /dev/null
@@ -0,0 +1,12 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<script src="../resources/js-test-pre.js"></script>
+</head>
+<body>
+<script src="resources/regress-pre.js"></script>
+<script src="script-tests/ArrayBuffer-Int8Array-alloc-long-lived.js"></script>
+<script src="resources/regress-post.js"></script>
+<script src="../resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/fast/js/regress/ArrayBuffer-Int8Array-alloc.html b/LayoutTests/fast/js/regress/ArrayBuffer-Int8Array-alloc.html
new file mode 100644 (file)
index 0000000..be29d52
--- /dev/null
@@ -0,0 +1,12 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<script src="../resources/js-test-pre.js"></script>
+</head>
+<body>
+<script src="resources/regress-pre.js"></script>
+<script src="script-tests/ArrayBuffer-Int8Array-alloc.js"></script>
+<script src="resources/regress-post.js"></script>
+<script src="../resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/fast/js/regress/Int32Array-Int8Array-view-alloc-expected.txt b/LayoutTests/fast/js/regress/Int32Array-Int8Array-view-alloc-expected.txt
new file mode 100644 (file)
index 0000000..455c642
--- /dev/null
@@ -0,0 +1,10 @@
+JSRegress/Int32Array-Int8Array-view-alloc
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS no exception thrown
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/fast/js/regress/Int32Array-Int8Array-view-alloc.html b/LayoutTests/fast/js/regress/Int32Array-Int8Array-view-alloc.html
new file mode 100644 (file)
index 0000000..5436bb6
--- /dev/null
@@ -0,0 +1,12 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<script src="../resources/js-test-pre.js"></script>
+</head>
+<body>
+<script src="resources/regress-pre.js"></script>
+<script src="script-tests/Int32Array-Int8Array-view-alloc.js"></script>
+<script src="resources/regress-post.js"></script>
+<script src="../resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/fast/js/regress/Int32Array-alloc-expected.txt b/LayoutTests/fast/js/regress/Int32Array-alloc-expected.txt
new file mode 100644 (file)
index 0000000..c12ec47
--- /dev/null
@@ -0,0 +1,10 @@
+JSRegress/Int32Array-alloc
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS no exception thrown
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/fast/js/regress/Int32Array-alloc-huge-expected.txt b/LayoutTests/fast/js/regress/Int32Array-alloc-huge-expected.txt
new file mode 100644 (file)
index 0000000..da620b5
--- /dev/null
@@ -0,0 +1,10 @@
+JSRegress/Int32Array-alloc-huge
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS no exception thrown
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/fast/js/regress/Int32Array-alloc-huge-long-lived-expected.txt b/LayoutTests/fast/js/regress/Int32Array-alloc-huge-long-lived-expected.txt
new file mode 100644 (file)
index 0000000..fca72b8
--- /dev/null
@@ -0,0 +1,10 @@
+JSRegress/Int32Array-alloc-huge-long-lived
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS no exception thrown
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/fast/js/regress/Int32Array-alloc-huge-long-lived.html b/LayoutTests/fast/js/regress/Int32Array-alloc-huge-long-lived.html
new file mode 100644 (file)
index 0000000..94119b1
--- /dev/null
@@ -0,0 +1,12 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<script src="../resources/js-test-pre.js"></script>
+</head>
+<body>
+<script src="resources/regress-pre.js"></script>
+<script src="script-tests/Int32Array-alloc-huge-long-lived.js"></script>
+<script src="resources/regress-post.js"></script>
+<script src="../resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/fast/js/regress/Int32Array-alloc-huge.html b/LayoutTests/fast/js/regress/Int32Array-alloc-huge.html
new file mode 100644 (file)
index 0000000..9b6245d
--- /dev/null
@@ -0,0 +1,12 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<script src="../resources/js-test-pre.js"></script>
+</head>
+<body>
+<script src="resources/regress-pre.js"></script>
+<script src="script-tests/Int32Array-alloc-huge.js"></script>
+<script src="resources/regress-post.js"></script>
+<script src="../resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/fast/js/regress/Int32Array-alloc-large-expected.txt b/LayoutTests/fast/js/regress/Int32Array-alloc-large-expected.txt
new file mode 100644 (file)
index 0000000..54a5c2c
--- /dev/null
@@ -0,0 +1,10 @@
+JSRegress/Int32Array-alloc-large
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS no exception thrown
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/fast/js/regress/Int32Array-alloc-large-long-lived-expected.txt b/LayoutTests/fast/js/regress/Int32Array-alloc-large-long-lived-expected.txt
new file mode 100644 (file)
index 0000000..f532903
--- /dev/null
@@ -0,0 +1,10 @@
+JSRegress/Int32Array-alloc-large-long-lived
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS no exception thrown
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/fast/js/regress/Int32Array-alloc-large-long-lived.html b/LayoutTests/fast/js/regress/Int32Array-alloc-large-long-lived.html
new file mode 100644 (file)
index 0000000..158f854
--- /dev/null
@@ -0,0 +1,12 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<script src="../resources/js-test-pre.js"></script>
+</head>
+<body>
+<script src="resources/regress-pre.js"></script>
+<script src="script-tests/Int32Array-alloc-large-long-lived.js"></script>
+<script src="resources/regress-post.js"></script>
+<script src="../resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/fast/js/regress/Int32Array-alloc-large.html b/LayoutTests/fast/js/regress/Int32Array-alloc-large.html
new file mode 100644 (file)
index 0000000..45af68c
--- /dev/null
@@ -0,0 +1,12 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<script src="../resources/js-test-pre.js"></script>
+</head>
+<body>
+<script src="resources/regress-pre.js"></script>
+<script src="script-tests/Int32Array-alloc-large.js"></script>
+<script src="resources/regress-post.js"></script>
+<script src="../resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/fast/js/regress/Int32Array-alloc-long-lived-expected.txt b/LayoutTests/fast/js/regress/Int32Array-alloc-long-lived-expected.txt
new file mode 100644 (file)
index 0000000..8b74e26
--- /dev/null
@@ -0,0 +1,10 @@
+JSRegress/Int32Array-alloc-long-lived
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS no exception thrown
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/fast/js/regress/Int32Array-alloc-long-lived.html b/LayoutTests/fast/js/regress/Int32Array-alloc-long-lived.html
new file mode 100644 (file)
index 0000000..f0426ed
--- /dev/null
@@ -0,0 +1,12 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<script src="../resources/js-test-pre.js"></script>
+</head>
+<body>
+<script src="resources/regress-pre.js"></script>
+<script src="script-tests/Int32Array-alloc-long-lived.js"></script>
+<script src="resources/regress-post.js"></script>
+<script src="../resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/fast/js/regress/Int32Array-alloc.html b/LayoutTests/fast/js/regress/Int32Array-alloc.html
new file mode 100644 (file)
index 0000000..97e5bea
--- /dev/null
@@ -0,0 +1,12 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<script src="../resources/js-test-pre.js"></script>
+</head>
+<body>
+<script src="resources/regress-pre.js"></script>
+<script src="script-tests/Int32Array-alloc.js"></script>
+<script src="resources/regress-post.js"></script>
+<script src="../resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/fast/js/regress/script-tests/ArrayBuffer-Int8Array-alloc-huge-long-lived.js b/LayoutTests/fast/js/regress/script-tests/ArrayBuffer-Int8Array-alloc-huge-long-lived.js
new file mode 100644 (file)
index 0000000..974cab2
--- /dev/null
@@ -0,0 +1,14 @@
+var array = new Array(1000);
+
+var n = 10000;
+
+for (var i = 0; i < n; ++i) {
+    array[(i / (n / array.length)) | 0] = new Int8Array(new ArrayBuffer(100000));
+}
+
+for (var i = 0; i < array.length; ++i) {
+    if (array[i].length != 100000)
+        throw "Error: bad array length: " + array[i].length;
+    if (array[i].buffer.byteLength != 100000)
+        throw "Error: bad array buffer length: " + array[i].buffer.byteLength;
+}
diff --git a/LayoutTests/fast/js/regress/script-tests/ArrayBuffer-Int8Array-alloc-large-long-lived.js b/LayoutTests/fast/js/regress/script-tests/ArrayBuffer-Int8Array-alloc-large-long-lived.js
new file mode 100644 (file)
index 0000000..16d2b1b
--- /dev/null
@@ -0,0 +1,11 @@
+var array = new Array(10000);
+
+for (var i = 0; i < 100000; ++i)
+    array[i % array.length] = new Int8Array(new ArrayBuffer(1000));
+
+for (var i = 0; i < array.length; ++i) {
+    if (array[i].length != 1000)
+        throw "Error: bad length: " + array[i].length;
+    if (array[i].buffer.byteLength != 1000)
+        throw "Error: bad buffer.byteLength: " + array[i].buffer.byteLength;
+}
diff --git a/LayoutTests/fast/js/regress/script-tests/ArrayBuffer-Int8Array-alloc-long-lived-buffer.js b/LayoutTests/fast/js/regress/script-tests/ArrayBuffer-Int8Array-alloc-long-lived-buffer.js
new file mode 100644 (file)
index 0000000..63a8873
--- /dev/null
@@ -0,0 +1,9 @@
+var array = new Array(10000);
+
+for (var i = 0; i < 100000; ++i)
+    array[i % array.length] = new Int8Array(new ArrayBuffer(10)).buffer;
+
+for (var i = 0; i < array.length; ++i) {
+    if (array[i].byteLength != 10)
+        throw "Error: bad byteLength: " + array[i].byteLength;
+}
diff --git a/LayoutTests/fast/js/regress/script-tests/ArrayBuffer-Int8Array-alloc-long-lived.js b/LayoutTests/fast/js/regress/script-tests/ArrayBuffer-Int8Array-alloc-long-lived.js
new file mode 100644 (file)
index 0000000..84cbd37
--- /dev/null
@@ -0,0 +1,11 @@
+var array = new Array(10000);
+
+for (var i = 0; i < 70000; ++i)
+    array[i % array.length] = new Int8Array(new ArrayBuffer(10));
+
+for (var i = 0; i < array.length; ++i) {
+    if (array[i].length != 10)
+        throw "Error: bad length: " + array[i].length;
+    if (array[i].buffer.byteLength != 10)
+        throw "Error: bad buffer.byteLength: " + array[i].buffer.byteLength;
+}
diff --git a/LayoutTests/fast/js/regress/script-tests/ArrayBuffer-Int8Array-alloc.js b/LayoutTests/fast/js/regress/script-tests/ArrayBuffer-Int8Array-alloc.js
new file mode 100644 (file)
index 0000000..c017fc0
--- /dev/null
@@ -0,0 +1,3 @@
+for (var i = 0; i < 70000; ++i)
+    new Int8Array(new ArrayBuffer(10));
+
diff --git a/LayoutTests/fast/js/regress/script-tests/Int32Array-Int8Array-view-alloc.js b/LayoutTests/fast/js/regress/script-tests/Int32Array-Int8Array-view-alloc.js
new file mode 100644 (file)
index 0000000..4b97cc3
--- /dev/null
@@ -0,0 +1,5 @@
+for (var i = 0; i < 30000; ++i) {
+    var array1 = new Int32Array(10);
+    var array2 = new Int8Array(array1.buffer);
+}
+
diff --git a/LayoutTests/fast/js/regress/script-tests/Int32Array-alloc-huge-long-lived.js b/LayoutTests/fast/js/regress/script-tests/Int32Array-alloc-huge-long-lived.js
new file mode 100644 (file)
index 0000000..495b548
--- /dev/null
@@ -0,0 +1,12 @@
+var array = new Array(1000);
+
+var n = 10000;
+
+for (var i = 0; i < n; ++i) {
+    array[(i / (n / array.length)) | 0] = new Int32Array(100000);
+}
+
+for (var i = 0; i < array.length; ++i) {
+    if (array[i].length != 100000)
+        throw "Error: bad array length: " + array[i].length;
+}
diff --git a/LayoutTests/fast/js/regress/script-tests/Int32Array-alloc-huge.js b/LayoutTests/fast/js/regress/script-tests/Int32Array-alloc-huge.js
new file mode 100644 (file)
index 0000000..17eebd4
--- /dev/null
@@ -0,0 +1,3 @@
+for (var i = 0; i < 1000; ++i)
+    new Int32Array(1000000);
+
diff --git a/LayoutTests/fast/js/regress/script-tests/Int32Array-alloc-large-long-lived.js b/LayoutTests/fast/js/regress/script-tests/Int32Array-alloc-large-long-lived.js
new file mode 100644 (file)
index 0000000..12f6eb6
--- /dev/null
@@ -0,0 +1,9 @@
+var array = new Array(10000);
+
+for (var i = 0; i < 1000000; ++i)
+    array[i % array.length] = new Int32Array(1000);
+
+for (var i = 0; i < array.length; ++i) {
+    if (array[i].length != 1000)
+        throw "Error: bad array length: " + array[i].length;
+}
diff --git a/LayoutTests/fast/js/regress/script-tests/Int32Array-alloc-large.js b/LayoutTests/fast/js/regress/script-tests/Int32Array-alloc-large.js
new file mode 100644 (file)
index 0000000..6fa3757
--- /dev/null
@@ -0,0 +1,2 @@
+for (var i = 0; i < 5000; ++i)
+    new Int32Array(10000);
diff --git a/LayoutTests/fast/js/regress/script-tests/Int32Array-alloc-long-lived.js b/LayoutTests/fast/js/regress/script-tests/Int32Array-alloc-long-lived.js
new file mode 100644 (file)
index 0000000..85046de
--- /dev/null
@@ -0,0 +1,9 @@
+var array = new Array(100000);
+
+for (var i = 0; i < 2000000; ++i)
+    array[i % array.length] = new Int32Array(10);
+
+for (var i = 0; i < array.length; ++i) {
+    if (array[i].length != 10)
+        throw "Error: bad array length: " + array[i].length;
+}
diff --git a/LayoutTests/fast/js/regress/script-tests/Int32Array-alloc.js b/LayoutTests/fast/js/regress/script-tests/Int32Array-alloc.js
new file mode 100644 (file)
index 0000000..44806c2
--- /dev/null
@@ -0,0 +1,2 @@
+for (var i = 0; i < 200000; ++i)
+    new Int32Array(10);
index ceba77f..49ef325 100644 (file)
@@ -11,18 +11,18 @@ PASS CloseEvent.length is 1
 PASS CustomEvent.length is 1
 FAIL DOMFormData.length should be 0. Threw exception ReferenceError: Can't find variable: DOMFormData
 PASS DOMParser.length is 0
-PASS DataView.length is 1
+PASS DataView.length is 3
 PASS ErrorEvent.length is 1
 PASS Event.length is 1
 PASS EventSource.length is 1
-PASS Float32Array.length is 1
-PASS Float64Array.length is 1
+PASS Float32Array.length is 3
+PASS Float64Array.length is 3
 PASS FileReader.length is 0
 FAIL FileReaderSync.length should be 0. Threw exception ReferenceError: Can't find variable: FileReaderSync
 PASS HashChangeEvent.length is 1
-PASS Int16Array.length is 1
-PASS Int32Array.length is 1
-PASS Int8Array.length is 1
+PASS Int16Array.length is 3
+PASS Int32Array.length is 3
+PASS Int8Array.length is 3
 FAIL Intent.length should be 3. Threw exception ReferenceError: Can't find variable: Intent
 PASS MediaController.length is 0
 FAIL MediaStream.length should be 0. Threw exception ReferenceError: Can't find variable: MediaStream
@@ -38,10 +38,10 @@ PASS SharedWorker.length is 1
 PASS StorageEvent.length is 1
 PASS TextTrackCue.length is 3
 PASS TrackEvent.length is 1
-PASS Uint16Array.length is 1
-PASS Uint32Array.length is 1
-PASS Uint8Array.length is 1
-PASS Uint8ClampedArray.length is 1
+PASS Uint16Array.length is 3
+PASS Uint32Array.length is 3
+PASS Uint8Array.length is 3
+PASS Uint8ClampedArray.length is 3
 PASS WebGLContextEvent.length is 1
 PASS WebKitAnimationEvent.length is 1
 PASS WebKitCSSMatrix.length is 0
index 8943b97..8c60028 100644 (file)
@@ -149,26 +149,13 @@ function testInheritanceHierarchy() {
 
   try {
     var foo = ArrayBufferView;
-    testPassed('ArrayBufferView does not have [NoInterfaceObject] extended attribute and should be defined');
-
-    shouldBe('new Int8Array(1) instanceof ArrayBufferView', 'true');
-    shouldBe('new Uint8Array(1) instanceof ArrayBufferView', 'true');
-    shouldBe('new Uint8ClampedArray(1) instanceof ArrayBufferView', 'true');
-    shouldBe('new Int16Array(1) instanceof ArrayBufferView', 'true');
-    shouldBe('new Uint16Array(1) instanceof ArrayBufferView', 'true');
-    shouldBe('new Int32Array(1) instanceof ArrayBufferView', 'true');
-    shouldBe('new Uint32Array(1) instanceof ArrayBufferView', 'true');
-    shouldBe('new Float32Array(1) instanceof ArrayBufferView', 'true');
-    shouldBe('new Float64Array(1) instanceof ArrayBufferView', 'true');
-    shouldBe('new DataView(new ArrayBuffer(8)) instanceof ArrayBufferView', 'true');
-
-    shouldThrowTypeError(function() { new ArrayBufferView() }, "new ArrayBufferView()");
+    testFailed("ArrayBufferView should be undefined but is defined");
   } catch (e) {
-    testFailed('ArrayBufferView does not have [NoInterfaceObject] extended attribute but was not defined');
+    testPassed("ArrayBufferView should be undefined and is");
   }
 
   // There is currently only one kind of view that inherits from another
-  shouldBe('new Uint8ClampedArray(1) instanceof Uint8Array', 'true');
+  shouldBe('new Uint8ClampedArray(1) instanceof Uint8Array', 'false');
 }
 
 //
index 2aa0c08..4d1403f 100644 (file)
@@ -270,9 +270,9 @@ function runConstructorTests()
     // Use try/catch instead of calling shouldThrow to avoid different exception message being reported from different platform.
     try {
         TestEval(expr);
-        testFailed(expr + " does not throw exception");
+        testPassed(expr + " works");
     } catch (e) {
-        testPassed(expr + " threw exception");
+        testFailed(expr + " threw exception");
     }
 
     debug("");
index d88e3c1..b35e786 100644 (file)
@@ -167,6 +167,10 @@ set(JavaScriptCore_SOURCES
     heap/CopyVisitor.cpp
     heap/ConservativeRoots.cpp
     heap/DFGCodeBlocks.cpp
+    heap/GCIncomingRefCountedSet.h
+    heap/GCIncomingRefCounted.h
+    heap/GCIncomingRefCountedSetInlines.h
+    heap/GCIncomingRefCountedInlines.h
     heap/GCThread.cpp
     heap/GCThreadSharedData.cpp
     heap/HandleSet.cpp
@@ -264,10 +268,10 @@ set(JavaScriptCore_SOURCES
     profiler/ProfileNode.cpp
     profiler/LegacyProfiler.cpp
 
-    runtime/ArrayBuffer.cpp
-    runtime/ArrayBufferView.cpp
     runtime/ArgList.cpp
     runtime/Arguments.cpp
+    runtime/ArrayBuffer.cpp
+    runtime/ArrayBufferView.cpp
     runtime/ArrayConstructor.cpp
     runtime/ArrayPrototype.cpp
     runtime/BooleanConstructor.cpp
@@ -282,6 +286,8 @@ set(JavaScriptCore_SOURCES
     runtime/CompilationResult.cpp
     runtime/Completion.cpp
     runtime/ConstructData.cpp
+    runtime/DataView.cpp
+    runtime/DataView.h
     runtime/DateConstructor.cpp
     runtime/DateConversion.cpp
     runtime/DateInstance.cpp
@@ -306,10 +312,16 @@ set(JavaScriptCore_SOURCES
     runtime/JSAPIValueWrapper.cpp
     runtime/JSActivation.cpp
     runtime/JSArray.cpp
+    runtime/JSArrayBuffer.cpp
+    runtime/JSArrayBufferConstructor.cpp
+    runtime/JSArrayBufferPrototype.cpp
+    runtime/JSArrayBufferView.cpp
     runtime/JSBoundFunction.cpp
     runtime/JSCJSValue.cpp
     runtime/JSCell.cpp
     runtime/JSChunk.cpp
+    runtime/JSDataView.cpp
+    runtime/JSDataViewPrototype.cpp
     runtime/JSDateMath.cpp
     runtime/JSFunction.cpp
     runtime/JSGlobalObject.cpp
@@ -327,6 +339,9 @@ set(JavaScriptCore_SOURCES
     runtime/JSString.cpp
     runtime/JSStringJoiner.cpp
     runtime/JSSymbolTableObject.cpp
+    runtime/JSTypedArrayConstructors.cpp
+    runtime/JSTypedArrayPrototypes.cpp
+    runtime/JSTypedArrays.cpp
     runtime/JSVariableObject.cpp
     runtime/JSWithScope.cpp
     runtime/JSWrapperObject.cpp
@@ -359,6 +374,7 @@ set(JavaScriptCore_SOURCES
     runtime/RegExpObject.cpp
     runtime/RegExpPrototype.cpp
     runtime/SamplingCounter.cpp
+    runtime/SimpleTypedArrayController.cpp
     runtime/SmallStrings.cpp
     runtime/SparseArrayValueMap.cpp
     runtime/StrictEvalActivation.cpp
@@ -370,6 +386,8 @@ set(JavaScriptCore_SOURCES
     runtime/StructureChain.cpp
     runtime/StructureRareData.cpp
     runtime/SymbolTable.cpp
+    runtime/TypedArrayController.cpp
+    runtime/TypedArrayType.cpp
     runtime/VM.cpp
     runtime/Watchdog.cpp
     runtime/WatchdogNone.cpp
@@ -391,6 +409,7 @@ set(JavaScriptCore_LUT_FILES
     runtime/DateConstructor.cpp
     runtime/DatePrototype.cpp
     runtime/ErrorPrototype.cpp
+    runtime/JSDataViewPrototype.cpp
     runtime/JSGlobalObject.cpp
     runtime/JSONObject.cpp
     runtime/NamePrototype.cpp
index d4661e1..7d3394a 100644 (file)
@@ -1,3 +1,447 @@
+2013-08-14  Filip Pizlo  <fpizlo@apple.com>
+
+        Typed arrays should be rewritten
+        https://bugs.webkit.org/show_bug.cgi?id=119064
+
+        Reviewed by Oliver Hunt.
+        
+        Typed arrays were previously deficient in several major ways:
+        
+        - They were defined separately in WebCore and in the jsc shell. The two
+          implementations were different, and the jsc shell one was basically wrong.
+          The WebCore one was quite awful, also.
+        
+        - Typed arrays were not visible to the JIT except through some weird hooks.
+          For example, the JIT could not ask "what is the Structure that this typed
+          array would have if I just allocated it from this global object". Also,
+          it was difficult to wire any of the typed array intrinsics, because most
+          of the functionality wasn't visible anywhere in JSC.
+        
+        - Typed array allocation was brain-dead. Allocating a typed array involved
+          two JS objects, two GC weak handles, and three malloc allocations.
+        
+        - Neutering. It involved keeping tabs on all native views but not the view
+          wrappers, even though the native views can autoneuter just by asking the
+          buffer if it was neutered anytime you touch them; while the JS view
+          wrappers are the ones that you really want to reach out to.
+        
+        - Common case-ing. Most typed arrays have one buffer and one view, and
+          usually nobody touches the buffer. Yet we created all of that stuff
+          anyway, using data structures optimized for the case where you had a lot
+          of views.
+        
+        - Semantic goofs. Typed arrays should, in the future, behave like ES
+          features rather than DOM features, for example when it comes to exceptions.
+          Firefox already does this and I agree with them.
+        
+        This patch cleanses our codebase of these sins:
+        
+        - Typed arrays are almost entirely defined in JSC. Only the lifecycle
+          management of native references to buffers is left to WebCore.
+        
+        - Allocating a typed array requires either two GC allocations (a cell and a
+          copied storage vector) or one GC allocation, a malloc allocation, and a
+          weak handle (a cell and a malloc'd storage vector, plus a finalizer for the
+          latter). The latter is only used for oversize arrays. Remember that before
+          it was 7 allocations no matter what.
+        
+        - Typed arrays require just 4 words of overhead: Structure*, Butterfly*,
+          mode/length, void* vector. Before it was a lot more than that - remember,
+          there were five additional objects that did absolutely nothing for anybody.
+        
+        - Native views aren't tracked by the buffer, or by the wrappers. They are
+          transient. In the future we'll probably switch to not even having them be
+          malloc'd.
+        
+        - Native array buffers have an efficient way of tracking all of their JS view
+          wrappers, both for neutering, and for lifecycle management. The GC
+          special-cases native array buffers. This saves a bunch of grief; for example
+          it means that a JS view wrapper can refer to its buffer via the butterfly,
+          which would be dead by the time we went to finalize.
+        
+        - Typed array semantics now match Firefox, which also happens to be where the
+          standards are going. The discussion on webkit-dev seemed to confirm that
+          Chrome is also heading in this direction. This includes making
+          Uint8ClampedArray not a subtype of Uint8Array, and getting rid of
+          ArrayBufferView as a JS-visible construct.
+        
+        This is up to a 10x speed-up on programs that allocate a lot of typed arrays.
+        It's a 1% speed-up on Octane. It also opens up a bunch of possibilities for
+        further typed array optimizations in the JSC JITs, including inlining typed
+        array allocation, inlining more of the accessors, reducing the cost of type
+        checks, etc.
+        
+        An additional property of this patch is that typed arrays are mostly
+        implemented using templates. This deduplicates a bunch of code, but does mean
+        that we need some hacks for exporting s_info's of template classes. See
+        JSGenericTypedArrayView.h and JSTypedArrays.cpp. Those hacks are fairly
+        low-impact compared to code duplication.
+        
+        Automake work courtesy of Zan Dobersek <zdobersek@igalia.com>.
+
+        * CMakeLists.txt:
+        * DerivedSources.make:
+        * GNUmakefile.list.am:
+        * JSCTypedArrayStubs.h: Removed.
+        * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * Target.pri:
+        * bytecode/ByValInfo.h:
+        (JSC::hasOptimizableIndexingForClassInfo):
+        (JSC::jitArrayModeForClassInfo):
+        (JSC::typedArrayTypeForJITArrayMode):
+        * bytecode/SpeculatedType.cpp:
+        (JSC::speculationFromClassInfo):
+        * dfg/DFGArrayMode.cpp:
+        (JSC::DFG::toTypedArrayType):
+        * dfg/DFGArrayMode.h:
+        (JSC::DFG::ArrayMode::typedArrayType):
+        * dfg/DFGSpeculativeJIT.cpp:
+        (JSC::DFG::SpeculativeJIT::checkArray):
+        (JSC::DFG::SpeculativeJIT::compileGetByValOnIntTypedArray):
+        (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray):
+        (JSC::DFG::SpeculativeJIT::compileGetByValOnFloatTypedArray):
+        (JSC::DFG::SpeculativeJIT::compilePutByValForFloatTypedArray):
+        (JSC::DFG::SpeculativeJIT::compileGetIndexedPropertyStorage):
+        (JSC::DFG::SpeculativeJIT::compileGetArrayLength):
+        * dfg/DFGSpeculativeJIT.h:
+        * dfg/DFGSpeculativeJIT32_64.cpp:
+        (JSC::DFG::SpeculativeJIT::compile):
+        * dfg/DFGSpeculativeJIT64.cpp:
+        (JSC::DFG::SpeculativeJIT::compile):
+        * heap/CopyToken.h:
+        * heap/DeferGC.h:
+        (JSC::DeferGCForAWhile::DeferGCForAWhile):
+        (JSC::DeferGCForAWhile::~DeferGCForAWhile):
+        * heap/GCIncomingRefCounted.h: Added.
+        (JSC::GCIncomingRefCounted::GCIncomingRefCounted):
+        (JSC::GCIncomingRefCounted::~GCIncomingRefCounted):
+        (JSC::GCIncomingRefCounted::numberOfIncomingReferences):
+        (JSC::GCIncomingRefCounted::incomingReferenceAt):
+        (JSC::GCIncomingRefCounted::singletonFlag):
+        (JSC::GCIncomingRefCounted::hasVectorOfCells):
+        (JSC::GCIncomingRefCounted::hasAnyIncoming):
+        (JSC::GCIncomingRefCounted::hasSingleton):
+        (JSC::GCIncomingRefCounted::singleton):
+        (JSC::GCIncomingRefCounted::vectorOfCells):
+        * heap/GCIncomingRefCountedInlines.h: Added.
+        (JSC::::addIncomingReference):
+        (JSC::::filterIncomingReferences):
+        * heap/GCIncomingRefCountedSet.h: Added.
+        (JSC::GCIncomingRefCountedSet::size):
+        * heap/GCIncomingRefCountedSetInlines.h: Added.
+        (JSC::::GCIncomingRefCountedSet):
+        (JSC::::~GCIncomingRefCountedSet):
+        (JSC::::addReference):
+        (JSC::::sweep):
+        (JSC::::removeAll):
+        (JSC::::removeDead):
+        * heap/Heap.cpp:
+        (JSC::Heap::addReference):
+        (JSC::Heap::extraSize):
+        (JSC::Heap::size):
+        (JSC::Heap::capacity):
+        (JSC::Heap::collect):
+        (JSC::Heap::decrementDeferralDepth):
+        (JSC::Heap::decrementDeferralDepthAndGCIfNeeded):
+        * heap/Heap.h:
+        * interpreter/CallFrame.h:
+        (JSC::ExecState::dataViewTable):
+        * jit/JIT.h:
+        * jit/JITPropertyAccess.cpp:
+        (JSC::JIT::privateCompileGetByVal):
+        (JSC::JIT::privateCompilePutByVal):
+        (JSC::JIT::emitIntTypedArrayGetByVal):
+        (JSC::JIT::emitFloatTypedArrayGetByVal):
+        (JSC::JIT::emitIntTypedArrayPutByVal):
+        (JSC::JIT::emitFloatTypedArrayPutByVal):
+        * jsc.cpp:
+        (GlobalObject::finishCreation):
+        * runtime/ArrayBuffer.cpp:
+        (JSC::ArrayBuffer::transfer):
+        * runtime/ArrayBuffer.h:
+        (JSC::ArrayBuffer::createAdopted):
+        (JSC::ArrayBuffer::ArrayBuffer):
+        (JSC::ArrayBuffer::gcSizeEstimateInBytes):
+        (JSC::ArrayBuffer::pin):
+        (JSC::ArrayBuffer::unpin):
+        (JSC::ArrayBufferContents::tryAllocate):
+        * runtime/ArrayBufferView.cpp:
+        (JSC::ArrayBufferView::ArrayBufferView):
+        (JSC::ArrayBufferView::~ArrayBufferView):
+        (JSC::ArrayBufferView::setNeuterable):
+        * runtime/ArrayBufferView.h:
+        (JSC::ArrayBufferView::isNeutered):
+        (JSC::ArrayBufferView::buffer):
+        (JSC::ArrayBufferView::baseAddress):
+        (JSC::ArrayBufferView::byteOffset):
+        (JSC::ArrayBufferView::verifySubRange):
+        (JSC::ArrayBufferView::clampOffsetAndNumElements):
+        (JSC::ArrayBufferView::calculateOffsetAndLength):
+        * runtime/ClassInfo.h:
+        * runtime/CommonIdentifiers.h:
+        * runtime/DataView.cpp: Added.
+        (JSC::DataView::DataView):
+        (JSC::DataView::create):
+        (JSC::DataView::wrap):
+        * runtime/DataView.h: Added.
+        (JSC::DataView::byteLength):
+        (JSC::DataView::getType):
+        (JSC::DataView::get):
+        (JSC::DataView::set):
+        * runtime/Float32Array.h:
+        * runtime/Float64Array.h:
+        * runtime/GenericTypedArrayView.h: Added.
+        (JSC::GenericTypedArrayView::data):
+        (JSC::GenericTypedArrayView::set):
+        (JSC::GenericTypedArrayView::setRange):
+        (JSC::GenericTypedArrayView::zeroRange):
+        (JSC::GenericTypedArrayView::zeroFill):
+        (JSC::GenericTypedArrayView::length):
+        (JSC::GenericTypedArrayView::byteLength):
+        (JSC::GenericTypedArrayView::item):
+        (JSC::GenericTypedArrayView::checkInboundData):
+        (JSC::GenericTypedArrayView::getType):
+        * runtime/GenericTypedArrayViewInlines.h: Added.
+        (JSC::::GenericTypedArrayView):
+        (JSC::::create):
+        (JSC::::createUninitialized):
+        (JSC::::subarray):
+        (JSC::::wrap):
+        * runtime/IndexingHeader.h:
+        (JSC::IndexingHeader::arrayBuffer):
+        (JSC::IndexingHeader::setArrayBuffer):
+        * runtime/Int16Array.h:
+        * runtime/Int32Array.h:
+        * runtime/Int8Array.h:
+        * runtime/JSArrayBuffer.cpp: Added.
+        (JSC::JSArrayBuffer::JSArrayBuffer):
+        (JSC::JSArrayBuffer::finishCreation):
+        (JSC::JSArrayBuffer::create):
+        (JSC::JSArrayBuffer::createStructure):
+        (JSC::JSArrayBuffer::getOwnPropertySlot):
+        (JSC::JSArrayBuffer::getOwnPropertyDescriptor):
+        (JSC::JSArrayBuffer::put):
+        (JSC::JSArrayBuffer::defineOwnProperty):
+        (JSC::JSArrayBuffer::deleteProperty):
+        (JSC::JSArrayBuffer::getOwnNonIndexPropertyNames):
+        * runtime/JSArrayBuffer.h: Added.
+        (JSC::JSArrayBuffer::impl):
+        (JSC::toArrayBuffer):
+        * runtime/JSArrayBufferConstructor.cpp: Added.
+        (JSC::JSArrayBufferConstructor::JSArrayBufferConstructor):
+        (JSC::JSArrayBufferConstructor::finishCreation):
+        (JSC::JSArrayBufferConstructor::create):
+        (JSC::JSArrayBufferConstructor::createStructure):
+        (JSC::constructArrayBuffer):
+        (JSC::JSArrayBufferConstructor::getConstructData):
+        (JSC::JSArrayBufferConstructor::getCallData):
+        * runtime/JSArrayBufferConstructor.h: Added.
+        * runtime/JSArrayBufferPrototype.cpp: Added.
+        (JSC::arrayBufferProtoFuncSlice):
+        (JSC::JSArrayBufferPrototype::JSArrayBufferPrototype):
+        (JSC::JSArrayBufferPrototype::finishCreation):
+        (JSC::JSArrayBufferPrototype::create):
+        (JSC::JSArrayBufferPrototype::createStructure):
+        * runtime/JSArrayBufferPrototype.h: Added.
+        * runtime/JSArrayBufferView.cpp: Added.
+        (JSC::JSArrayBufferView::ConstructionContext::ConstructionContext):
+        (JSC::JSArrayBufferView::JSArrayBufferView):
+        (JSC::JSArrayBufferView::finishCreation):
+        (JSC::JSArrayBufferView::getOwnPropertySlot):
+        (JSC::JSArrayBufferView::getOwnPropertyDescriptor):
+        (JSC::JSArrayBufferView::put):
+        (JSC::JSArrayBufferView::defineOwnProperty):
+        (JSC::JSArrayBufferView::deleteProperty):
+        (JSC::JSArrayBufferView::getOwnNonIndexPropertyNames):
+        (JSC::JSArrayBufferView::finalize):
+        * runtime/JSArrayBufferView.h: Added.
+        (JSC::JSArrayBufferView::sizeOf):
+        (JSC::JSArrayBufferView::ConstructionContext::operator!):
+        (JSC::JSArrayBufferView::ConstructionContext::structure):
+        (JSC::JSArrayBufferView::ConstructionContext::vector):
+        (JSC::JSArrayBufferView::ConstructionContext::length):
+        (JSC::JSArrayBufferView::ConstructionContext::mode):
+        (JSC::JSArrayBufferView::ConstructionContext::butterfly):
+        (JSC::JSArrayBufferView::mode):
+        (JSC::JSArrayBufferView::vector):
+        (JSC::JSArrayBufferView::length):
+        (JSC::JSArrayBufferView::offsetOfVector):
+        (JSC::JSArrayBufferView::offsetOfLength):
+        (JSC::JSArrayBufferView::offsetOfMode):
+        * runtime/JSArrayBufferViewInlines.h: Added.
+        (JSC::JSArrayBufferView::slowDownAndWasteMemoryIfNecessary):
+        (JSC::JSArrayBufferView::buffer):
+        (JSC::JSArrayBufferView::impl):
+        (JSC::JSArrayBufferView::neuter):
+        (JSC::JSArrayBufferView::byteOffset):
+        * runtime/JSCell.cpp:
+        (JSC::JSCell::slowDownAndWasteMemory):
+        (JSC::JSCell::getTypedArrayImpl):
+        * runtime/JSCell.h:
+        * runtime/JSDataView.cpp: Added.
+        (JSC::JSDataView::JSDataView):
+        (JSC::JSDataView::create):
+        (JSC::JSDataView::createUninitialized):
+        (JSC::JSDataView::set):
+        (JSC::JSDataView::typedImpl):
+        (JSC::JSDataView::getOwnPropertySlot):
+        (JSC::JSDataView::getOwnPropertyDescriptor):
+        (JSC::JSDataView::slowDownAndWasteMemory):
+        (JSC::JSDataView::getTypedArrayImpl):
+        (JSC::JSDataView::createStructure):
+        * runtime/JSDataView.h: Added.
+        * runtime/JSDataViewPrototype.cpp: Added.
+        (JSC::JSDataViewPrototype::JSDataViewPrototype):
+        (JSC::JSDataViewPrototype::create):
+        (JSC::JSDataViewPrototype::createStructure):
+        (JSC::JSDataViewPrototype::getOwnPropertySlot):
+        (JSC::JSDataViewPrototype::getOwnPropertyDescriptor):
+        (JSC::getData):
+        (JSC::setData):
+        (JSC::dataViewProtoFuncGetInt8):
+        (JSC::dataViewProtoFuncGetInt16):
+        (JSC::dataViewProtoFuncGetInt32):
+        (JSC::dataViewProtoFuncGetUint8):
+        (JSC::dataViewProtoFuncGetUint16):
+        (JSC::dataViewProtoFuncGetUint32):
+        (JSC::dataViewProtoFuncGetFloat32):
+        (JSC::dataViewProtoFuncGetFloat64):
+        (JSC::dataViewProtoFuncSetInt8):
+        (JSC::dataViewProtoFuncSetInt16):
+        (JSC::dataViewProtoFuncSetInt32):
+        (JSC::dataViewProtoFuncSetUint8):
+        (JSC::dataViewProtoFuncSetUint16):
+        (JSC::dataViewProtoFuncSetUint32):
+        (JSC::dataViewProtoFuncSetFloat32):
+        (JSC::dataViewProtoFuncSetFloat64):
+        * runtime/JSDataViewPrototype.h: Added.
+        * runtime/JSFloat32Array.h: Added.
+        * runtime/JSFloat64Array.h: Added.
+        * runtime/JSGenericTypedArrayView.h: Added.
+        (JSC::JSGenericTypedArrayView::byteLength):
+        (JSC::JSGenericTypedArrayView::byteSize):
+        (JSC::JSGenericTypedArrayView::typedVector):
+        (JSC::JSGenericTypedArrayView::canGetIndexQuickly):
+        (JSC::JSGenericTypedArrayView::canSetIndexQuickly):
+        (JSC::JSGenericTypedArrayView::getIndexQuicklyAsNativeValue):
+        (JSC::JSGenericTypedArrayView::getIndexQuicklyAsDouble):
+        (JSC::JSGenericTypedArrayView::getIndexQuickly):
+        (JSC::JSGenericTypedArrayView::setIndexQuicklyToNativeValue):
+        (JSC::JSGenericTypedArrayView::setIndexQuicklyToDouble):
+        (JSC::JSGenericTypedArrayView::setIndexQuickly):
+        (JSC::JSGenericTypedArrayView::canAccessRangeQuickly):
+        (JSC::JSGenericTypedArrayView::typedImpl):
+        (JSC::JSGenericTypedArrayView::createStructure):
+        (JSC::JSGenericTypedArrayView::info):
+        (JSC::toNativeTypedView):
+        * runtime/JSGenericTypedArrayViewConstructor.h: Added.
+        * runtime/JSGenericTypedArrayViewConstructorInlines.h: Added.
+        (JSC::::JSGenericTypedArrayViewConstructor):
+        (JSC::::finishCreation):
+        (JSC::::create):
+        (JSC::::createStructure):
+        (JSC::constructGenericTypedArrayView):
+        (JSC::::getConstructData):
+        (JSC::::getCallData):
+        * runtime/JSGenericTypedArrayViewInlines.h: Added.
+        (JSC::::JSGenericTypedArrayView):
+        (JSC::::create):
+        (JSC::::createUninitialized):
+        (JSC::::validateRange):
+        (JSC::::setWithSpecificType):
+        (JSC::::set):
+        (JSC::::getOwnPropertySlot):
+        (JSC::::getOwnPropertyDescriptor):
+        (JSC::::put):
+        (JSC::::defineOwnProperty):
+        (JSC::::deleteProperty):
+        (JSC::::getOwnPropertySlotByIndex):
+        (JSC::::putByIndex):
+        (JSC::::deletePropertyByIndex):
+        (JSC::::getOwnNonIndexPropertyNames):
+        (JSC::::getOwnPropertyNames):
+        (JSC::::visitChildren):
+        (JSC::::copyBackingStore):
+        (JSC::::slowDownAndWasteMemory):
+        (JSC::::getTypedArrayImpl):
+        * runtime/JSGenericTypedArrayViewPrototype.h: Added.
+        * runtime/JSGenericTypedArrayViewPrototypeInlines.h: Added.
+        (JSC::genericTypedArrayViewProtoFuncSet):
+        (JSC::genericTypedArrayViewProtoFuncSubarray):
+        (JSC::::JSGenericTypedArrayViewPrototype):
+        (JSC::::finishCreation):
+        (JSC::::create):
+        (JSC::::createStructure):
+        * runtime/JSGlobalObject.cpp:
+        (JSC::JSGlobalObject::reset):
+        (JSC::JSGlobalObject::visitChildren):
+        * runtime/JSGlobalObject.h:
+        (JSC::JSGlobalObject::arrayBufferPrototype):
+        (JSC::JSGlobalObject::arrayBufferStructure):
+        (JSC::JSGlobalObject::typedArrayStructure):
+        * runtime/JSInt16Array.h: Added.
+        * runtime/JSInt32Array.h: Added.
+        * runtime/JSInt8Array.h: Added.
+        * runtime/JSTypedArrayConstructors.cpp: Added.
+        * runtime/JSTypedArrayConstructors.h: Added.
+        * runtime/JSTypedArrayPrototypes.cpp: Added.
+        * runtime/JSTypedArrayPrototypes.h: Added.
+        * runtime/JSTypedArrays.cpp: Added.
+        * runtime/JSTypedArrays.h: Added.
+        * runtime/JSUint16Array.h: Added.
+        * runtime/JSUint32Array.h: Added.
+        * runtime/JSUint8Array.h: Added.
+        * runtime/JSUint8ClampedArray.h: Added.
+        * runtime/Operations.h:
+        * runtime/Options.h:
+        * runtime/SimpleTypedArrayController.cpp: Added.
+        (JSC::SimpleTypedArrayController::SimpleTypedArrayController):
+        (JSC::SimpleTypedArrayController::~SimpleTypedArrayController):
+        (JSC::SimpleTypedArrayController::toJS):
+        * runtime/SimpleTypedArrayController.h: Added.
+        * runtime/Structure.h:
+        (JSC::Structure::couldHaveIndexingHeader):
+        * runtime/StructureInlines.h:
+        (JSC::Structure::hasIndexingHeader):
+        * runtime/TypedArrayAdaptors.h: Added.
+        (JSC::IntegralTypedArrayAdaptor::toNative):
+        (JSC::IntegralTypedArrayAdaptor::toJSValue):
+        (JSC::IntegralTypedArrayAdaptor::toDouble):
+        (JSC::FloatTypedArrayAdaptor::toNative):
+        (JSC::FloatTypedArrayAdaptor::toJSValue):
+        (JSC::FloatTypedArrayAdaptor::toDouble):
+        (JSC::Uint8ClampedAdaptor::toNative):
+        (JSC::Uint8ClampedAdaptor::toJSValue):
+        (JSC::Uint8ClampedAdaptor::toDouble):
+        (JSC::Uint8ClampedAdaptor::clamp):
+        * runtime/TypedArrayController.cpp: Added.
+        (JSC::TypedArrayController::TypedArrayController):
+        (JSC::TypedArrayController::~TypedArrayController):
+        * runtime/TypedArrayController.h: Added.
+        * runtime/TypedArrayDescriptor.h: Removed.
+        * runtime/TypedArrayInlines.h: Added.
+        * runtime/TypedArrayType.cpp: Added.
+        (JSC::classInfoForType):
+        (WTF::printInternal):
+        * runtime/TypedArrayType.h: Added.
+        (JSC::toIndex):
+        (JSC::isTypedView):
+        (JSC::elementSize):
+        (JSC::isInt):
+        (JSC::isFloat):
+        (JSC::isSigned):
+        (JSC::isClamped):
+        * runtime/TypedArrays.h: Added.
+        * runtime/Uint16Array.h:
+        * runtime/Uint32Array.h:
+        * runtime/Uint8Array.h:
+        * runtime/Uint8ClampedArray.h:
+        * runtime/VM.cpp:
+        (JSC::VM::VM):
+        (JSC::VM::~VM):
+        * runtime/VM.h:
+
 2013-08-15  Oliver Hunt  <oliver@apple.com>
 
         <https://webkit.org/b/119830> Assigning to a readonly global results in DFG byte code parse failure
index 713e09d..a2fe0cc 100644 (file)
@@ -41,6 +41,7 @@ all : \
     DateConstructor.lut.h \
     DatePrototype.lut.h \
     ErrorPrototype.lut.h \
+    JSDataViewPrototype.lut.h \
     JSONObject.lut.h \
     JSGlobalObject.lut.h \
     KeywordLookup.h \
index 2542d0c..7b15e73 100644 (file)
@@ -13,6 +13,7 @@ LUT_FILES += \
     runtime/DateConstructor.cpp \
     runtime/DatePrototype.cpp \
     runtime/ErrorPrototype.cpp \
+    runtime/JSDataViewPrototype.cpp \
     runtime/JSGlobalObject.cpp \
     runtime/JSONObject.cpp \
     runtime/MathObject.cpp \
index d0bb7d6..2f97ec0 100644 (file)
@@ -17,6 +17,7 @@ javascriptcore_built_nosources += \
        DerivedSources/JavaScriptCore/DateConstructor.lut.h \
        DerivedSources/JavaScriptCore/DatePrototype.lut.h \
        DerivedSources/JavaScriptCore/ErrorPrototype.lut.h \
+       DerivedSources/JavaScriptCore/JSDataViewPrototype.lut.h \
        DerivedSources/JavaScriptCore/JSGlobalObject.lut.h \
        DerivedSources/JavaScriptCore/JSONObject.lut.h \
        DerivedSources/JavaScriptCore/MathObject.lut.h \
@@ -384,6 +385,10 @@ javascriptcore_sources += \
        Source/JavaScriptCore/heap/DFGCodeBlocks.cpp \
        Source/JavaScriptCore/heap/DFGCodeBlocks.h \
        Source/JavaScriptCore/heap/GCAssertions.h \
+       Source/JavaScriptCore/heap/GCIncomingRefCounted.h \
+       Source/JavaScriptCore/heap/GCIncomingRefCountedInlines.h \
+       Source/JavaScriptCore/heap/GCIncomingRefCountedSet.h \
+       Source/JavaScriptCore/heap/GCIncomingRefCountedSetInlines.h \
        Source/JavaScriptCore/heap/Handle.h \
        Source/JavaScriptCore/heap/HandleBlock.h \
        Source/JavaScriptCore/heap/HandleBlockInlines.h \
@@ -685,6 +690,8 @@ javascriptcore_sources += \
        Source/JavaScriptCore/runtime/ConcurrentJITLock.h \
        Source/JavaScriptCore/runtime/ConstructData.cpp \
        Source/JavaScriptCore/runtime/ConstructData.h \
+       Source/JavaScriptCore/runtime/DataView.cpp \
+       Source/JavaScriptCore/runtime/DataView.h \
        Source/JavaScriptCore/runtime/DateConstructor.cpp \
        Source/JavaScriptCore/runtime/DateConstructor.h \
        Source/JavaScriptCore/runtime/DateConversion.cpp \
@@ -719,6 +726,8 @@ javascriptcore_sources += \
        Source/JavaScriptCore/runtime/FunctionPrototype.h \
        Source/JavaScriptCore/runtime/GCActivityCallback.cpp \
        Source/JavaScriptCore/runtime/GCActivityCallback.h \
+       Source/JavaScriptCore/runtime/GenericTypedArrayView.h \
+       Source/JavaScriptCore/runtime/GenericTypedArrayViewInlines.h \
        Source/JavaScriptCore/runtime/GetterSetter.cpp \
        Source/JavaScriptCore/runtime/GetterSetter.h \
        Source/JavaScriptCore/runtime/Identifier.cpp \
@@ -744,12 +753,27 @@ javascriptcore_sources += \
        Source/JavaScriptCore/runtime/JSAPIValueWrapper.h \
        Source/JavaScriptCore/runtime/JSArray.cpp \
        Source/JavaScriptCore/runtime/JSArray.h \
+       Source/JavaScriptCore/runtime/JSArrayBuffer.cpp \
+       Source/JavaScriptCore/runtime/JSArrayBuffer.h \
+       Source/JavaScriptCore/runtime/JSArrayBufferConstructor.cpp \
+       Source/JavaScriptCore/runtime/JSArrayBufferConstructor.h \
+       Source/JavaScriptCore/runtime/JSArrayBufferPrototype.cpp \
+       Source/JavaScriptCore/runtime/JSArrayBufferPrototype.h \
+       Source/JavaScriptCore/runtime/JSArrayBufferView.cpp \
+       Source/JavaScriptCore/runtime/JSArrayBufferView.h \
+       Source/JavaScriptCore/runtime/JSArrayBufferViewInlines.h \
        Source/JavaScriptCore/runtime/JSCell.cpp \
        Source/JavaScriptCore/runtime/JSCell.h \
+       Source/JavaScriptCore/runtime/JSDataView.cpp \
+       Source/JavaScriptCore/runtime/JSDataView.h \
+       Source/JavaScriptCore/runtime/JSDataViewPrototype.cpp \
+       Source/JavaScriptCore/runtime/JSDataViewPrototype.h \
        Source/JavaScriptCore/runtime/JSDateMath.cpp \
        Source/JavaScriptCore/runtime/JSCellInlines.h \
        Source/JavaScriptCore/runtime/JSDateMath.h \
        Source/JavaScriptCore/runtime/JSDestructibleObject.h \
+       Source/JavaScriptCore/runtime/JSFloat32Array.h \
+       Source/JavaScriptCore/runtime/JSFloat64Array.h \
        Source/JavaScriptCore/runtime/JSFunction.cpp \
        Source/JavaScriptCore/runtime/JSFunction.h \
        Source/JavaScriptCore/runtime/JSBoundFunction.cpp \
@@ -758,12 +782,21 @@ javascriptcore_sources += \
        Source/JavaScriptCore/runtime/VM.cpp \
        Source/JavaScriptCore/runtime/VM.h \
        Source/JavaScriptCore/runtime/JSFunctionInlines.h \
+       Source/JavaScriptCore/runtime/JSGenericTypedArrayView.h \
+       Source/JavaScriptCore/runtime/JSGenericTypedArrayViewConstructor.h \
+       Source/JavaScriptCore/runtime/JSGenericTypedArrayViewConstructorInlines.h \
+       Source/JavaScriptCore/runtime/JSGenericTypedArrayViewInlines.h \
+       Source/JavaScriptCore/runtime/JSGenericTypedArrayViewPrototype.h \
+       Source/JavaScriptCore/runtime/JSGenericTypedArrayViewPrototypeInlines.h \
        Source/JavaScriptCore/runtime/JSGlobalObject.cpp \
        Source/JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp \
        Source/JavaScriptCore/runtime/JSGlobalObjectFunctions.h \
        Source/JavaScriptCore/runtime/JSGlobalObject.h \
        Source/JavaScriptCore/runtime/JSProxy.cpp \
        Source/JavaScriptCore/runtime/JSProxy.h \
+       Source/JavaScriptCore/runtime/JSInt16Array.h \
+       Source/JavaScriptCore/runtime/JSInt32Array.h \
+       Source/JavaScriptCore/runtime/JSInt8Array.h \
        Source/JavaScriptCore/runtime/JSLock.cpp \
        Source/JavaScriptCore/runtime/JSLock.h \
        Source/JavaScriptCore/runtime/JSNotAnObject.cpp \
@@ -776,6 +809,16 @@ javascriptcore_sources += \
        Source/JavaScriptCore/runtime/JSPropertyNameIterator.h \
        Source/JavaScriptCore/runtime/JSSegmentedVariableObject.cpp \
        Source/JavaScriptCore/runtime/JSSegmentedVariableObject.h \
+       Source/JavaScriptCore/runtime/JSTypedArrayConstructors.cpp \
+       Source/JavaScriptCore/runtime/JSTypedArrayConstructors.h \
+       Source/JavaScriptCore/runtime/JSTypedArrayPrototypes.cpp \
+       Source/JavaScriptCore/runtime/JSTypedArrayPrototypes.h \
+       Source/JavaScriptCore/runtime/JSTypedArrays.cpp \
+       Source/JavaScriptCore/runtime/JSTypedArrays.h \
+       Source/JavaScriptCore/runtime/JSUint16Array.h \
+       Source/JavaScriptCore/runtime/JSUint32Array.h \
+       Source/JavaScriptCore/runtime/JSUint8Array.h \
+       Source/JavaScriptCore/runtime/JSUint8ClampedArray.h \
        Source/JavaScriptCore/runtime/JSWithScope.cpp \
        Source/JavaScriptCore/runtime/JSNameScope.cpp \
        Source/JavaScriptCore/runtime/JSNameScope.h \
@@ -866,6 +909,8 @@ javascriptcore_sources += \
        Source/JavaScriptCore/runtime/Reject.h \
        Source/JavaScriptCore/runtime/SamplingCounter.cpp \
        Source/JavaScriptCore/runtime/SamplingCounter.h \
+       Source/JavaScriptCore/runtime/SimpleTypedArrayController.cpp \
+       Source/JavaScriptCore/runtime/SimpleTypedArrayController.h \
        Source/JavaScriptCore/runtime/SmallStrings.cpp \
        Source/JavaScriptCore/runtime/SmallStrings.h \
        Source/JavaScriptCore/runtime/SparseArrayValueMap.cpp \
@@ -892,8 +937,14 @@ javascriptcore_sources += \
        Source/JavaScriptCore/runtime/SymbolTable.cpp \
        Source/JavaScriptCore/runtime/SymbolTable.h \
        Source/JavaScriptCore/runtime/Tracing.h \
+       Source/JavaScriptCore/runtime/TypedArrayAdaptors.h \
        Source/JavaScriptCore/runtime/TypedArrayBase.h \
-       Source/JavaScriptCore/runtime/TypedArrayDescriptor.h \
+       Source/JavaScriptCore/runtime/TypedArrayController.cpp \
+       Source/JavaScriptCore/runtime/TypedArrayController.h \
+       Source/JavaScriptCore/runtime/TypedArrayInlines.h \
+       Source/JavaScriptCore/runtime/TypedArrayType.cpp \
+       Source/JavaScriptCore/runtime/TypedArrayType.h \
+       Source/JavaScriptCore/runtime/TypedArrays.h \
        Source/JavaScriptCore/runtime/Uint16Array.h \
        Source/JavaScriptCore/runtime/Uint16WithFraction.h \
        Source/JavaScriptCore/runtime/Uint32Array.h \
@@ -967,5 +1018,4 @@ Programs_LLIntOffsetsExtractor_SOURCES = \
        Source/JavaScriptCore/llint/LLIntOffsetsExtractor.cpp
 
 Programs_jsc_@WEBKITGTK_API_MAJOR_VERSION@_SOURCES = \
-       Source/JavaScriptCore/JSCTypedArrayStubs.h \
        Source/JavaScriptCore/jsc.cpp
diff --git a/Source/JavaScriptCore/JSCTypedArrayStubs.h b/Source/JavaScriptCore/JSCTypedArrayStubs.h
deleted file mode 100644 (file)
index cb9f3e2..0000000
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
- * Copyright (C) 2012 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-#ifndef JSCTypedArrayStubs_h
-#define JSCTypedArrayStubs_h
-
-#include "Float32Array.h"
-#include "Float64Array.h"
-#include "Int16Array.h"
-#include "Int32Array.h"
-#include "Int8Array.h"
-#include "JSDestructibleObject.h"
-#include "ObjectPrototype.h"
-#include "Operations.h"
-#include "Uint16Array.h"
-#include "Uint32Array.h"
-#include "Uint8Array.h"
-#include "Uint8ClampedArray.h"
-
-#include <wtf/Forward.h>
-
-namespace JSC {
-    
-#define TYPED_ARRAY(name, type) \
-class JS##name##Array : public JSDestructibleObject { \
-public: \
-    typedef JSDestructibleObject Base; \
-    static JS##name##Array* create(JSC::Structure* structure, JSGlobalObject* globalObject, PassRefPtr<name##Array> impl) \
-    { \
-        JS##name##Array* ptr = new (NotNull, JSC::allocateCell<JS##name##Array>(globalObject->vm().heap)) JS##name##Array(structure, globalObject, impl); \
-        ptr->finishCreation(globalObject->vm()); \
-        return ptr; \
-    }\
-\
-    static bool getOwnPropertySlot(JSC::JSObject*, JSC::ExecState*, JSC::PropertyName propertyName, JSC::PropertySlot&);\
-    static bool getOwnPropertyDescriptor(JSC::JSObject*, JSC::ExecState*, JSC::PropertyName propertyName, JSC::PropertyDescriptor&);\
-    static bool getOwnPropertySlotByIndex(JSC::JSObject*, JSC::ExecState*, unsigned propertyName, JSC::PropertySlot&);\
-    static void put(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName propertyName, JSC::JSValue, JSC::PutPropertySlot&);\
-    static void putByIndex(JSC::JSCell*, JSC::ExecState*, unsigned propertyName, JSC::JSValue, bool);\
-    DECLARE_INFO;\
-\
-    static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype)\
-    {\
-        return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());\
-    }\
-\
-    static void getOwnPropertyNames(JSC::JSObject*, JSC::ExecState*, JSC::PropertyNameArray&, JSC::EnumerationMode mode = JSC::ExcludeDontEnumProperties);\
-    static JSC::JSValue getConstructor(JSC::ExecState*, JSC::JSGlobalObject*);\
-\
-    static const JSC::TypedArrayType TypedArrayStorageType = JSC::TypedArray##name;\
-    uint32_t m_storageLength;\
-    type* m_storage;\
-    RefPtr<name##Array> m_impl;\
-protected:\
-    JS##name##Array(JSC::Structure*, JSGlobalObject*, PassRefPtr<name##Array>);\
-    void finishCreation(JSC::VM&);\
-    static const unsigned StructureFlags = JSC::OverridesGetPropertyNames | JSC::InterceptsGetOwnPropertySlotByIndexEvenWhenLengthIsNotZero | JSC::OverridesGetOwnPropertySlot | Base::StructureFlags; \
-    JSC::JSValue getByIndex(JSC::ExecState*, unsigned index);\
-    void indexSetter(JSC::ExecState*, unsigned index, JSC::JSValue);\
-};\
-\
-const ClassInfo JS##name##Array::s_info = { #name "Array" , &Base::s_info, 0, 0, CREATE_METHOD_TABLE(JS##name##Array) };\
-\
-JS##name##Array::JS##name##Array(Structure* structure, JSGlobalObject* globalObject, PassRefPtr<name##Array> impl)\
-    : Base(globalObject->vm(), structure)\
-    , m_impl(impl)\
-{\
-}\
-\
-void JS##name##Array::finishCreation(VM& vm)\
-{\
-    Base::finishCreation(vm);\
-    TypedArrayDescriptor descriptor(&JS##name##Array::s_info, OBJECT_OFFSETOF(JS##name##Array, m_storage), OBJECT_OFFSETOF(JS##name##Array, m_storageLength));\
-    vm.registerTypedArrayDescriptor(m_impl.get(), descriptor);\
-    m_storage = m_impl->data();\
-    m_storageLength = m_impl->length();\
-    putDirect(vm, vm.propertyNames->length, jsNumber(m_storageLength), DontDelete | ReadOnly | DontEnum); \
-    ASSERT(inherits(info()));\
-}\
-\
-bool JS##name##Array::getOwnPropertySlot(JSObject* object, ExecState* exec, PropertyName propertyName, PropertySlot& slot)\
-{\
-    JS##name##Array* thisObject = jsCast<JS##name##Array*>(object);\
-    ASSERT_GC_OBJECT_INHERITS(thisObject, info());\
-    unsigned index = propertyName.asIndex();\
-    if (index < thisObject->m_storageLength) {\
-        ASSERT(index != PropertyName::NotAnIndex);\
-        slot.setValue(thisObject, thisObject->getByIndex(exec, index));\
-        return true;\
-    }\
-    return Base::getOwnPropertySlot(object, exec, propertyName, slot);\
-}\
-\
-bool JS##name##Array::getOwnPropertyDescriptor(JSObject* object, ExecState* exec, PropertyName propertyName, PropertyDescriptor& descriptor)\
-{\
-    JS##name##Array* thisObject = jsCast<JS##name##Array*>(object);\
-    ASSERT_GC_OBJECT_INHERITS(thisObject, info());\
-    unsigned index = propertyName.asIndex();\
-    if (index < thisObject->m_storageLength) {\
-        ASSERT(index != PropertyName::NotAnIndex);\
-        descriptor.setDescriptor(thisObject->getByIndex(exec, index), DontDelete);\
-        return true;\
-    }\
-    return Base::getOwnPropertyDescriptor(object, exec, propertyName, descriptor);\
-}\
-\
-bool JS##name##Array::getOwnPropertySlotByIndex(JSObject* object, ExecState* exec, unsigned propertyName, PropertySlot& slot)\
-{\
-    JS##name##Array* thisObject = jsCast<JS##name##Array*>(object);\
-    ASSERT_GC_OBJECT_INHERITS(thisObject, info());\
-    if (propertyName < thisObject->m_storageLength) {\
-        slot.setValue(thisObject, thisObject->getByIndex(exec, propertyName));\
-        return true;\
-    }\
-    return thisObject->methodTable()->getOwnPropertySlot(thisObject, exec, Identifier::from(exec, propertyName), slot);\
-}\
-\
-void JS##name##Array::put(JSCell* cell, ExecState* exec, PropertyName propertyName, JSValue value, PutPropertySlot& slot)\
-{\
-    JS##name##Array* thisObject = jsCast<JS##name##Array*>(cell);\
-    ASSERT_GC_OBJECT_INHERITS(thisObject, info());\
-    unsigned index = propertyName.asIndex();\
-    if (index != PropertyName::NotAnIndex) {\
-        thisObject->indexSetter(exec, index, value);\
-        return;\
-    }\
-    Base::put(thisObject, exec, propertyName, value, slot);\
-}\
-\
-void JS##name##Array::indexSetter(JSC::ExecState* exec, unsigned index, JSC::JSValue value) \
-{\
-    m_impl->set(index, value.toNumber(exec));\
-}\
-\
-void JS##name##Array::putByIndex(JSCell* cell, ExecState* exec, unsigned propertyName, JSValue value, bool)\
-{\
-    JS##name##Array* thisObject = jsCast<JS##name##Array*>(cell);\
-    ASSERT_GC_OBJECT_INHERITS(thisObject, info());\
-    thisObject->indexSetter(exec, propertyName, value);\
-    return;\
-}\
-\
-void JS##name##Array::getOwnPropertyNames(JSObject* object, ExecState* exec, PropertyNameArray& propertyNames, EnumerationMode mode)\
-{\
-    JS##name##Array* thisObject = jsCast<JS##name##Array*>(object);\
-    ASSERT_GC_OBJECT_INHERITS(thisObject, info());\
-    for (unsigned i = 0; i < thisObject->m_storageLength; ++i)\
-        propertyNames.add(Identifier::from(exec, i));\
-    Base::getOwnPropertyNames(thisObject, exec, propertyNames, mode);\
-}\
-\
-JSValue JS##name##Array::getByIndex(ExecState*, unsigned index)\
-{\
-    ASSERT_GC_OBJECT_INHERITS(this, info());\
-    type result = m_impl->item(index);\
-    if (std::isnan((double)result))\
-        return jsNaN();\
-    return JSValue(result);\
-}\
-static EncodedJSValue JSC_HOST_CALL constructJS##name##Array(ExecState* callFrame) { \
-    if (callFrame->argumentCount() < 1) \
-        return JSValue::encode(jsUndefined()); \
-    int32_t length = callFrame->argument(0).toInt32(callFrame); \
-    if (length < 0) \
-        return JSValue::encode(jsUndefined()); \
-    Structure* structure = JS##name##Array::createStructure(callFrame->vm(), callFrame->lexicalGlobalObject(), callFrame->lexicalGlobalObject()->objectPrototype()); \
-    RefPtr<name##Array> buffer = name##Array::create(length); \
-    if (!buffer) \
-        return throwVMError(callFrame, createRangeError(callFrame, "ArrayBuffer size is not a small enough positive integer.")); \
-    return JSValue::encode(JS##name##Array::create(structure, callFrame->lexicalGlobalObject(), buffer.release())); \
-}
-
-TYPED_ARRAY(Uint8, uint8_t);
-TYPED_ARRAY(Uint8Clamped, uint8_t);
-TYPED_ARRAY(Uint16, uint16_t);
-TYPED_ARRAY(Uint32, uint32_t);
-TYPED_ARRAY(Int8, int8_t);
-TYPED_ARRAY(Int16, int16_t);
-TYPED_ARRAY(Int32, int32_t);
-TYPED_ARRAY(Float32, float);
-TYPED_ARRAY(Float64, double);
-
-}
-
-#endif
index 5af8133..247039a 100644 (file)
     <ClCompile Include="..\profiler\ProfilerOSRExit.cpp" />\r
     <ClCompile Include="..\profiler\ProfilerOSRExitSite.cpp" />\r
     <ClCompile Include="..\profiler\ProfilerProfiledBytecodes.cpp" />\r
-    <ClCompile Include="..\runtime\ArrayBuffer.cpp" />\r
-    <ClCompile Include="..\runtime\ArrayBufferView.cpp" />\r
     <ClCompile Include="..\runtime\ArgList.cpp" />\r
     <ClCompile Include="..\runtime\Arguments.cpp" />\r
+    <ClCompile Include="..\runtime\ArrayBuffer.cpp" />\r
+    <ClCompile Include="..\runtime\ArrayBufferView.cpp" />\r
     <ClCompile Include="..\runtime\ArrayConstructor.cpp" />\r
     <ClCompile Include="..\runtime\ArrayPrototype.cpp" />\r
     <ClCompile Include="..\runtime\BooleanConstructor.cpp" />\r
     <ClCompile Include="..\runtime\CommonSlowPathsExceptions.cpp" />\r
     <ClCompile Include="..\runtime\Completion.cpp" />\r
     <ClCompile Include="..\runtime\ConstructData.cpp" />\r
+    <ClCompile Include="..\runtime\DataView.cpp" />\r
     <ClCompile Include="..\runtime\DateConstructor.cpp" />\r
     <ClCompile Include="..\runtime\DateConversion.cpp" />\r
     <ClCompile Include="..\runtime\DateInstance.cpp" />\r
     <ClCompile Include="..\runtime\InitializeThreading.cpp" />\r
     <ClCompile Include="..\runtime\IntendedStructureChain.cpp" />\r
     <ClCompile Include="..\runtime\InternalFunction.cpp" />\r
-    <ClCompile Include="..\runtime\JSActivation.cpp" />\r
     <ClCompile Include="..\runtime\JSAPIValueWrapper.cpp" />\r
+    <ClCompile Include="..\runtime\JSActivation.cpp" />\r
     <ClCompile Include="..\runtime\JSArray.cpp" />\r
+    <ClCompile Include="..\runtime\JSArrayBuffer.cpp" />\r
+    <ClCompile Include="..\runtime\JSArrayBufferConstructor.cpp" />\r
+    <ClCompile Include="..\runtime\JSArrayBufferPrototype.cpp" />\r
+    <ClCompile Include="..\runtime\JSArrayBufferView.cpp" />\r
     <ClCompile Include="..\runtime\JSBoundFunction.cpp" />\r
-    <ClCompile Include="..\runtime\JSCell.cpp" />\r
     <ClCompile Include="..\runtime\JSCJSValue.cpp" />\r
+    <ClCompile Include="..\runtime\JSCell.cpp" />\r
+    <ClCompile Include="..\runtime\JSDataView.cpp" />\r
+    <ClCompile Include="..\runtime\JSDataViewPrototype.cpp" />\r
     <ClCompile Include="..\runtime\JSDateMath.cpp" />\r
     <ClCompile Include="..\runtime\JSFunction.cpp" />\r
     <ClCompile Include="..\runtime\JSGlobalObject.cpp" />\r
     <ClCompile Include="..\runtime\JSLock.cpp" />\r
     <ClCompile Include="..\runtime\JSNameScope.cpp" />\r
     <ClCompile Include="..\runtime\JSNotAnObject.cpp" />\r
-    <ClCompile Include="..\runtime\JSObject.cpp" />\r
     <ClCompile Include="..\runtime\JSONObject.cpp" />\r
+    <ClCompile Include="..\runtime\JSObject.cpp" />\r
     <ClCompile Include="..\runtime\JSPropertyNameIterator.cpp" />\r
     <ClCompile Include="..\runtime\JSProxy.cpp" />\r
     <ClCompile Include="..\runtime\JSScope.cpp" />\r
     <ClCompile Include="..\runtime\JSString.cpp" />\r
     <ClCompile Include="..\runtime\JSStringJoiner.cpp" />\r
     <ClCompile Include="..\runtime\JSSymbolTableObject.cpp" />\r
+    <ClCompile Include="..\runtime\JSTypedArrayConstructors.cpp" />\r
+    <ClCompile Include="..\runtime\JSTypedArrayPrototypes.cpp" />\r
+    <ClCompile Include="..\runtime\JSTypedArrays.cpp" />\r
     <ClCompile Include="..\runtime\JSVariableObject.cpp" />\r
     <ClCompile Include="..\runtime\JSWithScope.cpp" />\r
     <ClCompile Include="..\runtime\JSWrapperObject.cpp" />\r
     <ClCompile Include="..\runtime\RegExpObject.cpp" />\r
     <ClCompile Include="..\runtime\RegExpPrototype.cpp" />\r
     <ClCompile Include="..\runtime\SamplingCounter.cpp" />\r
+    <ClCompile Include="..\runtime\SimpleTypedArrayController.cpp" />\r
     <ClCompile Include="..\runtime\SmallStrings.cpp" />\r
     <ClCompile Include="..\runtime\SparseArrayValueMap.cpp" />\r
     <ClCompile Include="..\runtime\StrictEvalActivation.cpp" />\r
     <ClCompile Include="..\runtime\StructureChain.cpp" />\r
     <ClCompile Include="..\runtime\StructureRareData.cpp" />\r
     <ClCompile Include="..\runtime\SymbolTable.cpp" />\r
+    <ClCompile Include="..\runtime\TypedArrayController.cpp" />\r
+    <ClCompile Include="..\runtime\TypedArrayType.cpp" />\r
     <ClCompile Include="..\runtime\VM.cpp" />\r
     <ClCompile Include="..\runtime\Watchdog.cpp" />\r
     <ClCompile Include="..\runtime\WatchdogNone.cpp" />\r
     <ClInclude Include="$(ConfigurationBuildDir)\obj32\$(ProjectName)\DerivedSources\DatePrototype.lut.h" />\r
     <ClInclude Include="$(ConfigurationBuildDir)\obj32\$(ProjectName)\DerivedSources\ErrorPrototype.lut.h" />\r
     <ClInclude Include="$(ConfigurationBuildDir)\obj32\$(ProjectName)\DerivedSources\HeaderDetection.h" />\r
+    <ClInclude Include="$(ConfigurationBuildDir)\obj32\$(ProjectName)\DerivedSources\JSDataViewPrototype.lut.h" />\r
     <ClInclude Include="$(ConfigurationBuildDir)\obj32\$(ProjectName)\DerivedSources\JSGlobalObject.lut.h" />\r
     <ClInclude Include="$(ConfigurationBuildDir)\obj32\$(ProjectName)\DerivedSources\JSONObject.lut.h" />\r
     <ClInclude Include="$(ConfigurationBuildDir)\obj32\$(ProjectName)\DerivedSources\Lexer.lut.h" />\r
     <ClInclude Include="..\profiler\ProfilerOSRExit.h" />\r
     <ClInclude Include="..\profiler\ProfilerOSRExitSite.h" />\r
     <ClInclude Include="..\profiler\ProfilerProfiledBytecodes.h" />\r
-    <ClInclude Include="..\runtime\ArrayBuffer.h" />\r
-    <ClInclude Include="..\runtime\ArrayBufferView.h" />\r
     <ClInclude Include="..\runtime\ArgList.h" />\r
     <ClInclude Include="..\runtime\Arguments.h" />\r
+    <ClInclude Include="..\runtime\ArrayBuffer.h" />\r
+    <ClInclude Include="..\runtime\ArrayBufferView.h" />\r
     <ClInclude Include="..\runtime\ArrayConstructor.h" />\r
     <ClInclude Include="..\runtime\ArrayConventions.h" />\r
     <ClInclude Include="..\runtime\ArrayPrototype.h" />\r
     <ClInclude Include="..\runtime\CommonSlowPathsExceptions.h" />\r
     <ClInclude Include="..\runtime\Completion.h" />\r
     <ClInclude Include="..\runtime\ConstructData.h" />\r
+    <ClInclude Include="..\runtime\DataView.h" />\r
     <ClInclude Include="..\runtime\DateConstructor.h" />\r
     <ClInclude Include="..\runtime\DateConversion.h" />\r
     <ClInclude Include="..\runtime\DateInstance.h" />\r
     <ClInclude Include="..\runtime\FunctionConstructor.h" />\r
     <ClInclude Include="..\runtime\FunctionPrototype.h" />\r
     <ClInclude Include="..\runtime\GCActivityCallback.h" />\r
+    <ClInclude Include="..\runtime\GenericTypedArrayView.h" />\r
+    <ClInclude Include="..\runtime\GenericTypedArrayViewInlines.h" />\r
     <ClInclude Include="..\runtime\GetterSetter.h" />\r
     <ClInclude Include="..\runtime\Identifier.h" />\r
     <ClInclude Include="..\runtime\IndexingHeader.h" />\r
     <ClInclude Include="..\runtime\IntendedStructureChain.h" />\r
     <ClInclude Include="..\runtime\InternalFunction.h" />\r
     <ClInclude Include="..\runtime\Intrinsic.h" />\r
-    <ClInclude Include="..\runtime\JSActivation.h" />\r
     <ClInclude Include="..\runtime\JSAPIValueWrapper.h" />\r
+    <ClInclude Include="..\runtime\JSActivation.h" />\r
     <ClInclude Include="..\runtime\JSArray.h" />\r
+    <ClInclude Include="..\runtime\JSArrayBuffer.h" />\r
+    <ClInclude Include="..\runtime\JSArrayBufferConstructor.h" />\r
+    <ClInclude Include="..\runtime\JSArrayBufferPrototype.h" />\r
+    <ClInclude Include="..\runtime\JSArrayBufferView.h" />\r
+    <ClInclude Include="..\runtime\JSArrayBufferViewInlines.h" />\r
     <ClInclude Include="..\runtime\JSBoundFunction.h" />\r
-    <ClInclude Include="..\runtime\JSCell.h" />\r
     <ClInclude Include="..\runtime\JSCJSValue.h" />\r
     <ClInclude Include="..\runtime\JSCJSValueInlines.h" />\r
+    <ClInclude Include="..\runtime\JSCell.h" />\r
+    <ClInclude Include="..\runtime\JSDataView.h" />\r
+    <ClInclude Include="..\runtime\JSDataViewPrototype.h" />\r
     <ClInclude Include="..\runtime\JSDateMath.h" />\r
     <ClInclude Include="..\runtime\JSDestructibleObject.h" />\r
     <ClInclude Include="..\runtime\JSExportMacros.h" />\r
+    <ClInclude Include="..\runtime\JSFloat32Array.h" />\r
+    <ClInclude Include="..\runtime\JSFloat64Array.h" />\r
     <ClInclude Include="..\runtime\JSFunction.h" />\r
+    <ClInclude Include="..\runtime\JSGenericTypedArrayView.h" />\r
+    <ClInclude Include="..\runtime\JSGenericTypedArrayViewConstructor.h" />\r
+    <ClInclude Include="..\runtime\JSGenericTypedArrayViewConstructorInlines.h" />\r
+    <ClInclude Include="..\runtime\JSGenericTypedArrayViewInlines.h" />\r
+    <ClInclude Include="..\runtime\JSGenericTypedArrayViewPrototype.h" />\r
+    <ClInclude Include="..\runtime\JSGenericTypedArrayViewPrototypeInlines.h" />\r
     <ClInclude Include="..\runtime\JSGlobalObject.h" />\r
     <ClInclude Include="..\runtime\JSGlobalObjectFunctions.h" />\r
+    <ClInclude Include="..\runtime\JSInt16Array.h" />\r
+    <ClInclude Include="..\runtime\JSInt32Array.h" />\r
+    <ClInclude Include="..\runtime\JSInt8Array.h" />\r
     <ClInclude Include="..\runtime\JSLock.h" />\r
     <ClInclude Include="..\runtime\JSNameScope.h" />\r
     <ClInclude Include="..\runtime\JSNotAnObject.h" />\r
-    <ClInclude Include="..\runtime\JSObject.h" />\r
     <ClInclude Include="..\runtime\JSONObject.h" />\r
+    <ClInclude Include="..\runtime\JSObject.h" />\r
     <ClInclude Include="..\runtime\JSPropertyNameIterator.h" />\r
     <ClInclude Include="..\runtime\JSProxy.h" />\r
     <ClInclude Include="..\runtime\JSScope.h" />\r
     <ClInclude Include="..\runtime\JSSymbolTableObject.h" />\r
     <ClInclude Include="..\runtime\JSType.h" />\r
     <ClInclude Include="..\runtime\JSTypeInfo.h" />\r
+    <ClInclude Include="..\runtime\JSTypedArrayConstructors.h" />\r
+    <ClInclude Include="..\runtime\JSTypedArrayPrototypes.h" />\r
+    <ClInclude Include="..\runtime\JSTypedArrays.h" />\r
+    <ClInclude Include="..\runtime\JSUint16Array.h" />\r
+    <ClInclude Include="..\runtime\JSUint32Array.h" />\r
+    <ClInclude Include="..\runtime\JSUint8Array.h" />\r
+    <ClInclude Include="..\runtime\JSUint8ClampedArray.h" />\r
     <ClInclude Include="..\runtime\JSVariableObject.h" />\r
     <ClInclude Include="..\runtime\JSWithScope.h" />\r
     <ClInclude Include="..\runtime\JSWrapperObject.h" />\r
     <ClInclude Include="..\runtime\RegExpPrototype.h" />\r
     <ClInclude Include="..\runtime\Reject.h" />\r
     <ClInclude Include="..\runtime\SamplingCounter.h" />\r
+    <ClInclude Include="..\runtime\SimpleTypedArrayController.h" />\r
     <ClInclude Include="..\runtime\SmallStrings.h" />\r
     <ClInclude Include="..\runtime\SparseArrayValueMap.h" />\r
     <ClInclude Include="..\runtime\StrictEvalActivation.h" />\r
     <ClInclude Include="..\runtime\StructureTransitionTable.h" />\r
     <ClInclude Include="..\runtime\SymbolTable.h" />\r
     <ClInclude Include="..\runtime\Tracing.h" />\r
-    <ClInclude Include="..\runtime\TypedArrayDescriptor.h" />\r
+    <ClInclude Include="..\runtime\TypedArrayAdaptors.h" />\r
+    <ClInclude Include="..\runtime\TypedArrayController.h" />\r
+    <ClInclude Include="..\runtime\TypedArrayInlines.h" />\r
+    <ClInclude Include="..\runtime\TypedArrayType.h" />\r
+    <ClInclude Include="..\runtime\TypedArrays.h" />\r
     <ClInclude Include="..\runtime\Uint16Array.h" />\r
     <ClInclude Include="..\runtime\Uint16WithFraction.h" />\r
     <ClInclude Include="..\runtime\Uint32Array.h" />\r
index a754984..5e0d04d 100644 (file)
                0F235BEE17178E7300690C7F /* DFGOSRExitPreparation.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F235BEA17178E7300690C7F /* DFGOSRExitPreparation.h */; settings = {ATTRIBUTES = (Private, ); }; };
                0F242DA713F3B1E8007ADD4C /* WeakReferenceHarvester.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F242DA513F3B1BB007ADD4C /* WeakReferenceHarvester.h */; settings = {ATTRIBUTES = (Private, ); }; };
                0F256C361627B0AD007F2783 /* DFGCallArrayAllocatorSlowPathGenerator.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F256C341627B0AA007F2783 /* DFGCallArrayAllocatorSlowPathGenerator.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F2B66AC17B6B53F00A7AE3F /* GCIncomingRefCounted.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66A817B6B53D00A7AE3F /* GCIncomingRefCounted.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F2B66AD17B6B54500A7AE3F /* GCIncomingRefCountedInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66A917B6B53D00A7AE3F /* GCIncomingRefCountedInlines.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F2B66AE17B6B54500A7AE3F /* GCIncomingRefCountedSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66AA17B6B53D00A7AE3F /* GCIncomingRefCountedSet.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F2B66AF17B6B54500A7AE3F /* GCIncomingRefCountedSetInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66AB17B6B53D00A7AE3F /* GCIncomingRefCountedSetInlines.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F2B66DE17B6B5AB00A7AE3F /* DataView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F2B66B017B6B5AB00A7AE3F /* DataView.cpp */; };
+               0F2B66DF17B6B5AB00A7AE3F /* DataView.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66B117B6B5AB00A7AE3F /* DataView.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F2B66E017B6B5AB00A7AE3F /* GenericTypedArrayView.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66B217B6B5AB00A7AE3F /* GenericTypedArrayView.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F2B66E117B6B5AB00A7AE3F /* GenericTypedArrayViewInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66B317B6B5AB00A7AE3F /* GenericTypedArrayViewInlines.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F2B66E217B6B5AB00A7AE3F /* JSArrayBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F2B66B417B6B5AB00A7AE3F /* JSArrayBuffer.cpp */; };
+               0F2B66E317B6B5AB00A7AE3F /* JSArrayBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66B517B6B5AB00A7AE3F /* JSArrayBuffer.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F2B66E417B6B5AB00A7AE3F /* JSArrayBufferConstructor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F2B66B617B6B5AB00A7AE3F /* JSArrayBufferConstructor.cpp */; };
+               0F2B66E517B6B5AB00A7AE3F /* JSArrayBufferConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66B717B6B5AB00A7AE3F /* JSArrayBufferConstructor.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F2B66E617B6B5AB00A7AE3F /* JSArrayBufferPrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F2B66B817B6B5AB00A7AE3F /* JSArrayBufferPrototype.cpp */; };
+               0F2B66E717B6B5AB00A7AE3F /* JSArrayBufferPrototype.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66B917B6B5AB00A7AE3F /* JSArrayBufferPrototype.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F2B66E817B6B5AB00A7AE3F /* JSArrayBufferView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F2B66BA17B6B5AB00A7AE3F /* JSArrayBufferView.cpp */; };
+               0F2B66E917B6B5AB00A7AE3F /* JSArrayBufferView.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66BB17B6B5AB00A7AE3F /* JSArrayBufferView.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F2B66EA17B6B5AB00A7AE3F /* JSArrayBufferViewInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66BC17B6B5AB00A7AE3F /* JSArrayBufferViewInlines.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F2B66EB17B6B5AB00A7AE3F /* JSDataView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F2B66BD17B6B5AB00A7AE3F /* JSDataView.cpp */; };
+               0F2B66EC17B6B5AB00A7AE3F /* JSDataView.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66BE17B6B5AB00A7AE3F /* JSDataView.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F2B66ED17B6B5AB00A7AE3F /* JSDataViewPrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F2B66BF17B6B5AB00A7AE3F /* JSDataViewPrototype.cpp */; };
+               0F2B66EE17B6B5AB00A7AE3F /* JSDataViewPrototype.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66C017B6B5AB00A7AE3F /* JSDataViewPrototype.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F2B66EF17B6B5AB00A7AE3F /* JSFloat32Array.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66C117B6B5AB00A7AE3F /* JSFloat32Array.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F2B66F017B6B5AB00A7AE3F /* JSFloat64Array.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66C217B6B5AB00A7AE3F /* JSFloat64Array.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F2B66F117B6B5AB00A7AE3F /* JSGenericTypedArrayView.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66C317B6B5AB00A7AE3F /* JSGenericTypedArrayView.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F2B66F217B6B5AB00A7AE3F /* JSGenericTypedArrayViewConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66C417B6B5AB00A7AE3F /* JSGenericTypedArrayViewConstructor.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F2B66F317B6B5AB00A7AE3F /* JSGenericTypedArrayViewConstructorInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66C517B6B5AB00A7AE3F /* JSGenericTypedArrayViewConstructorInlines.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F2B66F417B6B5AB00A7AE3F /* JSGenericTypedArrayViewInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66C617B6B5AB00A7AE3F /* JSGenericTypedArrayViewInlines.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F2B66F517B6B5AB00A7AE3F /* JSGenericTypedArrayViewPrototype.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66C717B6B5AB00A7AE3F /* JSGenericTypedArrayViewPrototype.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F2B66F617B6B5AB00A7AE3F /* JSGenericTypedArrayViewPrototypeInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66C817B6B5AB00A7AE3F /* JSGenericTypedArrayViewPrototypeInlines.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F2B66F717B6B5AB00A7AE3F /* JSInt8Array.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66C917B6B5AB00A7AE3F /* JSInt8Array.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F2B66F817B6B5AB00A7AE3F /* JSInt16Array.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66CA17B6B5AB00A7AE3F /* JSInt16Array.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F2B66F917B6B5AB00A7AE3F /* JSInt32Array.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66CB17B6B5AB00A7AE3F /* JSInt32Array.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F2B66FA17B6B5AB00A7AE3F /* JSTypedArrayConstructors.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F2B66CC17B6B5AB00A7AE3F /* JSTypedArrayConstructors.cpp */; };
+               0F2B66FB17B6B5AB00A7AE3F /* JSTypedArrayConstructors.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66CD17B6B5AB00A7AE3F /* JSTypedArrayConstructors.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F2B66FC17B6B5AB00A7AE3F /* JSTypedArrayPrototypes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F2B66CE17B6B5AB00A7AE3F /* JSTypedArrayPrototypes.cpp */; };
+               0F2B66FD17B6B5AB00A7AE3F /* JSTypedArrayPrototypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66CF17B6B5AB00A7AE3F /* JSTypedArrayPrototypes.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F2B66FE17B6B5AB00A7AE3F /* JSTypedArrays.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F2B66D017B6B5AB00A7AE3F /* JSTypedArrays.cpp */; };
+               0F2B66FF17B6B5AB00A7AE3F /* JSTypedArrays.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66D117B6B5AB00A7AE3F /* JSTypedArrays.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F2B670017B6B5AB00A7AE3F /* JSUint8Array.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66D217B6B5AB00A7AE3F /* JSUint8Array.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F2B670117B6B5AB00A7AE3F /* JSUint8ClampedArray.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66D317B6B5AB00A7AE3F /* JSUint8ClampedArray.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F2B670217B6B5AB00A7AE3F /* JSUint16Array.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66D417B6B5AB00A7AE3F /* JSUint16Array.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F2B670317B6B5AB00A7AE3F /* JSUint32Array.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66D517B6B5AB00A7AE3F /* JSUint32Array.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F2B670417B6B5AB00A7AE3F /* SimpleTypedArrayController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F2B66D617B6B5AB00A7AE3F /* SimpleTypedArrayController.cpp */; };
+               0F2B670517B6B5AB00A7AE3F /* SimpleTypedArrayController.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66D717B6B5AB00A7AE3F /* SimpleTypedArrayController.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F2B670617B6B5AB00A7AE3F /* TypedArrayAdaptors.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66D817B6B5AB00A7AE3F /* TypedArrayAdaptors.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F2B670717B6B5AB00A7AE3F /* TypedArrayController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F2B66D917B6B5AB00A7AE3F /* TypedArrayController.cpp */; };
+               0F2B670817B6B5AB00A7AE3F /* TypedArrayController.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66DA17B6B5AB00A7AE3F /* TypedArrayController.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F2B670917B6B5AB00A7AE3F /* TypedArrays.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66DB17B6B5AB00A7AE3F /* TypedArrays.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F2B670A17B6B5AB00A7AE3F /* TypedArrayType.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F2B66DC17B6B5AB00A7AE3F /* TypedArrayType.cpp */; };
+               0F2B670B17B6B5AB00A7AE3F /* TypedArrayType.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66DD17B6B5AB00A7AE3F /* TypedArrayType.h */; settings = {ATTRIBUTES = (Private, ); }; };
                0F2BDC15151C5D4D00CD8910 /* DFGFixupPhase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F2BDC12151C5D4A00CD8910 /* DFGFixupPhase.cpp */; };
                0F2BDC16151C5D4F00CD8910 /* DFGFixupPhase.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2BDC13151C5D4A00CD8910 /* DFGFixupPhase.h */; settings = {ATTRIBUTES = (Private, ); }; };
                0F2BDC21151E803B00CD8910 /* DFGInsertionSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2BDC1F151E803800CD8910 /* DFGInsertionSet.h */; settings = {ATTRIBUTES = (Private, ); }; };
                0F4680D414BBD24900BFE272 /* HostCallReturnValue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F4680D014BBC5F800BFE272 /* HostCallReturnValue.cpp */; };
                0F4680D514BBD24B00BFE272 /* HostCallReturnValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F4680D114BBC5F800BFE272 /* HostCallReturnValue.h */; settings = {ATTRIBUTES = (Private, ); }; };
                0F493AFA16D0CAD30084508B /* SourceProvider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F493AF816D0CAD10084508B /* SourceProvider.cpp */; };
+               0F4B94DC17B9F07500DD03A4 /* TypedArrayInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F4B94DB17B9F07500DD03A4 /* TypedArrayInlines.h */; settings = {ATTRIBUTES = (Private, ); }; };
                0F5541B11613C1FB00CE3E25 /* SpecialPointer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F5541AF1613C1FB00CE3E25 /* SpecialPointer.cpp */; };
                0F5541B21613C1FB00CE3E25 /* SpecialPointer.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F5541B01613C1FB00CE3E25 /* SpecialPointer.h */; settings = {ATTRIBUTES = (Private, ); }; };
                0F55C19417276E4600CEABFD /* DFGAbstractValue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F55C19317276E4600CEABFD /* DFGAbstractValue.cpp */; };
                0FEA0A32170D40BF00BB722C /* DFGCommonData.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FEA0A2E170D40BF00BB722C /* DFGCommonData.h */; settings = {ATTRIBUTES = (Private, ); }; };
                0FEA0A33170D40BF00BB722C /* DFGJITCode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0FEA0A2F170D40BF00BB722C /* DFGJITCode.cpp */; };
                0FEA0A34170D40BF00BB722C /* DFGJITCode.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FEA0A30170D40BF00BB722C /* DFGJITCode.h */; settings = {ATTRIBUTES = (Private, ); }; };
-               0FEB3ECD16237F4D00AB67AD /* TypedArrayDescriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FEB3ECB16237F4700AB67AD /* TypedArrayDescriptor.h */; settings = {ATTRIBUTES = (Private, ); }; };
                0FEB3ECF16237F6C00AB67AD /* MacroAssembler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0FEB3ECE16237F6700AB67AD /* MacroAssembler.cpp */; };
                0FEFC9AA1681A3B300567F53 /* DFGOSRExitJumpPlaceholder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0FEFC9A71681A3B000567F53 /* DFGOSRExitJumpPlaceholder.cpp */; };
                0FEFC9AB1681A3B600567F53 /* DFGOSRExitJumpPlaceholder.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FEFC9A81681A3B000567F53 /* DFGOSRExitJumpPlaceholder.h */; settings = {ATTRIBUTES = (Private, ); }; };
                A7A8AF3A17ADB5F3005AB174 /* Int8Array.h in Headers */ = {isa = PBXBuildFile; fileRef = A7A8AF2B17ADB5F3005AB174 /* Int8Array.h */; settings = {ATTRIBUTES = (Private, ); }; };
                A7A8AF3B17ADB5F3005AB174 /* Int16Array.h in Headers */ = {isa = PBXBuildFile; fileRef = A7A8AF2C17ADB5F3005AB174 /* Int16Array.h */; settings = {ATTRIBUTES = (Private, ); }; };
                A7A8AF3C17ADB5F3005AB174 /* Int32Array.h in Headers */ = {isa = PBXBuildFile; fileRef = A7A8AF2D17ADB5F3005AB174 /* Int32Array.h */; settings = {ATTRIBUTES = (Private, ); }; };
-               A7A8AF3D17ADB5F3005AB174 /* IntegralTypedArrayBase.h in Headers */ = {isa = PBXBuildFile; fileRef = A7A8AF2E17ADB5F3005AB174 /* IntegralTypedArrayBase.h */; settings = {ATTRIBUTES = (Private, ); }; };
-               A7A8AF3E17ADB5F3005AB174 /* TypedArrayBase.h in Headers */ = {isa = PBXBuildFile; fileRef = A7A8AF2F17ADB5F3005AB174 /* TypedArrayBase.h */; settings = {ATTRIBUTES = (Private, ); }; };
                A7A8AF3F17ADB5F3005AB174 /* Uint8Array.h in Headers */ = {isa = PBXBuildFile; fileRef = A7A8AF3017ADB5F3005AB174 /* Uint8Array.h */; settings = {ATTRIBUTES = (Private, ); }; };
                A7A8AF4017ADB5F3005AB174 /* Uint8ClampedArray.h in Headers */ = {isa = PBXBuildFile; fileRef = A7A8AF3117ADB5F3005AB174 /* Uint8ClampedArray.h */; settings = {ATTRIBUTES = (Private, ); }; };
                A7A8AF4117ADB5F3005AB174 /* Uint16Array.h in Headers */ = {isa = PBXBuildFile; fileRef = A7A8AF3217ADB5F3005AB174 /* Uint16Array.h */; settings = {ATTRIBUTES = (Private, ); }; };
                0F235BEA17178E7300690C7F /* DFGOSRExitPreparation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DFGOSRExitPreparation.h; path = dfg/DFGOSRExitPreparation.h; sourceTree = "<group>"; };
                0F242DA513F3B1BB007ADD4C /* WeakReferenceHarvester.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WeakReferenceHarvester.h; sourceTree = "<group>"; };
                0F256C341627B0AA007F2783 /* DFGCallArrayAllocatorSlowPathGenerator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DFGCallArrayAllocatorSlowPathGenerator.h; path = dfg/DFGCallArrayAllocatorSlowPathGenerator.h; sourceTree = "<group>"; };
+               0F2B66A817B6B53D00A7AE3F /* GCIncomingRefCounted.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GCIncomingRefCounted.h; sourceTree = "<group>"; };
+               0F2B66A917B6B53D00A7AE3F /* GCIncomingRefCountedInlines.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GCIncomingRefCountedInlines.h; sourceTree = "<group>"; };
+               0F2B66AA17B6B53D00A7AE3F /* GCIncomingRefCountedSet.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GCIncomingRefCountedSet.h; sourceTree = "<group>"; };
+               0F2B66AB17B6B53D00A7AE3F /* GCIncomingRefCountedSetInlines.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GCIncomingRefCountedSetInlines.h; sourceTree = "<group>"; };
+               0F2B66B017B6B5AB00A7AE3F /* DataView.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DataView.cpp; sourceTree = "<group>"; };
+               0F2B66B117B6B5AB00A7AE3F /* DataView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DataView.h; sourceTree = "<group>"; };
+               0F2B66B217B6B5AB00A7AE3F /* GenericTypedArrayView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GenericTypedArrayView.h; sourceTree = "<group>"; };
+               0F2B66B317B6B5AB00A7AE3F /* GenericTypedArrayViewInlines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GenericTypedArrayViewInlines.h; sourceTree = "<group>"; };
+               0F2B66B417B6B5AB00A7AE3F /* JSArrayBuffer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSArrayBuffer.cpp; sourceTree = "<group>"; };
+               0F2B66B517B6B5AB00A7AE3F /* JSArrayBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSArrayBuffer.h; sourceTree = "<group>"; };
+               0F2B66B617B6B5AB00A7AE3F /* JSArrayBufferConstructor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSArrayBufferConstructor.cpp; sourceTree = "<group>"; };
+               0F2B66B717B6B5AB00A7AE3F /* JSArrayBufferConstructor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSArrayBufferConstructor.h; sourceTree = "<group>"; };
+               0F2B66B817B6B5AB00A7AE3F /* JSArrayBufferPrototype.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSArrayBufferPrototype.cpp; sourceTree = "<group>"; };
+               0F2B66B917B6B5AB00A7AE3F /* JSArrayBufferPrototype.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSArrayBufferPrototype.h; sourceTree = "<group>"; };
+               0F2B66BA17B6B5AB00A7AE3F /* JSArrayBufferView.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSArrayBufferView.cpp; sourceTree = "<group>"; };
+               0F2B66BB17B6B5AB00A7AE3F /* JSArrayBufferView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSArrayBufferView.h; sourceTree = "<group>"; };
+               0F2B66BC17B6B5AB00A7AE3F /* JSArrayBufferViewInlines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSArrayBufferViewInlines.h; sourceTree = "<group>"; };
+               0F2B66BD17B6B5AB00A7AE3F /* JSDataView.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSDataView.cpp; sourceTree = "<group>"; };
+               0F2B66BE17B6B5AB00A7AE3F /* JSDataView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSDataView.h; sourceTree = "<group>"; };
+               0F2B66BF17B6B5AB00A7AE3F /* JSDataViewPrototype.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSDataViewPrototype.cpp; sourceTree = "<group>"; };
+               0F2B66C017B6B5AB00A7AE3F /* JSDataViewPrototype.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSDataViewPrototype.h; sourceTree = "<group>"; };
+               0F2B66C117B6B5AB00A7AE3F /* JSFloat32Array.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSFloat32Array.h; sourceTree = "<group>"; };
+               0F2B66C217B6B5AB00A7AE3F /* JSFloat64Array.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSFloat64Array.h; sourceTree = "<group>"; };
+               0F2B66C317B6B5AB00A7AE3F /* JSGenericTypedArrayView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSGenericTypedArrayView.h; sourceTree = "<group>"; };
+               0F2B66C417B6B5AB00A7AE3F /* JSGenericTypedArrayViewConstructor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSGenericTypedArrayViewConstructor.h; sourceTree = "<group>"; };
+               0F2B66C517B6B5AB00A7AE3F /* JSGenericTypedArrayViewConstructorInlines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSGenericTypedArrayViewConstructorInlines.h; sourceTree = "<group>"; };
+               0F2B66C617B6B5AB00A7AE3F /* JSGenericTypedArrayViewInlines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSGenericTypedArrayViewInlines.h; sourceTree = "<group>"; };
+               0F2B66C717B6B5AB00A7AE3F /* JSGenericTypedArrayViewPrototype.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSGenericTypedArrayViewPrototype.h; sourceTree = "<group>"; };
+               0F2B66C817B6B5AB00A7AE3F /* JSGenericTypedArrayViewPrototypeInlines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSGenericTypedArrayViewPrototypeInlines.h; sourceTree = "<group>"; };
+               0F2B66C917B6B5AB00A7AE3F /* JSInt8Array.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSInt8Array.h; sourceTree = "<group>"; };
+               0F2B66CA17B6B5AB00A7AE3F /* JSInt16Array.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSInt16Array.h; sourceTree = "<group>"; };
+               0F2B66CB17B6B5AB00A7AE3F /* JSInt32Array.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSInt32Array.h; sourceTree = "<group>"; };
+               0F2B66CC17B6B5AB00A7AE3F /* JSTypedArrayConstructors.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSTypedArrayConstructors.cpp; sourceTree = "<group>"; };
+               0F2B66CD17B6B5AB00A7AE3F /* JSTypedArrayConstructors.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSTypedArrayConstructors.h; sourceTree = "<group>"; };
+               0F2B66CE17B6B5AB00A7AE3F /* JSTypedArrayPrototypes.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSTypedArrayPrototypes.cpp; sourceTree = "<group>"; };
+               0F2B66CF17B6B5AB00A7AE3F /* JSTypedArrayPrototypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSTypedArrayPrototypes.h; sourceTree = "<group>"; };
+               0F2B66D017B6B5AB00A7AE3F /* JSTypedArrays.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSTypedArrays.cpp; sourceTree = "<group>"; };
+               0F2B66D117B6B5AB00A7AE3F /* JSTypedArrays.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSTypedArrays.h; sourceTree = "<group>"; };
+               0F2B66D217B6B5AB00A7AE3F /* JSUint8Array.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSUint8Array.h; sourceTree = "<group>"; };
+               0F2B66D317B6B5AB00A7AE3F /* JSUint8ClampedArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSUint8ClampedArray.h; sourceTree = "<group>"; };
+               0F2B66D417B6B5AB00A7AE3F /* JSUint16Array.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSUint16Array.h; sourceTree = "<group>"; };
+               0F2B66D517B6B5AB00A7AE3F /* JSUint32Array.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSUint32Array.h; sourceTree = "<group>"; };
+               0F2B66D617B6B5AB00A7AE3F /* SimpleTypedArrayController.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SimpleTypedArrayController.cpp; sourceTree = "<group>"; };
+               0F2B66D717B6B5AB00A7AE3F /* SimpleTypedArrayController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SimpleTypedArrayController.h; sourceTree = "<group>"; };
+               0F2B66D817B6B5AB00A7AE3F /* TypedArrayAdaptors.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TypedArrayAdaptors.h; sourceTree = "<group>"; };
+               0F2B66D917B6B5AB00A7AE3F /* TypedArrayController.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TypedArrayController.cpp; sourceTree = "<group>"; };
+               0F2B66DA17B6B5AB00A7AE3F /* TypedArrayController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TypedArrayController.h; sourceTree = "<group>"; };
+               0F2B66DB17B6B5AB00A7AE3F /* TypedArrays.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TypedArrays.h; sourceTree = "<group>"; };
+               0F2B66DC17B6B5AB00A7AE3F /* TypedArrayType.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TypedArrayType.cpp; sourceTree = "<group>"; };
+               0F2B66DD17B6B5AB00A7AE3F /* TypedArrayType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TypedArrayType.h; sourceTree = "<group>"; };
                0F2BDC12151C5D4A00CD8910 /* DFGFixupPhase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DFGFixupPhase.cpp; path = dfg/DFGFixupPhase.cpp; sourceTree = "<group>"; };
                0F2BDC13151C5D4A00CD8910 /* DFGFixupPhase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DFGFixupPhase.h; path = dfg/DFGFixupPhase.h; sourceTree = "<group>"; };
                0F2BDC1F151E803800CD8910 /* DFGInsertionSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DFGInsertionSet.h; path = dfg/DFGInsertionSet.h; sourceTree = "<group>"; };
                0F4680D014BBC5F800BFE272 /* HostCallReturnValue.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HostCallReturnValue.cpp; sourceTree = "<group>"; };
                0F4680D114BBC5F800BFE272 /* HostCallReturnValue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HostCallReturnValue.h; sourceTree = "<group>"; };
                0F493AF816D0CAD10084508B /* SourceProvider.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SourceProvider.cpp; sourceTree = "<group>"; };
+               0F4B94DB17B9F07500DD03A4 /* TypedArrayInlines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TypedArrayInlines.h; sourceTree = "<group>"; };
                0F5541AF1613C1FB00CE3E25 /* SpecialPointer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SpecialPointer.cpp; sourceTree = "<group>"; };
                0F5541B01613C1FB00CE3E25 /* SpecialPointer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpecialPointer.h; sourceTree = "<group>"; };
                0F55C19317276E4600CEABFD /* DFGAbstractValue.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DFGAbstractValue.cpp; path = dfg/DFGAbstractValue.cpp; sourceTree = "<group>"; };
                0FEA0A2E170D40BF00BB722C /* DFGCommonData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DFGCommonData.h; path = dfg/DFGCommonData.h; sourceTree = "<group>"; };
                0FEA0A2F170D40BF00BB722C /* DFGJITCode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DFGJITCode.cpp; path = dfg/DFGJITCode.cpp; sourceTree = "<group>"; };
                0FEA0A30170D40BF00BB722C /* DFGJITCode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DFGJITCode.h; path = dfg/DFGJITCode.h; sourceTree = "<group>"; };
-               0FEB3ECB16237F4700AB67AD /* TypedArrayDescriptor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TypedArrayDescriptor.h; sourceTree = "<group>"; };
                0FEB3ECE16237F6700AB67AD /* MacroAssembler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MacroAssembler.cpp; sourceTree = "<group>"; };
                0FEFC9A71681A3B000567F53 /* DFGOSRExitJumpPlaceholder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DFGOSRExitJumpPlaceholder.cpp; path = dfg/DFGOSRExitJumpPlaceholder.cpp; sourceTree = "<group>"; };
                0FEFC9A81681A3B000567F53 /* DFGOSRExitJumpPlaceholder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DFGOSRExitJumpPlaceholder.h; path = dfg/DFGOSRExitJumpPlaceholder.h; sourceTree = "<group>"; };
                A75706DD118A2BCF0057F88F /* JITArithmetic32_64.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JITArithmetic32_64.cpp; sourceTree = "<group>"; };
                A767B5B317A0B9650063D940 /* DFGLoopPreHeaderCreationPhase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DFGLoopPreHeaderCreationPhase.cpp; path = dfg/DFGLoopPreHeaderCreationPhase.cpp; sourceTree = "<group>"; };
                A767B5B417A0B9650063D940 /* DFGLoopPreHeaderCreationPhase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DFGLoopPreHeaderCreationPhase.h; path = dfg/DFGLoopPreHeaderCreationPhase.h; sourceTree = "<group>"; };
-               A767FF9F14F4502900789059 /* JSCTypedArrayStubs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSCTypedArrayStubs.h; sourceTree = "<group>"; };
                A76C51741182748D00715B05 /* JSInterfaceJIT.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSInterfaceJIT.h; sourceTree = "<group>"; };
                A76F54A213B28AAB00EF2BCE /* JITWriteBarrier.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JITWriteBarrier.h; sourceTree = "<group>"; };
                A77A423617A0BBFD00A8DB81 /* DFGAbstractHeap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DFGAbstractHeap.cpp; path = dfg/DFGAbstractHeap.cpp; sourceTree = "<group>"; };
                A7A8AF2B17ADB5F3005AB174 /* Int8Array.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Int8Array.h; sourceTree = "<group>"; };
                A7A8AF2C17ADB5F3005AB174 /* Int16Array.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Int16Array.h; sourceTree = "<group>"; };
                A7A8AF2D17ADB5F3005AB174 /* Int32Array.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Int32Array.h; sourceTree = "<group>"; };
-               A7A8AF2E17ADB5F3005AB174 /* IntegralTypedArrayBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IntegralTypedArrayBase.h; sourceTree = "<group>"; };
-               A7A8AF2F17ADB5F3005AB174 /* TypedArrayBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TypedArrayBase.h; sourceTree = "<group>"; };
                A7A8AF3017ADB5F3005AB174 /* Uint8Array.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Uint8Array.h; sourceTree = "<group>"; };
                A7A8AF3117ADB5F3005AB174 /* Uint8ClampedArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Uint8ClampedArray.h; sourceTree = "<group>"; };
                A7A8AF3217ADB5F3005AB174 /* Uint16Array.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Uint16Array.h; sourceTree = "<group>"; };
                                45E12D8806A49B0F00E9DF84 /* jsc.cpp */,
                                F68EBB8C0255D4C601FF60F7 /* config.h */,
                                F5C290E60284F98E018635CA /* JavaScriptCorePrefix.h */,
-                               A767FF9F14F4502900789059 /* JSCTypedArrayStubs.h */,
                                937B63CC09E766D200A671DD /* DerivedSources.make */,
                                A7C225CC139981F100FF1662 /* KeywordLookupGenerator.py */,
                                1432EBD70A34CAD400717B9F /* API */,
                                0F2C556D14738F2E00121E4F /* DFGCodeBlocks.cpp */,
                                0F2C556E14738F2E00121E4F /* DFGCodeBlocks.h */,
                                BCBE2CAD14E985AA000593AD /* GCAssertions.h */,
+                               0F2B66A817B6B53D00A7AE3F /* GCIncomingRefCounted.h */,
+                               0F2B66A917B6B53D00A7AE3F /* GCIncomingRefCountedInlines.h */,
+                               0F2B66AA17B6B53D00A7AE3F /* GCIncomingRefCountedSet.h */,
+                               0F2B66AB17B6B53D00A7AE3F /* GCIncomingRefCountedSetInlines.h */,
                                C2239D1516262BDD005AC5FD /* GCThread.cpp */,
                                C2239D1616262BDD005AC5FD /* GCThread.h */,
                                C21122DE15DD9AB300790E3A /* GCThreadSharedData.cpp */,
                                0FDB2CE9174896C7007B3C1B /* ConcurrentJITLock.h */,
                                BCA62DFF0E2826310004F30D /* ConstructData.cpp */,
                                BC8F3CCF0DAF17BA00577A80 /* ConstructData.h */,
+                               0F2B66B017B6B5AB00A7AE3F /* DataView.cpp */,
+                               0F2B66B117B6B5AB00A7AE3F /* DataView.h */,
                                BCD203450E17135E002C7E82 /* DateConstructor.cpp */,
                                BCD203460E17135E002C7E82 /* DateConstructor.h */,
                                D21202280AD4310C00ED79B6 /* DateConversion.cpp */,
                                F692A85D0255597D01FF60F7 /* FunctionPrototype.h */,
                                C2D58C3315912FEE0021A844 /* GCActivityCallback.cpp */,
                                DDF7ABD211F60ED200108E36 /* GCActivityCallback.h */,
+                               0F2B66B217B6B5AB00A7AE3F /* GenericTypedArrayView.h */,
+                               0F2B66B317B6B5AB00A7AE3F /* GenericTypedArrayViewInlines.h */,
                                BC02E9B80E184545000F9297 /* GetterSetter.cpp */,
                                BC337BDE0E1AF0B80076918A /* GetterSetter.h */,
                                933A349D038AE80F008635CE /* Identifier.cpp */,
                                A7A8AF2C17ADB5F3005AB174 /* Int16Array.h */,
                                A7A8AF2D17ADB5F3005AB174 /* Int32Array.h */,
                                A7A8AF2B17ADB5F3005AB174 /* Int8Array.h */,
-                               A7A8AF2E17ADB5F3005AB174 /* IntegralTypedArrayBase.h */,
                                A78853F717972629001440E4 /* IntendedStructureChain.cpp */,
                                A78853F817972629001440E4 /* IntendedStructureChain.h */,
                                BC9BB95B0E19680600DF8855 /* InternalFunction.cpp */,
                                14DA818E0D99FD2000B0A4FB /* JSActivation.h */,
                                93ADFCE60CCBD7AC00D30B08 /* JSArray.cpp */,
                                938772E5038BFE19008635CE /* JSArray.h */,
+                               0F2B66B417B6B5AB00A7AE3F /* JSArrayBuffer.cpp */,
+                               0F2B66B517B6B5AB00A7AE3F /* JSArrayBuffer.h */,
+                               0F2B66B617B6B5AB00A7AE3F /* JSArrayBufferConstructor.cpp */,
+                               0F2B66B717B6B5AB00A7AE3F /* JSArrayBufferConstructor.h */,
+                               0F2B66B817B6B5AB00A7AE3F /* JSArrayBufferPrototype.cpp */,
+                               0F2B66B917B6B5AB00A7AE3F /* JSArrayBufferPrototype.h */,
+                               0F2B66BA17B6B5AB00A7AE3F /* JSArrayBufferView.cpp */,
+                               0F2B66BB17B6B5AB00A7AE3F /* JSArrayBufferView.h */,
+                               0F2B66BC17B6B5AB00A7AE3F /* JSArrayBufferViewInlines.h */,
                                86FA9E8F142BBB2D001773B7 /* JSBoundFunction.cpp */,
                                86FA9E90142BBB2E001773B7 /* JSBoundFunction.h */,
                                BC7F8FBA0E19D1EF008632C0 /* JSCell.cpp */,
                                F692A8870255597D01FF60F7 /* JSCJSValue.cpp */,
                                14ABB36E099C076400E2A24F /* JSCJSValue.h */,
                                865A30F0135007E100CDB49E /* JSCJSValueInlines.h */,
+                               0F2B66BD17B6B5AB00A7AE3F /* JSDataView.cpp */,
+                               0F2B66BE17B6B5AB00A7AE3F /* JSDataView.h */,
+                               0F2B66BF17B6B5AB00A7AE3F /* JSDataViewPrototype.cpp */,
+                               0F2B66C017B6B5AB00A7AE3F /* JSDataViewPrototype.h */,
                                9788FC221471AD0C0068CE2D /* JSDateMath.cpp */,
                                9788FC231471AD0C0068CE2D /* JSDateMath.h */,
                                C2A7F687160432D400F76B98 /* JSDestructibleObject.h */,
                                A7B4ACAE1484C9CE00B38A36 /* JSExportMacros.h */,
+                               0F2B66C117B6B5AB00A7AE3F /* JSFloat32Array.h */,
+                               0F2B66C217B6B5AB00A7AE3F /* JSFloat64Array.h */,
                                F692A85E0255597D01FF60F7 /* JSFunction.cpp */,
                                F692A85F0255597D01FF60F7 /* JSFunction.h */,
                                A72028B91797603D0098028C /* JSFunctionInlines.h */,
+                               0F2B66C317B6B5AB00A7AE3F /* JSGenericTypedArrayView.h */,
+                               0F2B66C417B6B5AB00A7AE3F /* JSGenericTypedArrayViewConstructor.h */,
+                               0F2B66C517B6B5AB00A7AE3F /* JSGenericTypedArrayViewConstructorInlines.h */,
+                               0F2B66C617B6B5AB00A7AE3F /* JSGenericTypedArrayViewInlines.h */,
+                               0F2B66C717B6B5AB00A7AE3F /* JSGenericTypedArrayViewPrototype.h */,
+                               0F2B66C817B6B5AB00A7AE3F /* JSGenericTypedArrayViewPrototypeInlines.h */,
                                14DE0D680D02431400AACCA2 /* JSGlobalObject.cpp */,
                                A8E894330CD0603F00367179 /* JSGlobalObject.h */,
                                BC756FC60E2031B200DE7D12 /* JSGlobalObjectFunctions.cpp */,
                                BC756FC70E2031B200DE7D12 /* JSGlobalObjectFunctions.h */,
+                               0F2B66CA17B6B5AB00A7AE3F /* JSInt16Array.h */,
+                               0F2B66CB17B6B5AB00A7AE3F /* JSInt32Array.h */,
+                               0F2B66C917B6B5AB00A7AE3F /* JSInt8Array.h */,
                                65EA4C99092AF9E20093D800 /* JSLock.cpp */,
                                65EA4C9A092AF9E20093D800 /* JSLock.h */,
                                14874ADF15EBDE4A002E3587 /* JSNameScope.cpp */,
                                0F919D09157EE09D004A4E7D /* JSSymbolTableObject.cpp */,
                                0F919D0A157EE09D004A4E7D /* JSSymbolTableObject.h */,
                                14ABB454099C2A0F00E2A24F /* JSType.h */,
+                               0F2B66CC17B6B5AB00A7AE3F /* JSTypedArrayConstructors.cpp */,
+                               0F2B66CD17B6B5AB00A7AE3F /* JSTypedArrayConstructors.h */,
+                               0F2B66CE17B6B5AB00A7AE3F /* JSTypedArrayPrototypes.cpp */,
+                               0F2B66CF17B6B5AB00A7AE3F /* JSTypedArrayPrototypes.h */,
+                               0F2B66D017B6B5AB00A7AE3F /* JSTypedArrays.cpp */,
+                               0F2B66D117B6B5AB00A7AE3F /* JSTypedArrays.h */,
                                6507D2970E871E4A00D7D896 /* JSTypeInfo.h */,
+                               0F2B66D417B6B5AB00A7AE3F /* JSUint16Array.h */,
+                               0F2B66D517B6B5AB00A7AE3F /* JSUint32Array.h */,
+                               0F2B66D217B6B5AB00A7AE3F /* JSUint8Array.h */,
+                               0F2B66D317B6B5AB00A7AE3F /* JSUint8ClampedArray.h */,
                                BC22A39A0E16E14800AF21C8 /* JSVariableObject.cpp */,
                                14F252560D08DD8D004ECFFF /* JSVariableObject.h */,
                                1442565F15EDE98D0066A49B /* JSWithScope.cpp */,
                                0FB7F39115ED8E3800F167B2 /* Reject.h */,
                                0F7700911402FF280078EB39 /* SamplingCounter.cpp */,
                                0F77008E1402FDD60078EB39 /* SamplingCounter.h */,
+                               0F2B66D617B6B5AB00A7AE3F /* SimpleTypedArrayController.cpp */,
+                               0F2B66D717B6B5AB00A7AE3F /* SimpleTypedArrayController.h */,
                                93303FE80E6A72B500786E6A /* SmallStrings.cpp */,
                                93303FEA0E6A72C000786E6A /* SmallStrings.h */,
                                0F0CD4C315F6B6B50032F1C0 /* SparseArrayValueMap.cpp */,
                                14A396A60CD2933100B5B4FF /* SymbolTable.h */,
                                5D53726D0E1C546B0021E549 /* Tracing.d */,
                                5D53726E0E1C54880021E549 /* Tracing.h */,
-                               A7A8AF2F17ADB5F3005AB174 /* TypedArrayBase.h */,
-                               0FEB3ECB16237F4700AB67AD /* TypedArrayDescriptor.h */,
+                               0F2B66D817B6B5AB00A7AE3F /* TypedArrayAdaptors.h */,
+                               0F2B66D917B6B5AB00A7AE3F /* TypedArrayController.cpp */,
+                               0F2B66DA17B6B5AB00A7AE3F /* TypedArrayController.h */,
+                               0F4B94DB17B9F07500DD03A4 /* TypedArrayInlines.h */,
+                               0F2B66DB17B6B5AB00A7AE3F /* TypedArrays.h */,
+                               0F2B66DC17B6B5AB00A7AE3F /* TypedArrayType.cpp */,
+                               0F2B66DD17B6B5AB00A7AE3F /* TypedArrayType.h */,
                                A7A8AF3217ADB5F3005AB174 /* Uint16Array.h */,
                                866739D113BFDE710023D87C /* Uint16WithFraction.h */,
                                A7A8AF3317ADB5F3005AB174 /* Uint32Array.h */,
                                BC18C5240E16FC8A00B34460 /* ArrayPrototype.lut.h in Headers */,
                                0FB7F39615ED8E4600F167B2 /* ArrayStorage.h in Headers */,
                                9688CB150ED12B4E001D649F /* AssemblerBuffer.h in Headers */,
+                               0F2B66DF17B6B5AB00A7AE3F /* DataView.h in Headers */,
+                               0F2B66AC17B6B53F00A7AE3F /* GCIncomingRefCounted.h in Headers */,
                                86D3B2C510156BDE002865E7 /* AssemblerBufferWithConstantPool.h in Headers */,
                                A784A26111D16622005776AC /* ASTBuilder.h in Headers */,
                                147B83AC0E6DB8C9004775A4 /* BatchedTransitionOptimizer.h in Headers */,
                                866739D213BFDE710023D87C /* BigInteger.h in Headers */,
                                14816E1C154CC56C00B8054C /* BlockAllocator.h in Headers */,
                                BC18C3EC0E16F5CD00B34460 /* BooleanObject.h in Headers */,
+                               0F2B670B17B6B5AB00A7AE3F /* TypedArrayType.h in Headers */,
                                0FB7F39715ED8E4600F167B2 /* Butterfly.h in Headers */,
                                0FB7F39815ED8E4600F167B2 /* ButterflyInlines.h in Headers */,
                                0F21C27F14BEAA8200ADC64B /* BytecodeConventions.h in Headers */,
                                A7C1EAEF17987AB600299DB2 /* CallFrameInlines.h in Headers */,
                                95E3BC050E1AE68200B2D1C1 /* CallIdentifier.h in Headers */,
                                0F0B83B114BCF71800885B4F /* CallLinkInfo.h in Headers */,
+                               0F2B66F517B6B5AB00A7AE3F /* JSGenericTypedArrayViewPrototype.h in Headers */,
                                0F93329E14CA7DC50085F3C6 /* CallLinkStatus.h in Headers */,
                                0F0B83B914BCF95F00885B4F /* CallReturnOffsetToBytecodeOffset.h in Headers */,
                                BC6AAAE50E1F426500AD87D8 /* ClassInfo.h in Headers */,
                                86E116B10FE75AC800B512BC /* CodeLocation.h in Headers */,
                                0FBD7E691447999600481315 /* CodeOrigin.h in Headers */,
                                0F21C27D14BE727A00ADC64B /* CodeSpecializationKind.h in Headers */,
+                               0F2B66F417B6B5AB00A7AE3F /* JSGenericTypedArrayViewInlines.h in Headers */,
                                0F0B83A714BCF50700885B4F /* CodeType.h in Headers */,
                                BC18C3F30E16F5CD00B34460 /* CommonIdentifiers.h in Headers */,
                                0F15F15F14B7A73E005DE37D /* CommonSlowPaths.h in Headers */,
                                0FDB2CEA174896C7007B3C1B /* ConcurrentJITLock.h in Headers */,
                                BC18C3F50E16F5CD00B34460 /* config.h in Headers */,
                                144836E7132DA7BE005BE785 /* ConservativeRoots.h in Headers */,
+                               0F2B66F317B6B5AB00A7AE3F /* JSGenericTypedArrayViewConstructorInlines.h in Headers */,
                                BC18C3F60E16F5CD00B34460 /* ConstructData.h in Headers */,
                                C2EAD2FC14F0249800A4B159 /* CopiedAllocator.h in Headers */,
                                C2C8D03014A3CEFC00578E65 /* CopiedBlock.h in Headers */,
                                0F66E16B14DF3F1600B7B2E4 /* DFGAdjacencyList.h in Headers */,
                                0FFB921816D02EB20055A5DB /* DFGAllocator.h in Headers */,
                                A737810C1799EA2E00817533 /* DFGAnalysis.h in Headers */,
+                               0F2B66E117B6B5AB00A7AE3F /* GenericTypedArrayViewInlines.h in Headers */,
                                0F1E3A461534CBAF000F9456 /* DFGArgumentPosition.h in Headers */,
                                0F16015E156198C900C2587C /* DFGArgumentsSimplificationPhase.h in Headers */,
                                0F05C3B41683CF9200BAF45B /* DFGArrayifySlowPathGenerator.h in Headers */,
                                A7D89CF417A0B8CC00773AD8 /* DFGBlockInsertionSet.h in Headers */,
                                0F8364B7164B0C110053329A /* DFGBranchDirection.h in Headers */,
                                86EC9DC51328DF82002B2AD7 /* DFGByteCodeParser.h in Headers */,
+                               0F2B66E317B6B5AB00A7AE3F /* JSArrayBuffer.h in Headers */,
                                0F256C361627B0AD007F2783 /* DFGCallArrayAllocatorSlowPathGenerator.h in Headers */,
                                0F7B294B14C3CD2F007C3DB1 /* DFGCapabilities.h in Headers */,
                                0F7B294A14C3CD29007C3DB1 /* DFGCCallHelpers.h in Headers */,
                                A7D89CF817A0B8CC00773AD8 /* DFGFlushFormat.h in Headers */,
                                A7D89CFA17A0B8CC00773AD8 /* DFGFlushLivenessAnalysisPhase.h in Headers */,
                                86AE6C4D136A11E400963012 /* DFGFPRInfo.h in Headers */,
+                               0F2B66F817B6B5AB00A7AE3F /* JSInt16Array.h in Headers */,
                                86EC9DC61328DF82002B2AD7 /* DFGGenerationInfo.h in Headers */,
                                86AE6C4E136A11E400963012 /* DFGGPRInfo.h in Headers */,
                                86EC9DC81328DF82002B2AD7 /* DFGGraph.h in Headers */,
                                0FEA0A34170D40BF00BB722C /* DFGJITCode.h in Headers */,
                                86EC9DCC1328DF82002B2AD7 /* DFGJITCompiler.h in Headers */,
                                A78A9779179738B8009DF744 /* DFGJITFinalizer.h in Headers */,
+                               0F2B66EF17B6B5AB00A7AE3F /* JSFloat32Array.h in Headers */,
                                A73A535B1799CD5D00170C19 /* DFGLazyJSValue.h in Headers */,
                                A7D9A29817A0BC7400EE2618 /* DFGLICMPhase.h in Headers */,
                                A7D89CFC17A0B8CC00773AD8 /* DFGLivenessAnalysisPhase.h in Headers */,
                                86ECA3EA132DEF1C002B2AD7 /* DFGNode.h in Headers */,
                                0FFB921B16D02F010055A5DB /* DFGNodeAllocator.h in Headers */,
                                0FA581BB150E953000B9A2D9 /* DFGNodeFlags.h in Headers */,
+                               0F2B66AD17B6B54500A7AE3F /* GCIncomingRefCountedInlines.h in Headers */,
                                0FA581BC150E953000B9A2D9 /* DFGNodeType.h in Headers */,
                                86EC9DD01328DF82002B2AD7 /* DFGOperations.h in Headers */,
                                A7D89CFE17A0B8CC00773AD8 /* DFGOSRAvailabilityAnalysisPhase.h in Headers */,
                                0F235BEE17178E7300690C7F /* DFGOSRExitPreparation.h in Headers */,
                                0FFFC95C14EF90AF00C72532 /* DFGPhase.h in Headers */,
                                A78A977B179738B8009DF744 /* DFGPlan.h in Headers */,
+                               0F2B66F717B6B5AB00A7AE3F /* JSInt8Array.h in Headers */,
+                               0F2B66EA17B6B5AB00A7AE3F /* JSArrayBufferViewInlines.h in Headers */,
                                0FBE0F7516C1DB0B0082C5E8 /* DFGPredictionInjectionPhase.h in Headers */,
                                0FFFC95E14EF90B700C72532 /* DFGPredictionPropagationPhase.h in Headers */,
                                86EC9DD11328DF82002B2AD7 /* DFGRegisterBank.h in Headers */,
                                A741017F179DAF80002EB8BA /* DFGSaneStringGetByValSlowPathGenerator.h in Headers */,
                                86ECA3FA132DF25A002B2AD7 /* DFGScoreBoard.h in Headers */,
                                0F766D4615B3701F008F363E /* DFGScratchRegisterAllocator.h in Headers */,
+                               0F2B66E017B6B5AB00A7AE3F /* GenericTypedArrayView.h in Headers */,
                                0F1E3A67153A21E2000F9456 /* DFGSilentRegisterSavePlan.h in Headers */,
                                0FFB921D16D02F300055A5DB /* DFGSlowPathGenerator.h in Headers */,
                                86EC9DD31328DF82002B2AD7 /* DFGSpeculativeJIT.h in Headers */,
                                0F21C27C14BE727600ADC64B /* ExecutionHarness.h in Headers */,
                                0FB105861675481200F8AB6E /* ExitKind.h in Headers */,
                                0F0B83AB14BCF5BB00885B4F /* ExpressionRangeInfo.h in Headers */,
+                               0F2B66F117B6B5AB00A7AE3F /* JSGenericTypedArrayView.h in Headers */,
                                A7A8AF3817ADB5F3005AB174 /* Float32Array.h in Headers */,
                                A7A8AF3917ADB5F3005AB174 /* Float64Array.h in Headers */,
                                0FDB2CC9173DA520007B3C1B /* FTLAbbreviatedTypes.h in Headers */,
                                0FEA0A2C170B661900BB722C /* FTLFormattedValue.h in Headers */,
                                A78A977F179738D5009DF744 /* FTLGeneratedFunction.h in Headers */,
                                0FEA0A241709606900BB722C /* FTLIntrinsicRepository.h in Headers */,
+                               0F2B670817B6B5AB00A7AE3F /* TypedArrayController.h in Headers */,
                                0FEA0A0E170513DB00BB722C /* FTLJITCode.h in Headers */,
                                A78A9781179738D5009DF744 /* FTLJITFinalizer.h in Headers */,
                                0F8F2B96172E04A3007DBDA5 /* FTLLink.h in Headers */,
                                A7A8AF3B17ADB5F3005AB174 /* Int16Array.h in Headers */,
                                A7A8AF3C17ADB5F3005AB174 /* Int32Array.h in Headers */,
                                A7A8AF3A17ADB5F3005AB174 /* Int8Array.h in Headers */,
-                               A7A8AF3D17ADB5F3005AB174 /* IntegralTypedArrayBase.h in Headers */,
                                A78853FA17972629001440E4 /* IntendedStructureChain.h in Headers */,
                                BC11667B0E199C05008066DD /* InternalFunction.h in Headers */,
                                1429D77C0ED20D7300B89619 /* Interpreter.h in Headers */,
                                0F766D3115AA8112008F363E /* JITStubRoutine.h in Headers */,
                                0F766D2C15A8CC3A008F363E /* JITStubRoutineSet.h in Headers */,
                                14C5242B0F5355E900BA3D04 /* JITStubs.h in Headers */,
+                               0F2B66FF17B6B5AB00A7AE3F /* JSTypedArrays.h in Headers */,
                                FEF6835E174343CC00A32E25 /* JITStubsARM.h in Headers */,
                                FEF6835F174343CC00A32E25 /* JITStubsARMv7.h in Headers */,
                                A7A4AE0D17973B4D005612B1 /* JITStubsMIPS.h in Headers */,
                                BC18C41D0E16F5CD00B34460 /* JSClassRef.h in Headers */,
                                86E3C613167BABD7006D760A /* JSContext.h in Headers */,
                                86E3C617167BABEE006D760A /* JSContextInternal.h in Headers */,
+                               0F2B670617B6B5AB00A7AE3F /* TypedArrayAdaptors.h in Headers */,
                                BC18C41E0E16F5CD00B34460 /* JSContextRef.h in Headers */,
                                148CD1D8108CF902008163C6 /* JSContextRefPrivate.h in Headers */,
                                A72028B81797601E0098028C /* JSCTestRunnerUtils.h in Headers */,
                                BC18C4230E16F5CD00B34460 /* JSLock.h in Headers */,
                                C25D709C16DE99F400FCA6BC /* JSManagedValue.h in Headers */,
                                14874AE415EBDE4A002E3587 /* JSNameScope.h in Headers */,
+                               0F2B66E917B6B5AB00A7AE3F /* JSArrayBufferView.h in Headers */,
                                BC18C4240E16F5CD00B34460 /* JSObject.h in Headers */,
                                BC18C4250E16F5CD00B34460 /* JSObjectRef.h in Headers */,
                                A7280A2811557E3000D56957 /* JSObjectRefPrivate.h in Headers */,
                                14874AE615EBDE4A002E3587 /* JSScope.h in Headers */,
                                A7C0C4AC168103020017011D /* JSScriptRefPrivate.h in Headers */,
                                0F919D11157F332C004A4E7D /* JSSegmentedVariableObject.h in Headers */,
+                               0F2B66F617B6B5AB00A7AE3F /* JSGenericTypedArrayViewPrototypeInlines.h in Headers */,
                                BC18C45E0E16F5CD00B34460 /* JSStack.h in Headers */,
                                A7C1EAF017987AB600299DB2 /* JSStackInlines.h in Headers */,
                                BC18C4270E16F5CD00B34460 /* JSString.h in Headers */,
                                86E3C615167BABD7006D760A /* JSVirtualMachine.h in Headers */,
                                86E3C61D167BABEE006D760A /* JSVirtualMachineInternal.h in Headers */,
                                A7482E93116A7CAD003B0712 /* JSWeakObjectMapRefInternal.h in Headers */,
+                               0F2B670017B6B5AB00A7AE3F /* JSUint8Array.h in Headers */,
                                A7482B9311671147003B0712 /* JSWeakObjectMapRefPrivate.h in Headers */,
                                1442566215EDE98D0066A49B /* JSWithScope.h in Headers */,
                                86E3C619167BABEE006D760A /* JSWrapperMap.h in Headers */,
                                A7E5AB381799E4B200D2833D /* LLVMDisassembler.h in Headers */,
                                142E3139134FF0A600AFADB5 /* Local.h in Headers */,
                                142E313A134FF0A600AFADB5 /* LocalScope.h in Headers */,
+                               0F2B66FB17B6B5AB00A7AE3F /* JSTypedArrayConstructors.h in Headers */,
                                BC18C4370E16F5CD00B34460 /* Lookup.h in Headers */,
                                0F4680CD14BBB17D00BFE272 /* LowLevelInterpreter.h in Headers */,
                                14B723B812D7DA6F003BD5ED /* MachineStackMarker.h in Headers */,
                                860161E40F3A83C100F84710 /* MacroAssemblerX86.h in Headers */,
                                860161E50F3A83C100F84710 /* MacroAssemblerX86_64.h in Headers */,
                                860161E60F3A83C100F84710 /* MacroAssemblerX86Common.h in Headers */,
+                               0F2B670217B6B5AB00A7AE3F /* JSUint16Array.h in Headers */,
                                C2B916C214DA014E00CBAC86 /* MarkedAllocator.h in Headers */,
                                142D6F0913539A2800B02E86 /* MarkedBlock.h in Headers */,
                                141448CB13A176EC00F5BA1A /* MarkedBlockSet.h in Headers */,
                                C21122E315DD9AB300790E3A /* MarkStackInlines.h in Headers */,
                                8612E4CD152389EC00C836BE /* MatchResult.h in Headers */,
                                BC18C43C0E16F5CD00B34460 /* MathObject.h in Headers */,
+                               0F2B66EE17B6B5AB00A7AE3F /* JSDataViewPrototype.h in Headers */,
                                BC18C52A0E16FCC200B34460 /* MathObject.lut.h in Headers */,
                                90213E3E123A40C200D422F3 /* MemoryStatistics.h in Headers */,
+                               0F2B66F917B6B5AB00A7AE3F /* JSInt32Array.h in Headers */,
                                0FB5467B14F5C7E1002C2989 /* MethodOfGettingAValueProfile.h in Headers */,
                                86C568E211A213EE0007F7F0 /* MIPSAssembler.h in Headers */,
                                86EBF3001560F06A008E9222 /* NameConstructor.h in Headers */,
                                86EBF3021560F06A008E9222 /* NameInstance.h in Headers */,
                                86EBF3041560F06A008E9222 /* NamePrototype.h in Headers */,
                                BC02E9110E1839DB000F9297 /* NativeErrorConstructor.h in Headers */,
+                               0F2B670917B6B5AB00A7AE3F /* TypedArrays.h in Headers */,
                                BC02E9130E1839DB000F9297 /* NativeErrorPrototype.h in Headers */,
                                0FFB922016D033B70055A5DB /* NodeConstructors.h in Headers */,
                                7EFF00640EC05A9A00AA7C93 /* NodeInfo.h in Headers */,
                                0F34B14C16D43E0D001CDA5A /* PolymorphicAccessStructureList.h in Headers */,
                                0F9FC8C414E1B60000D52AE0 /* PolymorphicPutByIdList.h in Headers */,
                                0F98206116BFE38300240D02 /* PreciseJumpTargets.h in Headers */,
+                               0F2B66E517B6B5AB00A7AE3F /* JSArrayBufferConstructor.h in Headers */,
                                868916B0155F286300CB2B9A /* PrivateName.h in Headers */,
                                BC18C4500E16F5CD00B34460 /* Profile.h in Headers */,
                                95CD45770E1C4FDD0085358E /* ProfileGenerator.h in Headers */,
                                1474C33B16AA2D950062F01D /* PrototypeMap.h in Headers */,
                                0F9332A414CA7DD90085F3C6 /* PutByIdStatus.h in Headers */,
                                0F0CD4C215F1A6070032F1C0 /* PutDirectIndexMode.h in Headers */,
+                               0F2B66F217B6B5AB00A7AE3F /* JSGenericTypedArrayViewConstructor.h in Headers */,
                                0F9FC8C514E1B60400D52AE0 /* PutKind.h in Headers */,
                                147B84630E6DE6B1004775A4 /* PutPropertySlot.h in Headers */,
                                0FF60AC216740F8300029779 /* ReduceWhitespace.h in Headers */,
+                               0F2B670517B6B5AB00A7AE3F /* SimpleTypedArrayController.h in Headers */,
                                BC18C45A0E16F5CD00B34460 /* RegExp.h in Headers */,
                                A1712B3F11C7B228007A5315 /* RegExpCache.h in Headers */,
                                BCD202C20E1706A7002C7E82 /* RegExpConstructor.h in Headers */,
                                A709F2F017A0AC0400512E98 /* SlowPathCall.h in Headers */,
                                933040040E6A749400786E6A /* SmallStrings.h in Headers */,
                                BC18C4640E16F5CD00B34460 /* SourceCode.h in Headers */,
+                               0F2B66EC17B6B5AB00A7AE3F /* JSDataView.h in Headers */,
                                BC18C4630E16F5CD00B34460 /* SourceProvider.h in Headers */,
                                E49DC16C12EF294E00184A1F /* SourceProviderCache.h in Headers */,
                                E49DC16D12EF295300184A1F /* SourceProviderCacheItem.h in Headers */,
                                14DF04DA16B3996D0016A513 /* StaticPropertyAnalysis.h in Headers */,
                                14CA958B16AB50DE00938A06 /* StaticPropertyAnalyzer.h in Headers */,
                                A730B6121250068F009D25B1 /* StrictEvalActivation.h in Headers */,
+                               0F2B66F017B6B5AB00A7AE3F /* JSFloat64Array.h in Headers */,
                                BC18C4660E16F5CD00B34460 /* StringConstructor.h in Headers */,
+                               0F2B66FD17B6B5AB00A7AE3F /* JSTypedArrayPrototypes.h in Headers */,
                                BC18C4680E16F5CD00B34460 /* StringObject.h in Headers */,
                                BC18C46A0E16F5CD00B34460 /* StringPrototype.h in Headers */,
                                BC18C5260E16FCA700B34460 /* StringPrototype.lut.h in Headers */,
                                C2FE18A416BAEC4000AF3061 /* StructureRareData.h in Headers */,
                                C20BA92D16BB1C1500B3AEA2 /* StructureRareDataInlines.h in Headers */,
                                0F9332A514CA7DDD0085F3C6 /* StructureSet.h in Headers */,
+                               0F2B66AF17B6B54500A7AE3F /* GCIncomingRefCountedSetInlines.h in Headers */,
+                               0F2B670117B6B5AB00A7AE3F /* JSUint8ClampedArray.h in Headers */,
                                0F766D3915AE4A1F008F363E /* StructureStubClearingWatchpoint.h in Headers */,
                                BCCF0D080EF0AAB900413C8F /* StructureStubInfo.h in Headers */,
                                BC9041480EB9250900FE26FA /* StructureTransitionTable.h in Headers */,
                                0F572D4F16879FDD00E57FBD /* ThunkGenerator.h in Headers */,
                                A7386556118697B400540279 /* ThunkGenerators.h in Headers */,
                                141448CD13A1783700F5BA1A /* TinyBloomFilter.h in Headers */,
+                               0F2B670317B6B5AB00A7AE3F /* JSUint32Array.h in Headers */,
+                               0F2B66AE17B6B54500A7AE3F /* GCIncomingRefCountedSet.h in Headers */,
                                5D53726F0E1C54880021E549 /* Tracing.h in Headers */,
-                               A7A8AF3E17ADB5F3005AB174 /* TypedArrayBase.h in Headers */,
-                               0FEB3ECD16237F4D00AB67AD /* TypedArrayDescriptor.h in Headers */,
+                               0F2B66E717B6B5AB00A7AE3F /* JSArrayBufferPrototype.h in Headers */,
                                0FF4274B158EBE91004CB9FF /* udis86.h in Headers */,
                                0FF42741158EBE8D004CB9FF /* udis86_decode.h in Headers */,
                                0FF42742158EBE91004CB9FF /* udis86_extern.h in Headers */,
                                86704B8812DBA33700A9FE7B /* YarrParser.h in Headers */,
                                86704B8A12DBA33700A9FE7B /* YarrPattern.h in Headers */,
                                86704B4312DB8A8100A9FE7B /* YarrSyntaxChecker.h in Headers */,
+                               0F4B94DC17B9F07500DD03A4 /* TypedArrayInlines.h in Headers */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                                147F39C6107EC37600427A48 /* DatePrototype.cpp in Sources */,
                                14280823107EC02C0013E7B2 /* Debugger.cpp in Sources */,
                                BC3135650F302FA3003DFD3A /* DebuggerActivation.cpp in Sources */,
+                               0F2B670417B6B5AB00A7AE3F /* SimpleTypedArrayController.cpp in Sources */,
                                149559EE0DDCDDF700648087 /* DebuggerCallFrame.cpp in Sources */,
                                A77A423D17A0BBFD00A8DB81 /* DFGAbstractHeap.cpp in Sources */,
                                0F55C19417276E4600CEABFD /* DFGAbstractValue.cpp in Sources */,
                                A7D89CF517A0B8CC00773AD8 /* DFGCriticalEdgeBreakingPhase.cpp in Sources */,
                                0FFFC95914EF90A600C72532 /* DFGCSEPhase.cpp in Sources */,
                                0F2FC77216E12F710038D976 /* DFGDCEPhase.cpp in Sources */,
+                               0F2B66FE17B6B5AB00A7AE3F /* JSTypedArrays.cpp in Sources */,
                                0F8F2B99172F04FF007DBDA5 /* DFGDesiredIdentifiers.cpp in Sources */,
                                A73E1330179624CD00E4DEA8 /* DFGDesiredStructureChains.cpp in Sources */,
                                0FE8534B1723CDA500B618F5 /* DFGDesiredWatchpoints.cpp in Sources */,
                                0FA581BA150E952C00B9A2D9 /* DFGNodeFlags.cpp in Sources */,
                                86EC9DCF1328DF82002B2AD7 /* DFGOperations.cpp in Sources */,
                                A7D89CFD17A0B8CC00773AD8 /* DFGOSRAvailabilityAnalysisPhase.cpp in Sources */,
+                               0F2B66FC17B6B5AB00A7AE3F /* JSTypedArrayPrototypes.cpp in Sources */,
                                0FD82E56141DAF0800179C94 /* DFGOSREntry.cpp in Sources */,
                                0FC09791146A6F7100CF2442 /* DFGOSRExit.cpp in Sources */,
                                0F235BEB17178E7300690C7F /* DFGOSRExitBase.cpp in Sources */,
                                C21122E115DD9AB300790E3A /* GCThreadSharedData.cpp in Sources */,
                                0F93329F14CA7DCA0085F3C6 /* GetByIdStatus.cpp in Sources */,
                                14280855107EC0E70013E7B2 /* GetterSetter.cpp in Sources */,
+                               0F2B66E217B6B5AB00A7AE3F /* JSArrayBuffer.cpp in Sources */,
                                142E3135134FF0A600AFADB5 /* HandleSet.cpp in Sources */,
                                142E3137134FF0A600AFADB5 /* HandleStack.cpp in Sources */,
                                14BA7A9713AADFF8005B7C2C /* Heap.cpp in Sources */,
                                C25D709B16DE99F400FCA6BC /* JSManagedValue.mm in Sources */,
                                14874AE315EBDE4A002E3587 /* JSNameScope.cpp in Sources */,
                                A72700900DAC6BBC00E548D7 /* JSNotAnObject.cpp in Sources */,
+                               0F2B66FA17B6B5AB00A7AE3F /* JSTypedArrayConstructors.cpp in Sources */,
                                147F39D4107EC37600427A48 /* JSObject.cpp in Sources */,
                                1482B7E40A43076000517CFC /* JSObjectRef.cpp in Sources */,
                                A7F993600FD7325100A0B2D0 /* JSONObject.cpp in Sources */,
                                95F6E6950E5B5F970091E860 /* JSProfilerPrivate.cpp in Sources */,
                                A727FF6B0DA3092200E548D7 /* JSPropertyNameIterator.cpp in Sources */,
+                               0F2B66DE17B6B5AB00A7AE3F /* DataView.cpp in Sources */,
                                862553D116136DA9009F17D0 /* JSProxy.cpp in Sources */,
                                14874AE515EBDE4A002E3587 /* JSScope.cpp in Sources */,
                                A7C0C4AD1681067E0017011D /* JSScriptRef.cpp in Sources */,
                                A7482B9411671147003B0712 /* JSWeakObjectMapRefPrivate.cpp in Sources */,
                                1442566115EDE98D0066A49B /* JSWithScope.cpp in Sources */,
                                86E3C618167BABEE006D760A /* JSWrapperMap.mm in Sources */,
+                               0F2B66E417B6B5AB00A7AE3F /* JSArrayBufferConstructor.cpp in Sources */,
                                14280870107EC1340013E7B2 /* JSWrapperObject.cpp in Sources */,
                                0F766D3415AE2538008F363E /* JumpReplacementWatchpoint.cpp in Sources */,
                                BCFD8C920EEB2EE700283848 /* JumpTable.cpp in Sources */,
                                86C568E011A213EE0007F7F0 /* MacroAssemblerARM.cpp in Sources */,
                                A729009C17976C6000317298 /* MacroAssemblerARMv7.cpp in Sources */,
                                A7A4AE0817973B26005612B1 /* MacroAssemblerX86Common.cpp in Sources */,
+                               0F2B66ED17B6B5AB00A7AE3F /* JSDataViewPrototype.cpp in Sources */,
                                C2B916C514DA040C00CBAC86 /* MarkedAllocator.cpp in Sources */,
                                142D6F0813539A2800B02E86 /* MarkedBlock.cpp in Sources */,
                                14D2F3DA139F4BE200491031 /* MarkedSpace.cpp in Sources */,
                                1474C33C16AA2D9B0062F01D /* PrototypeMap.cpp in Sources */,
                                0F9332A314CA7DD70085F3C6 /* PutByIdStatus.cpp in Sources */,
                                0FF60AC316740F8800029779 /* ReduceWhitespace.cpp in Sources */,
+                               0F2B66EB17B6B5AB00A7AE3F /* JSDataView.cpp in Sources */,
                                14280841107EC0930013E7B2 /* RegExp.cpp in Sources */,
                                A1712B3B11C7B212007A5315 /* RegExpCache.cpp in Sources */,
                                8642C510151C06A90046D4EF /* RegExpCachedResult.cpp in Sources */,
                                14280842107EC0930013E7B2 /* RegExpConstructor.cpp in Sources */,
+                               0F2B66E617B6B5AB00A7AE3F /* JSArrayBufferPrototype.cpp in Sources */,
                                8642C512151C083D0046D4EF /* RegExpMatchesArray.cpp in Sources */,
                                14280843107EC0930013E7B2 /* RegExpObject.cpp in Sources */,
                                14280844107EC0930013E7B2 /* RegExpPrototype.cpp in Sources */,
                                0F7700921402FF3C0078EB39 /* SamplingCounter.cpp in Sources */,
+                               0F2B66E817B6B5AB00A7AE3F /* JSArrayBufferView.cpp in Sources */,
                                1429D8850ED21C3D00B89619 /* SamplingTool.cpp in Sources */,
                                C225494315F7DBAA0065E898 /* SlotVisitor.cpp in Sources */,
                                9330402C0E6A764000786E6A /* SmallStrings.cpp in Sources */,
+                               0F2B670717B6B5AB00A7AE3F /* TypedArrayController.cpp in Sources */,
                                0F8F2B9E17306C8D007DBDA5 /* SourceCode.cpp in Sources */,
                                0F493AFA16D0CAD30084508B /* SourceProvider.cpp in Sources */,
                                E49DC16B12EF293E00184A1F /* SourceProviderCache.cpp in Sources */,
                                E18E3A590DF9278C00D90B34 /* VM.cpp in Sources */,
                                FE4A331F15BD2E07006F54F3 /* VMInspector.cpp in Sources */,
                                0FC81516140511B500CFA603 /* VTableSpectrum.cpp in Sources */,
+                               0F2B670A17B6B5AB00A7AE3F /* TypedArrayType.cpp in Sources */,
                                FED94F2E171E3E2300BE77A4 /* Watchdog.cpp in Sources */,
                                FED94F30171E3E2300BE77A4 /* WatchdogMac.cpp in Sources */,
                                0F919D2515853CE0004A4E7D /* Watchpoint.cpp in Sources */,
index 7135fc1..c761a31 100644 (file)
@@ -259,10 +259,10 @@ SOURCES += \
     profiler/ProfileGenerator.cpp \
     profiler/ProfileNode.cpp \
     profiler/LegacyProfiler.cpp \
-    runtime/ArrayBuffer.cpp \
-    runtime/ArrayBufferView.cpp \
     runtime/ArgList.cpp \
     runtime/Arguments.cpp \
+    runtime/ArrayBuffer.cpp \
+    runtime/ArrayBufferView.cpp \
     runtime/ArrayConstructor.cpp \
     runtime/ArrayPrototype.cpp \
     runtime/BooleanConstructor.cpp \
@@ -277,13 +277,14 @@ SOURCES += \
     runtime/CompilationResult.cpp \
     runtime/Completion.cpp \
     runtime/ConstructData.cpp \
+    runtime/DataView.cpp \
     runtime/DateConstructor.cpp \
     runtime/DateConversion.cpp \
     runtime/DateInstance.cpp \
     runtime/DatePrototype.cpp \
     runtime/DumpContext.cpp \
-    runtime/ErrorConstructor.cpp \
     runtime/Error.cpp \
+    runtime/ErrorConstructor.cpp \
     runtime/ErrorInstance.cpp \
     runtime/ErrorPrototype.cpp \
     runtime/ExceptionHelpers.cpp \
@@ -293,37 +294,44 @@ SOURCES += \
     runtime/FunctionPrototype.cpp \
     runtime/GCActivityCallback.cpp \
     runtime/GetterSetter.cpp \
-    runtime/Options.cpp \
     runtime/Identifier.cpp \
     runtime/IndexingType.cpp \
     runtime/InitializeThreading.cpp \
     runtime/IntendedStructureChain.cpp \
     runtime/InternalFunction.cpp \
-    runtime/JSActivation.cpp \
     runtime/JSAPIValueWrapper.cpp \
+    runtime/JSActivation.cpp \
     runtime/JSArray.cpp \
+    runtime/JSArrayBuffer.cpp \
+    runtime/JSArrayBufferConstructor.cpp \
+    runtime/JSArrayBufferPrototype.cpp \
+    runtime/JSArrayBufferView.cpp \
+    runtime/JSBoundFunction.cpp \
+    runtime/JSCJSValue.cpp \
     runtime/JSCell.cpp \
+    runtime/JSDataView.cpp \
+    runtime/JSDataViewPrototype.cpp \
     runtime/JSDateMath.cpp \
     runtime/JSFunction.cpp \
-    runtime/JSBoundFunction.cpp \
-    runtime/VM.cpp \
     runtime/JSGlobalObject.cpp \
     runtime/JSGlobalObjectFunctions.cpp \
-    runtime/JSProxy.cpp \
     runtime/JSLock.cpp \
+    runtime/JSNameScope.cpp \
     runtime/JSNotAnObject.cpp \
-    runtime/JSObject.cpp \
     runtime/JSONObject.cpp \
+    runtime/JSObject.cpp \
     runtime/JSPropertyNameIterator.cpp \
-    runtime/JSSegmentedVariableObject.cpp \
-    runtime/JSWithScope.cpp \
-    runtime/JSNameScope.cpp \
+    runtime/JSProxy.cpp \
     runtime/JSScope.cpp \
+    runtime/JSSegmentedVariableObject.cpp \
     runtime/JSString.cpp \
     runtime/JSStringJoiner.cpp \
     runtime/JSSymbolTableObject.cpp \
-    runtime/JSCJSValue.cpp \
+    runtime/JSTypedArrayConstructors.cpp \
+    runtime/JSTypedArrayPrototypes.cpp \
+    runtime/JSTypedArrays.cpp \
     runtime/JSVariableObject.cpp \
+    runtime/JSWithScope.cpp \
     runtime/JSWrapperObject.cpp \
     runtime/LiteralParser.cpp \
     runtime/Lookup.cpp \
@@ -340,19 +348,21 @@ SOURCES += \
     runtime/ObjectConstructor.cpp \
     runtime/ObjectPrototype.cpp \
     runtime/Operations.cpp \
+    runtime/Options.cpp \
     runtime/PropertyDescriptor.cpp \
     runtime/PropertyNameArray.cpp \
     runtime/PropertySlot.cpp \
     runtime/PropertyTable.cpp \
     runtime/PrototypeMap.cpp \
-    runtime/RegExpConstructor.cpp \
+    runtime/RegExp.cpp \
+    runtime/RegExpCache.cpp \
     runtime/RegExpCachedResult.cpp \
+    runtime/RegExpConstructor.cpp \
     runtime/RegExpMatchesArray.cpp \
-    runtime/RegExp.cpp \
     runtime/RegExpObject.cpp \
     runtime/RegExpPrototype.cpp \
-    runtime/RegExpCache.cpp \
     runtime/SamplingCounter.cpp \
+    runtime/SimpleTypedArrayController.cpp \
     runtime/SmallStrings.cpp \
     runtime/SparseArrayValueMap.cpp \
     runtime/StrictEvalActivation.cpp \
@@ -360,10 +370,13 @@ SOURCES += \
     runtime/StringObject.cpp \
     runtime/StringPrototype.cpp \
     runtime/StringRecursionChecker.cpp \
-    runtime/StructureChain.cpp \
     runtime/Structure.cpp \
+    runtime/StructureChain.cpp \
     runtime/StructureRareData.cpp \
     runtime/SymbolTable.cpp \
+    runtime/TypedArrayController.cpp \
+    runtime/TypedArrayType.cpp \
+    runtime/VM.cpp \
     runtime/Watchdog.cpp \
     runtime/WatchdogNone.cpp \
     tools/CodeProfile.cpp \
index 3f79967..35fae0c 100644 (file)
@@ -69,7 +69,7 @@ inline bool isOptimizableIndexingType(IndexingType indexingType)
 
 inline bool hasOptimizableIndexingForClassInfo(const ClassInfo* classInfo)
 {
-    return classInfo->typedArrayStorageType != TypedArrayNone;
+    return isTypedView(classInfo->typedArrayStorageType);
 }
 
 inline bool hasOptimizableIndexing(Structure* structure)
@@ -98,23 +98,23 @@ inline JITArrayMode jitArrayModeForIndexingType(IndexingType indexingType)
 inline JITArrayMode jitArrayModeForClassInfo(const ClassInfo* classInfo)
 {
     switch (classInfo->typedArrayStorageType) {
-    case TypedArrayInt8:
+    case TypeInt8:
         return JITInt8Array;
-    case TypedArrayInt16:
+    case TypeInt16:
         return JITInt16Array;
-    case TypedArrayInt32:
+    case TypeInt32:
         return JITInt32Array;
-    case TypedArrayUint8:
+    case TypeUint8:
         return JITUint8Array;
-    case TypedArrayUint8Clamped:
+    case TypeUint8Clamped:
         return JITUint8ClampedArray;
-    case TypedArrayUint16:
+    case TypeUint16:
         return JITUint16Array;
-    case TypedArrayUint32:
+    case TypeUint32:
         return JITUint32Array;
-    case TypedArrayFloat32:
+    case TypeFloat32:
         return JITFloat32Array;
-    case TypedArrayFloat64:
+    case TypeFloat64:
         return JITFloat64Array;
     default:
         CRASH();
@@ -122,6 +122,33 @@ inline JITArrayMode jitArrayModeForClassInfo(const ClassInfo* classInfo)
     }
 }
 
+inline TypedArrayType typedArrayTypeForJITArrayMode(JITArrayMode mode)
+{
+    switch (mode) {
+    case JITInt8Array:
+        return TypeInt8;
+    case JITInt16Array:
+        return TypeInt16;
+    case JITInt32Array:
+        return TypeInt32;
+    case JITUint8Array:
+        return TypeUint8;
+    case JITUint8ClampedArray:
+        return TypeUint8Clamped;
+    case JITUint16Array:
+        return TypeUint16;
+    case JITUint32Array:
+        return TypeUint32;
+    case JITFloat32Array:
+        return TypeFloat32;
+    case JITFloat64Array:
+        return TypeFloat64;
+    default:
+        CRASH();
+        return NotTypedArray;
+    }
+}
+
 inline JITArrayMode jitArrayModeForStructure(Structure* structure)
 {
     if (isOptimizableIndexingType(structure->indexingType()))
index 10eab0b..eb7bc3c 100644 (file)
@@ -266,29 +266,27 @@ SpeculatedType speculationFromClassInfo(const ClassInfo* classInfo)
     if (classInfo->isSubClassOf(JSFunction::info()))
         return SpecFunction;
     
-    if (classInfo->typedArrayStorageType != TypedArrayNone) {
-        switch (classInfo->typedArrayStorageType) {
-        case TypedArrayInt8:
-            return SpecInt8Array;
-        case TypedArrayInt16:
-            return SpecInt16Array;
-        case TypedArrayInt32:
-            return SpecInt32Array;
-        case TypedArrayUint8:
-            return SpecUint8Array;
-        case TypedArrayUint8Clamped:
-            return SpecUint8ClampedArray;
-        case TypedArrayUint16:
-            return SpecUint16Array;
-        case TypedArrayUint32:
-            return SpecUint32Array;
-        case TypedArrayFloat32:
-            return SpecFloat32Array;
-        case TypedArrayFloat64:
-            return SpecFloat64Array;
-        default:
-            break;
-        }
+    switch (classInfo->typedArrayStorageType) {
+    case TypeInt8:
+        return SpecInt8Array;
+    case TypeInt16:
+        return SpecInt16Array;
+    case TypeInt32:
+        return SpecInt32Array;
+    case TypeUint8:
+        return SpecUint8Array;
+    case TypeUint8Clamped:
+        return SpecUint8ClampedArray;
+    case TypeUint16:
+        return SpecUint16Array;
+    case TypeUint32:
+        return SpecUint32Array;
+    case TypeFloat32:
+        return SpecFloat32Array;
+    case TypeFloat64:
+        return SpecFloat64Array;
+    default:
+        break;
     }
     
     if (classInfo->isSubClassOf(JSObject::info()))
index 6c43a3b..fa0fb58 100644 (file)
@@ -458,6 +458,32 @@ const char* arrayConversionToString(Array::Conversion conversion)
     }
 }
 
+TypedArrayType toTypedArrayType(Array::Type type)
+{
+    switch (type) {
+    case Array::Int8Array:
+        return TypeInt8;
+    case Array::Int16Array:
+        return TypeInt16;
+    case Array::Int32Array:
+        return TypeInt32;
+    case Array::Uint8Array:
+        return TypeUint8;
+    case Array::Uint8ClampedArray:
+        return TypeUint8Clamped;
+    case Array::Uint16Array:
+        return TypeUint16;
+    case Array::Uint32Array:
+        return TypeUint32;
+    case Array::Float32Array:
+        return TypeFloat32;
+    case Array::Float64Array:
+        return TypeFloat64;
+    default:
+        return NotTypedArray;
+    }
+}
+
 void ArrayMode::dump(PrintStream& out) const
 {
     out.print(type(), arrayClass(), speculation(), conversion());
index 5fbb67d..527595f 100644 (file)
@@ -104,6 +104,8 @@ const char* arrayClassToString(Array::Class);
 const char* arraySpeculationToString(Array::Speculation);
 const char* arrayConversionToString(Array::Conversion);
 
+TypedArrayType toTypedArrayType(Array::Type);
+
 class ArrayMode {
 public:
     ArrayMode()
@@ -380,6 +382,11 @@ public:
         return type() == Array::String;
     }
     
+    TypedArrayType typedArrayType() const
+    {
+        return toTypedArrayType(type());
+    }
+    
     bool operator==(const ArrayMode& other) const
     {
         return type() == other.type()
index 0d64acc..dc09322 100644 (file)
@@ -583,32 +583,6 @@ void SpeculativeJIT::silentFill(const SilentRegisterSavePlan& plan, GPRReg canTr
     }
 }
     
-const TypedArrayDescriptor* SpeculativeJIT::typedArrayDescriptor(ArrayMode arrayMode)
-{
-    switch (arrayMode.type()) {
-    case Array::Int8Array:
-        return &m_jit.vm()->int8ArrayDescriptor();
-    case Array::Int16Array:
-        return &m_jit.vm()->int16ArrayDescriptor();
-    case Array::Int32Array:
-        return &m_jit.vm()->int32ArrayDescriptor();
-    case Array::Uint8Array:
-        return &m_jit.vm()->uint8ArrayDescriptor();
-    case Array::Uint8ClampedArray:
-        return &m_jit.vm()->uint8ClampedArrayDescriptor();
-    case Array::Uint16Array:
-        return &m_jit.vm()->uint16ArrayDescriptor();
-    case Array::Uint32Array:
-        return &m_jit.vm()->uint32ArrayDescriptor();
-    case Array::Float32Array:
-        return &m_jit.vm()->float32ArrayDescriptor();
-    case Array::Float64Array:
-        return &m_jit.vm()->float64ArrayDescriptor();
-    default:
-        return 0;
-    }
-}
-
 JITCompiler::Jump SpeculativeJIT::jumpSlowForUnwantedArrayMode(GPRReg tempGPR, ArrayMode arrayMode, IndexingType shape)
 {
     switch (arrayMode.arrayClass()) {
@@ -694,8 +668,6 @@ void SpeculativeJIT::checkArray(Node* node)
     SpeculateCellOperand base(this, node->child1());
     GPRReg baseReg = base.gpr();
     
-    const TypedArrayDescriptor* result = typedArrayDescriptor(node->arrayMode());
-    
     if (node->arrayMode().alreadyChecked(m_jit.graph(), node, m_state.forNode(node->child1()))) {
         noResult(m_currentNode);
         return;
@@ -727,22 +699,13 @@ void SpeculativeJIT::checkArray(Node* node)
     case Array::Arguments:
         expectedClassInfo = Arguments::info();
         break;
-    case Array::Int8Array:
-    case Array::Int16Array:
-    case Array::Int32Array:
-    case Array::Uint8Array:
-    case Array::Uint8ClampedArray:
-    case Array::Uint16Array:
-    case Array::Uint32Array:
-    case Array::Float32Array:
-    case Array::Float64Array:
-        expectedClassInfo = result->m_classInfo;
-        break;
     default:
-        RELEASE_ASSERT_NOT_REACHED();
+        expectedClassInfo = classInfoForType(node->arrayMode().typedArrayType());
         break;
     }
     
+    RELEASE_ASSERT(expectedClassInfo);
+    
     GPRTemporary temp(this);
     m_jit.loadPtr(
         MacroAssembler::Address(baseReg, JSCell::structureOffset()), temp.gpr());
@@ -2601,8 +2564,10 @@ static void compileClampDoubleToByte(JITCompiler& jit, GPRReg result, FPRReg sou
 
 }
 
-void SpeculativeJIT::compileGetByValOnIntTypedArray(const TypedArrayDescriptor& descriptor, Node* node, size_t elementSize, TypedArraySignedness signedness)
+void SpeculativeJIT::compileGetByValOnIntTypedArray(Node* node, TypedArrayType type)
 {
+    ASSERT(isInt(type));
+    
     SpeculateCellOperand base(this, node->child1());
     SpeculateStrictInt32Operand property(this, node->child2());
     StorageOperand storage(this, node->child3());
@@ -2619,16 +2584,17 @@ void SpeculativeJIT::compileGetByValOnIntTypedArray(const TypedArrayDescriptor&
     speculationCheck(
         Uncountable, JSValueRegs(), 0,
         m_jit.branch32(
-            MacroAssembler::AboveOrEqual, propertyReg, MacroAssembler::Address(baseReg, descriptor.m_lengthOffset)));
-    switch (elementSize) {
+            MacroAssembler::AboveOrEqual, propertyReg,
+            MacroAssembler::Address(baseReg, JSArrayBufferView::offsetOfLength())));
+    switch (elementSize(type)) {
     case 1:
-        if (signedness == SignedTypedArray)
+        if (isSigned(type))
             m_jit.load8Signed(MacroAssembler::BaseIndex(storageReg, propertyReg, MacroAssembler::TimesOne), resultReg);
         else
             m_jit.load8(MacroAssembler::BaseIndex(storageReg, propertyReg, MacroAssembler::TimesOne), resultReg);
         break;
     case 2:
-        if (signedness == SignedTypedArray)
+        if (isSigned(type))
             m_jit.load16Signed(MacroAssembler::BaseIndex(storageReg, propertyReg, MacroAssembler::TimesTwo), resultReg);
         else
             m_jit.load16(MacroAssembler::BaseIndex(storageReg, propertyReg, MacroAssembler::TimesTwo), resultReg);
@@ -2639,12 +2605,12 @@ void SpeculativeJIT::compileGetByValOnIntTypedArray(const TypedArrayDescriptor&
     default:
         CRASH();
     }
-    if (elementSize < 4 || signedness == SignedTypedArray) {
+    if (elementSize(type) < 4 || isSigned(type)) {
         integerResult(resultReg, node);
         return;
     }
     
-    ASSERT(elementSize == 4 && signedness == UnsignedTypedArray);
+    ASSERT(elementSize(type) == 4 && !isSigned(type));
     if (node->shouldSpeculateInteger()) {
         forwardSpeculationCheck(Overflow, JSValueRegs(), 0, m_jit.branch32(MacroAssembler::LessThan, resultReg, TrustedImm32(0)), ValueRecovery::uint32InGPR(resultReg));
         integerResult(resultReg, node);
@@ -2659,8 +2625,10 @@ void SpeculativeJIT::compileGetByValOnIntTypedArray(const TypedArrayDescriptor&
     doubleResult(fresult.fpr(), node);
 }
 
-void SpeculativeJIT::compilePutByValForIntTypedArray(const TypedArrayDescriptor& descriptor, GPRReg base, GPRReg property, Node* node, size_t elementSize, TypedArraySignedness signedness, TypedArrayRounding rounding)
+void SpeculativeJIT::compilePutByValForIntTypedArray(GPRReg base, GPRReg property, Node* node, TypedArrayType type)
 {
+    ASSERT(isInt(type));
+    
     StorageOperand storage(this, m_jit.graph().varArgChild(node, 3));
     GPRReg storageReg = storage.gpr();
     
@@ -2677,8 +2645,8 @@ void SpeculativeJIT::compilePutByValForIntTypedArray(const TypedArrayDescriptor&
             return;
         }
         double d = jsValue.asNumber();
-        if (rounding == ClampRounding) {
-            ASSERT(elementSize == 1);
+        if (isClamped(type)) {
+            ASSERT(elementSize(type) == 1);
             d = clampDoubleToByte(d);
         }
         GPRTemporary scratch(this);
@@ -2693,8 +2661,8 @@ void SpeculativeJIT::compilePutByValForIntTypedArray(const TypedArrayDescriptor&
             GPRTemporary scratch(this);
             GPRReg scratchReg = scratch.gpr();
             m_jit.move(valueOp.gpr(), scratchReg);
-            if (rounding == ClampRounding) {
-                ASSERT(elementSize == 1);
+            if (isClamped(type)) {
+                ASSERT(elementSize(type) == 1);
                 compileClampIntegerToByte(m_jit, scratchReg);
             }
             value.adopt(scratch);
@@ -2703,8 +2671,8 @@ void SpeculativeJIT::compilePutByValForIntTypedArray(const TypedArrayDescriptor&
         }
             
         case NumberUse: {
-            if (rounding == ClampRounding) {
-                ASSERT(elementSize == 1);
+            if (isClamped(type)) {
+                ASSERT(elementSize(type) == 1);
                 SpeculateDoubleOperand valueOp(this, valueUse);
                 GPRTemporary result(this);
                 FPRTemporary floatScratch(this);
@@ -2724,7 +2692,7 @@ void SpeculativeJIT::compilePutByValForIntTypedArray(const TypedArrayDescriptor&
                 notNaN.link(&m_jit);
                 
                 MacroAssembler::Jump failed;
-                if (signedness == SignedTypedArray)
+                if (isSigned(type))
                     failed = m_jit.branchTruncateDoubleToInt32(fpr, gpr, MacroAssembler::BranchIfTruncateFailed);
                 else
                     failed = m_jit.branchTruncateDoubleToUint32(fpr, gpr, MacroAssembler::BranchIfTruncateFailed);
@@ -2749,9 +2717,9 @@ void SpeculativeJIT::compilePutByValForIntTypedArray(const TypedArrayDescriptor&
     ASSERT(valueGPR != storageReg);
     MacroAssembler::Jump outOfBounds;
     if (node->op() == PutByVal)
-        outOfBounds = m_jit.branch32(MacroAssembler::AboveOrEqual, property, MacroAssembler::Address(base, descriptor.m_lengthOffset));
+        outOfBounds = m_jit.branch32(MacroAssembler::AboveOrEqual, property, MacroAssembler::Address(base, JSArrayBufferView::offsetOfLength()));
 
-    switch (elementSize) {
+    switch (elementSize(type)) {
     case 1:
         m_jit.store8(value.gpr(), MacroAssembler::BaseIndex(storageReg, property, MacroAssembler::TimesOne));
         break;
@@ -2769,8 +2737,10 @@ void SpeculativeJIT::compilePutByValForIntTypedArray(const TypedArrayDescriptor&
     noResult(node);
 }
 
-void SpeculativeJIT::compileGetByValOnFloatTypedArray(const TypedArrayDescriptor& descriptor, Node* node, size_t elementSize)
+void SpeculativeJIT::compileGetByValOnFloatTypedArray(Node* node, TypedArrayType type)
 {
+    ASSERT(isFloat(type));
+    
     SpeculateCellOperand base(this, node->child1());
     SpeculateStrictInt32Operand property(this, node->child2());
     StorageOperand storage(this, node->child3());
@@ -2786,8 +2756,9 @@ void SpeculativeJIT::compileGetByValOnFloatTypedArray(const TypedArrayDescriptor
     speculationCheck(
         Uncountable, JSValueRegs(), 0,
         m_jit.branch32(
-            MacroAssembler::AboveOrEqual, propertyReg, MacroAssembler::Address(baseReg, descriptor.m_lengthOffset)));
-    switch (elementSize) {
+            MacroAssembler::AboveOrEqual, propertyReg,
+            MacroAssembler::Address(baseReg, JSArrayBufferView::offsetOfLength())));
+    switch (elementSize(type)) {
     case 4:
         m_jit.loadFloat(MacroAssembler::BaseIndex(storageReg, propertyReg, MacroAssembler::TimesFour), resultReg);
         m_jit.convertFloatToDouble(resultReg, resultReg);
@@ -2808,8 +2779,10 @@ void SpeculativeJIT::compileGetByValOnFloatTypedArray(const TypedArrayDescriptor
     doubleResult(resultReg, node);
 }
 
-void SpeculativeJIT::compilePutByValForFloatTypedArray(const TypedArrayDescriptor& descriptor, GPRReg base, GPRReg property, Node* node, size_t elementSize)
+void SpeculativeJIT::compilePutByValForFloatTypedArray(GPRReg base, GPRReg property, Node* node, TypedArrayType type)
 {
+    ASSERT(isFloat(type));
+    
     StorageOperand storage(this, m_jit.graph().varArgChild(node, 3));
     GPRReg storageReg = storage.gpr();
     
@@ -2824,10 +2797,13 @@ void SpeculativeJIT::compilePutByValForFloatTypedArray(const TypedArrayDescripto
     ASSERT_UNUSED(baseUse, node->arrayMode().alreadyChecked(m_jit.graph(), node, m_state.forNode(baseUse)));
     
     MacroAssembler::Jump outOfBounds;
-    if (node->op() == PutByVal)
-        outOfBounds = m_jit.branch32(MacroAssembler::AboveOrEqual, property, MacroAssembler::Address(base, descriptor.m_lengthOffset));
+    if (node->op() == PutByVal) {
+        outOfBounds = m_jit.branch32(
+            MacroAssembler::AboveOrEqual, property,
+            MacroAssembler::Address(base, JSArrayBufferView::offsetOfLength()));
+    }
     
-    switch (elementSize) {
+    switch (elementSize(type)) {
     case 4: {
         m_jit.moveDouble(valueFPR, scratchFPR);
         m_jit.convertDoubleToFloat(valueFPR, scratchFPR);
@@ -4033,8 +4009,6 @@ void SpeculativeJIT::compileGetIndexedPropertyStorage(Node* node)
     GPRTemporary storage(this);
     GPRReg storageReg = storage.gpr();
     
-    const TypedArrayDescriptor* descriptor = typedArrayDescriptor(node->arrayMode());
-    
     switch (node->arrayMode().type()) {
     case Array::String:
         m_jit.loadPtr(MacroAssembler::Address(baseReg, JSString::offsetOfValue()), storageReg);
@@ -4048,8 +4022,10 @@ void SpeculativeJIT::compileGetIndexedPropertyStorage(Node* node)
         break;
         
     default:
-        ASSERT(descriptor);
-        m_jit.loadPtr(MacroAssembler::Address(baseReg, descriptor->m_storageOffset), storageReg);
+        ASSERT(isTypedView(node->arrayMode().typedArrayType()));
+        m_jit.loadPtr(
+            MacroAssembler::Address(baseReg, JSArrayBufferView::offsetOfVector()),
+            storageReg);
         break;
     }
     
@@ -4150,8 +4126,6 @@ void SpeculativeJIT::compileGetArgumentsLength(Node* node)
 
 void SpeculativeJIT::compileGetArrayLength(Node* node)
 {
-    const TypedArrayDescriptor* descriptor = typedArrayDescriptor(node->arrayMode());
-
     switch (node->arrayMode().type()) {
     case Array::Int32:
     case Array::Double:
@@ -4191,16 +4165,16 @@ void SpeculativeJIT::compileGetArrayLength(Node* node)
         compileGetArgumentsLength(node);
         break;
     }
-    default:
+    default: {
+        ASSERT(isTypedView(node->arrayMode().typedArrayType()));
         SpeculateCellOperand base(this, node->child1());
         GPRTemporary result(this, base);
         GPRReg baseGPR = base.gpr();
         GPRReg resultGPR = result.gpr();
-        ASSERT(descriptor);
-        m_jit.load32(MacroAssembler::Address(baseGPR, descriptor->m_lengthOffset), resultGPR);
+        m_jit.load32(MacroAssembler::Address(baseGPR, JSArrayBufferView::offsetOfLength()), resultGPR);
         integerResult(resultGPR, node);
         break;
-    }
+    } }
 }
 
 void SpeculativeJIT::compileNewFunctionNoCheck(Node* node)
index 5195a55..6262686 100644 (file)
@@ -1973,10 +1973,10 @@ public:
     void compileArithDiv(Node*);
     void compileArithMod(Node*);
     void compileGetIndexedPropertyStorage(Node*);
-    void compileGetByValOnIntTypedArray(const TypedArrayDescriptor&, Node*, size_t elementSize, TypedArraySignedness);
-    void compilePutByValForIntTypedArray(const TypedArrayDescriptor&, GPRReg base, GPRReg property, Node*, size_t elementSize, TypedArraySignedness, TypedArrayRounding = TruncateRounding);
-    void compileGetByValOnFloatTypedArray(const TypedArrayDescriptor&, Node*, size_t elementSize);
-    void compilePutByValForFloatTypedArray(const TypedArrayDescriptor&, GPRReg base, GPRReg property, Node*, size_t elementSize);
+    void compileGetByValOnIntTypedArray(Node*, TypedArrayType);
+    void compilePutByValForIntTypedArray(GPRReg base, GPRReg property, Node*, TypedArrayType);
+    void compileGetByValOnFloatTypedArray(Node*, TypedArrayType);
+    void compilePutByValForFloatTypedArray(GPRReg base, GPRReg property, Node*, TypedArrayType);
     void compileNewFunctionNoCheck(Node*);
     void compileNewFunctionExpression(Node*);
     bool compileRegExpExec(Node*);
@@ -2118,8 +2118,6 @@ public:
     void speculateOther(Edge);
     void speculate(Node*, Edge);
     
-    const TypedArrayDescriptor* typedArrayDescriptor(ArrayMode);
-    
     JITCompiler::Jump jumpSlowForUnwantedArrayMode(GPRReg tempWithIndexingTypeReg, ArrayMode, IndexingType);
     JITCompiler::JumpList jumpSlowForUnwantedArrayMode(GPRReg tempWithIndexingTypeReg, ArrayMode);
     void checkArray(Node*);
index fbcfeae..6db64b1 100644 (file)
@@ -2667,37 +2667,13 @@ void SpeculativeJIT::compile(Node* node)
         case Array::Arguments:
             compileGetByValOnArguments(node);
             break;
-        case Array::Int8Array:
-            compileGetByValOnIntTypedArray(m_jit.vm()->int8ArrayDescriptor(), node, sizeof(int8_t), SignedTypedArray);
-            break;
-        case Array::Int16Array:
-            compileGetByValOnIntTypedArray(m_jit.vm()->int16ArrayDescriptor(), node, sizeof(int16_t), SignedTypedArray);
-            break;
-        case Array::Int32Array:
-            compileGetByValOnIntTypedArray(m_jit.vm()->int32ArrayDescriptor(), node, sizeof(int32_t), SignedTypedArray);
-            break;
-        case Array::Uint8Array:
-            compileGetByValOnIntTypedArray(m_jit.vm()->uint8ArrayDescriptor(), node, sizeof(uint8_t), UnsignedTypedArray);
-            break;
-        case Array::Uint8ClampedArray:
-            compileGetByValOnIntTypedArray(m_jit.vm()->uint8ClampedArrayDescriptor(), node, sizeof(uint8_t), UnsignedTypedArray);
-            break;
-        case Array::Uint16Array:
-            compileGetByValOnIntTypedArray(m_jit.vm()->uint16ArrayDescriptor(), node, sizeof(uint16_t), UnsignedTypedArray);
-            break;
-        case Array::Uint32Array:
-            compileGetByValOnIntTypedArray(m_jit.vm()->uint32ArrayDescriptor(), node, sizeof(uint32_t), UnsignedTypedArray);
-            break;
-        case Array::Float32Array:
-            compileGetByValOnFloatTypedArray(m_jit.vm()->float32ArrayDescriptor(), node, sizeof(float));
-            break;
-        case Array::Float64Array:
-            compileGetByValOnFloatTypedArray(m_jit.vm()->float64ArrayDescriptor(), node, sizeof(double));
-            break;
-        default:
-            RELEASE_ASSERT_NOT_REACHED();
-            break;
-        }
+        default: {
+            TypedArrayType type = arrayMode.typedArrayType();
+            if (isInt(type))
+                compileGetByValForIntTypedArray(node, type);
+            else
+                compileGetByValForFloatTypedArray(node, type);
+        } }
         break;
     }
 
@@ -2873,46 +2849,13 @@ void SpeculativeJIT::compile(Node* node)
             RELEASE_ASSERT_NOT_REACHED();
             break;
             
-        case Array::Int8Array:
-            compilePutByValForIntTypedArray(m_jit.vm()->int8ArrayDescriptor(), base.gpr(), property.gpr(), node, sizeof(int8_t), SignedTypedArray);
-            break;
-            
-        case Array::Int16Array:
-            compilePutByValForIntTypedArray(m_jit.vm()->int16ArrayDescriptor(), base.gpr(), property.gpr(), node, sizeof(int16_t), SignedTypedArray);
-            break;
-            
-        case Array::Int32Array:
-            compilePutByValForIntTypedArray(m_jit.vm()->int32ArrayDescriptor(), base.gpr(), property.gpr(), node, sizeof(int32_t), SignedTypedArray);
-            break;
-            
-        case Array::Uint8Array:
-            compilePutByValForIntTypedArray(m_jit.vm()->uint8ArrayDescriptor(), base.gpr(), property.gpr(), node, sizeof(uint8_t), UnsignedTypedArray);
-            break;
-            
-        case Array::Uint8ClampedArray:
-            compilePutByValForIntTypedArray(m_jit.vm()->uint8ClampedArrayDescriptor(), base.gpr(), property.gpr(), node, sizeof(uint8_t), UnsignedTypedArray, ClampRounding);
-            break;
-            
-        case Array::Uint16Array:
-            compilePutByValForIntTypedArray(m_jit.vm()->uint16ArrayDescriptor(), base.gpr(), property.gpr(), node, sizeof(uint16_t), UnsignedTypedArray);
-            break;
-            
-        case Array::Uint32Array:
-            compilePutByValForIntTypedArray(m_jit.vm()->uint32ArrayDescriptor(), base.gpr(), property.gpr(), node, sizeof(uint32_t), UnsignedTypedArray);
-            break;
-            
-        case Array::Float32Array:
-            compilePutByValForFloatTypedArray(m_jit.vm()->float32ArrayDescriptor(), base.gpr(), property.gpr(), node, sizeof(float));
-            break;
-            
-        case Array::Float64Array:
-            compilePutByValForFloatTypedArray(m_jit.vm()->float64ArrayDescriptor(), base.gpr(), property.gpr(), node, sizeof(double));
-            break;
-            
-        default:
-            RELEASE_ASSERT_NOT_REACHED();
-            break;
-        }
+        default: {
+            TypedArrayType type = arrayMode.typedArrayType();
+            if (isInt(type))
+                compilePutByValForIntTypedArray(base.gpr(), property.gpr(), node, type);
+            else
+                compilePutByValForFloatTypedArray(base.gpr(), property.gpr(), node, type);
+        } }
         break;
     }
 
index 0dfba71..37badd0 100644 (file)
@@ -2581,37 +2581,13 @@ void SpeculativeJIT::compile(Node* node)
         case Array::Arguments:
             compileGetByValOnArguments(node);
             break;
-        case Array::Int8Array:
-            compileGetByValOnIntTypedArray(m_jit.vm()->int8ArrayDescriptor(), node, sizeof(int8_t), SignedTypedArray);
-            break;
-        case Array::Int16Array:
-            compileGetByValOnIntTypedArray(m_jit.vm()->int16ArrayDescriptor(), node, sizeof(int16_t), SignedTypedArray);
-            break;
-        case Array::Int32Array:
-            compileGetByValOnIntTypedArray(m_jit.vm()->int32ArrayDescriptor(), node, sizeof(int32_t), SignedTypedArray);
-            break;
-        case Array::Uint8Array:
-            compileGetByValOnIntTypedArray(m_jit.vm()->uint8ArrayDescriptor(), node, sizeof(uint8_t), UnsignedTypedArray);
-            break;
-        case Array::Uint8ClampedArray:
-            compileGetByValOnIntTypedArray(m_jit.vm()->uint8ClampedArrayDescriptor(), node, sizeof(uint8_t), UnsignedTypedArray);
-            break;
-        case Array::Uint16Array:
-            compileGetByValOnIntTypedArray(m_jit.vm()->uint16ArrayDescriptor(), node, sizeof(uint16_t), UnsignedTypedArray);
-            break;
-        case Array::Uint32Array:
-            compileGetByValOnIntTypedArray(m_jit.vm()->uint32ArrayDescriptor(), node, sizeof(uint32_t), UnsignedTypedArray);
-            break;
-        case Array::Float32Array:
-            compileGetByValOnFloatTypedArray(m_jit.vm()->float32ArrayDescriptor(), node, sizeof(float));
-            break;
-        case Array::Float64Array:
-            compileGetByValOnFloatTypedArray(m_jit.vm()->float64ArrayDescriptor(), node, sizeof(double));
-            break;
-        default:
-            RELEASE_ASSERT_NOT_REACHED();
-            break;
-        }
+        default: {
+            TypedArrayType type = node->arrayMode().typedArrayType();
+            if (isInt(type))
+                compileGetByValOnIntTypedArray(node, type);
+            else
+                compileGetByValOnFloatTypedArray(node, type);
+        } }
         break;
     }
 
@@ -2872,46 +2848,13 @@ void SpeculativeJIT::compile(Node* node)
             break;
         }
             
-        case Array::Int8Array:
-            compilePutByValForIntTypedArray(m_jit.vm()->int8ArrayDescriptor(), base.gpr(), property.gpr(), node, sizeof(int8_t), SignedTypedArray);
-            break;
-            
-        case Array::Int16Array:
-            compilePutByValForIntTypedArray(m_jit.vm()->int16ArrayDescriptor(), base.gpr(), property.gpr(), node, sizeof(int16_t), SignedTypedArray);
-            break;
-            
-        case Array::Int32Array:
-            compilePutByValForIntTypedArray(m_jit.vm()->int32ArrayDescriptor(), base.gpr(), property.gpr(), node, sizeof(int32_t), SignedTypedArray);
-            break;
-            
-        case Array::Uint8Array:
-            compilePutByValForIntTypedArray(m_jit.vm()->uint8ArrayDescriptor(), base.gpr(), property.gpr(), node, sizeof(uint8_t), UnsignedTypedArray);
-            break;
-            
-        case Array::Uint8ClampedArray:
-            compilePutByValForIntTypedArray(m_jit.vm()->uint8ClampedArrayDescriptor(), base.gpr(), property.gpr(), node, sizeof(uint8_t), UnsignedTypedArray, ClampRounding);
-            break;
-            
-        case Array::Uint16Array:
-            compilePutByValForIntTypedArray(m_jit.vm()->uint16ArrayDescriptor(), base.gpr(), property.gpr(), node, sizeof(uint16_t), UnsignedTypedArray);
-            break;
-            
-        case Array::Uint32Array:
-            compilePutByValForIntTypedArray(m_jit.vm()->uint32ArrayDescriptor(), base.gpr(), property.gpr(), node, sizeof(uint32_t), UnsignedTypedArray);
-            break;
-            
-        case Array::Float32Array:
-            compilePutByValForFloatTypedArray(m_jit.vm()->float32ArrayDescriptor(), base.gpr(), property.gpr(), node, sizeof(float));
-            break;
-            
-        case Array::Float64Array:
-            compilePutByValForFloatTypedArray(m_jit.vm()->float64ArrayDescriptor(), base.gpr(), property.gpr(), node, sizeof(double));
-            break;
-            
-        default:
-            RELEASE_ASSERT_NOT_REACHED();
-            break;
-        }
+        default: {
+            TypedArrayType type = arrayMode.typedArrayType();
+            if (isInt(type))
+                compilePutByValForIntTypedArray(base.gpr(), property.gpr(), node, type);
+            else
+                compilePutByValForFloatTypedArray(base.gpr(), property.gpr(), node, type);
+        } }
 
         break;
     }
index 10be928..bc8a12c 100644 (file)
@@ -29,7 +29,8 @@
 namespace JSC {
 
 enum CopyToken {
-    ButterflyCopyToken
+    ButterflyCopyToken,
+    TypedArrayVectorCopyToken
 };
 
 } // namespace JSC
index dceed5d..8169518 100644 (file)
@@ -49,6 +49,24 @@ private:
     Heap& m_heap;
 };
 
+class DeferGCForAWhile {
+    WTF_MAKE_NONCOPYABLE(DeferGCForAWhile);
+public:
+    DeferGCForAWhile(Heap& heap)
+        : m_heap(heap)
+    {
+        m_heap.incrementDeferralDepth();
+    }
+    
+    ~DeferGCForAWhile()
+    {
+        m_heap.decrementDeferralDepth();
+    }
+
+private:
+    Heap& m_heap;
+};
+
 } // namespace JSC
 
 #endif // DeferGC_h
diff --git a/Source/JavaScriptCore/heap/GCIncomingRefCounted.h b/Source/JavaScriptCore/heap/GCIncomingRefCounted.h
new file mode 100644 (file)
index 0000000..3854d0a
--- /dev/null
@@ -0,0 +1,115 @@
+/*
+ * Copyright (C) 2013 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ */
+
+#ifndef GCIncomingRefCounted_h
+#define GCIncomingRefCounted_h
+
+#include <wtf/DeferrableRefCounted.h>
+#include <wtf/Vector.h>
+
+namespace JSC {
+
+class JSCell;
+
+// A C-heap-allocated object that may have additional reference counts
+// due to incoming references from the heap, which are tracked in
+// reverse: the object knows its incoming references. Such objects also
+// have the invariant that they don't have references back into the GC
+// heap.
+
+template<typename T>
+class GCIncomingRefCounted : public DeferrableRefCounted<T> {
+public:
+    GCIncomingRefCounted()
+        : m_encodedPointer(0)
+    {
+    }
+    
+    ~GCIncomingRefCounted()
+    {
+        if (hasVectorOfCells())
+            delete vectorOfCells();
+    }
+    
+    size_t numberOfIncomingReferences() const
+    {
+        if (!hasAnyIncoming())
+            return 0;
+        if (hasSingleton())
+            return 1;
+        return vectorOfCells()->size();
+    }
+    
+    JSCell* incomingReferenceAt(size_t index) const
+    {
+        ASSERT(hasAnyIncoming());
+        if (hasSingleton()) {
+            ASSERT(!index);
+            return singleton();
+        }
+        return vectorOfCells()->at(index);
+    }
+    
+    // It's generally not a good idea to call this directly, since if this
+    // returns true, you're supposed to add this object to the GC's list.
+    // Call GCIncomingRefCountedSet::addReference() instead.
+    bool addIncomingReference(JSCell*);
+    
+    // A filter function returns true if we wish to keep the incoming
+    // reference, and false if we don't. This may delete the object,
+    // and if it does so, this returns true. In general, you don't want
+    // to use this with a filter function that can return false unless
+    // you're also walking the GC's list.
+    template<typename FilterFunctionType>
+    bool filterIncomingReferences(FilterFunctionType&);
+    
+private:
+    static uintptr_t singletonFlag() { return 1; }
+    
+    bool hasVectorOfCells() const { return !(m_encodedPointer & singletonFlag()); }
+    bool hasAnyIncoming() const { return !!m_encodedPointer; }
+    bool hasSingleton() const { return hasAnyIncoming() && !hasVectorOfCells(); }
+    
+    JSCell* singleton() const
+    {
+        ASSERT(hasSingleton());
+        return bitwise_cast<JSCell*>(m_encodedPointer & ~singletonFlag());
+    }
+    
+    Vector<JSCell*>* vectorOfCells() const
+    {
+        ASSERT(hasVectorOfCells());
+        return bitwise_cast<Vector<JSCell*>*>(m_encodedPointer);
+    }
+    
+    // Singleton flag is set: this is a JSCell*.
+    // Singleton flag not set: this is a pointer to a vector of cells.
+    uintptr_t m_encodedPointer;
+};
+
+} // namespace JSC
+
+#endif // GCIncomingRefCounted_h
+
diff --git a/Source/JavaScriptCore/heap/GCIncomingRefCountedInlines.h b/Source/JavaScriptCore/heap/GCIncomingRefCountedInlines.h
new file mode 100644 (file)
index 0000000..41330ec
--- /dev/null
@@ -0,0 +1,130 @@
+/*
+ * Copyright (C) 2013 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ */
+
+#ifndef GCIncomingRefCountedInlines_h
+#define GCIncomingRefCountedInlines_h
+
+#include "GCIncomingRefCounted.h"
+#include "Heap.h"
+
+namespace JSC {
+
+template<typename T>
+bool GCIncomingRefCounted<T>::addIncomingReference(JSCell* cell)
+{
+    if (!hasAnyIncoming()) {
+        m_encodedPointer = bitwise_cast<uintptr_t>(cell) | singletonFlag();
+        this->setIsDeferred(true);
+        ASSERT(hasSingleton());
+        return true;
+    }
+    
+    ASSERT(Heap::heap(incomingReferenceAt(0)) == Heap::heap(cell));
+    
+    if (hasSingleton()) {
+        Vector<JSCell*>* vector = new Vector<JSCell*>();
+        vector->append(singleton());
+        vector->append(cell);
+        m_encodedPointer = bitwise_cast<uintptr_t>(vector);
+        ASSERT(hasVectorOfCells());
+        return false;
+    }
+    
+    vectorOfCells()->append(cell);
+    return false;
+}
+
+template<typename T>
+template<typename FilterFunctionType>
+bool GCIncomingRefCounted<T>::filterIncomingReferences(FilterFunctionType& filterFunction)
+{
+    const bool verbose = false;
+    
+    if (verbose)
+        dataLog("Filtering incoming references.\n");
+    
+    if (!hasAnyIncoming()) {
+        ASSERT(!this->isDeferred());
+        ASSERT(this->refCount());
+        if (verbose)
+            dataLog("    Has no incoming.\n");
+        return false;
+    }
+    
+    ASSERT(this->isDeferred());
+    
+    if (hasSingleton()) {
+        if (filterFunction(singleton())) {
+            if (verbose)
+                dataLog("   Singleton passed.\n");
+            return false;
+        }
+        
+        if (verbose)
+            dataLog("   Removing singleton.\n");
+        m_encodedPointer = 0;
+        ASSERT(!hasAnyIncoming());
+        this->setIsDeferred(false);
+        return true;
+    }
+    
+    if (verbose)
+        dataLog("   Has ", vectorOfCells()->size(), " entries.\n");
+    for (size_t i = 0; i < vectorOfCells()->size(); ++i) {
+        if (filterFunction(vectorOfCells()->at(i)))
+            continue;
+        vectorOfCells()->at(i--) = vectorOfCells()->last();
+        vectorOfCells()->removeLast();
+    }
+    
+    if (vectorOfCells()->size() >= 2) {
+        if (verbose)
+            dataLog("   Still has ", vectorOfCells()->size(), " entries.\n");
+        return false;
+    }
+    
+    if (vectorOfCells()->isEmpty()) {
+        if (verbose)
+            dataLog("   Removing.\n");
+        delete vectorOfCells();
+        m_encodedPointer = 0;
+        ASSERT(!hasAnyIncoming());
+        this->setIsDeferred(false);
+        return true;
+    }
+    
+    if (verbose)
+        dataLog("   Shrinking to singleton.\n");
+    JSCell* singleton = vectorOfCells()->at(0);
+    delete vectorOfCells();
+    m_encodedPointer = bitwise_cast<uintptr_t>(singleton) | singletonFlag();
+    ASSERT(hasSingleton());
+    return false;
+}
+
+} // namespace JSC
+
+#endif // GCIncomingRefCountedInlines_h
+
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2006, 2010 Apple Computer, Inc. All rights reserved.
+ * Copyright (C) 2013 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
  *    notice, this list of conditions and the following disclaimer in the
  *    documentation and/or other materials provided with the distribution.
  *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
  */
 
-[
-    GlobalContext=DOMWindow&WorkerGlobalScope,
-    ConstructorTemplate=TypedArray,
-    CustomIndexedSetter,
-    JSGenerateToNativeObject,
-    JSNoStaticTables,
-    CustomToJSObject,
-    DoNotCheckConstants,
-    TypedArray=short,
-    ImplementationNamespace=JSC
-] interface Int16Array : ArrayBufferView {
-    const unsigned long BYTES_PER_ELEMENT = 2;
+#ifndef GCIncomingRefCountedSet_h
+#define GCIncomingRefCountedSet_h
 
-    readonly attribute unsigned long length;
-    Int16Array subarray([Default=Undefined] optional long start, 
-                        optional long end);
+#include "GCIncomingRefCounted.h"
 
-    getter short (unsigned long index);
+namespace JSC {
 
-    // void set(Int16Array array, optional unsigned long offset);
-    // void set(sequence<long> array, optional unsigned long offset);
-    void set();
+// T = some subtype of GCIncomingRefCounted, must support a gcSizeEstimateInBytes()
+// method.
+template<typename T>
+class GCIncomingRefCountedSet {
+public:
+    GCIncomingRefCountedSet();
+    ~GCIncomingRefCountedSet();
+    
+    // Returns true if the native object is new to this set.
+    bool addReference(JSCell*, T*);
+    
+    void sweep();
+    
+    size_t size() const { return m_bytes; };
+    
+private:
+    static bool removeAll(JSCell*);
+    static bool removeDead(JSCell*);
+    
+    Vector<T*> m_vector;
+    size_t m_bytes;
 };
+
+} // namespace JSC
+
+#endif // GCIncomingRefCountedSet_h
+
diff --git a/Source/JavaScriptCore/heap/GCIncomingRefCountedSetInlines.h b/Source/JavaScriptCore/heap/GCIncomingRefCountedSetInlines.h
new file mode 100644 (file)
index 0000000..52c55e2
--- /dev/null
@@ -0,0 +1,92 @@
+/*
+ * Copyright (C) 2013 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ */
+
+#ifndef GCIncomingRefCountedSetInlines_h
+#define GCIncomingRefCountedSetInlines_h
+
+#include "GCIncomingRefCountedSet.h"
+#include "VM.h"
+
+namespace JSC {
+
+template<typename T>
+GCIncomingRefCountedSet<T>::GCIncomingRefCountedSet()
+    : m_bytes(0)
+{
+}
+
+template<typename T>
+GCIncomingRefCountedSet<T>::~GCIncomingRefCountedSet()
+{
+    for (size_t i = m_vector.size(); i--;)
+        m_vector[i]->filterIncomingReferences(removeAll);
+}
+
+template<typename T>
+bool GCIncomingRefCountedSet<T>::addReference(JSCell* cell, T* object)
+{
+    if (!object->addIncomingReference(cell)) {
+        ASSERT(object->isDeferred());
+        ASSERT(object->numberOfIncomingReferences());
+        return false;
+    }
+    m_vector.append(object);
+    m_bytes += object->gcSizeEstimateInBytes();
+    ASSERT(object->isDeferred());
+    ASSERT(object->numberOfIncomingReferences());
+    return true;
+}
+
+template<typename T>
+void GCIncomingRefCountedSet<T>::sweep()
+{
+    for (size_t i = 0; i < m_vector.size(); ++i) {
+        T* object = m_vector[i];
+        size_t size = object->gcSizeEstimateInBytes();
+        ASSERT(object->isDeferred());
+        ASSERT(object->numberOfIncomingReferences());
+        if (!object->filterIncomingReferences(removeDead))
+            continue;
+        m_bytes -= size;
+        m_vector[i--] = m_vector.last();
+        m_vector.removeLast();
+    }
+}
+
+template<typename T>
+bool GCIncomingRefCountedSet<T>::removeAll(JSCell*)
+{
+    return false;
+}
+
+template<typename T>
+bool GCIncomingRefCountedSet<T>::removeDead(JSCell* cell)
+{
+    return Heap::isMarked(cell);
+}
+
+} // namespace JSC
+
+#endif // GCIncomingRefCountedSetInlines_h
index 604e788..2ed9517 100644 (file)
@@ -28,6 +28,7 @@
 #include "CopyVisitorInlines.h"
 #include "DFGWorklist.h"
 #include "GCActivityCallback.h"
+#include "GCIncomingRefCountedSetInlines.h"
 #include "HeapRootVisitor.h"
 #include "HeapStatistics.h"
 #include "IncrementalSweeper.h"
@@ -358,6 +359,14 @@ void Heap::jettisonDFGCodeBlock(PassRefPtr<CodeBlock> codeBlock)
     m_dfgCodeBlocks.jettison(codeBlock);
 }
 
+void Heap::addReference(JSCell* cell, ArrayBuffer* buffer)
+{
+    if (m_arrayBuffers.addReference(cell, buffer)) {
+        collectIfNecessaryOrDefer();
+        didAllocate(buffer->gcSizeEstimateInBytes());
+    }
+}
+
 void Heap::markProtectedObjects(HeapRootVisitor& heapRootVisitor)
 {
     ProtectCountSet::iterator end = m_protectedValues.end();
@@ -621,14 +630,19 @@ size_t Heap::objectCount()
     return m_objectSpace.objectCount();
 }
 
+size_t Heap::extraSize()
+{
+    return m_extraMemoryUsage + m_arrayBuffers.size();
+}
+
 size_t Heap::size()
 {
-    return m_objectSpace.size() + m_storageSpace.size() + m_extraMemoryUsage;
+    return m_objectSpace.size() + m_storageSpace.size() + extraSize();
 }
 
 size_t Heap::capacity()
 {
-    return m_objectSpace.capacity() + m_storageSpace.capacity();
+    return m_objectSpace.capacity() + m_storageSpace.capacity() + extraSize();
 }
 
 size_t Heap::protectedGlobalObjectCount()
@@ -707,6 +721,12 @@ void Heap::collect(SweepToggle sweepToggle)
     dataLogF("JSC GC starting collection.\n");
 #endif
     
+    double before = 0;
+    if (Options::logGC()) {
+        dataLog("[GC", sweepToggle == DoSweep ? " (eager sweep)" : "", ": ");
+        before = currentTimeMS();
+    }
+    
     SamplingRegion samplingRegion("Garbage Collection");
     
     RELEASE_ASSERT(!m_deferralDepth);
@@ -745,6 +765,11 @@ void Heap::collect(SweepToggle sweepToggle)
     }
 
     JAVASCRIPTCORE_GC_MARKED();
+    
+    {
+        GCPHASE(SweepingArrayBuffers);
+        m_arrayBuffers.sweep();
+    }
 
     {
         m_blockSnapshot.resize(m_objectSpace.blocks().set().size());
@@ -815,6 +840,11 @@ void Heap::collect(SweepToggle sweepToggle)
 
     if (Options::showObjectStatistics())
         HeapStatistics::showObjectStatistics(this);
+    
+    if (Options::logGC()) {
+        double after = currentTimeMS();
+        dataLog(after - before, " ms, ", currentHeapSize / 1024, " kb]\n");
+    }
 
 #if ENABLE(ALLOCATION_LOGGING)
     dataLogF("JSC GC finishing collection.\n");
@@ -924,12 +954,16 @@ void Heap::incrementDeferralDepth()
     m_deferralDepth++;
 }
 
-void Heap::decrementDeferralDepthAndGCIfNeeded()
+void Heap::decrementDeferralDepth()
 {
     RELEASE_ASSERT(m_deferralDepth >= 1);
     
     m_deferralDepth--;
-    
+}
+
+void Heap::decrementDeferralDepthAndGCIfNeeded()
+{
+    decrementDeferralDepth();
     collectIfNecessaryOrDefer();
 }
 
index 5d4ef76..26dc57d 100644 (file)
 #ifndef Heap_h
 #define Heap_h
 
+#include "ArrayBuffer.h"
 #include "BlockAllocator.h"
 #include "CopyVisitor.h"
 #include "DFGCodeBlocks.h"
+#include "GCIncomingRefCountedSet.h"
 #include "GCThreadSharedData.h"
 #include "HandleSet.h"
 #include "HandleStack.h"
@@ -144,6 +146,7 @@ namespace JSC {
         
         void jettisonDFGCodeBlock(PassRefPtr<CodeBlock>);
 
+        size_t extraSize(); // extra memory usage outside of pages allocated by the heap
         JS_EXPORT_PRIVATE size_t size();
         JS_EXPORT_PRIVATE size_t capacity();
         JS_EXPORT_PRIVATE size_t objectCount();
@@ -179,11 +182,14 @@ namespace JSC {
         bool isPagedOut(double deadline);
         
         const JITStubRoutineSet& jitStubRoutines() { return m_jitStubRoutines; }
+        
+        void addReference(JSCell*, ArrayBuffer*);
 
     private:
         friend class CodeBlock;
         friend class CopiedBlock;
         friend class DeferGC;
+        friend class DeferGCForAWhile;
         friend class GCAwareJITStubRoutine;
         friend class HandleSet;
         friend class JITStubRoutine;
@@ -230,6 +236,7 @@ namespace JSC {
         BlockAllocator& blockAllocator();
         
         void incrementDeferralDepth();
+        void decrementDeferralDepth();
         void decrementDeferralDepthAndGCIfNeeded();
 
         const HeapType m_heapType;
@@ -245,6 +252,7 @@ namespace JSC {
         BlockAllocator m_blockAllocator;
         MarkedSpace m_objectSpace;
         CopiedSpace m_storageSpace;
+        GCIncomingRefCountedSet<ArrayBuffer> m_arrayBuffers;
         size_t m_extraMemoryUsage;
 
 #if ENABLE(SIMPLE_HEAP_PROFILING)
index 221b6c1..c63a465 100644 (file)
@@ -91,7 +91,7 @@ template<typename T> inline T* Weak<T>::get() const
 
 template<typename T> inline bool Weak<T>::was(T* other) const
 {
-    return jsCast<T*>(m_impl->jsValue().asCell()) == other;
+    return static_cast<T*>(m_impl->jsValue().asCell()) == other;
 }
 
 template<typename T> inline bool Weak<T>::operator!() const
index 6705cb5..965d187 100644 (file)
@@ -87,6 +87,7 @@ namespace JSC  {
         static const HashTable* arrayConstructorTable(CallFrame* callFrame) { return callFrame->vm().arrayConstructorTable; }
         static const HashTable* arrayPrototypeTable(CallFrame* callFrame) { return callFrame->vm().arrayPrototypeTable; }
         static const HashTable* booleanPrototypeTable(CallFrame* callFrame) { return callFrame->vm().booleanPrototypeTable; }
+        static const HashTable* dataViewTable(CallFrame* callFrame) { return callFrame->vm().dataViewTable; }
         static const HashTable* dateTable(CallFrame* callFrame) { return callFrame->vm().dateTable; }
         static const HashTable* dateConstructorTable(CallFrame* callFrame) { return callFrame->vm().dateConstructorTable; }
         static const HashTable* errorPrototypeTable(CallFrame* callFrame) { return callFrame->vm().errorPrototypeTable; }
index 7edc498..1179f2e 100644 (file)
@@ -482,8 +482,8 @@ namespace JSC {
         JumpList emitDoubleGetByVal(Instruction*, PatchableJump& badType);
         JumpList emitContiguousGetByVal(Instruction*, PatchableJump& badType, IndexingType expectedShape = ContiguousShape);
         JumpList emitArrayStorageGetByVal(Instruction*, PatchableJump& badType);
-        JumpList emitIntTypedArrayGetByVal(Instruction*, PatchableJump& badType, const TypedArrayDescriptor&, size_t elementSize, TypedArraySignedness);
-        JumpList emitFloatTypedArrayGetByVal(Instruction*, PatchableJump& badType, const TypedArrayDescriptor&, size_t elementSize);
+        JumpList emitIntTypedArrayGetByVal(Instruction*, PatchableJump& badType, TypedArrayType);
+        JumpList emitFloatTypedArrayGetByVal(Instruction*, PatchableJump& badType, TypedArrayType);
         
         // Property is in regT0, base is in regT0. regT2 contains indecing type.
         // The value to store is not yet loaded. Property is int-checked and
@@ -503,8 +503,8 @@ namespace JSC {
         }
         JumpList emitGenericContiguousPutByVal(Instruction*, PatchableJump& badType, IndexingType indexingShape = ContiguousShape);
         JumpList emitArrayStoragePutByVal(Instruction*, PatchableJump& badType);
-        JumpList emitIntTypedArrayPutByVal(Instruction*, PatchableJump& badType, const TypedArrayDescriptor&, size_t elementSize, TypedArraySignedness, TypedArrayRounding);
-        JumpList emitFloatTypedArrayPutByVal(Instruction*, PatchableJump& badType, const TypedArrayDescriptor&, size_t elementSize);
+        JumpList emitIntTypedArrayPutByVal(Instruction*, PatchableJump& badType, TypedArrayType);
+        JumpList emitFloatTypedArrayPutByVal(Instruction*, PatchableJump& badType, TypedArrayType);
         
         enum FinalObjectMode { MayBeFinal, KnownNotFinal };
 
index f78a794..206e06b 100644 (file)
@@ -1549,35 +1549,13 @@ void JIT::privateCompileGetByVal(ByValInfo* byValInfo, ReturnAddressPtr returnAd
     case JITArrayStorage:
         slowCases = emitArrayStorageGetByVal(currentInstruction, badType);
         break;
-    case JITInt8Array:
-        slowCases = emitIntTypedArrayGetByVal(currentInstruction, badType, m_vm->int8ArrayDescriptor(), 1, SignedTypedArray);
-        break;
-    case JITInt16Array:
-        slowCases = emitIntTypedArrayGetByVal(currentInstruction, badType, m_vm->int16ArrayDescriptor(), 2, SignedTypedArray);
-        break;
-    case JITInt32Array:
-        slowCases = emitIntTypedArrayGetByVal(currentInstruction, badType, m_vm->int32ArrayDescriptor(), 4, SignedTypedArray);
-        break;
-    case JITUint8Array:
-        slowCases = emitIntTypedArrayGetByVal(currentInstruction, badType, m_vm->uint8ArrayDescriptor(), 1, UnsignedTypedArray);
-        break;
-    case JITUint8ClampedArray:
-        slowCases = emitIntTypedArrayGetByVal(currentInstruction, badType, m_vm->uint8ClampedArrayDescriptor(), 1, UnsignedTypedArray);
-        break;
-    case JITUint16Array:
-        slowCases = emitIntTypedArrayGetByVal(currentInstruction, badType, m_vm->uint16ArrayDescriptor(), 2, UnsignedTypedArray);
-        break;
-    case JITUint32Array:
-        slowCases = emitIntTypedArrayGetByVal(currentInstruction, badType, m_vm->uint32ArrayDescriptor(), 4, UnsignedTypedArray);
-        break;
-    case JITFloat32Array:
-        slowCases = emitFloatTypedArrayGetByVal(currentInstruction, badType, m_vm->float32ArrayDescriptor(), 4);
-        break;
-    case JITFloat64Array:
-        slowCases = emitFloatTypedArrayGetByVal(currentInstruction, badType, m_vm->float64ArrayDescriptor(), 8);
-        break;
     default:
-        CRASH();
+        TypedArrayType type = typedArrayTypeForJITArrayMode(arrayMode);
+        if (isInt(type))
+            slowCases = emitIntTypedArrayGetByVal(currentInstruction, badType, type);
+        else 
+            slowCases = emitFloatTypedArrayGetByVal(currentInstruction, badType, type);
+        break;
     }
     
     Jump done = jump();
@@ -1618,35 +1596,12 @@ void JIT::privateCompilePutByVal(ByValInfo* byValInfo, ReturnAddressPtr returnAd
     case JITArrayStorage:
         slowCases = emitArrayStoragePutByVal(currentInstruction, badType);
         break;
-    case JITInt8Array:
-        slowCases = emitIntTypedArrayPutByVal(currentInstruction, badType, m_vm->int8ArrayDescriptor(), 1, SignedTypedArray, TruncateRounding);
-        break;
-    case JITInt16Array:
-        slowCases = emitIntTypedArrayPutByVal(currentInstruction, badType, m_vm->int16ArrayDescriptor(), 2, SignedTypedArray, TruncateRounding);
-        break;
-    case JITInt32Array:
-        slowCases = emitIntTypedArrayPutByVal(currentInstruction, badType, m_vm->int32ArrayDescriptor(), 4, SignedTypedArray, TruncateRounding);
-        break;
-    case JITUint8Array:
-        slowCases = emitIntTypedArrayPutByVal(currentInstruction, badType, m_vm->uint8ArrayDescriptor(), 1, UnsignedTypedArray, TruncateRounding);
-        break;
-    case JITUint8ClampedArray:
-        slowCases = emitIntTypedArrayPutByVal(currentInstruction, badType, m_vm->uint8ClampedArrayDescriptor(), 1, UnsignedTypedArray, ClampRounding);
-        break;
-    case JITUint16Array:
-        slowCases = emitIntTypedArrayPutByVal(currentInstruction, badType, m_vm->uint16ArrayDescriptor(), 2, UnsignedTypedArray, TruncateRounding);
-        break;
-    case JITUint32Array:
-        slowCases = emitIntTypedArrayPutByVal(currentInstruction, badType, m_vm->uint32ArrayDescriptor(), 4, UnsignedTypedArray, TruncateRounding);
-        break;
-    case JITFloat32Array:
-        slowCases = emitFloatTypedArrayPutByVal(currentInstruction, badType, m_vm->float32ArrayDescriptor(), 4);
-        break;
-    case JITFloat64Array:
-        slowCases = emitFloatTypedArrayPutByVal(currentInstruction, badType, m_vm->float64ArrayDescriptor(), 8);
-        break;
     default:
-        CRASH();
+        TypedArrayType type = typedArrayTypeForJITArrayMode(arrayMode);
+        if (isInt(type))
+            slowCases = emitIntTypedArrayPutByVal(currentInstruction, badType, type);
+        else 
+            slowCases = emitFloatTypedArrayPutByVal(currentInstruction, badType, type);
         break;
     }
     
@@ -1668,8 +1623,10 @@ void JIT::privateCompilePutByVal(ByValInfo* byValInfo, ReturnAddressPtr returnAd
     repatchBuffer.relinkCallerToFunction(returnAddress, FunctionPtr(cti_op_put_by_val_generic));
 }
 
-JIT::JumpList JIT::emitIntTypedArrayGetByVal(Instruction*, PatchableJump& badType, const TypedArrayDescriptor& descriptor, size_t elementSize, TypedArraySignedness signedness)
+JIT::JumpList JIT::emitIntTypedArrayGetByVal(Instruction*, PatchableJump& badType, TypedArrayType type)
 {
+    ASSERT(isInt(type));
+    
     // The best way to test the array type is to use the classInfo. We need to do so without
     // clobbering the register that holds the indexing type, base, and property.
 
@@ -1689,19 +1646,19 @@ JIT::JumpList JIT::emitIntTypedArrayGetByVal(Instruction*, PatchableJump& badTyp
     JumpList slowCases;
     
     loadPtr(Address(base, JSCell::structureOffset()), scratch);
-    badType = patchableBranchPtr(NotEqual, Address(scratch, Structure::classInfoOffset()), TrustedImmPtr(descriptor.m_classInfo));
-    slowCases.append(branch32(AboveOrEqual, property, Address(base, descriptor.m_lengthOffset)));
-    loadPtr(Address(base, descriptor.m_storageOffset), base);
+    badType = patchableBranchPtr(NotEqual, Address(scratch, Structure::classInfoOffset()), TrustedImmPtr(classInfoForType(type)));
+    slowCases.append(branch32(AboveOrEqual, property, Address(base, JSArrayBufferView::offsetOfLength())));
+    loadPtr(Address(base, JSArrayBufferView::offsetOfVector()), base);
     
-    switch (elementSize) {
+    switch (elementSize(type)) {
     case 1:
-        if (signedness == SignedTypedArray)
+        if (isSigned(type))
             load8Signed(BaseIndex(base, property, TimesOne), resultPayload);
         else
             load8(BaseIndex(base, property, TimesOne), resultPayload);
         break;
     case 2:
-        if (signedness == SignedTypedArray)
+        if (isSigned(type))
             load16Signed(BaseIndex(base, property, TimesTwo), resultPayload);
         else
             load16(BaseIndex(base, property, TimesTwo), resultPayload);
@@ -1714,7 +1671,7 @@ JIT::JumpList JIT::emitIntTypedArrayGetByVal(Instruction*, PatchableJump& badTyp
     }
     
     Jump done;
-    if (elementSize == 4 && signedness == UnsignedTypedArray) {
+    if (type == TypeUint32) {
         Jump canBeInt = branch32(GreaterThanOrEqual, resultPayload, TrustedImm32(0));
         
         convertInt32ToDouble(resultPayload, fpRegT0);
@@ -1740,8 +1697,10 @@ JIT::JumpList JIT::emitIntTypedArrayGetByVal(Instruction*, PatchableJump& badTyp
     return slowCases;
 }
 
-JIT::JumpList JIT::emitFloatTypedArrayGetByVal(Instruction*, PatchableJump& badType, const TypedArrayDescriptor& descriptor, size_t elementSize)
+JIT::JumpList JIT::emitFloatTypedArrayGetByVal(Instruction*, PatchableJump& badType, TypedArrayType type)
 {
+    ASSERT(isFloat(type));
+    
 #if USE(JSVALUE64)
     RegisterID base = regT0;
     RegisterID property = regT1;
@@ -1758,11 +1717,11 @@ JIT::JumpList JIT::emitFloatTypedArrayGetByVal(Instruction*, PatchableJump& badT
     JumpList slowCases;
     
     loadPtr(Address(base, JSCell::structureOffset()), scratch);
-    badType = patchableBranchPtr(NotEqual, Address(scratch, Structure::classInfoOffset()), TrustedImmPtr(descriptor.m_classInfo));
-    slowCases.append(branch32(AboveOrEqual, property, Address(base, descriptor.m_lengthOffset)));
-    loadPtr(Address(base, descriptor.m_storageOffset), base);
+    badType = patchableBranchPtr(NotEqual, Address(scratch, Structure::classInfoOffset()), TrustedImmPtr(