[lld] r284363 - ELF: Add a skip() overload to ignore any token

Justin Bogner via llvm-commits llvm-commits at lists.llvm.org
Mon Oct 17 11:50:55 PDT 2016


Rafael EspĂ­ndola <rafael.espindola at gmail.com> writes:
> Can skip be implemented as
>
> (void)next();

Yep, that makes sense, thanks. r284407.

> ?
>
> Cheers,
> Rafael
>
>
> On 17 October 2016 at 02:21, Justin Bogner via llvm-commits
> <llvm-commits at lists.llvm.org> wrote:
>> Author: bogner
>> Date: Mon Oct 17 01:21:13 2016
>> New Revision: 284363
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=284363&view=rev
>> Log:
>> ELF: Add a skip() overload to ignore any token
>>
>> Most functions that return StringRef should check their return values,
>> so I'm planning on marking StringRef [[nodiscard]]. This requires
>> splitting up functions like next() that are sometimes just used for
>> side effects.
>>
>> Modified:
>>     lld/trunk/ELF/LinkerScript.cpp
>>     lld/trunk/ELF/ScriptParser.cpp
>>     lld/trunk/ELF/ScriptParser.h
>>
>> Modified: lld/trunk/ELF/LinkerScript.cpp
>> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/LinkerScript.cpp?rev=284363&r1=284362&r2=284363&view=diff
>> ==============================================================================
>> --- lld/trunk/ELF/LinkerScript.cpp (original)
>> +++ lld/trunk/ELF/LinkerScript.cpp Mon Oct 17 01:21:13 2016
>> @@ -1106,14 +1106,14 @@ void ScriptParser::readOutput() {
>>  void ScriptParser::readOutputArch() {
>>    // Error checking only for now.
>>    expect("(");
>> -  next();
>> +  skip();
>>    expect(")");
>>  }
>>
>>  void ScriptParser::readOutputFormat() {
>>    // Error checking only for now.
>>    expect("(");
>> -  next();
>> +  skip();
>>    StringRef Tok = next();
>>    if (Tok == ")")
>>      return;
>> @@ -1121,9 +1121,9 @@ void ScriptParser::readOutputFormat() {
>>      setError("unexpected token: " + Tok);
>>      return;
>>    }
>> -  next();
>> +  skip();
>>    expect(",");
>> -  next();
>> +  skip();
>>    expect(")");
>>  }
>>
>> @@ -1495,7 +1495,7 @@ Expr ScriptParser::readExpr1(Expr Lhs, i
>>        return readTernary(Lhs);
>>      if (precedence(Op1) < MinPrec)
>>        break;
>> -    next();
>> +    skip();
>>      Expr Rhs = readPrimary();
>>
>>      // Evaluate the remaining part of the expression first if the
>> @@ -1623,7 +1623,7 @@ Expr ScriptParser::readPrimary() {
>>    }
>>    if (Tok == "SEGMENT_START") {
>>      expect("(");
>> -    next();
>> +    skip();
>>      expect(",");
>>      Expr E = readExpr();
>>      expect(")");
>> @@ -1678,7 +1678,7 @@ Expr ScriptParser::readPrimary() {
>>  }
>>
>>  Expr ScriptParser::readTernary(Expr Cond) {
>> -  next();
>> +  skip();
>>    Expr L = readExpr();
>>    expect(":");
>>    Expr R = readExpr();
>> @@ -1748,7 +1748,7 @@ void ScriptParser::readVersionDeclaratio
>>    // version hierarchy is, probably against your instinct, purely for human; the
>>    // runtime doesn't care about them at all. In LLD, we simply skip the token.
>>    if (!VerStr.empty() && peek() != ";")
>> -    next();
>> +    skip();
>>    expect(";");
>>  }
>>
>> @@ -1788,7 +1788,7 @@ void ScriptParser::readGlobal(StringRef
>>      StringRef Cur = peek();
>>      if (Cur == "}" || Cur == "local:" || Error)
>>        return;
>> -    next();
>> +    skip();
>>      Globals->push_back({unquote(Cur), false, hasWildcard(Cur)});
>>      expect(";");
>>    }
>>
>> Modified: lld/trunk/ELF/ScriptParser.cpp
>> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/ScriptParser.cpp?rev=284363&r1=284362&r2=284363&view=diff
>> ==============================================================================
>> --- lld/trunk/ELF/ScriptParser.cpp (original)
>> +++ lld/trunk/ELF/ScriptParser.cpp Mon Oct 17 01:21:13 2016
>> @@ -150,6 +150,16 @@ bool ScriptParserBase::skip(StringRef To
>>    return true;
>>  }
>>
>> +void ScriptParserBase::skip() {
>> +  if (Error)
>> +    return;
>> +  if (atEOF()) {
>> +    setError("unexpected EOF");
>> +    return;
>> +  }
>> +  ++Pos;
>> +}
>> +
>>  void ScriptParserBase::expect(StringRef Expect) {
>>    if (Error)
>>      return;
>>
>> Modified: lld/trunk/ELF/ScriptParser.h
>> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/ScriptParser.h?rev=284363&r1=284362&r2=284363&view=diff
>> ==============================================================================
>> --- lld/trunk/ELF/ScriptParser.h (original)
>> +++ lld/trunk/ELF/ScriptParser.h Mon Oct 17 01:21:13 2016
>> @@ -29,6 +29,7 @@ protected:
>>    bool atEOF();
>>    StringRef next();
>>    StringRef peek();
>> +  void skip();
>>    bool skip(StringRef Tok);
>>    void expect(StringRef Expect);
>>
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits


More information about the llvm-commits mailing list