aboutsummaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* Merge branch 'master' of https://github.com/lua/luav5.4.1Roberto Ierusalimschy2020-09-291-0/+7
|\ | | | | | | Adding file README.md to local repository.
| * Create README.mdlhf2020-09-281-0/+7
| |
* | Details in the manualRoberto Ierusalimschy2020-09-251-6/+9
|/
* Details in comments and documentationRoberto Ierusalimschy2020-09-162-0/+21
|
* DetailRoberto Ierusalimschy2020-09-152-2/+7
| | | | Code for multi-character tokens can start right after maximum char.
* New release number (5.4.1)Roberto Ierusalimschy2020-09-151-1/+1
|
* Better documentation for the GC of strings in the C APIRoberto Ierusalimschy2020-09-091-20/+58
| | | | Plus some other small changes.
* Better documentation for 'lctype.h'Roberto Ierusalimschy2020-09-031-4/+10
| | | | | The old documentation said that 'ltolower' only works for alphabetic characters. However, 'l_str2d' uses it (correctly) also on dots ('.').
* Fixed bug of long strings in binary chunksRoberto Ierusalimschy2020-08-182-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'.
* Better control of gray objectsRoberto Ierusalimschy2020-08-171-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.
* Small changes in macros that change GC colorsRoberto Ierusalimschy2020-08-133-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.)
* TOUCHED2 objects are not always blackRoberto Ierusalimschy2020-08-132-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).
* Open upvalues should be gray when entering gen. modeRoberto Ierusalimschy2020-08-072-14/+21
| | | | | Open upvalues are never black; so, when entering generational mode, they must be colored gray, not black.
* Better tests for gray listsRoberto Ierusalimschy2020-08-073-10/+37
| | | | | Test uses an extra bit in 'marked' to mark all elements in gray lists and then check against elements colored gray.
* Free bit 7 of GC 'marked' fieldRoberto Ierusalimschy2020-08-076-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.
* Detail (in asserts)Roberto Ierusalimschy2020-08-032-5/+3
| | | | Macro 'checkconsistency' replaced by the similar 'checkliveness".
* Threads don't need to always go to 'grayagain'Roberto Ierusalimschy2020-08-031-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.
* Clearer handling of gray lists when entering generational modeRoberto Ierusalimschy2020-08-033-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.
* Optimization in 'markold'Roberto Ierusalimschy2020-07-294-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.
* DetailsRoberto Ierusalimschy2020-07-294-25/+32
| | | | | The fields 'old' and 'finobjold' were renamed 'old1' and 'finobjold1', respectively, to make clearer the main ages of their elements.
* OLD1 ages advanced by 'markold'Roberto Ierusalimschy2020-07-291-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.
* Same changes around 'correctgraylist'Roberto Ierusalimschy2020-07-281-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.
* Fixed bug: line hooks in stripped functionsRoberto Ierusalimschy2020-07-272-2/+21
| | | | | Line-hook handling was accessing debug info. without checking whether it was present.
* Fixed bug: Negation overflow in getlocal/setlocalRoberto Ierusalimschy2020-07-271-3/+3
|
* All objects are kept 'new' in incremental GCRoberto Ierusalimschy2020-07-272-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.
* Function 'printobj' in 'ltests.c' made publicRoberto Ierusalimschy2020-07-272-1/+11
| | | | It helps to have this function available for debugging.
* Fixed bug: barriers cannot be active during sweepRoberto Ierusalimschy2020-07-272-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.
* Fixed bug: 'luaD_callnoyield' called twice in a rowRoberto Ierusalimschy2020-07-171-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.)
* Fixed bug: invalid 'oldpc' when returning to a functionRoberto Ierusalimschy2020-07-176-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.
* Fixed bug: invalid mode can crash 'io.popen'Roberto Ierusalimschy2020-07-152-0/+22
|
* Fixed bug: wrong stack limit when entering a coroutineRoberto Ierusalimschy2020-07-132-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.
* Added test for fix 127e7a6c894Roberto Ierusalimschy2020-07-131-0/+30
|
* Fixed bug of old finalized objects in the GCRoberto Ierusalimschy2020-07-101-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'.
* Macro LUAI_ASSERT eases turning assertions onRoberto Ierusalimschy2020-07-083-4/+11
|
* Change in macro HARDMEMTESTS for testing GCRoberto Ierusalimschy2020-07-082-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.
* Fixed bug of access violation in finalizersRoberto Ierusalimschy2020-07-081-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'.
* Fixed bugs of stack reallocation x GCRoberto Ierusalimschy2020-07-074-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.)
* Avoid any code before locks in the APIRoberto Ierusalimschy2020-07-063-12/+22
| | | | | For consistency in the C API, avoid any initializations before callling lua_lock.
* Make sure that main thread is non yieldableRoberto Ierusalimschy2020-07-063-4/+18
| | | | | Main thread must be non yieldable even at "level 0" (bare API), outside the 'pcall' from 'lua.c'.
* Keep minimum size when shrinking a stackRoberto Ierusalimschy2020-07-061-3/+2
| | | | | When shrinking a stack (during GC), do not make it smaller than the initial stack size.
* Keep memory errors as memory errorsRoberto Ierusalimschy2020-07-064-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.
* Avoid memory allocation in some functions from 'ltests.c'Roberto Ierusalimschy2020-07-045-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).
* DetailsRoberto Ierusalimschy2020-07-032-17/+23
| | | | Comments in makefile and function 'l_str2d'.
* 'luaV_concat' can "concat" one single valueRoberto Ierusalimschy2020-07-033-14/+9
| | | | | Several of its callers needed that case and had to do the check themselves.
* Simplification and smaller buffers for 'lua_pushfstring'Roberto Ierusalimschy2020-07-032-11/+17
| | | | | The function 'lua_pushfstring' is seldom called with large strings, there is no need to optimize too much for that cases.
* Added '.gitignore' to the repositoryRoberto Ierusalimschy2020-07-021-0/+12
|
* Fixed detail in 'loadUpvalues'Roberto Ierusalimschy2020-06-303-7/+24
| | | | | | | | | In 'lundump.c', when loading the upvalues of a function, there can be a read error if the chunk is truncated. In that case, the creation of the error message can trigger an emergency collection while the prototype is still anchored. So, the prototype must be GC consistent before loading the upvales, which implies that it the 'name' fields must be filled with NULL before the reading.
* Detailsv5.4.0Roberto Ierusalimschy2020-06-182-2/+13
| | | | Added as incompatibility, in the manual, the extra return of 'io.lines'.
* Detail in 'lua_resetthread'Roberto Ierusalimschy2020-06-171-5/+4
| | | | | | 'lua_resetthread' should reset the CallInfo list before calling 'luaF_close'. luaF_close can call functions, and those functions should not run with dead functions still in the CallInfo list.
* Fixed missing GC barriers in compiler and undumpRoberto Ierusalimschy2020-06-162-14/+22
| | | | | While building a new prototype, the GC needs barriers for every object (strings and nested prototypes) that is attached to the new prototype.