Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 Loading... | |
| 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 Loading... | |
| 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:])) |
| OLD | NEW |