Chromium Code Reviews| 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 systems to generate | 6 """This module provides shared functionality for systems to generate |
| 7 Dart APIs from the IDL database.""" | 7 Dart APIs from the IDL database.""" |
| 8 | 8 |
| 9 import copy | 9 import copy |
| 10 import re | 10 import re |
| (...skipping 584 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 595 else: | 595 else: |
| 596 include = self._idl_type | 596 include = self._idl_type |
| 597 return ['"%s.h"' % include] + _svg_supplemental_includes | 597 return ['"%s.h"' % include] + _svg_supplemental_includes |
| 598 | 598 |
| 599 def receiver(self): | 599 def receiver(self): |
| 600 return 'receiver->' | 600 return 'receiver->' |
| 601 | 601 |
| 602 def conversion_includes(self): | 602 def conversion_includes(self): |
| 603 return ['"Dart%s.h"' % include for include in self._conversion_includes] | 603 return ['"Dart%s.h"' % include for include in self._conversion_includes] |
| 604 | 604 |
| 605 def to_native_includes(self): | |
| 606 return ['"Dart%s.h"' % self.idl_type()] | |
| 607 | |
| 605 def to_dart_conversion(self, value, interface_name=None, attributes=None): | 608 def to_dart_conversion(self, value, interface_name=None, attributes=None): |
| 606 return 'Dart%s::toDart(%s)' % (self._idl_type, value) | 609 return 'Dart%s::toDart(%s)' % (self._idl_type, value) |
| 607 | 610 |
| 608 def custom_to_dart(self): | 611 def custom_to_dart(self): |
| 609 return self._custom_to_dart | 612 return self._custom_to_dart |
| 610 | 613 |
| 611 | 614 |
| 612 class SequenceIDLTypeInfo(IDLTypeInfo): | 615 class SequenceIDLTypeInfo(IDLTypeInfo): |
| 613 def __init__(self, idl_type, item_info): | 616 def __init__(self, idl_type, item_info): |
| 614 super(SequenceIDLTypeInfo, self).__init__(idl_type) | 617 super(SequenceIDLTypeInfo, self).__init__(idl_type) |
| 615 self._item_info = item_info | 618 self._item_info = item_info |
| 616 | 619 |
| 617 def dart_type(self): | 620 def dart_type(self): |
| 618 return 'List<%s>' % self._item_info.dart_type() | 621 return 'List<%s>' % self._item_info.dart_type() |
| 619 | 622 |
| 620 def to_dart_conversion(self, value, interface_name=None, attributes=None): | 623 def to_dart_conversion(self, value, interface_name=None, attributes=None): |
| 621 return 'DartDOMWrapper::vectorToDart<Dart%s>(%s)' % (self._item_info.native_ type(), value) | 624 return 'DartDOMWrapper::vectorToDart<Dart%s>(%s)' % (self._item_info.native_ type(), value) |
| 622 | 625 |
| 623 def conversion_includes(self): | 626 def conversion_includes(self): |
| 624 return self._item_info.conversion_includes() | 627 return self._item_info.conversion_includes() |
| 625 | 628 |
| 626 | 629 |
| 630 class DOMStringArrayTypeInfo(SequenceIDLTypeInfo): | |
| 631 def __init__(self): | |
| 632 super(DOMStringArrayTypeInfo, self).__init__('DOMString[]', _dom_string_type _info) | |
| 633 | |
| 634 def emit_to_native(self, emitter, idl_node, name, handle, interface_name): | |
| 635 emitter.Emit( | |
| 636 '\n' | |
| 637 ' RefPtr<DOMStringList> $NAME = DartDOMStringList::toNative($HAND LE, exception);\n' | |
| 638 ' if (exception)\n' | |
| 639 ' goto fail;\n', | |
| 640 NAME=name, | |
| 641 HANDLE=handle) | |
| 642 return name | |
| 643 | |
| 644 def to_native_includes(self): | |
| 645 return ['"DartDOMStringList.h"'] | |
| 646 | |
| 647 | |
| 627 class PrimitiveIDLTypeInfo(IDLTypeInfo): | 648 class PrimitiveIDLTypeInfo(IDLTypeInfo): |
| 628 def __init__(self, idl_type, dart_type, native_type=None, | 649 def __init__(self, idl_type, dart_type, native_type=None, |
| 629 webcore_getter_name='getAttribute', | 650 webcore_getter_name='getAttribute', |
| 630 webcore_setter_name='setAttribute'): | 651 webcore_setter_name='setAttribute'): |
| 631 super(PrimitiveIDLTypeInfo, self).__init__(idl_type, dart_type=dart_type, | 652 super(PrimitiveIDLTypeInfo, self).__init__(idl_type, dart_type=dart_type, |
| 632 native_type=native_type) | 653 native_type=native_type) |
| 633 self._webcore_getter_name = webcore_getter_name | 654 self._webcore_getter_name = webcore_getter_name |
| 634 self._webcore_setter_name = webcore_setter_name | 655 self._webcore_setter_name = webcore_setter_name |
| 635 | 656 |
| 636 def emit_to_native(self, emitter, idl_node, name, handle, interface_name): | 657 def emit_to_native(self, emitter, idl_node, name, handle, interface_name): |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 650 return name | 671 return name |
| 651 | 672 |
| 652 def parameter_type(self): | 673 def parameter_type(self): |
| 653 if self.native_type() == 'String': | 674 if self.native_type() == 'String': |
| 654 return 'const String&' | 675 return 'const String&' |
| 655 return self.native_type() | 676 return self.native_type() |
| 656 | 677 |
| 657 def conversion_includes(self): | 678 def conversion_includes(self): |
| 658 return [] | 679 return [] |
| 659 | 680 |
| 681 def to_native_includes(sefl): | |
| 682 return [] | |
| 683 | |
| 660 def to_dart_conversion(self, value, interface_name=None, attributes=None): | 684 def to_dart_conversion(self, value, interface_name=None, attributes=None): |
| 661 conversion_arguments = [value] | 685 conversion_arguments = [value] |
| 662 if attributes and 'TreatReturnedNullStringAs' in attributes: | 686 if attributes and 'TreatReturnedNullStringAs' in attributes: |
| 663 conversion_arguments.append('DartUtilities::ConvertNullToDefaultValue') | 687 conversion_arguments.append('DartUtilities::ConvertNullToDefaultValue') |
| 664 function_name = re.sub(r' [a-z]', lambda x: x.group(0)[1:].upper(), self.nat ive_type()) | 688 function_name = re.sub(r' [a-z]', lambda x: x.group(0)[1:].upper(), self.nat ive_type()) |
| 665 function_name = function_name[0].lower() + function_name[1:] | 689 function_name = function_name[0].lower() + function_name[1:] |
| 666 function_name = 'DartUtilities::%sToDart' % function_name | 690 function_name = 'DartUtilities::%sToDart' % function_name |
| 667 return '%s(%s)' % (function_name, ', '.join(conversion_arguments)) | 691 return '%s(%s)' % (function_name, ', '.join(conversion_arguments)) |
| 668 | 692 |
| 669 def webcore_getter_name(self): | 693 def webcore_getter_name(self): |
| (...skipping 30 matching lines...) Expand all Loading... | |
| 700 conversion_cast = '%s::create(receiver, %s)' | 724 conversion_cast = '%s::create(receiver, %s)' |
| 701 elif interface_name.endswith('List'): | 725 elif interface_name.endswith('List'): |
| 702 conversion_cast = 'static_cast<%s*>(%s.get())' | 726 conversion_cast = 'static_cast<%s*>(%s.get())' |
| 703 elif self.idl_type() in svg_primitive_types: | 727 elif self.idl_type() in svg_primitive_types: |
| 704 conversion_cast = '%s::create(%s)' | 728 conversion_cast = '%s::create(%s)' |
| 705 else: | 729 else: |
| 706 conversion_cast = 'static_cast<%s*>(%s)' | 730 conversion_cast = 'static_cast<%s*>(%s)' |
| 707 conversion_cast = conversion_cast % (self.native_type(), value) | 731 conversion_cast = conversion_cast % (self.native_type(), value) |
| 708 return 'Dart%s::toDart(%s)' % (self._idl_type, conversion_cast) | 732 return 'Dart%s::toDart(%s)' % (self._idl_type, conversion_cast) |
| 709 | 733 |
| 734 _dom_string_type_info = PrimitiveIDLTypeInfo( | |
| 735 'DOMString', dart_type='String', native_type='String') | |
| 736 | |
| 710 _idl_type_registry = { | 737 _idl_type_registry = { |
| 711 'boolean': PrimitiveIDLTypeInfo('boolean', dart_type='bool', native_type='bo ol', | 738 'boolean': PrimitiveIDLTypeInfo('boolean', dart_type='bool', native_type='bo ol', |
| 712 webcore_getter_name='hasAttribute', | 739 webcore_getter_name='hasAttribute', |
| 713 webcore_setter_name='setBooleanAttribute'), | 740 webcore_setter_name='setBooleanAttribute'), |
| 714 'byte': PrimitiveIDLTypeInfo('byte', dart_type='int', native_type='int'), | 741 'byte': PrimitiveIDLTypeInfo('byte', dart_type='int', native_type='int'), |
| 715 'octet': PrimitiveIDLTypeInfo('octet', dart_type='int', native_type='int'), | 742 'octet': PrimitiveIDLTypeInfo('octet', dart_type='int', native_type='int'), |
| 716 'short': PrimitiveIDLTypeInfo('short', dart_type='int', native_type='int'), | 743 'short': PrimitiveIDLTypeInfo('short', dart_type='int', native_type='int'), |
| 717 'unsigned short': PrimitiveIDLTypeInfo('unsigned short', dart_type='int', | 744 'unsigned short': PrimitiveIDLTypeInfo('unsigned short', dart_type='int', |
| 718 native_type='int'), | 745 native_type='int'), |
| 719 'int': PrimitiveIDLTypeInfo('int', dart_type='int'), | 746 'int': PrimitiveIDLTypeInfo('int', dart_type='int'), |
| 720 'unsigned int': PrimitiveIDLTypeInfo('unsigned int', dart_type='int', | 747 'unsigned int': PrimitiveIDLTypeInfo('unsigned int', dart_type='int', |
| 721 native_type='unsigned'), | 748 native_type='unsigned'), |
| 722 'long': PrimitiveIDLTypeInfo('long', dart_type='int', native_type='int', | 749 'long': PrimitiveIDLTypeInfo('long', dart_type='int', native_type='int', |
| 723 webcore_getter_name='getIntegralAttribute', | 750 webcore_getter_name='getIntegralAttribute', |
| 724 webcore_setter_name='setIntegralAttribute'), | 751 webcore_setter_name='setIntegralAttribute'), |
| 725 'unsigned long': PrimitiveIDLTypeInfo('unsigned long', dart_type='int', | 752 'unsigned long': PrimitiveIDLTypeInfo('unsigned long', dart_type='int', |
| 726 native_type='unsigned', | 753 native_type='unsigned', |
| 727 webcore_getter_name='getUnsignedIntegralAttribute', | 754 webcore_getter_name='getUnsignedIntegralAttribute', |
| 728 webcore_setter_name='setUnsignedIntegralAttribute'), | 755 webcore_setter_name='setUnsignedIntegralAttribute'), |
| 729 'long long': PrimitiveIDLTypeInfo('long long', dart_type='int'), | 756 'long long': PrimitiveIDLTypeInfo('long long', dart_type='int'), |
| 730 'unsigned long long': PrimitiveIDLTypeInfo('unsigned long long', dart_type=' int'), | 757 'unsigned long long': PrimitiveIDLTypeInfo('unsigned long long', dart_type=' int'), |
| 731 'float': PrimitiveIDLTypeInfo('float', dart_type='num', native_type='double' ), | 758 'float': PrimitiveIDLTypeInfo('float', dart_type='num', native_type='double' ), |
| 732 'double': PrimitiveIDLTypeInfo('double', dart_type='num'), | 759 'double': PrimitiveIDLTypeInfo('double', dart_type='num'), |
| 733 | 760 |
| 734 'any': PrimitiveIDLTypeInfo('any', dart_type='Object'), | 761 'any': PrimitiveIDLTypeInfo('any', dart_type='Object'), |
| 735 'any[]': PrimitiveIDLTypeInfo('any[]', dart_type='List'), | |
| 736 'Array': PrimitiveIDLTypeInfo('Array', dart_type='List'), | 762 'Array': PrimitiveIDLTypeInfo('Array', dart_type='List'), |
| 737 'custom': PrimitiveIDLTypeInfo('custom', dart_type='Dynamic'), | 763 'custom': PrimitiveIDLTypeInfo('custom', dart_type='Dynamic'), |
| 738 'Date': PrimitiveIDLTypeInfo('Date', dart_type='Date', native_type='double') , | 764 'Date': PrimitiveIDLTypeInfo('Date', dart_type='Date', native_type='double') , |
| 739 'DOMObject': PrimitiveIDLTypeInfo('DOMObject', dart_type='Object', native_ty pe='ScriptValue'), | 765 'DOMObject': PrimitiveIDLTypeInfo('DOMObject', dart_type='Object', native_ty pe='ScriptValue'), |
| 740 'DOMString': PrimitiveIDLTypeInfo('DOMString', dart_type='String', native_ty pe='String'), | 766 'DOMString': _dom_string_type_info, |
| 741 # TODO(vsm): This won't actually work until we convert the Map to | 767 # TODO(vsm): This won't actually work until we convert the Map to |
| 742 # a native JS Map for JS DOM. | 768 # a native JS Map for JS DOM. |
| 743 'Dictionary': PrimitiveIDLTypeInfo('Dictionary', dart_type='Map'), | 769 'Dictionary': PrimitiveIDLTypeInfo('Dictionary', dart_type='Map'), |
| 744 # TODO(sra): Flags is really a dictionary: {create:bool, exclusive:bool} | 770 # TODO(sra): Flags is really a dictionary: {create:bool, exclusive:bool} |
| 745 # http://dev.w3.org/2009/dap/file-system/file-dir-sys.html#the-flags-interfa ce | 771 # http://dev.w3.org/2009/dap/file-system/file-dir-sys.html#the-flags-interfa ce |
| 746 'Flags': PrimitiveIDLTypeInfo('Flags', dart_type='Object'), | 772 'Flags': PrimitiveIDLTypeInfo('Flags', dart_type='Object'), |
| 747 'DOMTimeStamp': PrimitiveIDLTypeInfo('DOMTimeStamp', dart_type='int', native _type='unsigned long long'), | 773 'DOMTimeStamp': PrimitiveIDLTypeInfo('DOMTimeStamp', dart_type='int', native _type='unsigned long long'), |
| 748 'object': PrimitiveIDLTypeInfo('object', dart_type='Object', native_type='Sc riptValue'), | 774 'object': PrimitiveIDLTypeInfo('object', dart_type='Object', native_type='Sc riptValue'), |
| 749 'PositionOptions': PrimitiveIDLTypeInfo('PositionOptions', dart_type='Object '), | 775 'PositionOptions': PrimitiveIDLTypeInfo('PositionOptions', dart_type='Object '), |
| 750 # TODO(sra): Come up with some meaningful name so that where this appears in | 776 # TODO(sra): Come up with some meaningful name so that where this appears in |
| 751 # the documentation, the user is made aware that only a limited subset of | 777 # the documentation, the user is made aware that only a limited subset of |
| 752 # serializable types are actually permitted. | 778 # serializable types are actually permitted. |
| 753 'SerializedScriptValue': PrimitiveIDLTypeInfo('SerializedScriptValue', dart_ type='Dynamic'), | 779 'SerializedScriptValue': PrimitiveIDLTypeInfo('SerializedScriptValue', dart_ type='Dynamic'), |
| 754 # TODO(sra): Flags is really a dictionary: {create:bool, exclusive:bool} | 780 # TODO(sra): Flags is really a dictionary: {create:bool, exclusive:bool} |
| 755 # http://dev.w3.org/2009/dap/file-system/file-dir-sys.html#the-flags-interfa ce | 781 # http://dev.w3.org/2009/dap/file-system/file-dir-sys.html#the-flags-interfa ce |
| 756 'WebKitFlags': PrimitiveIDLTypeInfo('WebKitFlags', dart_type='Object'), | 782 'WebKitFlags': PrimitiveIDLTypeInfo('WebKitFlags', dart_type='Object'), |
| 757 | 783 |
| 758 'sequence': PrimitiveIDLTypeInfo('sequence', dart_type='List'), | 784 'sequence': PrimitiveIDLTypeInfo('sequence', dart_type='List'), |
| 759 'void': PrimitiveIDLTypeInfo('void', dart_type='void'), | 785 'void': PrimitiveIDLTypeInfo('void', dart_type='void'), |
| 760 | 786 |
| 761 'CSSRule': IDLTypeInfo('CSSRule', conversion_includes=['CSSImportRule']), | 787 'CSSRule': IDLTypeInfo('CSSRule', conversion_includes=['CSSImportRule']), |
| 762 'DOMException': IDLTypeInfo('DOMException', native_type='DOMCoreException'), | 788 'DOMException': IDLTypeInfo('DOMException', native_type='DOMCoreException'), |
| 789 'DOMString[]': DOMStringArrayTypeInfo(), | |
|
podivilov
2012/06/21 08:33:57
Up to you, but I really prefer a special case in G
| |
| 763 'DOMStringList': IDLTypeInfo('DOMStringList', dart_type='List<String>', cust om_to_native=True), | 790 'DOMStringList': IDLTypeInfo('DOMStringList', dart_type='List<String>', cust om_to_native=True), |
| 764 'DOMStringMap': IDLTypeInfo('DOMStringMap', dart_type='Map<String, String>') , | 791 'DOMStringMap': IDLTypeInfo('DOMStringMap', dart_type='Map<String, String>') , |
| 765 'DOMWindow': IDLTypeInfo('DOMWindow', custom_to_dart=True), | 792 'DOMWindow': IDLTypeInfo('DOMWindow', custom_to_dart=True), |
| 766 'Element': IDLTypeInfo('Element', custom_to_dart=True), | 793 'Element': IDLTypeInfo('Element', custom_to_dart=True), |
| 767 'EventListener': IDLTypeInfo('EventListener', custom_to_native=True), | 794 'EventListener': IDLTypeInfo('EventListener', custom_to_native=True), |
| 768 'EventTarget': IDLTypeInfo('EventTarget', custom_to_native=True), | 795 'EventTarget': IDLTypeInfo('EventTarget', custom_to_native=True), |
| 769 'HTMLElement': IDLTypeInfo('HTMLElement', custom_to_dart=True), | 796 'HTMLElement': IDLTypeInfo('HTMLElement', custom_to_dart=True), |
| 770 'IDBAny': IDLTypeInfo('IDBAny', dart_type='Dynamic', custom_to_native=True), | 797 'IDBAny': IDLTypeInfo('IDBAny', dart_type='Dynamic', custom_to_native=True), |
| 771 'IDBKey': IDLTypeInfo('IDBKey', dart_type='Dynamic', custom_to_native=True), | 798 'IDBKey': IDLTypeInfo('IDBKey', dart_type='Dynamic', custom_to_native=True), |
| 772 'StyleSheet': IDLTypeInfo('StyleSheet', conversion_includes=['CSSStyleSheet' ]), | 799 'StyleSheet': IDLTypeInfo('StyleSheet', conversion_includes=['CSSStyleSheet' ]), |
| (...skipping 18 matching lines...) Expand all Loading... | |
| 791 _svg_supplemental_includes = [ | 818 _svg_supplemental_includes = [ |
| 792 '"SVGAnimatedPropertyTearOff.h"', | 819 '"SVGAnimatedPropertyTearOff.h"', |
| 793 '"SVGAnimatedListPropertyTearOff.h"', | 820 '"SVGAnimatedListPropertyTearOff.h"', |
| 794 '"SVGStaticListPropertyTearOff.h"', | 821 '"SVGStaticListPropertyTearOff.h"', |
| 795 '"SVGAnimatedListPropertyTearOff.h"', | 822 '"SVGAnimatedListPropertyTearOff.h"', |
| 796 '"SVGTransformListPropertyTearOff.h"', | 823 '"SVGTransformListPropertyTearOff.h"', |
| 797 '"SVGPathSegListPropertyTearOff.h"', | 824 '"SVGPathSegListPropertyTearOff.h"', |
| 798 ] | 825 ] |
| 799 | 826 |
| 800 def GetIDLTypeInfo(idl_type_name): | 827 def GetIDLTypeInfo(idl_type_name): |
| 828 type_info = _idl_type_registry.get(idl_type_name) | |
| 829 if type_info is not None: | |
| 830 return type_info | |
| 831 | |
| 801 match = re.match(r'sequence<(\w+)>$', idl_type_name) | 832 match = re.match(r'sequence<(\w+)>$', idl_type_name) |
| 802 if match: | 833 if match: |
| 803 return SequenceIDLTypeInfo(idl_type_name, GetIDLTypeInfo(match.group(1))) | 834 return SequenceIDLTypeInfo(idl_type_name, GetIDLTypeInfo(match.group(1))) |
| 804 return _idl_type_registry.get(idl_type_name, IDLTypeInfo(idl_type_name)) | 835 |
| 836 match = re.match(r'(\w+)\[\]$', idl_type_name) | |
| 837 if match: | |
| 838 return SequenceIDLTypeInfo(idl_type_name, GetIDLTypeInfo(match.group(1))) | |
| 839 | |
| 840 return IDLTypeInfo(idl_type_name) | |
| OLD | NEW |