Explorar o código

Don't use STRREF for pointer diff in string.find().

Thanks to Sergey Ostanevich and Vyacheslav Egorov.
Mike Pall %!s(int64=5) %!d(string=hai) anos
pai
achega
9600e4318e
Modificáronse 1 ficheiros con 2 adicións e 1 borrados
  1. 2 1
      src/lj_ffrecord.c

+ 2 - 1
src/lj_ffrecord.c

@@ -949,7 +949,8 @@ static void LJ_FASTCALL recff_string_find(jit_State *J, RecordFFData *rd)
 		    str->len-(MSize)start, pat->len)) {
       TRef pos;
       emitir(IRTG(IR_NE, IRT_PGC), tr, trp0);
-      pos = emitir(IRTI(IR_SUB), tr, emitir(IRT(IR_STRREF, IRT_PGC), trstr, tr0));
+      /* Don't use STRREF of trstr. We need a pointer diff. */
+      pos = emitir(IRTI(IR_SUB), emitir(IRTI(IR_SUB), tr, trstr), lj_ir_kint(J, sizeof(GCstr)));
       J->base[0] = emitir(IRTI(IR_ADD), pos, lj_ir_kint(J, 1));
       J->base[1] = emitir(IRTI(IR_ADD), pos, trplen);
       rd->nres = 2;