| Index: bindings/dart/scripts/dart_utilities.py | 
| diff --git a/bindings/dart/scripts/dart_utilities.py b/bindings/dart/scripts/dart_utilities.py | 
| index 4f888d625676c9c0b03f5c396bb37869feb5c369..c9f4fa58a5245edbb4130882e999d6f61c249ebb 100644 | 
| --- a/bindings/dart/scripts/dart_utilities.py | 
| +++ b/bindings/dart/scripts/dart_utilities.py | 
| @@ -44,6 +44,14 @@ import v8_types  # Required | 
| import v8_utilities | 
|  | 
|  | 
| +def _enum_validation_expression(idl_type): | 
| +    # FIXME: Add IdlEnumType, move property to derived type, and remove this check | 
| +    if not idl_type.is_enum: | 
| +        return None | 
| +    return ' || '.join(['((String){param_name}) == "%s"' % enum_value | 
| +                        for enum_value in idl_type.enum_values]) | 
| + | 
| + | 
| def _scoped_name(interface, definition, base_name): | 
| # partial interfaces are implemented as separate classes, with their members | 
| # implemented as static member functions | 
| @@ -90,6 +98,7 @@ _CALL_WITH_ARGUMENTS = { | 
| 'ScriptArguments': 'scriptArguments.release()', | 
| 'ActiveWindow': 'DartUtilities::callingDomWindowForCurrentIsolate()', | 
| 'FirstWindow': 'DartUtilities::enteredDomWindowForCurrentIsolate()', | 
| +    'Document': 'document', | 
| } | 
|  | 
| # List because key order matters, as we want arguments in deterministic order | 
| @@ -99,12 +108,11 @@ _CALL_WITH_VALUES = [ | 
| 'ScriptArguments', | 
| 'ActiveWindow', | 
| 'FirstWindow', | 
| +    'Document', | 
| ] | 
|  | 
|  | 
| -def _call_with_arguments(member, call_with_values=None): | 
| -    # Optional parameter so setter can override with [SetterCallWith] | 
| -    call_with_values = call_with_values or member.extended_attributes.get('CallWith') | 
| +def _call_with_arguments(call_with_values): | 
| if not call_with_values: | 
| return [] | 
| return [_CALL_WITH_ARGUMENTS[value] | 
| @@ -132,36 +140,36 @@ def _measure_as(definition_or_member): | 
| return extended_attributes['MeasureAs'] | 
|  | 
|  | 
| -def _generate_native_entry(interface_name, thing, name, kind, | 
| -                           optional_index, args, types): | 
| -    index = thing.get('overload_index') or optional_index | 
| -    is_static = bool(thing.get('is_static')) | 
| -    tag = "" | 
| +def _generate_native_entry(interface_name, name, kind, is_static, arity): | 
| + | 
| +    def mkPublic(s): | 
| +        if s.startswith("_") or s.startswith("$"): | 
| +            return "$" + s | 
| +        return s | 
| + | 
| +    arity_str = "" | 
| if kind == 'Getter': | 
| -        tag = "%s_Getter" % name | 
| -        blink_entry = tag | 
| +        suffix = "_Getter" | 
| elif kind == 'Setter': | 
| -        tag = "%s_Setter" % name | 
| -        blink_entry = tag | 
| +        suffix = "_Setter" | 
| elif kind == 'Constructor': | 
| -        tag = "constructorCallback" | 
| -        blink_entry = tag | 
| -        if index is not None: | 
| -            blink_entry = "_create_%s%s" % (index, blink_entry) | 
| +        name = "constructor" | 
| +        suffix = "Callback" | 
| +        arity_str = "_" + str(arity) | 
| elif kind == 'Method': | 
| -        tag = "%s_Callback" % name | 
| -        if index is None: | 
| -            blink_entry = tag | 
| -        else: | 
| -            blink_entry = "_%s_%d_Callback" % (name, index) | 
| -    components = [interface_name, tag] | 
| -    if types is not None: | 
| -        components.extend(types) | 
| -    native_entry = "_".join(components) | 
| +        suffix = "_Callback" | 
| +        arity_str = "_" + str(arity) | 
| + | 
| +    tag = "%s%s" % (name, suffix) | 
| +    blink_entry = mkPublic(tag + arity_str) | 
| +    native_entry = "_".join([interface_name, tag]) | 
| + | 
| +    argument_names = ['__arg_%d' % i for i in range(0, arity)] | 
| if not is_static and kind != 'Constructor': | 
| -        args.insert(0, "mthis") | 
| -    return {'blink_entry': "$" + blink_entry, | 
| -            'argument_names': args, | 
| +        argument_names.insert(0, "mthis") | 
| + | 
| +    return {'blink_entry': blink_entry, | 
| +            'argument_names': argument_names, | 
| 'resolver_string': native_entry} | 
|  | 
| ################################################################################ | 
| @@ -184,6 +192,7 @@ DartUtilities.conditional_string = v8_utilities.conditional_string | 
| DartUtilities.cpp_name = v8_utilities.cpp_name | 
| DartUtilities.deprecate_as = _deprecate_as | 
| DartUtilities.extended_attribute_value_contains = v8_utilities.extended_attribute_value_contains | 
| +DartUtilities.enum_validation_expression = _enum_validation_expression | 
| DartUtilities.gc_type = v8_utilities.gc_type | 
| DartUtilities.generate_native_entry = _generate_native_entry | 
| DartUtilities.has_extended_attribute = v8_utilities.has_extended_attribute | 
|  |