[Lldb-commits] [lldb] [LLDB] Add array subscription and integer parsing to DIL (PR #138551)
Pavel Labath via lldb-commits
lldb-commits at lists.llvm.org
Tue May 6 01:03:55 PDT 2025
================
@@ -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
More information about the lldb-commits
mailing list