else if (type == END_OF_RE || type == OP_PERIOD || type == OP_UTF8_PERIOD)
else if (type == OP_PERIOD #ifdef RE_ENABLE_I18N || type == OP_UTF8_PERIOD #endif  || type == END_OF_RE)
re_compile_fastmap_iter (bufp, init_state, fastmap)     regex_t *bufp;     const re_dfastate_t *init_state;     char *fastmap;{  re_dfa_t *dfa = (re_dfa_t *) bufp->buffer;  int node_cnt;  int icase = (dfa->mb_cur_max == 1 && (bufp->syntax & RE_ICASE));  for (node_cnt = 0; node_cnt < init_state->nodes.nelem; ++node_cnt)    {      int node = init_state->nodes.elems[node_cnt];      re_token_type_t type = dfa->nodes[node].type;      if (type == CHARACTER)	{	  re_set_fastmap (fastmap, icase, dfa->nodes[node].opr.c);#ifdef RE_ENABLE_I18N	  if ((bufp->syntax & RE_ICASE) && dfa->mb_cur_max > 1)	    {	      unsigned char *buf = alloca (dfa->mb_cur_max), *p;	      wchar_t wc;	      mbstate_t state;	      p = buf;	      *p++ = dfa->nodes[node].opr.c;	      while (++node < dfa->nodes_len		     &&	dfa->nodes[node].type == CHARACTER		     && dfa->nodes[node].mb_partial)		*p++ = dfa->nodes[node].opr.c;	      memset (&state, 0, sizeof (state));	      if (mbrtowc (&wc, (const char *) buf, p - buf,			   &state) == p - buf		  && __wcrtomb ((char *) buf, towlower (wc), &state) > 0)		re_set_fastmap (fastmap, 0, buf[0]);	    }#endif	}      else if (type == SIMPLE_BRACKET)	{	  int i, j, ch;	  for (i = 0, ch = 0; i < BITSET_UINTS; ++i)	    for (j = 0; j < UINT_BITS; ++j, ++ch)	      if (dfa->nodes[node].opr.sbcset[i] & (1 << j))		re_set_fastmap (fastmap, icase, ch);	}#ifdef RE_ENABLE_I18N      else if (type == COMPLEX_BRACKET)	{	  int i;	  re_charset_t *cset = dfa->nodes[node].opr.mbcset;	  if (cset->non_match || cset->ncoll_syms || cset->nequiv_classes	      || cset->nranges || cset->nchar_classes)	    {# ifdef _LIBC	      if (_NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES) != 0)		{		  /* In this case we want to catch the bytes which are		     the first byte of any collation elements.		     e.g. In da_DK, we want to catch 'a' since "aa"			  is a valid collation element, and don't catch			  'b' since 'b' is the only collation element			  which starts from 'b'.  */		  int j, ch;		  const int32_t *table = (const int32_t *)		    _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB);		  for (i = 0, ch = 0; i < BITSET_UINTS; ++i)		    for (j = 0; j < UINT_BITS; ++j, ++ch)		      if (table[ch] < 0)			re_set_fastmap (fastmap, icase, ch);		}# else	      if (dfa->mb_cur_max > 1)		for (i = 0; i < SBC_MAX; ++i)		  if (__btowc (i) == WEOF)		    re_set_fastmap (fastmap, icase, i);# endif /* not _LIBC */	    }	  for (i = 0; i < cset->nmbchars; ++i)	    {	      char buf[256];	      mbstate_t state;	      memset (&state, '\0', sizeof (state));	      __wcrtomb (buf, cset->mbchars[i], &state);	      re_set_fastmap (fastmap, icase, *(unsigned char *) buf);	      if ((bufp->syntax & RE_ICASE) && dfa->mb_cur_max > 1)		{		  __wcrtomb (buf, towlower (cset->mbchars[i]), &state);		  re_set_fastmap (fastmap, 0, *(unsigned char *) buf);		}	    }	}#endif /* RE_ENABLE_I18N */      else if (type == END_OF_RE || type == OP_PERIOD	       || type == OP_UTF8_PERIOD)	{	  memset (fastmap, '\1', sizeof (char) * SBC_MAX);	  if (type == END_OF_RE)	    bufp->can_be_null = 1;	  return;	}    }}