| OLD | NEW |
| 1 #!/usr/bin/python | 1 #!/usr/bin/python |
| 2 # Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 2 # Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| 3 # for details. All rights reserved. Use of this source code is governed by a | 3 # for details. All rights reserved. Use of this source code is governed by a |
| 4 # BSD-style license that can be found in the LICENSE file. | 4 # BSD-style license that can be found in the LICENSE file. |
| 5 | 5 |
| 6 """This module providesfunctionality for systems to generate | 6 """This module providesfunctionality for systems to generate |
| 7 Dart interfaces from the IDL database.""" | 7 Dart interfaces from the IDL database.""" |
| 8 | 8 |
| 9 import os | 9 import os |
| 10 import systembase | 10 import systembase |
| (...skipping 19 matching lines...) Expand all Loading... |
| 30 self._dart_interface_file_paths.append(dart_interface_file_path) | 30 self._dart_interface_file_paths.append(dart_interface_file_path) |
| 31 | 31 |
| 32 dart_interface_code = self._emitters.FileEmitter(dart_interface_file_path) | 32 dart_interface_code = self._emitters.FileEmitter(dart_interface_file_path) |
| 33 | 33 |
| 34 template_file = 'interface_%s.darttemplate' % interface_name | 34 template_file = 'interface_%s.darttemplate' % interface_name |
| 35 template = self._templates.TryLoad(template_file) | 35 template = self._templates.TryLoad(template_file) |
| 36 if not template: | 36 if not template: |
| 37 template = self._templates.Load('interface.darttemplate') | 37 template = self._templates.Load('interface.darttemplate') |
| 38 | 38 |
| 39 return DartInterfaceGenerator( | 39 return DartInterfaceGenerator( |
| 40 interface, dart_interface_code, | 40 self, interface, dart_interface_code, |
| 41 template, | 41 template, |
| 42 common_prefix, super_interface_name, | 42 common_prefix, super_interface_name, |
| 43 source_filter) | 43 source_filter) |
| 44 | 44 |
| 45 def ProcessCallback(self, interface, info): | 45 def ProcessCallback(self, interface, info): |
| 46 """Generates a typedef for the callback interface.""" | 46 """Generates a typedef for the callback interface.""" |
| 47 interface_name = interface.id | 47 interface_name = interface.id |
| 48 file_path = self._FilePathForDartInterface(interface_name) | 48 file_path = self._FilePathForDartInterface(interface_name) |
| 49 self._ProcessCallback(interface, info, file_path) | 49 self._ProcessCallback(interface, info, file_path) |
| 50 | 50 |
| 51 def GenerateLibraries(self, lib_dir): | 51 def GenerateLibraries(self, lib_dir): |
| 52 pass | 52 pass |
| 53 | 53 |
| 54 | 54 |
| 55 def _FilePathForDartInterface(self, interface_name): | 55 def _FilePathForDartInterface(self, interface_name): |
| 56 """Returns the file path of the Dart interface definition.""" | 56 """Returns the file path of the Dart interface definition.""" |
| 57 return os.path.join(self._output_dir, 'src', 'interface', | 57 return os.path.join(self._output_dir, 'src', 'interface', |
| 58 '%s.dart' % interface_name) | 58 '%s.dart' % interface_name) |
| 59 | 59 |
| 60 # ------------------------------------------------------------------------------ | 60 # ------------------------------------------------------------------------------ |
| 61 | 61 |
| 62 class DartInterfaceGenerator(object): | 62 class DartInterfaceGenerator(object): |
| 63 """Generates Dart Interface definition for one DOM IDL interface.""" | 63 """Generates Dart Interface definition for one DOM IDL interface.""" |
| 64 | 64 |
| 65 def __init__(self, interface, emitter, template, | 65 def __init__(self, system, interface, emitter, template, |
| 66 common_prefix, super_interface, source_filter): | 66 common_prefix, super_interface, source_filter): |
| 67 """Generates Dart code for the given interface. | 67 """Generates Dart code for the given interface. |
| 68 | 68 |
| 69 Args: | 69 Args: |
| 70 interface -- an IDLInterface instance. It is assumed that all types have | 70 interface -- an IDLInterface instance. It is assumed that all types have |
| 71 been converted to Dart types (e.g. int, String), unless they are in the | 71 been converted to Dart types (e.g. int, String), unless they are in the |
| 72 same package as the interface. | 72 same package as the interface. |
| 73 common_prefix -- the prefix for the common library, if any. | 73 common_prefix -- the prefix for the common library, if any. |
| 74 super_interface -- the name of the common interface that this interface | 74 super_interface -- the name of the common interface that this interface |
| 75 implements, if any. | 75 implements, if any. |
| 76 source_filter -- if specified, rewrites the names of any superinterfaces | 76 source_filter -- if specified, rewrites the names of any superinterfaces |
| 77 that are not from these sources to use the common prefix. | 77 that are not from these sources to use the common prefix. |
| 78 """ | 78 """ |
| 79 self._system = system |
| 79 self._interface = interface | 80 self._interface = interface |
| 80 self._emitter = emitter | 81 self._emitter = emitter |
| 81 self._template = template | 82 self._template = template |
| 82 self._common_prefix = common_prefix | 83 self._common_prefix = common_prefix |
| 83 self._super_interface = super_interface | 84 self._super_interface = super_interface |
| 84 self._source_filter = source_filter | 85 self._source_filter = source_filter |
| 85 | 86 |
| 86 | 87 |
| 87 def StartInterface(self): | 88 def StartInterface(self): |
| 88 if self._super_interface: | 89 if self._super_interface: |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 133 ID=typename, | 134 ID=typename, |
| 134 EXTENDS=extends_str) | 135 EXTENDS=extends_str) |
| 135 | 136 |
| 136 if constructor_info: | 137 if constructor_info: |
| 137 self._members_emitter.Emit( | 138 self._members_emitter.Emit( |
| 138 '\n' | 139 '\n' |
| 139 ' $CTOR($PARAMS);\n', | 140 ' $CTOR($PARAMS);\n', |
| 140 CTOR=typename, | 141 CTOR=typename, |
| 141 PARAMS=constructor_info.ParametersInterfaceDeclaration()); | 142 PARAMS=constructor_info.ParametersInterfaceDeclaration()); |
| 142 | 143 |
| 143 element_type = MaybeTypedArrayElementType(self._interface) | 144 element_type = MaybeTypedArrayElementTypeInHierarchy( |
| 145 self._interface, self._system._database) |
| 144 if element_type: | 146 if element_type: |
| 145 self._members_emitter.Emit( | 147 self._members_emitter.Emit( |
| 146 '\n' | 148 '\n' |
| 147 ' $CTOR(int length);\n' | 149 ' $CTOR(int length);\n' |
| 148 '\n' | 150 '\n' |
| 149 ' $CTOR.fromList(List<$TYPE> list);\n' | 151 ' $CTOR.fromList(List<$TYPE> list);\n' |
| 150 '\n' | 152 '\n' |
| 151 ' $CTOR.fromBuffer(ArrayBuffer buffer,' | 153 ' $CTOR.fromBuffer(ArrayBuffer buffer,' |
| 152 ' [int byteOffset, int length]);\n', | 154 ' [int byteOffset, int length]);\n', |
| 153 CTOR=self._interface.id, | 155 CTOR=self._interface.id, |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 194 TYPE=TypeOrNothing(DartType(getter.type.id), | 196 TYPE=TypeOrNothing(DartType(getter.type.id), |
| 195 getter.type.id)) | 197 getter.type.id)) |
| 196 return | 198 return |
| 197 raise Exception('Unexpected getter/setter combination %s %s' % | 199 raise Exception('Unexpected getter/setter combination %s %s' % |
| 198 (getter, setter)) | 200 (getter, setter)) |
| 199 | 201 |
| 200 def AddIndexer(self, element_type): | 202 def AddIndexer(self, element_type): |
| 201 # Interface inherits all operations from List<element_type>. | 203 # Interface inherits all operations from List<element_type>. |
| 202 pass | 204 pass |
| 203 | 205 |
| 206 def AmendIndexer(self, element_type): |
| 207 pass |
| 208 |
| 204 def AddOperation(self, info): | 209 def AddOperation(self, info): |
| 205 """ | 210 """ |
| 206 Arguments: | 211 Arguments: |
| 207 operations - contains the overloads, one or more operations with the same | 212 operations - contains the overloads, one or more operations with the same |
| 208 name. | 213 name. |
| 209 """ | 214 """ |
| 210 self._members_emitter.Emit('\n' | 215 self._members_emitter.Emit('\n' |
| 211 ' $TYPE $NAME($PARAMS);\n', | 216 ' $TYPE $NAME($PARAMS);\n', |
| 212 TYPE=info.type_name, | 217 TYPE=info.type_name, |
| 213 NAME=info.name, | 218 NAME=info.name, |
| 214 PARAMS=info.ParametersInterfaceDeclaration()) | 219 PARAMS=info.ParametersInterfaceDeclaration()) |
| 215 | 220 |
| 216 def AddStaticOperation(self, info): | 221 def AddStaticOperation(self, info): |
| 217 pass | 222 pass |
| 218 | 223 |
| 219 # Interfaces get secondary members directly via the superinterfaces. | 224 # Interfaces get secondary members directly via the superinterfaces. |
| 220 def AddSecondaryAttribute(self, interface, getter, setter): | 225 def AddSecondaryAttribute(self, interface, getter, setter): |
| 221 pass | 226 pass |
| 222 | 227 |
| 223 def AddSecondaryOperation(self, interface, attr): | 228 def AddSecondaryOperation(self, interface, attr): |
| 224 pass | 229 pass |
| OLD | NEW |