[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