JSGenericTypedArrayViewConstructor.h
1 /* 2 * Copyright (C) 2013-2015 Apple Inc. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 1. Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer. 9 * 2. Redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the 11 * documentation and/or other materials provided with the distribution. 12 * 13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY 14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR 17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 */ 25 26 #pragma once 27 28 #include "InternalFunction.h" 29 30 namespace JSC { 31 32 JS_EXPORT_PRIVATE JSC_DECLARE_HOST_FUNCTION(callInt8Array); 33 JS_EXPORT_PRIVATE JSC_DECLARE_HOST_FUNCTION(callInt16Array); 34 JS_EXPORT_PRIVATE JSC_DECLARE_HOST_FUNCTION(callInt32Array); 35 JS_EXPORT_PRIVATE JSC_DECLARE_HOST_FUNCTION(callUint8Array); 36 JS_EXPORT_PRIVATE JSC_DECLARE_HOST_FUNCTION(callUint8ClampedArray); 37 JS_EXPORT_PRIVATE JSC_DECLARE_HOST_FUNCTION(callUint16Array); 38 JS_EXPORT_PRIVATE JSC_DECLARE_HOST_FUNCTION(callUint32Array); 39 JS_EXPORT_PRIVATE JSC_DECLARE_HOST_FUNCTION(callFloat32Array); 40 JS_EXPORT_PRIVATE JSC_DECLARE_HOST_FUNCTION(callFloat64Array); 41 JS_EXPORT_PRIVATE JSC_DECLARE_HOST_FUNCTION(callDataView); 42 43 JS_EXPORT_PRIVATE JSC_DECLARE_HOST_FUNCTION(constructInt8Array); 44 JS_EXPORT_PRIVATE JSC_DECLARE_HOST_FUNCTION(constructInt16Array); 45 JS_EXPORT_PRIVATE JSC_DECLARE_HOST_FUNCTION(constructInt32Array); 46 JS_EXPORT_PRIVATE JSC_DECLARE_HOST_FUNCTION(constructUint8Array); 47 JS_EXPORT_PRIVATE JSC_DECLARE_HOST_FUNCTION(constructUint8ClampedArray); 48 JS_EXPORT_PRIVATE JSC_DECLARE_HOST_FUNCTION(constructUint16Array); 49 JS_EXPORT_PRIVATE JSC_DECLARE_HOST_FUNCTION(constructUint32Array); 50 JS_EXPORT_PRIVATE JSC_DECLARE_HOST_FUNCTION(constructFloat32Array); 51 JS_EXPORT_PRIVATE JSC_DECLARE_HOST_FUNCTION(constructFloat64Array); 52 JS_EXPORT_PRIVATE JSC_DECLARE_HOST_FUNCTION(constructDataView); 53 54 template<typename ViewClass> 55 class JSGenericTypedArrayViewConstructor final : public InternalFunction { 56 public: 57 using Base = InternalFunction; 58 59 static JSGenericTypedArrayViewConstructor* create( 60 VM&, JSGlobalObject*, Structure*, JSObject* prototype, const String& name); 61 62 // FIXME: We should fix the warnings for extern-template in JSObject template classes: https://bugs.webkit.org/show_bug.cgi?id=161979 63 IGNORE_CLANG_WARNINGS_BEGIN("undefined-var-template") 64 DECLARE_INFO; 65 IGNORE_CLANG_WARNINGS_END 66 67 static Structure* createStructure(VM&, JSGlobalObject*, JSValue prototype); 68 69 static constexpr RawNativeFunction callConstructor() 70 { 71 switch (ViewClass::TypedArrayStorageType) { 72 case TypeInt8: 73 return callInt8Array; 74 case TypeInt16: 75 return callInt16Array; 76 case TypeInt32: 77 return callInt32Array; 78 case TypeUint8: 79 return callUint8Array; 80 case TypeUint8Clamped: 81 return callUint8ClampedArray; 82 case TypeUint16: 83 return callUint16Array; 84 case TypeUint32: 85 return callUint32Array; 86 case TypeFloat32: 87 return callFloat32Array; 88 case TypeFloat64: 89 return callFloat64Array; 90 case TypeDataView: 91 return callDataView; 92 default: 93 CRASH_UNDER_CONSTEXPR_CONTEXT(); 94 return nullptr; 95 } 96 } 97 98 static constexpr RawNativeFunction constructConstructor() 99 { 100 switch (ViewClass::TypedArrayStorageType) { 101 case TypeInt8: 102 return constructInt8Array; 103 case TypeInt16: 104 return constructInt16Array; 105 case TypeInt32: 106 return constructInt32Array; 107 case TypeUint8: 108 return constructUint8Array; 109 case TypeUint8Clamped: 110 return constructUint8ClampedArray; 111 case TypeUint16: 112 return constructUint16Array; 113 case TypeUint32: 114 return constructUint32Array; 115 case TypeFloat32: 116 return constructFloat32Array; 117 case TypeFloat64: 118 return constructFloat64Array; 119 case TypeDataView: 120 return constructDataView; 121 default: 122 CRASH_UNDER_CONSTEXPR_CONTEXT(); 123 return nullptr; 124 } 125 } 126 127 private: 128 JSGenericTypedArrayViewConstructor(VM&, Structure*); 129 void finishCreation(VM&, JSGlobalObject*, JSObject* prototype, const String& name); 130 }; 131 132 } // namespace JSC