| Index: lib/dom/scripts/systemhtml.py | 
| diff --git a/lib/dom/scripts/systemhtml.py b/lib/dom/scripts/systemhtml.py | 
| index 1350ecfe515806548d5fe18b8375190333c945de..161627b9c951ac9275d6652b957b2e72c9b16cd2 100644 | 
| --- a/lib/dom/scripts/systemhtml.py | 
| +++ b/lib/dom/scripts/systemhtml.py | 
| @@ -589,7 +589,7 @@ def EmitHtmlElementFactoryConstructors(emitter, infos, typename, class_name): | 
| CONSTRUCTOR=constructor_info.ConstructorFullName(), | 
| CLASS=class_name, | 
| TAG=info.tag, | 
| -        PARAMS=constructor_info.ParametersInterfaceDeclaration()) | 
| +        PARAMS=constructor_info.ParametersInterfaceDeclaration(DartType)) | 
| for param in constructor_info.param_infos: | 
| inits.Emit('    if ($E != null) _e.$E = $E;\n', E=param.name) | 
|  | 
| @@ -622,30 +622,32 @@ def DomToHtmlEvent(event_name): | 
| # ------------------------------------------------------------------------------ | 
| class HtmlSystemShared(object): | 
|  | 
| -  def __init__(self, database): | 
| +  def __init__(self, context): | 
| self._event_classes = set() | 
| self._seen_event_names = {} | 
| -    self._database = database | 
| -    self._inheritance_closure = _ComputeInheritanceClosure(database) | 
| -    self._html_renames = self._MakeHtmlRenames() | 
| +    self._database = context.database | 
| +    self._type_registry = context.type_registry | 
| +    self._inheritance_closure = _ComputeInheritanceClosure(self._database) | 
|  | 
| -  def _HasAncestor(self, interface, names_to_match): | 
| +  @staticmethod | 
| +  def _HasAncestor(database, interface, names_to_match): | 
| for parent in interface.parents: | 
| if parent.type.id in names_to_match: | 
| return True | 
| -      if not self._database.HasInterface(parent.type.id): | 
| +      if not database.HasInterface(parent.type.id): | 
| continue | 
| -      parent_interface = self._database.GetInterface(parent.type.id) | 
| -      if self._HasAncestor(parent_interface, names_to_match): | 
| +      parent_interface = database.GetInterface(parent.type.id) | 
| +      if HtmlSystemShared._HasAncestor(database, parent_interface, names_to_match): | 
| return True | 
| return False | 
|  | 
| -  def _MakeHtmlRenames(self): | 
| +  @staticmethod | 
| +  def MakeHtmlRenames(database): | 
| html_renames = {} | 
|  | 
| -    for interface in self._database.GetInterfaces(): | 
| +    for interface in database.GetInterfaces(): | 
| if (interface.id.startswith('HTML') and | 
| -          self._HasAncestor(interface, ['Element', 'Document'])): | 
| +          HtmlSystemShared._HasAncestor(database, interface, ['Element', 'Document'])): | 
| html_renames[interface.id] = interface.id[4:] | 
|  | 
| for subclass in _html_strip_webkit_prefix_classes: | 
| @@ -659,15 +661,12 @@ class HtmlSystemShared(object): | 
|  | 
| return html_renames | 
|  | 
| -  def _HTMLInterfaceName(self, interface_name): | 
| -    return self._html_renames.get(interface_name, interface_name) | 
| - | 
| def _FindMatch(self, interface_name, member, member_prefix, candidates): | 
| for ancestor_name in self._AllAncestorInterfaces(interface_name): | 
| -      name = self._HTMLInterfaceName(ancestor_name) + '.' + member | 
| +      name = self._DartType(ancestor_name) + '.' + member | 
| if name in candidates: | 
| return name | 
| -      name = (self._HTMLInterfaceName(interface_name) + '.' + member_prefix + | 
| +      name = (self._DartType(interface_name) + '.' + member_prefix + | 
| member) | 
| if name in candidates: | 
| return name | 
| @@ -738,9 +737,6 @@ class HtmlSystemShared(object): | 
| raise Exception('Only one parent event class allowed ' + interface.id) | 
| return parent_event_classes[0] | 
|  | 
| -  def _ImplClassName(self, type_name): | 
| -    return '_' + type_name + 'Impl' | 
| - | 
| # This returns two values: the first is whether or not an "on" property should | 
| # be generated for the interface, and the second is the event attributes to | 
| # generate if it should. | 
| @@ -756,21 +752,16 @@ class HtmlSystemShared(object): | 
| def IsPrivate(self, name): | 
| return name.startswith('_') | 
|  | 
| -  def DartType(self, idl_type): | 
| -    type_info = TypeRegistry().TypeInfo(idl_type) | 
| -    return self._HTMLInterfaceName(type_info.dart_type()) | 
| +  def _DartType(self, type_name): | 
| +    return self._type_registry.DartType(type_name) | 
|  | 
| -class HtmlSystem(System): | 
|  | 
| -  def __init__(self, context): | 
| -    super(HtmlSystem, self).__init__(context) | 
| -    self._shared = HtmlSystemShared(self._database) | 
| - | 
| -class HtmlInterfacesSystem(HtmlSystem): | 
| +class HtmlInterfacesSystem(System): | 
|  | 
| def __init__(self, context, backend): | 
| super(HtmlInterfacesSystem, self).__init__(context) | 
| self._backend = backend | 
| +    self._shared = HtmlSystemShared(context) | 
| self._dart_interface_file_paths = [] | 
| self._elements_factory_emitter = None | 
|  | 
| @@ -803,8 +794,7 @@ class HtmlDartInterfaceGenerator(BaseGenerator): | 
| system._database, interface) | 
| self._system = system | 
| self._shared = system._shared | 
| -    self._html_interface_name = self._shared._HTMLInterfaceName( | 
| -        self._interface.id) | 
| +    self._html_interface_name = system._type_registry.InterfaceName(self._interface.id) | 
| self._backend = system._backend.ImplementationGenerator(self._interface) | 
|  | 
| def StartInterface(self): | 
| @@ -828,14 +818,14 @@ class HtmlDartInterfaceGenerator(BaseGenerator): | 
| # TODO(vsm): Remove source_filter. | 
| if MatchSourceFilter(parent): | 
| # Parent is a DOM type. | 
| -        extends.append(self._shared.DartType(parent.type.id)) | 
| +        extends.append(self._DartType(parent.type.id)) | 
| elif '<' in parent.type.id: | 
| # Parent is a Dart collection type. | 
| # TODO(vsm): Make this check more robust. | 
| -        extends.append(self._shared.DartType(parent.type.id)) | 
| +        extends.append(self._DartType(parent.type.id)) | 
| else: | 
| suppressed_extends.append('%s.%s' % | 
| -            (self._common_prefix, self._shared.DartType(parent.type.id))) | 
| +            (self._common_prefix, self._DartType(parent.type.id))) | 
|  | 
| comment = ' extends' | 
| extends_str = '' | 
| @@ -909,9 +899,8 @@ class HtmlDartInterfaceGenerator(BaseGenerator): | 
| self._members_emitter.Emit( | 
| '\n' | 
| '  $CTOR($PARAMS);\n', | 
| -          CTOR=self._shared.DartType(constructor_info.ConstructorFullName()), | 
| -          PARAMS=constructor_info.ParametersInterfaceDeclaration( | 
| -                     self._shared.DartType)) | 
| +          CTOR=self._DartType(constructor_info.ConstructorFullName()), | 
| +          PARAMS=constructor_info.ParametersInterfaceDeclaration(self._DartType)) | 
|  | 
| element_type = MaybeTypedArrayElementTypeInHierarchy( | 
| self._interface, self._system._database) | 
| @@ -925,7 +914,7 @@ class HtmlDartInterfaceGenerator(BaseGenerator): | 
| '  $CTOR.fromBuffer(ArrayBuffer buffer,' | 
| ' [int byteOffset, int length]);\n', | 
| CTOR=self._interface.id, | 
| -        TYPE=self._shared.DartType(element_type)) | 
| +        TYPE=self._DartType(element_type)) | 
|  | 
| self._GenerateEvents() | 
|  | 
| @@ -967,36 +956,40 @@ class HtmlDartInterfaceGenerator(BaseGenerator): | 
| self._members_emitter.Emit('\n  $MODIFIER$TYPE $NAME;\n', | 
| MODIFIER=modifier, | 
| NAME=html_name, | 
| -                                 TYPE=self._shared.DartType(attribute.type.id)) | 
| +                                 TYPE=self._DartType(attribute.type.id)) | 
| self._backend.AddAttribute(attribute, html_name, read_only) | 
|  | 
| def AddSecondaryAttribute(self, interface, attribute): | 
| self._backend.SecondaryContext(interface) | 
| self.AddAttribute(attribute, True) | 
|  | 
| -  def AddOperation(self, info, is_secondary=False): | 
| +  def AddOperation(self, info, skip_declaration=False): | 
| """ | 
| Arguments: | 
| operations - contains the overloads, one or more operations with the same | 
| name. | 
| """ | 
| -    html_name = self._shared.RenameInHtmlLibrary( | 
| -        self._interface.id, info.name) | 
| -    if html_name and not self._shared.IsPrivate(html_name) and not is_secondary: | 
| +    html_name = self._shared.RenameInHtmlLibrary(self._interface.id, info.name) | 
| +    if not html_name: | 
| +      if info.name == 'item': | 
| +        # FIXME: item should be renamed to operator[], not removed. | 
| +        self._backend.AddOperation(info, '_item') | 
| +      return | 
| + | 
| +    if not self._shared.IsPrivate(html_name) and not skip_declaration: | 
| self._members_emitter.Emit('\n  /** @domName $DOMINTERFACE.$DOMNAME */', | 
| DOMINTERFACE=info.overloads[0].doc_js_interface_name, | 
| DOMNAME=info.name) | 
|  | 
| self._members_emitter.Emit('\n' | 
| '  $TYPE $NAME($PARAMS);\n', | 
| -                                 TYPE=self._shared.DartType(info.type_name), | 
| +                                 TYPE=self._DartType(info.type_name), | 
| NAME=html_name, | 
| -                                 PARAMS=info.ParametersInterfaceDeclaration( | 
| -                                        self._shared.DartType)) | 
| -    self._backend.AddOperation(info) | 
| +                                 PARAMS=info.ParametersInterfaceDeclaration(self._DartType)) | 
| +    self._backend.AddOperation(info, html_name) | 
|  | 
| def AddStaticOperation(self, info): | 
| -    self._backend.AddStaticOperation(info) | 
| +    self.AddOperation(info, True) | 
|  | 
| def AddSecondaryOperation(self, interface, info): | 
| self._backend.SecondaryContext(interface) | 
| @@ -1006,7 +999,7 @@ class HtmlDartInterfaceGenerator(BaseGenerator): | 
| self._backend.FinishInterface() | 
|  | 
| def AddConstant(self, constant): | 
| -    type = TypeOrNothing(DartType(constant.type.id), constant.type.id) | 
| +    type = TypeOrNothing(self._DartType(constant.type.id), constant.type.id) | 
| self._members_emitter.Emit('\n  static final $TYPE$NAME = $VALUE;\n', | 
| NAME=constant.id, | 
| TYPE=type, | 
| @@ -1077,7 +1070,7 @@ class HtmlGeneratorDummyBackend(object): | 
| def AddAttribute(self, attribute, html_name, read_only): | 
| pass | 
|  | 
| -  def AddOperation(self, info): | 
| +  def AddOperation(self, info, html_name): | 
| pass | 
|  | 
|  | 
| @@ -1093,9 +1086,7 @@ class HtmlFrogClassGenerator(FrogInterfaceGenerator): | 
| def __init__(self, system, interface): | 
| super(HtmlFrogClassGenerator, self).__init__( | 
| system, interface, None, None) | 
| -    self._shared = self._system._shared | 
| -    self._html_interface_name = self._shared._HTMLInterfaceName( | 
| -        self._interface.id) | 
| +    self._html_interface_name = system._type_registry.InterfaceName(self._interface.id) | 
|  | 
| def HasImplementation(self): | 
| return not (IsPureInterface(self._interface.id) or | 
| @@ -1123,12 +1114,7 @@ class HtmlFrogClassGenerator(FrogInterfaceGenerator): | 
| return True | 
|  | 
| def _ImplClassName(self, type_name): | 
| -    return self._shared._ImplClassName(type_name) | 
| - | 
| -  def _NarrowToImplementationType(self, type_name): | 
| -    if self._ShouldNarrowToImplementationType(type_name): | 
| -      return self._ImplClassName(self._shared.DartType(type_name)) | 
| -    return self._shared.DartType(type_name) | 
| +    return '_%sImpl' % type_name | 
|  | 
| def StartInterface(self): | 
| interface = self._interface | 
| @@ -1145,7 +1131,7 @@ class HtmlFrogClassGenerator(FrogInterfaceGenerator): | 
| elif IsPureInterface(supertype): | 
| pass | 
| else: | 
| -        base = self._ImplClassName(self._shared._HTMLInterfaceName(supertype)) | 
| +        base = self._ImplClassName(self._DartType(supertype)) | 
|  | 
| native_spec = MakeNativeSpec(interface.javascript_binding_name) | 
|  | 
| @@ -1155,7 +1141,7 @@ class HtmlFrogClassGenerator(FrogInterfaceGenerator): | 
| implements = [self._html_interface_name] | 
| element_type = MaybeTypedArrayElementType(self._interface) | 
| if element_type: | 
| -      implements.append('List<%s>' % self._shared.DartType(element_type)) | 
| +      implements.append('List<%s>' % self._DartType(element_type)) | 
| implements.append('JavaScriptIndexingBehavior') | 
|  | 
| template_file = 'impl_%s.darttemplate' % self._html_interface_name | 
| @@ -1187,7 +1173,7 @@ class HtmlFrogClassGenerator(FrogInterfaceGenerator): | 
| template, | 
| FACTORYPROVIDER=factory_provider, | 
| CONSTRUCTOR=self._html_interface_name, | 
| -        PARAMETERS=constructor_info.ParametersImplementationDeclaration(), | 
| +        PARAMETERS=constructor_info.ParametersImplementationDeclaration(self._DartType), | 
| NAMED_CONSTRUCTOR=constructor_info.name or self._html_interface_name, | 
| ARGUMENTS=constructor_info.ParametersAsArgumentList()) | 
|  | 
| @@ -1237,7 +1223,7 @@ class HtmlFrogClassGenerator(FrogInterfaceGenerator): | 
| if self._interface.id != 'NodeList': | 
| template_file = 'immutable_list_mixin.darttemplate' | 
| template = self._system._templates.Load(template_file) | 
| -      self._members_emitter.Emit(template, E=self._shared.DartType(element_type)) | 
| +      self._members_emitter.Emit(template, E=self._DartType(element_type)) | 
|  | 
| def AddAttribute(self, attribute, html_name, read_only): | 
| if self._HasCustomImplementation(attribute.id): | 
| @@ -1310,7 +1296,7 @@ class HtmlFrogClassGenerator(FrogInterfaceGenerator): | 
| NAME=attr.id, | 
| TYPE=self._NarrowInputType(attr.type.id)) | 
|  | 
| -  def AddOperation(self, info): | 
| +  def AddOperation(self, info, html_name): | 
| """ | 
| Arguments: | 
| info: An OperationInfo object. | 
| @@ -1318,9 +1304,8 @@ class HtmlFrogClassGenerator(FrogInterfaceGenerator): | 
| if self._HasCustomImplementation(info.name): | 
| return | 
|  | 
| -    html_name = self._shared.RenameInHtmlLibrary( | 
| -        self._interface.id, info.name, implementation_class=True) | 
| -    if not html_name: | 
| +    # FIXME: support static operations. | 
| +    if info.IsStatic(): | 
| return | 
|  | 
| # Do we need a native body? | 
| @@ -1352,7 +1337,7 @@ class HtmlFrogClassGenerator(FrogInterfaceGenerator): | 
|  | 
| # ------------------------------------------------------------------------------ | 
|  | 
| -class HtmlFrogSystem(HtmlSystem): | 
| +class HtmlFrogSystem(System): | 
|  | 
| def __init__(self, context): | 
| super(HtmlFrogSystem, self).__init__(context) | 
|  |