Ignore:
Timestamp:
Dec 26, 2017, 10:37:33 AM (18 months ago)
Author:
cameron
Message:

Failure case and fix

File:
1 edited

Legend:

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

    r5805 r5809  
    2828RE * exclude_CC(RE * re, CC * cc) {
    2929    if (CC * cc0 = dyn_cast<CC>(re)) {
    30         return subtractCC(cc0, cc);
     30        if (intersects(cc0, cc)) return subtractCC(cc0, cc);
     31        else return cc0;
    3132    } else if (Seq * seq = dyn_cast<Seq>(re)) {
    3233        std::vector<RE*> list;
     
    5556    } else if (Name * n = dyn_cast<Name>(re)) {
    5657        switch (n->getType()) {
    57             case Name::Type::Unicode:
    58             case Name::Type::UnicodeProperty:
    59                 return makeName(subtractCC(cast<CC>(n->getDefinition()), cc));
     58            case Name::Type::Reference:
    6059            case Name::Type::ZeroWidth:
    6160                return re;
    6261            case Name::Type::Capture:
    6362                return makeCapture(n->getName(), exclude_CC(n->getDefinition(), cc));
    64             case Name::Type::Reference:
    65                 return re;
    6663            default:
    67                 report_fatal_error("exclude_CC: unhandled Name type");
     64                RE * defn = n->getDefinition();
     65                if (const CC * cc0 = dyn_cast<CC>(defn)) {
     66                    if (!intersects(cc0, cc)) return re;
     67                }
     68                std::string cc_name = n->getName() + "--" + cc->canonicalName(CC_type::UnicodeClass);
     69                return makeName(cc_name, n->getType(), exclude_CC(defn, cc));
     70                /*
     71                return exclude_CC(defn, cc);
     72                */
    6873        }
    6974    } else {
Note: See TracChangeset for help on using the changeset viewer.