Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(132)

Side by Side Diff: lib/dom/scripts/generator.py

Issue 10702202: Introduce TypeRegistry class. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: . Created 8 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
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
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
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
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)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698