⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qscriptecmaarray.cpp

📁 奇趣公司比较新的qt/emd版本
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    if (! r2)        return QScriptValueImpl(eng, QString());    QString R;    QScriptValueImpl r6 = self.property(QLatin1String("0"));    if (r6.isValid() && !(r6.isUndefined() || r6.isNull()))        R = r6.toString();    for (quint32 k = 1; k < r2; ++k) {        R += r4;        QScriptNameIdImpl *name = eng->nameId(QScriptValueImpl(eng, k).toString());        QScriptValueImpl r12 = self.property(name);        if (r12.isValid() && ! (r12.isUndefined() || r12.isNull()))            R += r12.toString();    }    return QScriptValueImpl(eng, R);}QScriptValueImpl Array::method_pop(QScriptContextPrivate *context,                                   QScriptEnginePrivate *eng,                                   QScriptClassInfo *classInfo){    QScriptValueImpl self = context->thisObject();    if (Instance *instance = Instance::get(self, classInfo)) {        QScriptValueImpl elt = instance->value.pop();        if (! elt.isValid())            elt = eng->undefinedValue();        return elt;    }    QScriptNameIdImpl *id_length = eng->idTable()->id_length;    QScriptValueImpl r1 = self.property(id_length);    quint32 r2 = r1.toUInt32();    if (! r2) {        self.setProperty(id_length, QScriptValueImpl(eng, 0));        return eng->undefinedValue();    }    QScriptNameIdImpl *r6 = eng->nameId(QScriptValueImpl(eng, r2 - 1).toString());    QScriptValueImpl r7 = self.property(r6);    self.deleteProperty(r6);    self.setProperty(id_length, QScriptValueImpl(eng, r2 - 1));    if (!r7.isValid())        return eng->undefinedValue();    return r7;}QScriptValueImpl Array::method_push(QScriptContextPrivate *context,                                    QScriptEnginePrivate *eng,                                    QScriptClassInfo *classInfo){    QScriptValueImpl self = context->thisObject();    if (Instance *instance = Instance::get(self, classInfo)) {        int pos = instance->value.size();        for (int i = 0; i < context->argumentCount(); ++i) {            instance->value.assign(pos++, context->argument(i));        }        return QScriptValueImpl(eng, instance->value.size());    }    QScriptNameIdImpl *id_length = eng->idTable()->id_length;    QScriptValueImpl r1 = self.property(id_length);    quint32 n = r1.toUInt32();    for (int index = 0; index < context->argumentCount(); ++index, ++n) {        QScriptValueImpl r3 = context->argument(index);        QScriptNameIdImpl *name = eng->nameId(QScriptValueImpl(eng, n).toString());        self.setProperty(name, r3);    }    QScriptValueImpl r(eng, n);    self.setProperty(id_length, r);    return r;}QScriptValueImpl Array::method_reverse(QScriptContextPrivate *context,                                       QScriptEnginePrivate *eng,                                       QScriptClassInfo *classInfo){    QScriptValueImpl self = context->thisObject();    if (Instance *instance = Instance::get(self, classInfo)) {        int lo = 0, hi = instance->value.count () - 1;        for (; lo < hi; ++lo, --hi) {            QScriptValueImpl tmp = instance->value.at(lo);            instance->value.assign(lo, instance->value.at(hi));            instance->value.assign(hi, tmp);        }    } else {        QScriptNameIdImpl *id_length = eng->idTable()->id_length;        QScriptValueImpl lengthValue = self.property(id_length);        quint32 length = 0;        if (lengthValue.isValid())            length = QScriptEnginePrivate::toUint32(lengthValue.toNumber());        const quint32 m = length / 2;        for (quint32 i = 0; i < m; ++i) {            quint32 j = length - i - 1;            QScriptNameIdImpl *iid = eng->nameId(QScriptValueImpl(eng, i).toString());            QScriptNameIdImpl *jid = eng->nameId(QScriptValueImpl(eng, j).toString());            QScript::Member imember;            QScriptValueImpl ibase;            QScriptValueImpl ival;            bool iok = self.resolve(iid, &imember, &ibase, QScriptValue::ResolvePrototype);            if (iok)                ibase.get(iid, &ival);            else                ival = eng->undefinedValue();            QScript::Member jmember;            QScriptValueImpl jbase;            QScriptValueImpl jval;            bool jok = self.resolve(jid, &jmember, &jbase, QScriptValue::ResolvePrototype);            if (jok)                jbase.get(jid, &jval);            else                jval = eng->undefinedValue();            if (!jok) {                if (iok) {                    if (ibase.strictlyEquals(self))                        ibase.removeMember(imember);                    self.setProperty(jid, ival);                }            } else if (!iok) {                self.setProperty(iid, jval);                if (jbase.strictlyEquals(self))                    jbase.removeMember(jmember);            } else {                if (self.strictlyEquals(ibase))                    self.put(imember, jval);                else                    self.setProperty(iid, jval);                if (self.strictlyEquals(jbase))                    self.put(jmember, ival);                else                    self.setProperty(jid, ival);            }        }    }    return context->thisObject();}QScriptValueImpl Array::method_shift(QScriptContextPrivate *context,                                     QScriptEnginePrivate *eng,                                     QScriptClassInfo *){    QScriptNameIdImpl *id_length = eng->idTable()->id_length;    QScriptValueImpl self = context->thisObject();    quint32 length = self.property(id_length).toUInt32();    if (length == 0) {        self.setProperty(id_length, QScriptValueImpl(eng, 0));        return eng->undefinedValue();    }    QScript::Member member;    QScriptValueImpl base;    QScriptValueImpl result = self.property(QLatin1String("0"));    if (! result.isValid())        result = eng->undefinedValue();    for (quint32 index = 1; index < length; ++index) {        QScriptNameIdImpl *k = eng->nameId(QScriptValueImpl(eng, index).toString());        QScriptNameIdImpl *k1 = eng->nameId(QScriptValueImpl(eng, index - 1).toString());        QScriptValueImpl v = self.property(k);        QScriptValueImpl v1 = self.property(k1);        if (v.isValid())            self.setProperty(k1, v);        else if (v1.isValid() && self.resolve(k1, &member, &base, QScriptValue::ResolveLocal))            self.removeMember(member);    }    QScriptValueImpl len = QScriptValueImpl(eng, length - 1);    if (self.resolve(eng->nameId(len.toString()), &member, &base, QScriptValue::ResolveLocal))        self.removeMember(member);    self.setProperty(id_length, len);    return (result);}QScriptValueImpl Array::method_slice(QScriptContextPrivate *context,                                     QScriptEnginePrivate *eng,                                     QScriptClassInfo *){    QScript::Array result;    QScriptValueImpl start = context->argument(0);    QScriptValueImpl end = context->argument(1);    QScriptValueImpl self = context->thisObject();    QScriptNameIdImpl *id_length = eng->idTable()->id_length;    qsreal r2 = self.property(id_length).toNumber();    quint32 r3 = QScriptEnginePrivate::toUint32(r2);    qint32 r4 = qint32 (start.toInteger());    quint32 r5 = r4 < 0 ? qMax(quint32(r3 + r4), quint32(0)) : qMin(quint32(r4), r3);    quint32 k = r5;    qint32 r7 = end.isUndefined() ? r3 : qint32 (end.toInteger());    quint32 r8 = r7 < 0 ? qMax(quint32(r3 + r7), quint32(0)) : qMin(quint32(r7), r3);    quint32 n = 0;    for (; k < r8; ++k) {        QString r11 = QScriptValueImpl(eng, k).toString();        QScriptValueImpl v = self.property(r11);        if (v.isValid())            result.assign(n++, v);    }    return eng->newArray(result);}QScriptValueImpl Array::method_sort(QScriptContextPrivate *context,                                    QScriptEnginePrivate *,                                    QScriptClassInfo *classInfo){    QScriptValueImpl self = context->thisObject();    QScriptValueImpl comparefn = context->argument(0);    if (Instance *instance = Instance::get(self, classInfo)) {        instance->value.sort(comparefn);        return context->thisObject();    }    return context->throwNotImplemented(QLatin1String("Array.prototype.sort"));}QScriptValueImpl Array::method_splice(QScriptContextPrivate *context,                                      QScriptEnginePrivate *eng,                                      QScriptClassInfo *classInfo){    if (context->argumentCount() < 2)        return eng->undefinedValue();    QScriptValueImpl self = context->thisObject();    qsreal start = context->argument(0).toInteger();    qsreal deleteCount = context->argument(1).toInteger();    QScriptValueImpl arrayCtor = eng->globalObject().property(QLatin1String("Array"));    QScriptValueImpl a = arrayCtor.construct();    if (Instance *instance = Instance::get(self, classInfo)) {        QVector<QScriptValueImpl> items;        for (int i = 2; i < context->argumentCount(); ++i)            items << context->argument(i);        Instance *otherInstance = Instance::get(a, classInfo);        Q_ASSERT(otherInstance);        instance->value.splice(start, deleteCount, items, otherInstance->value);        return a;    }    return context->throwNotImplemented(QLatin1String("Array.prototype.splice"));}QScriptValueImpl Array::method_unshift(QScriptContextPrivate *context,                                       QScriptEnginePrivate *eng,                                       QScriptClassInfo *){    QScriptValueImpl self = context->thisObject();    QScriptNameIdImpl *id_length = eng->idTable()->id_length;    QScriptValueImpl r1 = self.property(id_length);    quint32 r2 = r1.isValid() ? QScriptEnginePrivate::toUint32(r1.toNumber()) : 0;    quint32 r3 = quint32 (context->argumentCount());    quint32 k = r2;    for (; k != 0; --k) {        QScriptNameIdImpl *r6 = eng->nameId(QScriptValueImpl(eng, k - 1).toString());        QScriptNameIdImpl *r7 = eng->nameId(QScriptValueImpl(eng, k + r3 - 1).toString());        QScriptValueImpl r8 = self.property(r6);        if (r8.isValid())            self.setProperty(r7, r8);        else {            QScript::Member member;            QScriptValueImpl base;            if (self.resolve(r7, &member, &base, QScriptValue::ResolveLocal))                self.removeMember(member);        }    }    for (k = 0; k < r3; ++k) {        QScriptValueImpl r16 = context->argument(k);        QScriptNameIdImpl *r17 = eng->nameId(QScriptValueImpl(eng, k).toString());        self.setProperty(r17, r16);    }    QScriptValueImpl r(eng, r2 + r3);    self.setProperty(id_length, r);    return (r);}Array::Instance *Array::Instance::get(const QScriptValueImpl &object, QScriptClassInfo *klass){    if (! klass || klass == object.classInfo())        return static_cast<Instance*> (object.objectData().data());    return 0;}} } // namespace QScript::Ecma#endif // QT_NO_SCRIPT

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -