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

Side by Side Diff: bindings/dart/scripts/dart_methods.py

Issue 959933002: Move IDLs to 39 roll (Closed) Base URL: https://dart.googlecode.com/svn/third_party/WebCore
Patch Set: Created 5 years, 10 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
« no previous file with comments | « bindings/dart/scripts/dart_interface.py ('k') | bindings/dart/scripts/dart_types.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 15 matching lines...) Expand all
26 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 26 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 28
29 """Generate template values for methods. 29 """Generate template values for methods.
30 30
31 Extends IdlType and IdlUnionType with property |union_arguments|. 31 Extends IdlType and IdlUnionType with property |union_arguments|.
32 32
33 Design doc: http://www.chromium.org/developers/design-documents/idl-compiler 33 Design doc: http://www.chromium.org/developers/design-documents/idl-compiler
34 """ 34 """
35 35
36 from idl_types import IdlTypeBase, IdlType, IdlUnionType, inherits_interface, Id lArrayOrSequenceType, IdlArrayType 36 from idl_types import inherits_interface
37 import dart_types 37 import dart_types
38 from idl_definitions import IdlArgument
39 from dart_utilities import DartUtilities 38 from dart_utilities import DartUtilities
40 from v8_globals import includes 39 from v8_globals import includes
41 40
41 import v8_methods
42 42
43 def generate_method(interface, method): 43
44 def method_context(interface, method):
45 context = v8_methods.method_context(interface, method)
46
44 arguments = method.arguments 47 arguments = method.arguments
45 extended_attributes = method.extended_attributes 48 extended_attributes = method.extended_attributes
46 idl_type = method.idl_type 49 idl_type = method.idl_type
47 is_static = method.is_static
48 name = method.name
49 50
50 idl_type.add_includes_for_type() 51 # idl_type.add_includes_for_type()
51 this_cpp_value = cpp_value(interface, method, len(arguments)) 52 this_cpp_value = cpp_value(interface, method, len(arguments))
52 53
53 def function_template(): 54 if context['is_call_with_script_state']:
54 if is_static:
55 return 'functionTemplate'
56 if 'Unforgeable' in extended_attributes:
57 return 'instanceTemplate'
58 return 'prototypeTemplate'
59
60 is_call_with_script_arguments = DartUtilities.has_extended_attribute_value(m ethod, 'CallWith', 'ScriptArguments')
61 if is_call_with_script_arguments:
62 includes.update(['bindings/core/v8/ScriptCallStackFactory.h',
63 'core/inspector/ScriptArguments.h'])
64 is_call_with_script_state = DartUtilities.has_extended_attribute_value(metho d, 'CallWith', 'ScriptState')
65 if is_call_with_script_state:
66 includes.add('bindings/core/dart/DartScriptState.h') 55 includes.add('bindings/core/dart/DartScriptState.h')
67 is_check_security_for_node = 'CheckSecurity' in extended_attributes
68 if is_check_security_for_node:
69 includes.add('bindings/common/BindingSecurity.h')
70 is_custom_element_callbacks = 'CustomElementCallbacks' in extended_attribute s
71 if is_custom_element_callbacks:
72 includes.add('core/dom/custom/CustomElementCallbackDispatcher.h')
73
74 has_event_listener_argument = any(
75 argument for argument in arguments
76 if argument.idl_type.name == 'EventListener')
77 is_check_security_for_frame = (
78 'CheckSecurity' in interface.extended_attributes and
79 'DoNotCheckSecurity' not in extended_attributes)
80 is_raises_exception = 'RaisesException' in extended_attributes
81 56
82 if idl_type.union_arguments and len(idl_type.union_arguments) > 0: 57 if idl_type.union_arguments and len(idl_type.union_arguments) > 0:
83 this_cpp_type = [] 58 this_cpp_type = []
84 for cpp_type in idl_type.member_types: 59 for cpp_type in idl_type.member_types:
85 # FIXMEDART: we shouldn't just assume RefPtr. We should append 60 # FIXMEDART: we shouldn't just assume RefPtr. We should append
86 # WillBeGC as appropriate. 61 # WillBeGC as appropriate.
87 this_cpp_type.append("RefPtr<%s>" % cpp_type) 62 this_cpp_type.append("RefPtr<%s>" % cpp_type)
88 else: 63 else:
89 this_cpp_type = idl_type.cpp_type 64 this_cpp_type = idl_type.cpp_type
90 65
91 is_auto_scope = not 'DartNoAutoScope' in extended_attributes 66 is_auto_scope = not 'DartNoAutoScope' in extended_attributes
92 67
93 number_of_arguments = len(arguments) 68 arguments_data = [argument_context(interface, method, argument, index)
69 for index, argument in enumerate(arguments)]
94 70
95 number_of_required_arguments = \ 71 union_arguments = []
96 len([ 72 if idl_type.union_arguments:
97 argument for argument in arguments 73 union_arguments.extend([union_arg['cpp_value']
98 if not ((argument.is_optional and not ('Default' in argument.extende d_attributes or argument.default_value)) or 74 for union_arg in idl_type.union_arguments])
99 argument.is_variadic)])
100
101 arguments_data = [generate_argument(interface, method, argument, index)
102 for index, argument in enumerate(arguments)]
103 75
104 is_custom = 'Custom' in extended_attributes or 'DartCustom' in extended_attr ibutes 76 is_custom = 'Custom' in extended_attributes or 'DartCustom' in extended_attr ibutes
105 77
106 method_data = { 78 context.update({
107 'activity_logging_world_list': DartUtilities.activity_logging_world_list (method), # [ActivityLogging] 79 'activity_logging_world_list': DartUtilities.activity_logging_world_list (method), # [ActivityLogging]
108 'arguments': arguments_data, 80 'arguments': arguments_data,
109 'conditional_string': DartUtilities.conditional_string(method),
110 'cpp_type': this_cpp_type, 81 'cpp_type': this_cpp_type,
111 'cpp_value': this_cpp_value, 82 'cpp_value': this_cpp_value,
112 'dart_name': extended_attributes.get('DartName'), 83 'dart_name': extended_attributes.get('DartName'),
113 'deprecate_as': DartUtilities.deprecate_as(method), # [DeprecateAs] 84 'deprecate_as': DartUtilities.deprecate_as(method), # [DeprecateAs]
114 'do_not_check_signature': not(is_static or 85 'do_not_check_signature': not(context['is_static'] or
115 DartUtilities.has_extended_attribute(method, 86 DartUtilities.has_extended_attribute(method,
116 ['DoNotCheckSecurity', 'DoNotCheckSignature', 'NotEnumerable', 87 ['DoNotCheckSecurity', 'DoNotCheckSignature', 'NotEnumerable',
117 'ReadOnly', 'RuntimeEnabled', 'Unforgeable'])), 88 'ReadOnly', 'RuntimeEnabled', 'Unforgeable'])),
118 'function_template': function_template(),
119 'idl_type': idl_type.base_type,
120 'has_event_listener_argument': has_event_listener_argument,
121 'has_exception_state': 89 'has_exception_state':
122 has_event_listener_argument or 90 context['is_raises_exception'] or
123 is_raises_exception or 91 context['is_check_security_for_frame'] or
124 is_check_security_for_frame or
125 any(argument for argument in arguments 92 any(argument for argument in arguments
126 if argument.idl_type.name == 'SerializedScriptValue' or 93 if argument.idl_type.name == 'SerializedScriptValue' or
127 argument.idl_type.is_integer_type), 94 argument.idl_type.is_integer_type),
128 'is_auto_scope': is_auto_scope, 95 'is_auto_scope': is_auto_scope,
129 'auto_scope': DartUtilities.bool_to_cpp(is_auto_scope), 96 'auto_scope': DartUtilities.bool_to_cpp(is_auto_scope),
130 'is_call_with_execution_context': DartUtilities.has_extended_attribute_v alue(method, 'CallWith', 'ExecutionContext'),
131 'is_call_with_script_arguments': is_call_with_script_arguments,
132 'is_call_with_script_state': is_call_with_script_state,
133 'is_check_security_for_frame': is_check_security_for_frame,
134 'is_check_security_for_node': is_check_security_for_node,
135 'is_custom': is_custom, 97 'is_custom': is_custom,
136 'is_custom_dart': 'DartCustom' in extended_attributes, 98 'is_custom_dart': 'DartCustom' in extended_attributes,
137 'is_custom_dart_new': DartUtilities.has_extended_attribute_value(method, 'DartCustom', 'New'), 99 'is_custom_dart_new': DartUtilities.has_extended_attribute_value(method, 'DartCustom', 'New'),
138 'is_custom_element_callbacks': is_custom_element_callbacks,
139 'is_do_not_check_security': 'DoNotCheckSecurity' in extended_attributes,
140 'is_do_not_check_signature': 'DoNotCheckSignature' in extended_attribute s,
141 'is_partial_interface_member': 'PartialInterfaceImplementedAs' in extend ed_attributes,
142 'is_per_world_bindings': 'PerWorldBindings' in extended_attributes,
143 'is_raises_exception': is_raises_exception,
144 'is_read_only': 'ReadOnly' in extended_attributes,
145 'is_static': is_static,
146 # FIXME(terry): DartStrictTypeChecking no longer supported; TypeChecking is 100 # FIXME(terry): DartStrictTypeChecking no longer supported; TypeChecking is
147 # new extended attribute. 101 # new extended attribute.
148 'is_strict_type_checking': 102 'is_strict_type_checking':
149 'DartStrictTypeChecking' in extended_attributes or 103 'DartStrictTypeChecking' in extended_attributes or
150 'DartStrictTypeChecking' in interface.extended_attributes, 104 'DartStrictTypeChecking' in interface.extended_attributes,
151 'is_variadic': arguments and arguments[-1].is_variadic,
152 'measure_as': DartUtilities.measure_as(method), # [MeasureAs] 105 'measure_as': DartUtilities.measure_as(method), # [MeasureAs]
153 'name': name,
154 'number_of_arguments': number_of_arguments,
155 'number_of_required_arguments': number_of_required_arguments,
156 'number_of_required_or_variadic_arguments': len([
157 argument for argument in arguments
158 if not argument.is_optional]),
159 'per_context_enabled_function': DartUtilities.per_context_enabled_functi on_name(method), # [PerContextEnabled]
160 'property_attributes': property_attributes(method),
161 'runtime_enabled_function': DartUtilities.runtime_enabled_function_name( method), # [RuntimeEnabled]
162 'signature': 'v8::Local<v8::Signature>()' if is_static or 'DoNotCheckSig nature' in extended_attributes else 'defaultSignature',
163 'suppressed': (arguments and arguments[-1].is_variadic), # FIXME: imple ment variadic 106 'suppressed': (arguments and arguments[-1].is_variadic), # FIXME: imple ment variadic
164 'union_arguments': idl_type.union_arguments, 107 'union_arguments': union_arguments,
165 'dart_set_return_value': dart_set_return_value(interface.name, method, t his_cpp_value), 108 'dart_set_return_value': dart_set_return_value(interface.name, method, t his_cpp_value),
166 'world_suffixes': ['', 'ForMainWorld'] if 'PerWorldBindings' in extended _attributes else [''], # [PerWorldBindings] 109 })
167 } 110 return context
168 return method_data
169 111
112 def argument_context(interface, method, argument, index):
113 context = v8_methods.argument_context(interface, method, argument, index)
170 114
171 def generate_argument(interface, method, argument, index):
172 extended_attributes = argument.extended_attributes 115 extended_attributes = argument.extended_attributes
173 idl_type = argument.idl_type 116 idl_type = argument.idl_type
174 this_cpp_value = cpp_value(interface, method, index) 117 this_cpp_value = cpp_value(interface, method, index)
175 is_variadic_wrapper_type = argument.is_variadic and idl_type.is_wrapper_type 118 use_heap_vector_type = context['is_variadic_wrapper_type'] and idl_type.is_w ill_be_garbage_collected
176 use_heap_vector_type = is_variadic_wrapper_type and idl_type.is_will_be_garb age_collected
177 auto_scope = not 'DartNoAutoScope' in extended_attributes 119 auto_scope = not 'DartNoAutoScope' in extended_attributes
178 this_has_default = 'Default' in extended_attributes 120 arg_index = index + 1 if not (method.is_static or method.is_constructor) els e index
179 arg_index = index + 1 if not method.is_static else index
180 preprocessed_type = str(idl_type.preprocessed_type) 121 preprocessed_type = str(idl_type.preprocessed_type)
122 local_cpp_type = idl_type.cpp_type_args(argument.extended_attributes, raw_ty pe=True)
123 default_value = argument.default_cpp_value
124 if context['has_default']:
125 default_value = (argument.default_cpp_value or
126 dart_types.default_cpp_value_for_cpp_type(idl_type))
181 # FIXMEDART: handle the drift between preprocessed type names in 1847 and 127 # FIXMEDART: handle the drift between preprocessed type names in 1847 and
182 # 1985 dartium builds in a more generic way. 128 # 1985 dartium builds in a more generic way.
183 if preprocessed_type == 'unrestricted float': 129 if preprocessed_type == 'unrestricted float':
184 preprocessed_type = 'float' 130 preprocessed_type = 'float'
185 if preprocessed_type == 'unrestricted double': 131 if preprocessed_type == 'unrestricted double':
186 preprocessed_type = 'double' 132 preprocessed_type = 'double'
187 argument_data = { 133
134 dart_enum_expression = idl_type.enum_validation_expression
135 if dart_enum_expression:
136 dart_enum_expression = dart_enum_expression.format(param_name=argument.n ame)
137 context.update({
188 'cpp_type': idl_type.cpp_type_args(extended_attributes=extended_attribut es, 138 'cpp_type': idl_type.cpp_type_args(extended_attributes=extended_attribut es,
189 raw_type=True, 139 raw_type=True,
190 used_in_cpp_sequence=use_heap_vector_ type), 140 used_in_cpp_sequence=use_heap_vector_ type),
191 'cpp_value': this_cpp_value, 141 'cpp_value': this_cpp_value,
192 'local_cpp_type': idl_type.cpp_type_args(argument.extended_attributes, r aw_type=True), 142 'local_cpp_type': local_cpp_type,
193 # FIXME: check that the default value's type is compatible with the argu ment's 143 # FIXME: check that the default value's type is compatible with the argu ment's
194 'default_value': str(argument.default_value) if argument.default_value e lse None, 144 'default_value': default_value,
195 'enum_validation_expression': idl_type.enum_validation_expression, 145 'enum_validation_expression': dart_enum_expression,
196 # Ignore 'Default' in extended_attributes not exposed in dart:html.
197 'has_default': False,
198 'has_event_listener_argument': any(
199 argument_so_far for argument_so_far in method.arguments[:index]
200 if argument_so_far.idl_type.name == 'EventListener'),
201 'idl_type_object': idl_type,
202 'preprocessed_type': preprocessed_type, 146 'preprocessed_type': preprocessed_type,
203 # Dictionary is special-cased, but arrays and sequences shouldn't be
204 'idl_type': idl_type.base_type,
205 'index': index,
206 'is_array_or_sequence_type': not not idl_type.native_array_element_type, 147 'is_array_or_sequence_type': not not idl_type.native_array_element_type,
207 'is_clamp': 'Clamp' in extended_attributes,
208 'is_callback_interface': idl_type.is_callback_interface,
209 'is_nullable': idl_type.is_nullable,
210 # Only expose as optional if no default value.
211 'is_optional': argument.is_optional and not (this_has_default or argumen t.default_value),
212 'is_strict_type_checking': 'DartStrictTypeChecking' in extended_attribut es, 148 'is_strict_type_checking': 'DartStrictTypeChecking' in extended_attribut es,
213 'is_variadic_wrapper_type': is_variadic_wrapper_type, 149 'is_dictionary': idl_type.is_dictionary or idl_type.base_type == 'Dictio nary',
214 'vector_type': 'WillBeHeapVector' if use_heap_vector_type else 'Vector', 150 'vector_type': 'WillBeHeapVector' if use_heap_vector_type else 'Vector',
215 'is_wrapper_type': idl_type.is_wrapper_type, 151 'dart_set_return_value_for_main_world': dart_set_return_value(interface. name, method,
216 'name': argument.name, 152 this_cpp_v alue, for_main_world=True),
217 'dart_set_return_value_for_main_world': dart_set_return_value(interface. name, method, this_cpp_value, for_main_world=True),
218 'dart_set_return_value': dart_set_return_value(interface.name, method, t his_cpp_value), 153 'dart_set_return_value': dart_set_return_value(interface.name, method, t his_cpp_value),
219 'arg_index': arg_index, 154 'arg_index': arg_index,
220 'dart_value_to_local_cpp_value': dart_value_to_local_cpp_value(interface , argument, arg_index, auto_scope), 155 'dart_value_dictionary_cpp_value': dart_dictionary_value_argument(argume nt, arg_index),
221 } 156 'dart_value_to_local_cpp_value': dart_value_to_local_cpp_value(interface ,
222 return argument_data 157 context[' has_type_checking_interface'],
158 argument, arg_index, auto_scope),
159 })
160 return context
223 161
224 162
225 ################################################################################ 163 ################################################################################
226 # Value handling 164 # Value handling
227 ################################################################################ 165 ################################################################################
228 166
229 def cpp_value(interface, method, number_of_arguments): 167 def cpp_value(interface, method, number_of_arguments):
230 def cpp_argument(argument): 168 def cpp_argument(argument):
231 argument_name = dart_types.check_reserved_name(argument.name) 169 argument_name = dart_types.check_reserved_name(argument.name)
232 idl_type = argument.idl_type 170 idl_type = argument.idl_type
233 171
234 if idl_type.is_typed_array_type: 172 if idl_type.is_typed_array_type:
235 return '%s.get()' % argument_name 173 return '%s.get()' % argument_name
236 174
237 if idl_type.name == 'EventListener': 175 if idl_type.name == 'EventListener':
238 if (interface.name == 'EventTarget' and 176 if (interface.name == 'EventTarget' and
239 method.name == 'removeEventListener'): 177 method.name == 'removeEventListener'):
240 # FIXME: remove this special case by moving get() into 178 # FIXME: remove this special case by moving get() into
241 # EventTarget::removeEventListener 179 # EventTarget::removeEventListener
242 return '%s.get()' % argument_name 180 return '%s.get()' % argument_name
243 return argument.name 181 return argument.name
244 if (idl_type.is_callback_interface or 182 if (idl_type.name in ['NodeFilter', 'NodeFilterOrNull',
245 idl_type.name in ['NodeFilter', 'XPathNSResolver']): 183 'XPathNSResolver', 'XPathNSResolverOrNull']):
246 # FIXME: remove this special case 184 # FIXME: remove this special case
247 return '%s.release()' % argument_name 185 return '%s.release()' % argument_name
186 # Need to de-ref the generated dictionary class for create call.
187 if (idl_type.is_dictionary):
188 return '*%s' % argument_name
248 return argument_name 189 return argument_name
249 190
250 # Truncate omitted optional arguments 191 # Truncate omitted optional arguments
251 arguments = method.arguments[:number_of_arguments] 192 arguments = method.arguments[:number_of_arguments]
252 cpp_arguments = DartUtilities.call_with_arguments(method) 193 if method.is_constructor:
194 call_with_values = interface.extended_attributes.get('ConstructorCallWit h')
195 else:
196 call_with_values = method.extended_attributes.get('CallWith')
197 cpp_arguments = DartUtilities.call_with_arguments(call_with_values)
253 if ('PartialInterfaceImplementedAs' in method.extended_attributes and not me thod.is_static): 198 if ('PartialInterfaceImplementedAs' in method.extended_attributes and not me thod.is_static):
254 cpp_arguments.append('*receiver') 199 cpp_arguments.append('*receiver')
255 200
256 cpp_arguments.extend(cpp_argument(argument) for argument in arguments) 201 cpp_arguments.extend(cpp_argument(argument) for argument in arguments)
257 this_union_arguments = method.idl_type.union_arguments 202 this_union_arguments = method.idl_type and method.idl_type.union_arguments
258 if this_union_arguments: 203 if this_union_arguments:
259 cpp_arguments.extend(this_union_arguments) 204 cpp_arguments.extend([member_argument['cpp_value']
205 for member_argument in this_union_arguments])
260 206
261 if 'RaisesException' in method.extended_attributes: 207 if ('RaisesException' in method.extended_attributes or
208 (method.is_constructor and
209 DartUtilities.has_extended_attribute_value(interface, 'RaisesException' , 'Constructor'))):
262 cpp_arguments.append('es') 210 cpp_arguments.append('es')
263 211
264 cpp_method_name = DartUtilities.scoped_name(interface, method, DartUtilities .cpp_name(method)) 212 if method.name == 'Constructor':
213 base_name = 'create'
214 elif method.name == 'NamedConstructor':
215 base_name = 'createForJSConstructor'
216 else:
217 base_name = DartUtilities.cpp_name(method)
218 cpp_method_name = DartUtilities.scoped_name(interface, method, base_name)
265 return '%s(%s)' % (cpp_method_name, ', '.join(cpp_arguments)) 219 return '%s(%s)' % (cpp_method_name, ', '.join(cpp_arguments))
266 220
267 221
268 # Mapping of IDL type to DartUtilities helper types. 222 # Mapping of IDL type to DartUtilities helper types.
269 def dart_arg_type(argument_type): 223 def dart_arg_type(argument_type):
270 if (argument_type.cpp_type == 'String'): 224 if (argument_type.cpp_type == 'String'):
271 return 'DartStringAdapter' 225 return 'DartStringAdapter'
272 226
273 return argument_type.cpp_type 227 return argument_type.cpp_type
274 228
275 229
276 def dart_set_return_value(interface_name, method, cpp_value, for_main_world=Fals e): 230 def dart_set_return_value(interface_name, method, cpp_value, for_main_world=Fals e):
277 idl_type = method.idl_type 231 idl_type = method.idl_type
278 extended_attributes = method.extended_attributes 232 extended_attributes = method.extended_attributes
279 if idl_type.name == 'void': 233 if not idl_type or idl_type.name == 'void':
234 # Constructors and void methods don't have a return type
280 return None 235 return None
281 236
282 release = False 237 release = False
283 238
284 if idl_type.is_union_type: 239 if idl_type.is_union_type:
285 release = idl_type.release 240 release = idl_type.release
286 241
287 # [CallWith=ScriptState], [RaisesException] 242 # [CallWith=ScriptState], [RaisesException]
288 # TODO(terry): Disable ScriptState temporarily need to handle. 243 # TODO(terry): Disable ScriptState temporarily need to handle.
289 # if (has_extended_attribute_value(method, 'CallWith', 'ScriptState') or 244 # if (has_extended_attribute_value(method, 'CallWith', 'ScriptState') or
290 # 'RaisesException' in extended_attributes or 245 # 'RaisesException' in extended_attributes or
291 # idl_type.is_union_type): 246 # idl_type.is_union_type):
292 # cpp_value = 'result' # use local variable for value 247 # cpp_value = 'result' # use local variable for value
293 # release = idl_type.release 248 # release = idl_type.release
294 249
295 auto_scope = not 'DartNoAutoScope' in extended_attributes 250 auto_scope = not 'DartNoAutoScope' in extended_attributes
296 script_wrappable = 'impl' if inherits_interface(interface_name, 'Node') else '' 251 script_wrappable = 'impl' if inherits_interface(interface_name, 'Node') else ''
297 return idl_type.dart_set_return_value(cpp_value, extended_attributes, 252 return idl_type.dart_set_return_value(cpp_value, extended_attributes,
298 script_wrappable=script_wrappable, 253 script_wrappable=script_wrappable,
299 release=release, 254 release=release,
300 for_main_world=for_main_world, 255 for_main_world=for_main_world,
301 auto_scope=auto_scope) 256 auto_scope=auto_scope)
302 257
303 258
304 def dart_value_to_local_cpp_value(interface, argument, index, auto_scope=True): 259 def dart_dictionary_value_argument(argument, index):
260 idl_type = argument.idl_type
261 return idl_type.dart_dictionary_to_local_cpp_value(index=index)
262
263
264 def dart_value_to_local_cpp_value(interface, has_type_checking_interface,
265 argument, index, auto_scope=True):
305 extended_attributes = argument.extended_attributes 266 extended_attributes = argument.extended_attributes
306 interface_extended_attributes = interface.extended_attributes
307 idl_type = argument.idl_type 267 idl_type = argument.idl_type
308 name = argument.name 268 name = argument.name
309 # TODO(terry): Variadic arguments are not handled but treated as one argumen t. 269 # TODO(terry): Variadic arguments are not handled but treated as one argumen t.
310 # if argument.is_variadic: 270 # if argument.is_variadic:
311 # vector_type = 'WillBeHeapVector' if idl_type.is_will_be_garbage_col lected else 'Vector' 271 # vector_type = 'WillBeHeapVector' if idl_type.is_will_be_garbage_col lected else 'Vector'
312 # return 'V8TRYCATCH_VOID({vector_type}<{cpp_type}>, {name}, toNative Arguments<{cpp_type}>(info, {index}))'.format( 272 # return 'V8TRYCATCH_VOID({vector_type}<{cpp_type}>, {name}, toNative Arguments<{cpp_type}>(info, {index}))'.format(
313 # cpp_type=idl_type.cpp_type, name=name, index=index, vector_ type=vector_type) 273 # cpp_type=idl_type.cpp_type, name=name, index=index, vector_ type=vector_type)
314 274
315 # FIXME: V8 has some special logic around the addEventListener and 275 # FIXME: V8 has some special logic around the addEventListener and
316 # removeEventListener methods that should be added in somewhere. 276 # removeEventListener methods that should be added in somewhere.
317 # There is also some logic in systemnative.py to force a null check 277 # There is also some logic in systemnative.py to force a null check
318 # for the useCapture argument of those same methods that we may need to 278 # for the useCapture argument of those same methods that we may need to
319 # pull over. 279 # pull over.
320 null_check = (argument.is_optional and \ 280 null_check = ((argument.is_optional and idl_type.is_callback_interface) or
321 (idl_type.is_callback_interface or idl_type == 'Dictionary')) or \ 281 (idl_type.name == 'Dictionary') or
322 (argument.default_value and argument.default_value.is_null) 282 (argument.default_value and argument.default_value.is_null))
323 283
324 return idl_type.dart_value_to_local_cpp_value( 284 return idl_type.dart_value_to_local_cpp_value(
325 interface_extended_attributes, extended_attributes, name, null_check, 285 extended_attributes, name, null_check, has_type_checking_interface,
326 index=index, auto_scope=auto_scope) 286 index=index, auto_scope=auto_scope)
327
328
329 ################################################################################
330 # Auxiliary functions
331 ################################################################################
332
333 # [NotEnumerable]
334 def property_attributes(method):
335 extended_attributes = method.extended_attributes
336 property_attributes_list = []
337 if 'NotEnumerable' in extended_attributes:
338 property_attributes_list.append('v8::DontEnum')
339 if 'ReadOnly' in extended_attributes:
340 property_attributes_list.append('v8::ReadOnly')
341 if property_attributes_list:
342 property_attributes_list.insert(0, 'v8::DontDelete')
343 return property_attributes_list
344
345
346 # FIXMEDART: better align this method with the v8 version.
347 def union_member_argument_context(idl_type, index):
348 """Returns a context of union member for argument."""
349 return 'result%d' % index
350
351 def union_arguments(idl_type):
352 return [union_member_argument_context(member_idl_type, index)
353 for index, member_idl_type
354 in enumerate(idl_type.member_types)]
355
356
357 def argument_default_cpp_value(argument):
358 if not argument.default_value:
359 return None
360 return argument.idl_type.literal_cpp_value(argument.default_value)
361
362
363 IdlTypeBase.union_arguments = None
364 IdlUnionType.union_arguments = property(union_arguments)
365 IdlArgument.default_cpp_value = property(argument_default_cpp_value)
366 #IdlType.union_arguments = property(lambda self: None)
367 #IdlUnionType.union_arguments = property(union_arguments)
OLDNEW
« no previous file with comments | « bindings/dart/scripts/dart_interface.py ('k') | bindings/dart/scripts/dart_types.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698