| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
| |
Open upvalues are never black; so, when entering generational mode,
they must be colored gray, not black.
|
|
|
|
|
|
|
|
|
|
| |
OLD1 objects can be potentially anywhere in the 'allgc' list (up
to 'reallyold'), but frequently they are all after 'old1' (natural
evolution of survivals) or do not exist at all (when all objects die
young). So, instead of 'markold' starts looking for them always
from the start of 'allgc', the collector keeps an extra pointer,
'firstold1', that points to the first OLD1 object in the 'allgc' list,
or is NULL if there are no OLD1 objects in that list.
|
|
|
|
|
| |
The fields 'old' and 'finobjold' were renamed 'old1' and 'finobjold1',
respectively, to make clearer the main ages of their elements.
|
|
|
|
|
|
|
|
|
|
| |
The field 'L->oldpc' is not always updated when control returns to a
function; an invalid value can seg. fault when computing 'changedline'.
(One example is an error in a finalizer; control can return to
'luaV_execute' without executing 'luaD_poscall'.) Instead of trying to
fix all possible corner cases, it seems safer to be resilient to invalid
values for 'oldpc'. Valid but wrong values at most cause an extra call
to a line hook.
|
|
|
|
| |
Added 'volatile' to 'l_signalT' variables plus some minor changes.
|
|
|
|
|
| |
LUA_T* represents only types; tags (types + Variants) are represented
by LUA_V* constants.
|
| |
|
|
|
|
|
| |
It is simpler to signal a to-be-closed upvalue with a boolean flag,
instead of using a different tag.
|
| |
|
|
|
|
|
| |
Added new functions to dynamically set the C-stack limit
('lua_setCstacklimit' in the C-API, 'debug.setCstacklimit' in Lua).
|
|
|
|
|
| |
The field 'L->nCcalls' now counts downwards, so that the C-stack
limits do not depend on the stack size.
|
|
|
|
|
|
|
| |
- new error message for "attempt to assign to const variable"
- note in the manual about compatibility options
- comments
- small changes in 'read_line' and 'pushstr'
|
|
|
|
|
|
|
|
| |
- The warning functions get an extra parameter that tells whether
message is to be continued (instead of using end-of-lines as a signal).
- The user data for the warning function is a regular value, instead
of a writable slot inside the Lua state.
|
|
|
|
|
|
|
| |
After a major bad collection (one that collects too few objects),
next collection will be major again. In that case, avoid switching
back to generational mode (as it will have to switch again to
incremental to do next major collection).
|
|
|
|
|
| |
Errors in finalizers (__gc metamethods) are never propagated.
Instead, they generate a warning.
|
|
|
|
|
| |
The warning system is just a way for Lua to emit warnings, messages
to the programmer that do not interfere with the running program.
|
|
|
|
|
|
|
|
|
|
| |
* unification of the 'nny' and 'nCcalls' counters;
* external C functions ('lua_CFunction') count more "slots" in
the C stack (to allow for their possible use of buffers)
* added a new test script specific for C-stack overflows. (Most
of those tests were already present, but concentrating them
in a single script easies the task of checking whether
'LUAI_MAXCCALLS' is adequate in a system.)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The mechanism of "caching the last closure created for a prototype to
try to reuse it the next time a closure for that prototype is created"
was removed. There are several reasons:
- It is hard to find a natural example where this cache has a measurable
impact on performance.
- Programmers already perceive closure creation as something slow,
so they tend to avoid it inside hot paths. (Any case where the cache
could reuse a closure can be rewritten predefining the closure in some
variable and using that variable.)
- The implementation was somewhat complex, due to a bad interaction
with the generational collector. (Typically, new closures are new,
while prototypes are old. So, the cache breaks the invariant that
old objects should not point to new ones.)
|
|
|
|
|
|
|
|
|
|
|
|
| |
Start of the implementation of "scoped variables" or "to be closed"
variables, local variables whose '__close' (or themselves) are called
when they go out of scope. This commit implements the syntax, the
opcode, and the creation of the corresponding upvalue, but it still
does not call the finalizations when the variable goes out of scope
(the most important part).
Currently, the syntax is 'local scoped name = exp', but that will
probably change.
|
|
|
|
|
|
|
|
|
|
|
| |
As hinted in the manual for Lua 5.3, the emulation of the metamethod
for '__le' using '__le' has been deprecated. It is slow, complicates
the logic, and it is easy to avoid this emulation by defining a proper
'__le' function.
Moreover, often this emulation was used wrongly, with a programmer
assuming that an order is total when it is not (e.g., NaN in
floating-point numbers).
|
|
|
|
|
|
|
|
| |
The counter 'nCcalls' now includes the number of CallInfo structures
pre-allocated (so that these "potential" C calls can be made without
checking 'nCcalls'). So, when copying this value from a thread to
another, in 'lua_resume', it must be corrected to the number of
CallInfo structures in the thread being resumed.
|
|
|
|
| |
Lua should work correctly with several copies of the kernel
|
|
|
|
| |
addresses of static variables
|
|
|
|
| |
(keep the standard of names in lower case)
|
|
|
|
| |
(otherwise its cast is blind, casting any value given to it)
|
|
|
|
| |
(for information about values being given and returned in function calls)
|
| |
|
|
|
|
| |
new implementation should have zero overhead for non-vararg functions
|
|
|
|
| |
hooks, where C code can run inside a Lua function).
|
|
|
|
|
| |
recursively to execute function calls. 'unroll' continues all
executions suspended by an yield (through a long jump)
|
|
|
|
| |
to update its copy of 'base' when the stack is reallocated)
|
| |
|
| |
|
| |
|
| |
|
|
|
|
| |
'CallInfo'
|
| |
|
|
|
|
|
|
| |
(both can be retrieved by 'luaS_newliteral' without creating anything,
because they are fixed, but "n" deserves fast access while 'memerrmsg'
does not)
|
|
|
|
|
|
| |
if the key is dead, it cannot be given to 'next'. Instead, we now
use a 'table' tag without the collectable bit, which makes it
a unique tag good enough to reserve space.
|
|
|
|
|
|
| |
Some simplifications (not counting bytes, couting only slots visited;
no more 'gcfinnum'); more GC parameters; using vararg in 'lua_gc' to
set parameters in different GC modes
|
|
|
|
| |
with old/new vararg implementation)
|
|
|
|
| |
prototypes to have their caches visited again) + constant 'MAXMISS'
|
|
|
|
| |
of mode)
|
| |
|
|
|
|
| |
of reference count (simpler and better for generational mode)
|
| |
|
| |
|
| |
|
| |
|
|
|
|
| |
as a finalizer
|