self.header(api)
# Includes
- for header in api.headers:
- print header
+ for module in api.modules:
+ for header in module.headers:
+ print header
print
# Generate the serializer functions
# Function wrappers
self.interface = None
self.base = None
- map(self.traceFunctionDecl, api.functions)
- map(self.traceFunctionImpl, api.functions)
+ for function in api.getAllFunctions():
+ self.traceFunctionDecl(function)
+ for function in api.getAllFunctions():
+ self.traceFunctionImpl(function)
print
self.footer(api)
self.invokeFunction(function)
if not function.internal:
print ' trace::localWriter.beginLeave(_call);'
+ print ' if (%s) {' % self.wasFunctionSuccessful(function)
for arg in function.args:
if arg.output:
self.serializeArg(function, arg)
self.wrapArg(function, arg)
+ print ' }'
if function.type is not stdapi.Void:
self.serializeRet(function, "_result")
print ' trace::localWriter.endLeave();'
dispatch = prefix + function.name + suffix
print ' %s%s(%s);' % (result, dispatch, ', '.join([str(arg.name) for arg in function.args]))
+ def wasFunctionSuccessful(self, function):
+ if function.type is stdapi.Void:
+ return 'true'
+ if str(function.type) == 'HRESULT':
+ return 'SUCCEEDED(_result)'
+ return 'true'
+
def serializeArg(self, function, arg):
print ' trace::localWriter.beginArg(%u);' % (arg.index,)
self.serializeArgValue(function, arg)
self.invokeMethod(interface, base, method)
print ' trace::localWriter.beginLeave(_call);'
+
+ print ' if (%s) {' % self.wasFunctionSuccessful(method)
for arg in method.args:
if arg.output:
self.serializeArg(method, arg)
self.wrapArg(method, arg)
+ print ' }'
if method.type is not stdapi.Void:
self.serializeRet(method, '_result')