Index: Source/bindings/scripts/v8_union.py |
diff --git a/Source/bindings/scripts/v8_union.py b/Source/bindings/scripts/v8_union.py |
index 4ed138fac624837e7d9b30a32819fd6e9c5c1986..f6c96f4ef4b0368d6f24beff4853055381c0c7a2 100644 |
--- a/Source/bindings/scripts/v8_union.py |
+++ b/Source/bindings/scripts/v8_union.py |
@@ -2,6 +2,7 @@ |
# Use of this source code is governed by a BSD-style license that can be |
# found in the LICENSE file. |
+import v8_types |
import v8_utilities |
@@ -12,7 +13,7 @@ UNION_H_INCLUDES = frozenset([ |
'platform/heap/Handle.h', |
]) |
-UNION_CPP_INCLUDES_BLACKLIST = frozenset([ |
+UNION_HEADER_INCLUDES_BLACKLIST = frozenset([ |
# This header defines static functions needed to implement event handler |
# attributes in interfaces that implement GlobalEventHandlers. They are not |
# needed or used by UnionTypes*.cpp, so including the header causes |
@@ -23,44 +24,12 @@ UNION_CPP_INCLUDES_BLACKLIST = frozenset([ |
]) |
-cpp_includes = set() |
-header_forward_decls = set() |
- |
- |
-def union_context(union_types, interfaces_info): |
- cpp_includes.clear() |
- header_forward_decls.clear() |
- |
- # For container classes we strip nullable wrappers. For example, |
- # both (A or B)? and (A? or B) will become AOrB. This should be OK |
- # because container classes can handle null and it seems that |
- # distinguishing (A or B)? and (A? or B) doesn't make sense. |
- container_cpp_types = set() |
- union_types_for_containers = set() |
- nullable_cpp_types = set() |
- for union_type in union_types: |
- cpp_type = union_type.cpp_type |
- if cpp_type not in container_cpp_types: |
- union_types_for_containers.add(union_type) |
- container_cpp_types.add(cpp_type) |
- if union_type.includes_nullable_type: |
- nullable_cpp_types.add(cpp_type) |
- |
- union_types_for_containers = sorted(union_types_for_containers, |
- key=lambda union_type: union_type.cpp_type) |
- nullable_cpp_types = sorted(nullable_cpp_types) |
- |
- return { |
- 'containers': [container_context(union_type, interfaces_info) |
- for union_type in union_types_for_containers], |
- 'cpp_includes': sorted(cpp_includes - UNION_CPP_INCLUDES_BLACKLIST), |
- 'header_forward_decls': sorted(header_forward_decls), |
- 'header_includes': sorted(UNION_H_INCLUDES), |
- 'nullable_cpp_types': nullable_cpp_types, |
- } |
+header_includes = set() |
def container_context(union_type, interfaces_info): |
+ header_includes.clear() |
+ header_includes.update(UNION_H_INCLUDES) |
members = [] |
# These variables refer to member contexts if the given union type has |
@@ -111,13 +80,15 @@ def container_context(union_type, interfaces_info): |
if dictionary_type and nullable_members == 1: |
raise Exception('%s has a dictionary and a nullable member' % union_type.name) |
+ cpp_class = union_type.cpp_type |
return { |
'array_buffer_type': array_buffer_type, |
'array_buffer_view_type': array_buffer_view_type, |
'array_or_sequence_type': array_or_sequence_type, |
'boolean_type': boolean_type, |
- 'cpp_class': union_type.cpp_type, |
+ 'cpp_class': cpp_class, |
'dictionary_type': dictionary_type, |
+ 'header_includes': sorted(header_includes - UNION_HEADER_INCLUDES_BLACKLIST), |
'includes_nullable_type': union_type.includes_nullable_type, |
'interface_types': interface_types, |
'members': members, |
@@ -125,15 +96,15 @@ def container_context(union_type, interfaces_info): |
'numeric_type': numeric_type, |
'string_type': string_type, |
'type_string': str(union_type), |
+ 'v8_class': v8_types.v8_type(cpp_class), |
} |
def member_context(member, interfaces_info): |
- cpp_includes.update(member.includes_for_type) |
+ header_includes.update(member.includes_for_type) |
interface_info = interfaces_info.get(member.name, None) |
if interface_info: |
- cpp_includes.update(interface_info.get('dependencies_include_paths', [])) |
- header_forward_decls.add(member.implemented_as) |
+ header_includes.update(interface_info.get('dependencies_include_paths', [])) |
if member.is_nullable: |
member = member.inner_type |
return { |