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

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

Issue 1063253005: bindings: Use Visitor to collect union types (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 8 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 | Annotate | Revision Log
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 IdlArrayOrSequenceType 10 IdlArrayOrSequenceType
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
117 def __getattr__(self, name): 117 def __getattr__(self, name):
118 # Default undefined attributes to None (analogous to Jinja variables). 118 # Default undefined attributes to None (analogous to Jinja variables).
119 # This allows us to not define default properties in the base class, and 119 # This allows us to not define default properties in the base class, and
120 # allows us to relay __getattr__ in IdlNullableType to the inner type. 120 # allows us to relay __getattr__ in IdlNullableType to the inner type.
121 return None 121 return None
122 122
123 def resolve_typedefs(self, typedefs): 123 def resolve_typedefs(self, typedefs):
124 raise NotImplementedError( 124 raise NotImplementedError(
125 'resolve_typedefs should be defined in subclasses') 125 'resolve_typedefs should be defined in subclasses')
126 126
127 def idl_types(self):
128 """A generator which yields IdlTypes which are referenced from |self|,
129 including itself."""
130 yield self
131
127 132
128 ################################################################################ 133 ################################################################################
129 # IdlType 134 # IdlType
130 ################################################################################ 135 ################################################################################
131 136
132 class IdlType(IdlTypeBase): 137 class IdlType(IdlTypeBase):
133 # FIXME: incorporate Nullable, etc. 138 # FIXME: incorporate Nullable, etc.
134 # to support types like short?[] vs. short[]?, instead of treating these 139 # to support types like short?[] vs. short[]?, instead of treating these
135 # as orthogonal properties (via flags). 140 # as orthogonal properties (via flags).
136 callback_functions = set(STANDARD_CALLBACK_FUNCTIONS) 141 callback_functions = set(STANDARD_CALLBACK_FUNCTIONS)
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after
314 http://heycam.github.io/webidl/#dfn-type-name 319 http://heycam.github.io/webidl/#dfn-type-name
315 """ 320 """
316 return 'Or'.join(member_type.name for member_type in self.member_types) 321 return 'Or'.join(member_type.name for member_type in self.member_types)
317 322
318 def resolve_typedefs(self, typedefs): 323 def resolve_typedefs(self, typedefs):
319 self.member_types = [ 324 self.member_types = [
320 typedefs.get(member_type, member_type) 325 typedefs.get(member_type, member_type)
321 for member_type in self.member_types] 326 for member_type in self.member_types]
322 return self 327 return self
323 328
329 def idl_types(self):
330 yield self
331 for member_type in self.member_types:
332 for idl_type in member_type.idl_types():
333 yield idl_type
334
324 335
325 ################################################################################ 336 ################################################################################
326 # IdlArrayOrSequenceType, IdlArrayType, IdlSequenceType 337 # IdlArrayOrSequenceType, IdlArrayType, IdlSequenceType
327 ################################################################################ 338 ################################################################################
328 339
329 class IdlArrayOrSequenceType(IdlTypeBase): 340 class IdlArrayOrSequenceType(IdlTypeBase):
330 """Base class for IdlArrayType and IdlSequenceType.""" 341 """Base class for IdlArrayType and IdlSequenceType."""
331 342
332 def __init__(self, element_type): 343 def __init__(self, element_type):
333 super(IdlArrayOrSequenceType, self).__init__() 344 super(IdlArrayOrSequenceType, self).__init__()
(...skipping 16 matching lines...) Expand all
350 return True 361 return True
351 362
352 @property 363 @property
353 def enum_values(self): 364 def enum_values(self):
354 return self.element_type.enum_values 365 return self.element_type.enum_values
355 366
356 @property 367 @property
357 def enum_type(self): 368 def enum_type(self):
358 return self.element_type.enum_type 369 return self.element_type.enum_type
359 370
371 def idl_types(self):
372 yield self
373 for idl_type in self.element_type.idl_types():
374 yield idl_type
375
360 376
361 class IdlArrayType(IdlArrayOrSequenceType): 377 class IdlArrayType(IdlArrayOrSequenceType):
362 def __init__(self, element_type): 378 def __init__(self, element_type):
363 super(IdlArrayType, self).__init__(element_type) 379 super(IdlArrayType, self).__init__(element_type)
364 380
365 def __str__(self): 381 def __str__(self):
366 return '%s[]' % self.element_type 382 return '%s[]' % self.element_type
367 383
368 @property 384 @property
369 def name(self): 385 def name(self):
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
414 def is_nullable(self): 430 def is_nullable(self):
415 return True 431 return True
416 432
417 @property 433 @property
418 def name(self): 434 def name(self):
419 return self.inner_type.name + 'OrNull' 435 return self.inner_type.name + 'OrNull'
420 436
421 def resolve_typedefs(self, typedefs): 437 def resolve_typedefs(self, typedefs):
422 self.inner_type = self.inner_type.resolve_typedefs(typedefs) 438 self.inner_type = self.inner_type.resolve_typedefs(typedefs)
423 return self 439 return self
440
441 def idl_types(self):
442 yield self
443 for idl_type in self.inner_type.idl_types():
444 yield idl_type
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698