for method in interface.iterMethods():
print " " + method.prototype() + ";"
print
- self.declareWrapperInterfaceVariables(interface)
+ #print "private:"
+ for type, name, value in self.enumWrapperInterfaceVariables(interface):
+ print ' %s %s;' % (type, name)
print "};"
print
- def declareWrapperInterfaceVariables(self, interface):
- #print "private:"
- print " DWORD m_dwMagic;"
- print " %s * m_pInstance;" % (interface.name,)
+ def enumWrapperInterfaceVariables(self, interface):
+ return [
+ ("DWORD", "m_dwMagic", "0xd8365d6c"),
+ ("%s *" % interface.name, "m_pInstance", "pInstance"),
+ ]
def implementWrapperInterface(self, interface):
self.interface = interface
print '%s::%s(%s * pInstance) {' % (getWrapperInterfaceName(interface), getWrapperInterfaceName(interface), interface.name)
- print ' m_dwMagic = 0xd8365d6c;'
- print ' m_pInstance = pInstance;'
+ for type, name, value in self.enumWrapperInterfaceVariables(interface):
+ print ' %s = %s;' % (name, value)
print '}'
print
print '%s::~%s() {' % (getWrapperInterfaceName(interface), getWrapperInterfaceName(interface))
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 ' %s *_this = static_cast<%s *>(m_pInstance);' % (base, base)
+
print ' unsigned _call = trace::localWriter.beginEnter(&_sig);'
print ' trace::localWriter.beginArg(0);'
print ' trace::localWriter.writePointer((uintptr_t)m_pInstance);'
result = ''
else:
result = '_result = '
- print ' %sstatic_cast<%s *>(m_pInstance)->%s(%s);' % (result, base, method.name, ', '.join([str(arg.name) for arg in method.args]))
+ print ' %s_this->%s(%s);' % (result, 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);'