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

Side by Side Diff: ppapi/generators/idl_thunk.py

Issue 14161017: Pepper: Simplify idl_thunk implementation. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebased Created 7 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
« no previous file with comments | « no previous file | ppapi/thunk/ppb_audio_input_dev_thunk.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 """ Generator for C++ style thunks """ 6 """ Generator for C++ style thunks """
7 7
8 import glob 8 import glob
9 import os 9 import os
10 import re 10 import re
(...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after
272 version = node.GetVersion(release).replace('.', '_') 272 version = node.GetVersion(release).replace('.', '_')
273 function_name += version 273 function_name += version
274 274
275 invocation = 'enter.%s()->%s(%s)' % (function_container, 275 invocation = 'enter.%s()->%s(%s)' % (function_container,
276 function_name, 276 function_name,
277 call_arglist) 277 call_arglist)
278 278
279 handle_errors = not (member.GetProperty('report_errors') == 'False') 279 handle_errors = not (member.GetProperty('report_errors') == 'False')
280 out_params = _GetOutputParams(member, release) 280 out_params = _GetOutputParams(member, release)
281 if is_callback_func: 281 if is_callback_func:
282 # TODO(teravest): Reduce code duplication below.
283 body = '%s\n' % _MakeEnterLine(filenode, node, member, args[0], 282 body = '%s\n' % _MakeEnterLine(filenode, node, member, args[0],
284 handle_errors, args[len(args) - 1][1], meta) 283 handle_errors, args[len(args) - 1][1], meta)
285 value = member.GetProperty('on_failure') 284 failure_value = member.GetProperty('on_failure')
286 if value is None: 285 if failure_value is None:
287 value = 'enter.retval()' 286 failure_value = 'enter.retval()'
288 if member.GetProperty('always_set_output_parameters'): 287 failure_return = 'return %s;' % failure_value
289 body += 'if (enter.failed()) {\n' 288 success_return = 'return enter.SetResult(%s);' % invocation
290 for param in out_params:
291 body += ' memset(%s, 0, sizeof(*%s));\n' % (param, param)
292 body += ' return %s;\n' % value
293 body += '}\n'
294 body += 'return enter.SetResult(%s);' % invocation
295 meta.AddBuiltinInclude('string.h')
296 else:
297 body += 'if (enter.failed())\n'
298 body += ' return %s;\n' % value
299 body += 'return enter.SetResult(%s);' % invocation
300 elif rtype == 'void': 289 elif rtype == 'void':
301 body = '%s\n' % _MakeEnterLine(filenode, node, member, args[0], 290 body = '%s\n' % _MakeEnterLine(filenode, node, member, args[0],
302 handle_errors, None, meta) 291 handle_errors, None, meta)
303 if member.GetProperty('always_set_output_parameters'): 292 failure_return = 'return;'
304 body += 'if (enter.succeeded()) {\n' 293 success_return = '%s;' % invocation # We don't return anything for void.
305 body += ' %s;\n' % invocation
306 body += ' return;\n'
307 body += '}'
308 for param in out_params:
309 body += '\nmemset(%s, 0, sizeof(*%s));' % (param, param)
310 meta.AddBuiltinInclude('string.h')
311 else:
312 body += 'if (enter.succeeded())\n'
313 body += ' %s;' % invocation
314
315 else: 294 else:
316 value = member.GetProperty('on_failure')
317 if value is None:
318 value = _GetDefaultFailureValue(rtype)
319 if value is None:
320 raise TGenError('No default value for rtype %s' % rtype)
321
322 body = '%s\n' % _MakeEnterLine(filenode, node, member, args[0], 295 body = '%s\n' % _MakeEnterLine(filenode, node, member, args[0],
323 handle_errors, None, meta) 296 handle_errors, None, meta)
324 if member.GetProperty('always_set_output_parameters'): 297 failure_value = member.GetProperty('on_failure')
325 body += 'if (enter.failed()) {\n' 298 if failure_value is None:
326 for param in out_params: 299 failure_value = _GetDefaultFailureValue(rtype)
327 body += ' memset(%s, 0, sizeof(*%s));\n' % (param, param) 300 if failure_value is None:
328 body += ' return %s;\n' % value 301 raise TGenError('No default value for rtype %s' % rtype)
dmichael (off chromium) 2013/04/18 15:41:15 I know this is not a new line, but I think it woul
329 body += '}\n' 302 failure_return = 'return %s;' % failure_value
330 body += 'return %s;' % invocation 303 success_return = 'return %s;' % invocation
331 meta.AddBuiltinInclude('string.h') 304
332 else: 305 if member.GetProperty('always_set_output_parameters'):
333 body += 'if (enter.failed())\n' 306 body += 'if (enter.failed()) {\n'
334 body += ' return %s;\n' % value 307 for param in out_params:
335 body += 'return %s;' % invocation 308 body += ' memset(%s, 0, sizeof(*%s));\n' % (param, param)
309 body += ' %s\n' % failure_return
310 body += '}\n'
311 body += '%s' % success_return
312 meta.AddBuiltinInclude('string.h')
313 else:
314 body += 'if (enter.failed())\n'
315 body += ' %s\n' % failure_return
316 body += '%s' % success_return
336 return body 317 return body
337 318
338 319
339 def DefineMember(filenode, node, member, release, include_version, meta): 320 def DefineMember(filenode, node, member, release, include_version, meta):
340 """Returns a definition for a member function of an interface. 321 """Returns a definition for a member function of an interface.
341 322
342 Args: 323 Args:
343 filenode - IDLNode for the file 324 filenode - IDLNode for the file
344 node - IDLNode for the interface 325 node - IDLNode for the interface
345 member - IDLNode for the member function 326 member - IDLNode for the member function
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after
569 print "Golden file for M13-M14 failed." 550 print "Golden file for M13-M14 failed."
570 failed = 1 551 failed = 1
571 else: 552 else:
572 print "Golden file for M13-M14 passed." 553 print "Golden file for M13-M14 passed."
573 554
574 return failed 555 return failed
575 556
576 557
577 if __name__ == '__main__': 558 if __name__ == '__main__':
578 sys.exit(Main(sys.argv[1:])) 559 sys.exit(Main(sys.argv[1:]))
OLDNEW
« no previous file with comments | « no previous file | ppapi/thunk/ppb_audio_input_dev_thunk.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698