| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
| |
| |
| |
| |
| | |
Using a version of 'luaC_newobj' that allows offsets (extra space
before the object itself).
|
|/
|
|
|
| |
Only tables with some minimum number of entries in their hash part
have a 'lastfree' field, kept in a header before the node vector.
|
|
|
|
|
|
|
| |
To avoid the need of both the old and the new stack addresses valid
at the same time, to correct the pointers to the stack, these pointers
are changed to offsets before the reallocation and then changed back
to pointers after the reallocation.
|
|
|
|
|
| |
That will allow to change pointers to offsets while reallocating
the stack.
|
|
|
|
| |
Added comments in the makefile about other useful '-fsanitize' options.
|
| |
|
|
|
|
| |
It was not being used anywhere.
|
|
|
|
| |
Plus some other improvements in the manual.
|
|
|
|
| |
Some cast operations rewritten to use respective macros.
|
| |
|
| |
|
|
|
|
|
| |
Subtracting a small non-negative int from a non-negative int cannot
overflow, and adding a non-negative int to INT_MIN cannot overflow.
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
| |
The growth rate of string buffers was reduced from 2 to 1.5 (3/2).
As string buffers start larger (256~1024 bytes), they don't need to
grow that fast. Moreover, a lower rate allows multiplicative growth up
to larger sizes (3/2 of the maximum). (After that, the growth becomes
linear, which is mostly useless.)
|
|
|
|
|
|
|
| |
Function 'leaveblock' was generating "break" label before removing
variables from the closing block. If 'createlabel' created a 'close'
instruction (which it did when matching a goto/break that exited
the scope of an upvalue), that instruction would use the wrong level.
|
| |
|
| |
|
|
|
|
|
|
| |
Manual has a new section explaining multires expressions, lists of
expressions, and adjustments. This commit also corrects some comments
in the code.
|
| |
|
| |
|
|
|
|
| |
Bug introduced in commit 42d40581.
|
|
|
|
|
|
| |
'luaD_growstack' already checks that. This commit also fixes an
internal bug in 'luaD_growstack': a large 'n' could cause an arithmetic
overflow when computing 'needed'.
|
|
|
|
|
|
|
|
|
|
| |
Because error handling (luaG_errormsg) uses slots from EXTRA_STACK,
and some errors can recur (e.g., string overflow while creating an
error message in 'luaG_runerror', or a C-stack overflow before calling
the message handler), the code should use stack slots with parsimony.
This commit fixes the bug "Lua-stack overflow when C stack overflows
while handling an error".
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
| |
Comments + manual + identation + asserts about stack limits that were
not allowing the use of the full stack
|
|
|
|
|
|
| |
luaV_execute should compute 'ra' only when the instruction uses it.
Computing an illegal address is undefined behavior even if the address
is never dereferenced.
|
| |
|
| |
|
|
|
|
|
|
| |
The explanation includes the limit case of maxinteger being a border.
It also avoids the term "natural", which might include large floats
with natural values.
|
|
|
|
| |
Warnings with clang when using long double for Lua floats.
|
| |
|
|
|
|
|
| |
'os.exit' can call lua_close again, separating new finalizers
created after all previous finalizers were already separated.
|
|
|
|
| |
correction in macro for hard tests + type in comment
|
|
|
|
|
| |
The call to 'checkstackGC' can run finalizers, which will find an
inconsistent CallInfo, as 'ci' is half updated at the point of call.
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
| |
Handle values in table keys as the special cases they are, and not
the other way around.
|
| |
|
|
|
|
|
|
| |
The pointer to the metamethod can be invalidated by a finalizer that
can run during a GC in 'checkstackGCp'. (This commit also fixes a
detail in the manual.) Bug introduced in commit 91673a8ec.
|
|
|
|
|
| |
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').
|
|
|
|
|
|
|
|
|
|
|
| |
'luaD_pretailcall' mimics 'luaD_precall', handling call metamethods
and calling C functions directly. That makes the code in the
interpreter loop simpler.
This commit also goes back to emulating the tail call in 'luaD_precall'
with a goto, as C compilers may not do proper tail calls and the C
stack can overflow much sooner than the Lua stack (which grows as the
metamethod is added to it).
|