diff options
author | Marcelo Lira <marcelo.lira@openbossa.org> | 2011-07-27 19:25:39 -0300 |
---|---|---|
committer | Hugo Parente Lima <hugo.pl@gmail.com> | 2012-03-08 16:17:04 -0300 |
commit | 0342513031e1c33d680c891a6c0bb74fc99e329d (patch) | |
tree | 699baaf2fd39564f15c03f0d480d78f74e7a986e /generator | |
parent | d59f29f9d51928ab96dd65953e791d658156b312 (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.cpp | 52 | ||||
-rw-r--r-- | generator/shibokengenerator.h | 12 |
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". |