| Index: Source/bindings/scripts/v8_utilities.py
 | 
| diff --git a/Source/bindings/scripts/v8_utilities.py b/Source/bindings/scripts/v8_utilities.py
 | 
| index c4935d79d17f692a3c5eba27ac07d598fc5a8d93..ba5dd6f31290cdc1522d12cf24bfdcf9739192ff 100644
 | 
| --- a/Source/bindings/scripts/v8_utilities.py
 | 
| +++ b/Source/bindings/scripts/v8_utilities.py
 | 
| @@ -37,7 +37,7 @@ import re
 | 
|  
 | 
|  from idl_types import IdlTypeBase
 | 
|  import idl_types
 | 
| -from idl_definitions import Exposure
 | 
| +from idl_definitions import Exposure, IdlInterface
 | 
|  from v8_globals import includes
 | 
|  import v8_types
 | 
|  
 | 
| @@ -397,3 +397,107 @@ def runtime_enabled_function_name(definition_or_member):
 | 
|          return None
 | 
|      feature_name = extended_attributes['RuntimeEnabled']
 | 
|      return 'RuntimeEnabledFeatures::%sEnabled' % uncapitalize(feature_name)
 | 
| +
 | 
| +
 | 
| +################################################################################
 | 
| +# Indexed properties
 | 
| +# http://heycam.github.io/webidl/#idl-indexed-properties
 | 
| +################################################################################
 | 
| +
 | 
| +def indexed_property_getter(interface):
 | 
| +    try:
 | 
| +        # Find indexed property getter, if present; has form:
 | 
| +        # getter TYPE [OPTIONAL_IDENTIFIER](unsigned long ARG1)
 | 
| +        return next(
 | 
| +            method
 | 
| +            for method in interface.operations
 | 
| +            if ('getter' in method.specials and
 | 
| +                len(method.arguments) == 1 and
 | 
| +                str(method.arguments[0].idl_type) == 'unsigned long'))
 | 
| +    except StopIteration:
 | 
| +        return None
 | 
| +
 | 
| +
 | 
| +def indexed_property_setter(interface):
 | 
| +    try:
 | 
| +        # Find indexed property setter, if present; has form:
 | 
| +        # setter RETURN_TYPE [OPTIONAL_IDENTIFIER](unsigned long ARG1, ARG_TYPE ARG2)
 | 
| +        return next(
 | 
| +            method
 | 
| +            for method in interface.operations
 | 
| +            if ('setter' in method.specials and
 | 
| +                len(method.arguments) == 2 and
 | 
| +                str(method.arguments[0].idl_type) == 'unsigned long'))
 | 
| +    except StopIteration:
 | 
| +        return None
 | 
| +
 | 
| +
 | 
| +def indexed_property_deleter(interface):
 | 
| +    try:
 | 
| +        # Find indexed property deleter, if present; has form:
 | 
| +        # deleter TYPE [OPTIONAL_IDENTIFIER](unsigned long ARG)
 | 
| +        return next(
 | 
| +            method
 | 
| +            for method in interface.operations
 | 
| +            if ('deleter' in method.specials and
 | 
| +                len(method.arguments) == 1 and
 | 
| +                str(method.arguments[0].idl_type) == 'unsigned long'))
 | 
| +    except StopIteration:
 | 
| +        return None
 | 
| +
 | 
| +
 | 
| +################################################################################
 | 
| +# Named properties
 | 
| +# http://heycam.github.io/webidl/#idl-named-properties
 | 
| +################################################################################
 | 
| +
 | 
| +def named_property_getter(interface):
 | 
| +    try:
 | 
| +        # Find named property getter, if present; has form:
 | 
| +        # getter TYPE [OPTIONAL_IDENTIFIER](DOMString ARG1)
 | 
| +        getter = next(
 | 
| +            method
 | 
| +            for method in interface.operations
 | 
| +            if ('getter' in method.specials and
 | 
| +                len(method.arguments) == 1 and
 | 
| +                str(method.arguments[0].idl_type) == 'DOMString'))
 | 
| +        getter.name = getter.name or 'anonymousNamedGetter'
 | 
| +        return getter
 | 
| +    except StopIteration:
 | 
| +        return None
 | 
| +
 | 
| +
 | 
| +def named_property_setter(interface):
 | 
| +    try:
 | 
| +        # Find named property setter, if present; has form:
 | 
| +        # setter RETURN_TYPE [OPTIONAL_IDENTIFIER](DOMString ARG1, ARG_TYPE ARG2)
 | 
| +        return next(
 | 
| +            method
 | 
| +            for method in interface.operations
 | 
| +            if ('setter' in method.specials and
 | 
| +                len(method.arguments) == 2 and
 | 
| +                str(method.arguments[0].idl_type) == 'DOMString'))
 | 
| +    except StopIteration:
 | 
| +        return None
 | 
| +
 | 
| +
 | 
| +def named_property_deleter(interface):
 | 
| +    try:
 | 
| +        # Find named property deleter, if present; has form:
 | 
| +        # deleter TYPE [OPTIONAL_IDENTIFIER](DOMString ARG)
 | 
| +        return next(
 | 
| +            method
 | 
| +            for method in interface.operations
 | 
| +            if ('deleter' in method.specials and
 | 
| +                len(method.arguments) == 1 and
 | 
| +                str(method.arguments[0].idl_type) == 'DOMString'))
 | 
| +    except StopIteration:
 | 
| +        return None
 | 
| +
 | 
| +
 | 
| +IdlInterface.indexed_property_getter = property(indexed_property_getter)
 | 
| +IdlInterface.indexed_property_setter = property(indexed_property_setter)
 | 
| +IdlInterface.indexed_property_deleter = property(indexed_property_deleter)
 | 
| +IdlInterface.named_property_getter = property(named_property_getter)
 | 
| +IdlInterface.named_property_setter = property(named_property_setter)
 | 
| +IdlInterface.named_property_deleter = property(named_property_deleter)
 | 
| 
 |