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 IdlTypeBase | 7 IdlTypeBase |
8 IdlType | 8 IdlType |
9 IdlUnionType | 9 IdlUnionType |
10 IdlArrayOrSequenceType | 10 IdlArrayOrSequenceType |
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
266 'member_types': self.member_types, | 266 'member_types': self.member_types, |
267 } | 267 } |
268 | 268 |
269 def __setstate__(self, state): | 269 def __setstate__(self, state): |
270 self.member_types = state['member_types'] | 270 self.member_types = state['member_types'] |
271 | 271 |
272 @property | 272 @property |
273 def is_union_type(self): | 273 def is_union_type(self): |
274 return True | 274 return True |
275 | 275 |
| 276 def single_matching_member_type(self, predicate): |
| 277 matching_types = filter(predicate, self.member_types) |
| 278 if len(matching_types) > 1: |
| 279 raise "%s is ambigious." % self.name |
| 280 return matching_types[0] if matching_types else None |
| 281 |
| 282 @property |
| 283 def string_member_type(self): |
| 284 return self.single_matching_member_type( |
| 285 lambda member_type: (member_type.is_string_type or |
| 286 member_type.is_enum)) |
| 287 |
| 288 @property |
| 289 def numeric_member_type(self): |
| 290 return self.single_matching_member_type( |
| 291 lambda member_type: member_type.is_numeric_type) |
| 292 |
| 293 @property |
| 294 def boolean_member_type(self): |
| 295 return self.single_matching_member_type( |
| 296 lambda member_type: member_type.base_type == 'boolean') |
| 297 |
276 @property | 298 @property |
277 def as_union_type(self): | 299 def as_union_type(self): |
278 # Note: Use this to "look through" a possible IdlNullableType wrapper. | 300 # Note: Use this to "look through" a possible IdlNullableType wrapper. |
279 return self | 301 return self |
280 | 302 |
281 @property | 303 @property |
282 def name(self): | 304 def name(self): |
283 """Return type name (or inner type name if nullable) | 305 """Return type name (or inner type name if nullable) |
284 | 306 |
285 http://heycam.github.io/webidl/#dfn-type-name | 307 http://heycam.github.io/webidl/#dfn-type-name |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
373 def is_nullable(self): | 395 def is_nullable(self): |
374 return True | 396 return True |
375 | 397 |
376 @property | 398 @property |
377 def name(self): | 399 def name(self): |
378 return self.inner_type.name + 'OrNull' | 400 return self.inner_type.name + 'OrNull' |
379 | 401 |
380 def resolve_typedefs(self, typedefs): | 402 def resolve_typedefs(self, typedefs): |
381 self.inner_type = self.inner_type.resolve_typedefs(typedefs) | 403 self.inner_type = self.inner_type.resolve_typedefs(typedefs) |
382 return self | 404 return self |
OLD | NEW |