Index: Source/bindings/scripts/v8_interface.py |
diff --git a/Source/bindings/scripts/v8_interface.py b/Source/bindings/scripts/v8_interface.py |
index 9cb32a59af27c5984346bf23bf7c82a820cc6830..95407bfedb26017da1210924630f5bd46050b039 100644 |
--- a/Source/bindings/scripts/v8_interface.py |
+++ b/Source/bindings/scripts/v8_interface.py |
@@ -688,7 +688,7 @@ def resolution_tests_methods(effective_overloads): |
for effective_overload in effective_overloads] |
if len(methods) == 1: |
# If only one method with a given length, no test needed |
- yield 'true', methods[0] |
+ yield 'true', methods[0], -1 |
return |
# 6. If there is more than one entry in S, then set d to be the |
@@ -710,6 +710,9 @@ def resolution_tests_methods(effective_overloads): |
idl_types = [argument['idl_type_object'] for argument in arguments] |
idl_types_methods = zip(idl_types, methods) |
+ for argument in arguments: |
+ argument['is_distinguishing_argument'] = True |
+ |
# We can’t do a single loop through all methods or simply sort them, because |
# a method may be listed in multiple steps of the resolution algorithm, and |
# which test to apply differs depending on the step. |
@@ -725,7 +728,7 @@ def resolution_tests_methods(effective_overloads): |
method = next(method for argument, method in arguments_methods |
if argument['is_optional']) |
test = '%s->IsUndefined()' % cpp_value |
- yield test, method |
+ yield test, method, -1 |
except StopIteration: |
pass |
@@ -736,7 +739,7 @@ def resolution_tests_methods(effective_overloads): |
method = next(method for idl_type, method in idl_types_methods |
if idl_type.is_nullable) |
test = 'isUndefinedOrNull(%s)' % cpp_value |
- yield test, method |
+ yield test, method, -1 |
except StopIteration: |
pass |
@@ -751,7 +754,7 @@ def resolution_tests_methods(effective_overloads): |
for idl_type, method in idl_types_methods |
if idl_type.is_wrapper_type): |
test = 'V8{idl_type}::hasInstance({cpp_value}, info.GetIsolate())'.format(idl_type=idl_type.base_type, cpp_value=cpp_value) |
- yield test, method |
+ yield test, method, index |
# 8. Otherwise: if V is any kind of object except for a native Date object, |
# a native RegExp object, and there is an entry in S that has one of the |
@@ -773,13 +776,13 @@ def resolution_tests_methods(effective_overloads): |
# (We test for Array instead of generic Object to type-check.) |
# FIXME: test for Object during resolution, then have type check for |
# Array in overloaded method: http://crbug.com/262383 |
- yield '%s->IsArray()' % cpp_value, method |
+ yield '%s->IsArray()' % cpp_value, method, index |
for idl_type, method in idl_types_methods: |
if idl_type.is_dictionary or idl_type.name == 'Dictionary': |
# FIXME: should be '{1}->IsObject() && !{1}->IsDate() && !{1}->IsRegExp()'.format(cpp_value) |
# FIXME: the IsDate and IsRegExp checks can be skipped if we've |
# already generated tests for them. |
- yield '%s->IsObject()' % cpp_value, method |
+ yield '%s->IsObject()' % cpp_value, method, index |
# (Check for exact type matches before performing automatic type conversion; |
# only needed if distinguishing between primitive types.) |
@@ -795,7 +798,7 @@ def resolution_tests_methods(effective_overloads): |
method = next(method for idl_type, method in idl_types_methods |
if idl_type.is_numeric_type) |
test = '%s->IsNumber()' % cpp_value |
- yield test, method |
+ yield test, method, index |
except StopIteration: |
pass |
@@ -813,7 +816,7 @@ def resolution_tests_methods(effective_overloads): |
try: |
method = next(method for idl_type, method in idl_types_methods |
if idl_type.is_string_type or idl_type.is_enum) |
- yield 'true', method |
+ yield 'true', method, -1 |
except StopIteration: |
pass |
@@ -823,7 +826,7 @@ def resolution_tests_methods(effective_overloads): |
try: |
method = next(method for idl_type, method in idl_types_methods |
if idl_type.is_numeric_type) |
- yield 'true', method |
+ yield 'true', method, -1 |
except StopIteration: |
pass |