[Lldb-commits] [lldb] [lldb] Validate a scripted class abstract methods before running its constructor (PR #225246)

Med Ismail Bennani via lldb-commits lldb-commits at lists.llvm.org
Tue Sep 22 15:49:10 PDT 2026


================
@@ -309,80 +414,10 @@ class ScriptedPythonInterface : virtual public ScriptedInterface {
     PythonString obj_class_name =
         obj_class.GetAttributeValue("__name__").AsType<PythonString>();
 
-    auto checker_or_err = CheckAbstractMethodImplementation(obj_class);
-    if (!checker_or_err)
-      return checker_or_err.takeError();
-
-    llvm::Error abstract_method_errors = llvm::Error::success();
-    for (const auto &method_checker : *checker_or_err)
-      switch (method_checker.second.checker_case) {
-      case AbstractMethodCheckerCases::eNotImplemented:
-        abstract_method_errors = llvm::joinErrors(
-            std::move(abstract_method_errors),
-            std::move(create_error("abstract method {0}.{1} not implemented",
-                                   obj_class_name.GetString(),
-                                   method_checker.first)));
-        break;
-      case AbstractMethodCheckerCases::eNotAllocated:
-        abstract_method_errors = llvm::joinErrors(
-            std::move(abstract_method_errors),
-            std::move(create_error("abstract method {0}.{1} not allocated",
-                                   obj_class_name.GetString(),
-                                   method_checker.first)));
-        break;
-      case AbstractMethodCheckerCases::eNotCallable:
-        abstract_method_errors = llvm::joinErrors(
-            std::move(abstract_method_errors),
-            std::move(create_error("abstract method {0}.{1} not callable",
-                                   obj_class_name.GetString(),
-                                   method_checker.first)));
-        break;
-      case AbstractMethodCheckerCases::eUnknownArgumentCount: {
-        const std::string *py_error =
-            std::get_if<std::string>(&method_checker.second.payload);
-        abstract_method_errors = llvm::joinErrors(
-            std::move(abstract_method_errors),
-            std::move(create_error(
-                "abstract method {0}.{1} has unknown argument count: {2}",
-                obj_class_name.GetString(), method_checker.first,
-                py_error ? *py_error : "<no further information>")));
-      } break;
-      case AbstractMethodCheckerCases::eInvalidArgumentCount: {
-        auto &payload_variant = method_checker.second.payload;
-        if (!std::holds_alternative<
-                AbstractMethodCheckerPayload::InvalidArgumentCountPayload>(
-                payload_variant)) {
-          abstract_method_errors = llvm::joinErrors(
-              std::move(abstract_method_errors),
-              std::move(create_error(
-                  "abstract method {0}.{1} has unexpected argument count",
-                  obj_class_name.GetString(), method_checker.first)));
-        } else {
-          auto payload = std::get<
-              AbstractMethodCheckerPayload::InvalidArgumentCountPayload>(
-              payload_variant);
-          abstract_method_errors = llvm::joinErrors(
-              std::move(abstract_method_errors),
-              std::move(
-                  create_error("abstract method {0}.{1} has unexpected "
-                               "argument count (expected {2} but has {3})",
-                               obj_class_name.GetString(), method_checker.first,
-                               payload.required_argument_count,
-                               payload.actual_argument_count)));
-        }
-      } break;
-      case AbstractMethodCheckerCases::eValid:
-        LLDB_LOG(log, "Abstract method {0}.{1} implemented & valid.",
-                 obj_class_name.GetString(), method_checker.first);
-        break;
-      }
-
-    if (abstract_method_errors) {
-      Status error = Status::FromError(std::move(abstract_method_errors));
-      LLDB_LOG(log, "Abstract method error in {0}:\n{1}", class_name,
-               error.AsCString());
-      return error.ToError();
-    }
+    if (!abstract_methods_checked)
----------------
medismailben wrote:

Yes!

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


More information about the lldb-commits mailing list