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

Side by Side Diff: bindings/dart/scripts/dart_attributes.py

Issue 581453002: Dartium Roll 38 roll (Closed) Base URL: https://dart.googlecode.com/svn/third_party/WebCore
Patch Set: Sync'd w/ r 182210 Created 6 years, 3 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 | Annotate | Revision Log
OLDNEW
1 # Copyright (C) 2013 Google Inc. All rights reserved. 1 # Copyright (C) 2013 Google Inc. All rights reserved.
2 # 2 #
3 # Redistribution and use in source and binary forms, with or without 3 # Redistribution and use in source and binary forms, with or without
4 # modification, are permitted provided that the following conditions are 4 # modification, are permitted provided that the following conditions are
5 # met: 5 # met:
6 # 6 #
7 # * Redistributions of source code must retain the above copyright 7 # * Redistributions of source code must retain the above copyright
8 # notice, this list of conditions and the following disclaimer. 8 # notice, this list of conditions and the following disclaimer.
9 # * Redistributions in binary form must reproduce the above 9 # * Redistributions in binary form must reproduce the above
10 # copyright notice, this list of conditions and the following disclaimer 10 # copyright notice, this list of conditions and the following disclaimer
(...skipping 26 matching lines...) Expand all
37 from idl_types import inherits_interface 37 from idl_types import inherits_interface
38 from dart_interface import suppress_getter, suppress_setter 38 from dart_interface import suppress_getter, suppress_setter
39 import dart_types 39 import dart_types
40 from dart_utilities import DartUtilities 40 from dart_utilities import DartUtilities
41 from v8_globals import includes, interfaces 41 from v8_globals import includes, interfaces
42 42
43 43
44 def generate_attribute(interface, attribute): 44 def generate_attribute(interface, attribute):
45 idl_type = attribute.idl_type 45 idl_type = attribute.idl_type
46 base_idl_type = idl_type.base_type 46 base_idl_type = idl_type.base_type
47 # TODO(terry): Work around for DOMString[] base should be IDLTypeArray
48 if base_idl_type == None:
49 # Returns Array or Sequence.
50 base_idl_type = idl_type.inner_name
47 extended_attributes = attribute.extended_attributes 51 extended_attributes = attribute.extended_attributes
48 52
49 idl_type.add_includes_for_type() 53 idl_type.add_includes_for_type()
50 54
51 # [CheckSecurity] 55 # [CheckSecurity]
52 is_check_security_for_node = 'CheckSecurity' in extended_attributes 56 is_check_security_for_node = 'CheckSecurity' in extended_attributes
53 if is_check_security_for_node: 57 if is_check_security_for_node:
54 includes.add('bindings/common/BindingSecurity.h') 58 includes.add('bindings/common/BindingSecurity.h')
55 # [Custom] 59 # [Custom]
56 has_custom_getter = (('Custom' in extended_attributes and 60 has_custom_getter = (('Custom' in extended_attributes and
(...skipping 19 matching lines...) Expand all
76 extended_attributes['RaisesException'] in [None, 'Setter']) 80 extended_attributes['RaisesException'] in [None, 'Setter'])
77 # [DartStrictTypeChecking] 81 # [DartStrictTypeChecking]
78 has_strict_type_checking = ( 82 has_strict_type_checking = (
79 ('DartStrictTypeChecking' in extended_attributes or 83 ('DartStrictTypeChecking' in extended_attributes or
80 'DartStrictTypeChecking' in interface.extended_attributes) and 84 'DartStrictTypeChecking' in interface.extended_attributes) and
81 idl_type.is_wrapper_type) 85 idl_type.is_wrapper_type)
82 86
83 if (base_idl_type == 'EventHandler' and 87 if (base_idl_type == 'EventHandler' and
84 interface.name in ['Window', 'WorkerGlobalScope'] and 88 interface.name in ['Window', 'WorkerGlobalScope'] and
85 attribute.name == 'onerror'): 89 attribute.name == 'onerror'):
86 includes.add('bindings/v8/V8ErrorHandler.h') 90 includes.add('bindings/core/v8/V8ErrorHandler.h')
87 91
88 is_auto_scope = not 'DartNoAutoScope' in extended_attributes 92 is_auto_scope = not 'DartNoAutoScope' in extended_attributes
89 contents = { 93 contents = {
90 'access_control_list': access_control_list(attribute), 94 'access_control_list': access_control_list(attribute),
91 'activity_logging_world_list_for_getter': DartUtilities.activity_logging _world_list(attribute, 'Getter'), # [ActivityLogging] 95 'activity_logging_world_list_for_getter': DartUtilities.activity_logging _world_list(attribute, 'Getter'), # [ActivityLogging]
92 'activity_logging_world_list_for_setter': DartUtilities.activity_logging _world_list(attribute, 'Setter'), # [ActivityLogging] 96 'activity_logging_world_list_for_setter': DartUtilities.activity_logging _world_list(attribute, 'Setter'), # [ActivityLogging]
93 'cached_attribute_validation_method': extended_attributes.get('CachedAtt ribute'), 97 'cached_attribute_validation_method': extended_attributes.get('CachedAtt ribute'),
94 'conditional_string': DartUtilities.conditional_string(attribute), 98 'conditional_string': DartUtilities.conditional_string(attribute),
95 'constructor_type': idl_type.constructor_type_name 99 'constructor_type': idl_type.constructor_type_name
96 if is_constructor_attribute(attribute) else None, 100 if is_constructor_attribute(attribute) else None,
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
236 not attribute.is_static): 240 not attribute.is_static):
237 # Pass by reference. 241 # Pass by reference.
238 arguments.append('*receiver') 242 arguments.append('*receiver')
239 243
240 # TODO(jacobr): refactor has_type_checking_nullable to better match v8. 244 # TODO(jacobr): refactor has_type_checking_nullable to better match v8.
241 has_type_checking_nullable = ( 245 has_type_checking_nullable = (
242 (DartUtilities.has_extended_attribute_value(interface, 'TypeChecking', ' Nullable') or 246 (DartUtilities.has_extended_attribute_value(interface, 'TypeChecking', ' Nullable') or
243 DartUtilities.has_extended_attribute_value(attribute, 'TypeChecking', ' Nullable')) and 247 DartUtilities.has_extended_attribute_value(attribute, 'TypeChecking', ' Nullable')) and
244 idl_type.is_wrapper_type) 248 idl_type.is_wrapper_type)
245 249
246 if attribute.idl_type.is_nullable and not has_type_checking_nullable: 250 if attribute.idl_type.is_explicit_nullable:
247 arguments.append('isNull') 251 arguments.append('isNull')
248 if contents['is_getter_raises_exception']: 252 if contents['is_getter_raises_exception']:
249 arguments.append('es') 253 arguments.append('es')
250 return '%s(%s)' % (getter_name, ', '.join(arguments)) 254 return '%s(%s)' % (getter_name, ', '.join(arguments))
251 255
252 256
253 CONTENT_ATTRIBUTE_GETTER_NAMES = { 257 CONTENT_ATTRIBUTE_GETTER_NAMES = {
254 'boolean': 'hasAttribute', 258 'boolean': 'hasAttribute',
255 'long': 'getIntegralAttribute', 259 'long': 'getIntegralAttribute',
256 'unsigned long': 'getUnsignedIntegralAttribute', 260 'unsigned long': 'getUnsignedIntegralAttribute',
(...skipping 10 matching lines...) Expand all
267 # Special-case for performance optimization. 271 # Special-case for performance optimization.
268 return 'get%sAttribute' % content_attribute_name.capitalize() 272 return 'get%sAttribute' % content_attribute_name.capitalize()
269 273
270 arguments.append(scoped_content_attribute_name(interface, attribute)) 274 arguments.append(scoped_content_attribute_name(interface, attribute))
271 275
272 base_idl_type = attribute.idl_type.base_type 276 base_idl_type = attribute.idl_type.base_type
273 if base_idl_type in CONTENT_ATTRIBUTE_GETTER_NAMES: 277 if base_idl_type in CONTENT_ATTRIBUTE_GETTER_NAMES:
274 return CONTENT_ATTRIBUTE_GETTER_NAMES[base_idl_type] 278 return CONTENT_ATTRIBUTE_GETTER_NAMES[base_idl_type]
275 if 'URL' in attribute.extended_attributes: 279 if 'URL' in attribute.extended_attributes:
276 return 'getURLAttribute' 280 return 'getURLAttribute'
277 return 'getAttribute' 281 return 'fastGetAttribute'
278 282
279 283
280 def is_keep_alive_for_gc(interface, attribute): 284 def is_keep_alive_for_gc(interface, attribute):
281 idl_type = attribute.idl_type 285 idl_type = attribute.idl_type
282 base_idl_type = idl_type.base_type 286 base_idl_type = idl_type.base_type
283 extended_attributes = attribute.extended_attributes 287 extended_attributes = attribute.extended_attributes
284 return ( 288 return (
285 # For readonly attributes, for performance reasons we keep the attribute 289 # For readonly attributes, for performance reasons we keep the attribute
286 # wrapper alive while the owner wrapper is alive, because the attribute 290 # wrapper alive while the owner wrapper is alive, because the attribute
287 # never changes. 291 # never changes.
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
330 idl_type = attribute.idl_type 334 idl_type = attribute.idl_type
331 335
332 # TODO(terry): Should be able to eliminate suppress_setter as we move from 336 # TODO(terry): Should be able to eliminate suppress_setter as we move from
333 # IGNORE_MEMBERS to DartSuppress in the IDL. 337 # IGNORE_MEMBERS to DartSuppress in the IDL.
334 suppress = (suppress_setter(interface.name, attribute.name) or 338 suppress = (suppress_setter(interface.name, attribute.name) or
335 DartUtilities.has_extended_attribute_value(attribute, 'DartSuppr ess', 'Setter')) 339 DartUtilities.has_extended_attribute_value(attribute, 'DartSuppr ess', 'Setter'))
336 contents.update({ 340 contents.update({
337 'is_setter_suppressed': suppress, 341 'is_setter_suppressed': suppress,
338 'setter_lvalue': dart_types.check_reserved_name(attribute.name), 342 'setter_lvalue': dart_types.check_reserved_name(attribute.name),
339 'cpp_type': this_cpp_type, 343 'cpp_type': this_cpp_type,
340 'local_cpp_type': idl_type.cpp_type_args(attribute.extended_attributes, used_as_argument=True), 344 'local_cpp_type': idl_type.cpp_type_args(attribute.extended_attributes, raw_type=True),
341 'cpp_setter': setter_expression(interface, attribute, contents), 345 'cpp_setter': setter_expression(interface, attribute, contents),
342 'dart_value_to_local_cpp_value': 346 'dart_value_to_local_cpp_value':
343 attribute.idl_type.dart_value_to_local_cpp_value( 347 attribute.idl_type.dart_value_to_local_cpp_value(
344 interface_extended_attributes, extended_attributes, attribute.na me, False, 1, 348 interface_extended_attributes, extended_attributes, attribute.na me, False, 1,
345 contents['is_auto_scope']), 349 contents['is_auto_scope']),
346 }) 350 })
347 351
348 352
349 def setter_expression(interface, attribute, contents): 353 def setter_expression(interface, attribute, contents):
350 extended_attributes = attribute.extended_attributes 354 extended_attributes = attribute.extended_attributes
351 arguments = DartUtilities.call_with_arguments(attribute, extended_attributes .get('SetterCallWith')) 355 arguments = DartUtilities.call_with_arguments(attribute, extended_attributes .get('SetterCallWith'))
352 356
353 this_setter_base_name = setter_base_name(interface, attribute, arguments) 357 this_setter_base_name = setter_base_name(interface, attribute, arguments)
354 setter_name = DartUtilities.scoped_name(interface, attribute, this_setter_ba se_name) 358 setter_name = DartUtilities.scoped_name(interface, attribute, this_setter_ba se_name)
355 359
356 if ('PartialInterfaceImplementedAs' in extended_attributes and 360 if ('PartialInterfaceImplementedAs' in extended_attributes and
357 not attribute.is_static): 361 not attribute.is_static):
358 arguments.append('*receiver') 362 arguments.append('*receiver')
359 idl_type = attribute.idl_type 363 idl_type = attribute.idl_type
360 if idl_type.base_type == 'EventHandler': 364 if idl_type.base_type == 'EventHandler':
361 getter_name = DartUtilities.scoped_name(interface, attribute, DartUtilit ies.cpp_name(attribute)) 365 getter_name = DartUtilities.scoped_name(interface, attribute, DartUtilit ies.cpp_name(attribute))
362 contents['event_handler_getter_expression'] = '%s(%s)' % ( 366 contents['event_handler_getter_expression'] = '%s(%s)' % (
363 getter_name, ', '.join(arguments)) 367 getter_name, ', '.join(arguments))
364 # FIXME(vsm): Do we need to support this? If so, what's our analogue of 368 # FIXME(vsm): Do we need to support this? If so, what's our analogue of
365 # V8EventListenerList? 369 # V8EventListenerList?
366 arguments.append('nullptr') 370 arguments.append('nullptr')
367 # if (interface.name in ['Window', 'WorkerGlobalScope'] and 371 # if (interface.name in ['Window', 'WorkerGlobalScope'] and
368 # attribute.name == 'onerror'): 372 # attribute.name == 'onerror'):
369 # includes.add('bindings/v8/V8ErrorHandler.h') 373 # includes.add('bindings/core/v8/V8ErrorHandler.h')
370 # arguments.append('V8EventListenerList::findOrCreateWrapper<V8ErrorH andler>(jsValue, true, info.GetIsolate())') 374 # arguments.append('V8EventListenerList::findOrCreateWrapper<V8ErrorH andler>(jsValue, true, info.GetIsolate())')
371 # else: 375 # else:
372 # arguments.append('V8EventListenerList::getEventListener(jsValue, tr ue, ListenerFindOrCreate)') 376 # arguments.append('V8EventListenerList::getEventListener(jsValue, tr ue, ListenerFindOrCreate)')
373 else: 377 else:
374 attribute_name = dart_types.check_reserved_name(attribute.name) 378 attribute_name = dart_types.check_reserved_name(attribute.name)
375 arguments.append(attribute_name) 379 arguments.append(attribute_name)
376 if contents['is_setter_raises_exception']: 380 if contents['is_setter_raises_exception']:
377 arguments.append('es') 381 arguments.append('es')
378 382
379 return '%s(%s)' % (setter_name, ', '.join(arguments)) 383 return '%s(%s)' % (setter_name, ', '.join(arguments))
(...skipping 12 matching lines...) Expand all
392 arguments.append(scoped_content_attribute_name(interface, attribute)) 396 arguments.append(scoped_content_attribute_name(interface, attribute))
393 397
394 base_idl_type = attribute.idl_type.base_type 398 base_idl_type = attribute.idl_type.base_type
395 if base_idl_type in CONTENT_ATTRIBUTE_SETTER_NAMES: 399 if base_idl_type in CONTENT_ATTRIBUTE_SETTER_NAMES:
396 return CONTENT_ATTRIBUTE_SETTER_NAMES[base_idl_type] 400 return CONTENT_ATTRIBUTE_SETTER_NAMES[base_idl_type]
397 return 'setAttribute' 401 return 'setAttribute'
398 402
399 403
400 def scoped_content_attribute_name(interface, attribute): 404 def scoped_content_attribute_name(interface, attribute):
401 content_attribute_name = attribute.extended_attributes['Reflect'] or attribu te.name.lower() 405 content_attribute_name = attribute.extended_attributes['Reflect'] or attribu te.name.lower()
402 namespace = 'SVGNames' if interface.name.startswith('SVG') else 'HTMLNames' 406 if interface.name.startswith('SVG'):
403 includes.add('%s.h' % namespace) 407 # SVG's xmlbase/xmlspace/xmllang need special behavior, i.e.
404 return 'WebCore::%s::%sAttr' % (namespace, content_attribute_name) 408 # it is in XMLNames namespace and the generated attribute has no xml pre fix.
409 if attribute.name.startswith('xml'):
410 namespace = 'XMLNames'
411 content_attribute_name = content_attribute_name[3:]
412 else:
413 namespace = 'SVGNames'
414 else:
415 namespace = 'HTMLNames'
416 includes.add('core/%s.h' % namespace)
417 return '%s::%sAttr' % (namespace, content_attribute_name)
405 418
406 419
407 ################################################################################ 420 ################################################################################
408 # Attribute configuration 421 # Attribute configuration
409 ################################################################################ 422 ################################################################################
410 423
411 # [Replaceable] 424 # [Replaceable]
412 def setter_callback_name(interface, attribute): 425 def setter_callback_name(interface, attribute):
413 cpp_class_name = DartUtilities.cpp_name(interface) 426 cpp_class_name = DartUtilities.cpp_name(interface)
414 extended_attributes = attribute.extended_attributes 427 extended_attributes = attribute.extended_attributes
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
458 # Constructors 471 # Constructors
459 ################################################################################ 472 ################################################################################
460 473
461 idl_types.IdlType.constructor_type_name = property( 474 idl_types.IdlType.constructor_type_name = property(
462 # FIXME: replace this with a [ConstructorAttribute] extended attribute 475 # FIXME: replace this with a [ConstructorAttribute] extended attribute
463 lambda self: DartUtilities.strip_suffix(self.base_type, 'Constructor')) 476 lambda self: DartUtilities.strip_suffix(self.base_type, 'Constructor'))
464 477
465 478
466 def is_constructor_attribute(attribute): 479 def is_constructor_attribute(attribute):
467 # FIXME: replace this with [ConstructorAttribute] extended attribute 480 # FIXME: replace this with [ConstructorAttribute] extended attribute
468 return attribute.idl_type.base_type.endswith('Constructor') 481 return attribute.idl_type.name.endswith('Constructor')
469 482
470 483
471 def generate_constructor_getter(interface, attribute, contents): 484 def generate_constructor_getter(interface, attribute, contents):
472 contents['needs_constructor_getter_callback'] = contents['measure_as'] or co ntents['deprecate_as'] 485 contents['needs_constructor_getter_callback'] = contents['measure_as'] or co ntents['deprecate_as']
OLDNEW
« no previous file with comments | « bindings/dart/scripts/code_generator_dart.py ('k') | bindings/dart/scripts/dart_callback_interface.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698