else if (type == END_OF_RE || type == COMPLEX_BRACKET || type == OP_PERIOD)
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;  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 == OP_CONTEXT_NODE)        {          node = dfa->nodes[node].opr.ctx_info->entity;          type = dfa->nodes[node].type;        }      if (type == CHARACTER)        fastmap[dfa->nodes[node].opr.c] = 1;      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))                fastmap[ch] = 1;        }      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)                        fastmap[ch] = 1;                }#else# ifdef RE_ENABLE_I18N              if (MB_CUR_MAX > 1)                for (i = 0; i < SBC_MAX; ++i)                  if (__btowc (i) == WEOF)                    fastmap[i] = 1;# endif /* RE_ENABLE_I18N */#endif /* not _LIBC */            }          for (i = 0; i < cset->nmbchars; ++i)            {              unsigned char buf[256];              wctomb (buf, cset->mbchars[i]);              fastmap[buf[0]] = 1;            }        }      else if (type == END_OF_RE || type == COMPLEX_BRACKET               || type == OP_PERIOD)        {          memset (fastmap, '\1', sizeof (char) * SBC_MAX);          if (type == END_OF_RE)            bufp->can_be_null = 1;          return;        }    }}