Lines Matching refs:rn
438 static int nextc (RN *rn) { in nextc() argument
439 if (l_unlikely(rn->n >= L_MAXLENNUM)) { /* buffer overflow? */ in nextc()
440 rn->buff[0] = '\0'; /* invalidate result */ in nextc()
444 rn->buff[rn->n++] = rn->c; /* save current char */ in nextc()
445 rn->c = l_getc(rn->f); /* read next one */ in nextc()
454 static int test2 (RN *rn, const char *set) { in test2() argument
455 if (rn->c == set[0] || rn->c == set[1]) in test2()
456 return nextc(rn); in test2()
464 static int readdigits (RN *rn, int hex) { in readdigits() argument
466 while ((hex ? isxdigit(rn->c) : isdigit(rn->c)) && nextc(rn)) in readdigits()
478 RN rn; in read_number() local
482 rn.f = f; rn.n = 0; in read_number()
485 l_lockfile(rn.f); in read_number()
486 do { rn.c = l_getc(rn.f); } while (isspace(rn.c)); /* skip spaces */ in read_number()
487 test2(&rn, "-+"); /* optional sign */ in read_number()
488 if (test2(&rn, "00")) { in read_number()
489 if (test2(&rn, "xX")) hex = 1; /* numeral is hexadecimal */ in read_number()
492 count += readdigits(&rn, hex); /* integral part */ in read_number()
493 if (test2(&rn, decp)) /* decimal point? */ in read_number()
494 count += readdigits(&rn, hex); /* fractional part */ in read_number()
495 if (count > 0 && test2(&rn, (hex ? "pP" : "eE"))) { /* exponent mark? */ in read_number()
496 test2(&rn, "-+"); /* exponent sign */ in read_number()
497 readdigits(&rn, 0); /* exponent digits */ in read_number()
499 ungetc(rn.c, rn.f); /* unread look-ahead char */ in read_number()
500 l_unlockfile(rn.f); in read_number()
501 rn.buff[rn.n] = '\0'; /* finish string */ in read_number()
502 if (l_likely(lua_stringtonumber(L, rn.buff))) in read_number()