print ' trace::localWriter.write%s(%s);' % (literal.kind, instance)
def visitString(self, string, instance):
- if string.kind == 'String':
+ if not string.wide:
cast = 'const char *'
- elif string.kind == 'WString':
- cast = 'const wchar_t *'
+ suffix = 'String'
else:
- assert False
+ cast = 'const wchar_t *'
+ suffix = 'WString'
if cast != string.expr:
# reinterpret_cast is necessary for GLubyte * <=> char *
instance = 'reinterpret_cast<%s>(%s)' % (cast, instance)
length = ', %s' % string.length
else:
length = ''
- print ' trace::localWriter.write%s(%s%s);' % (string.kind, instance, length)
+ print ' trace::localWriter.write%s(%s%s);' % (suffix, instance, length)
def visitConst(self, const, instance):
self.visit(const.type, instance)
print '#else'
print '# include <alloca.h> // alloca'
print '#endif'
+ print
+ print '#include "trace.hpp"'
+ print
def footer(self, api):
pass
print function.prototype() + ' {'
if function.type is not stdapi.Void:
print ' %s _result;' % function.type
+
+ # No-op if tracing is disabled
+ print ' if (!trace::isTracingEnabled()) {'
+ Tracer.invokeFunction(self, function)
+ if function.type is not stdapi.Void:
+ print ' return _result;'
+ else:
+ print ' return;'
+ print ' }'
+
self.traceFunctionImplBody(function)
if function.type is not stdapi.Void:
print ' return _result;'
print ' trace::localWriter.endEnter();'
print ' trace::localWriter.beginLeave(_call);'
print ' trace::localWriter.endLeave();'
+
+ def fake_call(self, function, args):
+ print ' unsigned _fake_call = trace::localWriter.beginEnter(&_%s_sig);' % (function.name,)
+ for arg, instance in zip(function.args, args):
+ assert not arg.output
+ print ' trace::localWriter.beginArg(%u);' % (arg.index,)
+ self.serializeValue(arg.type, instance)
+ print ' trace::localWriter.endArg();'
+ print ' trace::localWriter.endEnter();'
+ print ' trace::localWriter.beginLeave(_fake_call);'
+ print ' trace::localWriter.endLeave();'