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 import emitter | 9 import emitter |
10 | 10 |
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
211 'webkitSpeechChange': 'speechChange', | 211 'webkitSpeechChange': 'speechChange', |
212 'webkitsourceclose': 'sourceClose', | 212 'webkitsourceclose': 'sourceClose', |
213 'webkitsourceended': 'sourceEnded', | 213 'webkitsourceended': 'sourceEnded', |
214 'webkitsourceopen': 'sourceOpen', | 214 'webkitsourceopen': 'sourceOpen', |
215 'webkitTransitionEnd': 'transitionEnd', | 215 'webkitTransitionEnd': 'transitionEnd', |
216 'write': 'write', | 216 'write': 'write', |
217 'writeend': 'writeEnd', | 217 'writeend': 'writeEnd', |
218 'writestart': 'writeStart' | 218 'writestart': 'writeStart' |
219 } | 219 } |
220 | 220 |
221 | |
222 | |
223 # Information for generating element constructors. | 221 # Information for generating element constructors. |
224 # | 222 # |
225 # TODO(sra): maybe remove all the argument complexity and use cascades. | 223 # TODO(sra): maybe remove all the argument complexity and use cascades. |
226 # | 224 # |
227 # var c = new CanvasElement(width: 100, height: 70); | 225 # var c = new CanvasElement(width: 100, height: 70); |
228 # var c = new CanvasElement()..width = 100..height = 70; | 226 # var c = new CanvasElement()..width = 100..height = 70; |
229 # | 227 # |
230 class ElementConstructorInfo(object): | 228 class ElementConstructorInfo(object): |
231 def __init__(self, name=None, tag=None, | 229 def __init__(self, name=None, tag=None, |
232 params=[], opt_params=[], | 230 params=[], opt_params=[], |
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
472 | 470 |
473 def __init__(self, system, interface): | 471 def __init__(self, system, interface): |
474 super(HtmlDartInterfaceGenerator, self).__init__( | 472 super(HtmlDartInterfaceGenerator, self).__init__( |
475 system._database, interface) | 473 system._database, interface) |
476 self._system = system | 474 self._system = system |
477 self._shared = system._shared | 475 self._shared = system._shared |
478 self._html_interface_name = system._renamer.RenameInterface(self._interface) | 476 self._html_interface_name = system._renamer.RenameInterface(self._interface) |
479 self._backend = system._backend.ImplementationGenerator(self._interface) | 477 self._backend = system._backend.ImplementationGenerator(self._interface) |
480 | 478 |
481 def StartInterface(self): | 479 def StartInterface(self): |
482 if not self._interface.id in _merged_html_interfaces: | 480 if (not self._interface.id in _merged_html_interfaces and |
| 481 # Don't re-generate types that have been converted to native dart types. |
| 482 self._html_interface_name not in nativified_classes): |
483 path = '%s.dart' % self._html_interface_name | 483 path = '%s.dart' % self._html_interface_name |
484 self._interface_emitter = self._system._CreateEmitter(path) | 484 self._interface_emitter = self._system._CreateEmitter(path) |
485 else: | 485 else: |
486 self._interface_emitter = emitter.Emitter() | 486 self._interface_emitter = emitter.Emitter() |
487 | 487 |
488 template_file = 'interface_%s.darttemplate' % self._html_interface_name | 488 template_file = 'interface_%s.darttemplate' % self._html_interface_name |
489 interface_template = (self._system._templates.TryLoad(template_file) or | 489 interface_template = (self._system._templates.TryLoad(template_file) or |
490 self._system._templates.Load('interface.darttemplate')
) | 490 self._system._templates.Load('interface.darttemplate')
) |
491 | 491 |
492 typename = self._html_interface_name | 492 typename = self._html_interface_name |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
556 self._top_level_emitter) = self._interface_emitter.Emit( | 556 self._top_level_emitter) = self._interface_emitter.Emit( |
557 interface_template + '$!TOP_LEVEL', | 557 interface_template + '$!TOP_LEVEL', |
558 ID=typename, | 558 ID=typename, |
559 EXTENDS=implements_str) | 559 EXTENDS=implements_str) |
560 | 560 |
561 self._type_comment_emitter.Emit("/// @domName $DOMNAME", | 561 self._type_comment_emitter.Emit("/// @domName $DOMNAME", |
562 DOMNAME=self._interface.doc_js_name) | 562 DOMNAME=self._interface.doc_js_name) |
563 | 563 |
564 if self._backend.HasImplementation(): | 564 if self._backend.HasImplementation(): |
565 if not self._interface.id in _merged_html_interfaces: | 565 if not self._interface.id in _merged_html_interfaces: |
566 filename = '%sImpl.dart' % self._html_interface_name | 566 name = self._html_interface_name |
| 567 if self._html_interface_name in nativified_classes: |
| 568 name = nativified_classes[self._html_interface_name] |
| 569 filename = '%sImpl.dart' % name |
567 else: | 570 else: |
568 filename = '%sImpl_Merged.dart' % self._html_interface_name | 571 filename = '%sImpl_Merged.dart' % self._html_interface_name |
569 self._implementation_emitter = self._system._CreateEmitter(filename) | 572 self._implementation_emitter = self._system._CreateEmitter(filename) |
570 else: | 573 else: |
571 self._implementation_emitter = emitter.Emitter() | 574 self._implementation_emitter = emitter.Emitter() |
572 self._backend.SetImplementationEmitter(self._implementation_emitter) | 575 self._backend.SetImplementationEmitter(self._implementation_emitter) |
573 self._implementation_members_emitter = self._backend.StartInterface() | 576 self._implementation_members_emitter = self._backend.StartInterface() |
574 | 577 |
575 for constructor_info in constructors: | 578 for constructor_info in constructors: |
576 constructor_info.GenerateFactoryInvocation( | 579 constructor_info.GenerateFactoryInvocation( |
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
776 def ImplementationClassName(self): | 779 def ImplementationClassName(self): |
777 return self._ImplClassName(self._html_interface_name) | 780 return self._ImplClassName(self._html_interface_name) |
778 | 781 |
779 def SetImplementationEmitter(self, implementation_emitter): | 782 def SetImplementationEmitter(self, implementation_emitter): |
780 self._dart_code = implementation_emitter | 783 self._dart_code = implementation_emitter |
781 | 784 |
782 def ImplementsMergedMembers(self): | 785 def ImplementsMergedMembers(self): |
783 return True | 786 return True |
784 | 787 |
785 def _ImplClassName(self, type_name): | 788 def _ImplClassName(self, type_name): |
786 return '_%sImpl' % type_name | 789 name = type_name |
| 790 if type_name in nativified_classes: |
| 791 name = nativified_classes[type_name] |
| 792 return '_%sImpl' % name |
787 | 793 |
788 def StartInterface(self): | 794 def StartInterface(self): |
789 interface = self._interface | 795 interface = self._interface |
790 interface_name = interface.id | 796 interface_name = interface.id |
791 | 797 |
792 self._class_name = self._ImplClassName(self._html_interface_name) | 798 self._class_name = self._ImplClassName(self._html_interface_name) |
793 | 799 |
794 base = None | 800 base = None |
795 if interface.parents: | 801 if interface.parents: |
796 supertype = interface.parents[0].type.id | 802 supertype = interface.parents[0].type.id |
(...skipping 433 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1230 def GenerateLibraries(self, dart_files): | 1236 def GenerateLibraries(self, dart_files): |
1231 auxiliary_dir = os.path.relpath(self._auxiliary_dir, self._output_dir) | 1237 auxiliary_dir = os.path.relpath(self._auxiliary_dir, self._output_dir) |
1232 self._GenerateLibFile( | 1238 self._GenerateLibFile( |
1233 'html_dart2js.darttemplate', | 1239 'html_dart2js.darttemplate', |
1234 os.path.join(self._output_dir, 'html_dart2js.dart'), | 1240 os.path.join(self._output_dir, 'html_dart2js.dart'), |
1235 dart_files, | 1241 dart_files, |
1236 AUXILIARY_DIR=systembase.MassagePath(auxiliary_dir)) | 1242 AUXILIARY_DIR=systembase.MassagePath(auxiliary_dir)) |
1237 | 1243 |
1238 def Finish(self): | 1244 def Finish(self): |
1239 pass | 1245 pass |
OLD | NEW |