OLD | NEW |
1 #!/usr/bin/python | 1 #!/usr/bin/python |
2 # Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 2 # Copyright (c) 2011, 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 import os | 6 import os |
7 import sys | 7 import sys |
8 | 8 |
9 import idl_definitions | 9 import idl_definitions |
10 from idl_types import IdlType, IdlUnionType | 10 from idl_types import IdlType, IdlUnionType |
(...skipping 601 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
612 IDLParentInterface) | 612 IDLParentInterface) |
613 | 613 |
614 javascript_interface_name = self.ext_attrs.get('InterfaceName', self.id) | 614 javascript_interface_name = self.ext_attrs.get('InterfaceName', self.id) |
615 self.javascript_binding_name = javascript_interface_name | 615 self.javascript_binding_name = javascript_interface_name |
616 self.doc_js_name = javascript_interface_name | 616 self.doc_js_name = javascript_interface_name |
617 | 617 |
618 if not (self._find_first(ast, 'Callback') is None): | 618 if not (self._find_first(ast, 'Callback') is None): |
619 self.ext_attrs['Callback'] = None | 619 self.ext_attrs['Callback'] = None |
620 if not (self._find_first(ast, 'Partial') is None): | 620 if not (self._find_first(ast, 'Partial') is None): |
621 self.is_supplemental = True | 621 self.is_supplemental = True |
622 self.ext_attrs['Supplemental'] = None | 622 self.ext_attrs['DartSupplemental'] = None |
623 | 623 |
624 self.operations = self._convert_all(ast, 'Operation', | 624 self.operations = self._convert_all(ast, 'Operation', |
625 lambda ast: IDLOperation(ast, self.doc_js_name)) | 625 lambda ast: IDLOperation(ast, self.doc_js_name)) |
626 self.attributes = self._convert_all(ast, 'Attribute', | 626 self.attributes = self._convert_all(ast, 'Attribute', |
627 lambda ast: IDLAttribute(ast, self.doc_js_name)) | 627 lambda ast: IDLAttribute(ast, self.doc_js_name)) |
628 self.constants = self._convert_all(ast, 'Const', | 628 self.constants = self._convert_all(ast, 'Const', |
629 lambda ast: IDLConstant(ast, self.doc_js_name)) | 629 lambda ast: IDLConstant(ast, self.doc_js_name)) |
630 self.is_supplemental = 'Supplemental' in self.ext_attrs | 630 self.is_supplemental = 'DartSupplemental' in self.ext_attrs |
631 self.is_no_interface_object = 'NoInterfaceObject' in self.ext_attrs | 631 self.is_no_interface_object = 'NoInterfaceObject' in self.ext_attrs |
632 # TODO(terry): Can eliminate Suppressed when we're only using blink parser. | 632 # TODO(terry): Can eliminate Suppressed when we're only using blink parser. |
633 self.is_fc_suppressed = 'Suppressed' in self.ext_attrs or \ | 633 self.is_fc_suppressed = 'Suppressed' in self.ext_attrs or \ |
634 'DartSuppress' in self.ext_attrs | 634 'DartSuppress' in self.ext_attrs |
635 | 635 |
636 | 636 |
637 def reset_id(self, new_id): | 637 def reset_id(self, new_id): |
638 """Reset the id of the Interface and corresponding the JS names.""" | 638 """Reset the id of the Interface and corresponding the JS names.""" |
639 if self.id != new_id: | 639 if self.id != new_id: |
640 self.id = new_id | 640 self.id = new_id |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
688 self.type = self._convert_first(ast, 'ReturnType', IDLType) | 688 self.type = self._convert_first(ast, 'ReturnType', IDLType) |
689 self.arguments = self._convert_all(ast, 'Argument', IDLArgument) | 689 self.arguments = self._convert_all(ast, 'Argument', IDLArgument) |
690 self.specials = self._find_all(ast, 'Special') | 690 self.specials = self._find_all(ast, 'Special') |
691 # Special case: there are getters of the form | 691 # Special case: there are getters of the form |
692 # getter <ReturnType>(args). For now force the name to be __getter__, | 692 # getter <ReturnType>(args). For now force the name to be __getter__, |
693 # but it should be operator[] later. | 693 # but it should be operator[] later. |
694 if self.id is None: | 694 if self.id is None: |
695 if self.specials == ['getter']: | 695 if self.specials == ['getter']: |
696 if self.ext_attrs.get('Custom') == 'PropertyQuery': | 696 if self.ext_attrs.get('Custom') == 'PropertyQuery': |
697 # Handling __propertyQuery__ the extended attribute is: | 697 # Handling __propertyQuery__ the extended attribute is: |
698 # [Custom=PropertyQuery] legacycaller boolean (DOMString name); | 698 # [Custom=PropertyQuery] getter boolean (DOMString name); |
699 self.id = '__propertyQuery__' | 699 self.id = '__propertyQuery__' |
700 else: | 700 else: |
701 self.id = '__getter__' | 701 self.id = '__getter__' |
702 elif self.specials == ['setter']: | 702 elif self.specials == ['setter']: |
703 self.id = '__setter__' | 703 self.id = '__setter__' |
704 # Special case: if it's a setter, ignore 'declared' return type | 704 # Special case: if it's a setter, ignore 'declared' return type |
705 self.type = IDLType([('VoidType', None)]) | 705 self.type = IDLType([('VoidType', None)]) |
706 elif self.specials == ['deleter']: | 706 elif self.specials == ['deleter']: |
707 self.id = '__delete__' | 707 self.id = '__delete__' |
708 else: | 708 else: |
(...skipping 29 matching lines...) Expand all Loading... |
738 """IDLNode specialization for 'const type name = value' declarations.""" | 738 """IDLNode specialization for 'const type name = value' declarations.""" |
739 def __init__(self, ast, doc_js_interface_name): | 739 def __init__(self, ast, doc_js_interface_name): |
740 IDLMember.__init__(self, ast, doc_js_interface_name) | 740 IDLMember.__init__(self, ast, doc_js_interface_name) |
741 self.value = self._find_first(ast, 'ConstExpr') | 741 self.value = self._find_first(ast, 'ConstExpr') |
742 | 742 |
743 | 743 |
744 class IDLArgument(IDLNode): | 744 class IDLArgument(IDLNode): |
745 """IDLNode specialization for operation arguments.""" | 745 """IDLNode specialization for operation arguments.""" |
746 def __init__(self, ast): | 746 def __init__(self, ast): |
747 IDLNode.__init__(self, ast) | 747 IDLNode.__init__(self, ast) |
| 748 |
| 749 self.default_value = None |
| 750 self.default_value_is_null = False |
| 751 # Handle the 'argType arg = default'. IDL syntax changed from |
| 752 # [default=NullString]. |
| 753 if not isinstance(ast, list): |
| 754 if isinstance(ast.default_value, idl_definitions.IdlLiteral) and ast.defau
lt_value: |
| 755 self.default_value = ast.default_value.value |
| 756 self.default_value_is_null = ast.default_value.is_null |
| 757 elif 'Default' in ast.extended_attributes: |
| 758 # Work around [Default=Undefined] for arguments - only look in the model
's |
| 759 # default_value |
| 760 self.default_value = ast.extended_attributes.get('Default') |
| 761 self.default_value_is_null = False |
| 762 |
748 self.type = self._convert_first(ast, 'Type', IDLType) | 763 self.type = self._convert_first(ast, 'Type', IDLType) |
749 self.optional = self._has(ast, 'Optional') | 764 self.optional = self._has(ast, 'Optional') |
750 self._convert_ext_attrs(ast) | 765 self._convert_ext_attrs(ast) |
751 # TODO(vsm): Recover this from the type instead. | 766 # TODO(vsm): Recover this from the type instead. |
752 if 'Callback' in self.type.id: | 767 if 'Callback' in self.type.id: |
753 self.ext_attrs['Callback'] = None | 768 self.ext_attrs['Callback'] = None |
754 | 769 |
755 def __repr__(self): | 770 def __repr__(self): |
756 return '<IDLArgument(type = %s, id = %s)>' % (self.type, self.id) | 771 return '<IDLArgument(type = %s, id = %s)>' % (self.type, self.id) |
757 | 772 |
(...skipping 24 matching lines...) Expand all Loading... |
782 """IDLDictNode specialization for one annotation.""" | 797 """IDLDictNode specialization for one annotation.""" |
783 def __init__(self, ast=None): | 798 def __init__(self, ast=None): |
784 IDLDictNode.__init__(self, ast) | 799 IDLDictNode.__init__(self, ast) |
785 self.id = None | 800 self.id = None |
786 if not ast: | 801 if not ast: |
787 return | 802 return |
788 for arg in self._find_all(ast, 'AnnotationArg'): | 803 for arg in self._find_all(ast, 'AnnotationArg'): |
789 name = self._find_first(arg, 'Id') | 804 name = self._find_first(arg, 'Id') |
790 value = self._find_first(arg, 'AnnotationArgValue') | 805 value = self._find_first(arg, 'AnnotationArgValue') |
791 self[name] = value | 806 self[name] = value |
OLD | NEW |