| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
| |
This option allows external code to avoid the use of gcc builtin macro
'__builtin_expect' in the Lua API.
|
|
|
|
| |
Comments and order of hashing macros in 'ltable.c'.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- Fixes a bug, by removing dummy nodes together with the node
itself. (The previous implementation could leave dummy nodes in frames
which otherwise had no tbc variables, and therefore would not close
variables; that could leave 'tbclist' pointing higher than 'top', which
could dangle if the stack shrank.)
- Computes MAXDELTA based on the type of delta, to ease changing its
type if needed.
- Instead of 'isdummy', uses 'delta==0' to signal dummy nodes. (Dummy
nodes always have MAXDELTA for their real delta.)
|
|
|
|
|
|
|
| |
The use of 'l_likely' in auxlib macros 'luaL_argcheck' and
'luaL_argexpected' should not be restricted to Lua's own code.
For that, 'l_likely' was renamed to 'luai_likely' to be exported
to external code.
|
|
|
|
|
|
| |
The existence of 'lua_closeslot' is no reason for lua_pop not to close
to-be-closed variables too. It is too error-prone for lua_pop not to
close tbc variables being popped from the stack.
|
|
|
|
|
| |
The assertion cannot compute 'f->abslineinfo[i]' when the initial
estimate 'i' is -1.
|
| |
|
| |
|
| |
|
|
|
|
|
|
| |
The warning function using for tests need to check the stack before
pushing anything. (Warning functions are not expected to access a
Lua state, therefore they have no preallocated stack space.)
|
|
|
|
| |
New module easies the inclusion of GC tracing in individual test files.
|
|
|
|
|
|
|
|
|
| |
$he stack reallocation is done in two steps (allocation + free) because
the correction of the pointers pointing into the stack must be done
while both addresses (the old stack and the new one) are valid. In ISO
C, any pointer use after the pointer has been deallocated is undefined
behavior. The compiler option '-fsanitize=pointer-subtract' (plus what
it needs to work) complained about the old implementation.
|
|
|
|
|
|
| |
Instead of assuming that shrinking a block may be an emergency
collection, use an explicit field ('gcstopem') to stop emergency
collections while GC is working.
|
|
|
|
|
|
|
| |
The function 'isinstack' tried to work around the undefined behavior
of subtracting two pointers that do not point to the same object,
but the compiler killed to trick. (It optimizes out the safety check,
because in a correct execution it will be always true.)
|
|
|
|
|
|
|
|
| |
Some places don't need the "fast path" macro tointegerns, either
because speed is not essential (lcode.c) or because the value is not
supposed to be an integer already (luaV_equalobj and luaG_tointerror).
Moreover, luaV_equalobj should always use F2Ieq, even if Lua is
compiled to "round to floor".
|
|
|
|
|
| |
Added documentation and asserts that constants for arithmetic opcodes
must be numbers.
|
|
|
|
|
|
| |
More uses of macros 'likely'/'unlikely' (renamed to
'l_likely'/'l_unlikely'), both in range (extended to the
libraries) and in scope (extended to hooks, stack growth).
|
| |
|
|
|
|
|
|
| |
A 'what' argument starting with '>' indicates that there is a function
in the C stack, which won't be there if the first argument is not a
function.
|
|
|
|
|
|
|
| |
When, inside a coroutine, a C function with to-be-closed slots return,
the corresponding metamethods can yield. ('__close' metamethods called
through 'lua_closeslot' still cannot yield, as there is no continuation
to go when resuming.)
|
|
|
|
|
| |
New definition in the makefile for warnings that are valid for gcc but
not for clang (CWARNGCC).
|
|
|
|
|
|
|
|
| |
To-be-closed variables are linked in their own list, embedded into the
stack elements. (Due to alignment, this information does not change
the size of the stack elements in most architectures.) This new list
does not produce garbage and avoids memory errors when creating tbc
variables.
|
| |
|
|
|
|
|
|
|
|
| |
'luaconf.h' always defines options LUA_32BITS, LUA_C89_NUMBERS,
LUA_INT_TYPE, and LUA_FLOAT_TYPE (using 0/1 for the first two),
to avoid they being set through compiler options. (It is too easy
to forget these options when compiling other software that
interoperates with Lua.)
|
|
|
|
| |
Long time without using HARDSTACKTESTS...
|
|
|
|
|
| |
By producing absolute line information at regular intervals, a simple
division can compute the correct entry for a given instruction.
|
|
|
|
|
| |
The function 'changedline' tries harder to avoid calling
'luaG_getfuncline' plus small changes in the use of 'L->oldpc'.
|
|
|
|
|
|
|
|
|
|
| |
- 'L->top' is set once in 'luaD_hook', instead of being set in
'luaD_hookcall' and 'rethook';
- resume discard arguments when returning after an yield inside a hook
(arguments may interfere with the coroutine stack);
- yield inside a hook asserts it has no arguments.
|
|
|
|
| |
Comments, code details, identation.
|
|
|
|
|
|
| |
The return hook should be called only after closing variables (which
are still part of the function). C functions were calling the hook
before the metamethods.
|
|
|
|
|
|
| |
New field 'lua_State.ptbc' keeps to-be-closed variable until its
upvalue is created, so that it can be closed in case of a
memory-allocation error.
|
|
|
|
|
|
| |
Completes commit b07fc10e91a. '__close' metamethods can yield even
when they are being called due to an error. '__close' metamethods from
C functions are still not allowed to yield.
|
|
|
|
|
| |
The sort function must define a (strict) weak order for a correct
sorting. A partial order is not enough.
|
|
|
|
|
|
|
| |
Initial implementation to allow yields inside '__close' metamethods.
This current version still does not allow a '__close' metamethod
to yield when called due to an error. '__close' metamethods from
C functions also are not allowed to yield.
|
|
|
|
|
|
| |
Closing a to-be-closed variable with 'lua_settop' is too restrictive,
as it erases all slots above the variable. Moreover, it adds side
effects to 'lua_settop', which should be a fairly basic function.
|
|
|
|
|
| |
Errors in '__close' metamethods in coroutines are handled by the same
logic that handles other errors, through 'recover'.
|
| |
|
|
|
|
|
|
|
| |
When available, use the calling code to find a suitable name for what
was being called; this is particularly useful for errors of non-callable
metamethods. This commit also improved the debug information for
order metamethods.
|
|
|
|
|
|
|
|
| |
A to-be-closed variable is constant and it must have a close metamethod
when it is created. A program has to go out of its way (e.g., by
changing the variable's metamethod) to invalidate that check. So,
it is not worth to test that again. If the program tampers with the
metamethod, Lua will raise a regular error when attempting to call it.
|
|
|
|
|
| |
Before panicking, it is simpler to reset the thread instead of closing
its variables and adjust the top manually.
|
|
|
|
|
| |
Instead of protecting each individual metamethod call, protect the
entire call to 'luaF_close'.
|
|
|
|
|
| |
When there are multiple errors around closing methods, report the
last error instead of the original.
|
|
|
|
|
|
|
| |
Undo commit c220b0a5d0: '__close' is not called again in case of
errors. (Upvalue is removed from the list before the call.) The
common error that justified that change was C stack overflows, which
are much rarer with the stackless implementation.
|
|
|
|
|
|
| |
Besides errors in closing methods, 'coroutine.close' and
'lua_resetthread' also consider the original error that stopped the
thread, if any.
|
| |
|
| |
|
|
|
|
| |
The module 'ltests.c' must work correctly with asserts off, too.
|
|
|
|
|
|
|
| |
* Avoids multiple definitions of 'lua_assert' in test file.
* Smaller C-stack limit in test mode.
* Note in the manual about the use of false
* Extra test for constant reuse.
|
|
|
|
|
| |
Functions to set values in a table (luaH_set, luaH_newkey, etc.) receive
the new value, instead of returning a slot where to put the value.
|