aboutsummaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
...
* 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.
* In 'lua_checkmemory', userdata can be gray, tooRoberto Ierusalimschy2020-06-151-0/+4
| | | | | Since commit ca6fe7449a74, userdata with uservalues can be gray and can belong to gray lists ('gclist').
* 'luaE_shrinkCI' shouldn't remove first free CallInfoRoberto Ierusalimschy2020-06-151-8/+14
| | | | | Due to emergency collections, 'luaE_shrinkCI' can be called while Lua is building a new CallInfo, which for a while is still a free CallInfo.
* DetailsRoberto Ierusalimschy2020-06-102-4/+3
|
* Avoid calling 'fprintf' with NULLRoberto Ierusalimschy2020-06-093-3/+7
| | | | | | Avoid undefined behavior in calls like «fprintf("%s", NULL)». ('lua_writestringerror' is implemented as 'fprintf', and 'lua_tostring' can return NULL if object is not a string.)
* Fixed two bugs in to-be-closed variables x constantsRoberto Ierusalimschy2020-06-013-30/+75
| | | | | | | | | | The parser were mixing compiler indices of variables with stack indices, so that when a to-be-closed variable was used inside the scope of compile-time constants (which may be optimized away), it might be closed in the wrong place. (See new tests for examples.) Besides fixing the bugs, this commit also changed comments and variable names to avoid that kind of confusion and added tests.
* Improvements in the manualRoberto Ierusalimschy2020-05-291-45/+86
| | | | | | | | - more consistent nomenclature for error handling - more precise definition for dead objects - added algorithm used by 'math.random' - added luaL_pushfail - some other minor changes
* Details (more uniformity in error messages)Roberto Ierusalimschy2020-05-273-15/+15
|
* 'luaL_execresult' does not assume -1 status as errorRoberto Ierusalimschy2020-05-223-3/+6
| | | | | | | | | | | ISO C is silent about the return of 'system'. Windows sets 'errno' in case of errors. Linux has several different error cases, with different return values. ISO C allows 'system' to set 'errno' even if there are no errors. Here we assume that a status==0 is success (which is the case on several platforms), otherwise it is an error. If there is an error number, gives the error based on it. (The worst a spurious 'errno' can do is to generate a bad error message.) Otherwise uses the normal results.
* Improvements in the handling of signalsRoberto Ierusalimschy2020-05-225-21/+25
| | | | Added 'volatile' to 'l_signalT' variables plus some minor changes.
* Cleaner definition for 'TString'Roberto Ierusalimschy2020-05-192-5/+8
| | | | | Use a variable-sized array to store string contents at the end of a structure 'TString', instead of raw memory.
* Details in commentsRoberto Ierusalimschy2020-05-072-2/+2
|
* Back to old encoding of versions in binary filesRoberto Ierusalimschy2020-05-065-6/+11
| | | | | | (Undoing part of commit f53eabeed8.) It is better to keep this encoding stable, so that all Lua versions can read at least the version of a binary file.
* C-Stack test does not assume minimum of 400 slotsRoberto Ierusalimschy2020-05-041-17/+26
|
* DetailsRoberto Ierusalimschy2020-04-301-5/+9
| | | | | When in test mode (#include "tests.h"), force Lua to use its own implementation of 'lua_strx2number' and 'lua_number2strx' to test them.
* Fixed warning about casts between function pointersRoberto Ierusalimschy2020-04-291-1/+8
| | | | | | gcc now warns (with -Wextra) about casts between pointers to different function types. The type 'void(*)(void)' works as a 'void*' for function pointers, cleaning the warning.
* Several details about 5.4.0 rc1Roberto Ierusalimschy2020-04-2312-24/+22
| | | | | Corrected several small details: added 'const', adjusts in tabs x spaces, removed unused #includes and #defines, misspellings, etc.
* Small issue in 'exprstat'Roberto Ierusalimschy2020-04-231-1/+2
| | | | | | | The code should not compute an instruction address before checking that it exists. (Virtually no machine complains of computing an invalid address, as long as the address is not used, but for ISO C that is undefined behavior.)
* Added 'simplesect' sections to the manualRoberto Ierusalimschy2020-04-135-6/+56
| | | | | | | 'simplesect' encloses the introductory text of sections with subsections, so that each section either is all text or is all subsections. (This commit also corrects a small brace error in the manual and extra spaces/tabs in some other files.)