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

Rafael EspĂ­ndola via llvm-commits llvm-commits at lists.llvm.org
Mon Oct 17 06:36:50 PDT 2016


Can skip be implemented as

(void)next();

?

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