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

Unified Diff: lib/dom/scripts/systemnative.py

Issue 10704096: Extract common FactoryProviders generation logic. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 5 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
Index: lib/dom/scripts/systemnative.py
diff --git a/lib/dom/scripts/systemnative.py b/lib/dom/scripts/systemnative.py
index 0b7aa5313d75bebd2003caa1a9372b1c87ac9448..caff267fe2aac21326ead60fb277981b29f64a3e 100644
--- a/lib/dom/scripts/systemnative.py
+++ b/lib/dom/scripts/systemnative.py
@@ -10,9 +10,8 @@ import emitter
import os
import systembase
from generator import *
-from systemhtml import DomToHtmlEvent, DomToHtmlEvents, HtmlSystemShared
-from systemhtml import HtmlElementConstructorInfos
-from systemhtml import EmitHtmlElementFactoryConstructors
+from systemhtml import HtmlSystemShared
+
class NativeImplementationSystem(systembase.System):
@@ -20,11 +19,9 @@ class NativeImplementationSystem(systembase.System):
super(NativeImplementationSystem, self).__init__(
templates, database, emitters, output_dir)
self._auxiliary_dir = auxiliary_dir
- self._dom_impl_files = []
self._cpp_header_files = []
self._cpp_impl_files = []
self._html_system = HtmlSystemShared(database)
- self._factory_provider_emitters = {}
def ImplementationGenerator(self, interface):
return NativeImplementationGenerator(self, interface)
@@ -106,7 +103,7 @@ class NativeImplementationSystem(systembase.System):
self._GenerateLibFile(
'html_dartium.darttemplate',
os.path.join(self._output_dir, 'html_dartium.dart'),
- interface_files + self._dom_impl_files,
+ interface_files,
AUXILIARY_DIR=systembase.MassagePath(auxiliary_dir))
# Generate DartDerivedSourcesXX.cpp.
@@ -148,25 +145,12 @@ class NativeImplementationSystem(systembase.System):
def Finish(self):
pass
- def _FilePathForDartFactoryProviderImplementation(self, interface_name):
- return os.path.join(self._output_dir, 'dart',
- '%sFactoryProviderImplementation.dart' % interface_name)
-
def _FilePathForCppHeader(self, interface_name):
return os.path.join(self._output_dir, 'cpp', 'Dart%s.h' % interface_name)
def _FilePathForCppImplementation(self, interface_name):
return os.path.join(self._output_dir, 'cpp', 'Dart%s.cpp' % interface_name)
- def _EmitterForFactoryProviderBody(self, name):
- if name not in self._factory_provider_emitters:
- file_name = self._FilePathForDartFactoryProviderImplementation(name)
- self._dom_impl_files.append(file_name)
- template = self._templates.Load('factoryprovider_%s.darttemplate' % name)
- file_emitter = self._emitters.FileEmitter(file_name)
- self._factory_provider_emitters[name] = file_emitter.Emit(template)
- return self._factory_provider_emitters[name]
-
class NativeImplementationGenerator(systembase.BaseGenerator):
"""Generates Dart implementation for one DOM IDL interface."""
@@ -185,7 +169,8 @@ class NativeImplementationGenerator(systembase.BaseGenerator):
self._system = system
self._current_secondary_parent = None
self._html_system = self._system._html_system
- self._html_renames = self._html_system._html_renames
+ self._html_interface_name = self._html_system._html_renames.get(
+ self._interface.id, self._interface.id)
def HasImplementation(self):
return not IsPureInterface(self._interface.id)
@@ -197,6 +182,14 @@ class NativeImplementationGenerator(systembase.BaseGenerator):
return os.path.join(self._system._output_dir, 'dart',
'%sImplementation.dart' % self._interface.id)
+ def FilePathForDartFactoryProviderImplementation(self):
+ file_name = '%sFactoryProviderImplementation.dart' % self._interface.id
+ return os.path.join(self._system._output_dir, 'dart', file_name)
+
+ def FilePathForDartElementsFactoryProviderImplementation(self):
+ return os.path.join(self._system._output_dir, 'dart',
+ '_ElementsFactoryProviderImplementation.dart')
+
def SetImplementationEmitter(self, implementation_emitter):
self._dart_impl_emitter = implementation_emitter
@@ -230,8 +223,6 @@ class NativeImplementationGenerator(systembase.BaseGenerator):
return self._members_emitter
def _GenerateConstructors(self):
- html_interface_name = self._HTMLInterfaceName(self._interface.id)
-
if not self._IsConstructable():
return
@@ -244,8 +235,6 @@ class NativeImplementationGenerator(systembase.BaseGenerator):
constructor_info = AnalyzeConstructor(self._interface)
- if constructor_info:
- self._EmitFactoryProvider(self._interface.id, constructor_info)
ext_attrs = self._interface.ext_attrs
@@ -356,39 +345,29 @@ class NativeImplementationGenerator(systembase.BaseGenerator):
return self._ImplClassName(supertype)
- def _HTMLInterfaceName(self, interface_name):
- return self._html_renames.get(interface_name, interface_name)
-
def _IsConstructable(self):
# FIXME: support ConstructorTemplate.
return set(['CustomConstructor', 'V8CustomConstructor', 'Constructor', 'NamedConstructor']) & set(self._interface.ext_attrs)
- def _EmitFactoryProvider(self, interface_name, constructor_info):
- dart_impl_path = self._system._FilePathForDartFactoryProviderImplementation(
- interface_name)
- self._system._dom_impl_files.append(dart_impl_path)
-
- html_interface_name = self._HTMLInterfaceName(interface_name)
- template_file = 'factoryprovider_%s.darttemplate' % html_interface_name
+ def EmitFactoryProvider(self, constructor_info, factory_provider, emitter):
+ template_file = 'factoryprovider_%s.darttemplate' % self._html_interface_name
template = self._system._templates.TryLoad(template_file)
if not template:
template = self._system._templates.Load('factoryprovider.darttemplate')
- native_implementation_function = '%s_constructor_Callback' % interface_name
- emitter = self._system._emitters.FileEmitter(dart_impl_path)
+ native_binding = '%s_constructor_Callback' % self._interface.id
emitter.Emit(
template,
- FACTORYPROVIDER='_%sFactoryProvider' % html_interface_name,
- INTERFACE=html_interface_name,
+ FACTORYPROVIDER=factory_provider,
+ INTERFACE=self._html_interface_name,
PARAMETERS=constructor_info.ParametersImplementationDeclaration(self._DartType),
ARGUMENTS=constructor_info.ParametersAsArgumentList(),
- NATIVE_NAME=native_implementation_function)
+ NATIVE_NAME=native_binding)
def FinishInterface(self):
- html_interface_name = self._HTMLInterfaceName(self._interface.id)
template = None
- if html_interface_name == self._interface.id or not self._database.HasInterface(html_interface_name):
- template_file = 'impl_%s.darttemplate' % html_interface_name
+ if self._html_interface_name == self._interface.id or not self._database.HasInterface(self._html_interface_name):
+ template_file = 'impl_%s.darttemplate' % self._html_interface_name
template = self._system._templates.TryLoad(template_file)
if not template:
template = self._system._templates.Load('dart_implementation.darttemplate')
@@ -398,7 +377,7 @@ class NativeImplementationGenerator(systembase.BaseGenerator):
template,
CLASSNAME=class_name,
EXTENDS=' extends ' + self._BaseClassName(),
- IMPLEMENTS=' implements ' + html_interface_name,
+ IMPLEMENTS=' implements ' + self._html_interface_name,
NATIVESPEC='')
members_emitter.Emit(''.join(self._members_emitter.Fragments()))
« no previous file with comments | « lib/dom/scripts/systemhtml.py ('k') | lib/dom/templates/html/dartium/factoryprovider__Elements.darttemplate » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698