| Index: sdk/lib/html/scripts/systemhtml.py
|
| diff --git a/sdk/lib/html/scripts/systemhtml.py b/sdk/lib/html/scripts/systemhtml.py
|
| index 90729a9f82a41d5724aa514398e3abb42d4f5ef6..431f8007dec97c455fb18abb329fe90bbb65fe78 100644
|
| --- a/sdk/lib/html/scripts/systemhtml.py
|
| +++ b/sdk/lib/html/scripts/systemhtml.py
|
| @@ -309,7 +309,7 @@ class HtmlDartInterfaceGenerator(object):
|
|
|
| merged_interface = self._interface_type_info.merged_interface()
|
| if merged_interface:
|
| - self._backend.AddMembers(self._database.GetInterface(merged_interface),
|
| + self._backend.AddMembers(self._database.GetInterface(merged_interface),
|
| not self._backend.ImplementsMergedMembers())
|
|
|
| self._backend.AddMembers(self._interface)
|
| @@ -637,7 +637,6 @@ class Dart2JSBackend(HtmlDartGenerator):
|
| def _AddOperationWithConversions(self, info, html_name):
|
| # Assert all operations have same return type.
|
| assert len(set([op.type.id for op in info.operations])) == 1
|
| - info = info.CopyAndWidenDefaultParameters()
|
| output_conversion = self._OutputConversion(info.type_name,
|
| info.declared_name)
|
| if output_conversion:
|
| @@ -705,14 +704,15 @@ class Dart2JSBackend(HtmlDartGenerator):
|
| arguments.append(parameter_names[position])
|
| param_type = self._NarrowInputType(arg.type.id)
|
| # Verified by argument checking on entry to the dispatcher.
|
| +
|
| verified_type = InputType(info.param_infos[position].type_id)
|
| + # The native method does not need an argument type if we know the type.
|
| + # But we do need the native methods to have correct function types, so
|
| + # be conservative.
|
| + if param_type == verified_type:
|
| + if param_type in ['String', 'num', 'int', 'double', 'bool', 'Object']:
|
| + param_type = 'dynamic'
|
|
|
| - # The native method does not need an argument type if we know the type.
|
| - # But we do need the native methods to have correct function types, so
|
| - # be conservative.
|
| - if param_type == verified_type:
|
| - if param_type in ['String', 'num', 'int', 'double', 'bool', 'Object']:
|
| - param_type = 'dynamic'
|
| target_parameters.append(
|
| '%s%s' % (TypeOrNothing(param_type), param_name))
|
|
|
| @@ -746,8 +746,9 @@ class Dart2JSBackend(HtmlDartGenerator):
|
| if test_type in ['dynamic', 'Object']:
|
| checks.append('?%s' % parameter_name)
|
| elif test_type != parameter_types[i]:
|
| - checks.append('(%s is %s || %s == null)' % (
|
| - parameter_name, test_type, parameter_name))
|
| + checks.append('(?%s && (%s is %s || %s == null))' % (
|
| + parameter_name, parameter_name, test_type, parameter_name))
|
| +
|
| checks.extend(['!?%s' % name for name in parameter_names[argument_count:]])
|
| # There can be multiple presence checks. We need them all since a later
|
| # optional argument could have been passed by name, leaving 'holes'.
|
|
|