diff options
| -rw-r--r-- | lld/ELF/ScriptParser.cpp | 28 | ||||
| -rw-r--r-- | lld/ELF/ScriptParser.h | 2 | 
2 files changed, 14 insertions, 16 deletions
diff --git a/lld/ELF/ScriptParser.cpp b/lld/ELF/ScriptParser.cpp index b2a902eadd5..c740685a15a 100644 --- a/lld/ELF/ScriptParser.cpp +++ b/lld/ELF/ScriptParser.cpp @@ -22,7 +22,7 @@ using namespace lld::elf;  // Returns a whole line containing the current token.  StringRef ScriptParserBase::getLine() { -  StringRef S = currentBuffer().getBuffer(); +  StringRef S = getCurrentMB().getBuffer();    StringRef Tok = Tokens[Pos - 1];    size_t Pos = S.rfind('\n', Tok.data() - S.data()); @@ -33,7 +33,7 @@ StringRef ScriptParserBase::getLine() {  // Returns 1-based line number of the current token.  size_t ScriptParserBase::getLineNumber() { -  StringRef S = currentBuffer().getBuffer(); +  StringRef S = getCurrentMB().getBuffer();    StringRef Tok = Tokens[Pos - 1];    return S.substr(0, Tok.data() - S.data()).count('\n') + 1;  } @@ -45,7 +45,7 @@ size_t ScriptParserBase::getColumnNumber() {  }  std::string ScriptParserBase::getCurrentLocation() { -  std::string Filename = currentBuffer().getBufferIdentifier(); +  std::string Filename = getCurrentMB().getBufferIdentifier();    if (!Pos)      return Filename;    return (Filename + ":" + Twine(getLineNumber())).str(); @@ -182,21 +182,19 @@ void ScriptParserBase::expect(StringRef Expect) {      setError(Expect + " expected, but got " + Tok);  } -// Returns true if string 'Bigger' contains string 'Shorter'. -static bool containsString(StringRef Bigger, StringRef Shorter) { -  const char *BiggerEnd = Bigger.data() + Bigger.size(); -  const char *ShorterEnd = Shorter.data() + Shorter.size(); - -  return Bigger.data() <= Shorter.data() && BiggerEnd >= ShorterEnd; +// Returns true if S encloses T. +static bool encloses(StringRef S, StringRef T) { +  return S.bytes_begin() <= T.bytes_begin() && T.bytes_end() <= S.bytes_end();  } -MemoryBufferRef ScriptParserBase::currentBuffer() { +MemoryBufferRef ScriptParserBase::getCurrentMB() {    // Find input buffer containing the current token.    assert(!MBs.empty()); -  if (Pos) -    for (MemoryBufferRef MB : MBs) -      if (containsString(MB.getBuffer(), Tokens[Pos - 1])) -        return MB; +  if (!Pos) +    return MBs[0]; -  return MBs.front(); +  for (MemoryBufferRef MB : MBs) +    if (encloses(MB.getBuffer(), Tokens[Pos - 1])) +      return MB; +  llvm_unreachable("getCurrentMB: failed to find a token");  } diff --git a/lld/ELF/ScriptParser.h b/lld/ELF/ScriptParser.h index ae58ef2ff00..264c4979233 100644 --- a/lld/ELF/ScriptParser.h +++ b/lld/ELF/ScriptParser.h @@ -44,7 +44,7 @@ private:    size_t getLineNumber();    size_t getColumnNumber(); -  MemoryBufferRef currentBuffer(); +  MemoryBufferRef getCurrentMB();  };  } // namespace elf  | 

