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

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

Powered by Google App Engine
This is Rietveld 408576698