| @@ -343,34 +343,35 @@ char *setsval(Cell *vp, const char *s) / | | | @@ -343,34 +343,35 @@ char *setsval(Cell *vp, const char *s) / |
343 | } else if (isrec(vp)) { | | 343 | } else if (isrec(vp)) { |
344 | donefld = 0; /* mark $1... invalid */ | | 344 | donefld = 0; /* mark $1... invalid */ |
345 | donerec = 1; | | 345 | donerec = 1; |
346 | } | | 346 | } |
347 | t = tostring(s); /* in case it's self-assign */ | | 347 | t = tostring(s); /* in case it's self-assign */ |
348 | if (freeable(vp)) | | 348 | if (freeable(vp)) |
349 | xfree(vp->sval); | | 349 | xfree(vp->sval); |
350 | vp->tval &= ~NUM; | | 350 | vp->tval &= ~NUM; |
351 | vp->tval |= STR; | | 351 | vp->tval |= STR; |
352 | vp->tval &= ~DONTFREE; | | 352 | vp->tval &= ~DONTFREE; |
353 | dprintf( ("setsval %p: %s = \"%s (%p) \", t=%o r,f=%d,%d\n", | | 353 | dprintf( ("setsval %p: %s = \"%s (%p) \", t=%o r,f=%d,%d\n", |
354 | vp, NN(vp->nval), t,t, vp->tval, donerec, donefld) ); | | 354 | vp, NN(vp->nval), t,t, vp->tval, donerec, donefld) ); |
355 | | | 355 | |
| | | 356 | vp->sval = t; |
356 | if (&vp->fval == NF) { | | 357 | if (&vp->fval == NF) { |
357 | donerec = 0; /* mark $0 invalid */ | | 358 | donerec = 0; /* mark $0 invalid */ |
358 | f = getfval(vp); | | 359 | f = getfval(vp); |
359 | setlastfld(f); | | 360 | setlastfld(f); |
360 | dprintf( ("setting NF to %g\n", f) ); | | 361 | dprintf( ("setting NF to %g\n", f) ); |
361 | } | | 362 | } |
362 | | | 363 | |
363 | return(vp->sval = t); | | 364 | return(vp->sval); |
364 | } | | 365 | } |
365 | | | 366 | |
366 | Awkfloat getfval(Cell *vp) /* get float val of a Cell */ | | 367 | Awkfloat getfval(Cell *vp) /* get float val of a Cell */ |
367 | { | | 368 | { |
368 | if ((vp->tval & (NUM | STR)) == 0) | | 369 | if ((vp->tval & (NUM | STR)) == 0) |
369 | funnyvar(vp, "read value of"); | | 370 | funnyvar(vp, "read value of"); |
370 | if (isfld(vp) && donefld == 0) | | 371 | if (isfld(vp) && donefld == 0) |
371 | fldbld(); | | 372 | fldbld(); |
372 | else if (isrec(vp) && donerec == 0) | | 373 | else if (isrec(vp) && donerec == 0) |
373 | recbld(); | | 374 | recbld(); |
374 | if (!isnum(vp)) { /* not a number */ | | 375 | if (!isnum(vp)) { /* not a number */ |
375 | vp->fval = atof(vp->sval); /* best guess */ | | 376 | vp->fval = atof(vp->sval); /* best guess */ |
376 | if (is_number(vp->sval) && !(vp->tval&CON)) | | 377 | if (is_number(vp->sval) && !(vp->tval&CON)) |