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

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

Issue 14195008: Revert 194613 "Pepper: Autogenerate thunk for PPB_URL_Loader." (Closed) Base URL: svn://svn.chromium.org/chrome/
Patch Set: 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
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 196 matching lines...) Expand 10 before | Expand all | Expand 10 after
207 arg_list = ', '.join([a[1] for a in args]) 207 arg_list = ', '.join([a[1] for a in args])
208 if member.GetProperty('create_func'): 208 if member.GetProperty('create_func'):
209 create_func = member.GetProperty('create_func') 209 create_func = member.GetProperty('create_func')
210 else: 210 else:
211 create_func = _GetCreateFuncName(interface) 211 create_func = _GetCreateFuncName(interface)
212 body += 'return enter.functions()->%s(%s);' % (create_func, 212 body += 'return enter.functions()->%s(%s);' % (create_func,
213 arg_list) 213 arg_list)
214 return body 214 return body
215 215
216 216
217 def _GetOutputParams(member, release):
218 """Returns output parameters (and their types) for a member function.
219
220 Args:
221 member - IDLNode for the member function
222 release - Release to get output parameters for
223 Returns:
224 A list of name strings for all output parameters of the member
225 function.
226 """
227 out_params = []
228 callnode = member.GetOneOf('Callspec')
229 if callnode:
230 cgen = CGen()
231 for param in callnode.GetListOf('Param'):
232 mode = cgen.GetParamMode(param)
233 if mode == 'out':
234 # We use the 'store' mode when getting the parameter type, since we
235 # need to call sizeof() for memset().
236 _, pname, _, _ = cgen.GetComponents(param, release, 'store')
237 out_params.append(pname)
238 return out_params
239
240
241 def _MakeNormalMemberBody(filenode, release, node, member, rtype, args, 217 def _MakeNormalMemberBody(filenode, release, node, member, rtype, args,
242 include_version, meta): 218 include_version, meta):
243 """Returns the body of a typical function. 219 """Returns the body of a typical function.
244 220
245 Args: 221 Args:
246 filenode - IDLNode for the file 222 filenode - IDLNode for the file
247 release - release to generate body for 223 release - release to generate body for
248 node - IDLNode for the interface 224 node - IDLNode for the interface
249 member - IDLNode for the member function 225 member - IDLNode for the member function
250 rtype - Return type for the member function 226 rtype - Return type for the member function
(...skipping 19 matching lines...) Expand all
270 function_name = member.GetName() 246 function_name = member.GetName()
271 if include_version: 247 if include_version:
272 version = node.GetVersion(release).replace('.', '_') 248 version = node.GetVersion(release).replace('.', '_')
273 function_name += version 249 function_name += version
274 250
275 invocation = 'enter.%s()->%s(%s)' % (function_container, 251 invocation = 'enter.%s()->%s(%s)' % (function_container,
276 function_name, 252 function_name,
277 call_arglist) 253 call_arglist)
278 254
279 handle_errors = not (member.GetProperty('report_errors') == 'False') 255 handle_errors = not (member.GetProperty('report_errors') == 'False')
280 out_params = _GetOutputParams(member, release)
281 if is_callback_func: 256 if is_callback_func:
282 # TODO(teravest): Reduce code duplication below.
283 body = '%s\n' % _MakeEnterLine(filenode, node, member, args[0], 257 body = '%s\n' % _MakeEnterLine(filenode, node, member, args[0],
284 handle_errors, args[len(args) - 1][1], meta) 258 handle_errors, args[len(args) - 1][1], meta)
259 body += 'if (enter.failed())\n'
285 value = member.GetProperty('on_failure') 260 value = member.GetProperty('on_failure')
286 if value is None: 261 if value is None:
287 value = 'enter.retval()' 262 value = 'enter.retval()'
288 if member.GetProperty('always_set_output_parameters'): 263 body += ' return %s;\n' % value
289 body += 'if (enter.failed()) {\n' 264 body += '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': 265 elif rtype == 'void':
266 # On failure, zero out all output parameters.
267 out_params = []
268 callnode = member.GetOneOf('Callspec')
269 if callnode:
270 cgen = CGen()
271 for param in callnode.GetListOf('Param'):
272 mode = cgen.GetParamMode(param)
273 if mode == 'out':
274 # We use the 'store' mode when getting the parameter type, since we
275 # need to call sizeof() for memset().
276 ptype, pname, _, _ = cgen.GetComponents(param, release, 'store')
277 out_params.append((pname, ptype))
278
301 body = '%s\n' % _MakeEnterLine(filenode, node, member, args[0], 279 body = '%s\n' % _MakeEnterLine(filenode, node, member, args[0],
302 handle_errors, None, meta) 280 handle_errors, None, meta)
303 if member.GetProperty('always_set_output_parameters'): 281 if not out_params:
282 body += 'if (enter.succeeded())\n'
283 body += ' %s;' % invocation
284 else:
304 body += 'if (enter.succeeded()) {\n' 285 body += 'if (enter.succeeded()) {\n'
305 body += ' %s;\n' % invocation 286 body += ' %s;\n' % invocation
306 body += ' return;\n' 287 body += ' return;\n'
307 body += '}' 288 body += '}'
308 for param in out_params: 289 for param in out_params:
309 body += '\nmemset(%s, 0, sizeof(%s));' % (param, param) 290 body += '\nmemset(%s, 0, sizeof(%s));' % param
310 meta.AddBuiltinInclude('string.h') 291 meta.AddBuiltinInclude('string.h')
311 else:
312 body += 'if (enter.succeeded())\n'
313 body += ' %s;' % invocation
314 292
315 else: 293 else:
316 value = member.GetProperty('on_failure') 294 value = member.GetProperty('on_failure')
317 if value is None: 295 if value is None:
318 value = _GetDefaultFailureValue(rtype) 296 value = _GetDefaultFailureValue(rtype)
319 if value is None: 297 if value is None:
320 raise TGenError('No default value for rtype %s' % rtype) 298 raise TGenError('No default value for rtype %s' % rtype)
321 299
322 body = '%s\n' % _MakeEnterLine(filenode, node, member, args[0], 300 body = '%s\n' % _MakeEnterLine(filenode, node, member, args[0],
323 handle_errors, None, meta) 301 handle_errors, None, meta)
324 if member.GetProperty('always_set_output_parameters'): 302 body += 'if (enter.failed())\n'
325 body += 'if (enter.failed()) {\n' 303 body += ' return %s;\n' % value
326 for param in out_params: 304 body += 'return %s;' % invocation
327 body += ' memset(%s, 0, sizeof(%s));\n' % (param, param)
328 body += ' return %s;\n' % value
329 body += '}\n'
330 body += 'return %s;' % invocation
331 meta.AddBuiltinInclude('string.h')
332 else:
333 body += 'if (enter.failed())\n'
334 body += ' return %s;\n' % value
335 body += 'return %s;' % invocation
336 return body 305 return body
337 306
338 307
339 def DefineMember(filenode, node, member, release, include_version, meta): 308 def DefineMember(filenode, node, member, release, include_version, meta):
340 """Returns a definition for a member function of an interface. 309 """Returns a definition for a member function of an interface.
341 310
342 Args: 311 Args:
343 filenode - IDLNode for the file 312 filenode - IDLNode for the file
344 node - IDLNode for the interface 313 node - IDLNode for the interface
345 member - IDLNode for the member function 314 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." 538 print "Golden file for M13-M14 failed."
570 failed = 1 539 failed = 1
571 else: 540 else:
572 print "Golden file for M13-M14 passed." 541 print "Golden file for M13-M14 passed."
573 542
574 return failed 543 return failed
575 544
576 545
577 if __name__ == '__main__': 546 if __name__ == '__main__':
578 sys.exit(Main(sys.argv[1:])) 547 sys.exit(Main(sys.argv[1:]))
OLDNEW
« no previous file with comments | « trunk/src/ppapi/api/trusted/ppb_url_loader_trusted.idl ('k') | trunk/src/ppapi/ppapi_shared.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698