Coverage Report

Created: 2025-11-02 07:25

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/serenity/AK/EnumBits.h
Line
Count
Source
1
/*
2
 * Copyright (c) 2021, Brian Gianforcaro <bgianf@serenityos.org>
3
 *
4
 * SPDX-License-Identifier: BSD-2-Clause
5
 */
6
7
#pragma once
8
9
#include <AK/StdLibExtraDetails.h>
10
11
// Enables bitwise operators for the specified Enum type.
12
//
13
#define AK_ENUM_BITWISE_OPERATORS(Enum) \
14
    _AK_ENUM_BITWISE_OPERATORS_INTERNAL(Enum, )
15
16
// Enables bitwise operators for the specified Enum type, this
17
// version is meant for use on enums which are private to the
18
// containing type.
19
//
20
#define AK_ENUM_BITWISE_FRIEND_OPERATORS(Enum) \
21
    _AK_ENUM_BITWISE_OPERATORS_INTERNAL(Enum, friend)
22
23
#define _AK_ENUM_BITWISE_OPERATORS_INTERNAL(Enum, Prefix)                  \
24
                                                                           \
25
    [[nodiscard]] Prefix constexpr Enum operator|(Enum lhs, Enum rhs)      \
26
12
    {                                                                      \
27
12
        using Type = UnderlyingType<Enum>;                                 \
28
12
        return static_cast<Enum>(                                          \
29
12
            static_cast<Type>(lhs) | static_cast<Type>(rhs));              \
30
12
    }                                                                      \
Unexecuted instantiation: AK::operator|(AK::SplitBehavior, AK::SplitBehavior)
Unexecuted instantiation: Core::operator|(Core::NotificationType, Core::NotificationType)
Unexecuted instantiation: Core::operator|(Core::File::OpenMode, Core::File::OpenMode)
Unexecuted instantiation: Gfx::operator|(Gfx::ViewportMode, Gfx::ViewportMode)
Unexecuted instantiation: FileSystem::operator|(FileSystem::PreserveMode, FileSystem::PreserveMode)
AK::operator|(AK::CPUFeatures, AK::CPUFeatures)
Line
Count
Source
26
12
    {                                                                      \
27
12
        using Type = UnderlyingType<Enum>;                                 \
28
12
        return static_cast<Enum>(                                          \
29
12
            static_cast<Type>(lhs) | static_cast<Type>(rhs));              \
30
12
    }                                                                      \
Unexecuted instantiation: JS::operator|(JS::RegExpObject::Flags, JS::RegExpObject::Flags)
Unexecuted instantiation: Audio::MP3::operator|(Audio::MP3::ModeExtension, Audio::MP3::ModeExtension)
Unexecuted instantiation: Web::HTML::operator|(Web::HTML::SandboxingFlagSet, Web::HTML::SandboxingFlagSet)
Unexecuted instantiation: operator|(KeyModifier, KeyModifier)
Unexecuted instantiation: Web::UIEvents::operator|(Web::UIEvents::MouseButton, Web::UIEvents::MouseButton)
Unexecuted instantiation: Web::DOM::operator|(Web::DOM::NodeFilter::WhatToShow, Web::DOM::NodeFilter::WhatToShow)
31
                                                                           \
32
    [[nodiscard]] Prefix constexpr Enum operator&(Enum lhs, Enum rhs)      \
33
3.94M
    {                                                                      \
34
3.94M
        using Type = UnderlyingType<Enum>;                                 \
35
3.94M
        return static_cast<Enum>(                                          \
36
3.94M
            static_cast<Type>(lhs) & static_cast<Type>(rhs));              \
37
3.94M
    }                                                                      \
AK::operator&(AK::SplitBehavior, AK::SplitBehavior)
Line
Count
Source
33
3.84M
    {                                                                      \
34
3.84M
        using Type = UnderlyingType<Enum>;                                 \
35
3.84M
        return static_cast<Enum>(                                          \
36
3.84M
            static_cast<Type>(lhs) & static_cast<Type>(rhs));              \
37
3.84M
    }                                                                      \
Unexecuted instantiation: Core::operator&(Core::NotificationType, Core::NotificationType)
Unexecuted instantiation: Core::operator&(Core::File::OpenMode, Core::File::OpenMode)
Gfx::operator&(Gfx::ViewportMode, Gfx::ViewportMode)
Line
Count
Source
33
26.6k
    {                                                                      \
34
26.6k
        using Type = UnderlyingType<Enum>;                                 \
35
26.6k
        return static_cast<Enum>(                                          \
36
26.6k
            static_cast<Type>(lhs) & static_cast<Type>(rhs));              \
37
26.6k
    }                                                                      \
Unexecuted instantiation: FileSystem::operator&(FileSystem::PreserveMode, FileSystem::PreserveMode)
AK::operator&(AK::CPUFeatures, AK::CPUFeatures)
Line
Count
Source
33
20
    {                                                                      \
34
20
        using Type = UnderlyingType<Enum>;                                 \
35
20
        return static_cast<Enum>(                                          \
36
20
            static_cast<Type>(lhs) & static_cast<Type>(rhs));              \
37
20
    }                                                                      \
Unexecuted instantiation: JS::operator&(JS::RegExpObject::Flags, JS::RegExpObject::Flags)
Audio::MP3::operator&(Audio::MP3::ModeExtension, Audio::MP3::ModeExtension)
Line
Count
Source
33
76.6k
    {                                                                      \
34
76.6k
        using Type = UnderlyingType<Enum>;                                 \
35
76.6k
        return static_cast<Enum>(                                          \
36
76.6k
            static_cast<Type>(lhs) & static_cast<Type>(rhs));              \
37
76.6k
    }                                                                      \
Unexecuted instantiation: Web::HTML::operator&(Web::HTML::SandboxingFlagSet, Web::HTML::SandboxingFlagSet)
Unexecuted instantiation: operator&(KeyModifier, KeyModifier)
Unexecuted instantiation: Web::UIEvents::operator&(Web::UIEvents::MouseButton, Web::UIEvents::MouseButton)
Unexecuted instantiation: Web::DOM::operator&(Web::DOM::NodeFilter::WhatToShow, Web::DOM::NodeFilter::WhatToShow)
38
                                                                           \
39
    [[nodiscard]] Prefix constexpr Enum operator^(Enum lhs, Enum rhs)      \
40
0
    {                                                                      \
41
0
        using Type = UnderlyingType<Enum>;                                 \
42
0
        return static_cast<Enum>(                                          \
43
0
            static_cast<Type>(lhs) ^ static_cast<Type>(rhs));              \
44
0
    }                                                                      \
Unexecuted instantiation: AK::operator^(AK::SplitBehavior, AK::SplitBehavior)
Unexecuted instantiation: Core::operator^(Core::NotificationType, Core::NotificationType)
Unexecuted instantiation: Core::operator^(Core::File::OpenMode, Core::File::OpenMode)
Unexecuted instantiation: Gfx::operator^(Gfx::ViewportMode, Gfx::ViewportMode)
Unexecuted instantiation: FileSystem::operator^(FileSystem::PreserveMode, FileSystem::PreserveMode)
Unexecuted instantiation: AK::operator^(AK::CPUFeatures, AK::CPUFeatures)
Unexecuted instantiation: JS::operator^(JS::RegExpObject::Flags, JS::RegExpObject::Flags)
Unexecuted instantiation: Audio::MP3::operator^(Audio::MP3::ModeExtension, Audio::MP3::ModeExtension)
Unexecuted instantiation: Web::HTML::operator^(Web::HTML::SandboxingFlagSet, Web::HTML::SandboxingFlagSet)
Unexecuted instantiation: operator^(KeyModifier, KeyModifier)
Unexecuted instantiation: Web::UIEvents::operator^(Web::UIEvents::MouseButton, Web::UIEvents::MouseButton)
Unexecuted instantiation: Web::DOM::operator^(Web::DOM::NodeFilter::WhatToShow, Web::DOM::NodeFilter::WhatToShow)
45
                                                                           \
46
    [[nodiscard]] Prefix constexpr Enum operator~(Enum rhs)                \
47
0
    {                                                                      \
48
0
        using Type = UnderlyingType<Enum>;                                 \
49
0
        return static_cast<Enum>(                                          \
50
0
            ~static_cast<Type>(rhs));                                      \
51
0
    }                                                                      \
Unexecuted instantiation: AK::operator~(AK::SplitBehavior)
Unexecuted instantiation: Core::operator~(Core::NotificationType)
Unexecuted instantiation: Core::operator~(Core::File::OpenMode)
Unexecuted instantiation: Gfx::operator~(Gfx::ViewportMode)
Unexecuted instantiation: FileSystem::operator~(FileSystem::PreserveMode)
Unexecuted instantiation: AK::operator~(AK::CPUFeatures)
Unexecuted instantiation: JS::operator~(JS::RegExpObject::Flags)
Unexecuted instantiation: Audio::MP3::operator~(Audio::MP3::ModeExtension)
Unexecuted instantiation: Web::HTML::operator~(Web::HTML::SandboxingFlagSet)
Unexecuted instantiation: operator~(KeyModifier)
Unexecuted instantiation: Web::UIEvents::operator~(Web::UIEvents::MouseButton)
Unexecuted instantiation: Web::DOM::operator~(Web::DOM::NodeFilter::WhatToShow)
52
                                                                           \
53
    Prefix constexpr Enum& operator|=(Enum& lhs, Enum rhs)                 \
54
20
    {                                                                      \
55
20
        using Type = UnderlyingType<Enum>;                                 \
56
20
        lhs = static_cast<Enum>(                                           \
57
20
            static_cast<Type>(lhs) | static_cast<Type>(rhs));              \
58
20
        return lhs;                                                        \
59
20
    }                                                                      \
Unexecuted instantiation: AK::operator|=(AK::SplitBehavior&, AK::SplitBehavior)
Unexecuted instantiation: Core::operator|=(Core::NotificationType&, Core::NotificationType)
Unexecuted instantiation: Core::operator|=(Core::File::OpenMode&, Core::File::OpenMode)
Unexecuted instantiation: Gfx::operator|=(Gfx::ViewportMode&, Gfx::ViewportMode)
Unexecuted instantiation: FileSystem::operator|=(FileSystem::PreserveMode&, FileSystem::PreserveMode)
AK::operator|=(AK::CPUFeatures&, AK::CPUFeatures)
Line
Count
Source
54
20
    {                                                                      \
55
20
        using Type = UnderlyingType<Enum>;                                 \
56
20
        lhs = static_cast<Enum>(                                           \
57
20
            static_cast<Type>(lhs) | static_cast<Type>(rhs));              \
58
20
        return lhs;                                                        \
59
20
    }                                                                      \
Unexecuted instantiation: JS::operator|=(JS::RegExpObject::Flags&, JS::RegExpObject::Flags)
Unexecuted instantiation: Audio::MP3::operator|=(Audio::MP3::ModeExtension&, Audio::MP3::ModeExtension)
Unexecuted instantiation: Web::HTML::operator|=(Web::HTML::SandboxingFlagSet&, Web::HTML::SandboxingFlagSet)
Unexecuted instantiation: operator|=(KeyModifier&, KeyModifier)
Unexecuted instantiation: Web::UIEvents::operator|=(Web::UIEvents::MouseButton&, Web::UIEvents::MouseButton)
Unexecuted instantiation: Web::DOM::operator|=(Web::DOM::NodeFilter::WhatToShow&, Web::DOM::NodeFilter::WhatToShow)
60
                                                                           \
61
    Prefix inline void operator|=(Enum volatile& lhs, Enum rhs)            \
62
0
    {                                                                      \
63
0
        using Type = UnderlyingType<Enum>;                                 \
64
0
        lhs = static_cast<Enum>(                                           \
65
0
            static_cast<Type>(lhs) | static_cast<Type>(rhs));              \
66
0
    }                                                                      \
Unexecuted instantiation: AK::operator|=(AK::SplitBehavior volatile&, AK::SplitBehavior)
Unexecuted instantiation: Core::operator|=(Core::NotificationType volatile&, Core::NotificationType)
Unexecuted instantiation: Core::operator|=(Core::File::OpenMode volatile&, Core::File::OpenMode)
Unexecuted instantiation: Gfx::operator|=(Gfx::ViewportMode volatile&, Gfx::ViewportMode)
Unexecuted instantiation: FileSystem::operator|=(FileSystem::PreserveMode volatile&, FileSystem::PreserveMode)
Unexecuted instantiation: AK::operator|=(AK::CPUFeatures volatile&, AK::CPUFeatures)
Unexecuted instantiation: JS::operator|=(JS::RegExpObject::Flags volatile&, JS::RegExpObject::Flags)
Unexecuted instantiation: Audio::MP3::operator|=(Audio::MP3::ModeExtension volatile&, Audio::MP3::ModeExtension)
Unexecuted instantiation: Web::HTML::operator|=(Web::HTML::SandboxingFlagSet volatile&, Web::HTML::SandboxingFlagSet)
Unexecuted instantiation: operator|=(KeyModifier volatile&, KeyModifier)
Unexecuted instantiation: Web::UIEvents::operator|=(Web::UIEvents::MouseButton volatile&, Web::UIEvents::MouseButton)
Unexecuted instantiation: Web::DOM::operator|=(Web::DOM::NodeFilter::WhatToShow volatile&, Web::DOM::NodeFilter::WhatToShow)
67
                                                                           \
68
    Prefix constexpr Enum& operator&=(Enum& lhs, Enum rhs)                 \
69
0
    {                                                                      \
70
0
        using Type = UnderlyingType<Enum>;                                 \
71
0
        lhs = static_cast<Enum>(                                           \
72
0
            static_cast<Type>(lhs) & static_cast<Type>(rhs));              \
73
0
        return lhs;                                                        \
74
0
    }                                                                      \
Unexecuted instantiation: AK::operator&=(AK::SplitBehavior&, AK::SplitBehavior)
Unexecuted instantiation: Core::operator&=(Core::NotificationType&, Core::NotificationType)
Unexecuted instantiation: Core::operator&=(Core::File::OpenMode&, Core::File::OpenMode)
Unexecuted instantiation: Gfx::operator&=(Gfx::ViewportMode&, Gfx::ViewportMode)
Unexecuted instantiation: FileSystem::operator&=(FileSystem::PreserveMode&, FileSystem::PreserveMode)
Unexecuted instantiation: AK::operator&=(AK::CPUFeatures&, AK::CPUFeatures)
Unexecuted instantiation: JS::operator&=(JS::RegExpObject::Flags&, JS::RegExpObject::Flags)
Unexecuted instantiation: Audio::MP3::operator&=(Audio::MP3::ModeExtension&, Audio::MP3::ModeExtension)
Unexecuted instantiation: Web::HTML::operator&=(Web::HTML::SandboxingFlagSet&, Web::HTML::SandboxingFlagSet)
Unexecuted instantiation: operator&=(KeyModifier&, KeyModifier)
Unexecuted instantiation: Web::UIEvents::operator&=(Web::UIEvents::MouseButton&, Web::UIEvents::MouseButton)
Unexecuted instantiation: Web::DOM::operator&=(Web::DOM::NodeFilter::WhatToShow&, Web::DOM::NodeFilter::WhatToShow)
75
                                                                           \
76
    Prefix inline void operator&=(Enum volatile& lhs, Enum rhs)            \
77
0
    {                                                                      \
78
0
        using Type = UnderlyingType<Enum>;                                 \
79
0
        lhs = static_cast<Enum>(                                           \
80
0
            static_cast<Type>(lhs) & static_cast<Type>(rhs));              \
81
0
    }                                                                      \
Unexecuted instantiation: AK::operator&=(AK::SplitBehavior volatile&, AK::SplitBehavior)
Unexecuted instantiation: Core::operator&=(Core::NotificationType volatile&, Core::NotificationType)
Unexecuted instantiation: Core::operator&=(Core::File::OpenMode volatile&, Core::File::OpenMode)
Unexecuted instantiation: Gfx::operator&=(Gfx::ViewportMode volatile&, Gfx::ViewportMode)
Unexecuted instantiation: FileSystem::operator&=(FileSystem::PreserveMode volatile&, FileSystem::PreserveMode)
Unexecuted instantiation: AK::operator&=(AK::CPUFeatures volatile&, AK::CPUFeatures)
Unexecuted instantiation: JS::operator&=(JS::RegExpObject::Flags volatile&, JS::RegExpObject::Flags)
Unexecuted instantiation: Audio::MP3::operator&=(Audio::MP3::ModeExtension volatile&, Audio::MP3::ModeExtension)
Unexecuted instantiation: Web::HTML::operator&=(Web::HTML::SandboxingFlagSet volatile&, Web::HTML::SandboxingFlagSet)
Unexecuted instantiation: operator&=(KeyModifier volatile&, KeyModifier)
Unexecuted instantiation: Web::UIEvents::operator&=(Web::UIEvents::MouseButton volatile&, Web::UIEvents::MouseButton)
Unexecuted instantiation: Web::DOM::operator&=(Web::DOM::NodeFilter::WhatToShow volatile&, Web::DOM::NodeFilter::WhatToShow)
82
                                                                           \
83
    Prefix constexpr Enum& operator^=(Enum& lhs, Enum rhs)                 \
84
0
    {                                                                      \
85
0
        using Type = UnderlyingType<Enum>;                                 \
86
0
        lhs = static_cast<Enum>(                                           \
87
0
            static_cast<Type>(lhs) ^ static_cast<Type>(rhs));              \
88
0
        return lhs;                                                        \
89
0
    }                                                                      \
Unexecuted instantiation: AK::operator^=(AK::SplitBehavior&, AK::SplitBehavior)
Unexecuted instantiation: Core::operator^=(Core::NotificationType&, Core::NotificationType)
Unexecuted instantiation: Core::operator^=(Core::File::OpenMode&, Core::File::OpenMode)
Unexecuted instantiation: Gfx::operator^=(Gfx::ViewportMode&, Gfx::ViewportMode)
Unexecuted instantiation: FileSystem::operator^=(FileSystem::PreserveMode&, FileSystem::PreserveMode)
Unexecuted instantiation: AK::operator^=(AK::CPUFeatures&, AK::CPUFeatures)
Unexecuted instantiation: JS::operator^=(JS::RegExpObject::Flags&, JS::RegExpObject::Flags)
Unexecuted instantiation: Audio::MP3::operator^=(Audio::MP3::ModeExtension&, Audio::MP3::ModeExtension)
Unexecuted instantiation: Web::HTML::operator^=(Web::HTML::SandboxingFlagSet&, Web::HTML::SandboxingFlagSet)
Unexecuted instantiation: operator^=(KeyModifier&, KeyModifier)
Unexecuted instantiation: Web::UIEvents::operator^=(Web::UIEvents::MouseButton&, Web::UIEvents::MouseButton)
Unexecuted instantiation: Web::DOM::operator^=(Web::DOM::NodeFilter::WhatToShow&, Web::DOM::NodeFilter::WhatToShow)
90
                                                                           \
91
    Prefix inline void operator^=(Enum volatile& lhs, Enum rhs)            \
92
0
    {                                                                      \
93
0
        using Type = UnderlyingType<Enum>;                                 \
94
0
        lhs = static_cast<Enum>(                                           \
95
0
            static_cast<Type>(lhs) ^ static_cast<Type>(rhs));              \
96
0
    }                                                                      \
Unexecuted instantiation: AK::operator^=(AK::SplitBehavior volatile&, AK::SplitBehavior)
Unexecuted instantiation: Core::operator^=(Core::NotificationType volatile&, Core::NotificationType)
Unexecuted instantiation: Core::operator^=(Core::File::OpenMode volatile&, Core::File::OpenMode)
Unexecuted instantiation: Gfx::operator^=(Gfx::ViewportMode volatile&, Gfx::ViewportMode)
Unexecuted instantiation: FileSystem::operator^=(FileSystem::PreserveMode volatile&, FileSystem::PreserveMode)
Unexecuted instantiation: AK::operator^=(AK::CPUFeatures volatile&, AK::CPUFeatures)
Unexecuted instantiation: JS::operator^=(JS::RegExpObject::Flags volatile&, JS::RegExpObject::Flags)
Unexecuted instantiation: Audio::MP3::operator^=(Audio::MP3::ModeExtension volatile&, Audio::MP3::ModeExtension)
Unexecuted instantiation: Web::HTML::operator^=(Web::HTML::SandboxingFlagSet volatile&, Web::HTML::SandboxingFlagSet)
Unexecuted instantiation: operator^=(KeyModifier volatile&, KeyModifier)
Unexecuted instantiation: Web::UIEvents::operator^=(Web::UIEvents::MouseButton volatile&, Web::UIEvents::MouseButton)
Unexecuted instantiation: Web::DOM::operator^=(Web::DOM::NodeFilter::WhatToShow volatile&, Web::DOM::NodeFilter::WhatToShow)
97
                                                                           \
98
    Prefix constexpr bool has_flag(Enum value, Enum mask)                  \
99
3.94M
    {                                                                      \
100
3.94M
        using Type = UnderlyingType<Enum>;                                 \
101
3.94M
        return static_cast<Type>(value & mask) == static_cast<Type>(mask); \
102
3.94M
    }                                                                      \
AK::has_flag(AK::SplitBehavior, AK::SplitBehavior)
Line
Count
Source
99
3.84M
    {                                                                      \
100
3.84M
        using Type = UnderlyingType<Enum>;                                 \
101
3.84M
        return static_cast<Type>(value & mask) == static_cast<Type>(mask); \
102
3.84M
    }                                                                      \
Unexecuted instantiation: Core::has_flag(Core::NotificationType, Core::NotificationType)
Unexecuted instantiation: Core::has_flag(Core::File::OpenMode, Core::File::OpenMode)
Gfx::has_flag(Gfx::ViewportMode, Gfx::ViewportMode)
Line
Count
Source
99
26.6k
    {                                                                      \
100
26.6k
        using Type = UnderlyingType<Enum>;                                 \
101
26.6k
        return static_cast<Type>(value & mask) == static_cast<Type>(mask); \
102
26.6k
    }                                                                      \
Unexecuted instantiation: FileSystem::has_flag(FileSystem::PreserveMode, FileSystem::PreserveMode)
AK::has_flag(AK::CPUFeatures, AK::CPUFeatures)
Line
Count
Source
99
20
    {                                                                      \
100
20
        using Type = UnderlyingType<Enum>;                                 \
101
20
        return static_cast<Type>(value & mask) == static_cast<Type>(mask); \
102
20
    }                                                                      \
Unexecuted instantiation: JS::has_flag(JS::RegExpObject::Flags, JS::RegExpObject::Flags)
Audio::MP3::has_flag(Audio::MP3::ModeExtension, Audio::MP3::ModeExtension)
Line
Count
Source
99
76.6k
    {                                                                      \
100
76.6k
        using Type = UnderlyingType<Enum>;                                 \
101
76.6k
        return static_cast<Type>(value & mask) == static_cast<Type>(mask); \
102
76.6k
    }                                                                      \
Unexecuted instantiation: Web::HTML::has_flag(Web::HTML::SandboxingFlagSet, Web::HTML::SandboxingFlagSet)
Unexecuted instantiation: has_flag(KeyModifier, KeyModifier)
Unexecuted instantiation: Web::UIEvents::has_flag(Web::UIEvents::MouseButton, Web::UIEvents::MouseButton)
Unexecuted instantiation: Web::DOM::has_flag(Web::DOM::NodeFilter::WhatToShow, Web::DOM::NodeFilter::WhatToShow)
103
                                                                           \
104
    Prefix constexpr bool has_any_flag(Enum value, Enum mask)              \
105
0
    {                                                                      \
106
0
        using Type = UnderlyingType<Enum>;                                 \
107
0
        return static_cast<Type>(value & mask) != 0;                       \
108
0
    }
Unexecuted instantiation: AK::has_any_flag(AK::SplitBehavior, AK::SplitBehavior)
Unexecuted instantiation: Core::has_any_flag(Core::NotificationType, Core::NotificationType)
Unexecuted instantiation: Core::has_any_flag(Core::File::OpenMode, Core::File::OpenMode)
Unexecuted instantiation: Gfx::has_any_flag(Gfx::ViewportMode, Gfx::ViewportMode)
Unexecuted instantiation: FileSystem::has_any_flag(FileSystem::PreserveMode, FileSystem::PreserveMode)
Unexecuted instantiation: AK::has_any_flag(AK::CPUFeatures, AK::CPUFeatures)
Unexecuted instantiation: JS::has_any_flag(JS::RegExpObject::Flags, JS::RegExpObject::Flags)
Unexecuted instantiation: Audio::MP3::has_any_flag(Audio::MP3::ModeExtension, Audio::MP3::ModeExtension)
Unexecuted instantiation: Web::HTML::has_any_flag(Web::HTML::SandboxingFlagSet, Web::HTML::SandboxingFlagSet)
Unexecuted instantiation: has_any_flag(KeyModifier, KeyModifier)
Unexecuted instantiation: Web::UIEvents::has_any_flag(Web::UIEvents::MouseButton, Web::UIEvents::MouseButton)
Unexecuted instantiation: Web::DOM::has_any_flag(Web::DOM::NodeFilter::WhatToShow, Web::DOM::NodeFilter::WhatToShow)