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

Side by Side Diff: sdk/lib/html/scripts/systemhtml.py

Issue 11308075: Add custom annotations to some APIs for native tree shaking. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 1 month 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 | « sdk/lib/html/scripts/generator.py ('k') | sdk/lib/html/src/dart2js_Conversions.dart » ('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 os 10 import os
(...skipping 530 matching lines...) Expand 10 before | Expand all | Expand 10 after
541 541
542 # If the type has a conversion we need a getter or setter to contain the 542 # If the type has a conversion we need a getter or setter to contain the
543 # conversion code. 543 # conversion code.
544 if (self._OutputConversion(attribute.type.id, attribute.id) or 544 if (self._OutputConversion(attribute.type.id, attribute.id) or
545 self._InputConversion(attribute.type.id, attribute.id)): 545 self._InputConversion(attribute.type.id, attribute.id)):
546 self._AddAttributeUsingProperties(attribute, html_name, read_only) 546 self._AddAttributeUsingProperties(attribute, html_name, read_only)
547 return 547 return
548 548
549 output_type = self.SecureOutputType(attribute.type.id) 549 output_type = self.SecureOutputType(attribute.type.id)
550 input_type = self._NarrowInputType(attribute.type.id) 550 input_type = self._NarrowInputType(attribute.type.id)
551 annotations = self._Annotations(attribute.type.id, attribute.id)
551 self.EmitAttributeDocumentation(attribute) 552 self.EmitAttributeDocumentation(attribute)
552 if not read_only: 553 if not read_only:
553 self._members_emitter.Emit( 554 self._members_emitter.Emit(
554 '\n $TYPE $NAME;' 555 '\n $ANNOTATIONS$TYPE $NAME;'
555 '\n', 556 '\n',
557 ANNOTATIONS=annotations,
556 NAME=DartDomNameOfAttribute(attribute), 558 NAME=DartDomNameOfAttribute(attribute),
557 TYPE=output_type) 559 TYPE=output_type)
558 else: 560 else:
559 self._members_emitter.Emit( 561 self._members_emitter.Emit(
560 '\n final $TYPE $NAME;' 562 '\n $(ANNOTATIONS)final $TYPE $NAME;'
561 '\n', 563 '\n',
564 ANNOTATIONS=annotations,
562 NAME=DartDomNameOfAttribute(attribute), 565 NAME=DartDomNameOfAttribute(attribute),
563 TYPE=output_type) 566 TYPE=output_type)
564 567
565 def _AddAttributeUsingProperties(self, attribute, html_name, read_only): 568 def _AddAttributeUsingProperties(self, attribute, html_name, read_only):
566 self._AddRenamingGetter(attribute, html_name) 569 self._AddRenamingGetter(attribute, html_name)
567 if not read_only: 570 if not read_only:
568 self._AddRenamingSetter(attribute, html_name) 571 self._AddRenamingSetter(attribute, html_name)
569 572
570 def _AddInterfaceAttribute(self, attribute): 573 def _AddInterfaceAttribute(self, attribute):
571 self._members_emitter.Emit( 574 self._members_emitter.Emit(
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
653 # Any conversions needed? 656 # Any conversions needed?
654 self._AddOperationWithConversions(info, html_name) 657 self._AddOperationWithConversions(info, html_name)
655 else: 658 else:
656 self._AddDirectNativeOperation(info, html_name) 659 self._AddDirectNativeOperation(info, html_name)
657 660
658 def _AddDirectNativeOperation(self, info, html_name): 661 def _AddDirectNativeOperation(self, info, html_name):
659 # Do we need a native body? 662 # Do we need a native body?
660 if html_name != info.declared_name: 663 if html_name != info.declared_name:
661 return_type = self.SecureOutputType(info.type_name) 664 return_type = self.SecureOutputType(info.type_name)
662 665
663 operation_emitter = self._members_emitter.Emit('$!SCOPE', 666 operation_emitter = self._members_emitter.Emit(
667 '$!SCOPE',
664 MODIFIERS='static ' if info.IsStatic() else '', 668 MODIFIERS='static ' if info.IsStatic() else '',
669 ANNOTATIONS=self._Annotations(info.type_name, info.declared_name),
665 TYPE=return_type, 670 TYPE=return_type,
666 HTML_NAME=html_name, 671 HTML_NAME=html_name,
667 NAME=info.declared_name, 672 NAME=info.declared_name,
668 PARAMS=info.ParametersDeclaration(self._NarrowInputType)) 673 PARAMS=info.ParametersDeclaration(self._NarrowInputType))
669 674
670 operation_emitter.Emit( 675 operation_emitter.Emit(
671 '\n' 676 '\n'
672 #' // @native("$NAME")\n;' 677 ' $ANNOTATIONS'
673 ' $MODIFIERS$TYPE $(HTML_NAME)($PARAMS) native "$NAME";\n') 678 '$MODIFIERS$TYPE $(HTML_NAME)($PARAMS) native "$NAME";\n')
674 else: 679 else:
675 self._members_emitter.Emit( 680 self._members_emitter.Emit(
676 '\n' 681 '\n'
677 ' $MODIFIERS$TYPE $NAME($PARAMS) native;\n', 682 ' $ANNOTATIONS$MODIFIERS$TYPE $NAME($PARAMS) native;\n',
678 MODIFIERS='static ' if info.IsStatic() else '', 683 MODIFIERS='static ' if info.IsStatic() else '',
684 ANNOTATIONS=self._Annotations(info.type_name, info.declared_name),
679 TYPE=self.SecureOutputType(info.type_name), 685 TYPE=self.SecureOutputType(info.type_name),
680 NAME=info.name, 686 NAME=info.name,
681 PARAMS=info.ParametersDeclaration(self._NarrowInputType)) 687 PARAMS=info.ParametersDeclaration(self._NarrowInputType))
682 688
683 def _AddOperationWithConversions(self, info, html_name): 689 def _AddOperationWithConversions(self, info, html_name):
684 # Assert all operations have same return type. 690 # Assert all operations have same return type.
685 assert len(set([op.type.id for op in info.operations])) == 1 691 assert len(set([op.type.id for op in info.operations])) == 1
686 output_conversion = self._OutputConversion(info.type_name, 692 output_conversion = self._OutputConversion(info.type_name,
687 info.declared_name) 693 info.declared_name)
688 if output_conversion: 694 if output_conversion:
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
770 if output_conversion: 776 if output_conversion:
771 call = '%s(%s)' % (output_conversion.function_name, call) 777 call = '%s(%s)' % (output_conversion.function_name, call)
772 778
773 if operation.type.id == 'void': 779 if operation.type.id == 'void':
774 call_emitter.Emit('$(INDENT)$CALL;\n$(INDENT)return;\n', 780 call_emitter.Emit('$(INDENT)$CALL;\n$(INDENT)return;\n',
775 CALL=call) 781 CALL=call)
776 else: 782 else:
777 call_emitter.Emit('$(INDENT)return $CALL;\n', CALL=call) 783 call_emitter.Emit('$(INDENT)return $CALL;\n', CALL=call)
778 784
779 self._members_emitter.Emit( 785 self._members_emitter.Emit(
780 ' $MODIFIERS$TYPE$TARGET($PARAMS) native "$NATIVE";\n', 786 ' $MODIFIERS$ANNOTATIONS$TYPE$TARGET($PARAMS) native "$NATIVE";\n',
781 MODIFIERS='static ' if info.IsStatic() else '', 787 MODIFIERS='static ' if info.IsStatic() else '',
788 ANNOTATIONS=self._Annotations(info.type_name, info.declared_name),
782 TYPE=TypeOrNothing(native_return_type), 789 TYPE=TypeOrNothing(native_return_type),
783 TARGET=target, 790 TARGET=target,
784 PARAMS=', '.join(target_parameters), 791 PARAMS=', '.join(target_parameters),
785 NATIVE=info.declared_name) 792 NATIVE=info.declared_name)
786 793
787 def GenerateChecksAndCall(operation, argument_count): 794 def GenerateChecksAndCall(operation, argument_count):
788 checks = [] 795 checks = []
789 for i in range(0, argument_count): 796 for i in range(0, argument_count):
790 argument = operation.arguments[i] 797 argument = operation.arguments[i]
791 parameter_name = parameter_names[i] 798 parameter_name = parameter_names[i]
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
855 return FindConversion(idl_type, 'get', self._interface.id, member) 862 return FindConversion(idl_type, 'get', self._interface.id, member)
856 863
857 def _InputConversion(self, idl_type, member): 864 def _InputConversion(self, idl_type, member):
858 return FindConversion(idl_type, 'set', self._interface.id, member) 865 return FindConversion(idl_type, 'set', self._interface.id, member)
859 866
860 def _HasCustomImplementation(self, member_name): 867 def _HasCustomImplementation(self, member_name):
861 member_name = '%s.%s' % (self._interface_type_info.interface_name(), 868 member_name = '%s.%s' % (self._interface_type_info.interface_name(),
862 member_name) 869 member_name)
863 return member_name in _js_custom_members 870 return member_name in _js_custom_members
864 871
872 def _Annotations(self, idl_type, member_name):
873 annotations = FindAnnotations(idl_type, self._interface.id, member_name)
874 if annotations:
875 return '%s\n ' % annotations
876 else:
877 return ''
878
865 def CustomJSMembers(self): 879 def CustomJSMembers(self):
866 return _js_custom_members 880 return _js_custom_members
867 881
868 def _NarrowToImplementationType(self, type_name): 882 def _NarrowToImplementationType(self, type_name):
869 return self._type_registry.TypeInfo(type_name).narrow_dart_type() 883 return self._type_registry.TypeInfo(type_name).narrow_dart_type()
870 884
871 def _NarrowInputType(self, type_name): 885 def _NarrowInputType(self, type_name):
872 return self._NarrowToImplementationType(type_name) 886 return self._NarrowToImplementationType(type_name)
873 887
874 def _FindShadowedAttribute(self, attr): 888 def _FindShadowedAttribute(self, attr):
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
970 'svg': DartLibrary('svg', template_loader, library_type, output_dir), 984 'svg': DartLibrary('svg', template_loader, library_type, output_dir),
971 'html': DartLibrary('html', template_loader, library_type, output_dir), 985 'html': DartLibrary('html', template_loader, library_type, output_dir),
972 } 986 }
973 987
974 def AddFile(self, basename, library_name, path): 988 def AddFile(self, basename, library_name, path):
975 self._libraries[library_name].AddFile(path) 989 self._libraries[library_name].AddFile(path)
976 990
977 def Emit(self, emitter, auxiliary_dir): 991 def Emit(self, emitter, auxiliary_dir):
978 for lib in self._libraries.values(): 992 for lib in self._libraries.values():
979 lib.Emit(emitter, auxiliary_dir) 993 lib.Emit(emitter, auxiliary_dir)
OLDNEW
« no previous file with comments | « sdk/lib/html/scripts/generator.py ('k') | sdk/lib/html/src/dart2js_Conversions.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698