Improve use of NeverDestroyed
[WebKit-https.git] / Source / WebCore / bindings / scripts / test / JS / JSTestStandaloneDictionary.cpp
1 /*
2     This file is part of the WebKit open source project.
3     This file has been generated by generate-bindings.pl. DO NOT MODIFY!
4
5     This library is free software; you can redistribute it and/or
6     modify it under the terms of the GNU Library General Public
7     License as published by the Free Software Foundation; either
8     version 2 of the License, or (at your option) any later version.
9
10     This library is distributed in the hope that it will be useful,
11     but WITHOUT ANY WARRANTY; without even the implied warranty of
12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13     Library General Public License for more details.
14
15     You should have received a copy of the GNU Library General Public License
16     along with this library; see the file COPYING.LIB.  If not, write to
17     the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18     Boston, MA 02110-1301, USA.
19 */
20
21 #include "config.h"
22
23 #if ENABLE(Condition1)
24
25 #include "JSTestStandaloneDictionary.h"
26
27 #include "JSDOMConvertBoolean.h"
28 #include "JSDOMConvertStrings.h"
29 #include <runtime/JSCInlines.h>
30 #include <runtime/JSString.h>
31 #include <wtf/NeverDestroyed.h>
32
33 using namespace JSC;
34
35 namespace WebCore {
36
37 #if ENABLE(Condition1)
38
39 template<> DictionaryImplName convertDictionary<DictionaryImplName>(ExecState& state, JSValue value)
40 {
41     VM& vm = state.vm();
42     auto throwScope = DECLARE_THROW_SCOPE(vm);
43     bool isNullOrUndefined = value.isUndefinedOrNull();
44     auto* object = isNullOrUndefined ? nullptr : value.getObject();
45     if (UNLIKELY(!isNullOrUndefined && !object)) {
46         throwTypeError(&state, throwScope);
47         return { };
48     }
49     DictionaryImplName result;
50     JSValue boolMemberValue = isNullOrUndefined ? jsUndefined() : object->get(&state, Identifier::fromString(&state, "boolMember"));
51     if (!boolMemberValue.isUndefined()) {
52         result.boolMember = convert<IDLBoolean>(state, boolMemberValue);
53         RETURN_IF_EXCEPTION(throwScope, { });
54     }
55     JSValue enumMemberValue = isNullOrUndefined ? jsUndefined() : object->get(&state, Identifier::fromString(&state, "enumMember"));
56     if (!enumMemberValue.isUndefined()) {
57         result.enumMember = convert<IDLEnumeration<TestStandaloneDictionary::EnumInStandaloneDictionaryFile>>(state, enumMemberValue);
58         RETURN_IF_EXCEPTION(throwScope, { });
59     }
60     JSValue stringMemberValue = isNullOrUndefined ? jsUndefined() : object->get(&state, Identifier::fromString(&state, "stringMember"));
61     if (!stringMemberValue.isUndefined()) {
62         result.stringMember = convert<IDLDOMString>(state, stringMemberValue);
63         RETURN_IF_EXCEPTION(throwScope, { });
64     }
65     return result;
66 }
67
68 #endif
69
70 template<> JSString* convertEnumerationToJS(ExecState& state, TestStandaloneDictionary::EnumInStandaloneDictionaryFile enumerationValue)
71 {
72     static const NeverDestroyed<String> values[] = {
73         MAKE_STATIC_STRING_IMPL("enumValue1"),
74         MAKE_STATIC_STRING_IMPL("enumValue2"),
75     };
76     static_assert(static_cast<size_t>(TestStandaloneDictionary::EnumInStandaloneDictionaryFile::EnumValue1) == 0, "TestStandaloneDictionary::EnumInStandaloneDictionaryFile::EnumValue1 is not 0 as expected");
77     static_assert(static_cast<size_t>(TestStandaloneDictionary::EnumInStandaloneDictionaryFile::EnumValue2) == 1, "TestStandaloneDictionary::EnumInStandaloneDictionaryFile::EnumValue2 is not 1 as expected");
78     ASSERT(static_cast<size_t>(enumerationValue) < WTF_ARRAY_LENGTH(values));
79     return jsStringWithCache(&state, values[static_cast<size_t>(enumerationValue)]);
80 }
81
82 template<> std::optional<TestStandaloneDictionary::EnumInStandaloneDictionaryFile> parseEnumeration<TestStandaloneDictionary::EnumInStandaloneDictionaryFile>(ExecState& state, JSValue value)
83 {
84     auto stringValue = value.toWTFString(&state);
85     if (stringValue == "enumValue1")
86         return TestStandaloneDictionary::EnumInStandaloneDictionaryFile::EnumValue1;
87     if (stringValue == "enumValue2")
88         return TestStandaloneDictionary::EnumInStandaloneDictionaryFile::EnumValue2;
89     return std::nullopt;
90 }
91
92 template<> const char* expectedEnumerationValues<TestStandaloneDictionary::EnumInStandaloneDictionaryFile>()
93 {
94     return "\"enumValue1\", \"enumValue2\"";
95 }
96
97 } // namespace WebCore
98
99 #endif // ENABLE(Condition1)