| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
|
|
| |
* 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.
|
| |
|
|
|
|
| |
Added the modifiers 'b' and 't' to valid modes for 'popen' in Windows.
|
|
|
|
|
|
| |
References were using both 0 indices and nils as values in arrays.
Both do not fit in the concept of a sequence, which is the kind
of use that guides all Lua optimizations.
|
|
|
|
|
|
| |
The macro is useful also in 'lauxlib.c', which does not include
'lualib.h'. Also, the definition was corrected to be "on" when
LUAI_ASSERT is defined.
|
|
|
|
| |
Names in the parser and other details that do not change actual code.
|
|
|
|
|
| |
The global table is always in the array part of the registry; we can
use this fact to make its access slightly more efficient.
|
|
|
|
|
| |
The semantics of 'signal' varies a lot among different implementations;
'sigaction' ensures a more consistent behavior.
|
|
|
|
|
| |
Squares are much more common than other exponentiations, and 'n*n' is
much more efficient than 'pow'.
|
|
|
|
| |
Undo commit 6a10f03ff. Compiler performance is important, too.
|
|
|
|
|
| |
That optimization was too complex and caused some weird traces when
debugging. The more common case «if ... then break» was kept.
|
|
|
|
|
|
| |
When a stack grows, its extra area can be in use, and it becomes part
of the common area. So, the extra area must be kept correct all the
times. (Bug introduced by commit 5aa36e894f5.)
|
|
|
|
|
|
|
|
| |
The allocation of a userdata for the state of the warn system can
cause a panic if it fails; 'luaL_ref' also can fail. This commit
re-implements the warn system so that it does not need an explicit
state. Instead, the system uses different functions to represent
the different states.
|
|
|
|
|
|
| |
- small corrections in the manual
- ldo.c: 'docall' -> 'ccall' ('docall' already used in 'lua.c')
- comments
|
|
|
|
|
|
| |
'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.
|
| |
|
| |
|
|
|
|
|
|
|
| |
Hashes for long strings are computed only when they are used as keys
in a table, not a too common case. And, in that case, it is to easy to
force collisions changing only the characters which are not part of the
hash.
|
|
|
|
|
|
|
| |
- After converting a generic GCObject to a specific type ('gco2*'),
avoid using the original GCObject (to reduce aliasing).
- Small corrections in comments in 'lopcodes.h'
- Added tests about who calls __close metamethods
|
| |
|
|
|
|
|
|
| |
The stack size is derived from 'stack_last', when needed. Moreover,
the handling of stack sizes is more consistent, always excluding the
extra space except when allocating/deallocating the array.
|
|
|
|
|
|
| |
Shrink a stack only when the final stack size can be at most 2/3 the
previous size with half of its entries empty. This commit also
improves the clarity of 'luaD_growstack'.
|
|
|
|
| |
Type punning an address to 'char *' should be always safe.
|
|
|
|
|
| |
A GC step may invoke some finalizer, which may error and emit
a warning due to stack overflfow.
|
|
|
|
|
|
|
|
|
| |
The previous stackless implementations marked all 'luaV_execute'
invocations as fresh. However, re-entering 'luaV_execute' when
resuming a coroutine should not be a fresh invocation. (It works
because 'unroll' called 'luaV_execute' for each call entry, but
it was slower than letting 'luaV_execute' finish all non-fresh
invocations.)
|
|
|
|
|
|
| |
- more organized handling of 'nCcalls'
- comments
- deprecation of 'setcstacklimit'
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
A "with stack" implementation gains too little in performance to be
worth all the noise from C-stack overflows.
This commit is almost a sketch, to test performance. There are several
pending stuff:
- review control of C-stack overflow and error messages;
- what to do with setcstacklimit;
- review comments;
- review unroll of Lua calls.
|
| |
|
|\
| |
| |
| | |
Adding file README.md to local repository.
|
| | |
|
|/ |
|
| |
|
|
|
|
| |
Code for multi-character tokens can start right after maximum char.
|
| |
|
|
|
|
| |
Plus some other small changes.
|
|
|
|
|
| |
The old documentation said that 'ltolower' only works for alphabetic
characters. However, 'l_str2d' uses it (correctly) also on dots ('.').
|
|
|
|
|
|
|
| |
When "undumping" a long string, the function 'loadVector' can call the
reader function, which can run the garbage collector, which can collect
the string being read. So, the string must be anchored during the call
to 'loadVector'.
|
|
|
|
|
|
| |
Avoid turning an object to gray except at the moment it is inserted in a
gray list or in the explicit exceptional cases such as open upvalues and
fixed strings.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- Macro 'gray2black' was renamed 'nw2black' (Non-White to black), as it
was already being used on objects that could be already black.
- Macros 'white2gray' and 'black2gray' were unified in 'set2gray'; no
reason to have two macros when one will do and, again, 'black2gray' was
already being used on objects that could be already gray.
Moreover, macros 'maskcolors' and 'maskgcbits' were negated to have
ones in the described bits, instead of zeros. (This naming seems more
intuitive.)
|
|
|
|
|
|
|
| |
This commit fixes a bug introduced in commit 9cf3299fa. TOUCHED2
objects are always black while the mutator runs, but they can become
temporarily gray inside a minor collection (e.g., if the object is a
weak table).
|
|
|
|
|
| |
Open upvalues are never black; so, when entering generational mode,
they must be colored gray, not black.
|
|
|
|
|
| |
Test uses an extra bit in 'marked' to mark all elements in gray lists
and then check against elements colored gray.
|
|
|
|
|
|
|
|
| |
Tables were using this bit to indicate their array sizes were real
('isrealasize'), but this bit can be useful for tests. Instead, they
can use bit 7 of their 'flag' field for that purpose. (There are only
six fast-access metamethods.) This 'flag' field only exists in tables,
so this use does not affect other types.
|
|
|
|
| |
Macro 'checkconsistency' replaced by the similar 'checkliveness".
|
|
|
|
|
|
|
| |
In incremental mode, threads don't need to be visited again once
visited in the atomic phase. In generational mode (where all visits
are in the atomic phase), only old threads need to be kept in the
'grayagain' list for the next cycle.
|