diff --git a/third_party/blink/renderer/bindings/scripts/bind_gen/union.py b/third_party/blink/renderer/bindings/scripts/bind_gen/union.py index 3e8825de97a9c..fe86cf36910d1 100644 --- a/third_party/blink/renderer/bindings/scripts/bind_gen/union.py +++ b/third_party/blink/renderer/bindings/scripts/bind_gen/union.py @@ -408,9 +408,8 @@ def symbol_definition_constructor(symbol_node): else: # 19. Throw a TypeError. body.append( - T("${exception_state}.ThrowTypeError(" - "ExceptionMessages::ValueNotOfType(" - "UnionNameInIDL().Ascii().c_str()));")) + T("ThrowTypeErrorNotOfType" + "(${exception_state}, UnionNameInIDL());")) body.append(T("return nullptr;")) return func_decl, func_def @@ -701,23 +700,19 @@ def make_name_function(cg_context): func_def = CxxFuncDefNode(name="UnionNameInIDL", arg_decls=[], - return_type="String", - static=True) + return_type="const char*", + static=True, + constexpr=True) func_def.set_base_template_vars(cg_context.template_bindings()) body = func_def.body - body.extend([ - TextNode("static constexpr const char* const member_names[] = {"), - ListNode(list( - map( - lambda name: TextNode("\"{}\"".format(name)), - sorted( - map(lambda idl_type: idl_type.syntactic_form, - cg_context.union.flattened_member_types)))), - separator=", "), - TextNode("};"), - TextNode("return ProduceUnionNameInIDL(member_names);"), - ]) + member_type_names = sorted( + map(lambda idl_type: idl_type.syntactic_form, + cg_context.union.flattened_member_types)) + body.append( + TextNode("return \"({}){}\";".format( + " or ".join(member_type_names), + "?" if cg_context.union.does_include_nullable_type else ""))) return func_def, None diff --git a/third_party/blink/renderer/platform/bindings/union_base.cc b/third_party/blink/renderer/platform/bindings/union_base.cc index 4b37e3b96f080..453574a95a716 100644 --- a/third_party/blink/renderer/platform/bindings/union_base.cc +++ b/third_party/blink/renderer/platform/bindings/union_base.cc @@ -4,28 +4,18 @@ #include "third_party/blink/renderer/platform/bindings/union_base.h" -#include "third_party/blink/renderer/platform/wtf/text/string_builder.h" +#include "third_party/blink/renderer/platform/bindings/exception_messages.h" +#include "third_party/blink/renderer/platform/bindings/exception_state.h" namespace blink { namespace bindings { // static -String UnionBase::ProduceUnionNameInIDL( - const base::span& member_names) { - DCHECK_GE(member_names.size(), 2u); - - StringBuilder builder; - - builder.Append("("); - builder.Append(member_names[0]); - for (size_t i = 1; i < member_names.size(); ++i) { - builder.Append(" or "); - builder.Append(member_names[i]); - } - builder.Append(")"); - - return builder.ToString(); +void UnionBase::ThrowTypeErrorNotOfType(ExceptionState& exception_state, + const char* expected_type) { + exception_state.ThrowTypeError( + ExceptionMessages::ValueNotOfType(expected_type)); } } // namespace bindings diff --git a/third_party/blink/renderer/platform/bindings/union_base.h b/third_party/blink/renderer/platform/bindings/union_base.h index 0a3fa4cde9ae4..f0ef5df3cb8c6 100644 --- a/third_party/blink/renderer/platform/bindings/union_base.h +++ b/third_party/blink/renderer/platform/bindings/union_base.h @@ -13,6 +13,7 @@ namespace blink { +class ExceptionState; class ScriptState; namespace bindings { @@ -32,8 +33,9 @@ class PLATFORM_EXPORT UnionBase : public GarbageCollected { virtual void Trace(Visitor*) const {} protected: - static String ProduceUnionNameInIDL( - const base::span& member_names); + // Helper function to reduce the binary size of the generated bindings. + static void ThrowTypeErrorNotOfType(ExceptionState& exception_state, + const char* expected_type); UnionBase() = default; };