================
@@ -57,6 +64,29 @@ static std::optional<llvm::StringRef> IsWord(llvm::StringRef 
expr,
   return candidate;
 }
 
+static void ConsumeNumberBody(char &prev_ch, llvm::StringRef::iterator 
&cur_pos,
+                              llvm::StringRef expr) {
+  while (cur_pos != expr.end() &&
+         (IsDigit(*cur_pos) || IsLetter(*cur_pos) || *cur_pos == '_')) {
+    prev_ch = *cur_pos;
+    cur_pos++;
+  }
+}
+
+static std::optional<llvm::StringRef> IsNumber(llvm::StringRef expr,
+                                               llvm::StringRef &remainder) {
+  llvm::StringRef::iterator cur_pos = remainder.begin();
+  llvm::StringRef::iterator start = cur_pos;
+  char prev_ch = 0;
+  if (IsDigit(*start)) {
+    ConsumeNumberBody(prev_ch, cur_pos, expr);
+    llvm::StringRef number = expr.substr(start - expr.begin(), cur_pos - 
start);
+    if (remainder.consume_front(number))
+      return number;
+  }
+  return std::nullopt;
+}
----------------
labath wrote:

I think this should be equivalent to what you're doing here.

```suggestion
static bool IsNumberBodyChar(char ch) { // Or make it a lambda
  return IsDigit(ch) || IsLetter(ch) || ch == '_';
}

static std::optional<llvm::StringRef> IsNumber(llvm::StringRef expr,
                                               llvm::StringRef &remainder) {
  llvm::StringRef::iterator cur_pos = remainder.begin();
  llvm::StringRef::iterator start = cur_pos;
  if (remainder[0]) {
    llvm::StringRef number = remainder.take_while(IsNumberBodyChar);
    remainder = remainder.drop_front(number.size());
    return number;
  }
  return std::nullopt;
}
```

https://github.com/llvm/llvm-project/pull/138551
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to