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

Side by Side Diff: bindings/scripts/v8_interface.py

Issue 2786203002: Roll 50: Copied IDLs, PYTHON scripts from WebKit removed deleted files in WebCore (Closed)
Patch Set: Created 3 years, 8 months 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
« no previous file with comments | « bindings/scripts/v8_dictionary.py ('k') | bindings/scripts/v8_methods.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright (C) 2013 Google Inc. All rights reserved. 1 # Copyright (C) 2013 Google Inc. All rights reserved.
2 # coding=utf-8 2 # coding=utf-8
3 # 3 #
4 # Redistribution and use in source and binary forms, with or without 4 # Redistribution and use in source and binary forms, with or without
5 # modification, are permitted provided that the following conditions are 5 # modification, are permitted provided that the following conditions are
6 # met: 6 # met:
7 # 7 #
8 # * Redistributions of source code must retain the above copyright 8 # * Redistributions of source code must retain the above copyright
9 # notice, this list of conditions and the following disclaimer. 9 # notice, this list of conditions and the following disclaimer.
10 # * Redistributions in binary form must reproduce the above 10 # * Redistributions in binary form must reproduce the above
(...skipping 28 matching lines...) Expand all
39 import idl_definitions 39 import idl_definitions
40 from idl_definitions import IdlOperation, IdlArgument 40 from idl_definitions import IdlOperation, IdlArgument
41 import idl_types 41 import idl_types
42 from idl_types import IdlType, inherits_interface 42 from idl_types import IdlType, inherits_interface
43 import v8_attributes 43 import v8_attributes
44 from v8_globals import includes 44 from v8_globals import includes
45 import v8_methods 45 import v8_methods
46 import v8_types 46 import v8_types
47 from v8_types import cpp_ptr_type, cpp_template_type 47 from v8_types import cpp_ptr_type, cpp_template_type
48 import v8_utilities 48 import v8_utilities
49 from v8_utilities import (cpp_name_or_partial, capitalize, conditional_string, c pp_name, gc_type, 49 from v8_utilities import (origin_trial_enabled_function, cpp_name_or_partial, ca pitalize, cpp_name, gc_type,
50 has_extended_attribute_value, runtime_enabled_function _name, 50 has_extended_attribute_value, runtime_enabled_function _name,
51 extended_attribute_value_as_list, is_legacy_interface_ type_checking) 51 extended_attribute_value_as_list, is_legacy_interface_ type_checking)
52 52
53 53
54 INTERFACE_H_INCLUDES = frozenset([ 54 INTERFACE_H_INCLUDES = frozenset([
55 'bindings/core/v8/ScriptWrappable.h', 55 'bindings/core/v8/ScriptWrappable.h',
56 'bindings/core/v8/ToV8.h', 56 'bindings/core/v8/ToV8.h',
57 'bindings/core/v8/V8Binding.h', 57 'bindings/core/v8/V8Binding.h',
58 'bindings/core/v8/V8DOMWrapper.h', 58 'bindings/core/v8/V8DOMWrapper.h',
59 'bindings/core/v8/WrapperTypeInfo.h', 59 'bindings/core/v8/WrapperTypeInfo.h',
60 'platform/heap/Handle.h', 60 'platform/heap/Handle.h',
61 ]) 61 ])
62 INTERFACE_CPP_INCLUDES = frozenset([ 62 INTERFACE_CPP_INCLUDES = frozenset([
63 'bindings/core/v8/ExceptionState.h', 63 'bindings/core/v8/ExceptionState.h',
64 'bindings/core/v8/V8DOMConfiguration.h', 64 'bindings/core/v8/V8DOMConfiguration.h',
65 'bindings/core/v8/V8ObjectConstructor.h', 65 'bindings/core/v8/V8ObjectConstructor.h',
66 'core/dom/ContextFeatures.h',
67 'core/dom/Document.h', 66 'core/dom/Document.h',
68 'platform/RuntimeEnabledFeatures.h',
69 'platform/TraceEvent.h',
70 'wtf/GetPtr.h', 67 'wtf/GetPtr.h',
71 'wtf/RefPtr.h', 68 'wtf/RefPtr.h',
72 ]) 69 ])
73 70
74 71
75 def interface_context(interface): 72 def interface_context(interface):
76 includes.clear() 73 includes.clear()
77 includes.update(INTERFACE_CPP_INCLUDES) 74 includes.update(INTERFACE_CPP_INCLUDES)
78 header_includes = set(INTERFACE_H_INCLUDES) 75 header_includes = set(INTERFACE_H_INCLUDES)
79 76
80 if interface.is_partial: 77 if interface.is_partial:
81 # A partial interface definition cannot specify that the interface 78 # A partial interface definition cannot specify that the interface
82 # inherits from another interface. Inheritance must be specified on 79 # inherits from another interface. Inheritance must be specified on
83 # the original interface definition. 80 # the original interface definition.
84 parent_interface = None 81 parent_interface = None
85 is_event_target = False 82 is_event_target = False
86 # partial interface needs the definition of its original interface. 83 # partial interface needs the definition of its original interface.
87 includes.add('bindings/core/v8/V8%s.h' % interface.name) 84 includes.add('bindings/core/v8/V8%s.h' % interface.name)
88 else: 85 else:
89 parent_interface = interface.parent 86 parent_interface = interface.parent
90 if parent_interface: 87 if parent_interface:
91 header_includes.update(v8_types.includes_for_interface(parent_interf ace)) 88 header_includes.update(v8_types.includes_for_interface(parent_interf ace))
92 is_event_target = inherits_interface(interface.name, 'EventTarget') 89 is_event_target = inherits_interface(interface.name, 'EventTarget')
93 90
94 extended_attributes = interface.extended_attributes 91 extended_attributes = interface.extended_attributes
95 92
96 is_array_buffer_or_view = interface.idl_type.is_array_buffer_or_view 93 is_array_buffer_or_view = interface.idl_type.is_array_buffer_or_view
97 is_typed_array_type = interface.idl_type.is_typed_array 94 is_typed_array_type = interface.idl_type.is_typed_array
98 if is_array_buffer_or_view: 95 if is_array_buffer_or_view:
99 includes.add('bindings/core/v8/V8ArrayBuffer.h') 96 includes.update(('bindings/core/v8/V8ArrayBuffer.h',
97 'bindings/core/v8/V8SharedArrayBuffer.h'))
100 if interface.name == 'ArrayBufferView': 98 if interface.name == 'ArrayBufferView':
101 includes.update(( 99 includes.update((
102 'bindings/core/v8/V8Int8Array.h', 100 'bindings/core/v8/V8Int8Array.h',
103 'bindings/core/v8/V8Int16Array.h', 101 'bindings/core/v8/V8Int16Array.h',
104 'bindings/core/v8/V8Int32Array.h', 102 'bindings/core/v8/V8Int32Array.h',
105 'bindings/core/v8/V8Uint8Array.h', 103 'bindings/core/v8/V8Uint8Array.h',
106 'bindings/core/v8/V8Uint8ClampedArray.h', 104 'bindings/core/v8/V8Uint8ClampedArray.h',
107 'bindings/core/v8/V8Uint16Array.h', 105 'bindings/core/v8/V8Uint16Array.h',
108 'bindings/core/v8/V8Uint32Array.h', 106 'bindings/core/v8/V8Uint32Array.h',
109 'bindings/core/v8/V8Float32Array.h', 107 'bindings/core/v8/V8Float32Array.h',
110 'bindings/core/v8/V8Float64Array.h', 108 'bindings/core/v8/V8Float64Array.h',
111 'bindings/core/v8/V8DataView.h')) 109 'bindings/core/v8/V8DataView.h'))
112 110
113 # [ActiveDOMObject]
114 is_active_dom_object = 'ActiveDOMObject' in extended_attributes
115
116 # [CheckSecurity] 111 # [CheckSecurity]
117 is_check_security = 'CheckSecurity' in extended_attributes 112 is_check_security = 'CheckSecurity' in extended_attributes
118 if is_check_security: 113 if is_check_security:
119 includes.add('bindings/core/v8/BindingSecurity.h') 114 includes.add('bindings/core/v8/BindingSecurity.h')
120 115
121 # [DependentLifetime] 116 # [DependentLifetime]
122 is_dependent_lifetime = 'DependentLifetime' in extended_attributes 117 is_dependent_lifetime = 'DependentLifetime' in extended_attributes
123 118
124 # [MeasureAs] 119 # [PrimaryGlobal] and [Global]
125 is_measure_as = 'MeasureAs' in extended_attributes 120 is_global = ('PrimaryGlobal' in extended_attributes or
126 if is_measure_as: 121 'Global' in extended_attributes)
127 includes.add('core/frame/UseCounter.h')
128 122
129 # [SetWrapperReferenceFrom] 123 # [SetWrapperReferenceFrom]
130 set_wrapper_reference_from = extended_attributes.get('SetWrapperReferenceFro m') 124 set_wrapper_reference_from = extended_attributes.get('SetWrapperReferenceFro m')
131 if set_wrapper_reference_from: 125 if set_wrapper_reference_from:
132 includes.update(['bindings/core/v8/V8GCController.h', 126 includes.update(['bindings/core/v8/V8GCController.h',
133 'core/dom/Element.h']) 127 'core/dom/Element.h'])
134 128
135 # [SetWrapperReferenceTo] 129 # [SetWrapperReferenceTo]
136 set_wrapper_reference_to_argument = extended_attributes.get('SetWrapperRefer enceTo') 130 set_wrapper_reference_to_argument = extended_attributes.get('SetWrapperRefer enceTo')
137 set_wrapper_reference_to = None 131 set_wrapper_reference_to = None
(...skipping 17 matching lines...) Expand all
155 149
156 this_gc_type = gc_type(interface) 150 this_gc_type = gc_type(interface)
157 151
158 wrapper_class_id = ('NodeClassId' if inherits_interface(interface.name, 'Nod e') else 'ObjectClassId') 152 wrapper_class_id = ('NodeClassId' if inherits_interface(interface.name, 'Nod e') else 'ObjectClassId')
159 153
160 v8_class_name = v8_utilities.v8_class_name(interface) 154 v8_class_name = v8_utilities.v8_class_name(interface)
161 cpp_class_name = cpp_name(interface) 155 cpp_class_name = cpp_name(interface)
162 cpp_class_name_or_partial = cpp_name_or_partial(interface) 156 cpp_class_name_or_partial = cpp_name_or_partial(interface)
163 v8_class_name_or_partial = v8_utilities.v8_class_name_or_partial(interface) 157 v8_class_name_or_partial = v8_utilities.v8_class_name_or_partial(interface)
164 158
159 if 'RuntimeEnabled' in extended_attributes:
160 includes.add('platform/RuntimeEnabledFeatures.h')
161
162 if 'OriginTrialEnabled' in extended_attributes:
163 includes.add('core/inspector/ConsoleMessage.h')
164 includes.add('core/origin_trials/OriginTrials.h')
165
165 context = { 166 context = {
166 'conditional_string': conditional_string(interface), # [Conditional]
167 'cpp_class': cpp_class_name, 167 'cpp_class': cpp_class_name,
168 'cpp_class_or_partial': cpp_class_name_or_partial, 168 'cpp_class_or_partial': cpp_class_name_or_partial,
169 'event_target_inheritance': 'InheritFromEventTarget' if is_event_target else 'NotInheritFromEventTarget', 169 'event_target_inheritance': 'InheritFromEventTarget' if is_event_target else 'NotInheritFromEventTarget',
170 'gc_type': this_gc_type, 170 'gc_type': this_gc_type,
171 # FIXME: Remove 'EventTarget' special handling, http://crbug.com/383699 171 # FIXME: Remove 'EventTarget' special handling, http://crbug.com/383699
172 'has_access_check_callbacks': (is_check_security and 172 'has_access_check_callbacks': (is_check_security and
173 interface.name != 'Window' and 173 interface.name != 'Window' and
174 interface.name != 'EventTarget'), 174 interface.name != 'EventTarget'),
175 'has_custom_legacy_call_as_function': has_extended_attribute_value(inter face, 'Custom', 'LegacyCallAsFunction'), # [Custom=LegacyCallAsFunction] 175 'has_custom_legacy_call_as_function': has_extended_attribute_value(inter face, 'Custom', 'LegacyCallAsFunction'), # [Custom=LegacyCallAsFunction]
176 'has_partial_interface': len(interface.partial_interfaces) > 0, 176 'has_partial_interface': len(interface.partial_interfaces) > 0,
177 'has_visit_dom_wrapper': has_visit_dom_wrapper, 177 'has_visit_dom_wrapper': has_visit_dom_wrapper,
178 'header_includes': header_includes, 178 'header_includes': header_includes,
179 'interface_name': interface.name, 179 'interface_name': interface.name,
180 'is_active_dom_object': is_active_dom_object,
181 'is_array_buffer_or_view': is_array_buffer_or_view, 180 'is_array_buffer_or_view': is_array_buffer_or_view,
182 'is_check_security': is_check_security, 181 'is_check_security': is_check_security,
183 'is_event_target': is_event_target, 182 'is_event_target': is_event_target,
184 'is_exception': interface.is_exception, 183 'is_exception': interface.is_exception,
184 'is_global': is_global,
185 'is_node': inherits_interface(interface.name, 'Node'), 185 'is_node': inherits_interface(interface.name, 'Node'),
186 'is_partial': interface.is_partial, 186 'is_partial': interface.is_partial,
187 'is_typed_array_type': is_typed_array_type, 187 'is_typed_array_type': is_typed_array_type,
188 'lifetime': 'Dependent' 188 'lifetime': 'Dependent' if (has_visit_dom_wrapper or is_dependent_lifeti me) else 'Independent',
189 if (has_visit_dom_wrapper or
190 is_active_dom_object or
191 is_dependent_lifetime)
192 else 'Independent',
193 'measure_as': v8_utilities.measure_as(interface, None), # [MeasureAs] 189 'measure_as': v8_utilities.measure_as(interface, None), # [MeasureAs]
190 'origin_trial_name': v8_utilities.origin_trial_name(interface),
194 'parent_interface': parent_interface, 191 'parent_interface': parent_interface,
195 'pass_cpp_type': cpp_template_type( 192 'pass_cpp_type': cpp_template_type(
196 cpp_ptr_type('PassRefPtr', 'RawPtr', this_gc_type), 193 cpp_ptr_type('PassRefPtr', 'RawPtr', this_gc_type),
197 cpp_name(interface)), 194 cpp_name(interface)),
198 'runtime_enabled_function': runtime_enabled_function_name(interface), # [RuntimeEnabled] 195 'runtime_enabled_function': runtime_enabled_function_name(interface), # [RuntimeEnabled]
199 'set_wrapper_reference_from': set_wrapper_reference_from, 196 'set_wrapper_reference_from': set_wrapper_reference_from,
200 'set_wrapper_reference_to': set_wrapper_reference_to, 197 'set_wrapper_reference_to': set_wrapper_reference_to,
201 'v8_class': v8_class_name, 198 'v8_class': v8_class_name,
202 'v8_class_or_partial': v8_class_name_or_partial, 199 'v8_class_or_partial': v8_class_name_or_partial,
203 'wrapper_class_id': wrapper_class_id, 200 'wrapper_class_id': wrapper_class_id,
(...skipping 14 matching lines...) Expand all
218 'number_of_required_arguments': 215 'number_of_required_arguments':
219 number_of_required_arguments(constructor), 216 number_of_required_arguments(constructor),
220 } for constructor in interface.custom_constructors] 217 } for constructor in interface.custom_constructors]
221 218
222 # [NamedConstructor] 219 # [NamedConstructor]
223 named_constructor = named_constructor_context(interface) 220 named_constructor = named_constructor_context(interface)
224 221
225 if constructors or custom_constructors or named_constructor: 222 if constructors or custom_constructors or named_constructor:
226 if interface.is_partial: 223 if interface.is_partial:
227 raise Exception('[Constructor] and [NamedConstructor] MUST NOT be' 224 raise Exception('[Constructor] and [NamedConstructor] MUST NOT be'
228 ' specified on partial interface definitions:' 225 ' specified on partial interface definitions: '
229 '%s' % interface.name) 226 '%s' % interface.name)
230 227
231 includes.add('bindings/core/v8/V8ObjectConstructor.h') 228 includes.add('bindings/core/v8/V8ObjectConstructor.h')
232 includes.add('core/frame/LocalDOMWindow.h') 229 includes.add('core/frame/LocalDOMWindow.h')
230 elif 'Measure' in extended_attributes or 'MeasureAs' in extended_attributes:
231 raise Exception('[Measure] or [MeasureAs] specified for interface withou t a constructor: '
232 '%s' % interface.name)
233 233
234 # [Unscopeable] attributes and methods 234 # [Unscopeable] attributes and methods
235 unscopeables = [] 235 unscopeables = []
236 for attribute in interface.attributes: 236 for attribute in interface.attributes:
237 if 'Unscopeable' in attribute.extended_attributes: 237 if 'Unscopeable' in attribute.extended_attributes:
238 unscopeables.append((attribute.name, v8_utilities.runtime_enabled_fu nction_name(attribute))) 238 unscopeables.append((attribute.name, v8_utilities.runtime_enabled_fu nction_name(attribute)))
239 for method in interface.operations: 239 for method in interface.operations:
240 if 'Unscopeable' in method.extended_attributes: 240 if 'Unscopeable' in method.extended_attributes:
241 unscopeables.append((method.name, v8_utilities.runtime_enabled_funct ion_name(method))) 241 unscopeables.append((method.name, v8_utilities.runtime_enabled_funct ion_name(method)))
242 242
243 context.update({ 243 context.update({
244 'constructors': constructors, 244 'constructors': constructors,
245 'has_custom_constructor': bool(custom_constructors), 245 'has_custom_constructor': bool(custom_constructors),
246 'interface_length': 246 'interface_length':
247 interface_length(interface, constructors + custom_constructors), 247 interface_length(interface, constructors + custom_constructors),
248 'is_constructor_raises_exception': extended_attributes.get('RaisesExcept ion') == 'Constructor', # [RaisesException=Constructor] 248 'is_constructor_raises_exception': extended_attributes.get('RaisesExcept ion') == 'Constructor', # [RaisesException=Constructor]
249 'named_constructor': named_constructor, 249 'named_constructor': named_constructor,
250 'unscopeables': sorted(unscopeables), 250 'unscopeables': sorted(unscopeables),
251 }) 251 })
252 252
253 constants = [constant_context(constant, interface) for constant in interface .constants] 253 constants = [constant_context(constant, interface) for constant in interface .constants]
254 254
255 special_getter_constants = [] 255 special_getter_constants = []
256 runtime_enabled_constants = [] 256 runtime_enabled_constants = dict()
257 constant_configuration_constants = [] 257 constant_configuration_constants = []
258 258
259 for constant in constants: 259 for constant in constants:
260 if constant['measure_as'] or constant['deprecate_as']: 260 if constant['measure_as'] or constant['deprecate_as'] or constant['origi n_trial_name']:
261 special_getter_constants.append(constant) 261 special_getter_constants.append(constant)
262 continue 262 continue
263 if constant['runtime_enabled_function']: 263 runtime_enabled_function = constant['runtime_enabled_function']
264 runtime_enabled_constants.append(constant) 264 if runtime_enabled_function:
265 if runtime_enabled_function not in runtime_enabled_constants:
266 runtime_enabled_constants[runtime_enabled_function] = []
267 runtime_enabled_constants[runtime_enabled_function].append(constant)
265 continue 268 continue
266 constant_configuration_constants.append(constant) 269 constant_configuration_constants.append(constant)
267 270
268 # Constants 271 # Constants
269 context.update({ 272 context.update({
270 'constant_configuration_constants': constant_configuration_constants, 273 'constant_configuration_constants': constant_configuration_constants,
271 'constants': constants, 274 'constants': constants,
272 'do_not_check_constants': 'DoNotCheckConstants' in extended_attributes, 275 'do_not_check_constants': 'DoNotCheckConstants' in extended_attributes,
273 'has_constant_configuration': any( 276 'has_constant_configuration': any(
274 not constant['runtime_enabled_function'] 277 not constant['runtime_enabled_function']
275 for constant in constants), 278 for constant in constants),
276 'runtime_enabled_constants': runtime_enabled_constants, 279 'runtime_enabled_constants': sorted(runtime_enabled_constants.iteritems( )),
277 'special_getter_constants': special_getter_constants, 280 'special_getter_constants': special_getter_constants,
278 }) 281 })
279 282
280 # Attributes 283 # Attributes
281 attributes = [v8_attributes.attribute_context(interface, attribute) 284 attributes = [v8_attributes.attribute_context(interface, attribute)
282 for attribute in interface.attributes] 285 for attribute in interface.attributes]
283 286
284 has_conditional_attributes = any(attribute['exposed_test'] for attribute in attributes) 287 has_conditional_attributes = any(attribute['exposed_test'] for attribute in attributes)
285 if has_conditional_attributes and interface.is_partial: 288 if has_conditional_attributes and interface.is_partial:
286 raise Exception('Conditional attributes between partial interfaces in mo dules and the original interfaces(%s) in core are not allowed.' % interface.name ) 289 raise Exception('Conditional attributes between partial interfaces in mo dules and the original interfaces(%s) in core are not allowed.' % interface.name )
287 290
288 context.update({ 291 context.update({
289 'attributes': attributes, 292 'attributes': attributes,
290 'has_accessor_configuration': any( 293 'has_accessor_configuration': any(
291 attribute['is_expose_js_accessors'] and 294 not (attribute['exposed_test'] or
292 not (attribute['is_static'] or
293 attribute['runtime_enabled_function']) and 295 attribute['runtime_enabled_function']) and
296 not attribute['is_data_type_property'] and
294 attribute['should_be_exposed_to_script'] 297 attribute['should_be_exposed_to_script']
295 for attribute in attributes), 298 for attribute in attributes),
296 'has_attribute_configuration': any( 299 'has_attribute_configuration': any(
297 not (attribute['is_expose_js_accessors'] or 300 not (attribute['exposed_test'] or
298 attribute['is_static'] or 301 attribute['runtime_enabled_function']) and
299 attribute['runtime_enabled_function']) 302 attribute['is_data_type_property'] and
300 and attribute['should_be_exposed_to_script'] 303 attribute['should_be_exposed_to_script']
301 for attribute in attributes), 304 for attribute in attributes),
302 'has_constructor_attributes': any(attribute['constructor_type'] for attr ibute in attributes), 305 'has_constructor_attributes': any(attribute['constructor_type'] for attr ibute in attributes),
306 'needs_constructor_setter_callback': any(attribute['constructor_type'] = = attribute['name'] for attribute in attributes),
303 'has_replaceable_attributes': any(attribute['is_replaceable'] for attrib ute in attributes), 307 'has_replaceable_attributes': any(attribute['is_replaceable'] for attrib ute in attributes),
304 }) 308 })
305 309
306 # Methods 310 # Methods
307 methods = [] 311 methods = []
308 if interface.original_interface: 312 if interface.original_interface:
309 methods.extend([v8_methods.method_context(interface, operation, is_visib le=False) 313 methods.extend([v8_methods.method_context(interface, operation, is_visib le=False)
310 for operation in interface.original_interface.operations 314 for operation in interface.original_interface.operations
311 if operation.name]) 315 if operation.name])
312 methods.extend([v8_methods.method_context(interface, method) 316 methods.extend([v8_methods.method_context(interface, method)
(...skipping 24 matching lines...) Expand all
337 argument = IdlArgument(interface.idl_name) 341 argument = IdlArgument(interface.idl_name)
338 argument.idl_type = idl_type 342 argument.idl_type = idl_type
339 argument.name = name 343 argument.name = name
340 argument.is_optional = is_optional 344 argument.is_optional = is_optional
341 if extended_attributes: 345 if extended_attributes:
342 argument.extended_attributes.update(extended_attributes) 346 argument.extended_attributes.update(extended_attributes)
343 return argument 347 return argument
344 348
345 # [Iterable], iterable<>, maplike<> and setlike<> 349 # [Iterable], iterable<>, maplike<> and setlike<>
346 iterator_method = None 350 iterator_method = None
351 has_array_iterator = False
352
347 # FIXME: support Iterable in partial interfaces. However, we don't 353 # FIXME: support Iterable in partial interfaces. However, we don't
348 # need to support iterator overloads between interface and 354 # need to support iterator overloads between interface and
349 # partial interface definitions. 355 # partial interface definitions.
350 # http://heycam.github.io/webidl/#idl-overloading 356 # http://heycam.github.io/webidl/#idl-overloading
351 if (not interface.is_partial 357 if (not interface.is_partial
352 and (interface.iterable or interface.maplike or interface.setlike 358 and (interface.iterable or interface.maplike or interface.setlike
353 or 'Iterable' in extended_attributes)): 359 or interface.has_indexed_elements or 'Iterable' in extended_attribu tes)):
354 360
355 used_extended_attributes = {} 361 used_extended_attributes = {}
356 362
357 if interface.iterable: 363 if interface.iterable:
358 used_extended_attributes.update(interface.iterable.extended_attribut es) 364 used_extended_attributes.update(interface.iterable.extended_attribut es)
359 elif interface.maplike: 365 elif interface.maplike:
360 used_extended_attributes.update(interface.maplike.extended_attribute s) 366 used_extended_attributes.update(interface.maplike.extended_attribute s)
361 elif interface.setlike: 367 elif interface.setlike:
362 used_extended_attributes.update(interface.setlike.extended_attribute s) 368 used_extended_attributes.update(interface.setlike.extended_attribute s)
363 369
(...skipping 12 matching lines...) Expand all
376 'CallWith': ['ScriptState', 'ThisValue'], 382 'CallWith': ['ScriptState', 'ThisValue'],
377 }) 383 })
378 384
379 def generated_iterator_method(name, implemented_as=None): 385 def generated_iterator_method(name, implemented_as=None):
380 return generated_method( 386 return generated_method(
381 return_type=IdlType('Iterator'), 387 return_type=IdlType('Iterator'),
382 name=name, 388 name=name,
383 extended_attributes=used_extended_attributes, 389 extended_attributes=used_extended_attributes,
384 implemented_as=implemented_as) 390 implemented_as=implemented_as)
385 391
386 iterator_method = generated_iterator_method('iterator', implemented_as=' iterator') 392 if interface.iterable or interface.maplike or interface.setlike or 'Iter able' in extended_attributes:
393 iterator_method = generated_iterator_method('iterator', implemented_ as='iterator')
394 elif interface.has_indexed_elements:
395 has_array_iterator = True
387 396
388 if interface.iterable or interface.maplike or interface.setlike: 397 if interface.iterable or interface.maplike or interface.setlike:
389 implicit_methods = [ 398 implicit_methods = [
390 generated_iterator_method('keys'), 399 generated_iterator_method('keys'),
391 generated_iterator_method('values'), 400 generated_iterator_method('values'),
392 generated_iterator_method('entries'), 401 generated_iterator_method('entries'),
393 402
394 # void forEach(Function callback, [Default=Undefined] optional a ny thisArg) 403 # void forEach(Function callback, [Default=Undefined] optional a ny thisArg)
395 generated_method(IdlType('void'), 'forEach', 404 generated_method(IdlType('void'), 'forEach',
396 arguments=[generated_argument(IdlType('Function '), 'callback'), 405 arguments=[generated_argument(IdlType('Function '), 'callback'),
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
543 # FIXME: This calculation doesn't take into account whether runtime 552 # FIXME: This calculation doesn't take into account whether runtime
544 # enabled overloads are actually enabled, so length may be incorrect. 553 # enabled overloads are actually enabled, so length may be incorrect.
545 # E.g., [RuntimeEnabled=Foo] void f(); void f(long x); 554 # E.g., [RuntimeEnabled=Foo] void f(); void f(long x);
546 # should have length 1 if Foo is not enabled, but length 0 if it is. 555 # should have length 1 if Foo is not enabled, but length 0 if it is.
547 method['length'] = (method['overloads']['length'] if 'overloads' in meth od else 556 method['length'] = (method['overloads']['length'] if 'overloads' in meth od else
548 method['number_of_required_arguments']) 557 method['number_of_required_arguments'])
549 558
550 context.update({ 559 context.update({
551 'conditionally_enabled_methods': conditionally_enabled_methods, 560 'conditionally_enabled_methods': conditionally_enabled_methods,
552 'custom_registration_methods': custom_registration_methods, 561 'custom_registration_methods': custom_registration_methods,
553 'has_origin_safe_method_setter': any( 562 'has_origin_safe_method_setter': is_global and any(
554 method['is_check_security_for_frame'] and not method['is_read_only'] 563 method['is_check_security_for_receiver'] and not method['is_unforgea ble']
555 for method in methods), 564 for method in methods),
556 'has_private_script': any(attribute['is_implemented_in_private_script'] for attribute in attributes) or 565 'has_private_script': any(attribute['is_implemented_in_private_script'] for attribute in attributes) or
557 any(method['is_implemented_in_private_script'] for method in methods ), 566 any(method['is_implemented_in_private_script'] for method in methods ),
558 'iterator_method': iterator_method, 567 'iterator_method': iterator_method,
568 'has_array_iterator': has_array_iterator,
559 'method_configuration_methods': method_configuration_methods, 569 'method_configuration_methods': method_configuration_methods,
560 'methods': methods, 570 'methods': methods,
561 }) 571 })
562 572
563 # Conditionally enabled members 573 # Conditionally enabled members
564 has_conditional_attributes_on_instance = any( 574 has_conditional_attributes_on_instance = any(
565 attribute['exposed_test'] and attribute['on_instance'] 575 attribute['exposed_test'] and attribute['on_instance']
566 for attribute in attributes) 576 for attribute in attributes)
567 has_conditional_attributes_on_prototype = any( 577 has_conditional_attributes_on_prototype = any(
568 attribute['exposed_test'] and attribute['on_prototype'] 578 attribute['exposed_test'] and attribute['on_prototype']
569 for attribute in attributes) 579 for attribute in attributes)
570 context.update({ 580 context.update({
571 'has_conditional_attributes_on_instance': 581 'has_conditional_attributes_on_instance':
572 has_conditional_attributes_on_instance, 582 has_conditional_attributes_on_instance,
573 'has_conditional_attributes_on_prototype': 583 'has_conditional_attributes_on_prototype':
574 has_conditional_attributes_on_prototype, 584 has_conditional_attributes_on_prototype,
575 }) 585 })
576 586
577 context.update({ 587 context.update({
578 'indexed_property_getter': property_getter(interface.indexed_property_ge tter, ['index']), 588 'indexed_property_getter': property_getter(interface.indexed_property_ge tter, ['index']),
579 'indexed_property_setter': property_setter(interface.indexed_property_se tter, interface), 589 'indexed_property_setter': property_setter(interface.indexed_property_se tter, interface),
580 'indexed_property_deleter': property_deleter(interface.indexed_property_ deleter), 590 'indexed_property_deleter': property_deleter(interface.indexed_property_ deleter),
581 'is_override_builtins': 'OverrideBuiltins' in extended_attributes, 591 'is_override_builtins': 'OverrideBuiltins' in extended_attributes,
582 'named_property_getter': property_getter(interface.named_property_getter , ['propertyName']), 592 'named_property_getter': property_getter(interface.named_property_getter , ['propertyName']),
583 'named_property_setter': property_setter(interface.named_property_setter , interface), 593 'named_property_setter': property_setter(interface.named_property_setter , interface),
584 'named_property_deleter': property_deleter(interface.named_property_dele ter), 594 'named_property_deleter': property_deleter(interface.named_property_dele ter),
585 }) 595 })
596 context.update({
597 'has_named_properties_object': is_global and context['named_property_get ter'],
598 })
586 599
587 return context 600 return context
588 601
589 602
590 # [DeprecateAs], [Reflect], [RuntimeEnabled] 603 # [DeprecateAs], [OriginTrialEnabled], [Reflect], [RuntimeEnabled]
591 def constant_context(constant, interface): 604 def constant_context(constant, interface):
592 extended_attributes = constant.extended_attributes 605 extended_attributes = constant.extended_attributes
606
607 if 'OriginTrialEnabled' in extended_attributes:
608 includes.add('core/inspector/ConsoleMessage.h')
609 includes.add('core/origin_trials/OriginTrials.h')
610
593 return { 611 return {
594 'cpp_class': extended_attributes.get('PartialInterfaceImplementedAs'), 612 'cpp_class': extended_attributes.get('PartialInterfaceImplementedAs'),
595 'deprecate_as': v8_utilities.deprecate_as(constant), # [DeprecateAs] 613 'deprecate_as': v8_utilities.deprecate_as(constant), # [DeprecateAs]
596 'idl_type': constant.idl_type.name, 614 'idl_type': constant.idl_type.name,
615 'is_origin_trial_enabled': v8_utilities.origin_trial_enabled_function(co nstant) or v8_utilities.origin_trial_enabled_function(interface), # [OriginTria lEnabled]
597 'measure_as': v8_utilities.measure_as(constant, interface), # [MeasureA s] 616 'measure_as': v8_utilities.measure_as(constant, interface), # [MeasureA s]
598 'name': constant.name, 617 'name': constant.name,
618 'origin_trial_enabled': v8_utilities.origin_trial_enabled_function(const ant), # [OriginTrialEnabled]
619 'origin_trial_enabled_per_interface': v8_utilities.origin_trial_enabled_ function(interface), # [OriginTrialEnabled]
620 'origin_trial_name': extended_attributes.get('OriginTrialEnabled'), # [ OriginTrialEnabled]
599 # FIXME: use 'reflected_name' as correct 'name' 621 # FIXME: use 'reflected_name' as correct 'name'
600 'reflected_name': extended_attributes.get('Reflect', constant.name), 622 'reflected_name': extended_attributes.get('Reflect', constant.name),
601 'runtime_enabled_function': runtime_enabled_function_name(constant), 623 'runtime_enabled_function': runtime_enabled_function_name(constant), # [RuntimeEnabled]
602 'value': constant.value, 624 'value': constant.value,
603 } 625 }
604 626
605 627
606 ################################################################################ 628 ################################################################################
607 # Overloads 629 # Overloads
608 ################################################################################ 630 ################################################################################
609 631
610 def compute_method_overloads_context(interface, methods): 632 def compute_method_overloads_context(interface, methods):
611 # Regular methods 633 # Regular methods
(...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after
883 905
884 If there is more than one entry in an effective overload set that has a 906 If there is more than one entry in an effective overload set that has a
885 given type list length, then for those entries there must be an index i 907 given type list length, then for those entries there must be an index i
886 such that for each pair of entries the types at index i are 908 such that for each pair of entries the types at index i are
887 distinguishable. 909 distinguishable.
888 The lowest such index is termed the distinguishing argument index for the 910 The lowest such index is termed the distinguishing argument index for the
889 entries of the effective overload set with the given type list length. 911 entries of the effective overload set with the given type list length.
890 """ 912 """
891 # Only applicable “If there is more than one entry” 913 # Only applicable “If there is more than one entry”
892 assert len(entries) > 1 914 assert len(entries) > 1
893 type_lists = [tuple(idl_type.name for idl_type in entry[1]) 915
916 def typename_without_nullable(idl_type):
917 if idl_type.is_nullable:
918 return idl_type.inner_type.name
919 return idl_type.name
920
921 type_lists = [tuple(typename_without_nullable(idl_type)
922 for idl_type in entry[1])
894 for entry in entries] 923 for entry in entries]
895 type_list_length = len(type_lists[0]) 924 type_list_length = len(type_lists[0])
896 # Only applicable for entries that “[have] a given type list length” 925 # Only applicable for entries that “[have] a given type list length”
897 assert all(len(type_list) == type_list_length for type_list in type_lists) 926 assert all(len(type_list) == type_list_length for type_list in type_lists)
898 name = entries[0][0].get('name', 'Constructor') # for error reporting 927 name = entries[0][0].get('name', 'Constructor') # for error reporting
899 928
900 # The spec defines the distinguishing argument index by conditions it must 929 # The spec defines the distinguishing argument index by conditions it must
901 # satisfy, but does not give an algorithm. 930 # satisfy, but does not give an algorithm.
902 # 931 #
903 # We compute the distinguishing argument index by first computing the 932 # We compute the distinguishing argument index by first computing the
(...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after
1188 ################################################################################ 1217 ################################################################################
1189 # Constructors 1218 # Constructors
1190 ################################################################################ 1219 ################################################################################
1191 1220
1192 # [Constructor] 1221 # [Constructor]
1193 def constructor_context(interface, constructor): 1222 def constructor_context(interface, constructor):
1194 # [RaisesException=Constructor] 1223 # [RaisesException=Constructor]
1195 is_constructor_raises_exception = \ 1224 is_constructor_raises_exception = \
1196 interface.extended_attributes.get('RaisesException') == 'Constructor' 1225 interface.extended_attributes.get('RaisesException') == 'Constructor'
1197 1226
1227 argument_contexts = [
1228 v8_methods.argument_context(interface, constructor, argument, index)
1229 for index, argument in enumerate(constructor.arguments)]
1230
1198 return { 1231 return {
1199 'arguments': [v8_methods.argument_context(interface, constructor, argume nt, index) 1232 'arguments': argument_contexts,
1200 for index, argument in enumerate(constructor.arguments)],
1201 'cpp_type': cpp_template_type( 1233 'cpp_type': cpp_template_type(
1202 cpp_ptr_type('RefPtr', 'RawPtr', gc_type(interface)), 1234 cpp_ptr_type('RefPtr', 'RawPtr', gc_type(interface)),
1203 cpp_name(interface)), 1235 cpp_name(interface)),
1204 'cpp_value': v8_methods.cpp_value( 1236 'cpp_value': v8_methods.cpp_value(
1205 interface, constructor, len(constructor.arguments)), 1237 interface, constructor, len(constructor.arguments)),
1206 'has_exception_state': 1238 'has_exception_state':
1207 is_constructor_raises_exception or 1239 is_constructor_raises_exception or
1208 any(argument for argument in constructor.arguments 1240 any(argument for argument in constructor.arguments
1209 if argument.idl_type.name == 'SerializedScriptValue' or 1241 if argument.idl_type.name == 'SerializedScriptValue' or
1210 argument.idl_type.v8_conversion_needs_exception_state), 1242 argument.idl_type.v8_conversion_needs_exception_state),
1243 'has_optional_argument_without_default_value':
1244 any(True for argument_context in argument_contexts
1245 if argument_context['is_optional_without_default_value']),
1211 'is_call_with_document': 1246 'is_call_with_document':
1212 # [ConstructorCallWith=Document] 1247 # [ConstructorCallWith=Document]
1213 has_extended_attribute_value(interface, 1248 has_extended_attribute_value(interface,
1214 'ConstructorCallWith', 'Document'), 1249 'ConstructorCallWith', 'Document'),
1215 'is_call_with_execution_context': 1250 'is_call_with_execution_context':
1216 # [ConstructorCallWith=ExecutionContext] 1251 # [ConstructorCallWith=ExecutionContext]
1217 has_extended_attribute_value(interface, 1252 has_extended_attribute_value(interface,
1218 'ConstructorCallWith', 'ExecutionContext'), 1253 'ConstructorCallWith', 'ExecutionContext'),
1219 'is_call_with_script_state': 1254 'is_call_with_script_state':
1220 # [ConstructorCallWith=ScriptState] 1255 # [ConstructorCallWith=ScriptState]
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
1323 def property_setter(setter, interface): 1358 def property_setter(setter, interface):
1324 if not setter: 1359 if not setter:
1325 return None 1360 return None
1326 1361
1327 extended_attributes = setter.extended_attributes 1362 extended_attributes = setter.extended_attributes
1328 idl_type = setter.arguments[1].idl_type 1363 idl_type = setter.arguments[1].idl_type
1329 idl_type.add_includes_for_type(extended_attributes) 1364 idl_type.add_includes_for_type(extended_attributes)
1330 is_call_with_script_state = v8_utilities.has_extended_attribute_value(setter , 'CallWith', 'ScriptState') 1365 is_call_with_script_state = v8_utilities.has_extended_attribute_value(setter , 'CallWith', 'ScriptState')
1331 is_raises_exception = 'RaisesException' in extended_attributes 1366 is_raises_exception = 'RaisesException' in extended_attributes
1332 1367
1333 # [TypeChecking=Interface] / [LegacyInterfaceTypeChecking] 1368 # [LegacyInterfaceTypeChecking]
1334 has_type_checking_interface = ( 1369 has_type_checking_interface = (
1335 not is_legacy_interface_type_checking(interface, setter) and 1370 not is_legacy_interface_type_checking(interface, setter) and
1336 idl_type.is_wrapper_type) 1371 idl_type.is_wrapper_type)
1337 1372
1338 return { 1373 return {
1339 'has_exception_state': (is_raises_exception or 1374 'has_exception_state': (is_raises_exception or
1340 idl_type.v8_conversion_needs_exception_state), 1375 idl_type.v8_conversion_needs_exception_state),
1341 'has_type_checking_interface': has_type_checking_interface, 1376 'has_type_checking_interface': has_type_checking_interface,
1342 'idl_type': idl_type.base_type, 1377 'idl_type': idl_type.base_type,
1343 'is_call_with_script_state': is_call_with_script_state, 1378 'is_call_with_script_state': is_call_with_script_state,
(...skipping 12 matching lines...) Expand all
1356 1391
1357 extended_attributes = deleter.extended_attributes 1392 extended_attributes = deleter.extended_attributes
1358 idl_type = deleter.idl_type 1393 idl_type = deleter.idl_type
1359 is_call_with_script_state = v8_utilities.has_extended_attribute_value(delete r, 'CallWith', 'ScriptState') 1394 is_call_with_script_state = v8_utilities.has_extended_attribute_value(delete r, 'CallWith', 'ScriptState')
1360 return { 1395 return {
1361 'is_call_with_script_state': is_call_with_script_state, 1396 'is_call_with_script_state': is_call_with_script_state,
1362 'is_custom': 'Custom' in extended_attributes, 1397 'is_custom': 'Custom' in extended_attributes,
1363 'is_raises_exception': 'RaisesException' in extended_attributes, 1398 'is_raises_exception': 'RaisesException' in extended_attributes,
1364 'name': cpp_name(deleter), 1399 'name': cpp_name(deleter),
1365 } 1400 }
OLDNEW
« no previous file with comments | « bindings/scripts/v8_dictionary.py ('k') | bindings/scripts/v8_methods.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698