]> git.cworth.org Git - apitrace/blobdiff - dispatch.py
Don't change behavior of glproc code via RETRACE define.
[apitrace] / dispatch.py
index bfd332bd5dfd029d54f98dcc43ff6b6ba94e338b..95bc36d761d0472ec265fe67fd358f2086d6a32a 100644 (file)
@@ -28,7 +28,7 @@
 """ 
 
 
-import stdapi
+import specs.stdapi as stdapi
 
 
 def function_pointer_type(function):
@@ -49,34 +49,30 @@ class Dispatcher:
         #
         #  static __PROC __getPublicProcAddress(const char *name);
         #  static __PROC __getPrivateProcAddress(const char *name);
-        #  static void __abort(void);
         #
         raise NotImplementedError
 
     def dispatch_api(self, api):
         for function in api.functions:
-            self.dispatch_function(function)
+            self.invokeFunction(function)
         
         # define standard name aliases for convenience, but only when not
         # tracing, as that would cause symbol clashing with the tracing
         # functions
         print '#ifdef RETRACE'
         for function in api.functions:
-            if not self.is_public_function(function):
-                print '#define %s __%s' % (function.name, function.name)
+            print '#define %s __%s' % (function.name, function.name)
         print '#endif /* RETRACE */'
         print
 
-    def dispatch_function(self, function):
-        if self.is_public_function(function):
-            print '#ifndef RETRACE'
-            print
+    def invokeFunction(self, function):
         ptype = function_pointer_type(function)
         pvalue = function_pointer_value(function)
         print 'typedef ' + function.prototype('* %s' % ptype) + ';'
         print 'static %s %s = NULL;' % (ptype, pvalue)
         print
         print 'static inline ' + function.prototype('__' + function.name) + ' {'
+        print '    const char *__name = "%s";' % function.name
         if function.type is stdapi.Void:
             ret = ''
         else:
@@ -85,37 +81,35 @@ class Dispatcher:
         print '    %s%s(%s);' % (ret, pvalue, ', '.join([str(arg.name) for arg in function.args]))
         print '}'
         print
-        if self.is_public_function(function):
-            print '#endif /* !RETRACE */'
-            print
 
-    def is_public_function(self, function):
+    def isFunctionPublic(self, function):
         return True
 
     def get_true_pointer(self, function):
         ptype = function_pointer_type(function)
         pvalue = function_pointer_value(function)
-        if self.is_public_function(function):
+        if self.isFunctionPublic(function):
             get_proc_address = '__getPublicProcAddress'
         else:
             get_proc_address = '__getPrivateProcAddress'
         print '    if (!%s) {' % (pvalue,)
-        print '        %s = (%s)%s("%s");' % (pvalue, ptype, get_proc_address, function.name)
+        print '        %s = (%s)%s(__name);' % (pvalue, ptype, get_proc_address)
         print '        if (!%s) {' % (pvalue,)
-        self.fail_function(function)
+        self.failFunction(function)
         print '        }'
         print '    }'
 
-    def fail_function(self, function):
-        print '            OS::DebugMessage("error: unavailable function \\"%s\\"\\n");' % function.name
-        if function.fail is not None:
+    def failFunction(self, function):
+        if function.type is stdapi.Void or function.fail is not None:
+            print r'            os::log("warning: ignoring call to unavailable function %s\n", __name);'
             if function.type is stdapi.Void:
-                assert function.fail == ''
+                assert function.fail is None
                 print '            return;' 
             else:
-                assert function.fail != ''
+                assert function.fail is not None
                 print '            return %s;' % function.fail
         else:
-            print '            __abort();'
+            print r'            os::log("error: unavailable function %s\n", __name);'
+            print r'            os::abort();'