| 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 import os | 10 import os | 
| (...skipping 530 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 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  Loading... | 
| 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  Loading... | 
| 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  Loading... | 
| 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  Loading... | 
| 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) | 
| OLD | NEW | 
|---|