Changeset f47d0ad


Ignore:
Timestamp:
Aug 6, 2018, 10:47:55 AM (6 years ago)
Author:
Rob Schluntz <rschlunt@…>
Branches:
ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, no_list, persistent-indexer, pthread-emulation, qualifiedEnum
Children:
8316a49
Parents:
4084928e
Message:

Change signature of cforall_demangle to be C-compatible

Location:
src/SymTab
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • src/SymTab/Demangle.cc

    r4084928e rf47d0ad  
    509509                                return true;
    510510                        }
     511
     512                        std::string demangle(const std::string & mangleName) {
     513                                SymTab::Mangler::StringView view(mangleName);
     514                                std::string name;
     515                                Type * type = nullptr;
     516                                if (! view.parse(name, type)) return mangleName;
     517                                return genDemangleType(type, name);
     518                        }
    511519                } // namespace
    512520        } // namespace Mangler
     
    514522
    515523extern "C" {
    516         std::string cforall_demangle(const std::string & mangleName) {
    517                 SymTab::Mangler::StringView view(mangleName);
    518                 std::string name;
    519                 Type * type = nullptr;
    520                 if (! view.parse(name, type)) return mangleName;
    521                 return genDemangleType(type, name);
    522         } // extern "C"
     524        char * cforall_demangle(const char * mangleName) {
     525                const std::string & demangleName = SymTab::Mangler::demangle(mangleName);
     526                return strdup(demangleName.c_str());
     527        }
    523528}
    524529
  • src/SymTab/Mangler.h

    r4084928e rf47d0ad  
    6969
    7070extern "C" {
    71         std::string cforall_demangle(const std::string &);
     71        char * cforall_demangle(const char *);
    7272}
    7373
  • src/SymTab/demangler.cc

    r4084928e rf47d0ad  
    55
    66void f(const std::string & mangleName) {
    7   cout << mangleName << " => " << std::flush << cforall_demangle(mangleName) << endl;
     7        char * demangleName = cforall_demangle(mangleName.c_str());
     8        cout << mangleName << " => " << std::flush << demangleName << endl;
     9        free(demangleName);
    810}
    911
    1012int main() {
    11   ifstream in("in-demangle.txt");
    12   std::string line;
    13   while (getline(in, line)) {
    14     if (line.empty()) { cout << "=================================" << endl; continue; }
    15     else if (line[0] == '#') continue;
    16     f(line);
    17   }
     13        ifstream in("in-demangle.txt");
     14        std::string line;
     15        while (getline(in, line)) {
     16                if (line.empty()) { cout << "=================================" << endl; continue; }
     17                else if (line[0] == '#') continue;
     18                f(line);
     19        }
    1820}
Note: See TracChangeset for help on using the changeset viewer.