diff options
| author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2022-09-20 12:45:17 +0200 |
|---|---|---|
| committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2022-09-21 15:45:49 +0200 |
| commit | c5f2631bdfc1ba4e5fd87375c59227681964654c (patch) | |
| tree | 161d4277a40a0642227148889e433b49ad38c23f /sources/shiboken6/generator/defaultvalue.cpp | |
| parent | a03ac672ade3492e6cbefc875e5911c0ec2a5ac9 (diff) | |
shiboken6: Clean up header generator.h
- Split classes GeneratorContext and DefaultValue out
- Rearrange forward declarations
Change-Id: I72e69468ce3726e2c75a4a66c75cc5bf421da055
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
Diffstat (limited to 'sources/shiboken6/generator/defaultvalue.cpp')
| -rw-r--r-- | sources/shiboken6/generator/defaultvalue.cpp | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/sources/shiboken6/generator/defaultvalue.cpp b/sources/shiboken6/generator/defaultvalue.cpp new file mode 100644 index 000000000..c3983a2e3 --- /dev/null +++ b/sources/shiboken6/generator/defaultvalue.cpp @@ -0,0 +1,120 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +#include "defaultvalue.h" + +#include "qtcompat.h" + +#include <QtCore/QDebug> + +using namespace Qt::StringLiterals; + +// DefaultValue is used for storing default values of types for which code is +// generated in different contexts: +// +// Context | Example: "Class *" | Example: "Class" with default Constructor +// --------------------+-------------------------------+------------------------------------------ +// Variable | var{nullptr}; | var; +// initializations | | +// --------------------+-------------------------------+------------------------------------------ +// Return values | return nullptr; | return {} +// --------------------+-------------------------------+------------------------------------------ +// constructor | static_cast<Class *>(nullptr) | Class() +// arguments lists | | +// (recursive, precise | | +// matching). | | + +DefaultValue::DefaultValue(Type t, QString value) : + m_type(t), m_value(std::move(value)) +{ +} + +DefaultValue::DefaultValue(QString customValue) : + m_type(Custom), m_value(std::move(customValue)) +{ +} + +QString DefaultValue::returnValue() const +{ + switch (m_type) { + case DefaultValue::Boolean: + return u"false"_s; + case DefaultValue::CppScalar: + return u"0"_s; + case DefaultValue::Custom: + case DefaultValue::Enum: + return m_value; + case DefaultValue::Pointer: + return u"nullptr"_s; + case DefaultValue::Void: + return QString(); + case DefaultValue::DefaultConstructorWithDefaultValues: + return m_value + u"()"_s; + case DefaultValue::DefaultConstructor: + break; + } + return u"{}"_s; +} + +QString DefaultValue::initialization() const +{ + switch (m_type) { + case DefaultValue::Boolean: + return u"{false}"_s; + case DefaultValue::CppScalar: + return u"{0}"_s; + case DefaultValue::Custom: + return u" = "_s + m_value; + case DefaultValue::Enum: + return u'{' + m_value + u'}'; + case DefaultValue::Pointer: + return u"{nullptr}"_s; + case DefaultValue::Void: + Q_ASSERT(false); + break; + case DefaultValue::DefaultConstructor: + case DefaultValue::DefaultConstructorWithDefaultValues: + break; + } + return QString(); +} + +QString DefaultValue::constructorParameter() const +{ + switch (m_type) { + case DefaultValue::Boolean: + return u"false"_s; + case DefaultValue::CppScalar: { + // PYSIDE-846: Use static_cast in case of "unsigned long" and similar + const QString cast = m_value.contains(u' ') + ? u"static_cast<"_s + m_value + u'>' + : m_value; + return cast + u"(0)"_s; + } + case DefaultValue::Custom: + case DefaultValue::Enum: + return m_value; + case DefaultValue::Pointer: + // Be precise here to be able to differentiate between constructors + // taking different pointer types, cf + // QTreeWidgetItemIterator(QTreeWidget *) and + // QTreeWidgetItemIterator(QTreeWidgetItemIterator *). + return u"static_cast<"_s + m_value + u"*>(nullptr)"_s; + case DefaultValue::Void: + Q_ASSERT(false); + break; + case DefaultValue::DefaultConstructor: + case DefaultValue::DefaultConstructorWithDefaultValues: + break; + } + return m_value + u"()"_s; +} + +QDebug operator<<(QDebug debug, const DefaultValue &v) +{ + QDebugStateSaver saver(debug); + debug.noquote(); + debug.nospace(); + debug << "DefaultValue(" << v.type() << ", \"" << v.value() << "\")"; + return debug; +} |
