]> git.cworth.org Git - apitrace/blobdiff - retrace.py
Add comment about SetUnhandledExceptionFilter
[apitrace] / retrace.py
index 724f5220bee23dd65b8d8008ac886e92dda43fb4..1df341519194e010bcc738236c4905536ec1d69d 100644 (file)
 
 """Generic retracing code generator."""
 
+
+import sys
+
 import specs.stdapi as stdapi
 import specs.glapi as glapi
-from codegen import *
 
 
 class ConstRemover(stdapi.Rebuilder):
@@ -218,18 +220,23 @@ class Retracer:
                 try:
                     ValueWrapper().visit(arg_type, lvalue, rvalue)
                 except NotImplementedError:
-                    print '   // FIXME: %s' % arg.name
+                    print '    // XXX: %s' % arg.name
         if function.type is not stdapi.Void:
             rvalue = '*call.ret'
             lvalue = '__result'
             try:
                 ValueWrapper().visit(function.type, lvalue, rvalue)
             except NotImplementedError:
-                print '   // FIXME: result'
+                success = False
+                print '    // FIXME: result'
+        if not success:
+            if function.name[-1].islower():
+                sys.stderr.write('warning: unsupported %s call\n' % function.name)
 
     def fail_function(self, function):
-        print '    if (retrace::verbosity >= 0)'
-        print '        std::cerr << "warning: unsupported call %s\\n";' % function.name
+        print '    if (retrace::verbosity >= 0) {'
+        print '        retrace::unsupported(call);'
+        print '    }'
         print '    return;'
 
     def extract_arg(self, function, arg, arg_type, lvalue, rvalue):
@@ -250,27 +257,19 @@ class Retracer:
     def filter_function(self, function):
         return True
 
+    table_name = 'retrace::callbacks'
+
     def retrace_functions(self, functions):
         functions = filter(self.filter_function, functions)
 
         for function in functions:
             self.retrace_function(function)
 
-        print 'void retrace::retrace_call(Trace::Call &call) {'
-        print '    const char *name = call.name();'
-        print
-
-        func_dict = dict([(function.name, function) for function in functions])
-
-        def handle_case(function_name):
-            function = func_dict[function_name]
-            print '        retrace_%s(call);' % function.name
-            print '        return;'
-    
-        string_switch('name', func_dict.keys(), handle_case)
-
-        print '    retrace_unknown(call);'
-        print '}'
+        print 'const retrace::Entry %s[] = {' % self.table_name
+        for function in functions:
+            print '    {"%s", &retrace_%s},' % (function.name, function.name)
+        print '    {NULL, NULL}'
+        print '};'
         print