Changeset c649d2c


Ignore:
Timestamp:
Nov 6, 2023, 4:33:44 PM (7 months ago)
Author:
Andrew Beach <ajbeach@…>
Branches:
master
Children:
6b419ce
Parents:
0d41b2e
Message:

Updated the demangler to also demangle operator names. You can also pass a filename to demangle now. There is also a test, but I don't really know what good tests are for the demangler.

Files:
1 added
3 edited

Legend:

Unmodified
Added
Removed
  • src/SymTab/Demangle.cc

    r0d41b2e rc649d2c  
    99// Author           : Rob Schluntz
    1010// Created On       : Thu Jul 19 12:52:41 2018
    11 // Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon Jan 11 21:28:27 2021
    13 // Update Count     : 11
     11// Last Modified By : Andrew Beach
     12// Last Modified On : Mon Nov  6 15:59:00 2023
     13// Update Count     : 12
    1414//
    1515
     
    1818
    1919#include "CodeGen/GenType.h"
     20#include "CodeGen/OperatorTable.h"
    2021#include "Common/PassVisitor.h"
    2122#include "Common/utility.h"                                                             // isPrefix
     
    605606                                Type * type = nullptr;
    606607                                if (! view.parse(name, type)) return mangleName;
     608                                auto info = CodeGen::operatorLookupByOutput(name);
     609                                if (info) name = info->inputName;
    607610                                std::unique_ptr<Type> manager(type);
    608611                                return genDemangleType(type, name);
  • src/SymTab/Demangle.h

    r0d41b2e rc649d2c  
    1010// Created On       : Fri May 13 10:11:00 2022
    1111// Last Modified By : Andrew Beach
    12 // Last Modified On : Fri May 13 10:30:00 2022
    13 // Update Count     : 0
     12// Last Modified On : Mon Nov  6 15:48:00 2023
     13// Update Count     : 1
    1414//
    1515
     
    1717
    1818extern "C" {
     19        /// Main interface to the demangler as a utility.
     20        /// Caller must free the returned string.
    1921        char * cforall_demangle(const char *, int);
    2022}
  • src/SymTab/demangler.cc

    r0d41b2e rc649d2c  
    22#include <iostream>
    33#include <fstream>
    4 using namespace std;
    54
    6 void f(const std::string & mangleName) {
     5void demangleAndPrint(const std::string & mangleName) {
    76        char * demangleName = cforall_demangle(mangleName.c_str(), 0);
    8         cout << mangleName << " => " << std::flush << demangleName << endl;
     7        std::cout << mangleName << " => " << demangleName << std::endl;
    98        free(demangleName);
    109}
    1110
    12 int main() {
    13         ifstream in("in-demangle.txt");
     11int main(int argc, char * argv[]) {
     12        char const * fileName = (1 < argc) ? argv[1] : "in-demangle.txt";
     13        std::ifstream in(fileName);
     14
    1415        std::string line;
    15         while (getline(in, line)) {
    16                 if (line.empty()) { cout << "=================================" << endl; continue; }
    17                 else if (line[0] == '#') continue;
    18                 f(line);
     16        while (std::getline(in, line)) {
     17                if (line.empty()) {
     18                        std::cout << "=================================" << std::endl;
     19                } else if (line[0] == '#') {
     20                        continue;
     21                } else {
     22                        demangleAndPrint(line);
     23                }
    1924        }
    2025}
Note: See TracChangeset for help on using the changeset viewer.