OLD | NEW |
1 # Copyright (C) 2013 Google Inc. All rights reserved. | 1 # Copyright (C) 2013 Google Inc. All rights reserved. |
2 # | 2 # |
3 # Redistribution and use in source and binary forms, with or without | 3 # Redistribution and use in source and binary forms, with or without |
4 # modification, are permitted provided that the following conditions are | 4 # modification, are permitted provided that the following conditions are |
5 # met: | 5 # met: |
6 # | 6 # |
7 # * Redistributions of source code must retain the above copyright | 7 # * Redistributions of source code must retain the above copyright |
8 # notice, this list of conditions and the following disclaimer. | 8 # notice, this list of conditions and the following disclaimer. |
9 # * Redistributions in binary form must reproduce the above | 9 # * Redistributions in binary form must reproduce the above |
10 # copyright notice, this list of conditions and the following disclaimer | 10 # copyright notice, this list of conditions and the following disclaimer |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
48 # V8-specific handling of IDL types | 48 # V8-specific handling of IDL types |
49 ################################################################################ | 49 ################################################################################ |
50 | 50 |
51 NON_WRAPPER_TYPES = frozenset([ | 51 NON_WRAPPER_TYPES = frozenset([ |
52 'Dictionary', | 52 'Dictionary', |
53 'EventHandler', | 53 'EventHandler', |
54 'EventListener', | 54 'EventListener', |
55 'NodeFilter', | 55 'NodeFilter', |
56 'SerializedScriptValue', | 56 'SerializedScriptValue', |
57 ]) | 57 ]) |
58 TYPED_ARRAYS = { | 58 TYPED_ARRAY_TYPES = frozenset([ |
59 # (cpp_type, v8_type), used by constructor templates | 59 'Float32Array', |
60 'ArrayBuffer': None, | 60 'Float64Array', |
61 'ArrayBufferView': None, | 61 'Int8Array', |
62 'Float32Array': ('float', 'v8::kExternalFloatArray'), | 62 'Int16Array', |
63 'Float64Array': ('double', 'v8::kExternalDoubleArray'), | 63 'Int32Array', |
64 'Int8Array': ('signed char', 'v8::kExternalByteArray'), | 64 'Uint8Array', |
65 'Int16Array': ('short', 'v8::kExternalShortArray'), | 65 'Uint8ClampedArray', |
66 'Int32Array': ('int', 'v8::kExternalIntArray'), | 66 'Uint16Array', |
67 'Uint8Array': ('unsigned char', 'v8::kExternalUnsignedByteArray'), | 67 'Uint32Array', |
68 'Uint8ClampedArray': ('unsigned char', 'v8::kExternalPixelArray'), | 68 ]) |
69 'Uint16Array': ('unsigned short', 'v8::kExternalUnsignedShortArray'), | 69 ARRAY_BUFFER_AND_VIEW_TYPES = TYPED_ARRAY_TYPES.union(frozenset([ |
70 'Uint32Array': ('unsigned int', 'v8::kExternalUnsignedIntArray'), | 70 'ArrayBuffer', |
71 } | 71 'ArrayBufferView', |
| 72 'DataView', |
| 73 ])) |
72 | 74 |
73 IdlType.is_typed_array_element_type = property( | 75 IdlType.is_array_buffer_or_view = property( |
74 lambda self: self.base_type in TYPED_ARRAYS) | 76 lambda self: self.base_type in ARRAY_BUFFER_AND_VIEW_TYPES) |
| 77 |
| 78 IdlType.is_typed_array = property( |
| 79 lambda self: self.base_type in TYPED_ARRAY_TYPES) |
75 | 80 |
76 IdlType.is_wrapper_type = property( | 81 IdlType.is_wrapper_type = property( |
77 lambda self: (self.is_interface_type and | 82 lambda self: (self.is_interface_type and |
78 self.base_type not in NON_WRAPPER_TYPES)) | 83 self.base_type not in NON_WRAPPER_TYPES)) |
79 | 84 |
80 | 85 |
81 ################################################################################ | 86 ################################################################################ |
82 # C++ types | 87 # C++ types |
83 ################################################################################ | 88 ################################################################################ |
84 | 89 |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
169 if base_idl_type in CPP_SPECIAL_CONVERSION_RULES: | 174 if base_idl_type in CPP_SPECIAL_CONVERSION_RULES: |
170 return CPP_SPECIAL_CONVERSION_RULES[base_idl_type] | 175 return CPP_SPECIAL_CONVERSION_RULES[base_idl_type] |
171 | 176 |
172 if base_idl_type in NON_WRAPPER_TYPES: | 177 if base_idl_type in NON_WRAPPER_TYPES: |
173 return ('PassRefPtr<%s>' if used_as_rvalue_type else 'RefPtr<%s>') % bas
e_idl_type | 178 return ('PassRefPtr<%s>' if used_as_rvalue_type else 'RefPtr<%s>') % bas
e_idl_type |
174 if idl_type.is_string_type: | 179 if idl_type.is_string_type: |
175 if not raw_type: | 180 if not raw_type: |
176 return 'String' | 181 return 'String' |
177 return 'V8StringResource<%s>' % string_mode() | 182 return 'V8StringResource<%s>' % string_mode() |
178 | 183 |
179 if idl_type.is_typed_array_element_type and raw_type: | 184 if idl_type.is_array_buffer_or_view and raw_type: |
180 return base_idl_type + '*' | 185 return idl_type.implemented_as + '*' |
181 if idl_type.is_interface_type: | 186 if idl_type.is_interface_type: |
182 implemented_as_class = idl_type.implemented_as | 187 implemented_as_class = idl_type.implemented_as |
183 if raw_type: | 188 if raw_type: |
184 return implemented_as_class + '*' | 189 return implemented_as_class + '*' |
185 new_type = 'Member' if used_in_cpp_sequence else 'RawPtr' | 190 new_type = 'Member' if used_in_cpp_sequence else 'RawPtr' |
186 ptr_type = cpp_ptr_type(('PassRefPtr' if used_as_rvalue_type else 'RefPt
r'), new_type, idl_type.gc_type) | 191 ptr_type = cpp_ptr_type(('PassRefPtr' if used_as_rvalue_type else 'RefPt
r'), new_type, idl_type.gc_type) |
187 return cpp_template_type(ptr_type, implemented_as_class) | 192 return cpp_template_type(ptr_type, implemented_as_class) |
188 if idl_type.is_dictionary: | 193 if idl_type.is_dictionary: |
189 return base_idl_type | 194 return base_idl_type |
190 # Default, assume native type is a pointer with same type name as idl type | 195 # Default, assume native type is a pointer with same type name as idl type |
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
354 | 359 |
355 def includes_for_type(idl_type): | 360 def includes_for_type(idl_type): |
356 idl_type = idl_type.preprocessed_type | 361 idl_type = idl_type.preprocessed_type |
357 | 362 |
358 # Simple types | 363 # Simple types |
359 base_idl_type = idl_type.base_type | 364 base_idl_type = idl_type.base_type |
360 if base_idl_type in INCLUDES_FOR_TYPE: | 365 if base_idl_type in INCLUDES_FOR_TYPE: |
361 return INCLUDES_FOR_TYPE[base_idl_type] | 366 return INCLUDES_FOR_TYPE[base_idl_type] |
362 if idl_type.is_basic_type: | 367 if idl_type.is_basic_type: |
363 return set() | 368 return set() |
364 if idl_type.is_typed_array_element_type: | |
365 return set(['bindings/core/v8/custom/V8%sCustom.h' % base_idl_type]) | |
366 if base_idl_type.endswith('ConstructorConstructor'): | 369 if base_idl_type.endswith('ConstructorConstructor'): |
367 # FIXME: rename to NamedConstructor | 370 # FIXME: rename to NamedConstructor |
368 # FIXME: replace with a [NamedConstructorAttribute] extended attribute | 371 # FIXME: replace with a [NamedConstructorAttribute] extended attribute |
369 # Ending with 'ConstructorConstructor' indicates a named constructor, | 372 # Ending with 'ConstructorConstructor' indicates a named constructor, |
370 # and these do not have header files, as they are part of the generated | 373 # and these do not have header files, as they are part of the generated |
371 # bindings for the interface | 374 # bindings for the interface |
372 return set() | 375 return set() |
373 if base_idl_type.endswith('Constructor'): | 376 if base_idl_type.endswith('Constructor'): |
374 # FIXME: replace with a [ConstructorAttribute] extended attribute | 377 # FIXME: replace with a [ConstructorAttribute] extended attribute |
375 base_idl_type = idl_type.constructor_type_name | 378 base_idl_type = idl_type.constructor_type_name |
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
521 arguments = ', '.join([v8_value, 'EnforceRange', 'exceptionState']) | 524 arguments = ', '.join([v8_value, 'EnforceRange', 'exceptionState']) |
522 elif 'Clamp' in extended_attributes: | 525 elif 'Clamp' in extended_attributes: |
523 arguments = ', '.join([v8_value, 'Clamp', 'exceptionState']) | 526 arguments = ', '.join([v8_value, 'Clamp', 'exceptionState']) |
524 elif idl_type.v8_conversion_needs_exception_state: | 527 elif idl_type.v8_conversion_needs_exception_state: |
525 arguments = ', '.join([v8_value, 'exceptionState']) | 528 arguments = ', '.join([v8_value, 'exceptionState']) |
526 else: | 529 else: |
527 arguments = v8_value | 530 arguments = v8_value |
528 | 531 |
529 if base_idl_type in V8_VALUE_TO_CPP_VALUE: | 532 if base_idl_type in V8_VALUE_TO_CPP_VALUE: |
530 cpp_expression_format = V8_VALUE_TO_CPP_VALUE[base_idl_type] | 533 cpp_expression_format = V8_VALUE_TO_CPP_VALUE[base_idl_type] |
531 elif idl_type.is_typed_array_element_type: | 534 elif idl_type.is_array_buffer_or_view: |
532 cpp_expression_format = ( | 535 cpp_expression_format = ( |
533 '{v8_value}->Is{idl_type}() ? ' | 536 '{v8_value}->Is{idl_type}() ? ' |
534 'V8{idl_type}::toImpl(v8::Handle<v8::{idl_type}>::Cast({v8_value}))
: 0') | 537 'V8{idl_type}::toImpl(v8::Handle<v8::{idl_type}>::Cast({v8_value}))
: 0') |
535 elif idl_type.is_dictionary: | 538 elif idl_type.is_dictionary: |
536 cpp_expression_format = 'V8{idl_type}::toImpl({isolate}, {v8_value}, {va
riable_name}, exceptionState)' | 539 cpp_expression_format = 'V8{idl_type}::toImpl({isolate}, {v8_value}, {va
riable_name}, exceptionState)' |
537 elif needs_type_check: | 540 elif needs_type_check: |
538 cpp_expression_format = ( | 541 cpp_expression_format = ( |
539 'V8{idl_type}::toImplWithTypeCheck({isolate}, {v8_value})') | 542 'V8{idl_type}::toImplWithTypeCheck({isolate}, {v8_value})') |
540 else: | 543 else: |
541 cpp_expression_format = ( | 544 cpp_expression_format = ( |
(...skipping 334 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
876 | 879 |
877 | 880 |
878 def is_explicit_nullable(idl_type): | 881 def is_explicit_nullable(idl_type): |
879 # Nullable type that isn't implicit nullable (see above.) For such types, | 882 # Nullable type that isn't implicit nullable (see above.) For such types, |
880 # we use Nullable<T> or similar explicit ways to represent a null value. | 883 # we use Nullable<T> or similar explicit ways to represent a null value. |
881 return idl_type.is_nullable and not idl_type.is_implicit_nullable | 884 return idl_type.is_nullable and not idl_type.is_implicit_nullable |
882 | 885 |
883 IdlTypeBase.is_implicit_nullable = property(is_implicit_nullable) | 886 IdlTypeBase.is_implicit_nullable = property(is_implicit_nullable) |
884 IdlUnionType.is_implicit_nullable = False | 887 IdlUnionType.is_implicit_nullable = False |
885 IdlTypeBase.is_explicit_nullable = property(is_explicit_nullable) | 888 IdlTypeBase.is_explicit_nullable = property(is_explicit_nullable) |
OLD | NEW |