aboutsummaryrefslogtreecommitdiff
path: root/lua.h (unfollow)
Commit message (Collapse)AuthorFilesLines
2020-09-25Details in the manualRoberto Ierusalimschy1-6/+9
2020-09-16Details in comments and documentationRoberto Ierusalimschy2-0/+21
2020-09-15DetailRoberto Ierusalimschy2-2/+7
Code for multi-character tokens can start right after maximum char.
2020-09-15New release number (5.4.1)Roberto Ierusalimschy1-1/+1
2020-09-09Better documentation for the GC of strings in the C APIRoberto Ierusalimschy1-20/+58
Plus some other small changes.
2020-09-03Better documentation for 'lctype.h'Roberto Ierusalimschy1-4/+10
The old documentation said that 'ltolower' only works for alphabetic characters. However, 'l_str2d' uses it (correctly) also on dots ('.').
2020-08-18Fixed bug of long strings in binary chunksRoberto Ierusalimschy2-1/+18
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'.
2020-08-17Better control of gray objectsRoberto Ierusalimschy1-44/+50
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.
2020-08-13Small changes in macros that change GC colorsRoberto Ierusalimschy3-39/+40
- 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.)
2020-08-13TOUCHED2 objects are not always blackRoberto Ierusalimschy2-8/+19
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).
2020-08-07Open upvalues should be gray when entering gen. modeRoberto Ierusalimschy2-14/+21
Open upvalues are never black; so, when entering generational mode, they must be colored gray, not black.
2020-08-07Better tests for gray listsRoberto Ierusalimschy3-10/+37
Test uses an extra bit in 'marked' to mark all elements in gray lists and then check against elements colored gray.
2020-08-07Free bit 7 of GC 'marked' fieldRoberto Ierusalimschy6-7/+31
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.
2020-08-03Detail (in asserts)Roberto Ierusalimschy2-5/+3
Macro 'checkconsistency' replaced by the similar 'checkliveness".
2020-08-03Threads don't need to always go to 'grayagain'Roberto Ierusalimschy1-18/+29
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.
2020-08-03Clearer handling of gray lists when entering generational modeRoberto Ierusalimschy3-18/+79
When entering generational mode, all objects are old. So, the only objects that need to be in a gray list are threads, which can be assigned without barriers. Changes in anything else (e.g., weak tables) will trigger barriers that, if needed, will add the object to a gray list.
2020-07-29Optimization in 'markold'Roberto Ierusalimschy4-19/+76
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.
2020-07-29DetailsRoberto Ierusalimschy4-25/+32
The fields 'old' and 'finobjold' were renamed 'old1' and 'finobjold1', respectively, to make clearer the main ages of their elements.
2020-07-29OLD1 ages advanced by 'markold'Roberto Ierusalimschy1-5/+6
Objects aged OLD1 have their ages advanced by 'markold', which has to visit them anyway. So, the GC doesn't need to "sweep" the old1 list.
2020-07-28Same changes around 'correctgraylist'Roberto Ierusalimschy1-53/+66
Instead of adding all tables and userdata back to the 'grayagain' list to be checked by 'correctgraylist', the collector adds only the objects that will remain in that list (objects aged TOUCHED1). This commit also rewrites 'correctgraylist' with a clearer logic.
2020-07-27Fixed bug: line hooks in stripped functionsRoberto Ierusalimschy2-2/+21
Line-hook handling was accessing debug info. without checking whether it was present.
2020-07-27Fixed bug: Negation overflow in getlocal/setlocalRoberto Ierusalimschy1-3/+3
2020-07-27All objects are kept 'new' in incremental GCRoberto Ierusalimschy2-19/+24
Small changes to ensure that all objects are kept 'new' in incremental GC (except for fixed strings, which are always old) and to make that fact clearer.
2020-07-27Function 'printobj' in 'ltests.c' made publicRoberto Ierusalimschy2-1/+11
It helps to have this function available for debugging.
2020-07-27Fixed bug: barriers cannot be active during sweepRoberto Ierusalimschy2-17/+59
Barriers cannot be active during sweep, even in generational mode. (Although gen. mode is not incremental, it can hit a barrier when deleting a thread and closing its upvalues.) The colors of objects are being changed during sweep and, therefore, cannot be trusted.
2020-07-17Fixed bug: 'luaD_callnoyield' called twice in a rowRoberto Ierusalimschy1-5/+4
In luaD_callnoyield, when there is a possible stack overflow, it zeros the number of CallInfos to force a check when calling the function. However, if the "function" is not a function, the code will raise an error before checking the stack. Then, the error handling calls luaD_callnoyield again and nCcalls is decremented again, crossing the stack redzone without raising an error. (This loop can only happens once, because the error handler must be a function. But once is enough to cross the redzone.)
2020-07-17Fixed bug: invalid 'oldpc' when returning to a functionRoberto Ierusalimschy6-21/+36
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.
2020-07-15Fixed bug: invalid mode can crash 'io.popen'Roberto Ierusalimschy2-0/+22
2020-07-13Fixed bug: wrong stack limit when entering a coroutineRoberto Ierusalimschy2-1/+17
When entering a coroutine, the computation of nCcalls added 'from->nci' to correct for preallocated CallInfos, but 'nci' includes also the Callinfos already used.
2020-07-13Added test for fix 127e7a6c894Roberto Ierusalimschy1-0/+30
2020-07-10Fixed bug of old finalized objects in the GCRoberto Ierusalimschy1-6/+4
When an object aged OLD1 is finalized, it is moved from the list 'finobj' to the *beginning* of the list 'allgc'. So, this part of the list (and not only the survival list) must be visited by 'markold'.
2020-07-08Macro LUAI_ASSERT eases turning assertions onRoberto Ierusalimschy3-4/+11
2020-07-08Change in macro HARDMEMTESTS for testing GCRoberto Ierusalimschy2-2/+4
Macro HARDMEMTESTS broke in two: HARDMEMTESTS forces a full GC cycle at every point where the GC can run. New macro EMERGENCYGCTESTS forces an emergency collection at every memory allocation.
2020-07-08Fixed bug of access violation in finalizersRoberto Ierusalimschy1-4/+3
Errors in finalizers need a valid 'pc' to produce an error message, even if the error is not propagated. Therefore, calls to the GC (which may call finalizers) inside luaV_execute must save the 'pc'.
2020-07-07Fixed bugs of stack reallocation x GCRoberto Ierusalimschy4-11/+14
Macro 'checkstackGC' was doing a GC step after resizing the stack; the GC could shrink the stack and undo the resize. Moreover, macro 'checkstackp' also does a GC step, which could remove the preallocated CallInfo when calling a function. (Its name has been changed to 'checkstackGCp' to emphasize that it calls the GC.)
2020-07-06Avoid any code before locks in the APIRoberto Ierusalimschy3-12/+22
For consistency in the C API, avoid any initializations before callling lua_lock.
2020-07-06Make sure that main thread is non yieldableRoberto Ierusalimschy3-4/+18
Main thread must be non yieldable even at "level 0" (bare API), outside the 'pcall' from 'lua.c'.
2020-07-06Keep minimum size when shrinking a stackRoberto Ierusalimschy1-3/+2
When shrinking a stack (during GC), do not make it smaller than the initial stack size.
2020-07-06Keep memory errors as memory errorsRoberto Ierusalimschy4-23/+75
Allow memory errors to be raised through the API (throwing the error with the memory error message); error in external allocations raises a memory error; memory errors in coroutines are re-raised as memory errors.
2020-07-04Avoid memory allocation in some functions from 'ltests.c'Roberto Ierusalimschy5-17/+30
To allow their use in memory tests, some functions in 'ltests.c' should never allocate memory. To avoid this allocation, the library registers the strings used for status codes, and keeps the variable '_WARN' always defined (with false instead of nil).
2020-07-03DetailsRoberto Ierusalimschy2-17/+23
Comments in makefile and function 'l_str2d'.
2020-07-03'luaV_concat' can "concat" one single valueRoberto Ierusalimschy3-14/+9
Several of its callers needed that case and had to do the check themselves.
2020-07-03Simplification and smaller buffers for 'lua_pushfstring'Roberto Ierusalimschy2-11/+17
The function 'lua_pushfstring' is seldom called with large strings, there is no need to optimize too much for that cases.