X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=trace.py;fp=trace.py;h=fe35bea19699730a47abe98287f3f2382f8db90b;hb=2ae3c962d308ceb866f7478866cdcc85f50a987d;hp=a9395339c2981b054a612fbbacdcd43c2adcf4ec;hpb=280a176f599484b3acf75f070e3f25b756786cc2;p=apitrace diff --git a/trace.py b/trace.py index a939533..fe35bea 100644 --- a/trace.py +++ b/trace.py @@ -471,23 +471,23 @@ class Tracer: print '%s::~%s() {' % (getWrapperInterfaceName(interface), getWrapperInterfaceName(interface)) print '}' print - for method in interface.iterMethods(): - self.implementWrapperInterfaceMethod(interface, method) + for base, method in interface.iterBaseMethods(): + self.implementWrapperInterfaceMethod(interface, base, method) print - def implementWrapperInterfaceMethod(self, interface, method): + def implementWrapperInterfaceMethod(self, interface, base, method): print method.prototype(getWrapperInterfaceName(interface) + '::' + method.name) + ' {' if method.type is not stdapi.Void: print ' %s __result;' % method.type - self.implementWrapperInterfaceMethodBody(interface, method) + self.implementWrapperInterfaceMethodBody(interface, base, method) if method.type is not stdapi.Void: print ' return __result;' print '}' print - def implementWrapperInterfaceMethodBody(self, interface, method): + def implementWrapperInterfaceMethodBody(self, interface, base, method): print ' static const char * __args[%u] = {%s};' % (len(method.args) + 1, ', '.join(['"this"'] + ['"%s"' % arg.name for arg in method.args])) print ' static const trace::FunctionSig __sig = {%u, "%s", %u, __args};' % (method.id, interface.name + '::' + method.name, len(method.args) + 1) print ' unsigned __call = trace::localWriter.beginEnter(&__sig);' @@ -507,7 +507,7 @@ class Tracer: riid = arg print ' trace::localWriter.endEnter();' - self.invokeMethod(interface, method) + self.invokeMethod(interface, base, method) print ' trace::localWriter.beginLeave(__call);' for arg in method.args: @@ -552,12 +552,12 @@ class Tracer: print r' }' print ' }' - def invokeMethod(self, interface, method): + def invokeMethod(self, interface, base, method): if method.type is stdapi.Void: result = '' else: result = '__result = ' - print ' %sm_pInstance->%s(%s);' % (result, method.name, ', '.join([str(arg.name) for arg in method.args])) + print ' %sstatic_cast<%s *>(m_pInstance)->%s(%s);' % (result, base, method.name, ', '.join([str(arg.name) for arg in method.args])) def emit_memcpy(self, dest, src, length): print ' unsigned __call = trace::localWriter.beginEnter(&trace::memcpy_sig);'