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 provides shared functionality for the system to generate | 6 """This module provides shared functionality for the system to generate |
7 dart:html APIs from the IDL database.""" | 7 dart:html APIs from the IDL database.""" |
8 | 8 |
9 from generator import AnalyzeOperation, ConstantOutputOrder, \ | 9 from generator import AnalyzeOperation, ConstantOutputOrder, \ |
10 DartDomNameOfAttribute, FindMatchingAttribute, IsDartCollectionType, \ | 10 DartDomNameOfAttribute, FindMatchingAttribute, IsDartCollectionType, \ |
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
175 implements = [] | 175 implements = [] |
176 if self._interface_type_info.is_typed_array(): | 176 if self._interface_type_info.is_typed_array(): |
177 element_type = self._interface_type_info.list_item_type() | 177 element_type = self._interface_type_info.list_item_type() |
178 implements.append('List<%s>' % self._DartType(element_type)) | 178 implements.append('List<%s>' % self._DartType(element_type)) |
179 if self._interface_type_info.list_item_type(): | 179 if self._interface_type_info.list_item_type(): |
180 item_type_info = self._type_registry.TypeInfo( | 180 item_type_info = self._type_registry.TypeInfo( |
181 self._interface_type_info.list_item_type()) | 181 self._interface_type_info.list_item_type()) |
182 implements.append('List<%s>' % item_type_info.dart_type()) | 182 implements.append('List<%s>' % item_type_info.dart_type()) |
183 return implements | 183 return implements |
184 | 184 |
185 def AddConstructors(self, constructors, factory_provider, class_name, | 185 def AddConstructors(self, constructors, factory_name, class_name, |
186 base_class): | 186 base_class, factory_constructor_name=None): |
187 """ Adds all of the constructors. | 187 """ Adds all of the constructors. |
188 Arguments: | 188 Arguments: |
189 constructors - List of the constructors to be added. | 189 constructors - List of the constructors to be added. |
190 factory_provider - Name of the factory provider for this class. | 190 factory_name - Name of the factory for this class. |
191 class_name - The name of this class. | 191 class_name - The name of this class. |
192 base_class - The name of the base class which this extends. | 192 base_class - The name of the base class which this extends. |
| 193 factory_constructor_name - The name of the constructor on the |
| 194 factory_name to call (calls an autogenerated FactoryProvider |
| 195 if unspecified) |
193 """ | 196 """ |
194 for constructor_info in constructors: | 197 for constructor_info in constructors: |
195 self._AddConstructor(constructor_info, factory_provider) | 198 self._AddConstructor(constructor_info, factory_name, |
| 199 factory_constructor_name, constructor_info.factory_parameters) |
196 | 200 |
197 typed_array_type = None | 201 typed_array_type = None |
198 for interface in self._database.Hierarchy(self._interface): | 202 for interface in self._database.Hierarchy(self._interface): |
199 type_info = self._type_registry.TypeInfo(interface.id) | 203 type_info = self._type_registry.TypeInfo(interface.id) |
200 if type_info.is_typed_array(): | 204 if type_info.is_typed_array(): |
201 typed_array_type = type_info.list_item_type() | 205 typed_array_type = type_info.list_item_type() |
202 break | 206 break |
203 if typed_array_type: | 207 if typed_array_type: |
204 self._members_emitter.Emit( | 208 self._members_emitter.Emit( |
205 '\n' | 209 '\n' |
206 ' factory $CTOR(int length) =>\n' | 210 ' factory $CTOR(int length) =>\n' |
207 ' $FACTORY.create$(CTOR)(length);\n' | 211 ' $FACTORY.create$(CTOR)(length);\n' |
208 '\n' | 212 '\n' |
209 ' factory $CTOR.fromList(List<$TYPE> list) =>\n' | 213 ' factory $CTOR.fromList(List<$TYPE> list) =>\n' |
210 ' $FACTORY.create$(CTOR)_fromList(list);\n' | 214 ' $FACTORY.create$(CTOR)_fromList(list);\n' |
211 '\n' | 215 '\n' |
212 ' factory $CTOR.fromBuffer(ArrayBuffer buffer, ' | 216 ' factory $CTOR.fromBuffer(ArrayBuffer buffer, ' |
213 '[int byteOffset, int length]) => \n' | 217 '[int byteOffset, int length]) => \n' |
214 ' $FACTORY.create$(CTOR)_fromBuffer(buffer, byteOffset, length);\n'
, | 218 ' $FACTORY.create$(CTOR)_fromBuffer(buffer, byteOffset, length);\n'
, |
215 CTOR=self._interface.id, | 219 CTOR=self._interface.id, |
216 TYPE=self._DartType(typed_array_type), | 220 TYPE=self._DartType(typed_array_type), |
217 FACTORY=factory_provider) | 221 FACTORY=factory_name) |
218 | 222 |
219 def _AddConstructor(self, constructor_info, factory_provider): | 223 def _AddConstructor(self, constructor_info, factory_name, |
220 constructor_info.GenerateFactoryInvocation( | 224 factory_constructor_name, factory_constructor_params): |
221 self._DartType, self._members_emitter, factory_provider) | 225 constructor_info.GenerateFactoryInvocation( |
| 226 self._DartType, self._members_emitter, factory_name, |
| 227 factory_constructor_name=factory_constructor_name, |
| 228 factory_parameters=factory_constructor_params) |
222 | 229 |
223 def DeclareAttribute(self, attribute, type_name, attr_name, read_only): | 230 def DeclareAttribute(self, attribute, type_name, attr_name, read_only): |
224 """ Declares an attribute but does not include the code to invoke it. | 231 """ Declares an attribute but does not include the code to invoke it. |
225 """ | 232 """ |
226 self.EmitAttributeDocumentation(attribute) | 233 self.EmitAttributeDocumentation(attribute) |
227 if read_only: | 234 if read_only: |
228 template = '\n $TYPE get $NAME;\n' | 235 template = '\n $TYPE get $NAME;\n' |
229 else: | 236 else: |
230 template = '\n $TYPE $NAME;\n' | 237 template = '\n $TYPE $NAME;\n' |
231 | 238 |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
294 walk(interface.parents) | 301 walk(interface.parents) |
295 else: | 302 else: |
296 walk(interface.parents[1:]) | 303 walk(interface.parents[1:]) |
297 return result | 304 return result |
298 | 305 |
299 def _DartType(self, type_name): | 306 def _DartType(self, type_name): |
300 return self._type_registry.DartType(type_name) | 307 return self._type_registry.DartType(type_name) |
301 | 308 |
302 def _IsPrivate(self, name): | 309 def _IsPrivate(self, name): |
303 return name.startswith('_') | 310 return name.startswith('_') |
OLD | NEW |