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 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
78 # Some JavaScript processors, especially tools like yuicompress and | 78 # Some JavaScript processors, especially tools like yuicompress and |
79 # JSCompiler, choke on 'this.continue' | 79 # JSCompiler, choke on 'this.continue' |
80 'IDBCursor.continueFunction': | 80 'IDBCursor.continueFunction': |
81 """ | 81 """ |
82 if (key == null) return this['continue'](); | 82 if (key == null) return this['continue'](); |
83 return this['continue'](key); | 83 return this['continue'](key); |
84 """, | 84 """, |
85 } | 85 } |
86 | 86 |
87 def IsPrimitiveType(type_name): | 87 def IsPrimitiveType(type_name): |
88 return isinstance(GetIDLTypeInfo(type_name), PrimitiveIDLTypeInfo) | 88 if not type_name in _idl_type_registry: |
| 89 return False |
| 90 return _idl_type_registry[type_name].clazz == 'Primitive' |
89 | 91 |
90 def ListImplementationInfo(interface, database): | 92 def ListImplementationInfo(interface, database): |
91 """Returns a tuple (elment_type, requires_indexer). | 93 """Returns a tuple (elment_type, requires_indexer). |
92 If interface do not have to implement List, element_type is None. | 94 If interface do not have to implement List, element_type is None. |
93 Otherwise element_type is list element type and requires_indexer | 95 Otherwise element_type is list element type and requires_indexer |
94 is true iff this interface implementation must have indexer and | 96 is true iff this interface implementation must have indexer and |
95 false otherwise. False means that interface implementation | 97 false otherwise. False means that interface implementation |
96 inherits indexer and may just reuse it.""" | 98 inherits indexer and may just reuse it.""" |
97 element_type = MaybeListElementType(interface) | 99 element_type = MaybeListElementType(interface) |
98 if element_type: | 100 if element_type: |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
159 # is useful not only for browser compat, but to allow code that links | 161 # is useful not only for browser compat, but to allow code that links |
160 # against dart:dom_deprecated to load in a worker isolate. | 162 # against dart:dom_deprecated to load in a worker isolate. |
161 return '*' + javascript_binding_name | 163 return '*' + javascript_binding_name |
162 | 164 |
163 | 165 |
164 def MatchSourceFilter(thing): | 166 def MatchSourceFilter(thing): |
165 return 'WebKit' in thing.annotations or 'Dart' in thing.annotations | 167 return 'WebKit' in thing.annotations or 'Dart' in thing.annotations |
166 | 168 |
167 | 169 |
168 def DartType(idl_type_name): | 170 def DartType(idl_type_name): |
169 return GetIDLTypeInfo(idl_type_name).dart_type() | 171 return TypeRegistry().TypeInfo(idl_type_name).dart_type() |
170 | 172 |
171 | 173 |
172 class ParamInfo(object): | 174 class ParamInfo(object): |
173 """Holder for various information about a parameter of a Dart operation. | 175 """Holder for various information about a parameter of a Dart operation. |
174 | 176 |
175 Attributes: | 177 Attributes: |
176 name: Name of parameter. | 178 name: Name of parameter. |
177 type_id: Original type id. None for merged types. | 179 type_id: Original type id. None for merged types. |
178 dart_type: DartType of parameter. | 180 dart_type: DartType of parameter. |
179 is_optional: Parameter optionality. | 181 is_optional: Parameter optionality. |
(...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
483 | 485 |
484 # Given a sorted sequence of type identifiers, return an appropriate type | 486 # Given a sorted sequence of type identifiers, return an appropriate type |
485 # name | 487 # name |
486 def TypeName(type_ids, interface): | 488 def TypeName(type_ids, interface): |
487 # Dynamically type this field for now. | 489 # Dynamically type this field for now. |
488 return 'Dynamic' | 490 return 'Dynamic' |
489 | 491 |
490 # ------------------------------------------------------------------------------ | 492 # ------------------------------------------------------------------------------ |
491 | 493 |
492 class IDLTypeInfo(object): | 494 class IDLTypeInfo(object): |
493 def __init__(self, idl_type, dart_type=None, | 495 def __init__(self, idl_type, data): |
494 native_type=None, | |
495 custom_to_native=False, | |
496 custom_to_dart=False, conversion_includes=[]): | |
497 self._idl_type = idl_type | 496 self._idl_type = idl_type |
498 self._dart_type = dart_type | 497 self._data = data |
499 self._native_type = native_type | |
500 self._custom_to_native = custom_to_native | |
501 self._custom_to_dart = custom_to_dart | |
502 self._conversion_includes = conversion_includes + [idl_type] | |
503 | 498 |
504 def idl_type(self): | 499 def idl_type(self): |
505 return self._idl_type | 500 return self._idl_type |
506 | 501 |
507 def dart_type(self): | 502 def dart_type(self): |
508 return self._dart_type or self._idl_type | 503 return self._data.dart_type or self._idl_type |
509 | 504 |
510 def native_type(self): | 505 def native_type(self): |
511 return self._native_type or self._idl_type | 506 return self._data.native_type or self._idl_type |
512 | 507 |
513 def emit_to_native(self, emitter, idl_node, name, handle, interface_name): | 508 def emit_to_native(self, emitter, idl_node, name, handle, interface_name): |
514 if 'Callback' in idl_node.ext_attrs: | 509 if 'Callback' in idl_node.ext_attrs: |
515 if set(['Optional', 'Callback']).issubset(idl_node.ext_attrs.keys()): | 510 if set(['Optional', 'Callback']).issubset(idl_node.ext_attrs.keys()): |
516 flag = 'DartUtilities::ConvertNullToDefaultValue' | 511 flag = 'DartUtilities::ConvertNullToDefaultValue' |
517 else: | 512 else: |
518 flag = 'DartUtilities::ConvertNone' | 513 flag = 'DartUtilities::ConvertNone' |
519 emitter.Emit( | 514 emitter.Emit( |
520 '\n' | 515 '\n' |
521 ' RefPtr<$TYPE> $NAME = Dart$IDL_TYPE::create($HANDLE, $FLAG, exc
eption);\n' | 516 ' RefPtr<$TYPE> $NAME = Dart$IDL_TYPE::create($HANDLE, $FLAG, exc
eption);\n' |
(...skipping 19 matching lines...) Expand all Loading... |
541 ' $TYPE $NAME = Dart$IDL_TYPE::toNative($HANDLE, exception);\n' | 536 ' $TYPE $NAME = Dart$IDL_TYPE::toNative($HANDLE, exception);\n' |
542 ' if (exception)\n' | 537 ' if (exception)\n' |
543 ' goto fail;\n', | 538 ' goto fail;\n', |
544 TYPE=type, | 539 TYPE=type, |
545 NAME=name, | 540 NAME=name, |
546 IDL_TYPE=self.idl_type(), | 541 IDL_TYPE=self.idl_type(), |
547 HANDLE=handle) | 542 HANDLE=handle) |
548 return argument | 543 return argument |
549 | 544 |
550 def custom_to_native(self): | 545 def custom_to_native(self): |
551 return self._custom_to_native | 546 return self._data.custom_to_native |
552 | 547 |
553 def parameter_type(self): | 548 def parameter_type(self): |
554 return '%s*' % self.native_type() | 549 return '%s*' % self.native_type() |
555 | 550 |
556 def webcore_includes(self): | 551 def webcore_includes(self): |
557 WTF_INCLUDES = [ | 552 WTF_INCLUDES = [ |
558 'ArrayBuffer', | 553 'ArrayBuffer', |
559 'ArrayBufferView', | 554 'ArrayBufferView', |
560 'Float32Array', | 555 'Float32Array', |
561 'Float64Array', | 556 'Float64Array', |
(...skipping 17 matching lines...) Expand all Loading... |
579 if self._idl_type.startswith('SVGPathSeg'): | 574 if self._idl_type.startswith('SVGPathSeg'): |
580 include = self._idl_type.replace('Abs', '').replace('Rel', '') | 575 include = self._idl_type.replace('Abs', '').replace('Rel', '') |
581 else: | 576 else: |
582 include = self._idl_type | 577 include = self._idl_type |
583 return ['"%s.h"' % include] + _svg_supplemental_includes | 578 return ['"%s.h"' % include] + _svg_supplemental_includes |
584 | 579 |
585 def receiver(self): | 580 def receiver(self): |
586 return 'receiver->' | 581 return 'receiver->' |
587 | 582 |
588 def conversion_includes(self): | 583 def conversion_includes(self): |
589 return ['"Dart%s.h"' % include for include in self._conversion_includes] | 584 includes = [self._idl_type] + (self._data.conversion_includes or []) |
| 585 return ['"Dart%s.h"' % include for include in includes] |
590 | 586 |
591 def to_native_includes(self): | 587 def to_native_includes(self): |
592 return ['"Dart%s.h"' % self.idl_type()] | 588 return ['"Dart%s.h"' % self.idl_type()] |
593 | 589 |
594 def to_dart_conversion(self, value, interface_name=None, attributes=None): | 590 def to_dart_conversion(self, value, interface_name=None, attributes=None): |
595 return 'Dart%s::toDart(%s)' % (self._idl_type, value) | 591 return 'Dart%s::toDart(%s)' % (self._idl_type, value) |
596 | 592 |
597 def custom_to_dart(self): | 593 def custom_to_dart(self): |
598 return self._custom_to_dart | 594 return self._data.custom_to_dart |
| 595 |
| 596 |
| 597 class InterfaceIDLTypeInfo(IDLTypeInfo): |
| 598 def __init__(self, idl_type, data): |
| 599 super(InterfaceIDLTypeInfo, self).__init__(idl_type, data) |
599 | 600 |
600 | 601 |
601 class SequenceIDLTypeInfo(IDLTypeInfo): | 602 class SequenceIDLTypeInfo(IDLTypeInfo): |
602 def __init__(self, idl_type, item_info): | 603 def __init__(self, idl_type, item_info): |
603 super(SequenceIDLTypeInfo, self).__init__(idl_type) | 604 super(SequenceIDLTypeInfo, self).__init__(idl_type, {}) |
604 self._item_info = item_info | 605 self._item_info = item_info |
605 | 606 |
606 def dart_type(self): | 607 def dart_type(self): |
607 return 'List<%s>' % self._item_info.dart_type() | 608 return 'List<%s>' % self._item_info.dart_type() |
608 | 609 |
609 def to_dart_conversion(self, value, interface_name=None, attributes=None): | 610 def to_dart_conversion(self, value, interface_name=None, attributes=None): |
610 return 'DartDOMWrapper::vectorToDart<Dart%s>(%s)' % (self._item_info.native_
type(), value) | 611 return 'DartDOMWrapper::vectorToDart<Dart%s>(%s)' % (self._item_info.native_
type(), value) |
611 | 612 |
612 def conversion_includes(self): | 613 def conversion_includes(self): |
613 return self._item_info.conversion_includes() | 614 return self._item_info.conversion_includes() |
614 | 615 |
615 | 616 |
616 class DOMStringArrayTypeInfo(SequenceIDLTypeInfo): | 617 class DOMStringArrayTypeInfo(SequenceIDLTypeInfo): |
617 def __init__(self): | 618 def __init__(self, item_info): |
618 super(DOMStringArrayTypeInfo, self).__init__('DOMString[]', _dom_string_type
_info) | 619 super(DOMStringArrayTypeInfo, self).__init__('DOMString[]', item_info) |
619 | 620 |
620 def emit_to_native(self, emitter, idl_node, name, handle, interface_name): | 621 def emit_to_native(self, emitter, idl_node, name, handle, interface_name): |
621 emitter.Emit( | 622 emitter.Emit( |
622 '\n' | 623 '\n' |
623 ' RefPtr<DOMStringList> $NAME = DartDOMStringList::toNative($HAND
LE, exception);\n' | 624 ' RefPtr<DOMStringList> $NAME = DartDOMStringList::toNative($HAND
LE, exception);\n' |
624 ' if (exception)\n' | 625 ' if (exception)\n' |
625 ' goto fail;\n', | 626 ' goto fail;\n', |
626 NAME=name, | 627 NAME=name, |
627 HANDLE=handle) | 628 HANDLE=handle) |
628 return name | 629 return name |
629 | 630 |
630 def to_native_includes(self): | 631 def to_native_includes(self): |
631 return ['"DartDOMStringList.h"'] | 632 return ['"DartDOMStringList.h"'] |
632 | 633 |
633 | 634 |
634 class PrimitiveIDLTypeInfo(IDLTypeInfo): | 635 class PrimitiveIDLTypeInfo(IDLTypeInfo): |
635 def __init__(self, idl_type, dart_type, native_type=None, | 636 def __init__(self, idl_type, data): |
636 webcore_getter_name='getAttribute', | 637 super(PrimitiveIDLTypeInfo, self).__init__(idl_type, data) |
637 webcore_setter_name='setAttribute'): | |
638 super(PrimitiveIDLTypeInfo, self).__init__(idl_type, dart_type=dart_type, | |
639 native_type=native_type) | |
640 self._webcore_getter_name = webcore_getter_name | |
641 self._webcore_setter_name = webcore_setter_name | |
642 | 638 |
643 def emit_to_native(self, emitter, idl_node, name, handle, interface_name): | 639 def emit_to_native(self, emitter, idl_node, name, handle, interface_name): |
644 function_name = 'dartTo%s' % self._capitalized_native_type() | 640 function_name = 'dartTo%s' % self._capitalized_native_type() |
645 if idl_node.ext_attrs.get('Optional') == 'DefaultIsNullString': | 641 if idl_node.ext_attrs.get('Optional') == 'DefaultIsNullString': |
646 function_name += 'WithNullCheck' | 642 function_name += 'WithNullCheck' |
647 type = self.native_type() | 643 type = self.native_type() |
648 if type == 'SerializedScriptValue': | 644 if type == 'SerializedScriptValue': |
649 type = 'RefPtr<%s>' % type | 645 type = 'RefPtr<%s>' % type |
650 if type == 'String': | 646 if type == 'String': |
651 type = 'DartStringAdapter' | 647 type = 'DartStringAdapter' |
(...skipping 22 matching lines...) Expand all Loading... |
674 def to_dart_conversion(self, value, interface_name=None, attributes=None): | 670 def to_dart_conversion(self, value, interface_name=None, attributes=None): |
675 conversion_arguments = [value] | 671 conversion_arguments = [value] |
676 if attributes and 'TreatReturnedNullStringAs' in attributes: | 672 if attributes and 'TreatReturnedNullStringAs' in attributes: |
677 conversion_arguments.append('DartUtilities::ConvertNullToDefaultValue') | 673 conversion_arguments.append('DartUtilities::ConvertNullToDefaultValue') |
678 function_name = self._capitalized_native_type() | 674 function_name = self._capitalized_native_type() |
679 function_name = function_name[0].lower() + function_name[1:] | 675 function_name = function_name[0].lower() + function_name[1:] |
680 function_name = 'DartUtilities::%sToDart' % function_name | 676 function_name = 'DartUtilities::%sToDart' % function_name |
681 return '%s(%s)' % (function_name, ', '.join(conversion_arguments)) | 677 return '%s(%s)' % (function_name, ', '.join(conversion_arguments)) |
682 | 678 |
683 def webcore_getter_name(self): | 679 def webcore_getter_name(self): |
684 return self._webcore_getter_name | 680 return self._data.webcore_getter_name |
685 | 681 |
686 def webcore_setter_name(self): | 682 def webcore_setter_name(self): |
687 return self._webcore_setter_name | 683 return self._data.webcore_setter_name |
688 | 684 |
689 def _capitalized_native_type(self): | 685 def _capitalized_native_type(self): |
690 return re.sub(r'(^| )([a-z])', lambda x: x.group(2).upper(), self.native_typ
e()) | 686 return re.sub(r'(^| )([a-z])', lambda x: x.group(2).upper(), self.native_typ
e()) |
691 | 687 |
692 | 688 |
693 class SVGTearOffIDLTypeInfo(IDLTypeInfo): | 689 class SVGTearOffIDLTypeInfo(IDLTypeInfo): |
694 def __init__(self, idl_type, native_type=''): | 690 def __init__(self, idl_type, data): |
695 super(SVGTearOffIDLTypeInfo, self).__init__(idl_type, | 691 super(SVGTearOffIDLTypeInfo, self).__init__(idl_type, data) |
696 native_type=native_type) | |
697 | 692 |
698 def native_type(self): | 693 def native_type(self): |
699 if self._native_type: | 694 if self._data.native_type: |
700 return self._native_type | 695 return self._data.native_type |
701 tear_off_type = 'SVGPropertyTearOff' | 696 tear_off_type = 'SVGPropertyTearOff' |
702 if self._idl_type.endswith('List'): | 697 if self._idl_type.endswith('List'): |
703 tear_off_type = 'SVGListPropertyTearOff' | 698 tear_off_type = 'SVGListPropertyTearOff' |
704 return '%s<%s>' % (tear_off_type, self._idl_type) | 699 return '%s<%s>' % (tear_off_type, self._idl_type) |
705 | 700 |
706 def receiver(self): | 701 def receiver(self): |
707 if self._idl_type.endswith('List'): | 702 if self._idl_type.endswith('List'): |
708 return 'receiver->' | 703 return 'receiver->' |
709 return 'receiver->propertyReference().' | 704 return 'receiver->propertyReference().' |
710 | 705 |
711 def to_dart_conversion(self, value, interface_name, attributes): | 706 def to_dart_conversion(self, value, interface_name, attributes): |
712 svg_primitive_types = ['SVGAngle', 'SVGLength', 'SVGMatrix', | 707 svg_primitive_types = ['SVGAngle', 'SVGLength', 'SVGMatrix', |
713 'SVGNumber', 'SVGPoint', 'SVGRect', 'SVGTransform'] | 708 'SVGNumber', 'SVGPoint', 'SVGRect', 'SVGTransform'] |
714 conversion_cast = '%s::create(%s)' | 709 conversion_cast = '%s::create(%s)' |
715 if interface_name.startswith('SVGAnimated'): | 710 if interface_name.startswith('SVGAnimated'): |
716 conversion_cast = 'static_cast<%s*>(%s)' | 711 conversion_cast = 'static_cast<%s*>(%s)' |
717 elif self.idl_type() == 'SVGStringList': | 712 elif self.idl_type() == 'SVGStringList': |
718 conversion_cast = '%s::create(receiver, %s)' | 713 conversion_cast = '%s::create(receiver, %s)' |
719 elif interface_name.endswith('List'): | 714 elif interface_name.endswith('List'): |
720 conversion_cast = 'static_cast<%s*>(%s.get())' | 715 conversion_cast = 'static_cast<%s*>(%s.get())' |
721 elif self.idl_type() in svg_primitive_types: | 716 elif self.idl_type() in svg_primitive_types: |
722 conversion_cast = '%s::create(%s)' | 717 conversion_cast = '%s::create(%s)' |
723 else: | 718 else: |
724 conversion_cast = 'static_cast<%s*>(%s)' | 719 conversion_cast = 'static_cast<%s*>(%s)' |
725 conversion_cast = conversion_cast % (self.native_type(), value) | 720 conversion_cast = conversion_cast % (self.native_type(), value) |
726 return 'Dart%s::toDart(%s)' % (self._idl_type, conversion_cast) | 721 return 'Dart%s::toDart(%s)' % (self._idl_type, conversion_cast) |
727 | 722 |
728 _dom_string_type_info = PrimitiveIDLTypeInfo( | 723 |
729 'DOMString', dart_type='String', native_type='String') | 724 class TypeData(object): |
| 725 def __init__(self, clazz, dart_type=None, native_type=None, |
| 726 custom_to_dart=None, custom_to_native=None, |
| 727 conversion_includes=None, |
| 728 webcore_getter_name='getAttribute', |
| 729 webcore_setter_name='setAttribute'): |
| 730 self.clazz = clazz |
| 731 self.dart_type = dart_type |
| 732 self.native_type = native_type |
| 733 self.custom_to_dart = custom_to_dart |
| 734 self.custom_to_native = custom_to_native |
| 735 self.conversion_includes = conversion_includes |
| 736 self.webcore_getter_name = webcore_getter_name |
| 737 self.webcore_setter_name = webcore_setter_name |
| 738 |
730 | 739 |
731 _idl_type_registry = { | 740 _idl_type_registry = { |
732 'boolean': PrimitiveIDLTypeInfo('boolean', dart_type='bool', native_type='bo
ol', | 741 'boolean': TypeData(clazz='Primitive', dart_type='bool', native_type='bool', |
733 webcore_getter_name='hasAttribute', | 742 webcore_getter_name='hasAttribute', |
734 webcore_setter_name='setBooleanAttribute'), | 743 webcore_setter_name='setBooleanAttribute'), |
735 'byte': PrimitiveIDLTypeInfo('byte', dart_type='int', native_type='int'), | 744 'byte': TypeData(clazz='Primitive', dart_type='int', native_type='int'), |
736 'octet': PrimitiveIDLTypeInfo('octet', dart_type='int', native_type='int'), | 745 'octet': TypeData(clazz='Primitive', dart_type='int', native_type='int'), |
737 'short': PrimitiveIDLTypeInfo('short', dart_type='int', native_type='int'), | 746 'short': TypeData(clazz='Primitive', dart_type='int', native_type='int'), |
738 'unsigned short': PrimitiveIDLTypeInfo('unsigned short', dart_type='int', | 747 'unsigned short': TypeData(clazz='Primitive', dart_type='int', |
739 native_type='int'), | 748 native_type='int'), |
740 'int': PrimitiveIDLTypeInfo('int', dart_type='int'), | 749 'int': TypeData(clazz='Primitive', dart_type='int'), |
741 'unsigned int': PrimitiveIDLTypeInfo('unsigned int', dart_type='int', | 750 'unsigned int': TypeData(clazz='Primitive', dart_type='int', |
742 native_type='unsigned'), | 751 native_type='unsigned'), |
743 'long': PrimitiveIDLTypeInfo('long', dart_type='int', native_type='int', | 752 'long': TypeData(clazz='Primitive', dart_type='int', native_type='int', |
744 webcore_getter_name='getIntegralAttribute', | 753 webcore_getter_name='getIntegralAttribute', |
745 webcore_setter_name='setIntegralAttribute'), | 754 webcore_setter_name='setIntegralAttribute'), |
746 'unsigned long': PrimitiveIDLTypeInfo('unsigned long', dart_type='int', | 755 'unsigned long': TypeData(clazz='Primitive', dart_type='int', |
747 native_type='unsigned', | 756 native_type='unsigned', |
748 webcore_getter_name='getUnsignedIntegralAttribute', | 757 webcore_getter_name='getUnsignedIntegralAttribute'
, |
749 webcore_setter_name='setUnsignedIntegralAttribute'), | 758 webcore_setter_name='setUnsignedIntegralAttribute'
), |
750 'long long': PrimitiveIDLTypeInfo('long long', dart_type='int'), | 759 'long long': TypeData(clazz='Primitive', dart_type='int'), |
751 'unsigned long long': PrimitiveIDLTypeInfo('unsigned long long', dart_type='
int'), | 760 'unsigned long long': TypeData(clazz='Primitive', dart_type='int'), |
752 'float': PrimitiveIDLTypeInfo('float', dart_type='num', native_type='double'
), | 761 'float': TypeData(clazz='Primitive', dart_type='num', native_type='double'), |
753 'double': PrimitiveIDLTypeInfo('double', dart_type='num'), | 762 'double': TypeData(clazz='Primitive', dart_type='num'), |
754 | 763 |
755 'any': PrimitiveIDLTypeInfo('any', dart_type='Object'), | 764 'any': TypeData(clazz='Primitive', dart_type='Object'), |
756 'Array': PrimitiveIDLTypeInfo('Array', dart_type='List'), | 765 'Array': TypeData(clazz='Primitive', dart_type='List'), |
757 'custom': PrimitiveIDLTypeInfo('custom', dart_type='Dynamic'), | 766 'custom': TypeData(clazz='Primitive', dart_type='Dynamic'), |
758 'Date': PrimitiveIDLTypeInfo('Date', dart_type='Date', native_type='double')
, | 767 'Date': TypeData(clazz='Primitive', dart_type='Date', native_type='double'), |
759 'DOMObject': PrimitiveIDLTypeInfo('DOMObject', dart_type='Object', native_ty
pe='ScriptValue'), | 768 'DOMObject': TypeData(clazz='Primitive', dart_type='Object', native_type='Sc
riptValue'), |
760 'DOMString': _dom_string_type_info, | 769 'DOMString': TypeData(clazz='Primitive', dart_type='String', native_type='St
ring'), |
761 # TODO(vsm): This won't actually work until we convert the Map to | 770 # TODO(vsm): This won't actually work until we convert the Map to |
762 # a native JS Map for JS DOM. | 771 # a native JS Map for JS DOM. |
763 'Dictionary': PrimitiveIDLTypeInfo('Dictionary', dart_type='Map'), | 772 'Dictionary': TypeData(clazz='Primitive', dart_type='Map'), |
764 # TODO(sra): Flags is really a dictionary: {create:bool, exclusive:bool} | 773 # TODO(sra): Flags is really a dictionary: {create:bool, exclusive:bool} |
765 # http://dev.w3.org/2009/dap/file-system/file-dir-sys.html#the-flags-interfa
ce | 774 # http://dev.w3.org/2009/dap/file-system/file-dir-sys.html#the-flags-interfa
ce |
766 'Flags': PrimitiveIDLTypeInfo('Flags', dart_type='Object'), | 775 'Flags': TypeData(clazz='Primitive', dart_type='Object'), |
767 'DOMTimeStamp': PrimitiveIDLTypeInfo('DOMTimeStamp', dart_type='int', native
_type='unsigned long long'), | 776 'DOMTimeStamp': TypeData(clazz='Primitive', dart_type='int', native_type='un
signed long long'), |
768 'object': PrimitiveIDLTypeInfo('object', dart_type='Object', native_type='Sc
riptValue'), | 777 'object': TypeData(clazz='Primitive', dart_type='Object', native_type='Scrip
tValue'), |
769 'PositionOptions': PrimitiveIDLTypeInfo('PositionOptions', dart_type='Object
'), | 778 'PositionOptions': TypeData(clazz='Primitive', dart_type='Object'), |
770 # TODO(sra): Come up with some meaningful name so that where this appears in | 779 # TODO(sra): Come up with some meaningful name so that where this appears in |
771 # the documentation, the user is made aware that only a limited subset of | 780 # the documentation, the user is made aware that only a limited subset of |
772 # serializable types are actually permitted. | 781 # serializable types are actually permitted. |
773 'SerializedScriptValue': PrimitiveIDLTypeInfo('SerializedScriptValue', dart_
type='Dynamic'), | 782 'SerializedScriptValue': TypeData(clazz='Primitive', dart_type='Dynamic'), |
774 # TODO(sra): Flags is really a dictionary: {create:bool, exclusive:bool} | 783 # TODO(sra): Flags is really a dictionary: {create:bool, exclusive:bool} |
775 # http://dev.w3.org/2009/dap/file-system/file-dir-sys.html#the-flags-interfa
ce | 784 # http://dev.w3.org/2009/dap/file-system/file-dir-sys.html#the-flags-interfa
ce |
776 'WebKitFlags': PrimitiveIDLTypeInfo('WebKitFlags', dart_type='Object'), | 785 'WebKitFlags': TypeData(clazz='Primitive', dart_type='Object'), |
777 | 786 |
778 'sequence': PrimitiveIDLTypeInfo('sequence', dart_type='List'), | 787 'sequence': TypeData(clazz='Primitive', dart_type='List'), |
779 'void': PrimitiveIDLTypeInfo('void', dart_type='void'), | 788 'void': TypeData(clazz='Primitive', dart_type='void'), |
780 | 789 |
781 'CSSRule': IDLTypeInfo('CSSRule', conversion_includes=['CSSImportRule']), | 790 'CSSRule': TypeData(clazz='Interface', conversion_includes=['CSSImportRule']
), |
782 'DOMException': IDLTypeInfo('DOMException', native_type='DOMCoreException'), | 791 'DOMException': TypeData(clazz='Interface', native_type='DOMCoreException'), |
783 'DOMString[]': DOMStringArrayTypeInfo(), | 792 'DOMStringList': TypeData(clazz='Interface', dart_type='List<String>', custo
m_to_native=True), |
784 'DOMStringList': IDLTypeInfo('DOMStringList', dart_type='List<String>', cust
om_to_native=True), | 793 'DOMStringMap': TypeData(clazz='Interface', dart_type='Map<String, String>')
, |
785 'DOMStringMap': IDLTypeInfo('DOMStringMap', dart_type='Map<String, String>')
, | 794 'DOMWindow': TypeData(clazz='Interface', custom_to_dart=True), |
786 'DOMWindow': IDLTypeInfo('DOMWindow', custom_to_dart=True), | 795 'Element': TypeData(clazz='Interface', custom_to_dart=True), |
787 'Element': IDLTypeInfo('Element', custom_to_dart=True), | 796 'EventListener': TypeData(clazz='Interface', custom_to_native=True), |
788 'EventListener': IDLTypeInfo('EventListener', custom_to_native=True), | 797 'EventTarget': TypeData(clazz='Interface', custom_to_native=True), |
789 'EventTarget': IDLTypeInfo('EventTarget', custom_to_native=True), | 798 'HTMLElement': TypeData(clazz='Interface', custom_to_dart=True), |
790 'HTMLElement': IDLTypeInfo('HTMLElement', custom_to_dart=True), | 799 'IDBAny': TypeData(clazz='Interface', dart_type='Dynamic', custom_to_native=
True), |
791 'IDBAny': IDLTypeInfo('IDBAny', dart_type='Dynamic', custom_to_native=True), | 800 'IDBKey': TypeData(clazz='Interface', dart_type='Dynamic', custom_to_native=
True), |
792 'IDBKey': IDLTypeInfo('IDBKey', dart_type='Dynamic', custom_to_native=True), | 801 'StyleSheet': TypeData(clazz='Interface', conversion_includes=['CSSStyleShee
t']), |
793 'StyleSheet': IDLTypeInfo('StyleSheet', conversion_includes=['CSSStyleSheet'
]), | 802 'SVGElement': TypeData(clazz='Interface', custom_to_dart=True), |
794 'SVGElement': IDLTypeInfo('SVGElement', custom_to_dart=True), | |
795 | 803 |
796 'SVGAngle': SVGTearOffIDLTypeInfo('SVGAngle'), | 804 'SVGAngle': TypeData(clazz='SVGTearOff'), |
797 'SVGLength': SVGTearOffIDLTypeInfo('SVGLength'), | 805 'SVGLength': TypeData(clazz='SVGTearOff'), |
798 'SVGLengthList': SVGTearOffIDLTypeInfo('SVGLengthList'), | 806 'SVGLengthList': TypeData(clazz='SVGTearOff'), |
799 'SVGMatrix': SVGTearOffIDLTypeInfo('SVGMatrix'), | 807 'SVGMatrix': TypeData(clazz='SVGTearOff'), |
800 'SVGNumber': SVGTearOffIDLTypeInfo('SVGNumber', native_type='SVGPropertyTear
Off<float>'), | 808 'SVGNumber': TypeData(clazz='SVGTearOff', native_type='SVGPropertyTearOff<fl
oat>'), |
801 'SVGNumberList': SVGTearOffIDLTypeInfo('SVGNumberList'), | 809 'SVGNumberList': TypeData(clazz='SVGTearOff'), |
802 'SVGPathSegList': SVGTearOffIDLTypeInfo('SVGPathSegList', native_type='SVGPa
thSegListPropertyTearOff'), | 810 'SVGPathSegList': TypeData(clazz='SVGTearOff', native_type='SVGPathSegListPr
opertyTearOff'), |
803 'SVGPoint': SVGTearOffIDLTypeInfo('SVGPoint', native_type='SVGPropertyTearOf
f<FloatPoint>'), | 811 'SVGPoint': TypeData(clazz='SVGTearOff', native_type='SVGPropertyTearOff<Flo
atPoint>'), |
804 'SVGPointList': SVGTearOffIDLTypeInfo('SVGPointList'), | 812 'SVGPointList': TypeData(clazz='SVGTearOff'), |
805 'SVGPreserveAspectRatio': SVGTearOffIDLTypeInfo('SVGPreserveAspectRatio'), | 813 'SVGPreserveAspectRatio': TypeData(clazz='SVGTearOff'), |
806 'SVGRect': SVGTearOffIDLTypeInfo('SVGRect', native_type='SVGPropertyTearOff<
FloatRect>'), | 814 'SVGRect': TypeData(clazz='SVGTearOff', native_type='SVGPropertyTearOff<Floa
tRect>'), |
807 'SVGStringList': SVGTearOffIDLTypeInfo('SVGStringList', native_type='SVGStat
icListPropertyTearOff<SVGStringList>'), | 815 'SVGStringList': TypeData(clazz='SVGTearOff', native_type='SVGStaticListProp
ertyTearOff<SVGStringList>'), |
808 'SVGTransform': SVGTearOffIDLTypeInfo('SVGTransform'), | 816 'SVGTransform': TypeData(clazz='SVGTearOff'), |
809 'SVGTransformList': SVGTearOffIDLTypeInfo('SVGTransformList', native_type='S
VGTransformListPropertyTearOff') | 817 'SVGTransformList': TypeData(clazz='SVGTearOff', native_type='SVGTransformLi
stPropertyTearOff') |
810 } | 818 } |
811 | 819 |
812 _svg_supplemental_includes = [ | 820 _svg_supplemental_includes = [ |
813 '"SVGAnimatedPropertyTearOff.h"', | 821 '"SVGAnimatedPropertyTearOff.h"', |
814 '"SVGAnimatedListPropertyTearOff.h"', | 822 '"SVGAnimatedListPropertyTearOff.h"', |
815 '"SVGStaticListPropertyTearOff.h"', | 823 '"SVGStaticListPropertyTearOff.h"', |
816 '"SVGAnimatedListPropertyTearOff.h"', | 824 '"SVGAnimatedListPropertyTearOff.h"', |
817 '"SVGTransformListPropertyTearOff.h"', | 825 '"SVGTransformListPropertyTearOff.h"', |
818 '"SVGPathSegListPropertyTearOff.h"', | 826 '"SVGPathSegListPropertyTearOff.h"', |
819 ] | 827 ] |
820 | 828 |
821 def GetIDLTypeInfo(idl_type_name): | 829 class TypeRegistry(object): |
822 type_info = _idl_type_registry.get(idl_type_name) | 830 def __init__(self): |
823 if type_info is not None: | 831 self._cache = {} |
824 return type_info | |
825 | 832 |
826 match = re.match(r'sequence<(\w+)>$', idl_type_name) | 833 def TypeInfo(self, type_name): |
827 if match: | 834 if not type_name in self._cache: |
828 return SequenceIDLTypeInfo(idl_type_name, GetIDLTypeInfo(match.group(1))) | 835 self._cache[type_name] = self._TypeInfo(type_name) |
| 836 return self._cache[type_name] |
829 | 837 |
830 match = re.match(r'(\w+)\[\]$', idl_type_name) | 838 def _TypeInfo(self, type_name): |
831 if match: | 839 match = re.match(r'(?:sequence<(\w+)>|(\w+)\[\])$', type_name) |
832 return SequenceIDLTypeInfo(idl_type_name, GetIDLTypeInfo(match.group(1))) | 840 if match: |
833 | 841 if type_name == 'DOMString[]': |
834 return IDLTypeInfo(idl_type_name) | 842 return DOMStringArrayTypeInfo(self.TypeInfo('DOMString')) |
| 843 return SequenceIDLTypeInfo(type_name, self.TypeInfo(match.group(1) or matc
h.group(2))) |
| 844 if not type_name in _idl_type_registry: |
| 845 return InterfaceIDLTypeInfo(type_name, TypeData('Interface')) |
| 846 type_data = _idl_type_registry.get(type_name) |
| 847 class_name = '%sIDLTypeInfo' % type_data.clazz |
| 848 return globals()[class_name](type_name, type_data) |
OLD | NEW |