| 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 json | 10 import json |
| 11 import monitored | 11 import monitored |
| 12 import os | 12 import os |
| 13 import re | 13 import re |
| 14 from htmlrenamer import html_interface_renames, typed_array_renames | 14 from htmlrenamer import html_interface_renames, typed_array_renames |
| 15 | 15 |
| 16 _pure_interfaces = monitored.Set('generator._pure_interfaces', [ | 16 _pure_interfaces = monitored.Set('generator._pure_interfaces', [ |
| 17 # TODO(sra): DOMStringMap should be a class implementing Map<String,String>. | 17 # TODO(sra): DOMStringMap should be a class implementing Map<String,String>. |
| 18 'DOMStringMap', | 18 'DOMStringMap', |
| 19 'ChildNode', | 19 'ChildNode', |
| 20 'ElementTimeControl', | 20 'ElementTimeControl', |
| 21 'EventListener', | 21 'EventListener', |
| 22 'FileException', |
| 22 'MediaQueryListListener', | 23 'MediaQueryListListener', |
| 23 'MutationCallback', | 24 'MutationCallback', |
| 24 'ParentNode', | 25 'ParentNode', |
| 25 'SVGExternalResourcesRequired', | 26 'SVGExternalResourcesRequired', |
| 26 'SVGFilterPrimitiveStandardAttributes', | 27 'SVGFilterPrimitiveStandardAttributes', |
| 27 'SVGFitToViewBox', | 28 'SVGFitToViewBox', |
| 28 'SVGLangSpace', | 29 'SVGLangSpace', |
| 29 'SVGLocatable', | 30 'SVGLocatable', |
| 30 'SVGTests', | 31 'SVGTests', |
| 31 'SVGTransformable', | 32 'SVGTransformable', |
| 32 'SVGURIReference', | 33 'SVGURIReference', |
| 33 'SVGZoomAndPan', | 34 'SVGZoomAndPan', |
| 34 'TimeoutHandler', | 35 'TimeoutHandler', |
| 36 'WindowBase64', |
| 35 'WindowTimers', | 37 'WindowTimers', |
| 36 'WorkerPerformance', | |
| 37 ]) | 38 ]) |
| 38 | 39 |
| 39 def IsPureInterface(interface_name): | 40 def IsPureInterface(interface_name): |
| 40 return interface_name in _pure_interfaces | 41 return interface_name in _pure_interfaces |
| 41 | 42 |
| 42 # | 43 # |
| 43 # Classes which have native constructors but which we are suppressing because | 44 # Classes which have native constructors but which we are suppressing because |
| 44 # they are not cross-platform. | 45 # they are not cross-platform. |
| 45 # | 46 # |
| 46 _suppressed_native_constructors = monitored.Set( | 47 _suppressed_native_constructors = monitored.Set( |
| (...skipping 640 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 687 if self._idl_type in WTF_INCLUDES: | 688 if self._idl_type in WTF_INCLUDES: |
| 688 return ['<wtf/%s.h>' % self.native_type()] | 689 return ['<wtf/%s.h>' % self.native_type()] |
| 689 | 690 |
| 690 # TODO(vsm): Why does this need special casing? | 691 # TODO(vsm): Why does this need special casing? |
| 691 if self._idl_type == 'AnalyserNode': | 692 if self._idl_type == 'AnalyserNode': |
| 692 return ['"AnalyserNode.h"', '<wtf/Uint8Array.h>'] | 693 return ['"AnalyserNode.h"', '<wtf/Uint8Array.h>'] |
| 693 | 694 |
| 694 if not self._idl_type.startswith('SVG'): | 695 if not self._idl_type.startswith('SVG'): |
| 695 return ['"%s.h"' % self.native_type()] | 696 return ['"%s.h"' % self.native_type()] |
| 696 | 697 |
| 697 if self._idl_type in ['SVGNumber', 'SVGPoint']: | 698 include = self._idl_type |
| 698 return ['"SVGPropertyTearOff.h"'] | |
| 699 if self._idl_type.startswith('SVGPathSeg'): | |
| 700 include = self._idl_type.replace('Abs', '').replace('Rel', '') | |
| 701 else: | |
| 702 include = self._idl_type | |
| 703 return ['"%s.h"' % include] + _svg_supplemental_includes | 699 return ['"%s.h"' % include] + _svg_supplemental_includes |
| 704 | 700 |
| 705 def receiver(self): | 701 def receiver(self): |
| 706 return 'receiver->' | 702 return 'receiver->' |
| 707 | 703 |
| 708 def conversion_includes(self): | 704 def conversion_includes(self): |
| 709 includes = [self._idl_type] + (self._data.conversion_includes or []) | 705 includes = [self._idl_type] + (self._data.conversion_includes or []) |
| 710 return ['"Dart%s.h"' % include for include in includes] | 706 return ['"Dart%s.h"' % include for include in includes] |
| 711 | 707 |
| 712 def to_dart_conversion(self, value, interface_name=None, attributes=None): | 708 def to_dart_conversion(self, value, interface_name=None, attributes=None): |
| (...skipping 388 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1101 'Uint16Array': TypedListTypeData('int'), | 1097 'Uint16Array': TypedListTypeData('int'), |
| 1102 'Uint32Array': TypedListTypeData('int'), | 1098 'Uint32Array': TypedListTypeData('int'), |
| 1103 | 1099 |
| 1104 'ArrayBufferView': TypeData(clazz='BasicTypedList'), | 1100 'ArrayBufferView': TypeData(clazz='BasicTypedList'), |
| 1105 'ArrayBuffer': TypeData(clazz='BasicTypedList'), | 1101 'ArrayBuffer': TypeData(clazz='BasicTypedList'), |
| 1106 | 1102 |
| 1107 'SVGAngle': TypeData(clazz='SVGTearOff'), | 1103 'SVGAngle': TypeData(clazz='SVGTearOff'), |
| 1108 'SVGLength': TypeData(clazz='SVGTearOff'), | 1104 'SVGLength': TypeData(clazz='SVGTearOff'), |
| 1109 'SVGLengthList': TypeData(clazz='SVGTearOff', item_type='SVGLength'), | 1105 'SVGLengthList': TypeData(clazz='SVGTearOff', item_type='SVGLength'), |
| 1110 'SVGMatrix': TypeData(clazz='SVGTearOff'), | 1106 'SVGMatrix': TypeData(clazz='SVGTearOff'), |
| 1111 'SVGNumber': TypeData(clazz='SVGTearOff', native_type='SVGPropertyTearOff<fl
oat>'), | 1107 'SVGNumber': TypeData(clazz='SVGTearOff', native_type='SVGPropertyTearOff<SV
GNumber>'), |
| 1112 'SVGNumberList': TypeData(clazz='SVGTearOff', item_type='SVGNumber'), | 1108 'SVGNumberList': TypeData(clazz='SVGTearOff', item_type='SVGNumber'), |
| 1113 'SVGPathSegList': TypeData(clazz='SVGTearOff', item_type='SVGPathSeg', | 1109 'SVGPathSegList': TypeData(clazz='SVGTearOff', item_type='SVGPathSeg', |
| 1114 native_type='SVGPathSegListPropertyTearOff'), | 1110 native_type='SVGPathSegListPropertyTearOff'), |
| 1115 'SVGPoint': TypeData(clazz='SVGTearOff', native_type='SVGPropertyTearOff<Flo
atPoint>'), | 1111 'SVGPoint': TypeData(clazz='SVGTearOff', native_type='SVGPropertyTearOff<Flo
atPoint>'), |
| 1116 'SVGPointList': TypeData(clazz='SVGTearOff'), | 1112 'SVGPointList': TypeData(clazz='SVGTearOff'), |
| 1117 'SVGPreserveAspectRatio': TypeData(clazz='SVGTearOff'), | 1113 'SVGPreserveAspectRatio': TypeData(clazz='SVGTearOff'), |
| 1118 'SVGRect': TypeData(clazz='SVGTearOff', native_type='SVGPropertyTearOff<Floa
tRect>'), | 1114 'SVGRect': TypeData(clazz='SVGTearOff', native_type='SVGPropertyTearOff<Floa
tRect>'), |
| 1119 'SVGStringList': TypeData(clazz='SVGTearOff', item_type='DOMString', | 1115 'SVGStringList': TypeData(clazz='SVGTearOff', item_type='DOMString', |
| 1120 native_type='SVGStaticListPropertyTearOff<SVGStringList>'), | 1116 native_type='SVGStaticListPropertyTearOff<SVGStringList>'), |
| 1121 'SVGTransform': TypeData(clazz='SVGTearOff'), | 1117 'SVGTransform': TypeData(clazz='SVGTearOff'), |
| (...skipping 21 matching lines...) Expand all Loading... |
| 1143 self._cache[type_name] = self._TypeInfo(type_name) | 1139 self._cache[type_name] = self._TypeInfo(type_name) |
| 1144 return self._cache[type_name] | 1140 return self._cache[type_name] |
| 1145 | 1141 |
| 1146 def DartType(self, type_name): | 1142 def DartType(self, type_name): |
| 1147 return self.TypeInfo(type_name).dart_type() | 1143 return self.TypeInfo(type_name).dart_type() |
| 1148 | 1144 |
| 1149 def _TypeInfo(self, type_name): | 1145 def _TypeInfo(self, type_name): |
| 1150 match = re.match(r'(?:sequence<(\w+)>|(\w+)\[\])$', type_name) | 1146 match = re.match(r'(?:sequence<(\w+)>|(\w+)\[\])$', type_name) |
| 1151 if match: | 1147 if match: |
| 1152 type_data = TypeData('Sequence') | 1148 type_data = TypeData('Sequence') |
| 1153 if type_name == 'DOMString[]': | |
| 1154 return DOMStringArrayTypeInfo(type_data, self.TypeInfo('DOMString')) | |
| 1155 item_info = self.TypeInfo(match.group(1) or match.group(2)) | 1149 item_info = self.TypeInfo(match.group(1) or match.group(2)) |
| 1156 # TODO(vsm): Generalize this code. | 1150 # TODO(vsm): Generalize this code. |
| 1157 if 'SourceInfo' in type_name: | 1151 if 'SourceInfo' in type_name: |
| 1158 type_data.native_type = 'Vector<RefPtr<SourceInfo> >' | 1152 type_data.native_type = 'Vector<RefPtr<SourceInfo> >' |
| 1159 return SequenceIDLTypeInfo(type_name, type_data, item_info) | 1153 return SequenceIDLTypeInfo(type_name, type_data, item_info) |
| 1160 | 1154 |
| 1161 if not type_name in _idl_type_registry: | 1155 if not type_name in _idl_type_registry: |
| 1162 if self._database.HasEnum(type_name): | 1156 if self._database.HasEnum(type_name): |
| 1163 return PrimitiveIDLTypeInfo( | 1157 return PrimitiveIDLTypeInfo( |
| 1164 type_name, | 1158 type_name, |
| (...skipping 26 matching lines...) Expand all Loading... |
| 1191 return SVGTearOffIDLTypeInfo( | 1185 return SVGTearOffIDLTypeInfo( |
| 1192 type_name, type_data, dart_interface_name, self) | 1186 type_name, type_data, dart_interface_name, self) |
| 1193 | 1187 |
| 1194 if type_data.clazz == 'TypedList': | 1188 if type_data.clazz == 'TypedList': |
| 1195 dart_interface_name = self._renamer.RenameInterface( | 1189 dart_interface_name = self._renamer.RenameInterface( |
| 1196 self._database.GetInterface(type_name)) | 1190 self._database.GetInterface(type_name)) |
| 1197 return TypedListIDLTypeInfo( | 1191 return TypedListIDLTypeInfo( |
| 1198 type_name, type_data, dart_interface_name, self) | 1192 type_name, type_data, dart_interface_name, self) |
| 1199 | 1193 |
| 1200 if type_data.clazz == 'BasicTypedList': | 1194 if type_data.clazz == 'BasicTypedList': |
| 1201 dart_interface_name = self._renamer.RenameInterface( | 1195 if type_name == 'ArrayBuffer': |
| 1202 self._database.GetInterface(type_name)) | 1196 dart_interface_name = 'ByteBuffer' |
| 1197 else: |
| 1198 dart_interface_name = self._renamer.RenameInterface( |
| 1199 self._database.GetInterface(type_name)) |
| 1203 return BasicTypedListIDLTypeInfo( | 1200 return BasicTypedListIDLTypeInfo( |
| 1204 type_name, type_data, dart_interface_name, self) | 1201 type_name, type_data, dart_interface_name, self) |
| 1205 | 1202 |
| 1206 class_name = '%sIDLTypeInfo' % type_data.clazz | 1203 class_name = '%sIDLTypeInfo' % type_data.clazz |
| 1207 return globals()[class_name](type_name, type_data) | 1204 return globals()[class_name](type_name, type_data) |
| OLD | NEW |