Ignore:
Timestamp:
Jul 14, 2015, 10:46:10 PM (4 years ago)
Author:
nmedfort
Message:

Moved responsibility of handling 'special cases of Unicode TR #18' and 'compatibility properties of UTR #18 Annex C' into RE_Parser.

Location:
icGREP/icgrep-devel/icgrep/cc
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • icGREP/icgrep-devel/icgrep/cc/cc_compiler.cpp

    r4657 r4671  
    7474    else if (Name * name = dyn_cast<Name>(re)) {
    7575        RE * def = name->getDefinition();
    76         if (LLVM_LIKELY(def != nullptr)) {
     76        if (def) {
    7777            if (!isa<CC>(def)) {
    7878                compileByteClasses(def);
  • icGREP/icgrep-devel/icgrep/cc/cc_namemap.cpp

    r4665 r4671  
    4141    else if (Name * name = dyn_cast<Name>(re)) {
    4242        RE * def = name->getDefinition();
    43         if (def && !isa<CC>(def)) {
    44             name->setDefinition(process(def, type));
     43        if (def) {
     44            if (!isa<CC>(def)) {
     45                name->setDefinition(process(def, type));
     46            }
    4547        }
    46         std::string classname = name->getName();
    47         auto f = mNameMap.find(classname);
    48         if (f == mNameMap.end()) {
     48        else {
     49
     50            std::string classname = name->getName();
     51            auto f = mNameMap.find(classname);
     52            if (f != mNameMap.end()) {
     53                return f->second;
     54            }
     55            insert(std::move(classname), name);
    4956            if (name->getType() == Name::Type::UnicodeProperty) {
    5057                resolveProperty(name);
    5158                RE * def = name->getDefinition();
    5259                if (def) {
    53                     name->setDefinition(process(def, type));
     60                    name->setDefinition(process(def, CC_type::UnicodeClass));
    5461                }
    5562            }
    56             return insert(std::move(classname), name);
     63
     64            return name;
    5765        }
    58         return f->second;
    5966    }
    6067    else if (CC * cc = dyn_cast<CC>(re)) {
    6168        std::string classname = cc->canonicalName(type);
    6269        auto f = mNameMap.find(classname);
    63         if (f == mNameMap.end()) {
    64             return insert(std::move(classname), (type == ByteClass) ? makeByteName(classname, cc) : makeName(classname, cc));
     70        if (f != mNameMap.end()) {
     71            return f->second;
    6572        }
    66         return f->second;
     73        return insert(std::move(classname), (type == ByteClass) ? makeByteName(classname, cc) : makeName(classname, cc));
    6774    }
    6875    return re;
  • icGREP/icgrep-devel/icgrep/cc/cc_namemap.hpp

    r4665 r4671  
    1414public:
    1515
    16     typedef std::unordered_map<std::string, re::Name*>          NameMap;
     16    typedef std::unordered_map<std::string, re::Name *>          NameMap;
    1717    typedef std::vector<re::Name*>                              NameVector;
    1818    typedef NameVector::const_iterator                          iterator;
Note: See TracChangeset for help on using the changeset viewer.