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

Side by Side Diff: lib/html/scripts/systemhtml.py

Issue 11065042: Introduce ListLikeIDLTypeInfo as a replacement for nativified_classes table. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 2 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 import emitter 9 import emitter
10 import os 10 import os
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after
233 info = AnalyzeOperation(self._interface, handlers) 233 info = AnalyzeOperation(self._interface, handlers)
234 code = self._library_emitter.FileEmitter(self._interface.id) 234 code = self._library_emitter.FileEmitter(self._interface.id)
235 code.Emit(self._template_loader.Load('callback.darttemplate')) 235 code.Emit(self._template_loader.Load('callback.darttemplate'))
236 code.Emit('typedef $TYPE $NAME($PARAMS);\n', 236 code.Emit('typedef $TYPE $NAME($PARAMS);\n',
237 NAME=self._interface.id, 237 NAME=self._interface.id,
238 TYPE=self._DartType(info.type_name), 238 TYPE=self._DartType(info.type_name),
239 PARAMS=info.ParametersImplementationDeclaration(self._DartType)) 239 PARAMS=info.ParametersImplementationDeclaration(self._DartType))
240 self._backend.GenerateCallback(info) 240 self._backend.GenerateCallback(info)
241 241
242 def GenerateInterface(self): 242 def GenerateInterface(self):
243 interface_type_info = self._type_registry.TypeInfo(self._interface.id)
243 if (not self._interface.id in _merged_html_interfaces and 244 if (not self._interface.id in _merged_html_interfaces and
244 # Don't re-generate types that have been converted to native dart types. 245 interface_type_info.has_generated_interface()):
245 self._html_interface_name not in nativified_classes):
246 interface_emitter = self._library_emitter.FileEmitter( 246 interface_emitter = self._library_emitter.FileEmitter(
247 self._html_interface_name) 247 self._html_interface_name)
248 else: 248 else:
249 interface_emitter = emitter.Emitter() 249 interface_emitter = emitter.Emitter()
250 250
251 template_file = 'interface_%s.darttemplate' % self._html_interface_name 251 template_file = 'interface_%s.darttemplate' % self._html_interface_name
252 interface_template = (self._template_loader.TryLoad(template_file) or 252 interface_template = (self._template_loader.TryLoad(template_file) or
253 self._template_loader.Load('interface.darttemplate')) 253 self._template_loader.Load('interface.darttemplate'))
254 254
255 typename = self._html_interface_name 255 typename = self._html_interface_name
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
323 interface_template + '$!TOP_LEVEL', 323 interface_template + '$!TOP_LEVEL',
324 ID=typename, 324 ID=typename,
325 EXTENDS=implements_str) 325 EXTENDS=implements_str)
326 326
327 self._type_comment_emitter.Emit("/// @domName $DOMNAME", 327 self._type_comment_emitter.Emit("/// @domName $DOMNAME",
328 DOMNAME=self._interface.doc_js_name) 328 DOMNAME=self._interface.doc_js_name)
329 329
330 if self._backend.HasImplementation(): 330 if self._backend.HasImplementation():
331 if not self._interface.id in _merged_html_interfaces: 331 if not self._interface.id in _merged_html_interfaces:
332 name = self._html_interface_name 332 name = self._html_interface_name
333 if self._html_interface_name in nativified_classes:
334 name = nativified_classes[self._html_interface_name]
335 basename = '%sImpl' % name 333 basename = '%sImpl' % name
336 else: 334 else:
337 basename = '%sImpl_Merged' % self._html_interface_name 335 basename = '%sImpl_Merged' % self._html_interface_name
338 implementation_emitter = self._library_emitter.FileEmitter(basename) 336 implementation_emitter = self._library_emitter.FileEmitter(basename)
339 else: 337 else:
340 implementation_emitter = emitter.Emitter() 338 implementation_emitter = emitter.Emitter()
341 339
342 base_class = self._backend.BaseClassName() 340 base_class = self._backend.BaseClassName()
343 interface_type_info = self._type_registry.TypeInfo(self._interface.id) 341 interface_type_info = self._type_registry.TypeInfo(self._interface.id)
344 implemented_interfaces = [interface_type_info.interface_name()] +\ 342 implemented_interfaces = [interface_type_info.interface_name()] +\
(...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after
605 return not (IsPureInterface(self._interface.id) or 603 return not (IsPureInterface(self._interface.id) or
606 self._interface.id in _merged_html_interfaces) 604 self._interface.id in _merged_html_interfaces)
607 605
608 def ImplementationClassName(self): 606 def ImplementationClassName(self):
609 return self._ImplClassName(self._html_interface_name) 607 return self._ImplClassName(self._html_interface_name)
610 608
611 def ImplementsMergedMembers(self): 609 def ImplementsMergedMembers(self):
612 return True 610 return True
613 611
614 def _ImplClassName(self, type_name): 612 def _ImplClassName(self, type_name):
615 name = type_name 613 return '_%sImpl' % type_name
616 if type_name in nativified_classes:
617 name = nativified_classes[type_name]
618 return '_%sImpl' % name
619 614
620 def GenerateCallback(self, info): 615 def GenerateCallback(self, info):
621 pass 616 pass
622 617
623 def BaseClassName(self): 618 def BaseClassName(self):
624 if not self._interface.parents: 619 if not self._interface.parents:
625 return None 620 return None
626 supertype = self._interface.parents[0].type.id 621 supertype = self._interface.parents[0].type.id
627 if IsDartCollectionType(supertype): 622 if IsDartCollectionType(supertype):
628 # List methods are injected in AddIndexer. 623 # List methods are injected in AddIndexer.
629 return None 624 return None
630 if IsPureInterface(supertype): 625 if IsPureInterface(supertype):
631 return None 626 return None
632 elif supertype == 'NodeList':
633 # Special case as NodeList gets converted to List<Node>.
634 return '_NodeListImpl'
635 return self._type_registry.TypeInfo(supertype).implementation_name() 627 return self._type_registry.TypeInfo(supertype).implementation_name()
636 628
637 def AdditionalImplementedInterfaces(self): 629 def AdditionalImplementedInterfaces(self):
638 # TODO: Include all implemented interfaces, including other Lists. 630 # TODO: Include all implemented interfaces, including other Lists.
639 implements = [] 631 implements = []
640 element_type = MaybeTypedArrayElementType(self._interface) 632 element_type = MaybeTypedArrayElementType(self._interface)
641 if element_type: 633 if element_type:
642 implements.append('List<%s>' % self._DartType(element_type)) 634 implements.append('List<%s>' % self._DartType(element_type))
643 if self._HasJavaScriptIndexingBehaviour(): 635 if self._HasJavaScriptIndexingBehaviour():
644 implements.append('JavaScriptIndexingBehavior') 636 implements.append('JavaScriptIndexingBehavior')
(...skipping 488 matching lines...) Expand 10 before | Expand all | Expand 10 after
1133 1125
1134 library_emitter = self._multiemitter.FileEmitter(library_file_path) 1126 library_emitter = self._multiemitter.FileEmitter(library_file_path)
1135 library_file_dir = os.path.dirname(library_file_path) 1127 library_file_dir = os.path.dirname(library_file_path)
1136 auxiliary_dir = os.path.relpath(auxiliary_dir, library_file_dir) 1128 auxiliary_dir = os.path.relpath(auxiliary_dir, library_file_dir)
1137 imports_emitter = library_emitter.Emit( 1129 imports_emitter = library_emitter.Emit(
1138 self._template, AUXILIARY_DIR=massage_path(auxiliary_dir)) 1130 self._template, AUXILIARY_DIR=massage_path(auxiliary_dir))
1139 for path in sorted(self._path_to_emitter.keys()): 1131 for path in sorted(self._path_to_emitter.keys()):
1140 relpath = os.path.relpath(path, library_file_dir) 1132 relpath = os.path.relpath(path, library_file_dir)
1141 imports_emitter.Emit( 1133 imports_emitter.Emit(
1142 "#source('$PATH');\n", PATH=massage_path(relpath)) 1134 "#source('$PATH');\n", PATH=massage_path(relpath))
OLDNEW
« lib/html/scripts/generator.py ('K') | « lib/html/scripts/htmlrenamer.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698