| Index: ppapi/generators/idl_thunk.py
|
| diff --git a/ppapi/generators/idl_thunk.py b/ppapi/generators/idl_thunk.py
|
| index d183e4b9224e407b94403aa745925b285409c3a5..7159412e15077cd5b43e17e36f6e7746edd33bfd 100755
|
| --- a/ppapi/generators/idl_thunk.py
|
| +++ b/ppapi/generators/idl_thunk.py
|
| @@ -279,60 +279,43 @@ def _MakeNormalMemberBody(filenode, release, node, member, rtype, args,
|
| handle_errors = not (member.GetProperty('report_errors') == 'False')
|
| out_params = _GetOutputParams(member, release)
|
| if is_callback_func:
|
| - # TODO(teravest): Reduce code duplication below.
|
| body = '%s\n' % _MakeEnterLine(filenode, node, member, args[0],
|
| handle_errors, args[len(args) - 1][1], meta)
|
| - value = member.GetProperty('on_failure')
|
| - if value is None:
|
| - value = 'enter.retval()'
|
| - if member.GetProperty('always_set_output_parameters'):
|
| - body += 'if (enter.failed()) {\n'
|
| - for param in out_params:
|
| - body += ' memset(%s, 0, sizeof(*%s));\n' % (param, param)
|
| - body += ' return %s;\n' % value
|
| - body += '}\n'
|
| - body += 'return enter.SetResult(%s);' % invocation
|
| - meta.AddBuiltinInclude('string.h')
|
| - else:
|
| - body += 'if (enter.failed())\n'
|
| - body += ' return %s;\n' % value
|
| - body += 'return enter.SetResult(%s);' % invocation
|
| + failure_value = member.GetProperty('on_failure')
|
| + if failure_value is None:
|
| + failure_value = 'enter.retval()'
|
| + failure_return = 'return %s;' % failure_value
|
| + success_return = 'return enter.SetResult(%s);' % invocation
|
| elif rtype == 'void':
|
| body = '%s\n' % _MakeEnterLine(filenode, node, member, args[0],
|
| handle_errors, None, meta)
|
| - if member.GetProperty('always_set_output_parameters'):
|
| - body += 'if (enter.succeeded()) {\n'
|
| - body += ' %s;\n' % invocation
|
| - body += ' return;\n'
|
| - body += '}'
|
| - for param in out_params:
|
| - body += '\nmemset(%s, 0, sizeof(*%s));' % (param, param)
|
| - meta.AddBuiltinInclude('string.h')
|
| - else:
|
| - body += 'if (enter.succeeded())\n'
|
| - body += ' %s;' % invocation
|
| -
|
| + failure_return = 'return;'
|
| + success_return = '%s;' % invocation # We don't return anything for void.
|
| else:
|
| - value = member.GetProperty('on_failure')
|
| - if value is None:
|
| - value = _GetDefaultFailureValue(rtype)
|
| - if value is None:
|
| - raise TGenError('No default value for rtype %s' % rtype)
|
| -
|
| body = '%s\n' % _MakeEnterLine(filenode, node, member, args[0],
|
| handle_errors, None, meta)
|
| - if member.GetProperty('always_set_output_parameters'):
|
| - body += 'if (enter.failed()) {\n'
|
| - for param in out_params:
|
| - body += ' memset(%s, 0, sizeof(*%s));\n' % (param, param)
|
| - body += ' return %s;\n' % value
|
| - body += '}\n'
|
| - body += 'return %s;' % invocation
|
| - meta.AddBuiltinInclude('string.h')
|
| - else:
|
| - body += 'if (enter.failed())\n'
|
| - body += ' return %s;\n' % value
|
| - body += 'return %s;' % invocation
|
| + failure_value = member.GetProperty('on_failure')
|
| + if failure_value is None:
|
| + failure_value = _GetDefaultFailureValue(rtype)
|
| + if failure_value is None:
|
| + raise TGenError('There is no default value for rtype %s. '
|
| + 'Maybe you should provide an on_failure attribute '
|
| + 'in the IDL file.' % rtype)
|
| + failure_return = 'return %s;' % failure_value
|
| + success_return = 'return %s;' % invocation
|
| +
|
| + if member.GetProperty('always_set_output_parameters'):
|
| + body += 'if (enter.failed()) {\n'
|
| + for param in out_params:
|
| + body += ' memset(%s, 0, sizeof(*%s));\n' % (param, param)
|
| + body += ' %s\n' % failure_return
|
| + body += '}\n'
|
| + body += '%s' % success_return
|
| + meta.AddBuiltinInclude('string.h')
|
| + else:
|
| + body += 'if (enter.failed())\n'
|
| + body += ' %s\n' % failure_return
|
| + body += '%s' % success_return
|
| return body
|
|
|
|
|
|
|