Lines Matching refs:rn
432 static int nextc (RN *rn) {
433 if (rn->n >= L_MAXLENNUM) { /* buffer overflow? */
434 rn->buff[0] = '\0'; /* invalidate result */
438 rn->buff[rn->n++] = rn->c; /* save current char */
439 rn->c = l_getc(rn->f); /* read next one */
448 static int test2 (RN *rn, const char *set) {
449 if (rn->c == set[0] || rn->c == set[1])
450 return nextc(rn);
458 static int readdigits (RN *rn, int hex) {
460 while ((hex ? isxdigit(rn->c) : isdigit(rn->c)) && nextc(rn))
472 RN rn;
476 rn.f = f; rn.n = 0;
479 l_lockfile(rn.f);
480 do { rn.c = l_getc(rn.f); } while (isspace(rn.c)); /* skip spaces */
481 test2(&rn, "-+"); /* optional sign */
482 if (test2(&rn, "00")) {
483 if (test2(&rn, "xX")) hex = 1; /* numeral is hexadecimal */
486 count += readdigits(&rn, hex); /* integral part */
487 if (test2(&rn, decp)) /* decimal point? */
488 count += readdigits(&rn, hex); /* fractional part */
489 if (count > 0 && test2(&rn, (hex ? "pP" : "eE"))) { /* exponent mark? */
490 test2(&rn, "-+"); /* exponent sign */
491 readdigits(&rn, 0); /* exponent digits */
493 ungetc(rn.c, rn.f); /* unread look-ahead char */
494 l_unlockfile(rn.f);
495 rn.buff[rn.n] = '\0'; /* finish string */
496 if (lua_stringtonumber(L, rn.buff)) /* is this a valid number? */