LibWeb: Support IDL optional integer arguments

This commit is contained in:
Idan Horowitz 2022-03-29 22:36:33 +03:00
parent 8abe653009
commit 44601a8e74
Notes: sideshowbarker 2024-07-18 02:47:59 +09:00

View file

@ -412,45 +412,101 @@ static void generate_to_cpp(SourceGenerator& generator, ParameterType& parameter
} }
} }
} else if (parameter.type->name == "boolean") { } else if (parameter.type->name == "boolean") {
if (!optional) { if (!optional || optional_default_value.has_value()) {
scoped_generator.append(R"~~~( scoped_generator.append(R"~~~(
bool @cpp_name@ = @js_name@@js_suffix@.to_boolean();
)~~~");
} else {
if (optional_default_value.has_value()) {
scoped_generator.append(R"~~~(
bool @cpp_name@; bool @cpp_name@;
)~~~"); )~~~");
} else { } else {
scoped_generator.append(R"~~~( scoped_generator.append(R"~~~(
Optional<bool> @cpp_name@; Optional<bool> @cpp_name@;
)~~~"); )~~~");
} }
if (optional) {
scoped_generator.append(R"~~~( scoped_generator.append(R"~~~(
if (!@js_name@@js_suffix@.is_undefined()) if (!@js_name@@js_suffix@.is_undefined())
@cpp_name@ = @js_name@@js_suffix@.to_boolean();)~~~"); )~~~");
if (optional_default_value.has_value()) { }
scoped_generator.append(R"~~~( scoped_generator.append(R"~~~(
@cpp_name@ = @js_name@@js_suffix@.to_boolean();
)~~~");
if (optional_default_value.has_value()) {
scoped_generator.append(R"~~~(
else else
@cpp_name@ = @parameter.optional_default_value@; @cpp_name@ = @parameter.optional_default_value@;
)~~~"); )~~~");
} else {
scoped_generator.append(R"~~~(
)~~~");
}
} }
} else if (parameter.type->name == "unsigned long") { } else if (parameter.type->name == "unsigned long") {
scoped_generator.append(R"~~~( if (!optional || optional_default_value.has_value()) {
auto @cpp_name@ = TRY(@js_name@@js_suffix@.to_u32(global_object)); scoped_generator.append(R"~~~(
u32 @cpp_name@;
)~~~"); )~~~");
} else {
scoped_generator.append(R"~~~(
Optional<u32> @cpp_name@;
)~~~");
}
if (optional) {
scoped_generator.append(R"~~~(
if (!@js_name@@js_suffix@.is_undefined())
)~~~");
}
scoped_generator.append(R"~~~(
@cpp_name@ = TRY(@js_name@@js_suffix@.to_u32(global_object));
)~~~");
if (optional_default_value.has_value()) {
scoped_generator.append(R"~~~(
else
@cpp_name@ = @parameter.optional_default_value@UL;
)~~~");
}
} else if (parameter.type->name == "unsigned short") { } else if (parameter.type->name == "unsigned short") {
scoped_generator.append(R"~~~( if (!optional || optional_default_value.has_value()) {
auto @cpp_name@ = TRY(@js_name@@js_suffix@.to_u16(global_object)); scoped_generator.append(R"~~~(
u16 @cpp_name@;
)~~~"); )~~~");
} else {
scoped_generator.append(R"~~~(
Optional<u16> @cpp_name@;
)~~~");
}
if (optional) {
scoped_generator.append(R"~~~(
if (!@js_name@@js_suffix@.is_undefined())
)~~~");
}
scoped_generator.append(R"~~~(
@cpp_name@ = TRY(@js_name@@js_suffix@.to_u16(global_object));
)~~~");
if (optional_default_value.has_value()) {
scoped_generator.append(R"~~~(
else
@cpp_name@ = @parameter.optional_default_value@;
)~~~");
}
} else if (parameter.type->name == "long") { } else if (parameter.type->name == "long") {
scoped_generator.append(R"~~~( if (!optional || optional_default_value.has_value()) {
auto @cpp_name@ = TRY(@js_name@@js_suffix@.to_i32(global_object)); scoped_generator.append(R"~~~(
i32 @cpp_name@;
)~~~"); )~~~");
} else {
scoped_generator.append(R"~~~(
Optional<i32> @cpp_name@;
)~~~");
}
if (optional) {
scoped_generator.append(R"~~~(
if (!@js_name@@js_suffix@.is_undefined())
)~~~");
}
scoped_generator.append(R"~~~(
@cpp_name@ = TRY(@js_name@@js_suffix@.to_i32(global_object));
)~~~");
if (optional_default_value.has_value()) {
scoped_generator.append(R"~~~(
else
@cpp_name@ = @parameter.optional_default_value@L;
)~~~");
}
} else if (parameter.type->name == "EventHandler") { } else if (parameter.type->name == "EventHandler") {
// x.onfoo = function() { ... }, x.onfoo = () => { ... }, x.onfoo = {} // x.onfoo = function() { ... }, x.onfoo = () => { ... }, x.onfoo = {}
// NOTE: Anything else than an object will be treated as null. This is because EventHandler has the [LegacyTreatNonObjectAsNull] extended attribute. // NOTE: Anything else than an object will be treated as null. This is because EventHandler has the [LegacyTreatNonObjectAsNull] extended attribute.