int numresult = 0;
long int numresult = 0; long long int convertme;
parse_arith (char **word, size_t *word_length, size_t *max_length,	     const char *words, size_t *offset, int flags, int bracket){  /* We are poised just after "$((" or "$[" */  int error;  int paren_depth = 1;  size_t expr_length = 0;  size_t expr_maxlen = 0;  char *expr = NULL;  for (; words[*offset]; ++(*offset))    {      switch (words[*offset])	{	case '$':	  error = parse_dollars (&expr, &expr_length, &expr_maxlen,				 words, offset, flags, NULL, NULL, NULL);	  /* The first NULL here is to tell parse_dollars not to	   * split the fields.	   */	  if (error)	    {	      free (expr);	      return error;	    }	  break;	case '`':	  (*offset)++;	  error = parse_backtick (&expr, &expr_length, &expr_maxlen,				  words, offset, flags, NULL, NULL, NULL);	  /* The first NULL here is to tell parse_backtick not to	   * split the fields.	   */	  if (error)	    {	      free (expr);	      return error;	    }	  break;	case '\\':	  error = parse_qtd_backslash (&expr, &expr_length, &expr_maxlen,				       words, offset);	  if (error)	    {	      free (expr);	      return error;	    }	  /* I think that a backslash within an	   * arithmetic expansion is bound to	   * cause an error sooner or later anyway though.	   */	  break;	case ')':	  if (--paren_depth == 0)	    {	      char result[21];	/* 21 = ceil(log10(2^64)) + 1 */	      int numresult = 0;	      if (bracket || words[1 + *offset] != ')')		return WRDE_SYNTAX;	      ++(*offset);	      /* Go - evaluate. */	      if (*expr &&		  eval_expr (expr, &numresult) != 0)		return WRDE_SYNTAX;	      result[20] = '\0';	      *word = w_addstr (*word, word_length, max_length,				_itoa_word (numresult, &result[20], 10, 0));	      free (expr);	      return *word ? 0 : WRDE_NOSPACE;	    }	  expr = w_addchar (expr, &expr_length, &expr_maxlen, words[*offset]);	  if (expr == NULL)	    return WRDE_NOSPACE;	  break;	case ']':	  if (bracket && paren_depth == 1)	    {	      char result[21];	/* 21 = ceil(log10(2^64)) + 1 */	      int numresult = 0;	      /* Go - evaluate. */	      if (*expr && eval_expr (expr, &numresult) != 0)		return WRDE_SYNTAX;	      result[20] = '\0';	      *word = w_addstr (*word, word_length, max_length,				_itoa_word (numresult, &result[20], 10, 0));	      free (expr);	      return *word ? 0 : WRDE_NOSPACE;	    }	  free (expr);	  return WRDE_SYNTAX;	case '\n':	case ';':	case '{':	case '}':	  free (expr);	  return WRDE_BADCHAR;	case '(':	  ++paren_depth;	default:	  expr = w_addchar (expr, &expr_length, &expr_maxlen, words[*offset]);	  if (expr == NULL)	    return WRDE_NOSPACE;	}    }  /* Premature end */  free (expr);  return WRDE_SYNTAX;}