[Lldb-commits] [lldb] [lldb] Add binary multiplication, division, remainder to DIL (PR #187281)

Michael Buch via lldb-commits lldb-commits at lists.llvm.org
Fri Apr 10 09:55:17 PDT 2026


================
@@ -155,15 +155,43 @@ ASTNodeUP DILParser::ParseExpression() { return ParseAdditiveExpression(); }
 // Parse an additive_expression.
 //
 //  additive_expression:
-//    cast_expression {"+" cast_expression}
+//    multiplicative_expression {"+" multiplicative_expression}
 //
 ASTNodeUP DILParser::ParseAdditiveExpression() {
-  auto lhs = ParseCastExpression();
+  auto lhs = ParseMultiplicativeExpression();
   assert(lhs && "ASTNodeUP must not contain a nullptr");
 
   while (CurToken().IsOneOf({Token::plus, Token::minus})) {
     Token token = CurToken();
     m_dil_lexer.Advance();
+    auto rhs = ParseMultiplicativeExpression();
+    assert(rhs && "ASTNodeUP must not contain a nullptr");
+    lhs = std::make_unique<BinaryOpNode>(
+        token.GetLocation(), GetBinaryOpKindFromToken(token.GetKind()),
+        std::move(lhs), std::move(rhs));
+  }
+
+  return lhs;
+}
+
+// Parse a multiplicative_expression.
+//
+//  multiplicative_expression:
+//    cast_expression {"*" cast_expression}
+//    cast_expression {"/" cast_expression}
+//    cast_expression {"%" cast_expression}
+//
+ASTNodeUP DILParser::ParseMultiplicativeExpression() {
+  auto lhs = ParseCastExpression();
+
+  while (CurToken().IsOneOf({Token::star, Token::slash, Token::percent})) {
+    Token token = CurToken();
+    if (token.Is(Token::star) && m_mode != lldb::eDILModeFull) {
+      BailOut("binary multiplication (*) is allowed only in DIL full mode",
----------------
Michael137 wrote:

Could you explain why? Didn't quite understand from the PR description

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


More information about the lldb-commits mailing list