| Index: client/dom/scripts/dartgenerator.py
|
| diff --git a/client/dom/scripts/dartgenerator.py b/client/dom/scripts/dartgenerator.py
|
| index 2b1b62c3738fef5212a367f7767ea34245e724ad..98021ad1b6e0bc89b8a92b37e483a52a15212552 100755
|
| --- a/client/dom/scripts/dartgenerator.py
|
| +++ b/client/dom/scripts/dartgenerator.py
|
| @@ -1,5 +1,5 @@
|
| #!/usr/bin/python
|
| -# Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
|
| +# Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
|
| # for details. All rights reserved. Use of this source code is governed by a
|
| # BSD-style license that can be found in the LICENSE file.
|
|
|
| @@ -141,42 +141,6 @@ _alternate_methods = {
|
| ('WheelEvent', 'initWheelEvent'): ['initWebKitWheelEvent', 'initWheelEvent']
|
| }
|
|
|
| -#
|
| -# Unexpandable types require special support for
|
| -# dartObjectLocalStorage. Normally, in the overlay dom, it is
|
| -# implemented as an expando field. For these types, we cannot use an
|
| -# expando. Instead, we define a specialized getter and setter.
|
| -#
|
| -_frog_unexpandable_types = {
|
| - # (type name, field name) -> Replacement text
|
| - ('Storage', 'dartObjectLocalStorage'): '''
|
| - var get dartObjectLocalStorage() native """
|
| -
|
| - if (this === window.localStorage)
|
| - return window._dartLocalStorageLocalStorage;
|
| - else if (this === window.sessionStorage)
|
| - return window._dartSessionStorageLocalStorage;
|
| - else
|
| - throw new UnsupportedOperationException('Cannot dartObjectLocalStorage for unknown Storage object.');
|
| -
|
| -""" {
|
| - throw new UnsupportedOperationException('');
|
| - }
|
| -
|
| - void set dartObjectLocalStorage(var value) native """
|
| -
|
| - if (this === window.localStorage)
|
| - window._dartLocalStorageLocalStorage = value;
|
| - else if (this === window.sessionStorage)
|
| - window._dartSessionStorageLocalStorage = value;
|
| - else
|
| - throw new UnsupportedOperationException('Cannot dartObjectLocalStorage for unknown Storage object.');
|
| -
|
| -""" {
|
| - throw new UnsupportedOperationException('');
|
| - }
|
| -''',
|
| -}
|
|
|
| def _MatchSourceFilter(filter, thing):
|
| if not filter:
|
| @@ -1111,13 +1075,17 @@ class FrogSystem(System):
|
| source_filter):
|
| """."""
|
| dart_frog_file_path = self._FilePathForFrogImpl(interface.id)
|
| -
|
| self._dart_frog_file_paths.append(dart_frog_file_path)
|
|
|
| + template_file = 'impl_%s.darttemplate' % interface.id
|
| + template = self._templates.TryLoad(template_file)
|
| + if not template:
|
| + template = self._templates.Load('frog_impl.darttemplate')
|
| +
|
| dart_code = self._emitters.FileEmitter(dart_frog_file_path)
|
| - dart_code.Emit(self._templates.Load('frog_impl.darttemplate'))
|
| - return FrogInterfaceGenerator(self, interface, super_interface_name,
|
| - dart_code)
|
| + # dart_code.Emit(self._templates.Load('frog_impl.darttemplate'))
|
| + return FrogInterfaceGenerator(self, interface, template,
|
| + super_interface_name, dart_code)
|
|
|
| #def ProcessCallback(self, interface, info):
|
| # """Generates a typedef for the callback interface."""
|
| @@ -1826,7 +1794,7 @@ class WrappingInterfaceGenerator(object):
|
| class FrogInterfaceGenerator(object):
|
| """Generates a Frog class for a DOM IDL interface."""
|
|
|
| - def __init__(self, system, interface, super_interface, dart_code):
|
| + def __init__(self, system, interface, template, super_interface, dart_code):
|
| """Generates Dart code for the given interface.
|
|
|
| Args:
|
| @@ -1834,6 +1802,7 @@ class FrogInterfaceGenerator(object):
|
| 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.
|
| + template: A string template.
|
| super_interface: A string or None, the name of the common interface that
|
| this interface implements, if any.
|
| dart_code: an Emitter for the file containing the Dart implementation
|
| @@ -1841,6 +1810,7 @@ class FrogInterfaceGenerator(object):
|
| """
|
| self._system = system
|
| self._interface = interface
|
| + self._template = template
|
| self._super_interface = super_interface
|
| self._dart_code = dart_code
|
| self._current_secondary_parent = None
|
| @@ -1876,11 +1846,6 @@ class FrogInterfaceGenerator(object):
|
| else:
|
| base = self._ImplClassName(supertype)
|
|
|
| - if base:
|
| - extends = " extends " + base
|
| - else:
|
| - extends = ""
|
| -
|
| if interface_name in _frog_dom_custom_native_specs:
|
| native_spec = _frog_dom_custom_native_specs[interface_name]
|
| else:
|
| @@ -1889,23 +1854,28 @@ class FrogInterfaceGenerator(object):
|
| # against dart:dom to load in a worker isolate.
|
| native_spec = '*' + interface_name
|
|
|
| + if base:
|
| + extends = ' extends ' + base
|
| + elif native_spec[0] == '=':
|
| + extends = ''
|
| + else:
|
| + extends = ' extends DOMTypeJs'
|
| +
|
| # TODO: Include all implemented interfaces, including other Lists.
|
| implements = [interface_name]
|
| element_type = MaybeTypedArrayElementType(self._interface)
|
| if element_type:
|
| implements.append('List<' + element_type + '>')
|
|
|
| - (self._members_emitter, self._base_emitter) = self._dart_code.Emit(
|
| - '\n'
|
| - 'class $CLASS$BASE implements $IMPLEMENTS native "$NATIVE" {\n'
|
| - '$!MEMBERS'
|
| - '$!ADDITIONS'
|
| - '}\n',
|
| - CLASS=self._class_name,
|
| - BASE=extends,
|
| - INTERFACE=interface_name,
|
| - IMPLEMENTS=', '.join(implements),
|
| - NATIVE=native_spec)
|
| + self._members_emitter = self._dart_code.Emit(
|
| + self._template,
|
| + #class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
|
| + #$!MEMBERS
|
| + #}
|
| + CLASSNAME=self._class_name,
|
| + EXTENDS=extends,
|
| + IMPLEMENTS=' implements ' + ', '.join(implements),
|
| + NATIVESPEC=' native "' + native_spec + '"')
|
|
|
| if interface_name in _constructable_types:
|
| self._members_emitter.Emit(
|
| @@ -1917,22 +1887,13 @@ class FrogInterfaceGenerator(object):
|
| if element_type:
|
| self.AddTypedArrayConstructors(element_type)
|
|
|
| - if not base:
|
| - # Emit shared base functionality here as we have no common base type.
|
| - if (interface_name, 'dartObjectLocalStorage') in _frog_unexpandable_types:
|
| - ols_code = _frog_unexpandable_types[(interface_name,
|
| - 'dartObjectLocalStorage')]
|
| - self._base_emitter.Emit(ols_code)
|
| - else:
|
| - self._base_emitter.Emit(
|
| - '\n'
|
| - ' var dartObjectLocalStorage;\n')
|
| - self._base_emitter.Emit(
|
| - '\n'
|
| - ' String get typeName() native;\n')
|
| +
|
| + def FinishInterface(self):
|
| + """."""
|
| + pass
|
|
|
| def _ImplClassName(self, type_name):
|
| - return type_name + 'JS'
|
| + return type_name + 'Js'
|
|
|
| def _NarrowToImplementationType(self, type_name):
|
| # TODO(sra): Move into the 'system' and cache the result.
|
| @@ -1954,10 +1915,6 @@ class FrogInterfaceGenerator(object):
|
| def _NarrowOutputType(self, type_name):
|
| return self._NarrowToImplementationType(type_name)
|
|
|
| - def FinishInterface(self):
|
| - """."""
|
| - pass
|
| -
|
| def AddConstant(self, constant):
|
| # Since we are currently generating native classes without interfaces,
|
| # generate the constants as part of the class. This will need to go away
|
|
|