diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2019-03-14 15:53:42 -0300 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2019-03-14 15:53:42 -0300 |
commit | 8fa4f1380b9a203bfdf002c2e9e9e13ebb8384c1 (patch) | |
tree | 02cb0c4c19c563c5924b4faf7014812ea980b8c6 /manual | |
parent | b56d4e570a60a8e84df8288c3122eb5bb5c20af6 (diff) | |
download | lua-github-8fa4f1380b9a203bfdf002c2e9e9e13ebb8384c1.tar.gz |
Finalizers must be callable
Non-function __gc metamethods are not ignored; if present, the
metamethod will be called even if it is not a function.
Diffstat (limited to 'manual')
-rw-r--r-- | manual/manual.of | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/manual/manual.of b/manual/manual.of index 63e78f95..1e4ca857 100644 --- a/manual/manual.of +++ b/manual/manual.of @@ -689,10 +689,8 @@ After the collection, Lua goes through that list. For each object in the list, it checks the object's @idx{__gc} metamethod: -If it is a function, -Lua calls it with the object as its single argument; -if the metamethod is not a function, -Lua simply ignores it. +If it is present, +Lua calls it with the object as its single argument. At the end of each garbage-collection cycle, the finalizers for objects are called in @@ -726,6 +724,9 @@ these marks have no effect. Finalizers cannot yield. +Any error while running a finalizer generates a warning; +it is not propagated. + } @sect3{weak-table| @title{Weak Tables} @@ -7279,6 +7280,11 @@ that is, with maximum alignment of 1 (no alignment) and native endianness. +Native endianness assumes that the whole system is +either big or little endian. +The packing functions will not emulate correctly the behavior +of mixed-endian formats. + Alignment works as follows: For each option, the format gets extra padding until the data starts @@ -7288,6 +7294,7 @@ this minimum must be a power of 2. Options @St{c} and @St{z} are not aligned; option @St{s} follows the alignment of its starting integer. + All padding is filled with zeros by @Lid{string.pack} (and ignored by @Lid{string.unpack}). @@ -8720,6 +8727,14 @@ name is visible, even if this other label is declared in an enclosing block. } +@item{ +When finalizing an object, +Lua does not ignore @idx{__gc} metamethods that are not functions. +Any value will be called, if present. +(Non-callable values will generate a warning, +like any other error when calling a finalizer.) +} + } } |