Decorate as high as possible in the class hierarchy.
authorFrancois Fleuret <francois@fleuret.org>
Tue, 6 Dec 2016 16:33:37 +0000 (17:33 +0100)
committerFrancois Fleuret <francois@fleuret.org>
Tue, 6 Dec 2016 16:33:37 +0000 (17:33 +0100)
profiler.lua

index f57c9d8..77461b3 100644 (file)
@@ -64,15 +64,20 @@ function profiler.decorate(model, functionsToDecorate)
       -- save models anymore.
 
       if rawget(model, name) then
-         error('We decorate the class, not the objects, and there is a `'
+         error('We decorate the classes, not the objects, and there is a `'
                   .. name
                   .. '\' function in '
                   .. tostring(model))
       end
 
-      local toDecorate = getmetatable(model)
+      local toDecorate = model
 
-      if toDecorate[name] and not toDecorate[nameOrig] then
+      while not rawget(toDecorate, name) do
+         toDecorate = getmetatable(toDecorate)
+      end
+
+      if not toDecorate[nameOrig] then
+         print('Decorating ' .. toDecorate.__typename .. '.' .. name)
          toDecorate[nameOrig] = toDecorate[name]
          toDecorate[name] = function(self, ...)
             local startTime = sys.clock()