[PATCH] D17499: [ELF] - replaced std::function with raw pointers in LinkerScript.cpp
David Blaikie via llvm-commits
llvm-commits at lists.llvm.org
Tue Feb 23 08:23:07 PST 2016
On Tue, Feb 23, 2016 at 12:16 AM, George Rimar via llvm-commits <
llvm-commits at lists.llvm.org> wrote:
> grimar updated this revision to Diff 48785.
> grimar added a comment.
>
> Addressed David's and Rui's review comments.
>
>
> http://reviews.llvm.org/D17499
>
> Files:
> ELF/LinkerScript.cpp
>
> Index: ELF/LinkerScript.cpp
> ===================================================================
> --- ELF/LinkerScript.cpp
> +++ ELF/LinkerScript.cpp
> @@ -94,21 +94,11 @@
> }
>
> class elf2::ScriptParser {
> + typedef void (ScriptParser::*Handler)();
> +
> public:
> ScriptParser(BumpPtrAllocator *A, StringRef S, bool B)
> - : Saver(*A), Tokens(tokenize(S)), IsUnderSysroot(B) {
> - Cmd["ENTRY"] = std::mem_fn(&ScriptParser::readEntry);
> - Cmd["EXTERN"] = std::mem_fn(&ScriptParser::readExtern);
> - Cmd["GROUP"] = std::mem_fn(&ScriptParser::readGroup);
> - Cmd["INCLUDE"] = std::mem_fn(&ScriptParser::readInclude);
> - Cmd["INPUT"] = std::mem_fn(&ScriptParser::readGroup);
> - Cmd["OUTPUT"] = std::mem_fn(&ScriptParser::readOutput);
> - Cmd["OUTPUT_ARCH"] = std::mem_fn(&ScriptParser::readOutputArch);
> - Cmd["OUTPUT_FORMAT"] = std::mem_fn(&ScriptParser::readOutputFormat);
> - Cmd["SEARCH_DIR"] = std::mem_fn(&ScriptParser::readSearchDir);
> - Cmd["SECTIONS"] = std::mem_fn(&ScriptParser::readSections);
> - Cmd[";"] = [](ScriptParser &) {};
> - }
> + : Saver(*A), Tokens(tokenize(S)), IsUnderSysroot(B) {}
>
> void run();
>
> @@ -128,6 +118,7 @@
> void readExtern();
> void readGroup();
> void readInclude();
> + void readNothing() {}
> void readOutput();
> void readOutputArch();
> void readOutputFormat();
> @@ -139,22 +130,30 @@
>
> StringSaver Saver;
> std::vector<StringRef> Tokens;
> - llvm::StringMap<std::function<void(ScriptParser &)>> Cmd;
> + const llvm::StringMap<Handler> Cmd{
>
Presumably static, too (which means you'll need to have a separate
definition) - no point having a copy of this in every instance of this
class, right?
> + {"ENTRY", &ScriptParser::readEntry},
> + {"EXTERN", &ScriptParser::readExtern},
> + {"GROUP", &ScriptParser::readGroup},
> + {"INCLUDE", &ScriptParser::readInclude},
> + {"INPUT", &ScriptParser::readGroup},
> + {"OUTPUT", &ScriptParser::readOutput},
> + {"OUTPUT_ARCH", &ScriptParser::readOutputArch},
> + {"OUTPUT_FORMAT", &ScriptParser::readOutputFormat},
> + {"SEARCH_DIR", &ScriptParser::readSearchDir},
> + {"SECTIONS", &ScriptParser::readSections},
> + {";", &ScriptParser::readNothing}};
> size_t Pos = 0;
> bool IsUnderSysroot;
> bool Error = false;
> };
>
> void ScriptParser::run() {
> while (!atEOF()) {
> StringRef Tok = next();
> - auto It = Cmd.find(Tok);
> - if (It != Cmd.end()) {
> - std::function<void(ScriptParser &)> &Handler = It->second;
> - Handler(*this);
> - } else {
> + if (Handler Fn = Cmd.lookup(Tok))
> + (this->*Fn)();
> + else
> setError("unknown directive: " + Tok);
> - }
> }
> }
>
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160223/58555382/attachment.html>
More information about the llvm-commits
mailing list