ref: 23b63e6c9668efb47e01ebfca03b0aed5cbbe327
parent: 8f2d3879a9c66d2633ca7ec1c3b0495981feb04f
author: qwx <qwx@sciops.net>
date: Sun Oct 26 22:58:40 EDT 2025
fix OFMT/CONVFMT usage conditions and initial state
--- a/tran.c
+++ b/tran.c
@@ -214,6 +214,7 @@
}
p->csub = CUNK;
p->ctype = OCELL;
+ p->conv = 0;
tp->nelemt++;
if (tp->nelemt > FULLTAB * tp->size)
rehash(tp);
@@ -364,9 +365,9 @@
fldbld();
else if (isrec(vp) && donerec == 0)
recbld();
- conv = (uintptr)fmt >> 32 ^ (uintptr)fmt & 0xffffffff;
+ conv = (uintptr)*fmt >> 32 ^ (uintptr)*fmt & 0xffffffff;
if (isstr(vp) == 0
- || ((vp->tval & DONTFREE) == 0 && isnum(vp) && !isfld(vp))
+ || vp->conv != 0 && (vp->tval & DONTFREE) == 0 && isnum(vp) && !isfld(vp)
&& (fmt == OFMT ^ (vp->tval & FMT) != 0 || vp->conv != conv)) {if (freeable(vp))
xfree(vp->sval);
--
⑨