aboutsummaryrefslogtreecommitdiff
path: root/testes (follow)
Commit message (Collapse)AuthorAgeFilesLines
...
* Allow yields inside '__pairs'Roberto Ierusalimschy2021-03-291-0/+21
|
* File 'tracegc.lua' added to 'packtests'Roberto Ierusalimschy2021-03-101-0/+1
|
* lua_settop/lua_pop closes to-be-closed variablesRoberto Ierusalimschy2021-03-091-1/+25
| | | | | | The existence of 'lua_closeslot' is no reason for lua_pop not to close to-be-closed variables too. It is too error-prone for lua_pop not to close tbc variables being popped from the stack.
* Wrong assertion in 'getbaseline'Roberto Ierusalimschy2021-03-051-0/+8
| | | | | The assertion cannot compute 'f->abslineinfo[i]' when the initial estimate 'i' is -1.
* New test module 'tracegc'Roberto Ierusalimschy2021-03-014-18/+54
| | | | New module easies the inclusion of GC tracing in individual test files.
* New control for reentrancy of emergency collectionsRoberto Ierusalimschy2021-02-261-0/+8
| | | | | | Instead of assuming that shrinking a block may be an emergency collection, use an explicit field ('gcstopem') to stop emergency collections while GC is working.
* Bug (kind of) in 'isinstack'Roberto Ierusalimschy2021-02-251-0/+7
| | | | | | | The function 'isinstack' tried to work around the undefined behavior of subtracting two pointers that do not point to the same object, but the compiler killed to trick. (It optimizes out the safety check, because in a correct execution it will be always true.)
* Bug: 'string.concat' error message uses wrong formatRoberto Ierusalimschy2021-02-151-0/+3
|
* Bug: cannot allow the call 'debug.getinfo(0, ">")'Roberto Ierusalimschy2021-02-151-0/+1
| | | | | | A 'what' argument starting with '>' indicates that there is a function in the C stack, which won't be there if the first argument is not a function.
* '__close' methods can yield in the return of a C functionRoberto Ierusalimschy2021-02-121-1/+75
| | | | | | | When, inside a coroutine, a C function with to-be-closed slots return, the corresponding metamethods can yield. ('__close' metamethods called through 'lua_closeslot' still cannot yield, as there is no continuation to go when resuming.)
* New implementation for to-be-closed variablesRoberto Ierusalimschy2021-02-091-8/+41
| | | | | | | | To-be-closed variables are linked in their own list, embedded into the stack elements. (Due to alignment, this information does not change the size of the stack elements in most architectures.) This new list does not produce garbage and avoids memory errors when creating tbc variables.
* Small improvements in hooksRoberto Ierusalimschy2021-01-261-0/+22
| | | | | | | | | | - 'L->top' is set once in 'luaD_hook', instead of being set in 'luaD_hookcall' and 'rethook'; - resume discard arguments when returning after an yield inside a hook (arguments may interfere with the coroutine stack); - yield inside a hook asserts it has no arguments.
* Correct order of return hooks vs. close metamethodsRoberto Ierusalimschy2021-01-211-7/+70
| | | | | | The return hook should be called only after closing variables (which are still part of the function). C functions were calling the hook before the metamethods.
* Simpler handling of errors when creating tbc variablesRoberto Ierusalimschy2021-01-191-8/+5
| | | | | | New field 'lua_State.ptbc' keeps to-be-closed variable until its upvalue is created, so that it can be closed in case of a memory-allocation error.
* Allow yields in '__close' metamethods ater errorsRoberto Ierusalimschy2021-01-181-8/+40
| | | | | | Completes commit b07fc10e91a. '__close' metamethods can yield even when they are being called due to an error. '__close' metamethods from C functions are still not allowed to yield.
* Allow yields inside '__close' metamethodsRoberto Ierusalimschy2021-01-131-0/+88
| | | | | | | Initial implementation to allow yields inside '__close' metamethods. This current version still does not allow a '__close' metamethod to yield when called due to an error. '__close' metamethods from C functions also are not allowed to yield.
* New API function 'lua_closeslot'Roberto Ierusalimschy2021-01-111-12/+17
| | | | | | Closing a to-be-closed variable with 'lua_settop' is too restrictive, as it erases all slots above the variable. Moreover, it adds side effects to 'lua_settop', which should be a fairly basic function.
* Handles '__close' errors in coroutines in "coroutine style"Roberto Ierusalimschy2020-12-301-2/+39
| | | | | Errors in '__close' metamethods in coroutines are handled by the same logic that handles other errors, through 'recover'.
* Better error messages for calling non-callable objectsRoberto Ierusalimschy2020-12-293-4/+33
| | | | | | | When available, use the calling code to find a suitable name for what was being called; this is particularly useful for errors of non-callable metamethods. This commit also improved the debug information for order metamethods.
* No need to recheck close method before calling itRoberto Ierusalimschy2020-12-291-2/+44
| | | | | | | | A to-be-closed variable is constant and it must have a close metamethod when it is created. A program has to go out of its way (e.g., by changing the variable's metamethod) to invalidate that check. So, it is not worth to test that again. If the program tampers with the metamethod, Lua will raise a regular error when attempting to call it.
* Report last error in closing methodsRoberto Ierusalimschy2020-12-222-87/+27
| | | | | When there are multiple errors around closing methods, report the last error instead of the original.
* Upvalues removed from 'openupval' before being closedRoberto Ierusalimschy2020-12-211-17/+9
| | | | | | | Undo commit c220b0a5d0: '__close' is not called again in case of errors. (Upvalue is removed from the list before the call.) The common error that justified that change was C stack overflows, which are much rarer with the stackless implementation.
* 'coroutine.close'/'lua_resetthread' report original errorsRoberto Ierusalimschy2020-12-183-9/+28
| | | | | | Besides errors in closing methods, 'coroutine.close' and 'lua_resetthread' also consider the original error that stopped the thread, if any.
* Details (do not affect regular code)Roberto Ierusalimschy2020-12-071-0/+14
| | | | | | | * Avoids multiple definitions of 'lua_assert' in test file. * Smaller C-stack limit in test mode. * Note in the manual about the use of false * Extra test for constant reuse.
* Added test cases for error messages about goto/labelRoberto Ierusalimschy2020-12-031-0/+21
|
* Removed optimization for «if ... then goto»Roberto Ierusalimschy2020-11-111-22/+0
| | | | | That optimization was too complex and caused some weird traces when debugging. The more common case «if ... then break» was kept.
* _PROMPT can have non-string valuesRoberto Ierusalimschy2020-10-261-0/+27
| | | | | | 'get_prompt' uses 'luaL_tolstring' to convert _PROMPT or _PROMPT2 value to a string. That conversion may invoke a '__tostring' metamethod.
* Fixed wrong trace of vararg functionsRoberto Ierusalimschy2020-10-191-0/+10
| | | | | Trace of vararg functions was skipping an instruction when returning from a call. (Bug introduced by commit 5d8ce05b3.)
* Fixed bug of keys removed from tables vs 'next'Roberto Ierusalimschy2020-10-141-0/+32
| | | | | | 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.
* 'lua_upvalueid' returns NULL on invalid upvalue indexRoberto Ierusalimschy2020-10-121-1/+1
|
* DetailsRoberto Ierusalimschy2020-10-121-0/+23
| | | | | | | - 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-121-4/+22
|
* Avoid shrinking stacks to oftenRoberto Ierusalimschy2020-10-121-1/+49
| | | | | | 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'.
* 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.
* Revision of stackless implementationRoberto Ierusalimschy2020-10-122-108/+32
| | | | | | - more organized handling of 'nCcalls' - comments - deprecation of 'setcstacklimit'
* Back to a stackless implementationRoberto Ierusalimschy2020-10-123-6/+7
| | | | | | | | | | | | | 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.
* Fixed bug of long strings in binary chunksRoberto Ierusalimschy2020-08-181-1/+15
| | | | | | | 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'.
* TOUCHED2 objects are not always blackRoberto Ierusalimschy2020-08-131-0/+17
| | | | | | | 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).
* Better tests for gray listsRoberto Ierusalimschy2020-08-071-0/+2
| | | | | 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-071-0/+11
| | | | | | | | 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.
* Optimization in 'markold'Roberto Ierusalimschy2020-07-291-0/+16
| | | | | | | | | | 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.
* Fixed bug: line hooks in stripped functionsRoberto Ierusalimschy2020-07-271-1/+18
| | | | | Line-hook handling was accessing debug info. without checking whether it was present.
* Fixed bug: barriers cannot be active during sweepRoberto Ierusalimschy2020-07-271-1/+27
| | | | | | | 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: invalid mode can crash 'io.popen'Roberto Ierusalimschy2020-07-151-0/+15
|
* Fixed bug: wrong stack limit when entering a coroutineRoberto Ierusalimschy2020-07-131-0/+16
| | | | | | 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
|
* Make sure that main thread is non yieldableRoberto Ierusalimschy2020-07-061-2/+12
| | | | | Main thread must be non yieldable even at "level 0" (bare API), outside the 'pcall' from 'lua.c'.
* Keep memory errors as memory errorsRoberto Ierusalimschy2020-07-061-16/+59
| | | | | | | 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-044-10/+10
| | | | | | | 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).
* Simplification and smaller buffers for 'lua_pushfstring'Roberto Ierusalimschy2020-07-031-1/+1
| | | | | The function 'lua_pushfstring' is seldom called with large strings, there is no need to optimize too much for that cases.