| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
| |
'os.exit' can call lua_close again, separating new finalizers
created after all previous finalizers were already separated.
|
|
|
|
|
|
| |
The flag CIST_FIN does not mark a finalizer, but the function that was
running when the finalizer was called. (So, the function did not call
the finalizer, but it looks that way in the stack.)
|
|
|
|
| |
As the GC is not reentrant, finalizers should not be able to invoke it.
|
| |
|
|
|
|
|
| |
when building the table 'activelines' for a vararg function, this
first instruction does not make the first line active.
|
|
|
|
|
|
|
|
|
| |
When closing variables during 'coroutine.close' or 'lua_resetthread',
the status of a coroutine must be set to LUA_OK; a coroutine should
not run with any other status. (See assertion in 'lua_callk'.)
After the reset, the status should be kept as normal, as any error
was already reported.
|
|
|
|
|
|
| |
'coroutine.resume' did not increment counter of C calls when
continuing execution after a protected error (that is,
while running 'precover').
|
|
|
|
|
|
| |
Any C function can receive maxinteger as an integer argument, and
therefore cannot increment it without some care (e.g., doing unsigned
arithmetic as the core does).
|
|
|
|
|
| |
When calling 'sprintf', not all conversion specifiers accept all
flags; some combinations are undefined behavior.
|
|
|
|
| |
Added a print with the random seeds used in the tests of 'random'.
|
|
|
|
| |
Sintax for this option now is '-l [globname=]modname'.
|
| |
|
|
|
|
|
| |
When object has a '__name' metafield, 'luaL_tolstring' used the
received index after pushing a string on the stack.
|
|
|
|
| |
Negation of an unchecked lua_Integer overflows with mininteger.
|
| |
|
|
|
|
|
| |
A tail call to a C function can have the behavior of a "real" tail
call, reusing the stack frame of the caller.
|
|
|
|
|
| |
Yielding in a __close metamethod called when returning vararg results
changes the top and so messes up the number of returned values.
|
| |
|
|
|
|
|
|
|
|
| |
In 'lcode.c', when adding constants to the list of constants of a
function, integers represent themselves in the cache and floats
with integral values get a small delta to avoid collision with
integers. (This change avoids creating artificial addresses; the old
implementation converted integers to pointers to index the cache.)
|
| |
|
| |
|
|
|
|
|
|
| |
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.
|
|
|
|
| |
New module easies the inclusion of GC tracing in individual test files.
|
|
|
|
|
|
| |
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.)
|
| |
|
|
|
|
|
|
| |
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.)
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
|
|
| |
- '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.
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
| |
* 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.
|
| |
|
|
|
|
|
| |
That optimization was too complex and caused some weird traces when
debugging. The more common case «if ... then break» was kept.
|
|
|
|
|
|
| |
'get_prompt' uses 'luaL_tolstring' to convert _PROMPT or _PROMPT2
value to a string. That conversion may invoke a '__tostring'
metamethod.
|
|
|
|
|
| |
Trace of vararg functions was skipping an instruction when returning
from a call. (Bug introduced by commit 5d8ce05b3.)
|
|
|
|
|
|
| |
Fixed the bug that a key removed from a table might not be found
again by 'next'. (This is needed to allow keys to be removed during a
traversal.) This bug was introduced in commit 73ec04fc.
|
| |
|