diff options
author | asargent@chromium.org <asargent@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-04-17 17:04:59 +0000 |
---|---|---|
committer | asargent@chromium.org <asargent@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-04-17 17:04:59 +0000 |
commit | 378752b3819f97d01c0fab9888b1a5f2285d46b6 (patch) | |
tree | 02293ded9afe8c13b4dad4550d9b0b801b9e72af /ppapi/generators | |
parent | 3eeddd89ad3e8a95bf01bf68dca8925a5f818fdb (diff) | |
download | chromium_src-378752b3819f97d01c0fab9888b1a5f2285d46b6.zip chromium_src-378752b3819f97d01c0fab9888b1a5f2285d46b6.tar.gz chromium_src-378752b3819f97d01c0fab9888b1a5f2285d46b6.tar.bz2 |
Revert 194613 "Pepper: Autogenerate thunk for PPB_URL_Loader."
> Pepper: Autogenerate thunk for PPB_URL_Loader.
>
> This requires another annotation:
> "always_set_output_parameters"
>
> This annotation ensures that the thunk implementation will zero-out the value of all output parameters on failure.
>
> Tested:
> Built chrome and browser_tests.
>
> BUG=
>
> Review URL: https://codereview.chromium.org/14007010
TBR=teravest@chromium.org
Review URL: https://codereview.chromium.org/14195008
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@194617 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ppapi/generators')
-rwxr-xr-x | ppapi/generators/idl_thunk.py | 79 |
1 files changed, 24 insertions, 55 deletions
diff --git a/ppapi/generators/idl_thunk.py b/ppapi/generators/idl_thunk.py index aa28e9c..6018753 100755 --- a/ppapi/generators/idl_thunk.py +++ b/ppapi/generators/idl_thunk.py @@ -214,30 +214,6 @@ def _MakeCreateMemberBody(interface, member, args): return body -def _GetOutputParams(member, release): - """Returns output parameters (and their types) for a member function. - - Args: - member - IDLNode for the member function - release - Release to get output parameters for - Returns: - A list of name strings for all output parameters of the member - function. - """ - out_params = [] - callnode = member.GetOneOf('Callspec') - if callnode: - cgen = CGen() - for param in callnode.GetListOf('Param'): - mode = cgen.GetParamMode(param) - if mode == 'out': - # We use the 'store' mode when getting the parameter type, since we - # need to call sizeof() for memset(). - _, pname, _, _ = cgen.GetComponents(param, release, 'store') - out_params.append(pname) - return out_params - - def _MakeNormalMemberBody(filenode, release, node, member, rtype, args, include_version, meta): """Returns the body of a typical function. @@ -277,40 +253,42 @@ def _MakeNormalMemberBody(filenode, release, node, member, rtype, args, call_arglist) 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) + body += 'if (enter.failed())\n' 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 + body += ' return %s;\n' % value + body += 'return enter.SetResult(%s);' % invocation elif rtype == 'void': + # On failure, zero out all output parameters. + out_params = [] + callnode = member.GetOneOf('Callspec') + if callnode: + cgen = CGen() + for param in callnode.GetListOf('Param'): + mode = cgen.GetParamMode(param) + if mode == 'out': + # We use the 'store' mode when getting the parameter type, since we + # need to call sizeof() for memset(). + ptype, pname, _, _ = cgen.GetComponents(param, release, 'store') + out_params.append((pname, ptype)) + body = '%s\n' % _MakeEnterLine(filenode, node, member, args[0], handle_errors, None, meta) - if member.GetProperty('always_set_output_parameters'): + if not out_params: + body += 'if (enter.succeeded())\n' + body += ' %s;' % invocation + else: 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) + body += '\nmemset(%s, 0, sizeof(%s));' % param meta.AddBuiltinInclude('string.h') - else: - body += 'if (enter.succeeded())\n' - body += ' %s;' % invocation else: value = member.GetProperty('on_failure') @@ -321,18 +299,9 @@ def _MakeNormalMemberBody(filenode, release, node, member, rtype, args, 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 + body += 'if (enter.failed())\n' + body += ' return %s;\n' % value + body += 'return %s;' % invocation return body |