[lld] [ELF] ScriptLexer: generate tokens lazily (PR #100493)

Fangrui Song via llvm-commits llvm-commits at lists.llvm.org
Fri Jul 26 09:45:02 PDT 2024


================
@@ -1098,12 +1113,31 @@ SymbolAssignment *ScriptParser::readProvideHidden(bool provide, bool hidden) {
   return cmd;
 }
 
+// Replace whitespace sequence (including \n) with one single space. The output
+// is used by -Map.
+static void squeezeSpaces(std::string &str) {
----------------
MaskRay wrote:

I agree that `<algorithm>` functions might make the algorithm more difficult to read. It will likely require two passes. I've now changed this to a more clever loop:
```cpp
static void squeezeSpaces(std::string &str) {
  char prev = '\0';
  auto it = str.begin();
  for (char c : str)
    if (!isSpace(c) || (c = ' ') != prev)
      *it++ = prev = c;
  str.erase(it, str.end());
}
```

https://github.com/llvm/llvm-project/pull/100493


More information about the llvm-commits mailing list