diff options
author | Graham Northup <grahamnorthup@yahoo.com> | 2021-01-29 11:34:00 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-01-29 17:34:00 +0100 |
commit | e6e5910cb432f0fb25a8af3dc6cb9950fd9a05f5 (patch) | |
tree | 48bb974b540225a3da85d9c9da8e063f37a97a32 /doc | |
parent | 2760371d8e43327e94d1b4ecb79fbcb56278db90 (diff) | |
download | minetest-e6e5910cb432f0fb25a8af3dc6cb9950fd9a05f5.tar.gz minetest-e6e5910cb432f0fb25a8af3dc6cb9950fd9a05f5.tar.bz2 minetest-e6e5910cb432f0fb25a8af3dc6cb9950fd9a05f5.zip |
Clarify key_value_swap's edge case (#10799)
In compiler design especially, leaving behavior as "undefined" is a _strong_ condition that basically states that all possible integrity is violated; it's the kind of thing that happens when, say, dereferencing a pointer with unknown provenance, and most typically leads to a crash, but can result in all sorts of spectacular errors--thus, "it is undefined" how your program will melt down.
The pure-Lua implementation of `key_value_swap` does not permit UB _per se_ (assuming the implementation of Lua itself is sound), but does deterministically choose the value to which a key is mapped (the last in visitation order wins--since visitation order is arbitrary, _some_ value _will_ be chosen). Most importantly, the program won't do something wildly unexpected.
Diffstat (limited to 'doc')
-rw-r--r-- | doc/lua_api.txt | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/doc/lua_api.txt b/doc/lua_api.txt index 12ea85345..cfc150edc 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -3275,7 +3275,8 @@ Helper functions * Appends all values in `other_table` to `table` - uses `#table + 1` to find new indices. * `table.key_value_swap(t)`: returns a table with keys and values swapped - * If multiple keys in `t` map to the same value, the result is undefined. + * If multiple keys in `t` map to the same value, it is unspecified which + value maps to that key. * `table.shuffle(table, [from], [to], [random_func])`: * Shuffles elements `from` to `to` in `table` in place * `from` defaults to `1` |