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

Side by Side Diff: ppapi/generators/idl_c_proto.py

Issue 8568025: Pnacl ppapi shim generator (from IDL), based on Noel's first cut. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 1 month 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/python 1 #!/usr/bin/python
2 # 2 #
3 # Copyright (c) 2011 The Chromium Authors. All rights reserved. 3 # Copyright (c) 2011 The Chromium Authors. All rights reserved.
4 # Use of this source code is governed by a BSD-style license that can be 4 # Use of this source code is governed by a BSD-style license that can be
5 # found in the LICENSE file. 5 # found in the LICENSE file.
6 6
7 """ Generator for C style prototypes and definitions """ 7 """ Generator for C style prototypes and definitions """
8 8
9 import glob 9 import glob
10 import os 10 import os
(...skipping 320 matching lines...) Expand 10 before | Expand all | Expand 10 after
331 return 'return' 331 return 'return'
332 332
333 # 333 #
334 # GetComponents 334 # GetComponents
335 # 335 #
336 # Returns the signature components of an object as a tuple of 336 # Returns the signature components of an object as a tuple of
337 # (rtype, name, arrays, callspec) where: 337 # (rtype, name, arrays, callspec) where:
338 # rtype - The store or return type of the object. 338 # rtype - The store or return type of the object.
339 # name - The name of the object. 339 # name - The name of the object.
340 # arrays - A list of array dimensions as [] or [<fixed_num>]. 340 # arrays - A list of array dimensions as [] or [<fixed_num>].
341 # args - None of not a function, otherwise a list of parameters. 341 # args - None if not a function, otherwise a list of parameters.
342 # 342 #
343 def GetComponents(self, node, release, mode): 343 def GetComponents(self, node, release, mode):
344 self.LogEnter('GetComponents mode %s for %s %s' % (mode, node, release)) 344 self.LogEnter('GetComponents mode %s for %s %s' % (mode, node, release))
345 345
346 # Generate passing type by modifying root type 346 # Generate passing type by modifying root type
347 rtype = self.GetTypeByMode(node, release, mode) 347 rtype = self.GetTypeByMode(node, release, mode)
348 if node.IsA('Enum', 'Interface', 'Struct'): 348 if node.IsA('Enum', 'Interface', 'Struct'):
349 rname = node.GetName() 349 rname = node.GetName()
350 else: 350 else:
351 rname = node.GetType(release).GetName() 351 rname = node.GetType(release).GetName()
(...skipping 12 matching lines...) Expand all
364 ptype, pname, parray, pspec = self.GetComponents(param, release, mode) 364 ptype, pname, parray, pspec = self.GetComponents(param, release, mode)
365 callspec.append((ptype, pname, parray, pspec)) 365 callspec.append((ptype, pname, parray, pspec))
366 else: 366 else:
367 callspec = None 367 callspec = None
368 368
369 self.LogExit('GetComponents: %s, %s, %s, %s' % 369 self.LogExit('GetComponents: %s, %s, %s, %s' %
370 (rtype, name, arrayspec, callspec)) 370 (rtype, name, arrayspec, callspec))
371 return (rtype, name, arrayspec, callspec) 371 return (rtype, name, arrayspec, callspec)
372 372
373 373
374 def Compose(self, rtype, name, arrayspec, callspec, prefix, func_as_ptr): 374 def Compose(self, rtype, name, arrayspec, callspec, prefix, func_as_ptr,
375 func_attributes, is_cast):
jvoung - send to chromium... 2011/11/16 01:45:22 changed func_attributes to ptr_prefix changed is_c
375 self.LogEnter('Compose: %s %s' % (rtype, name)) 376 self.LogEnter('Compose: %s %s' % (rtype, name))
376 arrayspec = ''.join(arrayspec) 377 arrayspec = ''.join(arrayspec)
377 name = '%s%s%s' % (prefix, name, arrayspec) 378 name = '%s%s%s' % (prefix, name, arrayspec)
378 if callspec is None: 379 if callspec is None:
379 out = '%s %s' % (rtype, name) 380 out = '%s %s' % (rtype, name)
380 else: 381 else:
381 params = [] 382 params = []
382 for ptype, pname, parray, pspec in callspec: 383 for ptype, pname, parray, pspec in callspec:
383 params.append(self.Compose(ptype, pname, parray, pspec, '', True)) 384 params.append(self.Compose(ptype, pname, parray, pspec, '', True,
384 if func_as_ptr: name = '(*%s)' % name 385 func_attributes='', is_cast=''))
386 if func_as_ptr:
387 if is_cast:
388 name = '(%s*)' % (func_attributes)
389 else:
390 name = '(%s*%s)' % (func_attributes, name)
385 out = '%s %s(%s)' % (rtype, name, ', '.join(params)) 391 out = '%s %s(%s)' % (rtype, name, ', '.join(params))
386 self.LogExit('Exit Compose: %s' % out) 392 self.LogExit('Exit Compose: %s' % out)
387 return out 393 return out
388 394
389 # 395 #
390 # GetSignature 396 # GetSignature
391 # 397 #
392 # Returns the 'C' style signature of the object 398 # Returns the 'C' style signature of the object
393 # prefix - A prefix for the object's name 399 # prefix - A prefix for the object's name
394 # func_as_ptr - Formats a function as a function pointer 400 # func_as_ptr - Formats a function as a function pointer
395 # 401 #
396 def GetSignature(self, node, release, mode, prefix='', func_as_ptr=True): 402 def GetSignature(self, node, release, mode, prefix='', func_as_ptr=True,
397 self.LogEnter('GetSignature %s %s as func=%s' % (node, mode, func_as_ptr)) 403 func_attributes='', is_cast=False):
404 self.LogEnter('GetSignature %s %s as func=%s attribs=%s' %
405 (node, mode, func_as_ptr, func_attributes))
398 rtype, name, arrayspec, callspec = self.GetComponents(node, release, mode) 406 rtype, name, arrayspec, callspec = self.GetComponents(node, release, mode)
399 out = self.Compose(rtype, name, arrayspec, callspec, prefix, func_as_ptr) 407 out = self.Compose(rtype, name, arrayspec, callspec, prefix,
408 func_as_ptr, func_attributes, is_cast)
400 self.LogExit('Exit GetSignature: %s' % out) 409 self.LogExit('Exit GetSignature: %s' % out)
401 return out 410 return out
402 411
403 # Define a Typedef. 412 # Define a Typedef.
404 def DefineTypedef(self, node, releases, prefix='', comment=False): 413 def DefineTypedef(self, node, releases, prefix='', comment=False,
414 func_attributes=''):
405 __pychecker__ = 'unusednames=comment' 415 __pychecker__ = 'unusednames=comment'
406 release = releases[0] 416 release = releases[0]
407 out = 'typedef %s;\n' % self.GetSignature(node, release, 'return', 417 out = 'typedef %s;\n' % self.GetSignature(node, release, 'return',
408 prefix, True) 418 prefix, True)
409 self.Log('DefineTypedef: %s' % out) 419 self.Log('DefineTypedef: %s' % out)
410 return out 420 return out
411 421
412 # Define an Enum. 422 # Define an Enum.
413 def DefineEnum(self, node, releases, prefix='', comment=False): 423 def DefineEnum(self, node, releases, prefix='', comment=False):
414 __pychecker__ = 'unusednames=comment,releases' 424 __pychecker__ = 'unusednames=comment,releases'
(...skipping 22 matching lines...) Expand all
437 return out 447 return out
438 448
439 def DefineMember(self, node, releases, prefix='', comment=False): 449 def DefineMember(self, node, releases, prefix='', comment=False):
440 __pychecker__ = 'unusednames=prefix,comment' 450 __pychecker__ = 'unusednames=prefix,comment'
441 release = releases[0] 451 release = releases[0]
442 self.LogEnter('DefineMember %s' % node) 452 self.LogEnter('DefineMember %s' % node)
443 out = '%s;' % self.GetSignature(node, release, 'store', '', True) 453 out = '%s;' % self.GetSignature(node, release, 'store', '', True)
444 self.LogExit('Exit DefineMember') 454 self.LogExit('Exit DefineMember')
445 return out 455 return out
446 456
447 def DefineStructInternals(self, node, release, suffix='', comment=True): 457 def GetStructName(self, node, release, is_latest_release=False):
jvoung - send to chromium... 2011/11/16 01:45:22 changed parameter to "include_version" to be more
458 suffix = ''
459 if not is_latest_release:
460 ver_num = node.GetVersion(release)
461 suffix = ('_%s' % ver_num).replace('.', '_')
462 return node.GetName() + suffix
463
464 def DefineStructInternals(self, node, release,
465 is_latest_release=False, comment=True):
448 out = '' 466 out = ''
449 if node.GetProperty('union'): 467 if node.GetProperty('union'):
450 out += 'union %s%s {\n' % (node.GetName(), suffix) 468 out += 'union %s {\n' % (
469 self.GetStructName(node, release, is_latest_release))
451 else: 470 else:
452 out += 'struct %s%s {\n' % (node.GetName(), suffix) 471 out += 'struct %s {\n' % (
472 self.GetStructName(node, release, is_latest_release))
453 473
454 # Generate Member Functions 474 # Generate Member Functions
455 members = [] 475 members = []
456 for child in node.GetListOf('Member'): 476 for child in node.GetListOf('Member'):
457 member = self.Define(child, [release], tabs=1, comment=comment) 477 member = self.Define(child, [release], tabs=1, comment=comment)
458 if not member: 478 if not member:
459 continue 479 continue
460 members.append(member) 480 members.append(member)
461 out += '%s\n};\n' % '\n'.join(members) 481 out += '%s\n};\n' % '\n'.join(members)
462 return out 482 return out
463 483
464 484
465 def DefineStruct(self, node, releases, prefix='', comment=False): 485 def DefineStruct(self, node, releases, prefix='', comment=False):
466 __pychecker__ = 'unusednames=comment,prefix' 486 __pychecker__ = 'unusednames=comment,prefix'
467 self.LogEnter('DefineStruct %s' % node) 487 self.LogEnter('DefineStruct %s' % node)
468 out = '' 488 out = ''
469 build_list = node.GetUniqueReleases(releases) 489 build_list = node.GetUniqueReleases(releases)
470 490
471 # Build the most recent one with comments 491 # Build the most recent one with comments
472 out = self.DefineStructInternals(node, build_list[-1], comment=True) 492 out = self.DefineStructInternals(node, build_list[-1],
493 is_latest_release=True, comment=True)
473 494
474 # Build the rest without comments and with the version number appended 495 # Build the rest without comments and with the version number appended
475 for rel in build_list[0:-1]: 496 for rel in build_list[0:-1]:
476 ver_num = node.GetVersion(rel) 497 out += '\n' + self.DefineStructInternals(node, rel,
477 ver = ("_%s" % ver_num).replace('.', '_') 498 is_latest_release=False,
478 out += '\n' + self.DefineStructInternals(node, rel, suffix=ver,
479 comment=False) 499 comment=False)
480 500
481 self.LogExit('Exit DefineStruct') 501 self.LogExit('Exit DefineStruct')
482 return out 502 return out
483 503
484 504
485 # 505 #
486 # Copyright and Comment 506 # Copyright and Comment
487 # 507 #
488 # Generate a comment or copyright block 508 # Generate a comment or copyright block
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
607 if f.GetProperty('ERRORS') > 0: 627 if f.GetProperty('ERRORS') > 0:
608 print 'Skipping %s' % f.GetName() 628 print 'Skipping %s' % f.GetName()
609 continue 629 continue
610 print DefineDepends(node) 630 print DefineDepends(node)
611 for node in f.GetChildren()[2:]: 631 for node in f.GetChildren()[2:]:
612 print Define(node, comment=True, prefix='tst_') 632 print Define(node, comment=True, prefix='tst_')
613 633
614 634
615 if __name__ == '__main__': 635 if __name__ == '__main__':
616 sys.exit(Main(sys.argv[1:])) 636 sys.exit(Main(sys.argv[1:]))
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698