Skip to content

Commit

Permalink
bind-gen: Simplify the implementation of the union name
Browse files Browse the repository at this point in the history
It turned out that concatenating the member type names is not
helpful to save APK size (it's slightly worse).  So, changes
it to a simple string literal.

Bug: 839389
Change-Id: I846ed6942460b2d8bb87b34065015686675a13f7
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2880934
Commit-Queue: Yuki Shiino <yukishiino@chromium.org>
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Cr-Commit-Position: refs/heads/master@{#880773}
  • Loading branch information
yuki3 authored and Chromium LUCI CQ committed May 9, 2021
1 parent 9ed6144 commit 963b6f9
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 35 deletions.
29 changes: 12 additions & 17 deletions third_party/blink/renderer/bindings/scripts/bind_gen/union.py
Expand Up @@ -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
Expand Down Expand Up @@ -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

Expand Down
22 changes: 6 additions & 16 deletions third_party/blink/renderer/platform/bindings/union_base.cc
Expand Up @@ -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<const char* const>& 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
Expand Down
6 changes: 4 additions & 2 deletions third_party/blink/renderer/platform/bindings/union_base.h
Expand Up @@ -13,6 +13,7 @@

namespace blink {

class ExceptionState;
class ScriptState;

namespace bindings {
Expand All @@ -32,8 +33,9 @@ class PLATFORM_EXPORT UnionBase : public GarbageCollected<UnionBase> {
virtual void Trace(Visitor*) const {}

protected:
static String ProduceUnionNameInIDL(
const base::span<const char* const>& 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;
};
Expand Down

0 comments on commit 963b6f9

Please sign in to comment.