Skip to content

Commit fb89e58

Browse files
Pre-declare TypedArray specializations
These are referenced in the header implementation of some templated functions in TypedArray, so permissive- flags on them since they're technically not properly in scope at this point.
1 parent 7a30945 commit fb89e58

File tree

1 file changed

+51
-23
lines changed

1 file changed

+51
-23
lines changed

lib/Runtime/Library/TypedArray.h

Lines changed: 51 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,34 @@ namespace Js
217217
};
218218

219219
template <typename TypeName, bool clamped = false, bool virtualAllocated = false>
220+
class TypedArray;
221+
222+
// These are referenced in the TypedArray implementation, so we need to forward-typedef these.
223+
224+
typedef TypedArray<int8> Int8Array;
225+
typedef TypedArray<uint8,false> Uint8Array;
226+
typedef TypedArray<uint8,true> Uint8ClampedArray;
227+
typedef TypedArray<int16> Int16Array;
228+
typedef TypedArray<uint16> Uint16Array;
229+
typedef TypedArray<int32> Int32Array;
230+
typedef TypedArray<uint32> Uint32Array;
231+
typedef TypedArray<float> Float32Array;
232+
typedef TypedArray<double> Float64Array;
233+
typedef TypedArray<int64> Int64Array;
234+
typedef TypedArray<uint64> Uint64Array;
235+
typedef TypedArray<bool> BoolArray;
236+
typedef TypedArray<int8, false, true> Int8VirtualArray;
237+
typedef TypedArray<uint8, false, true> Uint8VirtualArray;
238+
typedef TypedArray<uint8, true, true> Uint8ClampedVirtualArray;
239+
typedef TypedArray<int16, false, true> Int16VirtualArray;
240+
typedef TypedArray<uint16, false, true> Uint16VirtualArray;
241+
typedef TypedArray<int32, false, true> Int32VirtualArray;
242+
typedef TypedArray<uint32, false, true> Uint32VirtualArray;
243+
typedef TypedArray<float, false, true> Float32VirtualArray;
244+
typedef TypedArray<double, false, true> Float64VirtualArray;
245+
246+
247+
template <typename TypeName, bool clamped /*= false*/, bool virtualAllocated /*= false*/>
220248
class TypedArray : public TypedArrayBase
221249
{
222250
protected:
@@ -625,34 +653,34 @@ namespace Js
625653

626654
#if defined(__clang__)
627655
// hack for clang message: "...add an explicit instantiation declaration to .."
628-
#define __EXPLICIT_INSTANTINATE_TA(x) x;\
656+
#define __EXPLICIT_INSTANTINATE_TA(x) \
629657
template<> FunctionInfo Js::x::EntryInfo::NewInstance;\
630658
template<> FunctionInfo Js::x::EntryInfo::Set
631659
#else // MSVC
632-
#define __EXPLICIT_INSTANTINATE_TA(x) x
660+
#define __EXPLICIT_INSTANTINATE_TA(x)
633661
#endif
634662

635-
typedef TypedArray<int8> __EXPLICIT_INSTANTINATE_TA(Int8Array);
636-
typedef TypedArray<uint8,false> __EXPLICIT_INSTANTINATE_TA(Uint8Array);
637-
typedef TypedArray<uint8,true> __EXPLICIT_INSTANTINATE_TA(Uint8ClampedArray);
638-
typedef TypedArray<int16> __EXPLICIT_INSTANTINATE_TA(Int16Array);
639-
typedef TypedArray<uint16> __EXPLICIT_INSTANTINATE_TA(Uint16Array);
640-
typedef TypedArray<int32> __EXPLICIT_INSTANTINATE_TA(Int32Array);
641-
typedef TypedArray<uint32> __EXPLICIT_INSTANTINATE_TA(Uint32Array);
642-
typedef TypedArray<float> __EXPLICIT_INSTANTINATE_TA(Float32Array);
643-
typedef TypedArray<double> __EXPLICIT_INSTANTINATE_TA(Float64Array);
644-
typedef TypedArray<int64> __EXPLICIT_INSTANTINATE_TA(Int64Array);
645-
typedef TypedArray<uint64> __EXPLICIT_INSTANTINATE_TA(Uint64Array);
646-
typedef TypedArray<bool> __EXPLICIT_INSTANTINATE_TA(BoolArray);
647-
typedef TypedArray<int8, false, true> __EXPLICIT_INSTANTINATE_TA(Int8VirtualArray);
648-
typedef TypedArray<uint8, false, true> __EXPLICIT_INSTANTINATE_TA(Uint8VirtualArray);
649-
typedef TypedArray<uint8, true, true> __EXPLICIT_INSTANTINATE_TA(Uint8ClampedVirtualArray);
650-
typedef TypedArray<int16, false, true> __EXPLICIT_INSTANTINATE_TA(Int16VirtualArray);
651-
typedef TypedArray<uint16, false, true> __EXPLICIT_INSTANTINATE_TA(Uint16VirtualArray);
652-
typedef TypedArray<int32, false, true> __EXPLICIT_INSTANTINATE_TA(Int32VirtualArray);
653-
typedef TypedArray<uint32, false, true> __EXPLICIT_INSTANTINATE_TA(Uint32VirtualArray);
654-
typedef TypedArray<float, false, true> __EXPLICIT_INSTANTINATE_TA(Float32VirtualArray);
655-
typedef TypedArray<double, false, true> __EXPLICIT_INSTANTINATE_TA(Float64VirtualArray);
663+
__EXPLICIT_INSTANTINATE_TA(Int8Array);
664+
__EXPLICIT_INSTANTINATE_TA(Uint8Array);
665+
__EXPLICIT_INSTANTINATE_TA(Uint8ClampedArray);
666+
__EXPLICIT_INSTANTINATE_TA(Int16Array);
667+
__EXPLICIT_INSTANTINATE_TA(Uint16Array);
668+
__EXPLICIT_INSTANTINATE_TA(Int32Array);
669+
__EXPLICIT_INSTANTINATE_TA(Uint32Array);
670+
__EXPLICIT_INSTANTINATE_TA(Float32Array);
671+
__EXPLICIT_INSTANTINATE_TA(Float64Array);
672+
__EXPLICIT_INSTANTINATE_TA(Int64Array);
673+
__EXPLICIT_INSTANTINATE_TA(Uint64Array);
674+
__EXPLICIT_INSTANTINATE_TA(BoolArray);
675+
__EXPLICIT_INSTANTINATE_TA(Int8VirtualArray);
676+
__EXPLICIT_INSTANTINATE_TA(Uint8VirtualArray);
677+
__EXPLICIT_INSTANTINATE_TA(Uint8ClampedVirtualArray);
678+
__EXPLICIT_INSTANTINATE_TA(Int16VirtualArray);
679+
__EXPLICIT_INSTANTINATE_TA(Uint16VirtualArray);
680+
__EXPLICIT_INSTANTINATE_TA(Int32VirtualArray);
681+
__EXPLICIT_INSTANTINATE_TA(Uint32VirtualArray);
682+
__EXPLICIT_INSTANTINATE_TA(Float32VirtualArray);
683+
__EXPLICIT_INSTANTINATE_TA(Float64VirtualArray);
656684

657685
#undef __EXPLICIT_INSTANTINATE_TA
658686
}

0 commit comments

Comments
 (0)