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

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

Issue 10442125: Rework Element constructors (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 6 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/dom/scripts/generator.py ('k') | lib/dom/scripts/systemnative.py » ('j') | 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 from systemfrog import * 9 from systemfrog import *
10 from systeminterface import * 10 from systeminterface import *
(...skipping 418 matching lines...) Expand 10 before | Expand all | Expand 10 after
429 429
430 430
431 431
432 # Information for generating element constructors. 432 # Information for generating element constructors.
433 # 433 #
434 # TODO(sra): maybe remove all the argument complexity and use cascades. 434 # TODO(sra): maybe remove all the argument complexity and use cascades.
435 # 435 #
436 # var c = new CanvasElement(width: 100, height: 70); 436 # var c = new CanvasElement(width: 100, height: 70);
437 # var c = new CanvasElement()..width = 100..height = 70; 437 # var c = new CanvasElement()..width = 100..height = 70;
438 # 438 #
439 class ElementCtorInfo(object): 439 class ElementCtorInfo(object):
vsm 2012/06/01 01:45:25 Consistency nit: you use both "CtorInfo" and "Cons
440 def __init__(self, tag=None, params=[], opt_params=[], 440 def __init__(self, name=None, tag=None,
441 params=[], opt_params=[],
441 factory_provider_name='_Elements'): 442 factory_provider_name='_Elements'):
442 self.tag = tag 443 self.name = name # The constructor name 'h1' in 'HeadingElement.h1'
444 self.tag = tag or name
vsm 2012/06/01 01:45:25 What is the difference between "tag" and "name"?
443 self.params = params 445 self.params = params
444 self.opt_params = opt_params 446 self.opt_params = opt_params
445 self.factory_provider_name = factory_provider_name 447 self.factory_provider_name = factory_provider_name
446 448
447 def ConstructorInfo(self, interface): 449 def ConstructorInfo(self, interface_name):
448 info = OperationInfo() 450 info = OperationInfo()
449 info.overloads = None 451 info.overloads = None
450 info.declared_name = interface.id 452 info.declared_name = interface_name
451 info.name = interface.id 453 info.name = interface_name
454 info.constructor_name = self.name
452 info.js_name = None 455 info.js_name = None
453 info.type_name = interface.id 456 info.type_name = interface_name
454 info.param_infos = map(lambda tXn: ParamInfo(tXn[1], None, tXn[0], 'null'), 457 info.param_infos = map(lambda tXn: ParamInfo(tXn[1], None, tXn[0], 'null'),
455 self.opt_params) 458 self.opt_params)
456 return info 459 return info
457 460
458 _html_element_constructors = { 461 _html_element_constructors = {
459 'AnchorElement' : ElementCtorInfo(tag='a', opt_params=[('String', 'href')]), 462 'AnchorElement' : ElementCtorInfo(tag='a', opt_params=[('String', 'href')]),
460 'AreaElement': 'area', 463 'AreaElement': 'area',
461 'ButtonElement': 'button', 464 'ButtonElement': 'button',
462 'BRElement': 'br', 465 'BRElement': 'br',
463 'BaseElement': 'base', 466 'BaseElement': 'base',
464 'BodyElement': 'body', 467 'BodyElement': 'body',
465 'ButtonElement': 'button', 468 'ButtonElement': 'button',
466 'CanvasElement': 469 'CanvasElement':
467 ElementCtorInfo(tag='canvas', 470 ElementCtorInfo(tag='canvas',
468 opt_params=[('int', 'height'), ('int', 'width')]), 471 opt_params=[('int', 'height'), ('int', 'width')]),
469 'DListElement': 'dl', 472 'DListElement': 'dl',
470 'DetailsElement': 'details', 473 'DetailsElement': 'details',
471 'DivElement': 'div', 474 'DivElement': 'div',
472 'EmbedElement': 'embed', 475 'EmbedElement': 'embed',
473 'FieldSetElement': 'fieldset', 476 'FieldSetElement': 'fieldset',
474 'Form': 'form', 477 'Form': 'form',
475 'HRElement': 'hr', 478 'HRElement': 'hr',
476 'HeadElement': 'head', 479 'HeadElement': 'head',
480 'HeadingElement': [ElementCtorInfo('h1'),
481 ElementCtorInfo('h2'),
482 ElementCtorInfo('h3'),
483 ElementCtorInfo('h4'),
484 ElementCtorInfo('h5'),
485 ElementCtorInfo('h6')],
477 'HtmlElement': 'html', 486 'HtmlElement': 'html',
478 'IFrameElement': 'iframe', 487 'IFrameElement': 'iframe',
479 'ImageElement': 488 'ImageElement':
480 ElementCtorInfo(tag='img', 489 ElementCtorInfo(tag='img',
481 opt_params=[('String', 'src'), 490 opt_params=[('String', 'src'),
482 ('int', 'height'), ('int', 'width')]), 491 ('int', 'height'), ('int', 'width')]),
483 'InputElement': 492 'InputElement':
484 ElementCtorInfo(tag='input', opt_params=[('String', 'type')]), 493 ElementCtorInfo(tag='input', opt_params=[('String', 'type')]),
485 'KeygenElement': 'keygen', 494 'KeygenElement': 'keygen',
486 'LIElement': 'li', 495 'LIElement': 'li',
(...skipping 21 matching lines...) Expand all
508 'TableElement': 'table', 517 'TableElement': 'table',
509 'TableRowElement': 'tr', 518 'TableRowElement': 'tr',
510 #'TableSectionElement' <thead> <tbody> <tfoot> 519 #'TableSectionElement' <thead> <tbody> <tfoot>
511 'TextAreaElement': 'textarea', 520 'TextAreaElement': 'textarea',
512 'TitleElement': 'title', 521 'TitleElement': 'title',
513 'TrackElement': 'track', 522 'TrackElement': 'track',
514 'UListElement': 'ul', 523 'UListElement': 'ul',
515 'VideoElement': 'video' 524 'VideoElement': 'video'
516 } 525 }
517 526
527 def HtmlElementConstructorInfos(typename):
528 """Returns list of ElementCtorInfos about the convenience constructors for an
529 Element."""
530 # TODO(sra): Handle multiple and named constructors.
531 if typename not in _html_element_constructors:
532 return []
533 infos = _html_element_constructors[typename]
534 if isinstance(infos, str):
535 infos = ElementCtorInfo(tag=infos)
536 if not isinstance(infos, list):
537 infos = [infos]
538 return infos
539
540 def EmitHtmlElementFactoryConstructors(emitter, infos, typename, class_name):
541 for info in infos:
542 constructor_info = info.ConstructorInfo(typename)
543 inits = emitter.Emit(
544 '\n'
545 ' factory $CONSTRUCTOR($PARAMS) {\n'
546 ' $CLASS _e = _document.$dom_createElement("$TAG");\n'
547 '$!INITS'
548 ' return _e;\n'
549 ' }\n',
550 CONSTRUCTOR=constructor_info.ConstructorFullName(),
551 CLASS=class_name,
552 TAG=info.tag,
553 PARAMS=constructor_info.ParametersInterfaceDeclaration())
554 for param in constructor_info.param_infos:
555 inits.Emit(' if ($E != null) _e.$E = $E;\n', E=param.name)
556
557
518 # These classes require an explicit declaration for the "on" method even though 558 # These classes require an explicit declaration for the "on" method even though
519 # they don't declare any unique events, because the concrete class hierarchy 559 # they don't declare any unique events, because the concrete class hierarchy
520 # doesn't match the interface hierarchy. 560 # doesn't match the interface hierarchy.
521 _html_explicit_event_classes = set(['DocumentFragment']) 561 _html_explicit_event_classes = set(['DocumentFragment'])
522 562
523 def _OnAttributeToEventName(on_method): 563 def _OnAttributeToEventName(on_method):
524 event_name = on_method.id[2:] 564 event_name = on_method.id[2:]
525 if event_name in _on_attribute_to_event_name_mapping: 565 if event_name in _on_attribute_to_event_name_mapping:
526 return _on_attribute_to_event_name_mapping[event_name] 566 return _on_attribute_to_event_name_mapping[event_name]
527 else: 567 else:
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
690 def GenerateLibraries(self): 730 def GenerateLibraries(self):
691 pass 731 pass
692 732
693 733
694 def _FilePathForDartInterface(self, interface_name): 734 def _FilePathForDartInterface(self, interface_name):
695 """Returns the file path of the Dart interface definition.""" 735 """Returns the file path of the Dart interface definition."""
696 # TODO(jmesserly): is this the right path 736 # TODO(jmesserly): is this the right path
697 return os.path.join(self._output_dir, 'html', 'interface', 737 return os.path.join(self._output_dir, 'html', 'interface',
698 '%s.dart' % interface_name) 738 '%s.dart' % interface_name)
699 739
700 def _EmitterForFactoryProviderBody(self, name):
701 if name not in self._factory_provider_emitters:
702 path = self._FilePathForDartInterface(name)
703 self._dart_interface_file_paths.append(path)
704 template = self._templates.Load('factoryprovider_%s.darttemplate' % name)
705 file_emitter = self._emitters.FileEmitter(path)
706 self._factory_provider_emitters[name] = file_emitter.Emit(template)
707 return self._factory_provider_emitters[name]
708
709 # ------------------------------------------------------------------------------ 740 # ------------------------------------------------------------------------------
710 741
711 # TODO(jmesserly): inheritance is probably not the right way to factor this long 742 # TODO(jmesserly): inheritance is probably not the right way to factor this long
712 # term, but it makes merging better for now. 743 # term, but it makes merging better for now.
713 class HtmlDartInterfaceGenerator(DartInterfaceGenerator): 744 class HtmlDartInterfaceGenerator(DartInterfaceGenerator):
714 """Generates Dart Interface definition for one DOM IDL interface.""" 745 """Generates Dart Interface definition for one DOM IDL interface."""
715 746
716 def __init__(self, system, interface, emitter, template, 747 def __init__(self, system, interface, emitter, template,
717 common_prefix, super_interface, source_filter, shared): 748 common_prefix, super_interface, source_filter, shared):
718 super(HtmlDartInterfaceGenerator, self).__init__(system, interface, 749 super(HtmlDartInterfaceGenerator, self).__init__(system, interface,
(...skipping 21 matching lines...) Expand all
740 771
741 comment = ' extends' 772 comment = ' extends'
742 extends_str = '' 773 extends_str = ''
743 if extends: 774 if extends:
744 extends_str += ' extends ' + ', '.join(extends) 775 extends_str += ' extends ' + ', '.join(extends)
745 comment = ',' 776 comment = ','
746 if suppressed_extends: 777 if suppressed_extends:
747 extends_str += ' /*%s %s */' % (comment, ', '.join(suppressed_extends)) 778 extends_str += ' /*%s %s */' % (comment, ', '.join(suppressed_extends))
748 779
749 factory_provider = None 780 factory_provider = None
750 constructor_info = AnalyzeConstructor(self._interface)
751 if constructor_info:
752 factory_provider = '_' + typename + 'FactoryProvider';
753
754 if not constructor_info:
755 (constructor_info, factory_provider) = self._EmitElementFactory(typename)
756
757 if typename in interface_factories: 781 if typename in interface_factories:
758 factory_provider = interface_factories[typename] 782 factory_provider = interface_factories[typename]
759 783
784 constructors = []
785 constructor_info = AnalyzeConstructor(self._interface)
786 if constructor_info:
787 constructors.append(constructor_info)
788 factory_provider = '_' + typename + 'FactoryProvider';
789
790 infos = HtmlElementConstructorInfos(typename)
791 for info in infos:
792 constructors.append(info.ConstructorInfo(typename))
793 if factory_provider:
794 assert factory_provider == info.factory_provider_name
795 else:
796 factory_provider = info.factory_provider_name
797
760 if factory_provider: 798 if factory_provider:
761 extends_str += ' default ' + factory_provider 799 extends_str += ' default ' + factory_provider
762 800
763 # TODO(vsm): Add appropriate package / namespace syntax. 801 # TODO(vsm): Add appropriate package / namespace syntax.
764 (self._type_comment_emitter, 802 (self._type_comment_emitter,
765 self._members_emitter, 803 self._members_emitter,
766 self._top_level_emitter) = self._emitter.Emit( 804 self._top_level_emitter) = self._emitter.Emit(
767 self._template + '$!TOP_LEVEL', 805 self._template + '$!TOP_LEVEL',
768 ID=typename, 806 ID=typename,
769 EXTENDS=extends_str) 807 EXTENDS=extends_str)
770 808
771 self._type_comment_emitter.Emit("/// @domName $DOMNAME", 809 self._type_comment_emitter.Emit("/// @domName $DOMNAME",
772 DOMNAME=self._interface.doc_js_name) 810 DOMNAME=self._interface.doc_js_name)
773 811
774 if constructor_info: 812 for constructor_info in constructors:
775 self._members_emitter.Emit( 813 self._members_emitter.Emit(
776 '\n' 814 '\n'
777 ' $CTOR($PARAMS);\n', 815 ' $CTOR($PARAMS);\n',
778 CTOR=typename, 816 CTOR=constructor_info.ConstructorFullName(),
779 PARAMS=constructor_info.ParametersInterfaceDeclaration()); 817 PARAMS=constructor_info.ParametersInterfaceDeclaration());
780 818
781 element_type = MaybeTypedArrayElementTypeInHierarchy( 819 element_type = MaybeTypedArrayElementTypeInHierarchy(
782 self._interface, self._system._database) 820 self._interface, self._system._database)
783 if element_type: 821 if element_type:
784 self._members_emitter.Emit( 822 self._members_emitter.Emit(
785 '\n' 823 '\n'
786 ' $CTOR(int length);\n' 824 ' $CTOR(int length);\n'
787 '\n' 825 '\n'
788 ' $CTOR.fromList(List<$TYPE> list);\n' 826 ' $CTOR.fromList(List<$TYPE> list);\n'
789 '\n' 827 '\n'
790 ' $CTOR.fromBuffer(ArrayBuffer buffer,' 828 ' $CTOR.fromBuffer(ArrayBuffer buffer,'
791 ' [int byteOffset, int length]);\n', 829 ' [int byteOffset, int length]);\n',
792 CTOR=self._interface.id, 830 CTOR=self._interface.id,
793 TYPE=DartType(element_type)) 831 TYPE=DartType(element_type))
794 832
795 emit_events, events = self._shared.GetEventAttributes(self._interface) 833 emit_events, events = self._shared.GetEventAttributes(self._interface)
796 if not emit_events: 834 if not emit_events:
797 return 835 return
798 elif events: 836 elif events:
799 self.AddEventAttributes(events) 837 self.AddEventAttributes(events)
800 else: 838 else:
801 self._EmitEventGetter(self._shared.GetParentEventsClass(self._interface)) 839 self._EmitEventGetter(self._shared.GetParentEventsClass(self._interface))
802 840
803 def _EmitElementFactory(self, typename):
804 """Returns pair (constructor_info, factory_provider_name)."""
805 if typename not in _html_element_constructors:
806 return (None, None)
807 info = _html_element_constructors[typename]
808 if isinstance(info, str): info = ElementCtorInfo(tag=info)
809 constructor_info = info.ConstructorInfo(self._interface)
810 em = self._system._EmitterForFactoryProviderBody(info.factory_provider_name)
811 inits = em.Emit(
812 '\n'
813 ' factory $INTERFACE($PARAMS) {\n'
814 ' $INTERFACE _e = _document.$dom_createElement("$TAG");\n'
815 '$!INITS'
816 ' return _e;\n'
817 ' }\n',
818 INTERFACE=typename,
819 TAG=info.tag,
820 PARAMS=constructor_info.ParametersInterfaceDeclaration())
821 for param in constructor_info.param_infos:
822 inits.Emit(' if ($E != null) _e.$E = $E;\n', E=param.name)
823
824 return (constructor_info, info.factory_provider_name)
825
826 841
827 def AddAttribute(self, getter, setter): 842 def AddAttribute(self, getter, setter):
828 dom_name = DartDomNameOfAttribute(getter) 843 dom_name = DartDomNameOfAttribute(getter)
829 html_getter_name = self._shared.RenameInHtmlLibrary( 844 html_getter_name = self._shared.RenameInHtmlLibrary(
830 self._interface.id, dom_name, 'get:') 845 self._interface.id, dom_name, 'get:')
831 html_setter_name = self._shared.RenameInHtmlLibrary( 846 html_setter_name = self._shared.RenameInHtmlLibrary(
832 self._interface.id, dom_name, 'set:') 847 self._interface.id, dom_name, 'set:')
833 848
834 if not html_getter_name or self._shared.IsPrivate(html_getter_name): 849 if not html_getter_name or self._shared.IsPrivate(html_getter_name):
835 getter = None 850 getter = None
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
966 NATIVESPEC=' native "' + native_spec + '"') 981 NATIVESPEC=' native "' + native_spec + '"')
967 if self._members_emitter == None: 982 if self._members_emitter == None:
968 raise Exception("Class %s doesn't use the $!MEMBERS variable" % 983 raise Exception("Class %s doesn't use the $!MEMBERS variable" %
969 self._class_name) 984 self._class_name)
970 985
971 # Emit a factory provider class for the constructor. 986 # Emit a factory provider class for the constructor.
972 constructor_info = AnalyzeConstructor(interface) 987 constructor_info = AnalyzeConstructor(interface)
973 if constructor_info: 988 if constructor_info:
974 self._EmitFactoryProvider(interface_name, constructor_info) 989 self._EmitFactoryProvider(interface_name, constructor_info)
975 990
991 infos = HtmlElementConstructorInfos(interface_name)
992 if infos:
993 self._EmitHtmlElementFactoryConstructors(infos)
994
976 emit_events, events = self._shared.GetEventAttributes(self._interface) 995 emit_events, events = self._shared.GetEventAttributes(self._interface)
977 if not emit_events: 996 if not emit_events:
978 return 997 return
979 elif events: 998 elif events:
980 self.AddEventAttributes(events) 999 self.AddEventAttributes(events)
981 else: 1000 else:
982 parent_events_class = self._shared.GetParentEventsClass(self._interface) 1001 parent_events_class = self._shared.GetParentEventsClass(self._interface)
983 self._EmitEventGetter('_' + parent_events_class + 'Impl') 1002 self._EmitEventGetter('_' + parent_events_class + 'Impl')
984 1003
985 def _EmitFactoryProvider(self, interface_name, constructor_info): 1004 def _EmitFactoryProvider(self, interface_name, constructor_info):
986 template_file = 'factoryprovider_%s.darttemplate' % interface_name 1005 template_file = 'factoryprovider_%s.darttemplate' % interface_name
987 template = self._system._templates.TryLoad(template_file) 1006 template = self._system._templates.TryLoad(template_file)
988 if not template: 1007 if not template:
989 template = self._system._templates.Load('factoryprovider.darttemplate') 1008 template = self._system._templates.Load('factoryprovider.darttemplate')
990 1009
991 factory_provider = '_' + interface_name + 'FactoryProvider' 1010 factory_provider = '_' + interface_name + 'FactoryProvider'
992 emitter = self._system._ImplFileEmitter(factory_provider) 1011 emitter = self._system._ImplFileEmitter(factory_provider)
993 emitter.Emit( 1012 emitter.Emit(
994 template, 1013 template,
995 FACTORYPROVIDER=factory_provider, 1014 FACTORYPROVIDER=factory_provider,
996 CONSTRUCTOR=interface_name, 1015 CONSTRUCTOR=interface_name,
997 PARAMETERS=constructor_info.ParametersImplementationDeclaration(), 1016 PARAMETERS=constructor_info.ParametersImplementationDeclaration(),
998 NAMED_CONSTRUCTOR=constructor_info.name or interface_name, 1017 NAMED_CONSTRUCTOR=constructor_info.name or interface_name,
999 ARGUMENTS=constructor_info.ParametersAsArgumentList()) 1018 ARGUMENTS=constructor_info.ParametersAsArgumentList())
1000 1019
1020 def _EmitHtmlElementFactoryConstructors(self, infos):
1021 EmitHtmlElementFactoryConstructors(
1022 self._system._EmitterForFactoryProviderBody(
1023 infos[0].factory_provider_name),
1024 infos,
1025 self._interface.id, self._class_name)
1026
1001 def AddIndexer(self, element_type): 1027 def AddIndexer(self, element_type):
1002 """Adds all the methods required to complete implementation of List.""" 1028 """Adds all the methods required to complete implementation of List."""
1003 # We would like to simply inherit the implementation of everything except 1029 # We would like to simply inherit the implementation of everything except
1004 # get length(), [], and maybe []=. It is possible to extend from a base 1030 # get length(), [], and maybe []=. It is possible to extend from a base
1005 # array implementation class only when there is no other implementation 1031 # array implementation class only when there is no other implementation
1006 # inheritance. There might be no implementation inheritance other than 1032 # inheritance. There might be no implementation inheritance other than
1007 # DOMBaseWrapper for many classes, but there might be some where the 1033 # DOMBaseWrapper for many classes, but there might be some where the
1008 # array-ness is introduced by a non-root interface: 1034 # array-ness is introduced by a non-root interface:
1009 # 1035 #
1010 # interface Y extends X, List<T> ... 1036 # interface Y extends X, List<T> ...
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after
1216 TYPE=events_class) 1242 TYPE=events_class)
1217 1243
1218 # ------------------------------------------------------------------------------ 1244 # ------------------------------------------------------------------------------
1219 1245
1220 class HtmlFrogSystem(HtmlSystem): 1246 class HtmlFrogSystem(HtmlSystem):
1221 1247
1222 def __init__(self, templates, database, emitters, output_dir): 1248 def __init__(self, templates, database, emitters, output_dir):
1223 super(HtmlFrogSystem, self).__init__( 1249 super(HtmlFrogSystem, self).__init__(
1224 templates, database, emitters, output_dir) 1250 templates, database, emitters, output_dir)
1225 self._dart_frog_file_paths = [] 1251 self._dart_frog_file_paths = []
1226 1252 self._factory_provider_emitters = {}
1227 1253
1228 def InterfaceGenerator(self, 1254 def InterfaceGenerator(self,
1229 interface, 1255 interface,
1230 common_prefix, 1256 common_prefix,
1231 super_interface_name, 1257 super_interface_name,
1232 source_filter): 1258 source_filter):
1233 """.""" 1259 """."""
1234 template_file = 'impl_%s.darttemplate' % interface.id 1260 template_file = 'impl_%s.darttemplate' % interface.id
1235 template = self._templates.TryLoad(template_file) 1261 template = self._templates.TryLoad(template_file)
1236 if not template: 1262 if not template:
1237 template = self._templates.Load('frog_impl.darttemplate') 1263 template = self._templates.Load('frog_impl.darttemplate')
1238 1264
1239 dart_code = self._ImplFileEmitter(interface.id) 1265 dart_code = self._ImplFileEmitter(interface.id)
1240 return HtmlFrogClassGenerator(self, interface, template, 1266 return HtmlFrogClassGenerator(self, interface, template,
1241 super_interface_name, dart_code, self._shared) 1267 super_interface_name, dart_code, self._shared)
1242 1268
1243 def GenerateLibraries(self): 1269 def GenerateLibraries(self):
1244 self._GenerateLibFile( 1270 self._GenerateLibFile(
1245 'html_frog.darttemplate', 1271 'html_frog.darttemplate',
1246 os.path.join(self._output_dir, 'html_frog.dart'), 1272 os.path.join(self._output_dir, 'html_frog.dart'),
1247 (self._interface_system._dart_interface_file_paths + 1273 (self._interface_system._dart_interface_file_paths +
1248 self._interface_system._dart_callback_file_paths + 1274 self._interface_system._dart_callback_file_paths +
1249 self._dart_frog_file_paths)) 1275 self._dart_frog_file_paths))
1250 1276
1251 def Finish(self): 1277 def Finish(self):
1252 pass 1278 pass
1253 1279
1254 def _ImplFileEmitter(self, name): 1280 def _ImplFileEmitter(self, name):
1255 """Returns the file emitter of the Frog implementation file.""" 1281 """Returns the file emitter of the Frog implementation file."""
1256 # TODO(jmesserly): is this the right path
1257 path = os.path.join(self._output_dir, 'html', 'frog', '%s.dart' % name) 1282 path = os.path.join(self._output_dir, 'html', 'frog', '%s.dart' % name)
1258 self._dart_frog_file_paths.append(path) 1283 self._dart_frog_file_paths.append(path)
1259 return self._emitters.FileEmitter(path) 1284 return self._emitters.FileEmitter(path)
1260 1285
1286 def _EmitterForFactoryProviderBody(self, name):
1287 if name not in self._factory_provider_emitters:
1288 template = self._templates.Load('factoryprovider_%s.darttemplate' % name)
1289 file_emitter = self._ImplFileEmitter(name)
1290 self._factory_provider_emitters[name] = file_emitter.Emit(template)
1291 return self._factory_provider_emitters[name]
1292
1261 # ----------------------------------------------------------------------------- 1293 # -----------------------------------------------------------------------------
1262 1294
1263 class HtmlDartiumSystem(HtmlSystem): 1295 class HtmlDartiumSystem(HtmlSystem):
1264 1296
1265 def __init__(self, templates, database, emitters, auxiliary_dir, 1297 def __init__(self, templates, database, emitters, auxiliary_dir,
1266 dom_implementation_classes, output_dir): 1298 dom_implementation_classes, output_dir):
1267 """Prepared for generating wrapping implementation. 1299 """Prepared for generating wrapping implementation.
1268 1300
1269 - Creates emitter for Dart code. 1301 - Creates emitter for Dart code.
1270 """ 1302 """
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
1317 Collect(database.GetInterface(parent.type.id), 1349 Collect(database.GetInterface(parent.type.id),
1318 seen, collected) 1350 seen, collected)
1319 1351
1320 inheritance_closure = {} 1352 inheritance_closure = {}
1321 for interface in database.GetInterfaces(): 1353 for interface in database.GetInterfaces():
1322 seen = set() 1354 seen = set()
1323 collected = [] 1355 collected = []
1324 Collect(interface, seen, collected) 1356 Collect(interface, seen, collected)
1325 inheritance_closure[interface.id] = collected 1357 inheritance_closure[interface.id] = collected
1326 return inheritance_closure 1358 return inheritance_closure
OLDNEW
« no previous file with comments | « lib/dom/scripts/generator.py ('k') | lib/dom/scripts/systemnative.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698