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

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

Issue 254463006: This CL contains all of the changes for splitting off all of the native (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 7 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 logging 10 import logging
(...skipping 463 matching lines...) Expand 10 before | Expand all | Expand 10 after
474 code = self._library_emitter.FileEmitter(self._interface.id, 474 code = self._library_emitter.FileEmitter(self._interface.id,
475 self._library_name) 475 self._library_name)
476 code.Emit(self._template_loader.Load('callback.darttemplate')) 476 code.Emit(self._template_loader.Load('callback.darttemplate'))
477 477
478 annotations = self._metadata.GetFormattedMetadata(self._library_name, 478 annotations = self._metadata.GetFormattedMetadata(self._library_name,
479 self._interface) 479 self._interface)
480 480
481 code.Emit('$(ANNOTATIONS)typedef void $NAME($PARAMS);\n', 481 code.Emit('$(ANNOTATIONS)typedef void $NAME($PARAMS);\n',
482 ANNOTATIONS=annotations, 482 ANNOTATIONS=annotations,
483 NAME=typedef_name, 483 NAME=typedef_name,
484 PARAMS=info.ParametersDeclaration(self._DartType)) 484 PARAMS=info.ParametersAsDeclaration(self._DartType))
485 self._backend.GenerateCallback(info) 485 self._backend.GenerateCallback(info)
486 486
487 def GenerateInterface(self): 487 def GenerateInterface(self):
488 interface_name = self._interface_type_info.interface_name() 488 interface_name = self._interface_type_info.interface_name()
489 489
490 factory_provider = None 490 factory_provider = None
491 if interface_name in interface_factories: 491 if interface_name in interface_factories:
492 factory_provider = interface_factories[interface_name] 492 factory_provider = interface_factories[interface_name]
493 factory_constructor_name = None 493 factory_constructor_name = None
494 494
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
558 558
559 class_modifiers = '' 559 class_modifiers = ''
560 if (self._renamer.ShouldSuppressInterface(self._interface) or 560 if (self._renamer.ShouldSuppressInterface(self._interface) or
561 IsPureInterface(self._interface.id)): 561 IsPureInterface(self._interface.id)):
562 class_modifiers = 'abstract ' 562 class_modifiers = 'abstract '
563 563
564 native_spec = '' 564 native_spec = ''
565 if not IsPureInterface(self._interface.id): 565 if not IsPureInterface(self._interface.id):
566 native_spec = self._backend.NativeSpec() 566 native_spec = self._backend.NativeSpec()
567 567
568 self._implementation_members_emitter = implementation_emitter.Emit( 568 implementation_members_emitter = implementation_emitter.Emit(
569 self._backend.ImplementationTemplate(), 569 self._backend.ImplementationTemplate(),
570 LIBRARYNAME='dart.dom.%s' % self._library_name, 570 LIBRARYNAME='dart.dom.%s' % self._library_name,
571 ANNOTATIONS=annotations, 571 ANNOTATIONS=annotations,
572 CLASS_MODIFIERS=class_modifiers, 572 CLASS_MODIFIERS=class_modifiers,
573 CLASSNAME=self._interface_type_info.implementation_name(), 573 CLASSNAME=self._interface_type_info.implementation_name(),
574 EXTENDS=' extends %s' % base_class if base_class else '', 574 EXTENDS=' extends %s' % base_class if base_class else '',
575 IMPLEMENTS=implements_str, 575 IMPLEMENTS=implements_str,
576 MIXINS=mixins_str, 576 MIXINS=mixins_str,
577 DOMNAME=self._interface.doc_js_name, 577 DOMNAME=self._interface.doc_js_name,
578 NATIVESPEC=native_spec) 578 NATIVESPEC=native_spec)
579 stream_getter_signatures_emitter = None 579 stream_getter_signatures_emitter = None
580 element_stream_getters_emitter = None 580 element_stream_getters_emitter = None
581 if type(self._implementation_members_emitter) == tuple: 581 toplevel_emitter = None
582 # We add event stream getters for both Element and ElementList, so in 582 if type(implementation_members_emitter) == tuple:
583 # impl_Element.darttemplate, we have two additional "holes" for emitters 583 if len(implementation_members_emitter) == 2:
584 # to fill in, with small variations. These store these specialized 584 # We have both a TOPLEVEL and MEMBERS field to fill in, but
585 # emitters. 585 # no additional stream fields.
586 stream_getter_signatures_emitter = self._implementation_members_emitter[0] 586 toplevel_emitter = implementation_members_emitter[0]
587 element_stream_getters_emitter = self._implementation_members_emitter[1] 587 implementation_members_emitter = \
588 self._implementation_members_emitter = \ 588 implementation_members_emitter[1]
589 self._implementation_members_emitter[2] 589 else:
590 self._backend.StartInterface(self._implementation_members_emitter) 590 # We add event stream getters for both Element and ElementList, so in
591 591 # impl_Element.darttemplate, we have two additional "holes" for emitters
592 # to fill in, with small variations. These store these specialized
593 # emitters.
594 # We have both a TOPLEVEL and MEMBERS field to fill in as above
595 assert len(implementation_members_emitter) == 4;
596 toplevel_emitter = implementation_members_emitter[0]
597 stream_getter_signatures_emitter = \
598 implementation_members_emitter[1]
599 element_stream_getters_emitter = implementation_members_emitter[2]
600 implementation_members_emitter = \
601 implementation_members_emitter[3]
602 self._backend.StartInterface(implementation_members_emitter,
603 toplevel_emitter)
592 self._backend.EmitHelpers(base_class) 604 self._backend.EmitHelpers(base_class)
593 self._event_generator.EmitStreamProviders( 605 self._event_generator.EmitStreamProviders(
594 self._interface, 606 self._interface,
595 self._backend.CustomJSMembers(), 607 self._backend.CustomJSMembers(),
596 self._implementation_members_emitter, 608 implementation_members_emitter,
597 self._library_name) 609 self._library_name)
598 self._backend.AddConstructors( 610 self._backend.AddConstructors(
599 constructors, factory_provider, factory_constructor_name) 611 constructors, factory_provider, factory_constructor_name)
600 612
601 isElement = False 613 isElement = False
602 for parent in self._database.Hierarchy(self._interface): 614 for parent in self._database.Hierarchy(self._interface):
603 if parent.id == 'Element': 615 if parent.id == 'Element':
604 isElement = True 616 isElement = True
605 if isElement and self._interface.id != 'Element': 617 if isElement and self._interface.id != 'Element':
606 self._implementation_members_emitter.Emit( 618 implementation_members_emitter.Emit(
607 ' /**\n' 619 ' /**\n'
608 ' * Constructor instantiated by the DOM when a custom element has be en created.\n' 620 ' * Constructor instantiated by the DOM when a custom element has be en created.\n'
609 ' *\n' 621 ' *\n'
610 ' * This can only be called by subclasses from their created constru ctor.\n' 622 ' * This can only be called by subclasses from their created constru ctor.\n'
611 ' */\n' 623 ' */\n'
612 ' $CLASSNAME.created() : super.created();\n', 624 ' $CLASSNAME.created() : super.created();\n',
613 CLASSNAME=self._interface_type_info.implementation_name()) 625 CLASSNAME=self._interface_type_info.implementation_name())
614 626
615 self._backend.EmitSupportCheck() 627 self._backend.EmitSupportCheck()
616 628
617 merged_interface = self._interface_type_info.merged_interface() 629 merged_interface = self._interface_type_info.merged_interface()
618 if merged_interface: 630 if merged_interface:
619 self._backend.AddMembers(self._database.GetInterface(merged_interface), 631 self._backend.AddMembers(self._database.GetInterface(merged_interface),
620 not self._backend.ImplementsMergedMembers()) 632 not self._backend.ImplementsMergedMembers())
621 633
622 self._backend.AddMembers(self._interface) 634 self._backend.AddMembers(self._interface)
623 self._backend.AddSecondaryMembers(self._interface) 635 self._backend.AddSecondaryMembers(self._interface)
624 self._event_generator.EmitStreamGetters( 636 self._event_generator.EmitStreamGetters(
625 self._interface, 637 self._interface,
626 [], 638 [],
627 self._implementation_members_emitter, 639 implementation_members_emitter,
628 self._library_name, stream_getter_signatures_emitter, 640 self._library_name, stream_getter_signatures_emitter,
629 element_stream_getters_emitter) 641 element_stream_getters_emitter)
630 self._backend.FinishInterface() 642 self._backend.FinishInterface()
631 643
632 def _ImplementationEmitter(self): 644 def _ImplementationEmitter(self):
633 basename = self._interface_type_info.implementation_name() 645 basename = self._interface_type_info.implementation_name()
634 if (self._interface_type_info.merged_into() and 646 if (self._interface_type_info.merged_into() and
635 self._backend.ImplementsMergedMembers()): 647 self._backend.ImplementsMergedMembers()):
636 # Merged members are implemented in target interface implementation. 648 # Merged members are implemented in target interface implementation.
637 return emitter.Emitter() 649 return emitter.Emitter()
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
675 def NativeSpec(self): 687 def NativeSpec(self):
676 native_spec = MakeNativeSpec(self._interface.javascript_binding_name) 688 native_spec = MakeNativeSpec(self._interface.javascript_binding_name)
677 return ' native "%s"' % native_spec 689 return ' native "%s"' % native_spec
678 690
679 def ImplementationTemplate(self): 691 def ImplementationTemplate(self):
680 template_file = ('impl_%s.darttemplate' % 692 template_file = ('impl_%s.darttemplate' %
681 self._interface.doc_js_name) 693 self._interface.doc_js_name)
682 return (self._template_loader.TryLoad(template_file) or 694 return (self._template_loader.TryLoad(template_file) or
683 self._template_loader.Load('dart2js_impl.darttemplate')) 695 self._template_loader.Load('dart2js_impl.darttemplate'))
684 696
685 def StartInterface(self, members_emitter): 697 def StartInterface(self, members_emitter, toplevel_emitter):
698 # We currently emit no top level members for dart2js
686 self._members_emitter = members_emitter 699 self._members_emitter = members_emitter
687 700
688 def FinishInterface(self): 701 def FinishInterface(self):
689 pass 702 pass
690 703
691 def HasSupportCheck(self): 704 def HasSupportCheck(self):
692 return self._interface.doc_js_name in js_support_checks 705 return self._interface.doc_js_name in js_support_checks
693 706
694 def GetSupportCheck(self): 707 def GetSupportCheck(self):
695 """Return a tuple of the support check function signature and the support 708 """Return a tuple of the support check function signature and the support
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after
974 def _AddDirectNativeOperation(self, info, html_name): 987 def _AddDirectNativeOperation(self, info, html_name):
975 self._members_emitter.Emit( 988 self._members_emitter.Emit(
976 '\n' 989 '\n'
977 ' $RENAME$METADATA$MODIFIERS$TYPE $NAME($PARAMS) native;\n', 990 ' $RENAME$METADATA$MODIFIERS$TYPE $NAME($PARAMS) native;\n',
978 RENAME=self._RenamingAnnotation(info.declared_name, html_name), 991 RENAME=self._RenamingAnnotation(info.declared_name, html_name),
979 METADATA=self._Metadata(info.type_name, info.declared_name, 992 METADATA=self._Metadata(info.type_name, info.declared_name,
980 self.SecureOutputType(info.type_name)), 993 self.SecureOutputType(info.type_name)),
981 MODIFIERS='static ' if info.IsStatic() else '', 994 MODIFIERS='static ' if info.IsStatic() else '',
982 TYPE=self.SecureOutputType(info.type_name, False, True), 995 TYPE=self.SecureOutputType(info.type_name, False, True),
983 NAME=html_name, 996 NAME=html_name,
984 PARAMS=info.ParametersDeclaration(self._NarrowInputType)) 997 PARAMS=info.ParametersAsDeclaration(self._NarrowInputType))
985 998
986 def _AddOperationWithConversions(self, info, html_name): 999 def _AddOperationWithConversions(self, info, html_name):
987 # Assert all operations have same return type. 1000 # Assert all operations have same return type.
988 assert len(set([op.type.id for op in info.operations])) == 1 1001 assert len(set([op.type.id for op in info.operations])) == 1
989 output_conversion = self._OutputConversion(info.type_name, 1002 output_conversion = self._OutputConversion(info.type_name,
990 info.declared_name) 1003 info.declared_name)
991 if output_conversion: 1004 if output_conversion:
992 return_type = output_conversion.output_type 1005 return_type = output_conversion.output_type
993 native_return_type = output_conversion.input_type 1006 native_return_type = output_conversion.input_type
994 else: 1007 else:
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
1064 MODIFIERS='static ' if info.IsStatic() else '', 1077 MODIFIERS='static ' if info.IsStatic() else '',
1065 TYPE=TypeOrNothing(native_return_type), 1078 TYPE=TypeOrNothing(native_return_type),
1066 TARGET=target, 1079 TARGET=target,
1067 PARAMS=', '.join(target_parameters)) 1080 PARAMS=', '.join(target_parameters))
1068 1081
1069 declaration = '%s%s%s %s(%s)' % ( 1082 declaration = '%s%s%s %s(%s)' % (
1070 self._Metadata(info.type_name, info.declared_name, return_type), 1083 self._Metadata(info.type_name, info.declared_name, return_type),
1071 'static ' if info.IsStatic() else '', 1084 'static ' if info.IsStatic() else '',
1072 return_type, 1085 return_type,
1073 html_name, 1086 html_name,
1074 info.ParametersDeclaration(InputType)) 1087 info.ParametersAsDeclaration(InputType))
1075 self._GenerateDispatcherBody( 1088 self._GenerateDispatcherBody(
1076 info, 1089 info,
1077 operations, 1090 operations,
1078 declaration, 1091 declaration,
1079 GenerateCall, 1092 GenerateCall,
1080 lambda _, argument: IsOptional(argument), 1093 lambda _, argument: IsOptional(argument),
1081 can_omit_type_check=lambda type, pos: type == parameter_types[pos]) 1094 can_omit_type_check=lambda type, pos: type == parameter_types[pos])
1082 1095
1083 def _AddInterfaceOperation(self, info, html_name): 1096 def _AddInterfaceOperation(self, info, html_name):
1084 self._members_emitter.Emit( 1097 self._members_emitter.Emit(
1085 '\n' 1098 '\n'
1086 ' $TYPE $NAME($PARAMS);\n', 1099 ' $TYPE $NAME($PARAMS);\n',
1087 TYPE=self.SecureOutputType(info.type_name, False, True), 1100 TYPE=self.SecureOutputType(info.type_name, False, True),
1088 NAME=html_name, 1101 NAME=html_name,
1089 PARAMS=info.ParametersDeclaration(self._NarrowInputType)) 1102 PARAMS=info.ParametersAsDeclaration(self._NarrowInputType))
1090 1103
1091 1104
1092 def _OperationRequiresConversions(self, operation): 1105 def _OperationRequiresConversions(self, operation):
1093 return (self._OperationRequiresOutputConversion(operation) or 1106 return (self._OperationRequiresOutputConversion(operation) or
1094 self._OperationRequiresInputConversions(operation)) 1107 self._OperationRequiresInputConversions(operation))
1095 1108
1096 def _OperationRequiresOutputConversion(self, operation): 1109 def _OperationRequiresOutputConversion(self, operation):
1097 return self._OutputConversion(operation.type.id, operation.id) 1110 return self._OutputConversion(operation.type.id, operation.id)
1098 1111
1099 def _OperationRequiresInputConversions(self, operation): 1112 def _OperationRequiresInputConversions(self, operation):
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
1242 for library_name in libraries: 1255 for library_name in libraries:
1243 self._libraries[library_name] = DartLibrary( 1256 self._libraries[library_name] = DartLibrary(
1244 library_name, template_loader, library_type, output_dir) 1257 library_name, template_loader, library_type, output_dir)
1245 1258
1246 def AddFile(self, basename, library_name, path): 1259 def AddFile(self, basename, library_name, path):
1247 self._libraries[library_name].AddFile(path) 1260 self._libraries[library_name].AddFile(path)
1248 1261
1249 def Emit(self, emitter, auxiliary_dir): 1262 def Emit(self, emitter, auxiliary_dir):
1250 for lib in self._libraries.values(): 1263 for lib in self._libraries.values():
1251 lib.Emit(emitter, auxiliary_dir) 1264 lib.Emit(emitter, auxiliary_dir)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698