[Lldb-commits] [lldb] 41f3e6b - [lldb/Plugins] Fix build failure with GCC in ScriptedPythonInterface::Dispatch
Med Ismail Bennani via lldb-commits
lldb-commits at lists.llvm.org
Sat Nov 19 13:24:55 PST 2022
Author: Med Ismail Bennani
Date: 2022-11-19T13:24:47-08:00
New Revision: 41f3e6b74df173198c67f46f223b9815334d42a2
URL: https://github.com/llvm/llvm-project/commit/41f3e6b74df173198c67f46f223b9815334d42a2
DIFF: https://github.com/llvm/llvm-project/commit/41f3e6b74df173198c67f46f223b9815334d42a2.diff
LOG: [lldb/Plugins] Fix build failure with GCC in ScriptedPythonInterface::Dispatch
This patch should fix the build failures following 7e01924 when building
with GCC. These failures were mostly caused by GCC's poor support of C++
templates (namely, partial template specialization).
To work around that problem, this patch makes use of overloading and get
rid of the templated structs and specialized structs.
Signed-off-by: Med Ismail Bennani <medismail.bennani at gmail.com>
Added:
Modified:
lldb/source/Plugins/ScriptInterpreter/Python/ScriptedPythonInterface.h
Removed:
################################################################################
diff --git a/lldb/source/Plugins/ScriptInterpreter/Python/ScriptedPythonInterface.h b/lldb/source/Plugins/ScriptInterpreter/Python/ScriptedPythonInterface.h
index ac1fe0955c370..268430f288f28 100644
--- a/lldb/source/Plugins/ScriptInterpreter/Python/ScriptedPythonInterface.h
+++ b/lldb/source/Plugins/ScriptInterpreter/Python/ScriptedPythonInterface.h
@@ -101,36 +101,27 @@ class ScriptedPythonInterface : virtual public ScriptedInterface {
Status GetStatusFromMethod(llvm::StringRef method_name);
- template <typename T> struct transformation { using type = T; };
- template <typename T, typename U> struct reverse_transformation {
- static void Apply(ScriptedPythonInterface &obj, T &original_arg,
- U transformed_arg, Status &error) {
- // If U is not a PythonObject, don't touch it!
- return;
- }
- };
-
- template <> struct transformation<Status> {
- using type = python::PythonObject;
- };
- template <typename T> struct reverse_transformation<T, python::PythonObject> {
- static void Apply(ScriptedPythonInterface &obj, T &original_arg,
- python::PythonObject transformed_arg, Status &error) {
- original_arg =
- obj.ExtractValueFromPythonObject<T>(transformed_arg, error);
- }
- };
-
- template <typename T> typename transformation<T>::type Transform(T object) {
+ template <typename T> T Transform(T object) {
// No Transformation for generic usage
return {object};
}
- template <> typename transformation<Status>::type Transform(Status arg) {
- // Call SWIG Wrapper function
+ python::PythonObject Transform(Status arg) {
return python::ToSWIGWrapper(arg);
}
+ template <typename T, typename U>
+ void ReverseTransform(T &original_arg, U transformed_arg, Status &error) {
+ // If U is not a PythonObject, don't touch it!
+ return;
+ }
+
+ template <typename T>
+ void ReverseTransform(T &original_arg, python::PythonObject transformed_arg,
+ Status &error) {
+ original_arg = ExtractValueFromPythonObject<T>(transformed_arg, error);
+ }
+
template <std::size_t... I, typename... Args>
auto TransformTuple(const std::tuple<Args...> &args,
std::index_sequence<I...>) {
@@ -146,8 +137,7 @@ class ScriptedPythonInterface : virtual public ScriptedInterface {
template <typename T, typename U>
void TransformBack(T &original_arg, U transformed_arg, Status &error) {
- reverse_transformation<T, U>::Apply(*this, original_arg, transformed_arg,
- error);
+ ReverseTransform(original_arg, transformed_arg, error);
}
template <std::size_t... I, typename... Ts, typename... Us>
More information about the lldb-commits
mailing list