12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- % -*- Mode: TeX -*-
- % Traversal Rules and Side Effects
- \issue{MAPPING-DESTRUCTIVE-INTERACTION:EXPLICITLY-VAGUE}
-
- The consequences are undefined
- % (but in general no error will be signaled)
- when \term{code} executed during an \term{object-traversing} operation
- %!!! Barmar wants them listed.
- destructively modifies the \term{object} in a way that might affect the
- ongoing traversal operation.
- In particular, the following rules apply.
- \beginlist
- \itemitem{\b{List traversal}}
-
- For \term{list} traversal operations, the \term{cdr} chain of the
- \term{list} is not allowed to be destructively modified.
-
- \itemitem{\b{Array traversal}}
- For \term{array} traversal operations, the \term{array} is not allowed
- to be adjusted and its \term{fill pointer}, if any, is not allowed to
- be changed.
-
- \itemitem{\b{Hash-table traversal}}
- For \term{hash table} traversal operations, new elements may not be added
- or deleted except that the element corresponding to the current hash key
- may be changed or removed.
-
- \itemitem{\b{Package traversal}}
- %KMP: Isn't this already said in general for object-traversal elsewhere?
- %Barmar: Loop?
- %KMP: With-package-iterator?
- %RPG: Leave it here.
- For \term{package} traversal operations (\eg \macref{do-symbols}),
- new \term{symbols} may not be \term{interned} in or \term{uninterned}
- from the \term{package} being traversed
- or any \term{package} that it uses except that the
- current \term{symbol} may be \term{uninterned} from the \term{package}
- being traversed.
- \endlist
- %These rules only apply to
- %\term{object} manipulators that are not inherently
- % destructive.
- \endissue{MAPPING-DESTRUCTIVE-INTERACTION:EXPLICITLY-VAGUE}
|