From 36c1cd235a74e5d3f84b01eec010f98b1ab65d7e Mon Sep 17 00:00:00 2001 From: Rui Ueyama Date: Fri, 5 Aug 2016 01:04:59 +0000 Subject: [PATCH] Make combine() non-member function. Because this function depends only on its arguments. llvm-svn: 277790 --- lld/ELF/LinkerScript.cpp | 69 ++++++++++++++++++++-------------------- 1 file changed, 34 insertions(+), 35 deletions(-) diff --git a/lld/ELF/LinkerScript.cpp b/lld/ELF/LinkerScript.cpp index e4d264ef440c..a2f611a1d492 100644 --- a/lld/ELF/LinkerScript.cpp +++ b/lld/ELF/LinkerScript.cpp @@ -502,7 +502,6 @@ private: Expr readExpr1(Expr Lhs, int MinPrec); Expr readPrimary(); Expr readTernary(Expr Cond); - Expr combine(StringRef Op, Expr Lhs, Expr Rhs); const static StringMap Cmd; ScriptConfiguration &Opt = *ScriptConfig; @@ -941,6 +940,40 @@ SymbolAssignment *ScriptParser::readAssignment(StringRef Name) { // script expression. Expr ScriptParser::readExpr() { return readExpr1(readPrimary(), 0); } +static Expr combine(StringRef Op, Expr L, Expr R) { + if (Op == "*") + return [=](uint64_t Dot) { return L(Dot) * R(Dot); }; + if (Op == "/") { + return [=](uint64_t Dot) -> uint64_t { + uint64_t RHS = R(Dot); + if (RHS == 0) { + error("division by zero"); + return 0; + } + return L(Dot) / RHS; + }; + } + if (Op == "+") + return [=](uint64_t Dot) { return L(Dot) + R(Dot); }; + if (Op == "-") + return [=](uint64_t Dot) { return L(Dot) - R(Dot); }; + if (Op == "<") + return [=](uint64_t Dot) { return L(Dot) < R(Dot); }; + if (Op == ">") + return [=](uint64_t Dot) { return L(Dot) > R(Dot); }; + if (Op == ">=") + return [=](uint64_t Dot) { return L(Dot) >= R(Dot); }; + if (Op == "<=") + return [=](uint64_t Dot) { return L(Dot) <= R(Dot); }; + if (Op == "==") + return [=](uint64_t Dot) { return L(Dot) == R(Dot); }; + if (Op == "!=") + return [=](uint64_t Dot) { return L(Dot) != R(Dot); }; + if (Op == "&") + return [=](uint64_t Dot) { return L(Dot) & R(Dot); }; + llvm_unreachable("invalid operator"); +} + // This is a part of the operator-precedence parser. This function // assumes that the remaining token stream starts with an operator. Expr ScriptParser::readExpr1(Expr Lhs, int MinPrec) { @@ -1061,40 +1094,6 @@ Expr ScriptParser::readTernary(Expr Cond) { return [=](uint64_t Dot) { return Cond(Dot) ? L(Dot) : R(Dot); }; } -Expr ScriptParser::combine(StringRef Op, Expr L, Expr R) { - if (Op == "*") - return [=](uint64_t Dot) { return L(Dot) * R(Dot); }; - if (Op == "/") { - return [=](uint64_t Dot) -> uint64_t { - uint64_t RHS = R(Dot); - if (RHS == 0) { - error("division by zero"); - return 0; - } - return L(Dot) / RHS; - }; - } - if (Op == "+") - return [=](uint64_t Dot) { return L(Dot) + R(Dot); }; - if (Op == "-") - return [=](uint64_t Dot) { return L(Dot) - R(Dot); }; - if (Op == "<") - return [=](uint64_t Dot) { return L(Dot) < R(Dot); }; - if (Op == ">") - return [=](uint64_t Dot) { return L(Dot) > R(Dot); }; - if (Op == ">=") - return [=](uint64_t Dot) { return L(Dot) >= R(Dot); }; - if (Op == "<=") - return [=](uint64_t Dot) { return L(Dot) <= R(Dot); }; - if (Op == "==") - return [=](uint64_t Dot) { return L(Dot) == R(Dot); }; - if (Op == "!=") - return [=](uint64_t Dot) { return L(Dot) != R(Dot); }; - if (Op == "&") - return [=](uint64_t Dot) { return L(Dot) & R(Dot); }; - llvm_unreachable("invalid operator"); -} - std::vector ScriptParser::readOutputSectionPhdrs() { std::vector Phdrs; while (!Error && peek().startswith(":")) {