- if (in[RSAB].f&TVRF_LIVE) {
- for (rd = tv->test->regs; rd->name; rd++)
- if (STRCMP(in[RSAB].v.str.p, ==, rd->name)) {
- rv = &out[rd->i].v;
- if (rd->ty == &tvty_int ||
- (rd->ty == &tvty_enum &&
- ((const struct tvec_enuminfo *)rd->arg.p)->mv == TVMISC_INT))
- rv->i ^= 1;
- else if (rd->ty == &tvty_uint || rd->ty == &tvty_flags ||
- (rd->ty == &tvty_enum &&
- ((const struct tvec_enuminfo *)rd->arg.p)->mv ==
- TVMISC_INT))
- rv->u ^= 1;
- else if (rd->ty == &tvty_enum &&
- ((const struct tvec_enuminfo *)rd->arg.p)->mv == TVMISC_PTR)
- rv->p = rv->p
- ? 0
- : (/*unconst*/ void *)
- ((const struct tvec_penuminfo *)rd->arg.p)->av[0].p;
- else if (rd->ty == &tvty_string)
- { if (rv->str.sz) rv->str.p[0] ^= 1; }
- else if (rd->ty == &tvty_bytes)
- { if (rv->bytes.sz) rv->bytes.p[0] ^= 1; }
- }
+ if ((in[RSAB].f&TVRF_LIVE) && in[RSAB].v.i >= 0) {
+ rd = &tv->test->regs[in[RSAB].v.i]; rv = &out[in[RSAB].v.i].v;
+ if (rd->ty == &tvty_int || rd->ty == &tvty_ienum)
+ rv->i ^= 1;
+ else if (rd->ty == &tvty_uint ||
+ rd->ty == &tvty_flags || rd->ty == &tvty_uenum)
+ rv->u ^= 1;
+ else if (rd->ty == &tvty_float || rd->ty == &tvty_fenum) {
+ if (rv->f == rv->f) rv->f = -rv->f;
+ else rv->f = 1.0;
+ } else if (rd->ty == &tvty_penum)
+ rv->p = rv->p
+ ? 0
+ : (/*unconst*/ void *)
+ ((const struct tvec_penuminfo *)rd->arg.p)->av[0].p;
+ else if (rd->ty == &tvty_string)
+ { if (rv->str.sz) rv->str.p[0] ^= 1; }
+ else if (rd->ty == &tvty_bytes)
+ { if (rv->bytes.sz) rv->bytes.p[0] ^= 1; }