what should be a valid object and where should be either a valid
object or #-1
(denoting a location of `nowhere'); otherwise
E_INVARG
is raised. The programmer must be either the owner of
what or a wizard; otherwise, E_PERM
is raised.
If where is a valid object, then the verb-call
where:accept(what)
is performed before any movement takes place. If the verb returns a
false value and the programmer is not a wizard, then where is
considered to have refused entrance to what; move()
raises
E_NACC
. If where does not define an accept
verb, then it
is treated as if it defined one that always returned false.
If moving what into where would create a loop in the containment
hierarchy (i.e., what would contain itself, even indirectly), then
E_RECMOVE
is raised instead.
The `location' property of what is changed to be where, and the `contents' properties of the old and new locations are modified appropriately. Let old-where be the location of what before it was moved. If old-where is a valid object, then the verb-call
old-where:exitfunc(what)
is performed and its result is ignored; it is not an error if old-where does not define a verb named `exitfunc'. Finally, if where and what are still valid objects, and where is still the location of what, then the verb-call
where:enterfunc(what)
is performed and its result is ignored; again, it is not an error if where does not define a verb named `enterfunc'.