Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- OUTPUT: https://i.imgur.com/27QcbEF.png
- local original
- local an_upvalue = "an upvalue"
- local function dummy(a)
- print("in dummy: " .. tostring(a))
- return an_upvalue
- end
- local old_dummy, old_printconsole = dummy, printconsole
- -- lclosure -> lclosure
- print("lclosure -> lclosure")
- original = assert(replaceclosure(dummy, function(a)
- print("in hook: " .. tostring(a))
- return original(a)
- end))
- dummy("1")
- print(dummy == old_dummy)
- assert(replaceclosure(dummy, original))
- dummy("2")
- -- lclosure -> cclosure
- print("lclosure -> cclosure")
- original = assert(replaceclosure(dummy, print))
- dummy("3")
- print(dummy == old_dummy)
- assert(replaceclosure(dummy, original))
- dummy("4")
- -- cclosure -> lclosure
- print("cclosure -> lclosure")
- original = assert(replaceclosure(printconsole, function(a, ...)
- print("in hook: " .. a)
- original(a, ...)
- end))
- printconsole("5", 255, 0, 0)
- print(printconsole == old_printconsole)
- assert(replaceclosure(printconsole, original))
- printconsole("6", 255, 0, 0)
- -- cclosure -> cclosure
- print("cclosure -> cclosure")
- original = assert(replaceclosure(printconsole, warn))
- printconsole("7", 255, 0, 0)
- print(printconsole == old_printconsole)
- assert(replaceclosure(printconsole, original))
- printconsole("8", 255, 0, 0)
- -- error tests
- spawn(function()
- assert(replaceclosure(dummy, function()
- print(original, an_upvalue)
- end)) -- replacing dummy, which has 1 upvalue (an_upvalue), with a function that has 2 upvalues (original & an_upvalue) will throw an error
- end)
- spawn(function()
- original = assert(replaceclosure(dummy, function() end))
- assert(replaceclosure(dummy, function() end)) -- error here, cannot replace an already replaced closure with anything that isn't the original closure
- end)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement