make split_value_list() take a QStringRef as input

this also saves some of the cheap but ugly toQString() calls.

Change-Id: Iebe644986501db3878306521c76e4ba2c2fb97b4
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
(cherry picked from qtbase/981f8ad2e4bc46d9a06dab0cbc32a7da755ececb)
Reviewed-by: Jake Petroules <jake.petroules@qt.io>
This commit is contained in:
Oswald Buddenhagen
2016-05-13 15:40:00 +02:00
parent b7706cdfeb
commit 1d8ae55a57
3 changed files with 12 additions and 10 deletions

View File

@@ -538,7 +538,7 @@ ProStringList QMakeEvaluator::evaluateBuiltinExpand(
bool leftalign = false; bool leftalign = false;
enum { DefaultSign, PadSign, AlwaysSign } sign = DefaultSign; enum { DefaultSign, PadSign, AlwaysSign } sign = DefaultSign;
if (args.count() >= 2) { if (args.count() >= 2) {
const auto opts = split_value_list(args.at(1).toQString(m_tmp2)); const auto opts = split_value_list(args.at(1).toQStringRef());
for (const ProString &opt : opts) { for (const ProString &opt : opts) {
opt.toQString(m_tmp3); opt.toQString(m_tmp3);
if (m_tmp3.startsWith(QLatin1String("ibase="))) { if (m_tmp3.startsWith(QLatin1String("ibase="))) {
@@ -732,7 +732,8 @@ ProStringList QMakeEvaluator::evaluateBuiltinExpand(
if (lines) { if (lines) {
ret += ProString(stream.readLine()); ret += ProString(stream.readLine());
} else { } else {
ret += split_value_list(stream.readLine().trimmed()); const QString &line = stream.readLine();
ret += split_value_list(QStringRef(&line).trimmed());
if (!singleLine) if (!singleLine)
ret += ProString("\n"); ret += ProString("\n");
} }
@@ -764,7 +765,7 @@ ProStringList QMakeEvaluator::evaluateBuiltinExpand(
ret = ProStringList(ProString(tmp)); ret = ProStringList(ProString(tmp));
ProStringList lst; ProStringList lst;
for (const ProString &arg : args) for (const ProString &arg : args)
lst += split_value_list(arg.toQString(m_tmp1), arg.sourceFile()); // Relies on deep copy lst += split_value_list(arg.toQStringRef(), arg.sourceFile()); // Relies on deep copy
m_valuemapStack.top()[ret.at(0).toKey()] = lst; m_valuemapStack.top()[ret.at(0).toKey()] = lst;
break; } break; }
case E_FIND: case E_FIND:
@@ -811,7 +812,7 @@ ProStringList QMakeEvaluator::evaluateBuiltinExpand(
output.replace(QLatin1Char('\t'), QLatin1Char(' ')); output.replace(QLatin1Char('\t'), QLatin1Char(' '));
if (singleLine) if (singleLine)
output.replace(QLatin1Char('\n'), QLatin1Char(' ')); output.replace(QLatin1Char('\n'), QLatin1Char(' '));
ret += split_value_list(output); ret += split_value_list(QStringRef(&output));
} }
} }
} }
@@ -960,7 +961,8 @@ ProStringList QMakeEvaluator::evaluateBuiltinExpand(
QFile qfile; QFile qfile;
if (qfile.open(stdin, QIODevice::ReadOnly)) { if (qfile.open(stdin, QIODevice::ReadOnly)) {
QTextStream t(&qfile); QTextStream t(&qfile);
ret = split_value_list(t.readLine()); const QString &line = t.readLine();
ret = split_value_list(QStringRef(&line));
} }
} }
break; } break; }
@@ -994,7 +996,7 @@ ProStringList QMakeEvaluator::evaluateBuiltinExpand(
ProString priosfx = args.count() < 4 ? ProString(".priority") : args.at(3); ProString priosfx = args.count() < 4 ? ProString(".priority") : args.at(3);
populateDeps(orgList, prefix, populateDeps(orgList, prefix,
args.count() < 3 ? ProStringList(ProString(".depends")) args.count() < 3 ? ProStringList(ProString(".depends"))
: split_value_list(args.at(2).toQString(m_tmp2)), : split_value_list(args.at(2).toQStringRef()),
priosfx, dependencies, dependees, rootSet); priosfx, dependencies, dependees, rootSet);
while (!rootSet.isEmpty()) { while (!rootSet.isEmpty()) {
QMultiMap<int, ProString>::iterator it = rootSet.begin(); QMultiMap<int, ProString>::iterator it = rootSet.begin();
@@ -1585,7 +1587,7 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinConditional(
if (!vals.isEmpty()) if (!vals.isEmpty())
contents = vals.join(QLatin1Char('\n')) + QLatin1Char('\n'); contents = vals.join(QLatin1Char('\n')) + QLatin1Char('\n');
if (args.count() >= 3) { if (args.count() >= 3) {
const auto opts = split_value_list(args.at(2).toQString(m_tmp2)); const auto opts = split_value_list(args.at(2).toQStringRef());
for (const ProString &opt : opts) { for (const ProString &opt : opts) {
opt.toQString(m_tmp3); opt.toQString(m_tmp3);
if (m_tmp3 == QLatin1String("append")) { if (m_tmp3 == QLatin1String("append")) {
@@ -1658,7 +1660,7 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinConditional(
enum { CacheSet, CacheAdd, CacheSub } mode = CacheSet; enum { CacheSet, CacheAdd, CacheSub } mode = CacheSet;
ProKey srcvar; ProKey srcvar;
if (args.count() >= 2) { if (args.count() >= 2) {
const auto opts = split_value_list(args.at(1).toQString(m_tmp2)); const auto opts = split_value_list(args.at(1).toQStringRef());
for (const ProString &opt : opts) { for (const ProString &opt : opts) {
opt.toQString(m_tmp3); opt.toQString(m_tmp3);
if (m_tmp3 == QLatin1String("transient")) { if (m_tmp3 == QLatin1String("transient")) {

View File

@@ -267,7 +267,7 @@ void QMakeEvaluator::skipHashStr(const ushort *&tokPtr)
// FIXME: this should not build new strings for direct sections. // FIXME: this should not build new strings for direct sections.
// Note that the E_SPRINTF and E_LIST implementations rely on the deep copy. // Note that the E_SPRINTF and E_LIST implementations rely on the deep copy.
ProStringList QMakeEvaluator::split_value_list(const QString &vals, const ProFile *source) ProStringList QMakeEvaluator::split_value_list(const QStringRef &vals, const ProFile *source)
{ {
QString build; QString build;
ProStringList ret; ProStringList ret;

View File

@@ -172,7 +172,7 @@ public:
void setTemplate(); void setTemplate();
ProStringList split_value_list(const QString &vals, const ProFile *source = 0); ProStringList split_value_list(const QStringRef &vals, const ProFile *source = 0);
VisitReturn expandVariableReferences(const ushort *&tokPtr, int sizeHint, ProStringList *ret, bool joined); VisitReturn expandVariableReferences(const ushort *&tokPtr, int sizeHint, ProStringList *ret, bool joined);
QString currentFileName() const; QString currentFileName() const;