--Do everything that self.super does, verbosely. print("Running tracer, super is", super) return { recv = function(self) print("tracer.recv", "self", self, "super", super) local results = table.pack(super:recv()) print("tracer.recv ->", table.unpack(results, 1, results.n)) return table.unpack(results, 1, results.n) end, send = function(self, data) print(string.format("tracer.send(%q)", data), "self", self, "super", super) local results = table.pack(super:send(data)) print("tracer.send ->", table.unpack(results, 1, results.n)) return table.unpack(results, 1, results.n) end, }