]> git.cworth.org Git - apitrace/blobdiff - trace.py
Fix a few more arrays args in D3D9.
[apitrace] / trace.py
index 350225857d3bd1fe440eafbb6a5f4c2027590835..7b2ba73941fa60c91aab68326b4838221b050a02 100644 (file)
--- a/trace.py
+++ b/trace.py
@@ -27,6 +27,7 @@
 
 
 import stdapi
+from dispatch import Dispatcher
 
 
 def interface_wrap_name(interface):
@@ -300,42 +301,37 @@ class Tracer:
         pass
 
     def trace_function_decl(self, function):
+        # Per-function declarations
+
         if function.args:
-            print '    static const char * __%s_args[%u] = {%s};' % (function.name, len(function.args), ', '.join(['"%s"' % arg.name for arg in function.args]))
+            print 'static const char * __%s_args[%u] = {%s};' % (function.name, len(function.args), ', '.join(['"%s"' % arg.name for arg in function.args]))
         else:
-            print '    static const char ** __%s_args = NULL;' % (function.name,)
-        print '    static const Trace::FunctionSig __%s_sig = {%u, "%s", %u, __%s_args};' % (function.name, int(function.id), function.name, len(function.args), function.name)
+            print 'static const char ** __%s_args = NULL;' % (function.name,)
+        print 'static const Trace::FunctionSig __%s_sig = {%u, "%s", %u, __%s_args};' % (function.name, int(function.id), function.name, len(function.args), function.name)
         print
 
-    def trace_function_fail(self, function):
-        if function.fail is not None:
-            if function.type is stdapi.Void:
-                assert function.fail == ''
-                print '            return;' 
-            else:
-                assert function.fail != ''
-                print '            return %s;' % function.fail
-        else:
-            print '            Trace::Abort();'
-
     def get_dispatch_function(self, function):
         return '__' + function.name
 
     def trace_function_impl(self, function):
         print 'extern "C" ' + function.prototype() + ' {'
-        if function.type is stdapi.Void:
-            result = ''
-        else:
+        if function.type is not stdapi.Void:
             print '    %s __result;' % function.type
-            result = '__result = '
+        self.trace_function_impl_body(function)
+        if function.type is not stdapi.Void:
+            self.wrap_ret(function, "__result")
+            print '    return __result;'
+        print '}'
+        print
+
+    def trace_function_impl_body(self, function):
         print '    unsigned __call = Trace::BeginEnter(__%s_sig);' % (function.name,)
         for arg in function.args:
             if not arg.output:
                 self.unwrap_arg(function, arg)
                 self.dump_arg(function, arg)
         print '    Trace::EndEnter();'
-        dispatch = self.get_dispatch_function(function)
-        print '    %s%s(%s);' % (result, dispatch, ', '.join([str(arg.name) for arg in function.args]))
+        self.dispatch_function(function)
         print '    Trace::BeginLeave(__call);'
         for arg in function.args:
             if arg.output:
@@ -344,17 +340,23 @@ class Tracer:
         if function.type is not stdapi.Void:
             self.dump_ret(function, "__result")
         print '    Trace::EndLeave();'
-        if function.type is not stdapi.Void:
-            self.wrap_ret(function, "__result")
-            print '    return __result;'
-        print '}'
-        print
+
+    def dispatch_function(self, function):
+        if function.type is stdapi.Void:
+            result = ''
+        else:
+            result = '__result = '
+        dispatch = self.get_dispatch_function(function)
+        print '    %s%s(%s);' % (result, dispatch, ', '.join([str(arg.name) for arg in function.args]))
 
     def dump_arg(self, function, arg):
         print '    Trace::BeginArg(%u);' % (arg.index,)
-        dump_instance(arg.type, arg.name)
+        self.dump_arg_instance(function, arg)
         print '    Trace::EndArg();'
 
+    def dump_arg_instance(self, function, arg):
+        dump_instance(arg.type, arg.name)
+
     def wrap_arg(self, function, arg):
         wrap_instance(arg.type, arg.name)
 
@@ -436,13 +438,11 @@ class DllTracer(Tracer):
         return '__%s' % (function.name,)
 
     def header(self, api):
-        Tracer.header(self, api)
-
         print '''
 static HINSTANCE g_hDll = NULL;
 
 static PROC
-__GetProcAddress(LPCSTR lpProcName)
+__getPublicProcAddress(LPCSTR lpProcName)
 {
     if (!g_hDll) {
         char szDll[MAX_PATH] = {0};
@@ -464,3 +464,8 @@ __GetProcAddress(LPCSTR lpProcName)
 
     ''' % self.dllname
 
+        dispatcher = Dispatcher()
+        dispatcher.dispatch_api(api)
+
+        Tracer.header(self, api)
+