If args is valid, assert it's a table.
Provides a clear and immediate error message when you convert
add_timeout() to call().
Also add type_or_nil. Very useful for optional parameters like this one.
Seems clearer than checking the arg first:
if args then assert:type() end
Fix shadowing by using variables with a different name or _.
I don't think any of these warnings were actual bugs and fixed them to
maintain the same behaviour.