aboutsummaryrefslogtreecommitdiffstats
path: root/generator
diff options
context:
space:
mode:
authorMarcelo Lira <marcelo.lira@openbossa.org>2011-07-27 19:25:39 -0300
committerHugo Parente Lima <hugo.pl@gmail.com>2012-03-08 16:17:04 -0300
commit0342513031e1c33d680c891a6c0bb74fc99e329d (patch)
tree699baaf2fd39564f15c03f0d480d78f74e7a986e /generator
parentd59f29f9d51928ab96dd65953e791d658156b312 (diff)
Moved some type system variable replacement to their own methods.
The new methods replace the contents of the following type system variables: %CONVERTTOPYTHON %CONVERTTOCPP %ISCONVERTIBLE %CHECKTYPE The replacements were part of the ShibokenGenerator::writeCodeSnips() method.
Diffstat (limited to 'generator')
-rw-r--r--generator/shibokengenerator.cpp52
-rw-r--r--generator/shibokengenerator.h12
2 files changed, 48 insertions, 16 deletions
diff --git a/generator/shibokengenerator.cpp b/generator/shibokengenerator.cpp
index 8c80e7c2c..9e0706698 100644
--- a/generator/shibokengenerator.cpp
+++ b/generator/shibokengenerator.cpp
@@ -1182,10 +1182,6 @@ void ShibokenGenerator::writeCodeSnips(QTextStream& s,
const AbstractMetaArgument* lastArg,
const AbstractMetaClass* context)
{
- static QRegExp toPythonRegex("%CONVERTTOPYTHON\\[([^\\[]*)\\]");
- static QRegExp toCppRegex("%CONVERTTOCPP\\[([^\\[]*)\\]");
- static QRegExp isConvertibleRegex("%ISCONVERTIBLE\\[([^\\[]*)\\]");
- static QRegExp checkTypeRegex("%CHECKTYPE\\[([^\\[]*)\\]");
static QRegExp pyArgsRegex("%PYARG_(\\d+)");
// detect is we should use pyargs instead of args as variable name for python arguments
@@ -1216,18 +1212,6 @@ void ShibokenGenerator::writeCodeSnips(QTextStream& s,
code.replace("%CPPTYPE", context->name());
}
- // replace "toPython" converters
- code.replace(toPythonRegex, "Shiboken::Converter<\\1 >::toPython");
-
- // replace "toCpp" converters
- code.replace(toCppRegex, "Shiboken::Converter<\\1 >::toCpp");
-
- // replace "isConvertible" check
- code.replace(isConvertibleRegex, "Shiboken::Converter<\\1 >::isConvertible");
-
- // replace "checkType" check
- code.replace(checkTypeRegex, "Shiboken::Converter<\\1 >::checkType");
-
if (func) {
// replace %PYARG_# variables
code.replace("%PYARG_0", PYTHON_RETURN_VAR);
@@ -1434,6 +1418,18 @@ void ShibokenGenerator::writeCodeSnips(QTextStream& s,
replaceTemplateVariables(code, func);
}
+ // replace "toPython" converters
+ replaceConvertToPythonTypeSystemVariable(code);
+
+ // replace "toCpp" converters
+ replaceConvertToCppTypeSystemVariable(code);
+
+ // replace "isConvertible" check
+ replaceConvertibleToCppTypeSystemVariable(code);
+
+ // replace "checkType" check
+ replaceTypeCheckTypeSystemVariable(code);
+
if (!code.isEmpty()) {
s << INDENT << "// Begin code injection" << endl;
s << code;
@@ -1442,6 +1438,30 @@ void ShibokenGenerator::writeCodeSnips(QTextStream& s,
}
}
+void ShibokenGenerator::replaceConvertToPythonTypeSystemVariable(QString& code)
+{
+ static QRegExp toPythonRegex("%CONVERTTOPYTHON\\[([^\\[]*)\\]");
+ code.replace(toPythonRegex, "Shiboken::Converter<\\1 >::toPython");
+}
+
+void ShibokenGenerator::replaceConvertToCppTypeSystemVariable(QString& code)
+{
+ static QRegExp toCppRegex("%CONVERTTOCPP\\[([^\\[]*)\\]");
+ code.replace(toCppRegex, "Shiboken::Converter<\\1 >::toCpp");
+}
+
+void ShibokenGenerator::replaceConvertibleToCppTypeSystemVariable(QString& code)
+{
+ static QRegExp isConvertibleRegex("%ISCONVERTIBLE\\[([^\\[]*)\\]");
+ code.replace(isConvertibleRegex, "Shiboken::Converter<\\1 >::isConvertible");
+}
+
+void ShibokenGenerator::replaceTypeCheckTypeSystemVariable(QString& code)
+{
+ static QRegExp checkTypeRegex("%CHECKTYPE\\[([^\\[]*)\\]");
+ code.replace(checkTypeRegex, "Shiboken::Converter<\\1 >::checkType");
+}
+
bool ShibokenGenerator::injectedCodeUsesCppSelf(const AbstractMetaFunction* func)
{
CodeSnipList snips = func->injectedCodeSnips(CodeSnip::Any, TypeSystem::TargetLangCode);
diff --git a/generator/shibokengenerator.h b/generator/shibokengenerator.h
index 0d6713537..b1a5d677a 100644
--- a/generator/shibokengenerator.h
+++ b/generator/shibokengenerator.h
@@ -126,6 +126,18 @@ public:
const AbstractMetaArgument* lastArg = 0,
const AbstractMetaClass* context = 0);
+ /// Replaces the %CONVERTTOPYTHON type system variable.
+ void replaceConvertToPythonTypeSystemVariable(QString& code);
+
+ /// Replaces the %CONVERTTOCPP type system variable.
+ void replaceConvertToCppTypeSystemVariable(QString& code);
+
+ /// Replaces the %ISCONVERTIBLE type system variable.
+ void replaceConvertibleToCppTypeSystemVariable(QString& code);
+
+ /// Replaces the %CHECKTYPE type system variable.
+ void replaceTypeCheckTypeSystemVariable(QString& code);
+
/**
* Verifies if any of the function's code injections of the "target"
* type needs the type system variable "%CPPSELF".