Small refactor. Move several utility functions from glX_XML.py to

FilterGLAPISpecBase (in gl_XML.py).  When these functions are used to emit
common #define lines, the will automatically be undefined in
FilterGLAPISpecBase::printFooter if header_tag is set (i.e., the file is a
header file).

These changes do not modify the generated code.
This commit is contained in:
Ian Romanick 2005-02-01 00:28:47 +00:00
parent ba09c19ed6
commit c2803587b6
4 changed files with 58 additions and 64 deletions

View file

@ -34,39 +34,6 @@ import license
import sys, getopt
def printPure():
print """# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
# define PURE __attribute__((pure))
# else
# define PURE
# endif"""
def printFastcall():
print """# if defined(__i386__) && defined(__GNUC__)
# define FASTCALL __attribute__((fastcall))
# else
# define FASTCALL
# endif"""
def printVisibility(S, s):
print """# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)
# define %s __attribute__((visibility("%s")))
# else
# define %s
# endif""" % (S, s, S)
def printNoinline():
print """# if defined(__GNUC__)
# define NOINLINE __attribute__((noinline))
# else
# define NOINLINE
# endif"""
def printHaveAlias():
print """# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)
# define HAVE_ALIAS
# endif"""
class glXItemFactory(gl_XML.glItemFactory):
"""Factory to create GLX protocol oriented objects derived from glItem."""

View file

@ -126,8 +126,8 @@ class PrintGlxProtoStubs(glX_XML.GlxProto):
print ''
print '#define __GLX_PAD(n) (((n) + 3) & ~3)'
print ''
glX_XML.printFastcall()
glX_XML.printNoinline()
self.printFastcall()
self.printNoinline()
print ''
print '#if !defined __GNUC__ || __GNUC__ < 3'
print '# define __builtin_expect(x, y) x'
@ -769,11 +769,7 @@ class PrintGlxProtoInit_h(glX_XML.GlxProto):
* \\author Ian Romanick <idr@us.ibm.com>
*/
"""
glX_XML.printVisibility( "HIDDEN", "hidden" )
def printRealFooter(self):
print "# undef HIDDEN"
self.printVisibility( "HIDDEN", "hidden" )
def printFunction(self, f):

View file

@ -170,13 +170,13 @@ class PrintGlxSizeStubs_c(PrintGlxSizeStubs_common):
print '#include "indirect_size.h"'
print ''
glX_XML.printHaveAlias()
self.printHaveAlias()
print ''
glX_XML.printPure()
self.printPure()
print ''
glX_XML.printFastcall()
self.printFastcall()
print ''
glX_XML.printVisibility( "INTERNAL", "internal" )
self.printVisibility( "INTERNAL", "internal" )
print ''
print ''
print '#ifdef HAVE_ALIAS'
@ -220,19 +220,13 @@ class PrintGlxSizeStubs_h(PrintGlxSizeStubs_common):
* \\author Ian Romanick <idr@us.ibm.com>
*/
"""
glX_XML.printPure();
self.printPure();
print ''
glX_XML.printFastcall();
self.printFastcall();
print ''
glX_XML.printVisibility( "INTERNAL", "internal" );
self.printVisibility( "INTERNAL", "internal" );
print ''
def printRealFooter(self):
print ''
print "# undef INTERNAL"
print "# undef PURE"
print "# undef FASTCALL"
def printFunction(self, f):
ef = self.glx_enum_functions[f.name]
@ -250,18 +244,12 @@ class PrintGlxReqSize_h(glX_XML.GlxProto):
def printRealHeader(self):
glX_XML.printVisibility("HIDDEN", "hidden")
self.printVisibility("HIDDEN", "hidden")
print ''
glX_XML.printPure()
self.printPure()
print ''
def printRealFooter(self):
print ''
print '# undef HIDDEN'
print '# undef PURE'
def printFunction(self, f):
if f.glx_rop == 0 or f.ignore: return
@ -300,7 +288,7 @@ class PrintGlxReqSize_c(glX_XML.GlxProto):
print ''
print '#define __GLX_PAD(x) (((x) + 3) & ~3)'
print ''
glX_XML.printHaveAlias()
self.printHaveAlias()
print ''
print '#ifdef HAVE_ALIAS'
print '# define ALIAS2(from,to) \\'

View file

@ -509,6 +509,7 @@ class FilterGLAPISpecBase(saxutils.XMLFilterBase):
self.xref = {}
self.factory = glItemFactory()
self.header_tag = None
self.undef_list = []
def find_type(self,type_name):
@ -558,8 +559,12 @@ class FilterGLAPISpecBase(saxutils.XMLFilterBase):
self.printFunctions()
self.printRealFooter()
if self.header_tag:
print ''
print '#endif /* !defined( %s ) */' % (self.header_tag)
if self.undef_list:
print ''
for u in self.undef_list:
print "# undef %s" % (u)
print ''
print '#endif /* !defined( %s ) */' % (self.header_tag)
def get_category_define(self):
@ -625,6 +630,44 @@ class FilterGLAPISpecBase(saxutils.XMLFilterBase):
return
def printPure(self):
self.undef_list.append("PURE")
print """# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
# define PURE __attribute__((pure))
# else
# define PURE
# endif"""
def printFastcall(self):
self.undef_list.append("FASTCALL")
print """# if defined(__i386__) && defined(__GNUC__)
# define FASTCALL __attribute__((fastcall))
# else
# define FASTCALL
# endif"""
def printVisibility(self, S, s):
self.undef_list.append(S)
print """# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)
# define %s __attribute__((visibility("%s")))
# else
# define %s
# endif""" % (S, s, S)
def printNoinline(self):
self.undef_list.append("NOINLINE")
print """# if defined(__GNUC__)
# define NOINLINE __attribute__((noinline))
# else
# define NOINLINE
# endif"""
def printHaveAlias(self):
self.undef_list.append("HAVE_ALIAS")
print """# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)
# define HAVE_ALIAS
# endif"""
def printFunction(self,offset):
"""Print a single function.