aboutsummaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* Optimization for 'n^2'v5.4.2Roberto Ierusalimschy2020-11-131-1/+2
| | | | | Squares are much more common than other exponentiations, and 'n*n' is much more efficient than 'pow'.
* Compiler optimization back to '-O2'Roberto Ierusalimschy2020-11-111-10/+0
| | | | Undo commit 6a10f03ff. Compiler performance is important, too.
* Removed optimization for «if ... then goto»Roberto Ierusalimschy2020-11-112-66/+6
| | | | | That optimization was too complex and caused some weird traces when debugging. The more common case «if ... then break» was kept.
* Bug when growing a stackRoberto Ierusalimschy2020-11-083-4/+4
| | | | | | 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.)
* 'luaL_newstate' should not allocate extra memoryRoberto Ierusalimschy2020-11-033-26/+50
| | | | | | | | 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.
* DetailsRoberto Ierusalimschy2020-10-304-18/+30
| | | | | | - small corrections in the manual - ldo.c: 'docall' -> 'ccall' ('docall' already used in 'lua.c') - comments
* _PROMPT can have non-string valuesRoberto Ierusalimschy2020-10-262-6/+37
| | | | | | 'get_prompt' uses 'luaL_tolstring' to convert _PROMPT or _PROMPT2 value to a string. That conversion may invoke a '__tostring' metamethod.
* CommentsRoberto Ierusalimschy2020-10-223-26/+34
|
* Fixed wrong trace of vararg functionsRoberto Ierusalimschy2020-10-192-20/+35
| | | | | Trace of vararg functions was skipping an instruction when returning from a call. (Bug introduced by commit 5d8ce05b3.)
* Fixed compiler option -DHARDSTACKTESTS to commit 5aa36e8Roberto Ierusalimschy2020-10-191-1/+1
|
* Fixed bug of keys removed from tables vs 'next'Roberto Ierusalimschy2020-10-144-27/+67
| | | | | | 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.
* 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.