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 566 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
577 NAME=DartDomNameOfAttribute(attribute), | 577 NAME=DartDomNameOfAttribute(attribute), |
578 TYPE=self.SecureOutputType(attribute.type.id)) | 578 TYPE=self.SecureOutputType(attribute.type.id)) |
579 | 579 |
580 def _AddRenamingGetter(self, attr, html_name): | 580 def _AddRenamingGetter(self, attr, html_name): |
581 self.EmitAttributeDocumentation(attr) | 581 self.EmitAttributeDocumentation(attr) |
582 | 582 |
583 conversion = self._OutputConversion(attr.type.id, attr.id) | 583 conversion = self._OutputConversion(attr.type.id, attr.id) |
584 if conversion: | 584 if conversion: |
585 return self._AddConvertingGetter(attr, html_name, conversion) | 585 return self._AddConvertingGetter(attr, html_name, conversion) |
586 return_type = self.SecureOutputType(attr.type.id) | 586 return_type = self.SecureOutputType(attr.type.id) |
| 587 native_type = self._NarrowToImplementationType(attr.type.id) |
587 self._members_emitter.Emit( | 588 self._members_emitter.Emit( |
588 # TODO(sra): Use metadata to provide native name. | 589 # TODO(sra): Use metadata to provide native name. |
589 '\n $TYPE get $HTML_NAME => JS("$TYPE", "#.$NAME", this);' | 590 '\n $TYPE get $HTML_NAME => JS("$NATIVE_TYPE", "#.$NAME", this);' |
590 '\n', | 591 '\n', |
591 HTML_NAME=html_name, | 592 HTML_NAME=html_name, |
592 NAME=attr.id, | 593 NAME=attr.id, |
593 TYPE=return_type) | 594 TYPE=return_type, |
| 595 NATIVE_TYPE=native_type) |
594 | 596 |
595 def _AddRenamingSetter(self, attr, html_name): | 597 def _AddRenamingSetter(self, attr, html_name): |
596 self.EmitAttributeDocumentation(attr) | 598 self.EmitAttributeDocumentation(attr) |
597 | 599 |
598 conversion = self._InputConversion(attr.type.id, attr.id) | 600 conversion = self._InputConversion(attr.type.id, attr.id) |
599 if conversion: | 601 if conversion: |
600 return self._AddConvertingSetter(attr, html_name, conversion) | 602 return self._AddConvertingSetter(attr, html_name, conversion) |
601 self._members_emitter.Emit( | 603 self._members_emitter.Emit( |
602 # TODO(sra): Use metadata to provide native name. | 604 # TODO(sra): Use metadata to provide native name. |
603 '\n void set $HTML_NAME($TYPE value) {' | 605 '\n void set $HTML_NAME($TYPE value) {' |
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
866 | 868 |
867 def _HasCustomImplementation(self, member_name): | 869 def _HasCustomImplementation(self, member_name): |
868 member_name = '%s.%s' % (self._interface_type_info.interface_name(), | 870 member_name = '%s.%s' % (self._interface_type_info.interface_name(), |
869 member_name) | 871 member_name) |
870 return member_name in _js_custom_members | 872 return member_name in _js_custom_members |
871 | 873 |
872 def _Annotations(self, idl_type, member_name): | 874 def _Annotations(self, idl_type, member_name): |
873 annotations = FindAnnotations(idl_type, self._interface.id, member_name) | 875 annotations = FindAnnotations(idl_type, self._interface.id, member_name) |
874 if annotations: | 876 if annotations: |
875 return '%s\n ' % annotations | 877 return '%s\n ' % annotations |
| 878 return_type = self.SecureOutputType(idl_type) |
| 879 native_type = self._NarrowToImplementationType(idl_type) |
| 880 if native_type != return_type: |
| 881 return "@Returns('%s') @Creates('%s')\n " % (native_type, native_type) |
876 else: | 882 else: |
877 return '' | 883 return '' |
878 | 884 |
879 def CustomJSMembers(self): | 885 def CustomJSMembers(self): |
880 return _js_custom_members | 886 return _js_custom_members |
881 | 887 |
882 def _NarrowToImplementationType(self, type_name): | 888 def _NarrowToImplementationType(self, type_name): |
883 return self._type_registry.TypeInfo(type_name).narrow_dart_type() | 889 return self._type_registry.TypeInfo(type_name).narrow_dart_type() |
884 | 890 |
885 def _NarrowInputType(self, type_name): | 891 def _NarrowInputType(self, type_name): |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
984 'svg': DartLibrary('svg', template_loader, library_type, output_dir), | 990 'svg': DartLibrary('svg', template_loader, library_type, output_dir), |
985 'html': DartLibrary('html', template_loader, library_type, output_dir), | 991 'html': DartLibrary('html', template_loader, library_type, output_dir), |
986 } | 992 } |
987 | 993 |
988 def AddFile(self, basename, library_name, path): | 994 def AddFile(self, basename, library_name, path): |
989 self._libraries[library_name].AddFile(path) | 995 self._libraries[library_name].AddFile(path) |
990 | 996 |
991 def Emit(self, emitter, auxiliary_dir): | 997 def Emit(self, emitter, auxiliary_dir): |
992 for lib in self._libraries.values(): | 998 for lib in self._libraries.values(): |
993 lib.Emit(emitter, auxiliary_dir) | 999 lib.Emit(emitter, auxiliary_dir) |
OLD | NEW |