aboutsummaryrefslogtreecommitdiff
path: root/lparser.c (follow)
Commit message (Collapse)AuthorAgeFilesLines
* Fixed conversion warnings from clangRoberto Ierusalimschy2025-01-141-1/+1
| | | | | Plus some other details. (Option '-Wuninitialized' was removed from the makefile because it is already enabled by -Wall.)
* Error "break outside loop" made a syntax errorRoberto Ierusalimschy2025-01-131-11/+14
| | | | Syntax errors are easier to handle than semantic errors.
* Details in lparser.cRoberto Ierusalimschy2025-01-101-10/+13
| | | | | | Added comments so that all braces pair correctly. (The parser has several instances of unmatched braces as characters ('{' or '}'), which hinders matching regular braces in the code.)
* Another way to compile goto'sRoberto Ierusalimschy2025-01-101-107/+80
| | | | | | | | | | | | The compilation of a goto or a label just create an entry and generate boilerplate code for the gotos. As we don't know yet whether it needs a CLOSE, we code a jump followed by a CLOSE, which is then dead code. When a block ends (and then we know for sure whether there are variables that need to be closed), we check the goto's against the labels of that block. When closing a goto against a label, if it needs a CLOSE, the compiler swaps the order of the jump and the CLOSE, making the CLOSE active.
* Scanner and parser use different tables for constantsRoberto Ierusalimschy2024-12-171-1/+6
| | | | | | | | | | Moreover, each function being parsed has its own table. The code is cleaner when each table is used for one specific purpose: The scanner uses its table to anchor and unify strings, mapping strings to themselves; the parser uses it to reuse constants in the code, mapping constants to their indices in the constant table. A different table for each task avoids false collisions.
* USHRT_MAX changed to SHRT_MAXRoberto Ierusalimschy2024-09-191-1/+1
| | | | USHRT_MAX does not fit in an 'int' in 16-bit systems.
* 'lcode.c' can use 'checklimit', tooRoberto Ierusalimschy2024-08-201-5/+5
|
* Added gcc option '-Wconversion'Roberto Ierusalimschy2024-07-271-16/+18
| | | | | No warnings for standard numerical types. Still pending alternative numerical types.
* New instruction format for SETLIST/NEWTABLERoberto Ierusalimschy2024-06-281-1/+1
| | | | | | New instruction format 'ivABC' (a variant of iABC where parameter vC has 10 bits) allows constructors of up to 1024 elements to be coded without EXTRAARG.
* Flexible limit for use of registers by constructorsRoberto Ierusalimschy2024-06-271-2/+19
| | | | | | | | Instead of a fixed limit of 50 registers (which, in a bad worst case, can limit the nesting of constructors to 5 levels), the compiler computes an individual limit for each constructor based on how many registers are available when it runs. This limit then controls the frequency of SETLIST instructions.
* Cleaning of llimits.hRoberto Ierusalimschy2024-06-201-1/+1
| | | | | | 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.
* New macro 'getlstr'Roberto Ierusalimschy2023-08-301-2/+4
| | | | Accesses content and length of a 'TString'.
* Field 'Proto.is_vararg' uses only one bitRoberto Ierusalimschy2023-08-301-2/+2
| | | | So that the other bits can be used for other purposes.
* Merge branch 'master' into nextversionRoberto Ierusalimschy2023-08-231-6/+6
|\
| * Bug: Wrong line number for function callsRoberto Ierusalimschy2023-08-231-6/+6
| |
* | Merge branch 'master' into nextversionRoberto Ierusalimschy2023-06-221-4/+4
|\|
| * Detailsv5.4.5Roberto Ierusalimschy2023-04-181-4/+4
| | | | | | | | Typos in comments and details in the manual.
* | Changes in opcodes for generic 'for'Roberto Ierusalimschy2022-12-221-12/+11
| | | | | | | | | | Again, as the control variable is read only, the code doesn't need to keep an internal copy of it.
* | Simplification in opcodes for numerical 'for'Roberto Ierusalimschy2022-12-211-2/+2
| | | | | | | | | | As the control variable is read only, the code doesn't need to keep an internal copy of it.
* | Control variables in for loops are read onlyRoberto Ierusalimschy2022-12-211-11/+19
|/
* Stack indices changed to union'sRoberto Ierusalimschy2022-10-291-3/+3
| | | | | That will allow to change pointers to offsets while reallocating the stack.
* Bug: 'break' may not properly close variable in a 'for' loopRoberto Ierusalimschy2022-08-241-8/+8
| | | | | | | Function 'leaveblock' was generating "break" label before removing variables from the closing block. If 'createlabel' created a 'close' instruction (which it did when matching a goto/break that exited the scope of an upvalue), that instruction would use the wrong level.
* Bug: Lua can generate wrong code when _ENV is <const>Roberto Ierusalimschy2022-02-151-0/+1
|
* Bug: 'local function' can assign to '<const>' variablesRoberto Ierusalimschy2021-06-201-0/+1
|
* Bug: tbc variables in "for" loops don't avoid tail callsRoberto Ierusalimschy2021-04-071-6/+15
|
* Broadening the use of branch hintsRoberto Ierusalimschy2021-02-241-4/+4
| | | | | | 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).
* DetailsRoberto Ierusalimschy2020-12-021-23/+23
| | | | Names in the parser and other details that do not change actual code.
* Removed optimization for «if ... then goto»Roberto Ierusalimschy2020-11-111-44/+6
| | | | | That optimization was too complex and caused some weird traces when debugging. The more common case «if ... then break» was kept.
* CommentsRoberto Ierusalimschy2020-10-221-4/+4
|
* Revision of stackless implementationRoberto Ierusalimschy2020-10-121-5/+1
| | | | | | - more organized handling of 'nCcalls' - comments - deprecation of 'setcstacklimit'
* Back to a stackless implementationRoberto Ierusalimschy2020-10-121-5/+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 missing GC barriers in compiler and undumpRoberto Ierusalimschy2020-06-161-0/+3
| | | | | While building a new prototype, the GC needs barriers for every object (strings and nested prototypes) that is attached to the new prototype.
* Fixed two bugs in to-be-closed variables x constantsRoberto Ierusalimschy2020-06-011-28/+36
| | | | | | | | | | 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.
* 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.)
* Fixed "conceptual" bug in 'luaK_setreturns'Roberto Ierusalimschy2020-03-021-1/+2
| | | | | | | | This function was computing invalid instruction addresses when the expression was not a multi-return instruction. (Virtually all machines don't raise errors when computing an invalid address, as long as the address is not accessed, but this computation is undefined behavior in ISO C.)
* Fixed a warning and other minor issuesRoberto Ierusalimschy2019-10-041-2/+2
| | | | Fixed some minor issues from the feedback for 5.4-beta rc1.
* Change in the syntax of attributesRoberto Ierusalimschy2019-07-301-12/+13
| | | | | | | 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.
* Bug: 'Vardesc' array can be reallocated in 'localstat'Roberto Ierusalimschy2019-07-261-12/+15
| | | | | A reference to a 'Vardesc*' (as done by 'localstat') can be invalidated by the creation of any new variable.
* Small corrections when setting 'L->top'Roberto Ierusalimschy2019-07-251-1/+2
| | | | | | | | | - 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.
* New kind of expression VKSTRRoberto Ierusalimschy2019-07-171-6/+8
| | | | | | | 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).
* Unification of size representation in OP_NEWTABLE and OP_SETLISTRoberto Ierusalimschy2019-07-151-22/+7
| | | | | | Opcodes OP_NEWTABLE and OP_SETLIST use the same representation to store the size of the array part of a table. This new representation can go up to 2^33 (8 + 25 bits).
* OP_NEWTABLE keeps exact size of arraysRoberto Ierusalimschy2019-07-121-11/+26
| | | | | | OP_NEWTABLE is followed by an OP_EXTRAARG, so that it can keep the exact size of the array part of the table to be created. (Functions 'luaO_int2fb'/'luaO_fb2int' were removed.)
* First implementation of constant propagationRoberto Ierusalimschy2019-07-121-49/+64
| | | | | Local constant variables initialized with compile-time constants are optimized away from the code.
* DetailsRoberto Ierusalimschy2019-07-101-7/+6
| | | | | | | | In the generic for loop, it is simpler for OP_TFORLOOP to use the same 'ra' as OP_TFORCALL. Moreover, the internal names of the loop temporaries "(for ...)" don't need to leak internal details (even because the numerical for loop doesn't have a fixed role for each of its temporaries).
* Towards constant propagationRoberto Ierusalimschy2019-07-101-37/+76
| | | | | | | This commit detaches the number of active variables from the number of variables in the stack, during compilation. Soon, compile-time constants will be propagated and therefore will not exist during run time (in the stack).
* New implementation for constantsRoberto Ierusalimschy2019-07-091-72/+86
| | | | | | | | | VLOCAL expressions keep a reference to their corresponding 'Vardesc', and 'Upvaldesc' (for upvalues) has a field 'ro' (read-only). So, it is easier to check whether a variable is read-only. The decoupling in VLOCAL between 'vidx' ('Vardesc' index) and 'sidx' (stack index) should also help the forthcoming implementation of compile-time constant propagation.
* Local attributes can be used in list of local variablesRoberto Ierusalimschy2019-07-031-49/+41
| | | | | | | | | | | | The syntax for local attributes ('const'/'toclose') was unified with the regular syntax for local variables, so that we can have variables with attributes in local definitions with multiple names; for instance: local <toclose> f, <const> err = io.open(fname) This new syntax does not implement constant propagation, yet. This commit also has some small improvements to the manual.
* First take on constant propagationRoberto Ierusalimschy2019-07-011-12/+22
|
* Structure 'Vardesc' does not need a 'name' fieldRoberto Ierusalimschy2019-06-211-12/+13
| | | | | | Removed the field 'name' from the structure 'Vardesc', as the name of the local variable is already available in the prototype of the function, through the index 'idx'.
* DetailsRoberto Ierusalimschy2019-05-281-1/+1
| | | | | | | - new error message for "attempt to assign to const variable" - note in the manual about compatibility options - comments - small changes in 'read_line' and 'pushstr'