Browse Source

Improvements in the manual

Several small improvements, in particular a new subsection consolidating
all status codes in the API.
pull/24/head
Roberto Ierusalimschy 5 years ago
parent
commit
7ccc6d8290
  1. 110
      manual/manual.of

110
manual/manual.of

@ -96,6 +96,14 @@ is particularly attractive
for small machines and embedded systems.
(See macro @id{LUA_32BITS} in file @id{luaconf.h}.)
Unless stated otherwise,
any overflow when manipulating integer values @def{wrap around},
according to the usual rules of two-complement arithmetic.
(In other words,
the actual result is the unique representable integer
that is equal modulo @M{2@sp{n}} to the mathematical result,
where @M{n} is the number of bits of the integer type.)
Lua has explicit rules about when each subtype is used,
but it also converts between them automatically as needed @see{coercion}.
Therefore,
@ -1098,8 +1106,11 @@ if its value fits in an integer or it is a hexadecimal constant,
it denotes an integer;
otherwise (that is, a decimal integer numeral that overflows),
it denotes a float.
(Hexadecimal integer numerals that overflow @emph{wrap around};
they always denote an integer value.)
Hexadecimal numerals with neither a radix point nor an exponent
always denote an integer value;
if the value overflows, it @emph{wraps around}
to fit into a valid integer.
Examples of valid integer constants are
@verbatim{
3 345 0xff 0xBEBADA
@ -1712,12 +1723,7 @@ Modulo is defined as the remainder of a division
that rounds the quotient towards minus infinity (floor division).
In case of overflows in integer arithmetic,
all operations @emphx{wrap around},
according to the usual rules of two-complement arithmetic.
(In other words,
they return the unique representable integer
that is equal modulo @M{2@sp{n}} to the mathematical result,
where @M{n} is the number of bits of the integer type.)
all operations @emphx{wrap around}.
}
@sect3{bitwise| @title{Bitwise Operators}
@ -2364,9 +2370,8 @@ and
(that is, the element at @N{the top})
and index @M{-n} represents the first element.
}
@sect2{stacksize| @title{Stack Size}
@sect3{stacksize| @title{Stack Size}
When you interact with the Lua API,
you are responsible for ensuring consistency.
@ -2391,7 +2396,7 @@ you should use @Lid{lua_checkstack}.
}
@sect2{@title{Valid and Acceptable Indices}
@sect3{@title{Valid and Acceptable Indices}
Any function in the API that receives stack indices
works only with @emphx{valid indices} or @emphx{acceptable indices}.
@ -2433,6 +2438,8 @@ which behaves like a nil value.
}
}
@sect2{c-closure| @title{C Closures}
When a @N{C function} is created,
@ -2552,6 +2559,33 @@ However, there is no guarantee about stack space.
To push anything on the stack,
the panic function must first check the available space @see{stacksize}.
@sect3{statuscodes|@title{Status Codes}
Several functions that report errors in the API use the following
status codes to indicate different kinds of errors or other conditions:
@description{
@item{@defid{LUA_OK} (0)| no errors.}
@item{@defid{LUA_ERRRUN}| a runtime error.}
@item{@defid{LUA_ERRMEM}|
@x{memory allocation error}.
For such errors, Lua does not call the @x{message handler}.
}
@item{@defid{LUA_ERRERR}| error while running the @x{message handler}.}
@item{@defid{LUA_ERRSYNTAX}| syntax error during precompilation.}
@item{@defid{LUA_YIELD}| the thread (coroutine) yields.}
}
These constants are defined in the header file @id{lua.h}.
}
}
@sect2{continuations|@title{Handling Yields in C}
@ -3407,19 +3441,6 @@ If there are no errors,
function on top of the stack.
Otherwise, it pushes an error message.
The return values of @id{lua_load} are:
@description{
@item{@Lid{LUA_OK}| no errors;}
@item{@defid{LUA_ERRSYNTAX}|
syntax error during precompilation;}
@item{@Lid{LUA_ERRMEM}|
@x{memory allocation (out-of-memory) error};}
}
The @id{lua_load} function uses a user-supplied @id{reader} function
to read the chunk @seeC{lua_Reader}.
The @id{data} argument is an opaque value passed to the reader function.
@ -3437,6 +3458,11 @@ a @id{NULL} value is equivalent to the string @St{bt}.
so the reader function must always leave the stack
unmodified when returning.
@id{lua_load} can return
@Lid{LUA_OK}, @Lid{LUA_ERRSYNTAX}, or @Lid{LUA_ERRMEM}.
The function may also return other values corresponding to
errors raised by the read function @see{statuscodes}.
If the resulting function has upvalues,
its first upvalue is set to the value of the @x{global environment}
stored at index @id{LUA_RIDX_GLOBALS} in the registry @see{registry}.
@ -3590,25 +3616,8 @@ information to the error object, such as a stack traceback.
Such information cannot be gathered after the return of @Lid{lua_pcall},
since by then the stack has unwound.
The @Lid{lua_pcall} function returns one of the following constants
(defined in @id{lua.h}):
@description{
@item{@defid{LUA_OK} (0)|
success.}
@item{@defid{LUA_ERRRUN}|
a runtime error.
}
@item{@defid{LUA_ERRMEM}|
@x{memory allocation error}.
For such errors, Lua does not call the @x{message handler}.
}
@item{@defid{LUA_ERRERR}|
error while running the @x{message handler}.
}
The @Lid{lua_pcall} function returns one of the following status codes:
@Lid{LUA_OK}, @Lid{LUA_ERRRUN}, @Lid{LUA_ERRMEM}, or @Lid{LUA_ERRERR}.
}
@ -3624,7 +3633,7 @@ int lua_pcallk (lua_State *L,
@apii{nargs + 1,nresults|1,-}
This function behaves exactly like @Lid{lua_pcall},
but allows the called function to yield @see{continuations}.
except that it allows the called function to yield @see{continuations}.
}
@ -4002,7 +4011,7 @@ or returned by the body function.
@Lid{LUA_YIELD} if the coroutine yields,
@Lid{LUA_OK} if the coroutine finishes its execution
without errors,
or an error code in case of errors @seeC{lua_pcall}.
or an error code in case of errors @see{statuscodes}.
In case of errors,
the error object is on the top of the stack.
@ -4153,7 +4162,7 @@ Returns the status of the thread @id{L}.
The status can be @Lid{LUA_OK} for a normal thread,
an error code if the thread finished the execution
of a @Lid{lua_resume} with an error,
or @defid{LUA_YIELD} if the thread is suspended.
or @Lid{LUA_YIELD} if the thread is suspended.
You can call functions only in threads with status @Lid{LUA_OK}.
You can resume threads with status @Lid{LUA_OK}
@ -6263,6 +6272,7 @@ which is true if the call succeeds without errors.
In such case, @id{pcall} also returns all results from the call,
after this first result.
In case of any error, @id{pcall} returns @false plus the error object.
Note that errors caught by @id{pcall} do not call a message handler.
}
@ -8949,6 +8959,14 @@ For instance, the result of @T{"1" + "2"} now is an integer,
not a float.
}
@item{
Literal decimal integer constants that overflow are read as floats,
instead of wrapping around.
You can use hexadecimal notation for such constants if you
want the old bevhavior
(reading them as integers with wrap around).
}
@item{
The use of the @idx{__lt} metamethod to emulate @id{__le}
has been removed.

Loading…
Cancel
Save