aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--doc/typesystemvariables.rst12
-rw-r--r--generator/shibokengenerator.cpp4
2 files changed, 16 insertions, 0 deletions
diff --git a/doc/typesystemvariables.rst b/doc/typesystemvariables.rst
index 9f31bce45..7e9beef6e 100644
--- a/doc/typesystemvariables.rst
+++ b/doc/typesystemvariables.rst
@@ -143,6 +143,18 @@ Variables
Replaced by the wrapped C++ object instance that owns the method in which the
code with this variable was inserted.
+.. _cpptype:
+
+**%CPPTYPE**
+
+ Replaced by the original name of the C++ class, without any namespace prefix,
+ that owns the method in which the code with this variable was inserted. It will
+ work on class level code injections also. Notice that ``CPPTYPE`` differs from
+ the :ref:`%TYPE <type>` variable, for this latter may be translated to the original
+ C++ class name or to the C++ wrapper class name.
+
+ Namespaces will are treated as classes, so ``CPPTYPE`` will work for them and their
+ enclosed functions as well.
.. _function_name:
diff --git a/generator/shibokengenerator.cpp b/generator/shibokengenerator.cpp
index 72f396d0e..387a87690 100644
--- a/generator/shibokengenerator.cpp
+++ b/generator/shibokengenerator.cpp
@@ -1145,6 +1145,7 @@ void ShibokenGenerator::writeCodeSnips(QTextStream& s,
// class context in which the variable is used
code.replace("%PYTHONTYPEOBJECT", cpythonTypeName(context) + ".super.ht_type");
code.replace("%TYPE", wrapperName(context));
+ code.replace("%CPPTYPE", context->name());
}
// replace "toPython "converters
@@ -1325,6 +1326,9 @@ void ShibokenGenerator::writeCodeSnips(QTextStream& s,
if (func->isConstructor() && shouldGenerateCppWrapper(func->ownerClass()))
code.replace("%TYPE", wrapperName(func->ownerClass()));
+ if (func->ownerClass())
+ code.replace("%CPPTYPE", func->ownerClass()->name());
+
replaceTemplateVariables(code, func);
}