Skip to content

WIP: Test vs2022 17.13.2 clang 20.1.3 #5

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 4 commits into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions build.properties
Original file line number Diff line number Diff line change
Expand Up @@ -104,12 +104,12 @@ jfx.gradle.version.min=8.5

# Toolchains
jfx.build.linux.gcc.version=gcc13.2.0-OL6.4+1.0
jfx.build.windows.msvc.version=VS2022-17.6.5+1.0
jfx.build.windows.msvc.version=VS2022-17.13.2+1.0
jfx.build.macosx.xcode.version=Xcode14.3.1+1.0

# Build tools
jfx.build.cmake.version=3.22.3
jfx.build.clang.version=19.1.7
jfx.build.clang.version=20.1.3
jfx.build.ninja.version=1.8.2
jfx.build.ant.version=1.10.5

Expand Down
12 changes: 6 additions & 6 deletions gradle/verification-metadata.xml
Original file line number Diff line number Diff line change
Expand Up @@ -120,9 +120,9 @@
<sha256 value="0018b369f06646d4784fad131a155333c9d59a03dee6390324f81b9df72a2f00" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="javafx" name="clang+llvm-19.1.7-x86_64-pc-windows" version="msvc">
<artifact name="clang+llvm-19.1.7-x86_64-pc-windows-msvc.zip">
<sha256 value="948ee93398f9d9c743015d57b74ca2850fb73e74b3fc73d4b4787e7eafdeb25a" origin="Generated by Gradle"/>
<component group="javafx" name="clang+llvm-20.1.3-x86_64-pc-windows" version="msvc">
<artifact name="clang+llvm-20.1.3-x86_64-pc-windows-msvc.zip">
<sha256 value="e79a66a63849e3ecbb09074fe33371cc71101a3b7f304984308aaea47888bd80" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="javafx" name="devkit-linux_x64-gcc13.2.0" version="OL6.4+1.0.tar">
Expand All @@ -135,9 +135,9 @@
<sha256 value="6b8ac317a9c2f255060067cfa596d94f6635d51f2eb5c08fe05110cf99e1ac14" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="javafx" name="devkit-windows_x64-VS2022" version="17.6.5+1.0.tar">
<artifact name="devkit-windows_x64-VS2022-17.6.5+1.0.tar.gz">
<sha256 value="2a8df69e6035788f8b9b20d23beaf3e5cbc64f17c78e9012db1689b677e712dd" origin="Generated by Gradle"/>
<component group="javafx" name="devkit-windows_x64-VS2022" version="17.13.2+1.0.tar">
<artifact name="devkit-windows_x64-VS2022-17.13.2+1.0.tar.gz">
<sha256 value="54e11e7947defa52bded28a8e2fc251f6f2f598aadf7792b0577d488a9990e75" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="javafx" name="jdk-23_doc" version="all">
Expand Down
88 changes: 81 additions & 7 deletions modules/javafx.web/src/main/native/Source/WTF/wtf/EnumTraits.h
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,16 @@ constexpr bool isZeroBasedContiguousEnum()
#pragma clang diagnostic ignored "-Wenum-constexpr-conversion"
#endif

#if COMPILER(CLANG) && __clang_major__ >= 16
template <typename E, auto V, typename = void>
inline constexpr bool isEnumConstexprStaticCastValid = false;
template <typename E, auto V>
inline constexpr bool isEnumConstexprStaticCastValid<E, V, std::void_t<std::integral_constant<E, static_cast<E>(V)>>> = true;
#else
template <typename, auto>
inline constexpr bool isEnumConstexprStaticCastValid = true;
#endif

template<typename E>
constexpr std::span<const char> enumTypeNameImpl()
{
Expand Down Expand Up @@ -224,6 +234,15 @@ constexpr std::span<const char> enumName()
return result;
}

template<typename E, auto V>
constexpr std::span<const char> enumName()
{
if constexpr (isEnumConstexprStaticCastValid<E, V>)
return enumName<static_cast<E>(V)>();
else
return { };
}

namespace detail {

template<size_t i, size_t end>
Expand All @@ -237,17 +256,72 @@ constexpr void forConstexpr(const auto& func)

}

template<typename E, size_t limit = 256>
constexpr std::array<std::span<const char>, limit> enumNames()
// template<typename E, size_t limit = 256>
// constexpr std::array<std::span<const char>, limit> enumNames()
// {
// std::array<std::span<const char>, limit> names;

// detail::forConstexpr<0, limit>([&] (auto i) {
// names[i] = enumName<static_cast<E>(static_cast<unsigned>(i))>();
// });
// return names;
// }
template<typename E>
constexpr std::underlying_type_t<E> enumNamesMin()
{
std::array<std::span<const char>, limit> names;
using Underlying = std::underlying_type_t<E>;

if constexpr (requires { EnumTraits<E>::min; }) {
static_assert(std::is_same_v<std::remove_cv_t<decltype(EnumTraits<E>::min)>, Underlying>,
"EnumTraits<E>::min must have the same type as the underlying type of the enum.");
return EnumTraits<E>::min;
}

detail::forConstexpr<0, limit>([&] (auto i) {
names[i] = enumName<static_cast<E>(static_cast<unsigned>(i))>();
});
return names;
// Default for both signed and unsigned enums.
return 0;
}

template<typename E>
constexpr std::underlying_type_t<E> enumNamesMax()
{
using Underlying = std::underlying_type_t<E>;

if constexpr (requires { EnumTraits<E>::max; }) {
static_assert(std::is_same_v<std::remove_cv_t<decltype(EnumTraits<E>::max)>, Underlying>,
"EnumTraits<E>::max must have the same type as the underlying type of the enum.");
return EnumTraits<E>::max;
}

constexpr Underlying defaultMax = std::is_signed_v<Underlying>
? static_cast<Underlying>(INT8_MAX) : static_cast<Underlying>(UINT8_MAX);
constexpr Underlying computedMax = (sizeof(E) > 1) ? static_cast<Underlying>(defaultMax << 1) : defaultMax;
return computedMax;
}

template<typename E>
constexpr size_t enumNamesSize()
{
constexpr auto min = enumNamesMin<E>();
constexpr auto max = enumNamesMax<E>();
static_assert(min <= max, "Invalid enum range: min must be <= max.");
return static_cast<size_t>(max - min) + 1;
}

template<typename E, size_t... Is>
constexpr auto makeEnumNames(std::index_sequence<Is...>)
{
constexpr auto min = enumNamesMin<E>();
return std::array<std::span<const char>, sizeof...(Is)> {
enumName<E, static_cast<std::underlying_type_t<E>>(Is) + min>()...
};
}

template<typename E>
constexpr auto enumNames()
{
constexpr size_t size = enumNamesSize<E>();
return makeEnumNames<E>(std::make_index_sequence<size> { });
}

template<typename T>
constexpr std::span<const char> enumName(T v)
Expand Down