summaryrefslogtreecommitdiff
path: root/lua.c (unfollow)
Commit message (Collapse)AuthorFilesLines
2019-10-08No coercion string->number in arithmetic with LUA_NOCVTS2NRoberto Ierusalimschy1-0/+13
2019-10-08Makefile compiles the Lua compiler with '-Os'Roberto Ierusalimschy1-0/+10
The performance of the Lua compiler is not critical for Lua performance, but it is a big component in the source. So, it makes sense to trade speed for size in this component.
2019-10-04Fixed a warning and other minor issuesRoberto Ierusalimschy6-8/+9
Fixed some minor issues from the feedback for 5.4-beta rc1.
2019-10-02Script 'packtests' gets Lua version as a parameterRoberto Ierusalimschy1-1/+3
2019-10-01Janitorial workRoberto Ierusalimschy4-58/+62
- Several details in 'lcode.c' - A few more tests for code generation - Bug in assert in 'lcode.c' ("=" x "==") - Comments in 'lopcodes.h' and 'ltable.c'
2019-09-24Details in the makefile (warning options)Roberto Ierusalimschy1-8/+8
2019-09-24Subtraction of small constant integers optimized with OP_ADDIRoberto Ierusalimschy4-31/+46
2019-09-24'setCstacklimit' renamed to 'setcstacklimit'Roberto Ierusalimschy5-23/+23
Function names in the API use only lowercase letters.
2019-09-19Janitorial work in 'lcode.c'Roberto Ierusalimschy2-38/+33
2019-09-11Simplification in the call to 'constfolding'Roberto Ierusalimschy2-17/+21
2019-09-10Removed arithmetic opcodes with immediate operandRoberto Ierusalimschy7-65/+17
The difference in performance between immediate operands and K operands does not seem to justify all those extra opcodes. We only keep OP_ADDI, due to its ubiquity and because the difference is a little more relevant. (Later, OP_SUBI will be implemented by OP_ADDI, negating the constant.)
2019-09-06Added macro 'testMMMode'Roberto Ierusalimschy3-94/+95
Macro 'testMMMode' checks whether opcode is an MM opcode.
2019-08-29Undo change in the handling of 'L->top' (commit b80077b8f3)Roberto Ierusalimschy4-16/+9
With MMBIN instructions, there are fewer opcodes that need to update 'L->top', so that change does not seem to pay for the increased complexity.
2019-08-28Use of 'MMBIN' opcodes extended to shift operatorsRoberto Ierusalimschy5-87/+60
Plus, this commit removes useless 'tm' parameters in 'op_*' macros.
2019-08-27First version of OP_MMBIN opcodesRoberto Ierusalimschy11-104/+132
In arithmetic/bitwise operators, the call to metamethods is made in a separate opcode following the main one. (The main opcode skips this next one when the operation succeeds.) This change reduces slightly the size of the binary and the complexity of the arithmetic/bitwise opcodes. It also simplfies the treatment of errors and yeld/resume in these operations, as there are much fewer cases to consider. (Only OP_MMBIN/OP_MMBINI/OP_MMBINK, instead of all variants of all arithmetic/bitwise operators.)
2019-08-27Fixed missing case in 'luaV_finishOp'Roberto Ierusalimschy2-1/+7
A metamethod call like '1 << a' was not being properly resumed if it got yielded.
2019-08-21Fixed bug when yiedling inside OP_ADDK opcodeRoberto Ierusalimschy2-0/+14
The family of opcodes OP_ADDK (arithmetic operators with K constant) were not being handled in 'luaV_finishOp', which completes their task after an yield.
2019-08-20Default for warnings changed to "off"Roberto Ierusalimschy10-17/+23
Warnings are mostly a tool to help developers (e.g., by showing hidden error messages); regular users usually don't need to see them.
2019-08-19Detail (extra test for warnings when closing state)Roberto Ierusalimschy1-0/+11
2019-08-18Improvement in warn-mode '@store' (for testing)Roberto Ierusalimschy5-31/+55
When using warn-mode '@store', from the test library, the tests ensure not only that the expected warnings were issued, but also that there was no extra warnings.
2019-08-16Manual corrected with the new syntax for attributesRoberto Ierusalimschy1-5/+5
Commit 0d529138042, with the change in the syntax of attributes, did not update the manual accordingly.
2019-08-16Added macro 'luaL_pushfail'Roberto Ierusalimschy20-154/+176
The macro 'luaL_pushfail' documents all places in the standard libraries that return nil to signal some kind of failure. It is defined as 'lua_pushnil'. The manual also got a notation (@fail) to document those returns. The tests were changed to be agnostic regarding whether 'fail' is 'nil' or 'false'.
2019-08-16Supressed errors in '__close' generate warningsRoberto Ierusalimschy10-43/+164
2019-08-15Added control messages to warningsRoberto Ierusalimschy9-49/+161
Added the concept of control messages to the warning system, plus the implementation of the controls "@on"/"@off" to turn warnings on/off. Moreover, the warning system in the test library adds some other controls to ease the test of warnings.
2019-08-12Small optimization in 'convergeephemerons'Roberto Ierusalimschy1-9/+20
When converging marks on ephemeron tables, change the direction the tables are traversed at each iteration, to try to avoid bad-case scenarios with linked lists of entries in a table.
2019-08-12Detail in the manual (method 'file:setvbuf')Roberto Ierusalimschy1-16/+8
ANSI C is vague about 'setvbuf'; most details are implementation defined. So, the manual cannot give any guaranties, either.
2019-08-01DetailsRoberto Ierusalimschy2-8/+13
- removed rule about RCS from makefile - comments and nitpicking in 'llex.c'
2019-07-31Correction in the documentation of 'io.lines'Roberto Ierusalimschy2-7/+5
The loop does not end on end of file, but when the iterator function fails to read a value. (In particular, the format "a" never fails, so a loop with 'io.lines(fname, "a")' never ends.)
2019-07-31Tracebacks recognize metamethods '__close'Roberto Ierusalimschy2-4/+20
2019-07-31To-be-closed variables must be closed on initializationRoberto Ierusalimschy6-41/+70
When initializing a to-be-closed variable, check whether it has a '__close' metamethod (or is a false value) and raise an error if if it hasn't. This produces more accurate error messages. (The check before closing still need to be done: in the C API, the value is not constant; and the object may lose its '__close' metamethod during the block.)
2019-07-30Fixed test in 'main.lua'Roberto Ierusalimschy1-7/+10
The test "to-be-closed variables in main chunk" was broken, as it used the removed feature of functions as to-be-closed values. The error was not detected because its expected result had no lines to be checked (due to missing new lines).
2019-07-30Change in the syntax of attributesRoberto Ierusalimschy11-102/+103
Attributes changed to posfixed ('x <const>', instead of '<const> x'), and "toclose" renamed to "close". Posfixed attributes seem to make it clearer that it applies to only one variable when there are multiple variables.
2019-07-26Change in the handling of 'L->top' when calling metamethodsRoberto Ierusalimschy10-29/+75
Instead of updating 'L->top' in every place that may call a metamethod, the metamethod functions themselves (luaT_trybinTM and luaT_callorderTM) correct the top. (When calling metamethods from the C API, however, the callers must preserve 'L->top'.)
2019-07-26Bug: 'Vardesc' array can be reallocated in 'localstat'Roberto Ierusalimschy1-12/+15
A reference to a 'Vardesc*' (as done by 'localstat') can be invalidated by the creation of any new variable.
2019-07-25Small corrections when setting 'L->top'Roberto Ierusalimschy4-6/+17
- OP_NEWTABLE can use 'ra + 1' to set top (instead of ci->top); - OP_CLOSE doesn't need to set top ('Protect' already does that); - OP_TFORCALL must use 'ProtectNT', to preserve the top already set. (That was a small bug, because iterators could be called with extra parameters besides the state and the control variable.) - Comments and an extra test for the bug in previous item.
2019-07-24Some improvements in date/time functionsRoberto Ierusalimschy2-41/+100
- Range in date table extended to full 32 bits. - Easier support for times represented as floats. - Added more tests.
2019-07-23Fixed bug in 'string.format' with option '%f'Roberto Ierusalimschy2-8/+12
As an example, 'print(string.format("%.99f", 1e70))' may have a lot of garbage after the number. The old test to ensure that 'string.format("%.99f", n)' was not too large, 'fabs(n) < 1e100', assumes that the number will fit in the 99 bytes; but the 99 is not the space for the number, it is the added extra zeros. The option worked for smaller numbers because of the extra space added to MAX_ITEM.
2019-07-22Do not collect open upvaluesRoberto Ierusalimschy4-14/+11
Open upvalues are kept alive together with their corresponding stack. This change makes a simpler and safer fix to the issue in commit 440a5ee78c8, about upvalues in the list of open upvalues being collected while others are being created. (That previous fix may not be correct.)
2019-07-19'math.randomseed' always returns the two seed componentsRoberto Ierusalimschy3-11/+15
2019-07-19Avoid using addresses of static variables as unique keysRoberto Ierusalimschy3-16/+17
The addresses of static variables may be different for different instances of Lua, making these instances incompatible if they use these addresses as unique keys in the registry (or other tables).
2019-07-19Fixed bug for emergency collection in upvalue creationRoberto Ierusalimschy3-8/+10
When creating an upvalue, an emergency collection can collect the previous upvalue where the new one would be linked. The following code can trigger the bug, using valgrind on Lua compiled with the -DHARDMEMTESTS option: local x; local y (function () return y end)(); (function () return x end)()
2019-07-19Tag LUA_TUPVALTBC replaced by a flagRoberto Ierusalimschy5-18/+13
It is simpler to signal a to-be-closed upvalue with a boolean flag, instead of using a different tag.
2019-07-19Some details in 'lmem.c' and 'lgc.c'Roberto Ierusalimschy2-27/+42
- Several new comments in 'lmem.c'. - Both 'luaM_growaux_' and 'luaM_shrinkvector_' use 'luaM_saferealloc_' to check for errors. Moreover, the use of 'luaM_saferealloc_' makes 'luaM_shrinkvector_' try again if shrink fails (which can happen now). - In 'checkSizes', save old debt only when needed.
2019-07-18DetailsRoberto Ierusalimschy3-25/+17
- Macro 'checkliveness' (for debug) always uses 'L', to avoid warnings. - Some old 'while' changed to 'for' in 'testes/gc.lua'. - In 'testes/libs/makefile', do not make files depend on 'ltests.h', which may not even exist.
2019-07-18Reviving HARDMEMTESTSRoberto Ierusalimschy4-15/+35
This commit brings a new implementation for HARDMEMTESTS, which forces an emergency GC whenever possible. It also fixes some issues detected with this option: - A small bug in lvm.c: a closure could be collected by an emergency GC while being initialized. - Some tests: a memory address can be immediatly reused after a GC; for instance, two consecutive '{}' expressions can return exactly the same address, if the first one is not anchored.
2019-07-18Small bug with stack reallocationRoberto Ierusalimschy2-7/+9
OP_RETURN must update trap before updating stack. (Bug detected with -DHARDSTACKTESTS). Also, in 'luaF_close', do not create a variable with 'uplevel(uv)', as the stack may change and invalidate this value. (This is not a bug, but could become one if 'upl' was used again.)
2019-07-17'math.randomseed()' returns the seeds it usedRoberto Ierusalimschy4-7/+27
A call to 'math.randomseed()' returns the two components of the seed it set, so that they can be used to set that same seed again.
2019-07-17Calls 'luaF_close' in 'lua_settop' only when neededRoberto Ierusalimschy1-5/+7
In 'lua_settop', avoid calling 'luaF_close' when increasing the stack or when the function has no to-be-closed variables.
2019-07-17Fixed small issue with constant propagationRoberto Ierusalimschy2-7/+21
Constants directly assigned to other constants were not propagating: For instance, in local <const> k1 = 10 local <const> k2 = k1 'k2' were not treated as a compile-time constant.
2019-07-17New kind of expression VKSTRRoberto Ierusalimschy5-18/+54
String literal expressions have their own kind VKSTR, instead of the generic VK. This allows strings to "cross" functions without entering their constant tables (e.g., if they are used only by some nested function).