diff options
Diffstat (limited to 'lld/ELF/ScriptLexer.cpp')
-rw-r--r-- | lld/ELF/ScriptLexer.cpp | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/lld/ELF/ScriptLexer.cpp b/lld/ELF/ScriptLexer.cpp index e0ff56fec3f3..9ac8447eef0e 100644 --- a/lld/ELF/ScriptLexer.cpp +++ b/lld/ELF/ScriptLexer.cpp @@ -36,9 +36,9 @@ #include "llvm/ADT/Twine.h" using namespace llvm; +using namespace lld; +using namespace lld::elf; -namespace lld { -namespace elf { // Returns a whole line containing the current token. StringRef ScriptLexer::getLine() { StringRef s = getCurrentMB().getBuffer(); @@ -52,6 +52,8 @@ StringRef ScriptLexer::getLine() { // Returns 1-based line number of the current token. size_t ScriptLexer::getLineNumber() { + if (pos == 0) + return 1; StringRef s = getCurrentMB().getBuffer(); StringRef tok = tokens[pos - 1]; return s.substr(0, tok.data() - s.data()).count('\n') + 1; @@ -64,7 +66,7 @@ size_t ScriptLexer::getColumnNumber() { } std::string ScriptLexer::getCurrentLocation() { - std::string filename = getCurrentMB().getBufferIdentifier(); + std::string filename = std::string(getCurrentMB().getBufferIdentifier()); return (filename + ":" + Twine(getLineNumber())).str(); } @@ -187,7 +189,7 @@ static std::vector<StringRef> tokenizeExpr(StringRef s) { break; } - // Get a token before the opreator. + // Get a token before the operator. if (e != 0) ret.push_back(s.substr(0, e)); @@ -292,12 +294,11 @@ static bool encloses(StringRef s, StringRef t) { MemoryBufferRef ScriptLexer::getCurrentMB() { // Find input buffer containing the current token. - assert(!mbs.empty() && pos > 0); + assert(!mbs.empty()); + if (pos == 0) + return mbs.back(); for (MemoryBufferRef mb : mbs) if (encloses(mb.getBuffer(), tokens[pos - 1])) return mb; llvm_unreachable("getCurrentMB: failed to find a token"); } - -} // namespace elf -} // namespace lld |