aboutsummaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
...
* Don't use tointegerns when luaV_tointegerns will doRoberto Ierusalimschy2021-02-243-4/+10
| | | | | | | | Some places don't need the "fast path" macro tointegerns, either because speed is not essential (lcode.c) or because the value is not supposed to be an integer already (luaV_equalobj and luaG_tointerror). Moreover, luaV_equalobj should always use F2Ieq, even if Lua is compiled to "round to floor".
* DetailsRoberto Ierusalimschy2021-02-242-9/+9
| | | | | Added documentation and asserts that constants for arithmetic opcodes must be numbers.
* Broadening the use of branch hintsRoberto Ierusalimschy2021-02-2424-141/+162
| | | | | | 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).
* Bug: 'string.concat' error message uses wrong formatRoberto Ierusalimschy2021-02-152-1/+4
|
* Bug: cannot allow the call 'debug.getinfo(0, ">")'Roberto Ierusalimschy2021-02-152-0/+2
| | | | | | 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-125-34/+131
| | | | | | | 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.)
* Eases the use of clang in the makefileRoberto Ierusalimschy2021-02-101-4/+9
| | | | | New definition in the makefile for warnings that are valid for gcc but not for clang (CWARNGCC).
* New implementation for to-be-closed variablesRoberto Ierusalimschy2021-02-0910-66/+103
| | | | | | | | 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.
* New macro 'completestate'Roberto Ierusalimschy2021-02-054-7/+11
|
* Forbid changing numerical types through compiler optionsRoberto Ierusalimschy2021-02-051-41/+42
| | | | | | | | 'luaconf.h' always defines options LUA_32BITS, LUA_C89_NUMBERS, LUA_INT_TYPE, and LUA_FLOAT_TYPE (using 0/1 for the first two), to avoid they being set through compiler options. (It is too easy to forget these options when compiling other software that interoperates with Lua.)
* Fixed some bugs around stack reallocationRoberto Ierusalimschy2021-02-054-1/+6
| | | | Long time without using HARDSTACKTESTS...
* Optimization/simplification of 'getbaseline'Roberto Ierusalimschy2021-02-023-24/+19
| | | | | By producing absolute line information at regular intervals, a simple division can compute the correct entry for a given instruction.
* Optimizations for line hookRoberto Ierusalimschy2021-01-284-33/+47
| | | | | 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-262-9/+30
| | | | | | | | | | - '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-254-26/+45
| | | | Comments, code details, identation.
* Correct order of return hooks vs. close metamethodsRoberto Ierusalimschy2021-01-212-16/+85
| | | | | | 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-196-35/+25
| | | | | | 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-183-71/+126
| | | | | | 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.
* Corrected documentation for 'table.sort'Roberto Ierusalimschy2021-01-141-8/+8
| | | | | The sort function must define a (strict) weak order for a correct sorting. A partial order is not enough.
* Allow yields inside '__close' metamethodsRoberto Ierusalimschy2021-01-137-18/+114
| | | | | | | 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-116-29/+66
| | | | | | 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-302-22/+85
| | | | | Errors in '__close' metamethods in coroutines are handled by the same logic that handles other errors, through 'recover'.
* Do not insert nil values into tablesRoberto Ierusalimschy2020-12-291-0/+2
|
* Better error messages for calling non-callable objectsRoberto Ierusalimschy2020-12-296-11/+52
| | | | | | | 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-292-27/+63
| | | | | | | | 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.
* Reset thread before panickingRoberto Ierusalimschy2020-12-283-14/+15
| | | | | 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-287-75/+80
| | | | | Instead of protecting each individual metamethod call, protect the entire call to 'luaF_close'.
* Report last error in closing methodsRoberto Ierusalimschy2020-12-225-101/+35
| | | | | 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-213-26/+31
| | | | | | | 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-185-15/+40
| | | | | | Besides errors in closing methods, 'coroutine.close' and 'lua_resetthread' also consider the original error that stopped the thread, if any.
* Cleaner handling of floats in pack/unpackRoberto Ierusalimschy2020-12-161-29/+41
|
* Cleaner definition for macro 'ttisclosure'Roberto Ierusalimschy2020-12-161-1/+2
|
* Review of asserts in 'ltests.c'Roberto Ierusalimschy2020-12-081-56/+70
| | | | The module 'ltests.c' must work correctly with asserts off, too.
* Details (do not affect regular code)Roberto Ierusalimschy2020-12-074-3/+31
| | | | | | | * 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.
* Changes in the API of 'luaH_set' and related functionsRoberto Ierusalimschy2020-12-046-40/+58
| | | | | Functions to set values in a table (luaH_set, luaH_newkey, etc.) receive the new value, instead of returning a slot where to put the value.
* Added test cases for error messages about goto/labelRoberto Ierusalimschy2020-12-031-0/+21
|
* n Windows, 'popen' accepts "[rw][bt]?" as valid modesRoberto Ierusalimschy2020-12-031-6/+12
| | | | Added the modifiers 'b' and 't' to valid modes for 'popen' in Windows.
* Avoid "bad programming habits" in the reference systemRoberto Ierusalimschy2020-12-031-6/+18
| | | | | | References were using both 0 indices and nils as values in arrays. Both do not fit in the concept of a sequence, which is the kind of use that guides all Lua optimizations.
* 'lua_assert' moved from 'lualib.h' to 'lauxlib.h'Roberto Ierusalimschy2020-12-032-6/+12
| | | | | | The macro is useful also in 'lauxlib.c', which does not include 'lualib.h'. Also, the definition was corrected to be "on" when LUAI_ASSERT is defined.
* DetailsRoberto Ierusalimschy2020-12-025-32/+32
| | | | Names in the parser and other details that do not change actual code.
* Changed access to global table in the registryRoberto Ierusalimschy2020-11-262-14/+20
| | | | | The global table is always in the array part of the registry; we can use this fact to make its access slightly more efficient.
* Avoid using 'signal' when 'sigaction' is availableRoberto Ierusalimschy2020-11-241-3/+23
| | | | | The semantics of 'signal' varies a lot among different implementations; 'sigaction' ensures a more consistent behavior.
* 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
|