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

Side by Side Diff: third_party/WebKit/Source/bindings/scripts/v8_interface.py

Issue 1381413003: [bindings] add support for integer-indexed @@iterator (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Use SetIntrinsicDataProperty() in new V8 roll Created 5 years, 2 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
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 335 matching lines...) Expand 10 before | Expand all | Expand 10 after
346 argument = IdlArgument(interface.idl_name) 346 argument = IdlArgument(interface.idl_name)
347 argument.idl_type = idl_type 347 argument.idl_type = idl_type
348 argument.name = name 348 argument.name = name
349 argument.is_optional = is_optional 349 argument.is_optional = is_optional
350 if extended_attributes: 350 if extended_attributes:
351 argument.extended_attributes.update(extended_attributes) 351 argument.extended_attributes.update(extended_attributes)
352 return argument 352 return argument
353 353
354 # [Iterable], iterable<>, maplike<> and setlike<> 354 # [Iterable], iterable<>, maplike<> and setlike<>
355 iterator_method = None 355 iterator_method = None
356 has_array_iterator = False
357
356 # FIXME: support Iterable in partial interfaces. However, we don't 358 # FIXME: support Iterable in partial interfaces. However, we don't
357 # need to support iterator overloads between interface and 359 # need to support iterator overloads between interface and
358 # partial interface definitions. 360 # partial interface definitions.
359 # http://heycam.github.io/webidl/#idl-overloading 361 # http://heycam.github.io/webidl/#idl-overloading
360 if (not interface.is_partial 362 if (not interface.is_partial
361 and (interface.iterable or interface.maplike or interface.setlike 363 and (interface.iterable or interface.maplike or interface.setlike
362 or 'Iterable' in extended_attributes)): 364 or interface.has_indexed_elements or 'Iterable' in extended_attribu tes)):
363 365
364 used_extended_attributes = {} 366 used_extended_attributes = {}
365 367
366 if interface.iterable: 368 if interface.iterable:
367 used_extended_attributes.update(interface.iterable.extended_attribut es) 369 used_extended_attributes.update(interface.iterable.extended_attribut es)
368 elif interface.maplike: 370 elif interface.maplike:
369 used_extended_attributes.update(interface.maplike.extended_attribute s) 371 used_extended_attributes.update(interface.maplike.extended_attribute s)
370 elif interface.setlike: 372 elif interface.setlike:
371 used_extended_attributes.update(interface.setlike.extended_attribute s) 373 used_extended_attributes.update(interface.setlike.extended_attribute s)
372 374
(...skipping 12 matching lines...) Expand all
385 'CallWith': ['ScriptState', 'ThisValue'], 387 'CallWith': ['ScriptState', 'ThisValue'],
386 }) 388 })
387 389
388 def generated_iterator_method(name, implemented_as=None): 390 def generated_iterator_method(name, implemented_as=None):
389 return generated_method( 391 return generated_method(
390 return_type=IdlType('Iterator'), 392 return_type=IdlType('Iterator'),
391 name=name, 393 name=name,
392 extended_attributes=used_extended_attributes, 394 extended_attributes=used_extended_attributes,
393 implemented_as=implemented_as) 395 implemented_as=implemented_as)
394 396
395 iterator_method = generated_iterator_method('iterator', implemented_as=' iterator') 397 if interface.iterable or interface.maplike or interface.setlike or 'Iter able' in extended_attributes:
398 iterator_method = generated_iterator_method('iterator', implemented_ as='iterator')
399 elif interface.has_indexed_elements:
400 has_array_iterator = True
396 401
397 if interface.iterable or interface.maplike or interface.setlike: 402 if interface.iterable or interface.maplike or interface.setlike:
398 implicit_methods = [ 403 implicit_methods = [
399 generated_iterator_method('keys'), 404 generated_iterator_method('keys'),
400 generated_iterator_method('values'), 405 generated_iterator_method('values'),
401 generated_iterator_method('entries'), 406 generated_iterator_method('entries'),
402 407
403 # void forEach(Function callback, [Default=Undefined] optional a ny thisArg) 408 # void forEach(Function callback, [Default=Undefined] optional a ny thisArg)
404 generated_method(IdlType('void'), 'forEach', 409 generated_method(IdlType('void'), 'forEach',
405 arguments=[generated_argument(IdlType('Function '), 'callback'), 410 arguments=[generated_argument(IdlType('Function '), 'callback'),
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
558 563
559 context.update({ 564 context.update({
560 'conditionally_enabled_methods': conditionally_enabled_methods, 565 'conditionally_enabled_methods': conditionally_enabled_methods,
561 'custom_registration_methods': custom_registration_methods, 566 'custom_registration_methods': custom_registration_methods,
562 'has_origin_safe_method_setter': any( 567 'has_origin_safe_method_setter': any(
563 method['is_check_security_for_frame'] and not method['is_read_only'] 568 method['is_check_security_for_frame'] and not method['is_read_only']
564 for method in methods), 569 for method in methods),
565 'has_private_script': any(attribute['is_implemented_in_private_script'] for attribute in attributes) or 570 'has_private_script': any(attribute['is_implemented_in_private_script'] for attribute in attributes) or
566 any(method['is_implemented_in_private_script'] for method in methods ), 571 any(method['is_implemented_in_private_script'] for method in methods ),
567 'iterator_method': iterator_method, 572 'iterator_method': iterator_method,
573 'has_array_iterator': has_array_iterator,
568 'method_configuration_methods': method_configuration_methods, 574 'method_configuration_methods': method_configuration_methods,
569 'methods': methods, 575 'methods': methods,
570 }) 576 })
571 577
572 # Conditionally enabled members 578 # Conditionally enabled members
573 has_conditional_attributes_on_instance = any( 579 has_conditional_attributes_on_instance = any(
574 attribute['exposed_test'] and attribute['on_instance'] 580 attribute['exposed_test'] and attribute['on_instance']
575 for attribute in attributes) 581 for attribute in attributes)
576 has_conditional_attributes_on_prototype = any( 582 has_conditional_attributes_on_prototype = any(
577 attribute['exposed_test'] and attribute['on_prototype'] 583 attribute['exposed_test'] and attribute['on_prototype']
(...skipping 797 matching lines...) Expand 10 before | Expand all | Expand 10 after
1375 1381
1376 extended_attributes = deleter.extended_attributes 1382 extended_attributes = deleter.extended_attributes
1377 idl_type = deleter.idl_type 1383 idl_type = deleter.idl_type
1378 is_call_with_script_state = v8_utilities.has_extended_attribute_value(delete r, 'CallWith', 'ScriptState') 1384 is_call_with_script_state = v8_utilities.has_extended_attribute_value(delete r, 'CallWith', 'ScriptState')
1379 return { 1385 return {
1380 'is_call_with_script_state': is_call_with_script_state, 1386 'is_call_with_script_state': is_call_with_script_state,
1381 'is_custom': 'Custom' in extended_attributes, 1387 'is_custom': 'Custom' in extended_attributes,
1382 'is_raises_exception': 'RaisesException' in extended_attributes, 1388 'is_raises_exception': 'RaisesException' in extended_attributes,
1383 'name': cpp_name(deleter), 1389 'name': cpp_name(deleter),
1384 } 1390 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698