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

📄 qscriptvalueimpl_p.h

📁 奇趣公司比较新的qt/emd版本
💻 H
📖 第 1 页 / 共 2 页
字号:
inline bool QScriptValueImpl::resolve(QScriptNameIdImpl *nameId, QScript::Member *member,                               QScriptValueImpl *object, QScriptValue::ResolveFlags mode) const{    Q_ASSERT(isValid());    Q_ASSERT(isObject());    Q_ASSERT(member);    Q_ASSERT(object);    Q_ASSERT(nameId->unique);    QScriptObject *object_data = m_object_value;    // Search in properties...    if (object_data->findMember(nameId, member)) {        *object = *this;        return true;    }    return resolve_helper(nameId, member, object, mode);}inline void QScriptValueImpl::get(const QScript::Member &member, QScriptValueImpl *obj) const{    Q_ASSERT(obj);    Q_ASSERT(isObject());    Q_ASSERT(member.isValid());    if (! member.isObjectProperty()) {        get_helper(member, obj);        return;    }    Q_ASSERT(member.id() >= 0);    Q_ASSERT(member.id() < m_object_value->memberCount());    Q_ASSERT(member.nameId());    Q_ASSERT(member.nameId()->unique);    m_object_value->get(member, obj);}inline void QScriptValueImpl::get(QScriptNameIdImpl *nameId, QScriptValueImpl *out){    QScript::Member m;    QScriptValueImpl o;    if (resolve(nameId, &m, &o, QScriptValue::ResolvePrototype))        o.get(m, out);    else        QScriptEnginePrivate::get(engine())->newUndefined(out);}inline void QScriptValueImpl::get_helper(const QScript::Member &member, QScriptValueImpl *obj) const{    QScriptEnginePrivate *eng = QScriptEnginePrivate::get(engine());    if (member.nameId() == eng->idTable()->id___proto__) {        *obj = prototype();        if (!obj->isValid())            eng->newUndefined(obj);        return;    }    if (QScriptClassData *data = classInfo()->data()) {        if (data->get(*this, member, obj))            return;    }    obj->invalidate();    if (! isFunction()) {        return;    } else if (member.nameId() == eng->idTable()->id_length) {        QScriptFunction *foo = eng->convertToNativeFunction(*this);        Q_ASSERT(foo != 0);        eng->newNumber(obj, foo->length);    } else if (member.nameId() == eng->idTable()->id_arguments) {        eng->newNull(obj);    }/* else if (member.nameId() == eng->idTable()->id___fileName__) {        QScriptFunction *foo = eng->convertToNativeFunction(*this);        Q_ASSERT(foo != 0);        return eng->newString(obj, foo->fileName());    }*/}inline void QScriptValueImpl::put(const QScript::Member &member, const QScriptValueImpl &object){    Q_ASSERT(isObject());    Q_ASSERT(member.isValid());    // Q_ASSERT(member.isWritable());    QScriptEnginePrivate *eng_p = QScriptEnginePrivate::get(engine());    if (member.isObjectProperty()) {        Q_ASSERT(member.nameId()->unique);        Q_ASSERT(member.id() >= 0);        Q_ASSERT(member.id() < m_object_value->memberCount());        m_object_value->put(member, object);    }    else if (member.nameId() == eng_p->idTable()->id___proto__) {        if (object.isNull()) // only Object.prototype.__proto__ can be null            setPrototype(eng_p->undefinedValue());        else {            QScriptValueImpl was = prototype();            setPrototype(object);            if (detectedCycle()) {                eng_p->currentContext()->throwError(QLatin1String("cycle in prototype chain"));                setPrototype(was);            }        }    }    else {        Q_ASSERT(classInfo()->data());        classInfo()->data()->put(this, member, object);    }}inline void QScriptValueImpl::setQObjectValue(QObject *object){#ifndef QT_NO_QOBJECT    Q_ASSERT(isQObject());    QScript::ExtQObject *ctor = QScriptEnginePrivate::get(engine())->qobjectConstructor;    Q_ASSERT(ctor != 0);    QScript::ExtQObject::Instance *data = ctor->get(*this);    Q_ASSERT(data != 0);    data->value = object;#else    Q_UNUSED(object);#endif}inline QVariant &QScriptValueImpl::variantValue() const{    Q_ASSERT(isVariant());    QScript::Ext::Variant *ctor = QScriptEnginePrivate::get(engine())->variantConstructor;    Q_ASSERT(ctor != 0);    QScript::Ext::Variant::Instance *data = ctor->get(*this);    Q_ASSERT(data != 0);    return data->value;}inline void QScriptValueImpl::setVariantValue(const QVariant &value){    if (!isVariant())        return;    QScript::Ext::Variant *ctor = QScriptEnginePrivate::get(engine())->variantConstructor;    Q_ASSERT(ctor != 0);    QScript::Ext::Variant::Instance *data = ctor->get(*this);    Q_ASSERT(data != 0);    data->value = value;}inline QScriptValueImpl QScriptValueImpl::internalValue() const{    Q_ASSERT(isObject());    return m_object_value->m_internalValue;}inline void QScriptValueImpl::setInternalValue(const QScriptValueImpl &internalValue){    Q_ASSERT(isObject());    m_object_value->m_internalValue = internalValue;}inline void QScriptValueImpl::removeMember(const QScript::Member &member){    if (member.isObjectProperty())        m_object_value->removeMember(member);    else if (QScriptClassData *data = m_class->data())        data->removeMember(*this, member);}inline void QScriptValueImpl::createMember(QScriptNameIdImpl *nameId,                                    QScript::Member *member, uint flags){    Q_ASSERT(isObject());    QScriptObject *object_data = m_object_value;    object_data->createMember(nameId, member, flags);    Q_ASSERT(member->isObjectProperty());}inline QScriptValueImpl QScriptValueImpl::scope() const{    Q_ASSERT(isObject());    return m_object_value->m_scope;}inline void QScriptValueImpl::setScope(const QScriptValueImpl &scope){    Q_ASSERT(isObject());    m_object_value->m_scope = scope;}inline int QScriptValueImpl::memberCount() const{    Q_ASSERT(isObject());    int count = m_object_value->memberCount();    if (m_class->data())        count += m_class->data()->extraMemberCount(*this);    return count;}inline void QScriptValueImpl::member(int index, QScript::Member *member) const{    Q_ASSERT(isObject());    if (QScriptClassData *data = m_class->data()) {        int extra = data->extraMemberCount(*this);        if (index < extra) {            data->extraMember(*this, index, member);            return;        }        index -= extra;    }    m_object_value->member(index, member);}inline QScriptFunction *QScriptValueImpl::toFunction() const{    if (!isFunction())        return 0;    return QScriptEnginePrivate::get(engine())->convertToNativeFunction(*this);}inline QScriptValueImpl QScriptValueImpl::property(QScriptNameIdImpl *nameId,                                            const QScriptValue::ResolveFlags &mode) const{    if (!isObject())        return QScriptValueImpl();    QScriptValueImpl base;    QScript::Member member;    if (! resolve(nameId, &member, &base, mode))        return QScriptValueImpl();    QScriptValueImpl value;    base.get(nameId, &value);    if (member.isGetterOrSetter()) {        QScriptValueImpl getter;        if (member.isObjectProperty() && !member.isGetter()) {            if (!base.m_object_value->findGetter(&member))                return QScriptValueImpl();        }        base.get(member, &getter);        value = getter.call(*this);    }    return value;}inline void QScriptValueImpl::setProperty(const QString &name, const QScriptValueImpl &value,                                   const QScriptValue::PropertyFlags &flags){    if (!isObject())        return;    QScriptNameIdImpl *nameId = QScriptEnginePrivate::get(engine())->nameId(name);    setProperty(nameId, value, flags);}inline QScriptValueImpl QScriptValueImpl::property(const QString &name,                                            const QScriptValue::ResolveFlags &mode) const{    if (!isObject())        return QScriptValueImpl();    QScriptNameIdImpl *nameId = QScriptEnginePrivate::get(engine())->nameId(name);    return property(nameId, mode);}inline QScriptValueImpl QScriptValueImpl::property(quint32 arrayIndex,                                            const QScriptValue::ResolveFlags &mode) const{    if (!isObject())        return QScriptValueImpl();    QScriptEnginePrivate *eng_p = QScriptEnginePrivate::get(engine());    QScript::Ecma::Array::Instance *instance = eng_p->arrayConstructor->get(*this);    if (instance)        return instance->value.at(arrayIndex);    QScriptValueImpl id;    eng_p->newNumber(&id, arrayIndex);    return property(id.toString(), mode);}inline void QScriptValueImpl::setProperty(quint32 arrayIndex, const QScriptValueImpl &value,                                   const QScriptValue::PropertyFlags &flags){    if (!isObject())        return;    QScriptEnginePrivate *eng_p = QScriptEnginePrivate::get(engine());    QScript::Ecma::Array::Instance *instance = eng_p->arrayConstructor->get(*this);    if (instance) {        instance->value.assign(arrayIndex, value);        return;    }    QScriptValueImpl id;    eng_p->newNumber(&id, arrayIndex);    setProperty(id.toString(), value, flags);}inline QScriptValue::PropertyFlags QScriptValueImpl::propertyFlags(const QString &name,                                                const QScriptValue::ResolveFlags &mode) const{    if (!isObject())        return 0;    QScriptNameIdImpl *nameId = QScriptEnginePrivate::get(engine())->nameId(name);    QScriptValueImpl base;    QScript::Member member;    if (! resolve(nameId, &member, &base, mode))        return 0;    return QScriptValue::PropertyFlags(member.flags() & ~QScript::Member::InternalRange);}inline bool QScriptValueImpl::deleteProperty(QScriptNameIdImpl *nameId,                                             const QScriptValue::ResolveFlags &mode){    if (!isObject())        return true;    QScript::Member member;    QScriptValueImpl base;    if (resolve(nameId, &member, &base, mode)) {        if (!member.isDeletable())            return false;        base.removeMember(member);        if (member.isGetterOrSetter() && (member.isGetter() != member.isSetter())) {            // delete the "other half" of the property too (getter or setter)            return deleteProperty(nameId, mode);        }    }    return true;}inline QScriptValueImpl QScriptValueImpl::call(const QScriptValueImpl &thisObject,                                               const QScriptValueImplList &args){    if (!isFunction())        return QScriptValueImpl();    QScriptEngine *eng = engine();    QScriptEnginePrivate *eng_p = QScriptEnginePrivate::get(eng);    return eng_p->call(*this, thisObject, args, /*asConstructor=*/false);}inline QScriptValueImpl QScriptValueImpl::call(const QScriptValueImpl &thisObject,                                               const QScriptValueImpl &args){    if (!isFunction())        return QScriptValueImpl();    QScriptEngine *eng = engine();    QScriptEnginePrivate *eng_p = QScriptEnginePrivate::get(eng);    return eng_p->call(*this, thisObject, args, /*asConstructor=*/false);}inline QScriptValueImpl QScriptValueImpl::construct(const QScriptValueImplList &args){    if (!isFunction())        return QScriptValueImpl();    QScriptEngine *eng = engine();    QScriptEnginePrivate *eng_p = QScriptEnginePrivate::get(eng);    QScriptValueImpl proto = property(QLatin1String("prototype"), QScriptValue::ResolveLocal);    QScriptValueImpl object;    eng_p->newObject(&object, proto);    QScriptValueImpl result = eng_p->call(*this, object, args, /*asConstructor=*/true);    if (result.isObject())        return result;    return object;}inline QScriptValueImpl QScriptValueImpl::construct(const QScriptValueImpl &args){    if (!isFunction())        return QScriptValueImpl();    QScriptEngine *eng = engine();    QScriptEnginePrivate *eng_p = QScriptEnginePrivate::get(eng);    QScriptValueImpl proto = property(QLatin1String("prototype"), QScriptValue::ResolveLocal);    QScriptValueImpl object;    eng_p->newObject(&object, proto);    QScriptValueImpl result = eng_p->call(*this, object, args, /*asConstructor=*/true);    if (result.isObject())        return result;    return object;}inline void QScriptValueImpl::mark(int generation) const{    if (! isValid())        return;    else if (isString())        QScriptEnginePrivate::get(engine())->markString(m_string_value, generation);    else if (isObject())        QScriptEnginePrivate::get(engine())->markObject(*this, generation);}inline bool QScriptValueImpl::lessThan(const QScriptValueImpl &other) const{    if (!isValid() || !other.isValid())        return false;    QScriptEnginePrivate *eng_p = QScriptEnginePrivate::get(engine());    return eng_p->lessThan(*this, other);}inline bool QScriptValueImpl::equals(const QScriptValueImpl &other) const{    if (!isValid() || !other.isValid())        return isValid() == other.isValid();    QScriptEnginePrivate *eng_p = QScriptEnginePrivate::get(engine());    return eng_p->equals(*this, other);}inline bool QScriptValueImpl::strictlyEquals(const QScriptValueImpl &other) const{    if (!isValid() || !other.isValid())        return isValid() == other.isValid();    QScriptEnginePrivate *eng_p = QScriptEnginePrivate::get(engine());    return eng_p->strictlyEquals(*this, other);}#endif // QT_NO_SCRIPT#endif

⌨️ 快捷键说明

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