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

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

Issue 10392147: Move systems creation to dartdomgenerator.py. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Fix performance issue. Created 8 years, 7 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
« no previous file with comments | « no previous file | lib/dom/scripts/dartgenerator.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/dom/scripts/dartdomgenerator.py
diff --git a/lib/dom/scripts/dartdomgenerator.py b/lib/dom/scripts/dartdomgenerator.py
index 1482577e8e348485b8b60bec31fb6744701f6cd6..47bcc1aede921e09b50f9e0cfe9d55f17f13c96d 100755
--- a/lib/dom/scripts/dartdomgenerator.py
+++ b/lib/dom/scripts/dartdomgenerator.py
@@ -8,11 +8,17 @@
import dartgenerator
import database
import logging.config
+import multiemitter
import optparse
import os
import shutil
import subprocess
import sys
+from systemfrog import FrogSystem
+from systemhtml import HtmlInterfacesSystem, HtmlFrogSystem, HtmlDartiumSystem
+from systeminterface import InterfacesSystem
+from systemnative import NativeImplementationSystem
+from templateloader import TemplateLoader
_logger = logging.getLogger('dartdomgenerator')
@@ -70,15 +76,13 @@ def _MakeHtmlRenames(common_database):
return html_renames
-def GenerateDOM(systems, generate_html_systems, output_dir,
- database_dir, use_database_cache):
+def GenerateAll(systems, database_dir, use_database_cache, output_dir):
current_dir = os.path.dirname(__file__)
+ auxiliary_dir = os.path.join(current_dir, '..', 'src')
+ template_dir = os.path.join(current_dir, '..', 'templates')
- generator = dartgenerator.DartGenerator(
- auxiliary_dir=os.path.join(current_dir, '..', 'src'),
- template_dir=os.path.join(current_dir, '..', 'templates'),
- base_package='')
- generator.LoadAuxiliary()
+ generator = dartgenerator.DartGenerator()
+ generator.LoadAuxiliary(auxiliary_dir)
common_database = database.Database(database_dir)
if use_database_cache:
@@ -87,33 +91,84 @@ def GenerateDOM(systems, generate_html_systems, output_dir,
common_database.Load()
generator.FilterMembersWithUnidentifiedTypes(common_database)
- webkit_database = common_database.Clone()
+ dom_database = common_database.Clone()
# Generate Dart interfaces for the WebKit DOM.
- generator.FilterInterfaces(database = webkit_database,
+ generator.FilterInterfaces(database = dom_database,
or_annotations = ['WebKit', 'Dart'],
exclude_displaced = ['WebKit'],
exclude_suppressed = ['WebKit', 'Dart'])
- generator.RenameTypes(webkit_database, _webkit_renames, True)
+ generator.RenameTypes(dom_database, _webkit_renames, True)
+ generator.FixEventTargets(dom_database)
+ emitters = multiemitter.MultiEmitter()
html_renames = _MakeHtmlRenames(common_database)
- if generate_html_systems:
- generator.RenameTypes(webkit_database, html_renames, False)
-
- generator.Generate(database = webkit_database,
- output_dir = output_dir,
- lib_dir = output_dir,
- module_source_preference = ['WebKit', 'Dart'],
- source_filter = ['WebKit', 'Dart'],
- super_database = common_database,
- common_prefix = 'common',
- webkit_renames = _webkit_renames,
- html_renames = html_renames,
- systems = systems)
-
- generator.Flush()
-
-def GenerateSingleFile(systems):
+
+ html_database = None
+ if set(systems) & set(['htmlfrog', 'htmldartium']):
+ html_database = dom_database.Clone()
+ generator.RenameTypes(html_database, html_renames, False)
+
+ for system in systems:
+ if system in ['htmlfrog', 'htmldartium']:
+ target_database = html_database
+ if not output_dir:
+ output_dir = os.path.join(current_dir, '../../html/generated')
Anton Muhin 2012/05/17 18:05:38 that will overwrite output_dir for other systems,
podivilov 2012/05/17 18:20:36 Thanks for spotting this!
+ interface_system = HtmlInterfacesSystem(
+ TemplateLoader(template_dir, ['html/interface', 'html', '']),
+ target_database, emitters, output_dir)
+ else:
+ target_database = dom_database
+ if not output_dir:
+ output_dir = os.path.join(current_dir, '../generated')
+ interface_system = InterfacesSystem(
+ TemplateLoader(template_dir, ['dom/interface', 'dom', '']),
+ target_database, emitters, output_dir)
+
+ if system == 'dummy':
+ implementation_system = dartgenerator.DummyImplementationSystem(
+ TemplateLoader(template_dir, ['dom/dummy', 'dom', '']),
+ target_database, emitters, output_dir)
+ elif system == 'frog':
+ implementation_system = FrogSystem(
+ TemplateLoader(template_dir, ['dom/frog', 'dom', '']),
+ target_database, emitters, output_dir)
+ elif system == 'htmlfrog':
+ implementation_system = HtmlFrogSystem(
+ TemplateLoader(template_dir,
+ ['html/frog', 'html/impl', 'html', ''],
+ {'DARTIUM': False, 'FROG': True}),
+ target_database, emitters, output_dir)
+ elif system == 'htmldartium':
+ implementation_system = HtmlDartiumSystem(
+ TemplateLoader(template_dir,
+ ['html/dartium', 'html/impl', 'html', ''],
+ {'DARTIUM': True, 'FROG': False}),
+ target_database, emitters, auxiliary_dir,
+ output_dir)
+ elif system == 'native':
+ implementation_system = NativeImplementationSystem(
+ TemplateLoader(template_dir, ['dom/native', 'dom', '']),
+ target_database, html_renames, emitters, auxiliary_dir,
+ output_dir)
+ else:
+ raise Exception('Unsupported system %s' % system_name)
+
+ # Makes interface files available for listing in the library for the
+ # implementation system.
+ implementation_system._interface_system = interface_system
+
+ for system in [interface_system, implementation_system]:
+ generator.Generate(target_database, system,
+ source_filter=['WebKit', 'Dart'],
+ super_database=common_database,
+ common_prefix='common',
+ webkit_renames=_webkit_renames,
+ html_renames=html_renames)
+
+ _logger.info('Flush...')
+ emitters.Flush()
+
if 'frog' in systems:
_logger.info('Copy dom_frog to frog/')
subprocess.call(['cd ../generated ; '
@@ -159,28 +214,11 @@ def main():
(options, args) = parser.parse_args()
current_dir = os.path.dirname(__file__)
- systems = options.systems.split(',')
- html_system_names = ['htmldartium', 'htmlfrog']
- html_systems = [s for s in systems if s in html_system_names]
- dom_systems = [s for s in systems if s not in html_system_names]
-
database_dir = os.path.join(current_dir, '..', 'database')
- use_database_cache = options.use_database_cache
logging.config.fileConfig(os.path.join(current_dir, 'logging.conf'))
-
- if dom_systems:
- output_dir = options.output_dir or os.path.join(current_dir,
- '../generated')
- GenerateDOM(dom_systems, False, output_dir,
- database_dir, use_database_cache)
- GenerateSingleFile(dom_systems)
-
- if html_systems:
- output_dir = options.output_dir or os.path.join(current_dir,
- '../../html/generated')
- GenerateDOM(html_systems, True, output_dir,
- database_dir, use_database_cache or dom_systems)
- GenerateSingleFile(html_systems)
+ systems = options.systems.split(',')
+ GenerateAll(systems, database_dir, options.use_database_cache,
+ options.output_dir)
if __name__ == '__main__':
sys.exit(main())
« no previous file with comments | « no previous file | lib/dom/scripts/dartgenerator.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698