aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2022-01-08 21:57:49 +0100
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2022-01-13 16:57:33 +0000
commit85f5bc5859b011cec1b6df56ac2fa09f1f06a26f (patch)
tree2910f0d7b7729835cfbcc09cc8a191fbec97683b
parentdd15e8e1990c818e7017fff8566941ba8cc9b0e6 (diff)
shiboken6: Move TemplateInstance/TemplateEntry members into type system parser
These type system elements cannot be nested, so, there is no need to have them in a stack. Task-number: PYSIDE-1766 Change-Id: I4c51a4a9d5dc20eb528086a7fa6108fada6b0a9b Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io> (cherry picked from commit ebd6f9fca7d7fd3390f48159b6c4c860ac823381) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--sources/shiboken6/ApiExtractor/typesystemparser.cpp44
-rw-r--r--sources/shiboken6/ApiExtractor/typesystemparser.h5
2 files changed, 20 insertions, 29 deletions
diff --git a/sources/shiboken6/ApiExtractor/typesystemparser.cpp b/sources/shiboken6/ApiExtractor/typesystemparser.cpp
index 67afc649e..29a42c2cb 100644
--- a/sources/shiboken6/ApiExtractor/typesystemparser.cpp
+++ b/sources/shiboken6/ApiExtractor/typesystemparser.cpp
@@ -892,7 +892,8 @@ bool TypeSystemParser::endElement(QStringView localName)
m_currentEnum = nullptr;
break;
case StackElement::Template:
- m_database->addTemplate(m_current->templateEntry);
+ m_database->addTemplate(m_templateEntry);
+ m_templateEntry = nullptr;
break;
case StackElement::InsertTemplate:
switch (m_current->parent->type) {
@@ -900,37 +901,29 @@ bool TypeSystemParser::endElement(QStringView localName)
if (m_current->parent->parent->type == StackElement::Root) {
CodeSnipList snips = m_current->parent->entry->codeSnips();
CodeSnip snip = snips.takeLast();
- TemplateInstancePtr ti(m_current->templateInstance);
- snip.addTemplateInstance(ti);
+ snip.addTemplateInstance(m_templateInstance);
snips.append(snip);
m_current->parent->entry->setCodeSnips(snips);
break;
}
Q_FALLTHROUGH();
case StackElement::NativeToTarget:
- case StackElement::AddConversion: {
- TemplateInstancePtr ti(m_current->templateInstance);
- m_contextStack.top()->codeSnips.last().addTemplateInstance(ti);
- }
+ case StackElement::AddConversion:
+ m_contextStack.top()->codeSnips.last().addTemplateInstance(m_templateInstance);
break;
- case StackElement::Template: {
- TemplateInstancePtr ti(m_current->templateInstance);
- m_current->parent->templateEntry->addTemplateInstance(ti);
- }
+ case StackElement::Template:
+ m_templateEntry->addTemplateInstance(m_templateInstance);
break;
- case StackElement::ConversionRule: {
- TemplateInstancePtr ti(m_current->templateInstance);
- m_contextStack.top()->functionMods.last().argument_mods().last().conversionRules().last().addTemplateInstance(ti);
- }
+ case StackElement::ConversionRule:
+ m_contextStack.top()->functionMods.last().argument_mods().last().conversionRules().last().addTemplateInstance(m_templateInstance);
break;
- case StackElement::InjectCodeInFunction: {
- TemplateInstancePtr ti(m_current->templateInstance);
- m_contextStack.top()->functionMods.last().snips().last().addTemplateInstance(ti);
- }
+ case StackElement::InjectCodeInFunction:
+ m_contextStack.top()->functionMods.last().snips().last().addTemplateInstance(m_templateInstance);
break;
default:
break; // nada
}
+ m_templateInstance.reset();
break;
default:
break;
@@ -965,7 +958,7 @@ bool TypeSystemParser::characters(const String &ch)
return true;
if (m_current->type == StackElement::Template) {
- m_current->templateEntry->addCode(ch);
+ m_templateEntry->addCode(ch);
return true;
}
@@ -2794,7 +2787,7 @@ TemplateInstance *
bool TypeSystemParser::parseReplace(const ConditionalStreamReader &,
const StackElement &topElement,
- StackElement *element, QXmlStreamAttributes *attributes)
+ StackElement *, QXmlStreamAttributes *attributes)
{
if (topElement.type != StackElement::InsertTemplate) {
m_error = QLatin1String("Can only insert replace rules into insert-template.");
@@ -2809,7 +2802,7 @@ bool TypeSystemParser::parseReplace(const ConditionalStreamReader &,
else if (name == toAttribute())
to = attributes->takeAt(i).value().toString();
}
- element->parent->templateInstance->addReplaceRule(from, to);
+ m_templateInstance->addReplaceRule(from, to);
return true;
}
@@ -3241,14 +3234,13 @@ bool TypeSystemParser::startElement(const ConditionalStreamReader &reader)
m_error = msgMissingAttribute(nameAttribute());
return false;
}
- element->templateEntry =
+ m_templateEntry =
new TemplateEntry(attributes.takeAt(nameIndex).value().toString());
}
break;
case StackElement::InsertTemplate:
- element->templateInstance =
- parseInsertTemplate(reader, topElement, &attributes);
- if (!element->templateInstance)
+ m_templateInstance.reset(parseInsertTemplate(reader, topElement, &attributes));
+ if (m_templateInstance.isNull())
return false;
break;
case StackElement::Replace:
diff --git a/sources/shiboken6/ApiExtractor/typesystemparser.h b/sources/shiboken6/ApiExtractor/typesystemparser.h
index 62b0aeb0c..36bff8f21 100644
--- a/sources/shiboken6/ApiExtractor/typesystemparser.h
+++ b/sources/shiboken6/ApiExtractor/typesystemparser.h
@@ -126,9 +126,6 @@ class StackElement
TypeEntry* entry;
ElementType type;
StackElement *parent;
-
- TemplateInstance *templateInstance = nullptr;
- TemplateEntry *templateEntry = nullptr;
};
struct StackElementContext
@@ -269,6 +266,8 @@ private:
const TypeEntry::CodeGeneration m_generate;
EnumTypeEntry* m_currentEnum = nullptr;
+ TemplateInstancePtr m_templateInstance;
+ TemplateEntry *m_templateEntry = nullptr;
QStack<StackElementContext*> m_contextStack;
QString m_currentSignature;