mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-08-15 23:09:05 +00:00
LibWeb: Improve Enum generation in IDLGenerator
Generated enums have no underlying type specifier, this adds one It uses the smallest available, which is mostly u8
This commit is contained in:
parent
c276cc43f0
commit
4c54fa10ed
Notes:
github-actions[bot]
2025-03-04 16:36:05 +00:00
Author: https://github.com/Totto16
Commit: 4c54fa10ed
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/3799
Reviewed-by: https://github.com/AtkinsSJ ✅
3 changed files with 45 additions and 29 deletions
|
@ -6,10 +6,12 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <AK/Types.h>
|
||||||
|
|
||||||
namespace Web::Bindings {
|
namespace Web::Bindings {
|
||||||
|
|
||||||
// https://w3c.github.io/encrypted-media/#dom-mediakeysrequirement
|
// https://w3c.github.io/encrypted-media/#dom-mediakeysrequirement
|
||||||
enum class MediaKeysRequirement {
|
enum class MediaKeysRequirement : u8 {
|
||||||
Required,
|
Required,
|
||||||
Optional,
|
Optional,
|
||||||
NotAllowed
|
NotAllowed
|
||||||
|
|
|
@ -59,33 +59,33 @@ namespace Web::Bindings {
|
||||||
class Intrinsics;
|
class Intrinsics;
|
||||||
class OptionConstructor;
|
class OptionConstructor;
|
||||||
|
|
||||||
enum class AudioContextLatencyCategory;
|
enum class AudioContextLatencyCategory : u8;
|
||||||
enum class CanPlayTypeResult;
|
enum class CanPlayTypeResult : u8;
|
||||||
enum class CanvasFillRule;
|
enum class CanvasFillRule : u8;
|
||||||
enum class CanvasTextAlign;
|
enum class CanvasTextAlign : u8;
|
||||||
enum class CanvasTextBaseline;
|
enum class CanvasTextBaseline : u8;
|
||||||
enum class ColorGamut;
|
enum class ColorGamut : u8;
|
||||||
enum class DOMParserSupportedType;
|
enum class DOMParserSupportedType : u8;
|
||||||
enum class EndingType;
|
enum class EndingType : u8;
|
||||||
enum class HdrMetadataType;
|
enum class HdrMetadataType : u8;
|
||||||
enum class ImageSmoothingQuality;
|
enum class ImageSmoothingQuality : u8;
|
||||||
enum class MediaDecodingType;
|
enum class MediaDecodingType : u8;
|
||||||
enum class MediaEncodingType;
|
enum class MediaEncodingType : u8;
|
||||||
enum class MediaKeysRequirement;
|
enum class MediaKeysRequirement : u8;
|
||||||
enum class ReadableStreamReaderMode;
|
enum class ReadableStreamReaderMode : u8;
|
||||||
enum class ReferrerPolicy;
|
enum class ReferrerPolicy : u8;
|
||||||
enum class RequestCache;
|
enum class RequestCache : u8;
|
||||||
enum class RequestCredentials;
|
enum class RequestCredentials : u8;
|
||||||
enum class RequestDestination;
|
enum class RequestDestination : u8;
|
||||||
enum class RequestDuplex;
|
enum class RequestDuplex : u8;
|
||||||
enum class RequestMode;
|
enum class RequestMode : u8;
|
||||||
enum class RequestPriority;
|
enum class RequestPriority : u8;
|
||||||
enum class RequestRedirect;
|
enum class RequestRedirect : u8;
|
||||||
enum class ResizeObserverBoxOptions;
|
enum class ResizeObserverBoxOptions : u8;
|
||||||
enum class ResponseType;
|
enum class ResponseType : u8;
|
||||||
enum class TextTrackKind;
|
enum class TextTrackKind : u8;
|
||||||
enum class TransferFunction;
|
enum class TransferFunction : u8;
|
||||||
enum class XMLHttpRequestResponseType;
|
enum class XMLHttpRequestResponseType : u8;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace Web::Clipboard {
|
namespace Web::Clipboard {
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
#include "Namespaces.h"
|
#include "Namespaces.h"
|
||||||
#include <AK/Array.h>
|
#include <AK/Array.h>
|
||||||
#include <AK/LexicalPath.h>
|
#include <AK/LexicalPath.h>
|
||||||
|
#include <AK/NumericLimits.h>
|
||||||
#include <AK/Queue.h>
|
#include <AK/Queue.h>
|
||||||
#include <AK/QuickSort.h>
|
#include <AK/QuickSort.h>
|
||||||
#include <LibIDL/Types.h>
|
#include <LibIDL/Types.h>
|
||||||
|
@ -2856,6 +2857,18 @@ JS::ThrowCompletionOr<GC::Ref<JS::Object>> @constructor_class@::construct([[mayb
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static ByteString get_best_value_for_underlying_enum_type(size_t size)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (size < NumericLimits<u8>::max()) {
|
||||||
|
return "u8";
|
||||||
|
} else if (size < NumericLimits<u16>::max()) {
|
||||||
|
return "u16";
|
||||||
|
}
|
||||||
|
|
||||||
|
VERIFY_NOT_REACHED();
|
||||||
|
}
|
||||||
|
|
||||||
static void generate_enumerations(HashMap<ByteString, Enumeration> const& enumerations, StringBuilder& builder)
|
static void generate_enumerations(HashMap<ByteString, Enumeration> const& enumerations, StringBuilder& builder)
|
||||||
{
|
{
|
||||||
SourceGenerator generator { builder };
|
SourceGenerator generator { builder };
|
||||||
|
@ -2865,8 +2878,9 @@ static void generate_enumerations(HashMap<ByteString, Enumeration> const& enumer
|
||||||
continue;
|
continue;
|
||||||
auto enum_generator = generator.fork();
|
auto enum_generator = generator.fork();
|
||||||
enum_generator.set("enum.type.name", it.key);
|
enum_generator.set("enum.type.name", it.key);
|
||||||
|
enum_generator.set("enum.underlying_type", get_best_value_for_underlying_enum_type(it.value.translated_cpp_names.size()));
|
||||||
enum_generator.append(R"~~~(
|
enum_generator.append(R"~~~(
|
||||||
enum class @enum.type.name@ {
|
enum class @enum.type.name@ : @enum.underlying_type@ {
|
||||||
)~~~");
|
)~~~");
|
||||||
for (auto const& entry : it.value.translated_cpp_names) {
|
for (auto const& entry : it.value.translated_cpp_names) {
|
||||||
enum_generator.set("enum.entry", entry.value);
|
enum_generator.set("enum.entry", entry.value);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue