Index: third_party/WebKit/Source/bindings/scripts/v8_interface.py |
diff --git a/third_party/WebKit/Source/bindings/scripts/v8_interface.py b/third_party/WebKit/Source/bindings/scripts/v8_interface.py |
index 867e7598d6f33fd96c07cd6c48d277603546ccf0..098782085d8f918c07f3644bfc074135353b8d20 100644 |
--- a/third_party/WebKit/Source/bindings/scripts/v8_interface.py |
+++ b/third_party/WebKit/Source/bindings/scripts/v8_interface.py |
@@ -374,12 +374,11 @@ def interface_context(interface, interfaces): |
}) |
# Methods |
- methods, iterator_method = methods_context(interface) |
+ context.update(methods_context(interface)) |
+ methods = context['methods'] |
context.update({ |
'has_origin_safe_method_setter': any(method['is_cross_origin'] and not method['is_unforgeable'] |
for method in methods), |
- 'iterator_method': iterator_method, |
- 'methods': methods, |
'conditionally_enabled_methods': v8_methods.filter_conditionally_enabled(methods, interface.is_partial), |
}) |
@@ -507,7 +506,11 @@ def methods_context(interface): |
interface: An interface to create contexts for |
Returns: |
- A list of method contexts, and an iterator context if available or None |
+ A dictionary with 3 keys: |
+ 'iterator_method': An iterator context if available or None. |
+ 'iterator_method_alias': A string that can also be used to refer to the |
+ @@iterator symbol or None. |
+ 'methods': A list of method contexts. |
""" |
methods = [] |
@@ -552,6 +555,10 @@ def methods_context(interface): |
# iterable<>, maplike<> and setlike<> |
iterator_method = None |
+ # Depending on the declaration, @@iterator may be a synonym for e.g. |
+ # 'entries' or 'values'. |
+ iterator_method_alias = None |
+ |
# FIXME: support Iterable in partial interfaces. However, we don't |
# need to support iterator overloads between interface and |
# partial interface definitions. |
@@ -602,11 +609,19 @@ def methods_context(interface): |
# For value iterators, the |entries|, |forEach|, |keys| and |values| are originally set |
# to corresponding properties in %ArrayPrototype%. |
+ # For pair iterators and maplike declarations, |entries| is an alias for @@iterator |
+ # itself. For setlike declarations, |values| is an alias for @@iterator. |
if not is_value_iterator: |
+ if not interface.setlike: |
+ iterator_method_alias = 'entries' |
+ entries_or_values_method = generated_iterator_method('values') |
+ else: |
+ iterator_method_alias = 'values' |
+ entries_or_values_method = generated_iterator_method('entries') |
+ |
non_overridable_methods.extend([ |
generated_iterator_method('keys'), |
- generated_iterator_method('values'), |
- generated_iterator_method('entries'), |
+ entries_or_values_method, |
# void forEach(Function callback, [Default=Undefined] optional any thisArg) |
generated_method(IdlType('void'), 'forEach', |
@@ -733,7 +748,11 @@ def methods_context(interface): |
method['length'] = (method['overloads']['length'] if 'overloads' in method else |
method['number_of_required_arguments']) |
- return methods, iterator_method |
+ return { |
+ 'iterator_method': iterator_method, |
+ 'iterator_method_alias': iterator_method_alias, |
+ 'methods': methods, |
+ } |
def reflected_name(constant_name): |