Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(29)

Side by Side Diff: Source/bindings/scripts/v8_dictionary.py

Issue 765673005: IDL: Null values should be converted for non-nullable dictionary members (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: GN fix Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 # Copyright 2014 The Chromium Authors. All rights reserved. 1 # Copyright 2014 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 """Generate template contexts of dictionaries for both v8 bindings and 5 """Generate template contexts of dictionaries for both v8 bindings and
6 implementation classes that are used by blink's core/modules. 6 implementation classes that are used by blink's core/modules.
7 """ 7 """
8 8
9 import operator 9 import operator
10 from idl_types import IdlType 10 from idl_types import IdlType
(...skipping 10 matching lines...) Expand all
21 DICTIONARY_CPP_INCLUDES = frozenset([ 21 DICTIONARY_CPP_INCLUDES = frozenset([
22 'bindings/core/v8/ExceptionState.h', 22 'bindings/core/v8/ExceptionState.h',
23 ]) 23 ])
24 24
25 25
26 def setter_name_for_dictionary_member(member): 26 def setter_name_for_dictionary_member(member):
27 name = v8_utilities.cpp_name(member) 27 name = v8_utilities.cpp_name(member)
28 return 'set%s' % v8_utilities.capitalize(name) 28 return 'set%s' % v8_utilities.capitalize(name)
29 29
30 30
31 def null_setter_name_for_dictionary_member(member):
32 if member.idl_type.is_nullable:
33 name = v8_utilities.cpp_name(member)
34 return 'set%sToNull' % v8_utilities.capitalize(name)
35 return None
36
37
31 def has_method_name_for_dictionary_member(member): 38 def has_method_name_for_dictionary_member(member):
32 name = v8_utilities.cpp_name(member) 39 name = v8_utilities.cpp_name(member)
33 return 'has%s' % v8_utilities.capitalize(name) 40 return 'has%s' % v8_utilities.capitalize(name)
34 41
35 42
36 def unwrap_nullable_if_needed(idl_type): 43 def unwrap_nullable_if_needed(idl_type):
37 if idl_type.is_nullable: 44 if idl_type.is_nullable:
38 return idl_type.inner_type 45 return idl_type.inner_type
39 return idl_type 46 return idl_type
40 47
(...skipping 20 matching lines...) Expand all
61 context.update({ 68 context.update({
62 'parent_cpp_class': parent_cpp_class, 69 'parent_cpp_class': parent_cpp_class,
63 'parent_v8_class': v8_types.v8_type(parent_cpp_class), 70 'parent_v8_class': v8_types.v8_type(parent_cpp_class),
64 }) 71 })
65 return context 72 return context
66 73
67 74
68 def member_context(member): 75 def member_context(member):
69 idl_type = member.idl_type 76 idl_type = member.idl_type
70 idl_type.add_includes_for_type() 77 idl_type.add_includes_for_type()
71 idl_type = unwrap_nullable_if_needed(idl_type) 78 unwrapped_idl_type = unwrap_nullable_if_needed(idl_type)
72 79
73 def default_values(): 80 def default_values():
74 if not member.default_value: 81 if not member.default_value:
75 return None, None 82 return None, None
76 if member.default_value.is_null: 83 if member.default_value.is_null:
77 return None, 'v8::Null(isolate)' 84 return None, 'v8::Null(isolate)'
78 cpp_default_value = str(member.default_value) 85 cpp_default_value = str(member.default_value)
79 v8_default_value = idl_type.cpp_value_to_v8_value( 86 v8_default_value = unwrapped_idl_type.cpp_value_to_v8_value(
80 cpp_value=cpp_default_value, isolate='isolate', 87 cpp_value=cpp_default_value, isolate='isolate',
81 creation_context='creationContext') 88 creation_context='creationContext')
82 return cpp_default_value, v8_default_value 89 return cpp_default_value, v8_default_value
83 90
84 cpp_default_value, v8_default_value = default_values() 91 cpp_default_value, v8_default_value = default_values()
85 cpp_name = v8_utilities.cpp_name(member) 92 cpp_name = v8_utilities.cpp_name(member)
86 93
87 return { 94 return {
88 'cpp_default_value': cpp_default_value, 95 'cpp_default_value': cpp_default_value,
89 'cpp_name': cpp_name, 96 'cpp_name': cpp_name,
90 'cpp_type': idl_type.cpp_type, 97 'cpp_type': unwrapped_idl_type.cpp_type,
91 'cpp_value_to_v8_value': idl_type.cpp_value_to_v8_value( 98 'cpp_value_to_v8_value': unwrapped_idl_type.cpp_value_to_v8_value(
92 cpp_value='impl.%s()' % cpp_name, isolate='isolate', 99 cpp_value='impl.%s()' % cpp_name, isolate='isolate',
93 creation_context='creationContext', 100 creation_context='creationContext',
94 extended_attributes=member.extended_attributes), 101 extended_attributes=member.extended_attributes),
95 'enum_validation_expression': idl_type.enum_validation_expression, 102 'enum_validation_expression': unwrapped_idl_type.enum_validation_express ion,
96 'has_method_name': has_method_name_for_dictionary_member(member), 103 'has_method_name': has_method_name_for_dictionary_member(member),
97 'is_object': idl_type.name == 'Object', 104 'is_nullable': idl_type.is_nullable,
105 'is_object': unwrapped_idl_type.name == 'Object',
98 'name': member.name, 106 'name': member.name,
99 'setter_name': setter_name_for_dictionary_member(member), 107 'setter_name': setter_name_for_dictionary_member(member),
100 'use_output_parameter_for_result': idl_type.use_output_parameter_for_res ult, 108 'null_setter_name': null_setter_name_for_dictionary_member(member),
109 'use_output_parameter_for_result': unwrapped_idl_type.use_output_paramet er_for_result,
101 'v8_default_value': v8_default_value, 110 'v8_default_value': v8_default_value,
102 'v8_value_to_local_cpp_value': idl_type.v8_value_to_local_cpp_value( 111 'v8_value_to_local_cpp_value': unwrapped_idl_type.v8_value_to_local_cpp_ value(
103 member.extended_attributes, member.name + 'Value', 112 member.extended_attributes, member.name + 'Value',
104 member.name, isolate='isolate'), 113 member.name, isolate='isolate'),
105 } 114 }
106 115
107 116
108 # Context for implementation classes 117 # Context for implementation classes
109 118
110 def dictionary_impl_context(dictionary, interfaces_info): 119 def dictionary_impl_context(dictionary, interfaces_info):
111 includes.clear() 120 includes.clear()
112 header_includes = set(['platform/heap/Handle.h']) 121 header_includes = set(['platform/heap/Handle.h'])
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
158 header_includes.update(idl_type.impl_includes_for_type(interfaces_info)) 167 header_includes.update(idl_type.impl_includes_for_type(interfaces_info))
159 return { 168 return {
160 'cpp_default_value': cpp_default_value, 169 'cpp_default_value': cpp_default_value,
161 'cpp_name': cpp_name, 170 'cpp_name': cpp_name,
162 'getter_expression': getter_expression(), 171 'getter_expression': getter_expression(),
163 'has_method_expression': has_method_expression(), 172 'has_method_expression': has_method_expression(),
164 'has_method_name': has_method_name_for_dictionary_member(member), 173 'has_method_name': has_method_name_for_dictionary_member(member),
165 'is_object': is_object, 174 'is_object': is_object,
166 'is_traceable': idl_type.is_traceable, 175 'is_traceable': idl_type.is_traceable,
167 'member_cpp_type': member_cpp_type(), 176 'member_cpp_type': member_cpp_type(),
177 'null_setter_name': null_setter_name_for_dictionary_member(member),
168 'rvalue_cpp_type': idl_type.cpp_type_args(used_as_rvalue_type=True), 178 'rvalue_cpp_type': idl_type.cpp_type_args(used_as_rvalue_type=True),
169 'setter_name': setter_name_for_dictionary_member(member), 179 'setter_name': setter_name_for_dictionary_member(member),
170 } 180 }
OLDNEW
« no previous file with comments | « LayoutTests/fast/dom/idl-dictionary-unittest-expected.txt ('k') | Source/bindings/templates/dictionary_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698