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

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: Additional cleanup, eliminate now unused generality Created 6 years, 8 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 | « tools/dom/scripts/idlrenderer.py ('k') | tools/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 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 if type(implementation_members_emitter) == tuple:
582 # We add event stream getters for both Element and ElementList, so in 582 # We add event stream getters for both Element and ElementList, so in
583 # impl_Element.darttemplate, we have two additional "holes" for emitters 583 # impl_Element.darttemplate, we have two additional "holes" for emitters
584 # to fill in, with small variations. These store these specialized 584 # to fill in, with small variations. These store these specialized
585 # emitters. 585 # emitters.
586 stream_getter_signatures_emitter = self._implementation_members_emitter[0] 586 assert len(implementation_members_emitter) == 3;
587 element_stream_getters_emitter = self._implementation_members_emitter[1] 587 stream_getter_signatures_emitter = \
588 self._implementation_members_emitter = \ 588 implementation_members_emitter[0]
589 self._implementation_members_emitter[2] 589 element_stream_getters_emitter = implementation_members_emitter[1]
590 self._backend.StartInterface(self._implementation_members_emitter) 590 implementation_members_emitter = \
591 591 implementation_members_emitter[2]
592 self._backend.StartInterface(implementation_members_emitter)
592 self._backend.EmitHelpers(base_class) 593 self._backend.EmitHelpers(base_class)
593 self._event_generator.EmitStreamProviders( 594 self._event_generator.EmitStreamProviders(
594 self._interface, 595 self._interface,
595 self._backend.CustomJSMembers(), 596 self._backend.CustomJSMembers(),
596 self._implementation_members_emitter, 597 implementation_members_emitter,
597 self._library_name) 598 self._library_name)
598 self._backend.AddConstructors( 599 self._backend.AddConstructors(
599 constructors, factory_provider, factory_constructor_name) 600 constructors, factory_provider, factory_constructor_name)
600 601
601 isElement = False 602 isElement = False
602 for parent in self._database.Hierarchy(self._interface): 603 for parent in self._database.Hierarchy(self._interface):
603 if parent.id == 'Element': 604 if parent.id == 'Element':
604 isElement = True 605 isElement = True
605 if isElement and self._interface.id != 'Element': 606 if isElement and self._interface.id != 'Element':
606 self._implementation_members_emitter.Emit( 607 implementation_members_emitter.Emit(
607 ' /**\n' 608 ' /**\n'
608 ' * Constructor instantiated by the DOM when a custom element has be en created.\n' 609 ' * Constructor instantiated by the DOM when a custom element has be en created.\n'
609 ' *\n' 610 ' *\n'
610 ' * This can only be called by subclasses from their created constru ctor.\n' 611 ' * This can only be called by subclasses from their created constru ctor.\n'
611 ' */\n' 612 ' */\n'
612 ' $CLASSNAME.created() : super.created();\n', 613 ' $CLASSNAME.created() : super.created();\n',
613 CLASSNAME=self._interface_type_info.implementation_name()) 614 CLASSNAME=self._interface_type_info.implementation_name())
614 615
615 self._backend.EmitSupportCheck() 616 self._backend.EmitSupportCheck()
616 617
617 merged_interface = self._interface_type_info.merged_interface() 618 merged_interface = self._interface_type_info.merged_interface()
618 if merged_interface: 619 if merged_interface:
619 self._backend.AddMembers(self._database.GetInterface(merged_interface), 620 self._backend.AddMembers(self._database.GetInterface(merged_interface),
620 not self._backend.ImplementsMergedMembers()) 621 not self._backend.ImplementsMergedMembers())
621 622
622 self._backend.AddMembers(self._interface) 623 self._backend.AddMembers(self._interface)
623 self._backend.AddSecondaryMembers(self._interface) 624 self._backend.AddSecondaryMembers(self._interface)
624 self._event_generator.EmitStreamGetters( 625 self._event_generator.EmitStreamGetters(
625 self._interface, 626 self._interface,
626 [], 627 [],
627 self._implementation_members_emitter, 628 implementation_members_emitter,
628 self._library_name, stream_getter_signatures_emitter, 629 self._library_name, stream_getter_signatures_emitter,
629 element_stream_getters_emitter) 630 element_stream_getters_emitter)
630 self._backend.FinishInterface() 631 self._backend.FinishInterface()
631 632
632 def _ImplementationEmitter(self): 633 def _ImplementationEmitter(self):
633 basename = self._interface_type_info.implementation_name() 634 basename = self._interface_type_info.implementation_name()
634 if (self._interface_type_info.merged_into() and 635 if (self._interface_type_info.merged_into() and
635 self._backend.ImplementsMergedMembers()): 636 self._backend.ImplementsMergedMembers()):
636 # Merged members are implemented in target interface implementation. 637 # Merged members are implemented in target interface implementation.
637 return emitter.Emitter() 638 return emitter.Emitter()
(...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after
974 def _AddDirectNativeOperation(self, info, html_name): 975 def _AddDirectNativeOperation(self, info, html_name):
975 self._members_emitter.Emit( 976 self._members_emitter.Emit(
976 '\n' 977 '\n'
977 ' $RENAME$METADATA$MODIFIERS$TYPE $NAME($PARAMS) native;\n', 978 ' $RENAME$METADATA$MODIFIERS$TYPE $NAME($PARAMS) native;\n',
978 RENAME=self._RenamingAnnotation(info.declared_name, html_name), 979 RENAME=self._RenamingAnnotation(info.declared_name, html_name),
979 METADATA=self._Metadata(info.type_name, info.declared_name, 980 METADATA=self._Metadata(info.type_name, info.declared_name,
980 self.SecureOutputType(info.type_name)), 981 self.SecureOutputType(info.type_name)),
981 MODIFIERS='static ' if info.IsStatic() else '', 982 MODIFIERS='static ' if info.IsStatic() else '',
982 TYPE=self.SecureOutputType(info.type_name, False, True), 983 TYPE=self.SecureOutputType(info.type_name, False, True),
983 NAME=html_name, 984 NAME=html_name,
984 PARAMS=info.ParametersDeclaration(self._NarrowInputType)) 985 PARAMS=info.ParametersAsDeclaration(self._NarrowInputType))
985 986
986 def _AddOperationWithConversions(self, info, html_name): 987 def _AddOperationWithConversions(self, info, html_name):
987 # Assert all operations have same return type. 988 # Assert all operations have same return type.
988 assert len(set([op.type.id for op in info.operations])) == 1 989 assert len(set([op.type.id for op in info.operations])) == 1
989 output_conversion = self._OutputConversion(info.type_name, 990 output_conversion = self._OutputConversion(info.type_name,
990 info.declared_name) 991 info.declared_name)
991 if output_conversion: 992 if output_conversion:
992 return_type = output_conversion.output_type 993 return_type = output_conversion.output_type
993 native_return_type = output_conversion.input_type 994 native_return_type = output_conversion.input_type
994 else: 995 else:
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
1064 MODIFIERS='static ' if info.IsStatic() else '', 1065 MODIFIERS='static ' if info.IsStatic() else '',
1065 TYPE=TypeOrNothing(native_return_type), 1066 TYPE=TypeOrNothing(native_return_type),
1066 TARGET=target, 1067 TARGET=target,
1067 PARAMS=', '.join(target_parameters)) 1068 PARAMS=', '.join(target_parameters))
1068 1069
1069 declaration = '%s%s%s %s(%s)' % ( 1070 declaration = '%s%s%s %s(%s)' % (
1070 self._Metadata(info.type_name, info.declared_name, return_type), 1071 self._Metadata(info.type_name, info.declared_name, return_type),
1071 'static ' if info.IsStatic() else '', 1072 'static ' if info.IsStatic() else '',
1072 return_type, 1073 return_type,
1073 html_name, 1074 html_name,
1074 info.ParametersDeclaration(InputType)) 1075 info.ParametersAsDeclaration(InputType))
1075 self._GenerateDispatcherBody( 1076 self._GenerateDispatcherBody(
1076 info, 1077 info,
1077 operations, 1078 operations,
1078 declaration, 1079 declaration,
1079 GenerateCall, 1080 GenerateCall,
1080 lambda _, argument: IsOptional(argument), 1081 lambda _, argument: IsOptional(argument),
1081 can_omit_type_check=lambda type, pos: type == parameter_types[pos]) 1082 can_omit_type_check=lambda type, pos: type == parameter_types[pos])
1082 1083
1083 def _AddInterfaceOperation(self, info, html_name): 1084 def _AddInterfaceOperation(self, info, html_name):
1084 self._members_emitter.Emit( 1085 self._members_emitter.Emit(
1085 '\n' 1086 '\n'
1086 ' $TYPE $NAME($PARAMS);\n', 1087 ' $TYPE $NAME($PARAMS);\n',
1087 TYPE=self.SecureOutputType(info.type_name, False, True), 1088 TYPE=self.SecureOutputType(info.type_name, False, True),
1088 NAME=html_name, 1089 NAME=html_name,
1089 PARAMS=info.ParametersDeclaration(self._NarrowInputType)) 1090 PARAMS=info.ParametersAsDeclaration(self._NarrowInputType))
1090 1091
1091 1092
1092 def _OperationRequiresConversions(self, operation): 1093 def _OperationRequiresConversions(self, operation):
1093 return (self._OperationRequiresOutputConversion(operation) or 1094 return (self._OperationRequiresOutputConversion(operation) or
1094 self._OperationRequiresInputConversions(operation)) 1095 self._OperationRequiresInputConversions(operation))
1095 1096
1096 def _OperationRequiresOutputConversion(self, operation): 1097 def _OperationRequiresOutputConversion(self, operation):
1097 return self._OutputConversion(operation.type.id, operation.id) 1098 return self._OutputConversion(operation.type.id, operation.id)
1098 1099
1099 def _OperationRequiresInputConversions(self, operation): 1100 def _OperationRequiresInputConversions(self, operation):
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
1242 for library_name in libraries: 1243 for library_name in libraries:
1243 self._libraries[library_name] = DartLibrary( 1244 self._libraries[library_name] = DartLibrary(
1244 library_name, template_loader, library_type, output_dir) 1245 library_name, template_loader, library_type, output_dir)
1245 1246
1246 def AddFile(self, basename, library_name, path): 1247 def AddFile(self, basename, library_name, path):
1247 self._libraries[library_name].AddFile(path) 1248 self._libraries[library_name].AddFile(path)
1248 1249
1249 def Emit(self, emitter, auxiliary_dir): 1250 def Emit(self, emitter, auxiliary_dir):
1250 for lib in self._libraries.values(): 1251 for lib in self._libraries.values():
1251 lib.Emit(emitter, auxiliary_dir) 1252 lib.Emit(emitter, auxiliary_dir)
OLDNEW
« no previous file with comments | « tools/dom/scripts/idlrenderer.py ('k') | tools/dom/scripts/systemnative.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698