The "values" of "special" refs are always JavaScript "undefined"s.
Thus, when trying to deduplicate an actual "undefined" we'd
accidentally hit the special refs. Avoid this by checking if a found
ref is special.
In an ideal world we'd get rid of the special refs altogether and
save QV4::FunctionObject in the values array, but that is not quite
trivial as long as the QV4::ExecutionEngine::stackTrace() doesn't
give us FunctionObjects.
Task-number: QTBUG-47788
Change-Id: Idf358c285f40930220fad2207c6ab5c9101573b2
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
QV4::ScopedObject array(scope, values.value());
if (deduplicate) {
for (Ref i = 0; i < array->getLength(); ++i) {
- if (array->getIndexed(i) == value.rawValue())
+ if (array->getIndexed(i) == value.rawValue() && !specialRefs.contains(i))
return i;
}
}