aboutsummaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* New release number (5.4.2)Roberto Ierusalimschy2020-10-121-1/+1
|
* 'lua_upvalueid' returns NULL on invalid upvalue indexRoberto Ierusalimschy2020-10-124-15/+33
|
* Hash always use all characters in a long stringRoberto Ierusalimschy2020-10-124-20/+6
| | | | | | | 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.
* DetailsRoberto Ierusalimschy2020-10-124-14/+45
| | | | | | | - 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
* 'recover' finish of 'luaD_pcall' should follow the originalRoberto Ierusalimschy2020-10-122-7/+25
|
* No more field 'lua_State.stacksize'Roberto Ierusalimschy2020-10-126-26/+29
| | | | | | 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.
* Avoid shrinking stacks to oftenRoberto Ierusalimschy2020-10-122-17/+87
| | | | | | 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'.
* No need for 'volatile' in string.pack/unpackRoberto Ierusalimschy2020-10-121-10/+7
| | | | Type punning an address to 'char *' should be always safe.
* Avoid GCs when testing stack overflowRoberto Ierusalimschy2020-10-121-6/+14
| | | | | A GC step may invoke some finalizer, which may error and emit a warning due to stack overflfow.
* Correct handling of 'luaV_execute' invocationsRoberto Ierusalimschy2020-10-125-32/+37
| | | | | | | | | 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.)
* Revision of stackless implementationRoberto Ierusalimschy2020-10-1212-283/+127
| | | | | | - more organized handling of 'nCcalls' - comments - deprecation of 'setcstacklimit'
* Back to a stackless implementationRoberto Ierusalimschy2020-10-1211-95/+72
| | | | | | | | | | | | | 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.
* Wrong cast in 'str_unpack'Roberto Ierusalimschy2020-09-301-1/+1
|
* 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.)