Ignore:
Timestamp:
Jan 6, 2018, 5:03:47 PM (16 months ago)
Author:
nmedfort
Message:

Bug fixes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • icGREP/icgrep-devel/icgrep/re/re_name_resolve.cpp

    r5803 r5821  
    5151                return *f;
    5252            }
    53         } else if (Seq * seq = dyn_cast<Seq>(re)) {
    54             for (auto si = seq->begin(); si != seq->end(); ++si) {
    55                 *si = resolveUnicodeProperties(*si);
    56             }
    57         } else if (Alt * alt = dyn_cast<Alt>(re)) {
    58             for (auto ai = alt->begin(); ai != alt->end(); ++ai) {
    59                 *ai = resolveUnicodeProperties(*ai);
     53        } else if (Vector * vec = dyn_cast<Vector>(re)) {
     54            for (RE *& re : *vec) {
     55                re = resolveUnicodeProperties(re);
    6056            }
    6157        } else if (Rep * rep = dyn_cast<Rep>(re)) {
     
    9086                return *f;
    9187            }
    92         } else if (Seq * seq = dyn_cast<Seq>(re)) {
    93             for (auto si = seq->begin(); si != seq->end(); ++si) {
    94                 *si = resolve(*si);
    95             }
    96         } else if (Alt * alt = dyn_cast<Alt>(re)) {
    97             CC * unionCC = nullptr;
    98             std::stringstream name;
    99             for (auto ai = alt->begin(); ai != alt->end(); ) {
    100                 RE * item = resolve(*ai);
    101                 if (CC * cc = extractCC(item)) {
    102                     if (unionCC == nullptr) {
    103                         unionCC = cc;
    104                     } else {
    105                         unionCC = makeCC(unionCC, cc);
    106                         name << '+';
    107                     }
    108                     if (LLVM_LIKELY(isa<Name>(item))) {
    109                         Name * n = cast<Name>(item);
    110                         if (n->hasNamespace()) {
    111                             name << n->getNamespace() << ':';
    112                         }
    113                         name << n->getName();
    114                     } else if (isa<CC>(item)) {
    115                         name << cast<CC>(item)->canonicalName(CC_type::UnicodeClass);
    116                     }
    117                     ai = alt->erase(ai);
    118                 } else {
    119                     *ai++ = item;
    120                 }
    121             }
    122             if (unionCC) {
    123                 alt->push_back(resolve(makeName(name.str(), unionCC)));
    124             }
    125             if (alt->size() == 1) {
    126                 return alt->front();
     88        } else if (Vector * vec = dyn_cast<Vector>(re)) {
     89            for (RE *& re : *vec) {
     90                re = resolve(re);
    12791            }
    12892        } else if (Rep * rep = dyn_cast<Rep>(re)) {
Note: See TracChangeset for help on using the changeset viewer.