OLD | NEW |
1 # Copyright 2014 The Chromium Authors. All rights reserved. | 1 # Copyright 2014 The Chromium Authors. All rights reserved. |
2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
4 """IDL type handling. | 4 """IDL type handling. |
5 | 5 |
6 Classes: | 6 Classes: |
7 IdlType | 7 IdlType |
8 IdlUnionType | 8 IdlUnionType |
9 """ | 9 """ |
10 | 10 |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
63 'unrestricted float': 'UnrestrictedFloat', | 63 'unrestricted float': 'UnrestrictedFloat', |
64 'double': 'Double', | 64 'double': 'Double', |
65 'unrestricted double': 'UnrestrictedDouble', | 65 'unrestricted double': 'UnrestrictedDouble', |
66 'DOMString': 'String', | 66 'DOMString': 'String', |
67 'ByteString': 'ByteString', | 67 'ByteString': 'ByteString', |
68 'ScalarValueString': 'ScalarValueString', | 68 'ScalarValueString': 'ScalarValueString', |
69 'object': 'Object', | 69 'object': 'Object', |
70 'Date': 'Date', | 70 'Date': 'Date', |
71 } | 71 } |
72 | 72 |
| 73 STRING_TYPES = frozenset([ |
| 74 # http://heycam.github.io/webidl/#es-interface-call (step 10.11) |
| 75 # (Interface object [[Call]] method's string types.) |
| 76 'String', |
| 77 'ByteString', |
| 78 'ScalarValueString', |
| 79 ]) |
| 80 |
73 | 81 |
74 ################################################################################ | 82 ################################################################################ |
75 # Inheritance | 83 # Inheritance |
76 ################################################################################ | 84 ################################################################################ |
77 | 85 |
78 ancestors = defaultdict(list) # interface_name -> ancestors | 86 ancestors = defaultdict(list) # interface_name -> ancestors |
79 | 87 |
80 def inherits_interface(interface_name, ancestor_name): | 88 def inherits_interface(interface_name, ancestor_name): |
81 return (interface_name == ancestor_name or | 89 return (interface_name == ancestor_name or |
82 ancestor_name in ancestors[interface_name]) | 90 ancestor_name in ancestors[interface_name]) |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
188 # http://www.w3.org/TR/WebIDL/#idl-interface | 196 # http://www.w3.org/TR/WebIDL/#idl-interface |
189 # In C++ these are RefPtr or PassRefPtr types. | 197 # In C++ these are RefPtr or PassRefPtr types. |
190 return not(self.is_basic_type or | 198 return not(self.is_basic_type or |
191 self.is_composite_type or | 199 self.is_composite_type or |
192 self.is_callback_function or | 200 self.is_callback_function or |
193 self.is_enum or | 201 self.is_enum or |
194 self.name == 'Object' or | 202 self.name == 'Object' or |
195 self.name == 'Promise') # Promise will be basic in future | 203 self.name == 'Promise') # Promise will be basic in future |
196 | 204 |
197 @property | 205 @property |
| 206 def is_string_type(self): |
| 207 return self.base_type_name in STRING_TYPES |
| 208 |
| 209 @property |
| 210 def may_raise_exception_on_conversion(self): |
| 211 return (self.is_integer_type or |
| 212 self.name in ('ByteString', 'ScalarValueString')) |
| 213 |
| 214 @property |
198 def is_union_type(self): | 215 def is_union_type(self): |
199 return isinstance(self, IdlUnionType) | 216 return isinstance(self, IdlUnionType) |
200 | 217 |
201 @property | 218 @property |
| 219 def base_type_name(self): |
| 220 base_type = self.base_type |
| 221 return TYPE_NAMES.get(base_type, base_type) |
| 222 |
| 223 @property |
202 def name(self): | 224 def name(self): |
203 """Return type name. | 225 """Return type name. |
204 | 226 |
205 http://heycam.github.io/webidl/#dfn-type-name | 227 http://heycam.github.io/webidl/#dfn-type-name |
206 """ | 228 """ |
207 base_type = self.base_type | 229 base_type_name = self.base_type_name |
208 base_type_name = TYPE_NAMES.get(base_type, base_type) | |
209 if self.is_array: | 230 if self.is_array: |
210 return base_type_name + 'Array' | 231 return base_type_name + 'Array' |
211 if self.is_sequence: | 232 if self.is_sequence: |
212 return base_type_name + 'Sequence' | 233 return base_type_name + 'Sequence' |
213 if self.is_nullable: | 234 if self.is_nullable: |
214 return base_type_name + 'OrNull' | 235 return base_type_name + 'OrNull' |
215 return base_type_name | 236 return base_type_name |
216 | 237 |
217 @classmethod | 238 @classmethod |
218 def set_callback_functions(cls, new_callback_functions): | 239 def set_callback_functions(cls, new_callback_functions): |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
312 | 333 |
313 @property | 334 @property |
314 def name(self): | 335 def name(self): |
315 return 'Or'.join(member_type.name for member_type in self.member_types) | 336 return 'Or'.join(member_type.name for member_type in self.member_types) |
316 | 337 |
317 def resolve_typedefs(self, typedefs): | 338 def resolve_typedefs(self, typedefs): |
318 self.member_types = [ | 339 self.member_types = [ |
319 typedefs.get(member_type, member_type) | 340 typedefs.get(member_type, member_type) |
320 for member_type in self.member_types] | 341 for member_type in self.member_types] |
321 return self | 342 return self |
OLD | NEW |