[Date Prev][Date Next][Thread Prev][Thread Next]
- Subject: Re: The += operator, again
- From: Felipe Tavares <felipe.oltavares@...>
- Date: Sat, 24 Nov 2018 01:29:11 -0300
Hey Domingo, I took a look and the solution in there is indeed a bit better than mine!
Instead of changing the source code to not free the registers, we reserve a new register before parsing (lparser.c, assign_compound()):
|/* store compound results in a new register (needed for nested tables) */|
|/* parse right-hand _expression_ */|
|nexps = explist(ls, &rh);|
|check_condition(ls, nexps == 1, "syntax error in right hand _expression_ in compound assignment");|
|luaK_posfix(fs, op, &infix, &rh, line);|
luaK_storevar(fs, &(lh->v), &infix);
`++` and `--` are pretty easy! I think prefix is easier to start because you can stuff the mod in the code that does unary operations for stuff like `-1`. For suffix, it think it would go after the code for indexing. The implementation itself is easy, you just have to construct a `expdesc` for the value of 1, sum it with the variable and store it back, it should be mostly reusing the code for compound assignment.
Thanks a lot for this repos, they're gold!
On Nov 23 2018, at 10:41 am, Domingo Alvarez Duarte <email@example.com> wrote:
Hello Felipe !
Look at this https://github.com/mingodad/ljs where I've got ideas and
code from https://github.com/ex/Killa and
https://github.com/sajonoso/jual and fixed the code for "+= -= *= /= %="
to work with indexed variables.
See the table-decl.ljs .
There is a program to translate ".lua" to ".ljs" on folder lua2ljs it
uses lemon and re2c to parse lua files and convert to ljs (lua with
also work with the original lua syntax.
I also have it done for luajit but it's not yet published.
If anyone want to help I'm now looking for how to implement pre/post
increment/decrement "++"/"--" operators and a class system.