| Index: lib/html/scripts/systemhtml.py
|
| diff --git a/lib/html/scripts/systemhtml.py b/lib/html/scripts/systemhtml.py
|
| index 10f74623ac14e00be4fca5f6b7e28e91ee023a46..bdf2980f93caaa744a37940db90ac56c0bec6ae8 100644
|
| --- a/lib/html/scripts/systemhtml.py
|
| +++ b/lib/html/scripts/systemhtml.py
|
| @@ -438,26 +438,16 @@ class HtmlSystemShared(object):
|
|
|
|
|
| class HtmlInterfacesSystem(System):
|
| - def __init__(self, options, dart_library_generator, backend):
|
| + def __init__(self, options, dart_library_generator, backend_factory):
|
| super(HtmlInterfacesSystem, self).__init__(options)
|
| self._dart_library_generator = dart_library_generator
|
| - self._backend = backend
|
| + self._backend_factory = backend_factory
|
| self._shared = HtmlSystemShared(options)
|
| - self._dart_file_paths = []
|
| self._elements_factory_emitter = None
|
|
|
| def ProcessInterface(self, interface):
|
| - HtmlDartInterfaceGenerator(self, interface).Generate()
|
| -
|
| - def ProcessCallback(self, interface, info):
|
| - """Generates a typedef for the callback interface."""
|
| - code = self._CreateEmitter('%s.dart' % interface.id)
|
| - code.Emit(self._templates.Load('callback.darttemplate'))
|
| - code.Emit('typedef $TYPE $NAME($PARAMS);\n',
|
| - NAME=interface.id,
|
| - TYPE=DartType(info.type_name),
|
| - PARAMS=info.ParametersImplementationDeclaration(DartType))
|
| - self._backend.ProcessCallback(interface, info)
|
| + backend = self._backend_factory(interface)
|
| + HtmlDartInterfaceGenerator(self, interface, backend).Generate()
|
|
|
| def _CreateEmitter(self, filename):
|
| return self._dart_library_generator.CreateFileEmitter(filename)
|
| @@ -467,13 +457,23 @@ class HtmlInterfacesSystem(System):
|
| class HtmlDartInterfaceGenerator(BaseGenerator):
|
| """Generates dart interface and implementation for the DOM IDL interface."""
|
|
|
| - def __init__(self, system, interface):
|
| + def __init__(self, system, interface, backend):
|
| super(HtmlDartInterfaceGenerator, self).__init__(
|
| - system._database, interface)
|
| + system._database, system._type_registry, interface)
|
| self._system = system
|
| + self._backend = backend
|
| self._shared = system._shared
|
| self._html_interface_name = system._renamer.RenameInterface(self._interface)
|
| - self._backend = system._backend.ImplementationGenerator(self._interface)
|
| +
|
| + def GenerateCallback(self, info):
|
| + """Generates a typedef for the callback interface."""
|
| + code = self._system._CreateEmitter('%s.dart' % self._interface.id)
|
| + code.Emit(self._system._templates.Load('callback.darttemplate'))
|
| + code.Emit('typedef $TYPE $NAME($PARAMS);\n',
|
| + NAME=self._interface.id,
|
| + TYPE=DartType(info.type_name),
|
| + PARAMS=info.ParametersImplementationDeclaration(DartType))
|
| + self._backend.GenerateCallback(info)
|
|
|
| def StartInterface(self):
|
| if not self._interface.id in _merged_html_interfaces:
|
| @@ -760,15 +760,14 @@ class HtmlGeneratorDummyBackend(object):
|
|
|
| # TODO(jmesserly): inheritance is probably not the right way to factor this long
|
| # term, but it makes merging better for now.
|
| -class HtmlDart2JSClassGenerator(Dart2JSInterfaceGenerator):
|
| +class Dart2JSBackend(Dart2JSInterfaceGenerator):
|
| """Generates a dart2js class for the dart:html library from a DOM IDL
|
| interface.
|
| """
|
|
|
| - def __init__(self, system, interface):
|
| - super(HtmlDart2JSClassGenerator, self).__init__(
|
| - system, interface, None, None)
|
| - self._html_interface_name = system._renamer.RenameInterface(self._interface)
|
| + def __init__(self, interface, options):
|
| + super(Dart2JSBackend, self).__init__(options, interface, None, None)
|
| + self._html_interface_name = options.renamer.RenameInterface(self._interface)
|
|
|
| def HasImplementation(self):
|
| return not (IsPureInterface(self._interface.id) or
|
| @@ -817,8 +816,8 @@ class HtmlDart2JSClassGenerator(Dart2JSInterfaceGenerator):
|
| implements.append('JavaScriptIndexingBehavior')
|
|
|
| template_file = 'impl_%s.darttemplate' % self._html_interface_name
|
| - template = (self._system._templates.TryLoad(template_file) or
|
| - self._system._templates.Load('dart2js_impl.darttemplate'))
|
| + template = (self._template_loader.TryLoad(template_file) or
|
| + self._template_loader.Load('dart2js_impl.darttemplate'))
|
| self._members_emitter = self._dart_code.Emit(
|
| template,
|
| #class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
|
| @@ -837,9 +836,9 @@ class HtmlDart2JSClassGenerator(Dart2JSInterfaceGenerator):
|
| def EmitFactoryProvider(self, constructor_info, factory_provider, emitter):
|
| template_file = ('factoryprovider_%s.darttemplate' %
|
| self._html_interface_name)
|
| - template = self._system._templates.TryLoad(template_file)
|
| + template = self._template_loader.TryLoad(template_file)
|
| if not template:
|
| - template = self._system._templates.Load('factoryprovider.darttemplate')
|
| + template = self._template_loader.Load('factoryprovider.darttemplate')
|
|
|
| emitter.Emit(
|
| template,
|
| @@ -894,7 +893,7 @@ class HtmlDart2JSClassGenerator(Dart2JSInterfaceGenerator):
|
| # TODO(sra): Use separate mixins for typed array implementations of List<T>.
|
| if self._interface.id != 'NodeList':
|
| template_file = 'immutable_list_mixin.darttemplate'
|
| - template = self._system._templates.Load(template_file)
|
| + template = self._template_loader.Load(template_file)
|
| self._members_emitter.Emit(template, E=self._DartType(element_type))
|
|
|
| def AddAttribute(self, attribute, html_name, read_only):
|
| @@ -1217,16 +1216,8 @@ class HtmlDart2JSClassGenerator(Dart2JSInterfaceGenerator):
|
| if element_type and requires_indexer: return True
|
| return False
|
|
|
| -# ------------------------------------------------------------------------------
|
| -
|
| -class HtmlDart2JSSystem(System):
|
| -
|
| - def __init__(self, options):
|
| - super(HtmlDart2JSSystem, self).__init__(options)
|
| -
|
| - def ImplementationGenerator(self, interface):
|
| - return HtmlDart2JSClassGenerator(self, interface)
|
|
|
| +# ------------------------------------------------------------------------------
|
|
|
| class DartLibraryEmitter():
|
| def __init__(self, emitters, template, dart_sources_dir):
|
|
|