Fix parsing of safe-navigation operator.

Reported by XmiliaH. #1528
This commit is contained in:
Mike Pall 2026-10-13 13:15:10 +02:00
parent bc9261a34a
commit 634daf2453

View File

@ -2161,7 +2161,7 @@ static BCPos expr_primary_nav(LexState *ls, ExpDesc *v, int eflags)
expr_str(ls, &key); expr_str(ls, &key);
bcemit_method(fs, v, &key); bcemit_method(fs, v, &key);
nav = 0; nav = 0;
if (lex_opt(ls, TK_nav)) { if (!(eflags & EXPR_F_NONAV) && lex_opt(ls, TK_nav)) {
nav = 1; nav = 1;
bcemit_INS(fs, BCINS_AD(BC_ISEQP, v->u.s.info, VKNIL)); bcemit_INS(fs, BCINS_AD(BC_ISEQP, v->u.s.info, VKNIL));
jmp_append(fs, &xpc, bcemit_jmp(fs)); jmp_append(fs, &xpc, bcemit_jmp(fs));
@ -2196,6 +2196,7 @@ static void expr_primary(LexState *ls, ExpDesc *v, int eflags)
if (xpc != NO_JMP) { if (xpc != NO_JMP) {
FuncState *fs = ls->fs; FuncState *fs = ls->fs;
BCPos around; BCPos around;
if (v->k == VINDEXED) expr_tonextreg(fs, v);
around = bcemit_jmp(fs); around = bcemit_jmp(fs);
jmp_tohere(fs, xpc); jmp_tohere(fs, xpc);
if (v->k == VCALL) { /* Change to VCALLNAV. Still points to CALL/CALLM. */ if (v->k == VCALL) { /* Change to VCALLNAV. Still points to CALL/CALLM. */