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

Side by Side Diff: Source/bindings/scripts/idl_types.py

Issue 409373002: IDL: Binding code generation for dictionaries (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 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
OLDNEW
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 """ 10 """
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
114 114
115 @property 115 @property
116 def is_basic_type(self): 116 def is_basic_type(self):
117 return False 117 return False
118 118
119 @property 119 @property
120 def is_callback_function(self): 120 def is_callback_function(self):
121 return False 121 return False
122 122
123 @property 123 @property
124 def is_dictionary(self):
125 return False
126
127 @property
124 def is_enum(self): 128 def is_enum(self):
125 return False 129 return False
126 130
127 @property 131 @property
128 def is_integer_type(self): 132 def is_integer_type(self):
129 return False 133 return False
130 134
131 @property 135 @property
132 def is_numeric_type(self): 136 def is_numeric_type(self):
133 return False 137 return False
(...skipping 28 matching lines...) Expand all
162 # IdlType 166 # IdlType
163 ################################################################################ 167 ################################################################################
164 168
165 class IdlType(IdlTypeBase): 169 class IdlType(IdlTypeBase):
166 # FIXME: incorporate Nullable, etc. 170 # FIXME: incorporate Nullable, etc.
167 # FIXME: use nested types: IdlArrayType, IdlNullableType, IdlSequenceType 171 # FIXME: use nested types: IdlArrayType, IdlNullableType, IdlSequenceType
168 # to support types like short?[] vs. short[]?, instead of treating these 172 # to support types like short?[] vs. short[]?, instead of treating these
169 # as orthogonal properties (via flags). 173 # as orthogonal properties (via flags).
170 callback_functions = set() 174 callback_functions = set()
171 callback_interfaces = set() 175 callback_interfaces = set()
176 dictionaries = set()
172 enums = {} # name -> values 177 enums = {} # name -> values
173 178
174 def __init__(self, base_type, is_array=False, is_sequence=False, is_nullable =False, is_unrestricted=False): 179 def __init__(self, base_type, is_array=False, is_sequence=False, is_nullable =False, is_unrestricted=False):
175 super(IdlType, self).__init__(is_array=is_array, is_sequence=is_sequence , is_nullable=is_nullable) 180 super(IdlType, self).__init__(is_array=is_array, is_sequence=is_sequence , is_nullable=is_nullable)
176 if is_array and is_sequence: 181 if is_array and is_sequence:
177 raise ValueError('Array of Sequences are not allowed.') 182 raise ValueError('Array of Sequences are not allowed.')
178 if is_unrestricted: 183 if is_unrestricted:
179 self.base_type = 'unrestricted %s' % base_type 184 self.base_type = 'unrestricted %s' % base_type
180 else: 185 else:
181 self.base_type = base_type 186 self.base_type = base_type
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
214 219
215 @property 220 @property
216 def is_callback_function(self): 221 def is_callback_function(self):
217 return self.base_type in IdlType.callback_functions 222 return self.base_type in IdlType.callback_functions
218 223
219 @property 224 @property
220 def is_callback_interface(self): 225 def is_callback_interface(self):
221 return self.base_type in IdlType.callback_interfaces 226 return self.base_type in IdlType.callback_interfaces
222 227
223 @property 228 @property
229 def is_dictionary(self):
230 return self.base_type in IdlType.dictionaries
231
232 @property
224 def is_composite_type(self): 233 def is_composite_type(self):
225 return (self.name == 'Any' or 234 return (self.name == 'Any' or
226 self.array_element_type or 235 self.array_element_type or
227 self.sequence_element_type or 236 self.sequence_element_type or
228 self.is_union_type) 237 self.is_union_type)
229 238
230 @property 239 @property
231 def is_enum(self): 240 def is_enum(self):
232 # FIXME: add an IdlEnumType class and a resolve_enums step at end of 241 # FIXME: add an IdlEnumType class and a resolve_enums step at end of
233 # IdlDefinitions constructor 242 # IdlDefinitions constructor
(...skipping 17 matching lines...) Expand all
251 260
252 @property 261 @property
253 def is_interface_type(self): 262 def is_interface_type(self):
254 # Anything that is not another type is an interface type. 263 # Anything that is not another type is an interface type.
255 # http://www.w3.org/TR/WebIDL/#idl-types 264 # http://www.w3.org/TR/WebIDL/#idl-types
256 # http://www.w3.org/TR/WebIDL/#idl-interface 265 # http://www.w3.org/TR/WebIDL/#idl-interface
257 # In C++ these are RefPtr or PassRefPtr types. 266 # In C++ these are RefPtr or PassRefPtr types.
258 return not(self.is_basic_type or 267 return not(self.is_basic_type or
259 self.is_composite_type or 268 self.is_composite_type or
260 self.is_callback_function or 269 self.is_callback_function or
270 self.is_dictionary or
261 self.is_enum or 271 self.is_enum or
262 self.name == 'Object' or 272 self.name == 'Object' or
263 self.name == 'Promise') # Promise will be basic in future 273 self.name == 'Promise') # Promise will be basic in future
264 274
265 @property 275 @property
266 def is_string_type(self): 276 def is_string_type(self):
267 return self.base_type_name in STRING_TYPES 277 return self.base_type_name in STRING_TYPES
268 278
269 @property 279 @property
270 def may_raise_exception_on_conversion(self): 280 def may_raise_exception_on_conversion(self):
(...skipping 26 matching lines...) Expand all
297 307
298 @classmethod 308 @classmethod
299 def set_callback_functions(cls, new_callback_functions): 309 def set_callback_functions(cls, new_callback_functions):
300 cls.callback_functions.update(new_callback_functions) 310 cls.callback_functions.update(new_callback_functions)
301 311
302 @classmethod 312 @classmethod
303 def set_callback_interfaces(cls, new_callback_interfaces): 313 def set_callback_interfaces(cls, new_callback_interfaces):
304 cls.callback_interfaces.update(new_callback_interfaces) 314 cls.callback_interfaces.update(new_callback_interfaces)
305 315
306 @classmethod 316 @classmethod
317 def set_dictionaries(cls, new_dictionaries):
318 cls.dictionaries.update(new_dictionaries)
319
320 @classmethod
307 def set_enums(cls, new_enums): 321 def set_enums(cls, new_enums):
308 cls.enums.update(new_enums) 322 cls.enums.update(new_enums)
309 323
310 def resolve_typedefs(self, typedefs): 324 def resolve_typedefs(self, typedefs):
311 if self.base_type not in typedefs: 325 if self.base_type not in typedefs:
312 return self 326 return self
313 new_type = typedefs[self.base_type] 327 new_type = typedefs[self.base_type]
314 if type(new_type) != type(self): 328 if type(new_type) != type(self):
315 # If type changes, need to return a different object, 329 # If type changes, need to return a different object,
316 # since can't change type(self) 330 # since can't change type(self)
(...skipping 28 matching lines...) Expand all
345 359
346 @property 360 @property
347 def name(self): 361 def name(self):
348 return 'Or'.join(member_type.name for member_type in self.member_types) 362 return 'Or'.join(member_type.name for member_type in self.member_types)
349 363
350 def resolve_typedefs(self, typedefs): 364 def resolve_typedefs(self, typedefs):
351 self.member_types = [ 365 self.member_types = [
352 typedefs.get(member_type, member_type) 366 typedefs.get(member_type, member_type)
353 for member_type in self.member_types] 367 for member_type in self.member_types]
354 return self 368 return self
OLDNEW
« no previous file with comments | « Source/bindings/scripts/idl_reader.py ('k') | Source/bindings/scripts/interface_dependency_resolver.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698