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

Side by Side Diff: client/dom/scripts/systemnative.py

Issue 9565006: Add missing includes (spotted while splitting cpp derived sources). (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Address comments. Created 8 years, 9 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 #!/usr/bin/python 1 #!/usr/bin/python
2 # Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 2 # Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
3 # for details. All rights reserved. Use of this source code is governed by a 3 # for details. All rights reserved. Use of this source code is governed by a
4 # BSD-style license that can be found in the LICENSE file. 4 # BSD-style license that can be found in the LICENSE file.
5 5
6 """This module provides shared functionality for the systems to generate 6 """This module provides shared functionality for the systems to generate
7 native binding from the IDL database.""" 7 native binding from the IDL database."""
8 8
9 import emitter 9 import emitter
10 import os 10 import os
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
52 self._emitters.FileEmitter(cpp_impl_path), 52 self._emitters.FileEmitter(cpp_impl_path),
53 self._BaseDefines(interface), 53 self._BaseDefines(interface),
54 self._templates) 54 self._templates)
55 55
56 def ProcessCallback(self, interface, info): 56 def ProcessCallback(self, interface, info):
57 self._interface = interface 57 self._interface = interface
58 58
59 dart_interface_path = self._FilePathForDartInterface(self._interface.id) 59 dart_interface_path = self._FilePathForDartInterface(self._interface.id)
60 self._dom_public_files.append(dart_interface_path) 60 self._dom_public_files.append(dart_interface_path)
61 61
62 cpp_impl_includes = set()
62 cpp_header_handlers_emitter = emitter.Emitter() 63 cpp_header_handlers_emitter = emitter.Emitter()
63 cpp_impl_handlers_emitter = emitter.Emitter() 64 cpp_impl_handlers_emitter = emitter.Emitter()
64 class_name = 'Dart%s' % self._interface.id 65 class_name = 'Dart%s' % self._interface.id
65 for operation in interface.operations: 66 for operation in interface.operations:
66 if operation.type.id == 'void': 67 if operation.type.id == 'void':
67 return_type = 'void' 68 return_type = 'void'
68 return_prefix = '' 69 return_prefix = ''
69 else: 70 else:
70 return_type = 'bool' 71 return_type = 'bool'
71 return_prefix = 'return ' 72 return_prefix = 'return '
72 73
73 parameters = [] 74 parameters = []
74 arguments = [] 75 arguments = []
75 for argument in operation.arguments: 76 for argument in operation.arguments:
76 argument_type_info = GetIDLTypeInfo(argument.type) 77 argument_type_info = GetIDLTypeInfo(argument.type)
77 parameters.append('%s %s' % (argument_type_info.parameter_type(), 78 parameters.append('%s %s' % (argument_type_info.parameter_type(),
78 argument.id)) 79 argument.id))
79 arguments.append(argument.id) 80 arguments.append(argument.id)
81 cpp_impl_includes |= set(argument_type_info.conversion_includes())
antonm 2012/03/01 15:44:50 or cpp_impl_includes.update(argument_type_info.con
80 82
81 cpp_header_handlers_emitter.Emit( 83 cpp_header_handlers_emitter.Emit(
82 '\n' 84 '\n'
83 ' virtual $TYPE handleEvent($PARAMETERS);\n', 85 ' virtual $TYPE handleEvent($PARAMETERS);\n',
84 TYPE=return_type, PARAMETERS=', '.join(parameters)) 86 TYPE=return_type, PARAMETERS=', '.join(parameters))
85 87
86 cpp_impl_handlers_emitter.Emit( 88 cpp_impl_handlers_emitter.Emit(
87 '\n' 89 '\n'
88 '$TYPE $CLASS_NAME::handleEvent($PARAMETERS)\n' 90 '$TYPE $CLASS_NAME::handleEvent($PARAMETERS)\n'
89 '{\n' 91 '{\n'
(...skipping 10 matching lines...) Expand all
100 cpp_header_emitter.Emit( 102 cpp_header_emitter.Emit(
101 self._templates.Load('cpp_callback_header.template'), 103 self._templates.Load('cpp_callback_header.template'),
102 INTERFACE=self._interface.id, 104 INTERFACE=self._interface.id,
103 HANDLERS=cpp_header_handlers_emitter.Fragments()) 105 HANDLERS=cpp_header_handlers_emitter.Fragments())
104 106
105 cpp_impl_path = self._FilePathForCppImplementation(self._interface.id) 107 cpp_impl_path = self._FilePathForCppImplementation(self._interface.id)
106 self._cpp_impl_files.append(cpp_impl_path) 108 self._cpp_impl_files.append(cpp_impl_path)
107 cpp_impl_emitter = self._emitters.FileEmitter(cpp_impl_path) 109 cpp_impl_emitter = self._emitters.FileEmitter(cpp_impl_path)
108 cpp_impl_emitter.Emit( 110 cpp_impl_emitter.Emit(
109 self._templates.Load('cpp_callback_implementation.template'), 111 self._templates.Load('cpp_callback_implementation.template'),
112 INCLUDES=_GenerateCPPIncludes(cpp_impl_includes),
110 INTERFACE=self._interface.id, 113 INTERFACE=self._interface.id,
111 HANDLERS=cpp_impl_handlers_emitter.Fragments()) 114 HANDLERS=cpp_impl_handlers_emitter.Fragments())
112 115
113 def GenerateLibraries(self, lib_dir): 116 def GenerateLibraries(self, lib_dir):
114 auxiliary_dir = os.path.relpath(self._auxiliary_dir, self._output_dir) 117 auxiliary_dir = os.path.relpath(self._auxiliary_dir, self._output_dir)
115 118
116 # Generate dom_public.dart. 119 # Generate dom_public.dart.
117 self._GenerateLibFile( 120 self._GenerateLibFile(
118 'dom_public.darttemplate', 121 'dom_public.darttemplate',
119 os.path.join(self._output_dir, 'dom_public.dart'), 122 os.path.join(self._output_dir, 'dom_public.dart'),
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
153 ' if (Dart_NativeFunction func = $CLASS_NAME::resolver(name, argume ntCount))\n' 156 ' if (Dart_NativeFunction func = $CLASS_NAME::resolver(name, argume ntCount))\n'
154 ' return func;\n', 157 ' return func;\n',
155 CLASS_NAME=os.path.splitext(os.path.basename(path))[0]) 158 CLASS_NAME=os.path.splitext(os.path.basename(path))[0])
156 159
157 cpp_resolver_emitter = self._emitters.FileEmitter(cpp_resolver_path) 160 cpp_resolver_emitter = self._emitters.FileEmitter(cpp_resolver_path)
158 cpp_resolver_emitter.Emit( 161 cpp_resolver_emitter.Emit(
159 self._templates.Load('cpp_resolver.template'), 162 self._templates.Load('cpp_resolver.template'),
160 INCLUDES=includes_emitter.Fragments(), 163 INCLUDES=includes_emitter.Fragments(),
161 RESOLVER_BODY=resolver_body_emitter.Fragments()) 164 RESOLVER_BODY=resolver_body_emitter.Fragments())
162 165
163 # Generate DartDerivedSourcesAll.cpp 166 # Generate DartDerivedSourcesXX.cpp.
164 cpp_all_in_one_path = os.path.join(self._output_dir, 167 partitions = 20 # FIXME: this should be configurable.
165 'DartDerivedSourcesAll.cpp') 168 sources_count = len(self._cpp_impl_files)
169 for i in range(0, partitions):
170 derived_sources_path = os.path.join(self._output_dir,
171 'DartDerivedSources%02i.cpp' % (i + 1))
166 172
167 includes_emitter = emitter.Emitter() 173 includes_emitter = emitter.Emitter()
168 for file in self._cpp_impl_files: 174 for impl_file in self._cpp_impl_files[i::partitions]:
169 path = os.path.relpath(file, os.path.dirname(cpp_all_in_one_path)) 175 path = os.path.relpath(impl_file, os.path.dirname(cpp_all_in_one_path) )
170 includes_emitter.Emit('#include "$PATH"\n', PATH=path) 176 includes_emitter.Emit('#include "$PATH"\n', PATH=path)
171 177
172 cpp_all_in_one_emitter = self._emitters.FileEmitter(cpp_all_in_one_path) 178 cpp_all_in_one_emitter = self._emitters.FileEmitter(derived_sources_path)
antonm 2012/03/01 15:44:50 cpp_all_in_one, cpp_all_in_one, la-la
173 cpp_all_in_one_emitter.Emit( 179 cpp_all_in_one_emitter.Emit(
174 self._templates.Load('cpp_all_in_one.template'), 180 self._templates.Load('cpp_all_in_one.template'),
175 INCLUDES=includes_emitter.Fragments()) 181 INCLUDES=includes_emitter.Fragments())
176 182
177 # Generate DartResolver.cpp 183 # Generate DartResolver.cpp.
178 cpp_resolver_path = os.path.join(self._output_dir, 'DartResolver.cpp') 184 cpp_resolver_path = os.path.join(self._output_dir, 'DartResolver.cpp')
179 185
180 includes_emitter = emitter.Emitter() 186 includes_emitter = emitter.Emitter()
181 resolver_body_emitter = emitter.Emitter() 187 resolver_body_emitter = emitter.Emitter()
182 for file in self._cpp_header_files: 188 for file in self._cpp_header_files:
183 path = os.path.relpath(file, os.path.dirname(cpp_resolver_path)) 189 path = os.path.relpath(file, os.path.dirname(cpp_resolver_path))
184 includes_emitter.Emit('#include "$PATH"\n', PATH=path) 190 includes_emitter.Emit('#include "$PATH"\n', PATH=path)
185 resolver_body_emitter.Emit( 191 resolver_body_emitter.Emit(
186 ' if (Dart_NativeFunction func = $CLASS_NAME::resolver(name, argu mentCount))\n' 192 ' if (Dart_NativeFunction func = $CLASS_NAME::resolver(name, argu mentCount))\n'
187 ' return func;\n', 193 ' return func;\n',
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
241 self._cpp_impl_emitter = cpp_impl_emitter 247 self._cpp_impl_emitter = cpp_impl_emitter
242 self._base_members = base_members 248 self._base_members = base_members
243 self._templates = templates 249 self._templates = templates
244 self._current_secondary_parent = None 250 self._current_secondary_parent = None
245 251
246 def StartInterface(self): 252 def StartInterface(self):
247 self._class_name = self._ImplClassName(self._interface.id) 253 self._class_name = self._ImplClassName(self._interface.id)
248 self._interface_type_info = GetIDLTypeInfoByName(self._interface.id) 254 self._interface_type_info = GetIDLTypeInfoByName(self._interface.id)
249 self._members_emitter = emitter.Emitter() 255 self._members_emitter = emitter.Emitter()
250 self._cpp_declarations_emitter = emitter.Emitter() 256 self._cpp_declarations_emitter = emitter.Emitter()
251 self._cpp_impl_includes = {} 257 self._cpp_impl_includes = set()
252 self._cpp_definitions_emitter = emitter.Emitter() 258 self._cpp_definitions_emitter = emitter.Emitter()
253 self._cpp_resolver_emitter = emitter.Emitter() 259 self._cpp_resolver_emitter = emitter.Emitter()
254 260
255 self._GenerateConstructors() 261 self._GenerateConstructors()
256 262
257 def _GenerateConstructors(self): 263 def _GenerateConstructors(self):
258 if not self._IsConstructable(): 264 if not self._IsConstructable():
259 return 265 return
260 266
261 # TODO(antonm): currently we don't have information about number of argument s expected by 267 # TODO(antonm): currently we don't have information about number of argument s expected by
(...skipping 19 matching lines...) Expand all
281 create_function = 'create' 287 create_function = 'create'
282 if 'NamedConstructor' in self._interface.ext_attrs: 288 if 'NamedConstructor' in self._interface.ext_attrs:
283 raises_dart_exceptions = True 289 raises_dart_exceptions = True
284 parameter_definitions_emitter.Emit( 290 parameter_definitions_emitter.Emit(
285 ' DOMWindow* domWindow = DartUtilities::domWindowForCurrentIs olate();\n' 291 ' DOMWindow* domWindow = DartUtilities::domWindowForCurrentIs olate();\n'
286 ' if (!domWindow) {\n' 292 ' if (!domWindow) {\n'
287 ' exception = Dart_NewString("Failed to fetch domWindow") ;\n' 293 ' exception = Dart_NewString("Failed to fetch domWindow") ;\n'
288 ' goto fail;\n' 294 ' goto fail;\n'
289 ' }\n' 295 ' }\n'
290 ' Document* document = domWindow->document();\n') 296 ' Document* document = domWindow->document();\n')
297 self._cpp_impl_includes.add('DOMWindow')
291 arguments.append('document') 298 arguments.append('document')
292 create_function = 'createForJSConstructor' 299 create_function = 'createForJSConstructor'
293 if 'CallWith' in self._interface.ext_attrs: 300 if 'CallWith' in self._interface.ext_attrs:
294 call_with = self._interface.ext_attrs['CallWith'] 301 call_with = self._interface.ext_attrs['CallWith']
295 if call_with == 'ScriptExecutionContext': 302 if call_with == 'ScriptExecutionContext':
296 raises_dart_exceptions = True 303 raises_dart_exceptions = True
297 parameter_definitions_emitter.Emit( 304 parameter_definitions_emitter.Emit(
298 ' ScriptExecutionContext* context = DartUtilities::scriptExec utionContext();\n' 305 ' ScriptExecutionContext* context = DartUtilities::scriptExec utionContext();\n'
299 ' if (!context) {\n' 306 ' if (!context) {\n'
300 ' exception = Dart_NewString("Failed to create an object" );\n' 307 ' exception = Dart_NewString("Failed to create an object" );\n'
(...skipping 28 matching lines...) Expand all
329 self._dart_impl_emitter.Emit( 336 self._dart_impl_emitter.Emit(
330 self._templates.Load('dart_implementation.darttemplate'), 337 self._templates.Load('dart_implementation.darttemplate'),
331 CLASS=self._class_name, BASE=base, INTERFACE=self._interface.id, 338 CLASS=self._class_name, BASE=base, INTERFACE=self._interface.id,
332 MEMBERS=self._members_emitter.Fragments()) 339 MEMBERS=self._members_emitter.Fragments())
333 340
334 self._GenerateCppHeader() 341 self._GenerateCppHeader()
335 342
336 self._cpp_impl_emitter.Emit( 343 self._cpp_impl_emitter.Emit(
337 self._templates.Load('cpp_implementation.template'), 344 self._templates.Load('cpp_implementation.template'),
338 INTERFACE=self._interface.id, 345 INTERFACE=self._interface.id,
339 INCLUDES=''.join(['#include "%s.h"\n' % 346 INCLUDES=_GenerateCPPIncludes(self._cpp_impl_includes),
340 k for k in self._cpp_impl_includes.keys()]),
341 CALLBACKS=self._cpp_definitions_emitter.Fragments(), 347 CALLBACKS=self._cpp_definitions_emitter.Fragments(),
342 RESOLVER=self._cpp_resolver_emitter.Fragments()) 348 RESOLVER=self._cpp_resolver_emitter.Fragments())
343 349
344 def _GenerateCppHeader(self): 350 def _GenerateCppHeader(self):
345 webcore_include = self._interface_type_info.webcore_include() 351 webcore_includes = _GenerateCPPIncludes(self._interface_type_info.webcore_in cludes())
346 if webcore_include:
347 webcore_include = '#include "%s.h"\n' % webcore_include
348 else:
349 webcore_include = ''
350 352
351 if ('CustomToJS' in self._interface.ext_attrs or 353 if ('CustomToJS' in self._interface.ext_attrs or
352 'CustomToJSObject' in self._interface.ext_attrs or 354 'CustomToJSObject' in self._interface.ext_attrs or
353 'PureInterface' in self._interface.ext_attrs or 355 'PureInterface' in self._interface.ext_attrs or
354 'CPPPureInterface' in self._interface.ext_attrs or 356 'CPPPureInterface' in self._interface.ext_attrs or
355 self._interface_type_info.custom_to_dart()): 357 self._interface_type_info.custom_to_dart()):
356 to_dart_value_template = ( 358 to_dart_value_template = (
357 'Dart_Handle toDartValue($(WEBCORE_CLASS_NAME)* value);\n') 359 'Dart_Handle toDartValue($(WEBCORE_CLASS_NAME)* value);\n')
358 else: 360 else:
359 to_dart_value_template = ( 361 to_dart_value_template = (
360 'inline Dart_Handle toDartValue($(WEBCORE_CLASS_NAME)* value)\n' 362 'inline Dart_Handle toDartValue($(WEBCORE_CLASS_NAME)* value)\n'
361 '{\n' 363 '{\n'
362 ' return DartDOMWrapper::toDart<Dart$(INTERFACE)>(value);\n' 364 ' return DartDOMWrapper::toDart<Dart$(INTERFACE)>(value);\n'
363 '}\n') 365 '}\n')
364 to_dart_value_emitter = emitter.Emitter() 366 to_dart_value_emitter = emitter.Emitter()
365 to_dart_value_emitter.Emit( 367 to_dart_value_emitter.Emit(
366 to_dart_value_template, 368 to_dart_value_template,
367 INTERFACE=self._interface.id, 369 INTERFACE=self._interface.id,
368 WEBCORE_CLASS_NAME=self._interface_type_info.native_type()) 370 WEBCORE_CLASS_NAME=self._interface_type_info.native_type())
369 371
370 self._cpp_header_emitter.Emit( 372 self._cpp_header_emitter.Emit(
371 self._templates.Load('cpp_header.template'), 373 self._templates.Load('cpp_header.template'),
372 INTERFACE=self._interface.id, 374 INTERFACE=self._interface.id,
373 WEBCORE_INCLUDE=webcore_include, 375 WEBCORE_INCLUDES=webcore_includes,
374 ADDITIONAL_INCLUDES='',
375 WEBCORE_CLASS_NAME=self._interface_type_info.native_type(), 376 WEBCORE_CLASS_NAME=self._interface_type_info.native_type(),
376 TO_DART_VALUE=to_dart_value_emitter.Fragments(), 377 TO_DART_VALUE=to_dart_value_emitter.Fragments(),
377 DECLARATIONS=self._cpp_declarations_emitter.Fragments()) 378 DECLARATIONS=self._cpp_declarations_emitter.Fragments())
378 379
379 def AddAttribute(self, getter, setter): 380 def AddAttribute(self, getter, setter):
380 # FIXME: Dartium does not support attribute event listeners. However, JS 381 # FIXME: Dartium does not support attribute event listeners. However, JS
381 # implementation falls back to them when addEventListener is not available. 382 # implementation falls back to them when addEventListener is not available.
382 # Make sure addEventListener is available in all EventTargets and remove 383 # Make sure addEventListener is available in all EventTargets and remove
383 # this check. 384 # this check.
384 if (getter or setter).type.id == 'EventListener': 385 if (getter or setter).type.id == 'EventListener':
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
576 if 'CallWith' in operation.ext_attrs: 577 if 'CallWith' in operation.ext_attrs:
577 call_with = operation.ext_attrs['CallWith'] 578 call_with = operation.ext_attrs['CallWith']
578 if call_with == 'ScriptExecutionContext': 579 if call_with == 'ScriptExecutionContext':
579 parameter_definitions_emitter.Emit( 580 parameter_definitions_emitter.Emit(
580 ' ScriptExecutionContext* context = DartUtilities::scriptExec utionContext();\n' 581 ' ScriptExecutionContext* context = DartUtilities::scriptExec utionContext();\n'
581 ' if (!context)\n' 582 ' if (!context)\n'
582 ' return;\n') 583 ' return;\n')
583 arguments.append('context') 584 arguments.append('context')
584 elif call_with == 'ScriptArguments|CallStack': 585 elif call_with == 'ScriptArguments|CallStack':
585 raises_dart_exceptions = True 586 raises_dart_exceptions = True
586 self._cpp_impl_includes['ScriptArguments'] = 1 587 self._cpp_impl_includes.add('DOMWindow')
587 self._cpp_impl_includes['ScriptCallStack'] = 1 588 self._cpp_impl_includes.add('ScriptArguments')
588 self._cpp_impl_includes['V8Proxy'] = 1 589 self._cpp_impl_includes.add('ScriptCallStack')
589 self._cpp_impl_includes['v8'] = 1 590 self._cpp_impl_includes.add('V8Proxy')
591 self._cpp_impl_includes.add('v8')
590 parameter_definitions_emitter.Emit( 592 parameter_definitions_emitter.Emit(
591 ' v8::HandleScope handleScope;\n' 593 ' v8::HandleScope handleScope;\n'
592 ' v8::Context::Scope scope(V8Proxy::mainWorldContext(DartUtil ities::domWindowForCurrentIsolate()->frame()));\n' 594 ' v8::Context::Scope scope(V8Proxy::mainWorldContext(DartUtil ities::domWindowForCurrentIsolate()->frame()));\n'
593 ' Dart_Handle customArgument = Dart_GetNativeArgument(args, $ INDEX);\n' 595 ' Dart_Handle customArgument = Dart_GetNativeArgument(args, $ INDEX);\n'
594 ' RefPtr<ScriptArguments> scriptArguments(DartUtilities::crea teScriptArguments(customArgument, exception));\n' 596 ' RefPtr<ScriptArguments> scriptArguments(DartUtilities::crea teScriptArguments(customArgument, exception));\n'
595 ' if (!scriptArguments)\n' 597 ' if (!scriptArguments)\n'
596 ' goto fail;\n' 598 ' goto fail;\n'
597 ' RefPtr<ScriptCallStack> scriptCallStack(DartUtilities::crea teScriptCallStack());\n' 599 ' RefPtr<ScriptCallStack> scriptCallStack(DartUtilities::crea teScriptCallStack());\n'
598 ' if (!scriptCallStack->size())\n' 600 ' if (!scriptCallStack->size())\n'
599 ' return;\n', 601 ' return;\n',
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
668 ' DartApiScope dartApiScope;\n' 670 ' DartApiScope dartApiScope;\n'
669 '$BODY' 671 '$BODY'
670 '}\n', 672 '}\n',
671 CALLBACK_NAME=callback_name, 673 CALLBACK_NAME=callback_name,
672 BODY=body) 674 BODY=body)
673 675
674 def _GenerateParameterAdapter(self, emitter, idl_argument, index): 676 def _GenerateParameterAdapter(self, emitter, idl_argument, index):
675 type_info = GetIDLTypeInfo(idl_argument.type) 677 type_info = GetIDLTypeInfo(idl_argument.type)
676 (adapter_type, include_name) = type_info.parameter_adapter_info() 678 (adapter_type, include_name) = type_info.parameter_adapter_info()
677 if include_name: 679 if include_name:
678 self._cpp_impl_includes[include_name] = 1 680 self._cpp_impl_includes.add(include_name)
679 flags = '' 681 flags = ''
680 if (idl_argument.ext_attrs.get('Optional') == 'DefaultIsNullString' or 682 if (idl_argument.ext_attrs.get('Optional') == 'DefaultIsNullString' or
681 ('Optional' in idl_argument.ext_attrs and 'Callback' in idl_argument.ext _attrs)): 683 ('Optional' in idl_argument.ext_attrs and 'Callback' in idl_argument.ext _attrs)):
682 flags = ', DartUtilities::ConvertNullToDefaultValue' 684 flags = ', DartUtilities::ConvertNullToDefaultValue'
683 emitter.Emit( 685 emitter.Emit(
684 '\n' 686 '\n'
685 ' const $ADAPTER_TYPE $NAME(Dart_GetNativeArgument(args, $INDEX)$ FLAGS);\n' 687 ' const $ADAPTER_TYPE $NAME(Dart_GetNativeArgument(args, $INDEX)$ FLAGS);\n'
686 ' if (!$NAME.conversionSuccessful()) {\n' 688 ' if (!$NAME.conversionSuccessful()) {\n'
687 ' exception = $NAME.exception();\n' 689 ' exception = $NAME.exception();\n'
688 ' goto fail;\n' 690 ' goto fail;\n'
(...skipping 28 matching lines...) Expand all
717 719
718 return cpp_callback_name 720 return cpp_callback_name
719 721
720 def _GenerateWebCoreReflectionAttributeName(self, attr): 722 def _GenerateWebCoreReflectionAttributeName(self, attr):
721 namespace = 'HTMLNames' 723 namespace = 'HTMLNames'
722 svg_exceptions = ['class', 'id', 'onabort', 'onclick', 'onerror', 'onload', 724 svg_exceptions = ['class', 'id', 'onabort', 'onclick', 'onerror', 'onload',
723 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 725 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover',
724 'onmouseup', 'onresize', 'onscroll', 'onunload'] 726 'onmouseup', 'onresize', 'onscroll', 'onunload']
725 if self._interface.id.startswith('SVG') and not attr.id in svg_exceptions: 727 if self._interface.id.startswith('SVG') and not attr.id in svg_exceptions:
726 namespace = 'SVGNames' 728 namespace = 'SVGNames'
727 self._cpp_impl_includes[namespace] = 1 729 self._cpp_impl_includes.add(namespace)
728 730
729 attribute_name = attr.ext_attrs['Reflect'] or attr.id.lower() 731 attribute_name = attr.ext_attrs['Reflect'] or attr.id.lower()
730 return 'WebCore::%s::%sAttr' % (namespace, attribute_name) 732 return 'WebCore::%s::%sAttr' % (namespace, attribute_name)
731 733
732 def _GenerateWebCoreFunctionExpression(self, function_name, idl_node): 734 def _GenerateWebCoreFunctionExpression(self, function_name, idl_node):
733 if 'ImplementedBy' in idl_node.ext_attrs: 735 if 'ImplementedBy' in idl_node.ext_attrs:
734 return '%s::%s' % (idl_node.ext_attrs['ImplementedBy'], function_name) 736 return '%s::%s' % (idl_node.ext_attrs['ImplementedBy'], function_name)
735 return '%s%s' % (self._interface_type_info.receiver(), function_name) 737 return '%s%s' % (self._interface_type_info.receiver(), function_name)
736 738
737 def _GenerateWebCoreInvocation(self, function_expression, arguments, 739 def _GenerateWebCoreInvocation(self, function_expression, arguments,
738 idl_return_type, attributes, raises_dom_exceptions): 740 idl_return_type, attributes, raises_dom_exceptions):
739 invocation_template = ' $FUNCTION_CALL;\n' 741 invocation_template = ' $FUNCTION_CALL;\n'
740 if idl_return_type and idl_return_type.id != 'void': 742 if idl_return_type and idl_return_type.id != 'void':
741 return_type_info = GetIDLTypeInfo(idl_return_type) 743 return_type_info = GetIDLTypeInfo(idl_return_type)
742 if return_type_info.conversion_include(): 744 self._cpp_impl_includes |= set(return_type_info.conversion_includes())
antonm 2012/03/01 15:44:50 ditto
743 self._cpp_impl_includes[return_type_info.conversion_include()] = 1
744 745
745 # Generate C++ cast based on idl return type. 746 # Generate C++ cast based on idl return type.
746 conversion_cast = return_type_info.conversion_cast('$FUNCTION_CALL') 747 conversion_cast = return_type_info.conversion_cast('$FUNCTION_CALL')
747 if isinstance(return_type_info, SVGTearOffIDLTypeInfo): 748 if isinstance(return_type_info, SVGTearOffIDLTypeInfo):
748 svg_primitive_types = ['SVGAngle', 'SVGLength', 'SVGMatrix', 749 svg_primitive_types = ['SVGAngle', 'SVGLength', 'SVGMatrix',
749 'SVGNumber', 'SVGPoint', 'SVGRect', 'SVGTransform'] 750 'SVGNumber', 'SVGPoint', 'SVGRect', 'SVGTransform']
750 conversion_cast = '%s::create($FUNCTION_CALL)' 751 conversion_cast = '%s::create($FUNCTION_CALL)'
751 if self._interface.id.startswith('SVGAnimated'): 752 if self._interface.id.startswith('SVGAnimated'):
752 conversion_cast = 'static_cast<%s*>($FUNCTION_CALL)' 753 conversion_cast = 'static_cast<%s*>($FUNCTION_CALL)'
753 elif return_type_info.idl_type() == 'SVGStringList': 754 elif return_type_info.idl_type() == 'SVGStringList':
(...skipping 25 matching lines...) Expand all
779 ' ExceptionCode ec = 0;\n' 780 ' ExceptionCode ec = 0;\n'
780 '$INVOCATION' 781 '$INVOCATION'
781 ' if (UNLIKELY(ec)) {\n' 782 ' if (UNLIKELY(ec)) {\n'
782 ' exception = DartDOMWrapper::exceptionCodeToDartException( ec);\n' 783 ' exception = DartDOMWrapper::exceptionCodeToDartException( ec);\n'
783 ' goto fail;\n' 784 ' goto fail;\n'
784 ' }\n', 785 ' }\n',
785 INVOCATION=invocation_template) 786 INVOCATION=invocation_template)
786 787
787 if 'ImplementedBy' in attributes: 788 if 'ImplementedBy' in attributes:
788 arguments.insert(0, 'receiver') 789 arguments.insert(0, 'receiver')
789 self._cpp_impl_includes[attributes['ImplementedBy']] = 1 790 self._cpp_impl_includes.add(attributes['ImplementedBy'])
790 791
791 return emitter.Format(invocation_template, 792 return emitter.Format(invocation_template,
792 FUNCTION_CALL='%s(%s)' % (function_expression, ', '.join(arguments))) 793 FUNCTION_CALL='%s(%s)' % (function_expression, ', '.join(arguments)))
794
795 def _GenerateCPPIncludes(includes):
796 return ''.join(['#include "%s.h"\n' % include for include in includes])
OLDNEW
« no previous file with comments | « client/dom/scripts/generator.py ('k') | client/dom/templates/dom/native/cpp_callback_implementation.template » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698