]> git.cworth.org Git - apitrace/blobdiff - trace.py
Handle moe uniform types and sizes.
[apitrace] / trace.py
index 618fbadbd83556a39d789a0b9c0be44c32598dd8..d9d50acfcf096034443502f2c24740366b2c5f2e 100644 (file)
--- a/trace.py
+++ b/trace.py
@@ -98,13 +98,13 @@ class DumpDeclarator(stdapi.OnceVisitor):
         print
 
     def visit_bitmask(self, bitmask):
-        print 'static const Trace::BitmaskVal __bitmask%s_vals[] = {' % (bitmask.id)
+        print 'static const Trace::BitmaskFlag __bitmask%s_flags[] = {' % (bitmask.id)
         for value in bitmask.values:
             print '   {"%s", %s},' % (value, value)
         print '};'
         print
         print 'static const Trace::BitmaskSig __bitmask%s_sig = {' % (bitmask.id)
-        print '   %u, %u, __bitmask%s_vals' % (int(bitmask.id), len(bitmask.values), bitmask.id)
+        print '   %u, %u, __bitmask%s_flags' % (int(bitmask.id), len(bitmask.values), bitmask.id)
         print '};'
         print
 
@@ -155,18 +155,20 @@ class DumpImplementer(stdapi.Visitor):
         print '    __traceStruct%s(%s);' % (struct.id, instance)
 
     def visit_array(self, array, instance):
-        print '    if (%s) {' % instance
+        length = '__c' + array.type.id
         index = '__i' + array.type.id
-        print '        __writer.beginArray(%s);' % (array.length,)
-        print '        for (int %s = 0; %s < %s; ++%s) {' % (index, index, array.length, index)
+        print '    if (%s) {' % instance
+        print '        size_t %s = %s;' % (length, array.length)
+        print '        __writer.beginArray(%s);' % length
+        print '        for (size_t %s = 0; %s < %s; ++%s) {' % (index, index, length, index)
         print '            __writer.beginElement();'
         self.visit(array.type, '(%s)[%s]' % (instance, index))
         print '            __writer.endElement();'
         print '        }'
         print '        __writer.endArray();'
-        print '    }'
-        print '    else'
+        print '    } else {'
         print '        __writer.writeNull();'
+        print '    }'
 
     def visit_blob(self, blob, instance):
         print '    __writer.writeBlob(%s, %s);' % (instance, blob.size)
@@ -175,7 +177,7 @@ class DumpImplementer(stdapi.Visitor):
         print '    __traceEnum%s(%s);' % (enum.id, instance)
 
     def visit_bitmask(self, bitmask, instance):
-        print '    __writer.writeBitmask(__bitmask%s_sig, %s);' % (bitmask.id, instance)
+        print '    __writer.writeBitmask(&__bitmask%s_sig, %s);' % (bitmask.id, instance)
 
     def visit_pointer(self, pointer, instance):
         print '    if (%s) {' % instance
@@ -184,9 +186,9 @@ class DumpImplementer(stdapi.Visitor):
         dump_instance(pointer.type, "*" + instance)
         print '        __writer.endElement();'
         print '        __writer.endArray();'
-        print '    }'
-        print '    else'
+        print '    } else {'
         print '        __writer.writeNull();'
+        print '    }'
 
     def visit_handle(self, handle, instance):
         self.visit(handle.type, instance)
@@ -345,7 +347,7 @@ class Tracer:
         print
 
     def trace_function_impl_body(self, function):
-        print '    unsigned __call = __writer.beginEnter(__%s_sig);' % (function.name,)
+        print '    unsigned __call = __writer.beginEnter(&__%s_sig);' % (function.name,)
         for arg in function.args:
             if not arg.output:
                 self.unwrap_arg(function, arg)
@@ -410,7 +412,7 @@ class Tracer:
         print method.prototype(interface_wrap_name(interface) + '::' + method.name) + ' {'
         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};' % (int(method.id), interface.name + '::' + method.name, len(method.args) + 1)
-        print '    unsigned __call = __writer.beginEnter(__sig);'
+        print '    unsigned __call = __writer.beginEnter(&__sig);'
         print '    __writer.beginArg(0);'
         print '    __writer.writeOpaque((const void *)m_pInstance);'
         print '    __writer.endArg();'