Added optional suppport for storage modifiers (virtual/static/inline/etc)
and conditional generation of objects and methods.
diff --git a/Tools/bgen/bgen/bgenGenerator.py b/Tools/bgen/bgen/bgenGenerator.py
index e92097e..03e8b45 100644
--- a/Tools/bgen/bgen/bgenGenerator.py
+++ b/Tools/bgen/bgen/bgenGenerator.py
@@ -15,18 +15,27 @@
 
 class BaseFunctionGenerator:
 
-    def __init__(self, name, condition=None):
+    def __init__(self, name, condition=None, callname=None, modifiers=None):
         if DEBUG: print "<--", name
         self.name = name
-        self.callname = name
+        if callname:
+            self.callname = callname
+        else:
+            self.callname = name
         self.prefix = name
         self.objecttype = "PyObject" # Type of _self argument to function
         self.condition = condition
+        self.modifiers = modifiers
 
     def setprefix(self, prefix):
         self.prefix = prefix
 
+    def checkgenerate(self):
+        return True
+        
     def generate(self):
+        if not self.checkgenerate():
+            return
         if DEBUG: print "-->", self.name
         if self.condition:
             Output()
@@ -51,6 +60,8 @@
         OutRbrace()
 
     def reference(self, name = None):
+        if not self.checkgenerate():
+            return
         if name is None:
             name = self.name
         docstring = self.docstring()
diff --git a/Tools/bgen/bgen/bgenObjectDefinition.py b/Tools/bgen/bgen/bgenObjectDefinition.py
index a77e337..64075de 100644
--- a/Tools/bgen/bgen/bgenObjectDefinition.py
+++ b/Tools/bgen/bgen/bgenObjectDefinition.py
@@ -219,6 +219,9 @@
         Output("if (PyType_Ready(&%s) < 0) return;", self.typename)
         Output("""Py_INCREF(&%s);""", self.typename)
         Output("PyModule_AddObject(m, \"%s\", (PyObject *)&%s);", self.name, self.typename);
+        self.outputTypeObjectInitializerCompat()
+        
+    def outputTypeObjectInitializerCompat(self):
         Output("/* Backward-compatible name */")
         Output("""Py_INCREF(&%s);""", self.typename);
         Output("PyModule_AddObject(m, \"%sType\", (PyObject *)&%s);", self.name, self.typename);
diff --git a/Tools/bgen/bgen/scantools.py b/Tools/bgen/bgen/scantools.py
index 1ebf70d..777a7dc 100644
--- a/Tools/bgen/bgen/scantools.py
+++ b/Tools/bgen/bgen/scantools.py
@@ -620,11 +620,15 @@
                                 (atype, aname, amode))
         if self.greydictnames.has_key(name):
             self.specfile.write("    condition=%r,\n"%(self.greydictnames[name],))
+        self.generatemodifiers(classname, name, modifiers)
         self.specfile.write(")\n")
         self.specfile.write("%s.append(f)\n\n" % listname)
 
     def destination(self, type, name, arglist):
         return "FunctionGenerator", "functions"
+        
+    def generatemodifiers(self, classname, name, modifiers):
+        pass
 
     def blacklisted(self, type, name):
         if type in self.blacklisttypes: