|
@@ -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.
|