o_TraversedWhileMakingShared

Answer the non-indirection pointed to (transitively) by object. Also changes the object to point directly at the ultimate target to save hops next time if possible. While shortening chains of indirections, it ignores the otherwise forbidden shared->unshared pointers.