From 0c70d3d34f592a5804e31f895fb13f1adc70ab10 Mon Sep 17 00:00:00 2001 From: Jude Melton-Houghton Date: Mon, 14 Nov 2022 08:43:34 -0500 Subject: [PATCH] Specialize to the global environment --- src/lj_record.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/lj_record.c b/src/lj_record.c index bfd41236..f4e582df 100644 --- a/src/lj_record.c +++ b/src/lj_record.c @@ -2456,6 +2456,12 @@ void lj_record_ins(jit_State *J) case BC_GGET: case BC_GSET: settabV(J->L, &ix.tabv, tabref(J->fn->l.env)); ix.tab = emitir(IRT(IR_FLOAD, IRT_TAB), getcurrf(J), IRFL_FUNC_ENV); + if (gcrefeq(J->fn->l.env, J->L->env)) { + /* Specialize to the global environment. */ + TRef ktab = lj_ir_ktab(J, tabref(J->fn->l.env)); + emitir(IRTG(IR_EQ, IRT_TAB), ix.tab, ktab); + ix.tab = ktab; + } ix.idxchain = LJ_MAX_IDXCHAIN; rc = lj_record_idx(J, &ix); break;