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 |
11 from collections import defaultdict | 11 from collections import defaultdict |
12 | 12 |
13 | 13 |
14 ################################################################################ | 14 ################################################################################ |
15 # IDL types | 15 # IDL types |
16 ################################################################################ | 16 ################################################################################ |
17 | 17 |
18 BASIC_TYPES = set([ | 18 BASIC_TYPES = set([ |
19 # Built-in, non-composite, non-object data types | 19 # Built-in, non-composite, non-object data types |
20 # http://www.w3.org/TR/WebIDL/#dfn-primitive-type | 20 # http://www.w3.org/TR/WebIDL/#dfn-primitive-type |
21 'boolean', | 21 'boolean', |
22 'float', | 22 'float', |
23 # unrestricted float is not supported | 23 'unrestricted float', |
24 'double', | 24 'double', |
25 # unrestricted double is not supported | 25 'unrestricted double', |
26 # http://www.w3.org/TR/WebIDL/#idl-types | 26 # http://www.w3.org/TR/WebIDL/#idl-types |
27 'DOMString', | 27 'DOMString', |
28 'Date', | 28 'Date', |
29 # http://www.w3.org/TR/WebIDL/#es-type-mapping | 29 # http://www.w3.org/TR/WebIDL/#es-type-mapping |
30 'void', | 30 'void', |
31 ]) | 31 ]) |
32 INTEGER_TYPES = frozenset([ | 32 INTEGER_TYPES = frozenset([ |
33 # http://www.w3.org/TR/WebIDL/#dfn-integer-type | 33 # http://www.w3.org/TR/WebIDL/#dfn-integer-type |
34 'byte', | 34 'byte', |
35 'octet', | 35 'octet', |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
85 | 85 |
86 class IdlType(object): | 86 class IdlType(object): |
87 # FIXME: incorporate Nullable, etc. | 87 # FIXME: incorporate Nullable, etc. |
88 # FIXME: use nested types: IdlArrayType, IdlNullableType, IdlSequenceType | 88 # FIXME: use nested types: IdlArrayType, IdlNullableType, IdlSequenceType |
89 # to support types like short?[] vs. short[]?, instead of treating these | 89 # to support types like short?[] vs. short[]?, instead of treating these |
90 # as orthogonal properties (via flags). | 90 # as orthogonal properties (via flags). |
91 callback_functions = set() | 91 callback_functions = set() |
92 callback_interfaces = set() | 92 callback_interfaces = set() |
93 enums = {} # name -> values | 93 enums = {} # name -> values |
94 | 94 |
95 def __init__(self, base_type, is_array=False, is_sequence=False, is_nullable
=False): | 95 def __init__(self, base_type, is_array=False, is_sequence=False, is_nullable
=False, is_unrestricted=False): |
96 if is_array and is_sequence: | 96 if is_array and is_sequence: |
97 raise ValueError('Array of Sequences are not allowed.') | 97 raise ValueError('Array of Sequences are not allowed.') |
98 self.base_type = base_type | 98 if is_unrestricted: |
| 99 self.base_type = 'unrestricted %s' % base_type |
| 100 else: |
| 101 self.base_type = base_type |
99 self.is_array = is_array | 102 self.is_array = is_array |
100 self.is_sequence = is_sequence | 103 self.is_sequence = is_sequence |
101 self.is_nullable = is_nullable | 104 self.is_nullable = is_nullable |
102 | 105 |
103 def __str__(self): | 106 def __str__(self): |
104 type_string = self.base_type | 107 type_string = self.base_type |
105 if self.is_array: | 108 if self.is_array: |
106 return type_string + '[]' | 109 return type_string + '[]' |
107 if self.is_sequence: | 110 if self.is_sequence: |
108 return 'sequence<%s>' % type_string | 111 return 'sequence<%s>' % type_string |
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
286 | 289 |
287 @property | 290 @property |
288 def name(self): | 291 def name(self): |
289 return 'Or'.join(member_type.name for member_type in self.member_types) | 292 return 'Or'.join(member_type.name for member_type in self.member_types) |
290 | 293 |
291 def resolve_typedefs(self, typedefs): | 294 def resolve_typedefs(self, typedefs): |
292 self.member_types = [ | 295 self.member_types = [ |
293 typedefs.get(member_type, member_type) | 296 typedefs.get(member_type, member_type) |
294 for member_type in self.member_types] | 297 for member_type in self.member_types] |
295 return self | 298 return self |
OLD | NEW |