Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 prototypes and definitions """ | 6 """ Generator for C style prototypes and definitions """ |
| 7 | 7 |
| 8 import glob | 8 import glob |
| 9 import os | 9 import os |
| 10 import sys | 10 import sys |
| (...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 167 'float_t': 'float', | 167 'float_t': 'float', |
| 168 'double_t': 'double', | 168 'double_t': 'double', |
| 169 'handle_t': 'int', | 169 'handle_t': 'int', |
| 170 'mem_t': 'void*', | 170 'mem_t': 'void*', |
| 171 'mem_ptr_t': 'void**', | 171 'mem_ptr_t': 'void**', |
| 172 'str_t': 'char*', | 172 'str_t': 'char*', |
| 173 'cstr_t': 'const char*', | 173 'cstr_t': 'const char*', |
| 174 'interface_t' : 'const void*' | 174 'interface_t' : 'const void*' |
| 175 } | 175 } |
| 176 | 176 |
| 177 # Tell how to handle pointers to GL types. | |
| 178 for gltype in ['GLbitfield', 'GLboolean', 'GLbyte', 'GLclampf', | |
| 179 'GLclampx', 'GLenum', 'GLfixed', 'GLfloat', 'GLint', | |
| 180 'GLintptr', 'GLshort', 'GLsizei', 'GLsizeiptr', | |
| 181 'GLubyte', 'GLuint', 'GLushort']: | |
| 182 ptrtype = gltype + '_ptr_t' | |
| 183 TypeMap[ptrtype] = { | |
| 184 'in': 'const %s', | |
| 185 'inout': '%s', | |
| 186 'out': '%s', | |
| 187 'return': 'const %s', | |
| 188 'store': '%s' | |
| 189 } | |
| 190 RemapName[ptrtype] = '%s*' % gltype | |
| 191 | |
| 177 def __init__(self): | 192 def __init__(self): |
| 178 self.dbg_depth = 0 | 193 self.dbg_depth = 0 |
| 179 | 194 |
| 180 # | 195 # |
| 181 # Debug Logging functions | 196 # Debug Logging functions |
| 182 # | 197 # |
| 183 def Log(self, txt): | 198 def Log(self, txt): |
| 184 if not GetOption('cgen_debug'): return | 199 if not GetOption('cgen_debug'): return |
| 185 tabs = ' ' * self.dbg_depth | 200 tabs = ' ' * self.dbg_depth |
| 186 print '%s%s' % (tabs, txt) | 201 print '%s%s' % (tabs, txt) |
| (...skipping 377 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 564 if channel == 'stable' and child.NodeIsDevOnly(): | 579 if channel == 'stable' and child.NodeIsDevOnly(): |
| 565 continue | 580 continue |
| 566 member = self.Define(child, [release], tabs=1, comment=comment) | 581 member = self.Define(child, [release], tabs=1, comment=comment) |
| 567 if not member: | 582 if not member: |
| 568 continue | 583 continue |
| 569 members.append(member) | 584 members.append(member) |
| 570 out += '%s\n};\n' % '\n'.join(members) | 585 out += '%s\n};\n' % '\n'.join(members) |
| 571 return out | 586 return out |
| 572 | 587 |
| 573 | 588 |
| 589 def DefineUnversionedInterface(self, node, rel): | |
| 590 out = '\n' | |
| 591 if node.GetProperty('force_struct_namespace'): | |
| 592 # Duplicate the definition to put it in struct namespace. | |
|
dmichael (off chromium)
2014/09/05 18:46:08
I would elaborate that this is for legacy APIs lik
hamaji
2014/09/08 07:34:05
Done. Ah, I have not filed the bug yet. I filed on
| |
| 593 out += self.DefineStructInternals(node, rel, | |
| 594 include_version=False, comment=True) | |
| 595 else: | |
| 596 # Define an unversioned typedef for the most recent version | |
| 597 out += 'typedef struct %s %s;\n' % ( | |
| 598 self.GetStructName(node, rel, include_version=True), | |
| 599 self.GetStructName(node, rel, include_version=False)) | |
| 600 return out | |
| 601 | |
| 602 | |
| 574 def DefineStruct(self, node, releases, prefix='', comment=False): | 603 def DefineStruct(self, node, releases, prefix='', comment=False): |
| 575 __pychecker__ = 'unusednames=comment,prefix' | 604 __pychecker__ = 'unusednames=comment,prefix' |
| 576 self.LogEnter('DefineStruct %s' % node) | 605 self.LogEnter('DefineStruct %s' % node) |
| 577 out = '' | 606 out = '' |
| 578 build_list = node.GetUniqueReleases(releases) | 607 build_list = node.GetUniqueReleases(releases) |
| 579 | 608 |
| 580 newest_stable = None | 609 newest_stable = None |
| 581 newest_dev = None | 610 newest_dev = None |
| 582 for rel in build_list: | 611 for rel in build_list: |
| 583 channel = node.GetProperty('FILE').release_map.GetChannel(rel) | 612 channel = node.GetProperty('FILE').release_map.GetChannel(rel) |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 594 assert len(build_list) == 1 | 623 assert len(build_list) == 1 |
| 595 # Build the most recent one versioned, with comments | 624 # Build the most recent one versioned, with comments |
| 596 out = self.DefineStructInternals(node, last_rel, | 625 out = self.DefineStructInternals(node, last_rel, |
| 597 include_version=False, comment=True) | 626 include_version=False, comment=True) |
| 598 | 627 |
| 599 if node.IsA('Interface'): | 628 if node.IsA('Interface'): |
| 600 # Build the most recent one versioned, with comments | 629 # Build the most recent one versioned, with comments |
| 601 out = self.DefineStructInternals(node, last_rel, | 630 out = self.DefineStructInternals(node, last_rel, |
| 602 include_version=True, comment=True) | 631 include_version=True, comment=True) |
| 603 if last_rel == newest_stable: | 632 if last_rel == newest_stable: |
| 604 # Define an unversioned typedef for the most recent version | 633 out += self.DefineUnversionedInterface(node, last_rel) |
| 605 out += '\ntypedef struct %s %s;\n' % ( | |
| 606 self.GetStructName(node, last_rel, include_version=True), | |
| 607 self.GetStructName(node, last_rel, include_version=False)) | |
| 608 | 634 |
| 609 # Build the rest without comments and with the version number appended | 635 # Build the rest without comments and with the version number appended |
| 610 for rel in build_list[0:-1]: | 636 for rel in build_list[0:-1]: |
| 611 channel = node.GetProperty('FILE').release_map.GetChannel(rel) | 637 channel = node.GetProperty('FILE').release_map.GetChannel(rel) |
| 612 # Skip dev channel interface versions that are | 638 # Skip dev channel interface versions that are |
| 613 # Not the newest version, and | 639 # Not the newest version, and |
| 614 # Don't have an equivalent stable version. | 640 # Don't have an equivalent stable version. |
| 615 if channel == 'dev' and rel != newest_dev: | 641 if channel == 'dev' and rel != newest_dev: |
| 616 if not node.DevInterfaceMatchesStable(rel): | 642 if not node.DevInterfaceMatchesStable(rel): |
| 617 continue | 643 continue |
| 618 out += '\n' + self.DefineStructInternals(node, rel, | 644 out += '\n' + self.DefineStructInternals(node, rel, |
| 619 include_version=True, | 645 include_version=True, |
| 620 comment=False) | 646 comment=False) |
| 621 if rel == newest_stable: | 647 if rel == newest_stable: |
| 622 # Define an unversioned typedef for the most recent version | 648 out += self.DefineUnversionedInterface(node, rel) |
| 623 out += '\ntypedef struct %s %s;\n' % ( | |
| 624 self.GetStructName(node, rel, include_version=True), | |
| 625 self.GetStructName(node, rel, include_version=False)) | |
| 626 | 649 |
| 627 self.LogExit('Exit DefineStruct') | 650 self.LogExit('Exit DefineStruct') |
| 628 return out | 651 return out |
| 629 | 652 |
| 630 | 653 |
| 631 # | 654 # |
| 632 # Copyright and Comment | 655 # Copyright and Comment |
| 633 # | 656 # |
| 634 # Generate a comment or copyright block | 657 # Generate a comment or copyright block |
| 635 # | 658 # |
| (...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 783 for f in ast.GetListOf('File'): | 806 for f in ast.GetListOf('File'): |
| 784 if f.GetProperty('ERRORS') > 0: | 807 if f.GetProperty('ERRORS') > 0: |
| 785 print 'Skipping %s' % f.GetName() | 808 print 'Skipping %s' % f.GetName() |
| 786 continue | 809 continue |
| 787 for node in f.GetChildren()[2:]: | 810 for node in f.GetChildren()[2:]: |
| 788 print cgen.Define(node, ast.releases, comment=True, prefix='tst_') | 811 print cgen.Define(node, ast.releases, comment=True, prefix='tst_') |
| 789 | 812 |
| 790 | 813 |
| 791 if __name__ == '__main__': | 814 if __name__ == '__main__': |
| 792 sys.exit(main(sys.argv[1:])) | 815 sys.exit(main(sys.argv[1:])) |
| 793 | |
| OLD | NEW |