Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(62)

Unified Diff: lib/html/scripts/systemhtml.py

Issue 11018012: Get rid of System class. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: . Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« lib/html/scripts/dartdomgenerator.py ('K') | « lib/html/scripts/systembase.py ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/html/scripts/systemhtml.py
diff --git a/lib/html/scripts/systemhtml.py b/lib/html/scripts/systemhtml.py
index fd59ffaa5b3c061b9929f96c782f5dd94df86209..5071048f6308fa5f20126d006f0db579431f5dae 100644
--- a/lib/html/scripts/systemhtml.py
+++ b/lib/html/scripts/systemhtml.py
@@ -9,7 +9,6 @@ Dart:html APIs from the IDL database."""
import emitter
from systembase import *
-from systeminterface import *
_js_custom_members = set([
'CSSStyleDeclaration.setProperty',
@@ -383,19 +382,9 @@ def DomToHtmlEvent(event_name):
# ------------------------------------------------------------------------------
class HtmlSystemShared(object):
- def __init__(self, context):
+ def __init__(self, database):
self._event_classes = set()
- self._seen_event_names = {}
- self._database = context.database
-
- # TODO(jacobr): this already exists
- def _TraverseParents(self, interface, callback):
- for parent in interface.parents:
- parent_id = parent.type.id
- if self._database.HasInterface(parent_id):
- parent_interface = self._database.GetInterface(parent_id)
- callback(parent_interface)
- self._TraverseParents(parent_interface, callback)
+ self._database = database
# TODO(jacobr): this isn't quite right....
def GetParentsEventsClasses(self, interface):
@@ -405,11 +394,10 @@ class HtmlSystemShared(object):
return ['ElementEvents']
interfaces_with_events = set()
- def visit(parent):
- if parent.id in self._event_classes:
+ for parent in self._database.Hierarchy(interface):
+ if parent != interface and parent.id in self._event_classes:
interfaces_with_events.add(parent)
- self._TraverseParents(interface, visit)
if len(interfaces_with_events) == 0:
return ['Events']
else:
@@ -439,39 +427,26 @@ class HtmlSystemShared(object):
def IsPrivate(self, name):
return name.startswith('_')
-
-class HtmlInterfacesSystem(System):
- def __init__(self, options, dart_library_generator, backend_factory):
- super(HtmlInterfacesSystem, self).__init__(options)
- self._dart_library_generator = dart_library_generator
- self._backend_factory = backend_factory
- self._shared = HtmlSystemShared(options)
- self._elements_factory_emitter = None
-
- def ProcessInterface(self, interface):
- backend = self._backend_factory(interface)
- HtmlDartInterfaceGenerator(self, interface, backend).Generate()
-
- def _CreateEmitter(self, filename):
- return self._dart_library_generator.CreateFileEmitter(filename)
-
# ------------------------------------------------------------------------------
class HtmlDartInterfaceGenerator(BaseGenerator):
"""Generates dart interface and implementation for the DOM IDL interface."""
- def __init__(self, system, interface, backend):
- super(HtmlDartInterfaceGenerator, self).__init__(
- system._database, system._type_registry, interface)
- self._system = system
+ def __init__(self, shared, options, library_emitter, interface, backend):
+ super(HtmlDartInterfaceGenerator, self).__init__(None, None, interface)
+ self._renamer = options.renamer
+ self._database = options.database
+ self._template_loader = options.templates
+ self._type_registry = options.type_registry
+ self._library_emitter = library_emitter
self._backend = backend
- self._shared = system._shared
- self._html_interface_name = system._renamer.RenameInterface(self._interface)
+ self._shared = shared
+ self._html_interface_name = options.renamer.RenameInterface(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 = self._library_emitter.FileEmitter(self._interface.id)
+ code.Emit(self._template_loader.Load('callback.darttemplate'))
code.Emit('typedef $TYPE $NAME($PARAMS);\n',
NAME=self._interface.id,
TYPE=DartType(info.type_name),
@@ -482,14 +457,14 @@ class HtmlDartInterfaceGenerator(BaseGenerator):
if (not self._interface.id in _merged_html_interfaces and
# Don't re-generate types that have been converted to native dart types.
self._html_interface_name not in nativified_classes):
- path = '%s.dart' % self._html_interface_name
- self._interface_emitter = self._system._CreateEmitter(path)
+ self._interface_emitter = self._library_emitter.FileEmitter(
+ self._html_interface_name)
else:
self._interface_emitter = emitter.Emitter()
template_file = 'interface_%s.darttemplate' % self._html_interface_name
- interface_template = (self._system._templates.TryLoad(template_file) or
- self._system._templates.Load('interface.darttemplate'))
+ interface_template = (self._template_loader.TryLoad(template_file) or
+ self._template_loader.Load('interface.darttemplate'))
typename = self._html_interface_name
@@ -527,20 +502,17 @@ class HtmlDartInterfaceGenerator(BaseGenerator):
if constructor_info:
constructors.append(constructor_info)
factory_provider = '_' + typename + 'FactoryProvider'
- factory_provider_emitter = self._system._CreateEmitter(
- '_%sFactoryProvider.dart' % self._html_interface_name)
+ factory_provider_emitter = self._library_emitter.FileEmitter(
+ '_%sFactoryProvider' % self._html_interface_name)
self._backend.EmitFactoryProvider(
constructor_info, factory_provider, factory_provider_emitter)
infos = HtmlElementConstructorInfos(typename)
if infos:
- if not self._system._elements_factory_emitter:
- file_emitter = self._system._CreateEmitter('_Elements.dart')
- template = self._system._templates.Load(
- 'factoryprovider_Elements.darttemplate')
- self._system._elements_factory_emitter = file_emitter.Emit(template)
+ template = self._template_loader.Load(
+ 'factoryprovider_Elements.darttemplate')
EmitHtmlElementFactoryConstructors(
- self._system._elements_factory_emitter,
+ self._library_emitter.FileEmitter('_Elements', template),
infos,
self._html_interface_name,
self._backend.ImplementationClassName())
@@ -568,10 +540,10 @@ class HtmlDartInterfaceGenerator(BaseGenerator):
name = self._html_interface_name
if self._html_interface_name in nativified_classes:
name = nativified_classes[self._html_interface_name]
- filename = '%sImpl.dart' % name
+ basename = '%sImpl' % name
else:
- filename = '%sImpl_Merged.dart' % self._html_interface_name
- self._implementation_emitter = self._system._CreateEmitter(filename)
+ basename = '%sImpl_Merged' % self._html_interface_name
+ self._implementation_emitter = self._library_emitter.FileEmitter(basename)
else:
self._implementation_emitter = emitter.Emitter()
self._backend.SetImplementationEmitter(self._implementation_emitter)
@@ -582,7 +554,7 @@ class HtmlDartInterfaceGenerator(BaseGenerator):
self._DartType, self._members_emitter, factory_provider)
element_type = MaybeTypedArrayElementTypeInHierarchy(
- self._interface, self._system._database)
+ self._interface, self._database)
if element_type:
self._members_emitter.Emit(
'\n'
@@ -617,13 +589,13 @@ class HtmlDartInterfaceGenerator(BaseGenerator):
def AddAttribute(self, attribute, is_secondary=False):
dom_name = DartDomNameOfAttribute(attribute)
- html_name = self._system._renamer.RenameMember(
+ html_name = self._renamer.RenameMember(
self._interface.id, dom_name, 'get:')
if not html_name or self._shared.IsPrivate(html_name):
return
- html_setter_name = self._system._renamer.RenameMember(
+ html_setter_name = self._renamer.RenameMember(
self._interface.id, dom_name, 'set:')
read_only = IsReadOnly(attribute) or not html_setter_name
@@ -655,7 +627,7 @@ class HtmlDartInterfaceGenerator(BaseGenerator):
operations - contains the overloads, one or more operations with the same
name.
"""
- html_name = self._system._renamer.RenameMember(self._interface.id, info.name)
+ html_name = self._renamer.RenameMember(self._interface.id, info.name)
if not html_name:
if info.name == 'item':
# FIXME: item should be renamed to operator[], not removed.
@@ -720,7 +692,7 @@ class HtmlDartInterfaceGenerator(BaseGenerator):
self._shared.GetParentsEventsClasses(self._interface)))
template_file = 'impl_%s.darttemplate' % events_interface
- template = (self._system._templates.TryLoad(template_file) or
+ template = (self._template_loader.TryLoad(template_file) or
'\n'
'class $CLASSNAME extends $SUPER implements $INTERFACE {\n'
' $CLASSNAME(_ptr) : super(_ptr);\n'
@@ -1320,28 +1292,32 @@ class Dart2JSBackend(BaseGenerator):
# ------------------------------------------------------------------------------
class DartLibraryEmitter():
- def __init__(self, emitters, template, dart_sources_dir):
- self._emitters = emitters
+ def __init__(self, multiemitter, template, dart_sources_dir):
+ self._multiemitter = multiemitter
self._template = template
self._dart_sources_dir = dart_sources_dir
- self._dart_sources_list = []
+ self._path_to_emitter = {}
- def CreateFileEmitter(self, filename):
- path = os.path.join(self._dart_sources_dir, filename)
- self._dart_sources_list.append(path)
- return self._emitters.FileEmitter(path)
+ def FileEmitter(self, basename, template=None):
+ path = os.path.join(self._dart_sources_dir, '%s.dart' % basename)
+ if not path in self._path_to_emitter:
+ emitter = self._multiemitter.FileEmitter(path)
+ if not template is None:
+ emitter = emitter.Emit(template)
+ self._path_to_emitter[path] = emitter
+ return self._path_to_emitter[path]
def EmitLibrary(self, library_file_path, auxiliary_dir):
def massage_path(path):
# The most robust way to emit path separators is to use / always.
return path.replace('\\', '/')
- library_emitter = self._emitters.FileEmitter(library_file_path)
+ library_emitter = self._multiemitter.FileEmitter(library_file_path)
library_file_dir = os.path.dirname(library_file_path)
auxiliary_dir = os.path.relpath(auxiliary_dir, library_file_dir)
imports_emitter = library_emitter.Emit(
self._template, AUXILIARY_DIR=massage_path(auxiliary_dir))
- for path in sorted(self._dart_sources_list):
+ for path in sorted(self._path_to_emitter.keys()):
relpath = os.path.relpath(path, library_file_dir)
imports_emitter.Emit(
"#source('$PATH');\n", PATH=massage_path(relpath))
« lib/html/scripts/dartdomgenerator.py ('K') | « lib/html/scripts/systembase.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698