-- Scope manipulation routines
--
---- Replace a function scope with a shallow copy of itself.
--- This is useful if you want to get rid of several unwanted side effects
--- while changing the scope of a certain Lua function.
--- @param f Lua function
-function resfenv(f)
- setfenv(f, clone(getfenv(f)))
-end
-
---- Store given object associated with given key in the scope of a function.
--- @param f Lua function
--- @param key String value containg the key of the object to store
--- @param obj Object to store in the scope
--- @return Always nil
--- @see updfenv
--- @see resfenv
-function extfenv(f, key, obj)
- local scope = getfenv(f)
- scope[key] = obj
-end
-
---- Extend the scope of a function with the contents of a table
--- @param f Lua function
--- @param key String value containg the key of the object to store
--- @param obj Object to store in the scope
--- @return Always nil
--- @see extfenv
--- @see resfenv
-function updfenv(f, extscope)
- update(getfenv(f), extscope)
-end
-
--- Create a new or get an already existing thread local store associated with
-- the current active coroutine. A thread local store is private a table object
-- whose values can't be accessed from outside of the running coroutine.