| Index: ppapi/generators/idl_thunk.py
|
| diff --git a/ppapi/generators/idl_thunk.py b/ppapi/generators/idl_thunk.py
|
| index ad770fedc7222c1c92f98aaaff2945c6b4487d74..6018753580de0e64bcf193285e8ad288f68140b2 100755
|
| --- a/ppapi/generators/idl_thunk.py
|
| +++ b/ppapi/generators/idl_thunk.py
|
| @@ -101,7 +101,8 @@ def _AddApiHeader(filenode, meta):
|
| meta.AddApi(api_basename + '_api')
|
|
|
|
|
| -def _MakeEnterLine(filenode, interface, arg, handle_errors, callback, meta):
|
| +def _MakeEnterLine(filenode, interface, member, arg, handle_errors, callback,
|
| + meta):
|
| """Returns an EnterInstance/EnterResource string for a function."""
|
| api_name = interface.GetName()
|
| if api_name.endswith('Trusted'):
|
| @@ -109,20 +110,28 @@ def _MakeEnterLine(filenode, interface, arg, handle_errors, callback, meta):
|
| if api_name.endswith('_Dev'):
|
| api_name = api_name[:-len('_Dev')]
|
| api_name += '_API'
|
| + if member.GetProperty('api'): # Override API name.
|
| + manually_provided_api = True
|
| + # TODO(teravest): Automatically guess the API header file.
|
| + api_name = member.GetProperty('api')
|
| + else:
|
| + manually_provided_api = False
|
|
|
| if arg[0] == 'PP_Instance':
|
| if callback is None:
|
| arg_string = arg[1]
|
| else:
|
| arg_string = '%s, %s' % (arg[1], callback)
|
| - if interface.GetProperty('singleton_resource'):
|
| - _AddApiHeader(filenode, meta)
|
| + if interface.GetProperty('singleton') or member.GetProperty('singleton'):
|
| + if not manually_provided_api:
|
| + _AddApiHeader(filenode, meta)
|
| return 'EnterInstanceAPI<%s> enter(%s);' % (api_name, arg_string)
|
| else:
|
| return 'EnterInstance enter(%s);' % arg_string
|
| elif arg[0] == 'PP_Resource':
|
| enter_type = 'EnterResource<%s>' % api_name
|
| - _AddApiHeader(filenode, meta)
|
| + if not manually_provided_api:
|
| + _AddApiHeader(filenode, meta)
|
| if callback is None:
|
| return '%s enter(%s, %s);' % (enter_type, arg[1],
|
| str(handle_errors).lower())
|
| @@ -245,8 +254,8 @@ def _MakeNormalMemberBody(filenode, release, node, member, rtype, args,
|
|
|
| handle_errors = not (member.GetProperty('report_errors') == 'False')
|
| if is_callback_func:
|
| - body = '%s\n' % _MakeEnterLine(filenode, node, args[0], handle_errors,
|
| - args[len(args) - 1][1], meta)
|
| + 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:
|
| @@ -267,8 +276,8 @@ def _MakeNormalMemberBody(filenode, release, node, member, rtype, args,
|
| ptype, pname, _, _ = cgen.GetComponents(param, release, 'store')
|
| out_params.append((pname, ptype))
|
|
|
| - body = '%s\n' % _MakeEnterLine(filenode, node, args[0], handle_errors,
|
| - None, meta)
|
| + body = '%s\n' % _MakeEnterLine(filenode, node, member, args[0],
|
| + handle_errors, None, meta)
|
| if not out_params:
|
| body += 'if (enter.succeeded())\n'
|
| body += ' %s;' % invocation
|
| @@ -288,8 +297,8 @@ def _MakeNormalMemberBody(filenode, release, node, member, rtype, args,
|
| if value is None:
|
| raise TGenError('No default value for rtype %s' % rtype)
|
|
|
| - body = '%s\n' % _MakeEnterLine(filenode, node, args[0], handle_errors,
|
| - None, meta)
|
| + body = '%s\n' % _MakeEnterLine(filenode, node, member, args[0],
|
| + handle_errors, None, meta)
|
| body += 'if (enter.failed())\n'
|
| body += ' return %s;\n' % value
|
| body += 'return %s;' % invocation
|
| @@ -314,7 +323,8 @@ def DefineMember(filenode, node, member, release, include_version, meta):
|
| body = 'VLOG(4) << \"%s::%s()\";\n' % (node.GetName(), member.GetName())
|
|
|
| if _IsTypeCheck(node, member):
|
| - body += '%s\n' % _MakeEnterLine(filenode, node, args[0], False, None, meta)
|
| + body += '%s\n' % _MakeEnterLine(filenode, node, member, args[0], False,
|
| + None, meta)
|
| body += 'return PP_FromBool(enter.succeeded());'
|
| elif member.GetName() == 'Create':
|
| body += _MakeCreateMemberBody(node, member, args)
|
| @@ -375,6 +385,9 @@ class TGen(GeneratorByFile):
|
|
|
| thunk_out = IDLOutFile(savename)
|
| body, meta = self.GenerateBody(thunk_out, filenode, releases, options)
|
| + # TODO(teravest): How do we handle repeated values?
|
| + if filenode.GetProperty('thunk_include'):
|
| + meta.AddInclude(filenode.GetProperty('thunk_include'))
|
| self.WriteHead(thunk_out, filenode, releases, options, meta)
|
| thunk_out.Write('\n\n'.join(body))
|
| self.WriteTail(thunk_out, filenode, releases, options)
|
|
|