Ignore:
Timestamp:
Oct 24, 2015, 2:54:17 PM (3 years ago)
Author:
nmedfort
Message:

Bug fix for \N{..} + minor optimization changes.

File:
1 edited

Legend:

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

    r4850 r4852  
    264264
    265265    std::function<void(RE*)> gather = [&](RE * re) {
    266         if (Name * name = dyn_cast<Name>(re)) {
    267             if (visited.insert(name).second) {
    268                 if (isa<CC>(name->getDefinition())) {
    269                     nameMap.emplace(name, nullptr);
     266        if (isa<Name>(re)) {
     267            if (visited.insert(cast<Name>(re)).second) {
     268                if (isa<CC>(cast<Name>(re)->getDefinition())) {
     269                    nameMap.emplace(cast<Name>(re), nullptr);
    270270                } else {
    271                     gather(name->getDefinition());
     271                    gather(cast<Name>(re)->getDefinition());
    272272                }
    273273            }
    274         } else if (Seq * seq = dyn_cast<Seq>(re)) {
    275             for (auto re : *seq) {
     274        } else if (isa<Seq>(re)) {
     275            for (RE * re : *cast<Seq>(re)) {
    276276                gather(re);
    277277            }
    278         } else if (Alt * alt = dyn_cast<Alt>(re)) {
    279             for (auto re : *alt) {
     278        } else if (isa<Alt>(re)) {
     279            for (RE * re : *cast<Alt>(re)) {
    280280                gather(re);
    281281            }
    282         } else if (Rep * rep = dyn_cast<Rep>(re)) {
    283             gather(rep->getRE());
    284         } else if (Assertion * a = dyn_cast<Assertion>(re)) {
    285             gather(a->getAsserted());
    286         } else if (Diff * diff = dyn_cast<Diff>(re)) {
    287             gather(diff->getLH());
    288             gather(diff->getRH());
    289         } else if (Intersect * ix = dyn_cast<Intersect>(re)) {
    290             gather(ix->getLH());
    291             gather(ix->getRH());
    292         } else if (GraphemeBoundary * gb = dyn_cast<GraphemeBoundary>(re)) {
    293             if (gb->getExpression()) {
    294                 gather(gb->getExpression());
    295             }
    296             gather(gb->getBoundaryRule());
     282        } else if (isa<Rep>(re)) {
     283            gather(cast<Rep>(re)->getRE());
     284        } else if (isa<Assertion>(re)) {
     285            gather(cast<Assertion>(re)->getAsserted());
     286        } else if (isa<Diff>(re)) {
     287            gather(cast<Diff>(re)->getLH());
     288            gather(cast<Diff>(re)->getRH());
     289        } else if (isa<Intersect>(re)) {
     290            gather(cast<Intersect>(re)->getLH());
     291            gather(cast<Intersect>(re)->getRH());
     292        } else if (isa<GraphemeBoundary>(re)) {
     293            if (cast<GraphemeBoundary>(re)->getExpression()) {
     294                gather(cast<GraphemeBoundary>(re)->getExpression());
     295            }
     296            gather(cast<GraphemeBoundary>(re)->getBoundaryRule());
    297297        }
    298298    };
     
    378378
    379379MarkerType RE_Compiler::process(RE * re, MarkerType marker, PabloBuilder & pb) {
    380     if (Name * name = dyn_cast<Name>(re)) {
    381         return compileName(name, marker, pb);
    382     } else if (Seq* seq = dyn_cast<Seq>(re)) {
    383         return compileSeq(seq, marker, pb);
    384     } else if (Alt * alt = dyn_cast<Alt>(re)) {
    385         return compileAlt(alt, marker, pb);
    386     } else if (Rep * rep = dyn_cast<Rep>(re)) {
    387         return compileRep(rep, marker, pb);
    388     } else if (Assertion * a = dyn_cast<Assertion>(re)) {
    389         return compileAssertion(a, marker, pb);
     380    if (isa<Name>(re)) {
     381        return compileName(cast<Name>(re), marker, pb);
     382    } else if (isa<Seq>(re)) {
     383        return compileSeq(cast<Seq>(re), marker, pb);
     384    } else if (isa<Alt>(re)) {
     385        return compileAlt(cast<Alt>(re), marker, pb);
     386    } else if (isa<Rep>(re)) {
     387        return compileRep(cast<Rep>(re), marker, pb);
     388    } else if (isa<Assertion>(re)) {
     389        return compileAssertion(cast<Assertion>(re), marker, pb);
    390390    } else if (isa<Any>(re)) {
    391391        return compileAny(marker, pb);
    392     } else if (Diff * diff = dyn_cast<Diff>(re)) {
    393         return compileDiff(diff, marker, pb);
    394     } else if (Intersect * ix = dyn_cast<Intersect>(re)) {
    395         return compileIntersect(ix, marker, pb);
     392    } else if (isa<Diff>(re)) {
     393        return compileDiff(cast<Diff>(re), marker, pb);
     394    } else if (isa<Intersect>(re)) {
     395        return compileIntersect(cast<Intersect>(re), marker, pb);
    396396    } else if (isa<Start>(re)) {
    397397        return compileStart(marker, pb);
    398398    } else if (isa<End>(re)) {
    399399        return compileEnd(marker, pb);
    400     } else if (GraphemeBoundary * gb = dyn_cast<GraphemeBoundary>(re)) {
    401         return compileGraphemeBoundary(gb, marker, pb);
     400    } else if (isa<GraphemeBoundary>(re)) {
     401        return compileGraphemeBoundary(cast<GraphemeBoundary>(re), marker, pb);
    402402    }
    403403    throw std::runtime_error("RE Compiler failed to process " + Printer_RE::PrintRE(re));
Note: See TracChangeset for help on using the changeset viewer.