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

Unified Diff: client/dom/scripts/systembase.py

Issue 9433061: Remove duplicate of SystemInterface (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 10 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 | client/dom/scripts/systeminterface.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: client/dom/scripts/systembase.py
diff --git a/client/dom/scripts/systembase.py b/client/dom/scripts/systembase.py
index 5096ec94a560d440083a7a7e5956fa937c3dbd96..56d0db3b6c805b00333d8f9f30b770eeae61fc5e 100644
--- a/client/dom/scripts/systembase.py
+++ b/client/dom/scripts/systembase.py
@@ -7,11 +7,19 @@
Dart APIs from the IDL database."""
import os
-import re
-from generator import *
+#import re
+import generator
class System(object):
- """Generates all the files for one implementation."""
+ """A System generates all the files for one implementation.
+
+ This is a base class for all the specific systems.
+ The life-cycle of a System is:
+ - construction (__init__)
+ - (InterfaceGenerator | ProcessCallback)* # for each IDL interface
+ - GenerateLibraries
+ - Finish
+ """
def __init__(self, templates, database, emitters, output_dir):
self._templates = templates
@@ -25,10 +33,14 @@ class System(object):
common_prefix,
super_interface_name,
source_filter):
- """Returns an interface generator for |interface|."""
+ """Returns an interface generator for |interface|.
+
+ Called once for each interface that is not a callback function.
+ """
return None
def ProcessCallback(self, interface, info):
+ """Processes an interface that is a callback function."""
pass
def GenerateLibraries(self, lib_dir):
@@ -38,6 +50,8 @@ class System(object):
pass
+ # Helper methods used by several systems.
+
def _ProcessCallback(self, interface, info, file_path):
"""Generates a typedef for the callback interface."""
self._dart_callback_file_paths.append(file_path)
@@ -49,11 +63,13 @@ class System(object):
TYPE=info.type_name,
PARAMS=info.ParametersImplementationDeclaration())
+
def _GenerateLibFile(self, lib_template, lib_file_path, file_paths,
**template_args):
"""Generates a lib file from a template and a list of files.
Additional keyword arguments are passed to the template.
+ Typically called from self.GenerateLibraries.
"""
# Load template.
template = self._templates.Load(lib_template)
@@ -76,7 +92,7 @@ class System(object):
# Only consider primary parent, secondary parents are not on the
# implementation class inheritance chain.
parent = interface.parents[0]
- if IsDartCollectionType(parent.type.id):
+ if generator.IsDartCollectionType(parent.type.id):
return
if self._database.HasInterface(parent.type.id):
parent_interface = self._database.GetInterface(parent.type.id)
@@ -89,243 +105,3 @@ class System(object):
result = set()
WalkParentChain(interface)
return result;
-
-
-# ------------------------------------------------------------------------------
-
-class InterfacesSystem(System):
-
- def __init__(self, templates, database, emitters, output_dir):
- super(InterfacesSystem, self).__init__(
- templates, database, emitters, output_dir)
- self._dart_interface_file_paths = []
-
-
- def InterfaceGenerator(self,
- interface,
- common_prefix,
- super_interface_name,
- source_filter):
- """."""
- interface_name = interface.id
- dart_interface_file_path = self._FilePathForDartInterface(interface_name)
-
- self._dart_interface_file_paths.append(dart_interface_file_path)
-
- dart_interface_code = self._emitters.FileEmitter(dart_interface_file_path)
-
- template_file = 'interface_%s.darttemplate' % interface_name
- template = self._templates.TryLoad(template_file)
- if not template:
- template = self._templates.Load('interface.darttemplate')
-
- return DartInterfaceGenerator(
- interface, dart_interface_code,
- template,
- common_prefix, super_interface_name,
- source_filter)
-
- def ProcessCallback(self, interface, info):
- """Generates a typedef for the callback interface."""
- interface_name = interface.id
- file_path = self._FilePathForDartInterface(interface_name)
- self._ProcessCallback(interface, info, file_path)
-
- def GenerateLibraries(self, lib_dir):
- pass
-
-
- def _FilePathForDartInterface(self, interface_name):
- """Returns the file path of the Dart interface definition."""
- return os.path.join(self._output_dir, 'src', 'interface',
- '%s.dart' % interface_name)
-
-# ------------------------------------------------------------------------------
-
-class DartInterfaceGenerator(object):
- """Generates Dart Interface definition for one DOM IDL interface."""
-
- def __init__(self, interface, emitter, template,
- common_prefix, super_interface, source_filter):
- """Generates Dart code for the given interface.
-
- Args:
- interface -- an IDLInterface instance. It is assumed that all types have
- been converted to Dart types (e.g. int, String), unless they are in the
- same package as the interface.
- common_prefix -- the prefix for the common library, if any.
- super_interface -- the name of the common interface that this interface
- implements, if any.
- source_filter -- if specified, rewrites the names of any superinterfaces
- that are not from these sources to use the common prefix.
- """
- self._interface = interface
- self._emitter = emitter
- self._template = template
- self._common_prefix = common_prefix
- self._super_interface = super_interface
- self._source_filter = source_filter
-
-
- def StartInterface(self):
- if self._super_interface:
- typename = self._super_interface
- else:
- typename = self._interface.id
-
-
- extends = []
- suppressed_extends = []
-
- for parent in self._interface.parents:
- # TODO(vsm): Remove source_filter.
- if MatchSourceFilter(self._source_filter, parent):
- # Parent is a DOM type.
- extends.append(parent.type.id)
- elif '<' in parent.type.id:
- # Parent is a Dart collection type.
- # TODO(vsm): Make this check more robust.
- extends.append(parent.type.id)
- else:
- suppressed_extends.append('%s.%s' %
- (self._common_prefix, parent.type.id))
-
- comment = ' extends'
- extends_str = ''
- if extends:
- extends_str += ' extends ' + ', '.join(extends)
- comment = ','
- if suppressed_extends:
- extends_str += ' /*%s %s */' % (comment, ', '.join(suppressed_extends))
-
- if typename in interface_factories:
- extends_str += ' default ' + interface_factories[typename]
-
- # TODO(vsm): Add appropriate package / namespace syntax.
- (self._members_emitter,
- self._top_level_emitter) = self._emitter.Emit(
- self._template + '$!TOP_LEVEL',
- ID=typename,
- EXTENDS=extends_str)
-
- element_type = MaybeTypedArrayElementType(self._interface)
- if element_type:
- self._members_emitter.Emit(
- '\n'
- ' $CTOR(int length);\n'
- '\n'
- ' $CTOR.fromList(List<$TYPE> list);\n'
- '\n'
- ' $CTOR.fromBuffer(ArrayBuffer buffer);\n',
- CTOR=self._interface.id,
- TYPE=element_type)
-
-
- def FinishInterface(self):
- # TODO(vsm): Use typedef if / when that is supported in Dart.
- # Define variant as subtype.
- if (self._super_interface and
- self._interface.id is not self._super_interface):
- consts_emitter = self._top_level_emitter.Emit(
- '\n'
- 'interface $NAME extends $BASE {\n'
- '$!CONSTS'
- '}\n',
- NAME=self._interface.id,
- BASE=self._super_interface)
- for const in sorted(self._interface.constants, ConstantOutputOrder):
- self._EmitConstant(consts_emitter, const)
-
- def AddConstant(self, constant):
- if (not self._super_interface or
- self._interface.id is self._super_interface):
- self._EmitConstant(self._members_emitter, constant)
-
- def _EmitConstant(self, emitter, constant):
- emitter.Emit('\n static final $TYPE $NAME = $VALUE;\n',
- NAME=constant.id,
- TYPE=constant.type.id,
- VALUE=constant.value)
-
- def AddAttribute(self, getter, setter):
- if getter and setter and getter.type.id == setter.type.id:
- self._members_emitter.Emit('\n $TYPE $NAME;\n',
- NAME=getter.id, TYPE=getter.type.id);
- return
- if getter and not setter:
- self._members_emitter.Emit('\n final $TYPE $NAME;\n',
- NAME=getter.id, TYPE=getter.type.id);
- return
- raise Exception('Unexpected getter/setter combination %s %s' %
- (getter, setter))
-
- def AddIndexer(self, element_type):
- # Interface inherits all operations from List<element_type>.
- pass
-
- def AddOperation(self, info):
- """
- Arguments:
- operations - contains the overloads, one or more operations with the same
- name.
- """
- self._members_emitter.Emit('\n'
- ' $TYPE $NAME($PARAMS);\n',
- TYPE=info.type_name,
- NAME=info.name,
- PARAMS=info.ParametersInterfaceDeclaration())
-
- # Interfaces get secondary members directly via the superinterfaces.
- def AddSecondaryAttribute(self, interface, getter, setter):
- pass
-
- def AddSecondaryOperation(self, interface, attr):
- pass
-
- def AddEventAttributes(self, event_attrs):
- pass
-
-# Given a sorted sequence of type identifiers, return an appropriate type
-# name
-def TypeName(typeIds, interface):
- # Dynamically type this field for now.
- return 'var'
-
-# ------------------------------------------------------------------------------
-
-class DummyInterfaceGenerator(object):
- """Generates nothing."""
-
- def __init__(self, system, interface):
- pass
-
- def StartInterface(self):
- pass
-
- def FinishInterface(self):
- pass
-
- def AddConstant(self, constant):
- pass
-
- def AddAttribute(self, getter, setter):
- pass
-
- def AddSecondaryAttribute(self, interface, getter, setter):
- pass
-
- def AddSecondaryOperation(self, interface, info):
- pass
-
- def AddIndexer(self, element_type):
- pass
-
- def AddTypedArrayConstructors(self, element_type):
- pass
-
- def AddOperation(self, info):
- pass
-
- def AddEventAttributes(self, event_attrs):
- pass
-
« no previous file with comments | « no previous file | client/dom/scripts/systeminterface.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698