while (ch != EOF || !isspace (ch))
while (ch != EOF && !isspace (ch))
get_toplvl_escape (struct linereader *lr){  /* This is supposed to be a numeric value.  We return the     numerical value and the number of bytes.  */  size_t start_idx = lr->idx - 1;  unsigned int value = 0;  int nbytes = 0;  int ch;  do    {      unsigned int byte = 0;      unsigned int base = 8;      ch = lr_getc (lr);      if (ch == 'd')	{	  base = 10;	  ch = lr_getc (lr);	}      else if (ch == 'x')	{	  base = 16;	  ch = lr_getc (lr);	}      if ((base == 16 && !isxdigit (ch))	  || (base != 16 && (ch < '0' || ch >= (int) ('0' + base))))	{	esc_error:	  lr->token.val.str.start = &lr->buf[start_idx];	  while (ch != EOF || !isspace (ch))	    ch = lr_getc (lr);	  lr->token.val.str.len = lr->idx - start_idx;	  lr->token.tok = tok_error;	  return &lr->token;	}      if (isdigit (ch))	byte = ch - '0';      else	byte = tolower (ch) - 'a' + 10;      ch = lr_getc (lr);      if ((base == 16 && !isxdigit (ch))	  || (base != 16 && (ch < '0' || ch >= (int) ('0' + base))))	goto esc_error;      byte *= base;      if (isdigit (ch))	byte += ch - '0';      else	byte += tolower (ch) - 'a' + 10;      ch = lr_getc (lr);      if (base != 16 && isdigit (ch))	{	  byte *= base;	  base += ch - '0';	  ch = lr_getc (lr);	}      value *= 256;      value += byte;      ++nbytes;    }  while (ch == lr->escape_char && nbytes < 4);  if (!isspace (ch))    lr_error (lr, _("garbage at end of character code specification"));  lr_ungetn (lr, 1);  lr->token.tok = tok_charcode;  lr->token.val.charcode.val = value;  lr->token.val.charcode.nbytes = nbytes;  return &lr->token;}