aboutsummaryrefslogtreecommitdiff
path: root/ldo.c (follow)
Commit message (Collapse)AuthorAgeFilesLines
* Added option for direct correction of stack pointersRoberto Ierusalimschy2024-08-221-10/+44
| | | | | | | | | | The use of a pointer (not access, only for computations) after its deallocation is forbiden in ISO C, but seems to work fine in all platforms we are aware of. So, using that to correct stack pointers after a stack reallocation seems safe and is much simpler than the current implementation (first change all pointers to offsets and then changing the offsets back to pointers). Anyway, for now that option is disabled.
* Struct 'transferinfo' moved to "lua_State"Roberto Ierusalimschy2024-07-301-9/+5
| | | | | | That reduces the size of "CallInfo". Moreover, bit CIST_HOOKED from call status is not needed. When in a hook, 'transferinfo' is always valid, being zero when the hook is not call/return.
* Added gcc option '-Wconversion'Roberto Ierusalimschy2024-07-271-5/+5
| | | | | No warnings for standard numerical types. Still pending alternative numerical types.
* 'nresults' moved into 'callstatus'Roberto Ierusalimschy2024-07-211-34/+38
| | | | That gives us more free bits in 'callstatus', for future use.
* Using CIST_CLSRET instead of trick with 'nresults'Roberto Ierusalimschy2024-07-191-9/+11
| | | | | The callstatus flag CIST_CLSRET is used in all tests for the presence of variables to be closed in C functions.
* Maximum stack size may not fit in unsigned shortRoberto Ierusalimschy2024-07-161-14/+29
| | | | | | Therefore, fields ftransfer/ntransfer in lua_Debug must have type 'int'. (Maximum stack size must fit in an 'int'.) Also, this commit adds check that maximum stack size respects size_t for size in bytes.
* Cleaning of llimits.hRoberto Ierusalimschy2024-06-201-0/+13
| | | | | | Several definitions that don't need to be "global" (that is, that concerns only specific parts of the code) moved out of llimits.h, to more appropriate places.
* API asserts for illegal pops of to-be-closed variablesRoberto Ierusalimschy2024-03-111-2/+3
|
* Merge branch 'master' into nextversionRoberto Ierusalimschy2024-01-251-0/+4
|\
| * Bug: Yielding in a hook stops in the wrong instructionRoberto Ierusalimschy2024-01-111-0/+4
| | | | | | | | | | | | | | | | Yielding in a hook must decrease the program counter, because it already counted an instruction that, in the end, was not executed. However, that decrement should be done only when about to restart the thread. Otherwise, inspecting the thread with the debug library shows it one instruction behind of where it really is.
* | Added suport for Fixed BuffersRoberto Ierusalimschy2023-09-051-4/+9
| | | | | | | | | | A fixed buffer keeps a binary chunk "forever", so that the program does not need to copy some of its parts when loading it.
* | Field 'Proto.is_vararg' uses only one bitRoberto Ierusalimschy2023-08-301-1/+1
| | | | | | | | So that the other bits can be used for other purposes.
* | Merge branch 'master' into nextversionRoberto Ierusalimschy2023-06-221-12/+8
|\|
| * Several functions turned 'static'Roberto Ierusalimschy2023-05-221-3/+3
| | | | | | | | | | Several functions that were already being used only inside their own file have been declared as 'static'.
| * Corrected support for 16-bit systemsRoberto Ierusalimschy2023-03-091-9/+5
| | | | | | | | | | We still need access to a 16-bit system to correctly test these changes.
* | Removed GC checks from function callsRoberto Ierusalimschy2022-11-241-4/+4
|/ | | | | Function calls do not create new objects. (It may use memory with stack reallocation, but now that is irrelevant to the GC.)
* Stack reallocation done with a single reallocRoberto Ierusalimschy2022-10-311-22/+46
| | | | | | | To avoid the need of both the old and the new stack addresses valid at the same time, to correct the pointers to the stack, these pointers are changed to offsets before the reallocation and then changed back to pointers after the reallocation.
* Stack indices changed to union'sRoberto Ierusalimschy2022-10-291-63/+62
| | | | | That will allow to change pointers to offsets while reallocating the stack.
* More checks and documentation for uses of EXTRA_STACKRoberto Ierusalimschy2022-05-261-1/+6
|
* Bug: 'lua_settop' may use an invalid pointer to stackRoberto Ierusalimschy2022-05-251-6/+6
|
* 'lua_checkstack' doesn't need to check stack overflowRoberto Ierusalimschy2022-05-231-8/+7
| | | | | | 'luaD_growstack' already checks that. This commit also fixes an internal bug in 'luaD_growstack': a large 'n' could cause an arithmetic overflow when computing 'needed'.
* DetailsRoberto Ierusalimschy2022-04-011-2/+6
| | | | | Comments + manual + identation + asserts about stack limits that were not allowing the use of the full stack
* Bug: finalizers can be called with an invalid stackRoberto Ierusalimschy2021-12-151-1/+1
| | | | | The call to 'checkstackGC' can run finalizers, which will find an inconsistent CallInfo, as 'ci' is half updated at the point of call.
* Corrected bug in 'luaD_tryfuncTM'Roberto Ierusalimschy2021-11-161-1/+2
| | | | | | The pointer to the metamethod can be invalidated by a finalizer that can run during a GC in 'checkstackGCp'. (This commit also fixes a detail in the manual.) Bug introduced in commit 91673a8ec.
* Bug: C stack overflow with coroutinesRoberto Ierusalimschy2021-11-031-2/+4
| | | | | | 'coroutine.resume' did not increment counter of C calls when continuing execution after a protected error (that is, while running 'precover').
* More uniform implementation for tail callsRoberto Ierusalimschy2021-10-291-29/+52
| | | | | | | | | | | 'luaD_pretailcall' mimics 'luaD_precall', handling call metamethods and calling C functions directly. That makes the code in the interpreter loop simpler. This commit also goes back to emulating the tail call in 'luaD_precall' with a goto, as C compilers may not do proper tail calls and the C stack can overflow much sooner than the Lua stack (which grows as the metamethod is added to it).
* Removed goto's in 'luaD_precall'Roberto Ierusalimschy2021-10-181-24/+27
| | | | (plus a detail in lauxlib.h.)
* Using 'inline' in some functionsRoberto Ierusalimschy2021-09-151-4/+4
| | | | | According to ISO C, "making a function an inline function suggests that calls to the function be as fast as possible." (Not available in C89.)
* 'luaD_tryfuncTM' checks stack space by itselfRoberto Ierusalimschy2021-08-181-3/+4
|
* Undo simplification of tail calls (commit 901d760)Roberto Ierusalimschy2021-08-181-34/+32
| | | | Not that simpler and slower.
* Simplification in the parameters of 'luaD_precall'Roberto Ierusalimschy2021-06-301-10/+9
| | | | | | The parameters 'nresults' and 'delta1', in 'luaD_precall', were never meaningful simultaneously. So, they were combined in a single parameter 'retdel'.
* C functions can be tail called, tooRoberto Ierusalimschy2021-06-141-18/+25
| | | | | A tail call to a C function can have the behavior of a "real" tail call, reusing the stack frame of the caller.
* Simpler implementation for tail callsRoberto Ierusalimschy2021-06-111-24/+24
| | | | | Tail calls handled by 'luaD_precall', like regular calls, to avoid code duplication.
* Stack reallocation done in two phasesRoberto Ierusalimschy2021-02-271-7/+21
| | | | | | | | | $he stack reallocation is done in two steps (allocation + free) because the correction of the pointers pointing into the stack must be done while both addresses (the old stack and the new one) are valid. In ISO C, any pointer use after the pointer has been deallocated is undefined behavior. The compiler option '-fsanitize=pointer-subtract' (plus what it needs to work) complained about the old implementation.
* Broadening the use of branch hintsRoberto Ierusalimschy2021-02-241-12/+12
| | | | | | More uses of macros 'likely'/'unlikely' (renamed to 'l_likely'/'l_unlikely'), both in range (extended to the libraries) and in scope (extended to hooks, stack growth).
* '__close' methods can yield in the return of a C functionRoberto Ierusalimschy2021-02-121-29/+43
| | | | | | | 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-1/+1
| | | | | | | | 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.
* Fixed some bugs around stack reallocationRoberto Ierusalimschy2021-02-051-1/+1
| | | | Long time without using HARDSTACKTESTS...
* Optimizations for line hookRoberto Ierusalimschy2021-01-281-4/+5
| | | | | The function 'changedline' tries harder to avoid calling 'luaG_getfuncline' plus small changes in the use of 'L->oldpc'.
* Small improvements in hooksRoberto Ierusalimschy2021-01-261-9/+8
| | | | | | | | | | - '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.
* Janitorial workRoberto Ierusalimschy2021-01-251-24/+31
| | | | Comments, code details, identation.
* Correct order of return hooks vs. close metamethodsRoberto Ierusalimschy2021-01-211-9/+15
| | | | | | 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-0/+1
| | | | | | 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-60/+67
| | | | | | 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-3/+3
| | | | | | | 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.
* Handles '__close' errors in coroutines in "coroutine style"Roberto Ierusalimschy2020-12-301-20/+46
| | | | | 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-291-1/+1
| | | | | | | 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.
* Reset thread before panickingRoberto Ierusalimschy2020-12-281-5/+1
| | | | | Before panicking, it is simpler to reset the thread instead of closing its variables and adjust the top manually.
* Cleaner handling of errors in '__close' metamethodsRoberto Ierusalimschy2020-12-281-12/+47
| | | | | Instead of protecting each individual metamethod call, protect the entire call to 'luaF_close'.
* Bug when growing a stackRoberto Ierusalimschy2020-11-081-1/+1
| | | | | | 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.)