summaryrefslogtreecommitdiff
path: root/trace.py
diff options
context:
space:
mode:
authorJosé Fonseca <jose.r.fonseca@gmail.com>2011-05-25 23:21:18 +0100
committerJosé Fonseca <jose.r.fonseca@gmail.com>2011-05-25 23:21:18 +0100
commitbb8760bc379ec3c37db0d18c9972b3c4c3df1179 (patch)
treee4f3e2d0942d1f3f0105a3e7bb48b5280d999812 /trace.py
parentfabe0011d61fa27bc0062f62ecf51aabb3f97260 (diff)
Several DX7 corrections.
Diffstat (limited to 'trace.py')
-rw-r--r--trace.py16
1 files changed, 14 insertions, 2 deletions
diff --git a/trace.py b/trace.py
index 6d8432b..368462a 100644
--- a/trace.py
+++ b/trace.py
@@ -271,7 +271,12 @@ unwrap_instance = Unwrapper().visit
class Tracer:
+ def __init__(self):
+ self.api = None
+
def trace_api(self, api):
+ self.api = api
+
self.header(api)
# Includes
@@ -427,8 +432,15 @@ class Tracer:
wrap_instance(method.type, '__result')
print ' Trace::EndLeave();'
if method.name == 'QueryInterface':
- print ' if (*ppvObj == m_pInstance)'
- print ' *ppvObj = this;'
+ print ' if (ppvObj && *ppvObj) {'
+ print ' if (*ppvObj == m_pInstance) {'
+ print ' *ppvObj = this;'
+ print ' }'
+ for iface in self.api.interfaces:
+ print ' else if (riid == IID_%s) {' % iface.name
+ print ' *ppvObj = new Wrap%s((%s *) *ppvObj);' % (iface.name, iface.name)
+ print ' }'
+ print ' }'
if method.name == 'Release':
assert method.type is not stdapi.Void
print ' if (!__result)'