📄 qscriptengine_p.h
字号:
{ return objectAllocator();}inline QScriptContext *QScriptEnginePrivate::currentContext() const{ return m_context;}inline QScriptContext *QScriptEnginePrivate::pushContext(){ QScriptContext *context = m_frameRepository.get(); QScriptContextPrivate::get(context)->init(m_context); m_context = context; return m_context;}inline void QScriptEnginePrivate::popContext(){ Q_ASSERT(m_context != 0); QScriptContext *context = m_context; m_context = context->parentContext(); if (m_context) { // propagate the state QScriptContextPrivate *p1 = QScriptContextPrivate::get(m_context); QScriptContextPrivate *p2 = QScriptContextPrivate::get(context); p1->m_result = p2->m_result; p1->m_state = p2->m_state; // only update errorLineNumber if there actually was an exception if (p2->state() == QScriptContext::ExceptionState) p1->errorLineNumber = p2->errorLineNumber; } m_frameRepository.release(context);}inline void QScriptEnginePrivate::maybeGC(){ if (objectAllocator.blocked()) return; bool do_string_gc = ((m_stringRepository.size() - m_oldStringRepositorySize) > 256); do_string_gc |= ((m_tempStringRepository.size() - m_oldTempStringRepositorySize) > 1024); if (! do_string_gc && ! objectAllocator.poll()) return; maybeGC_helper(do_string_gc);}inline void QScriptEnginePrivate::adjustBytesAllocated(int bytes){ objectAllocator.adjustBytesAllocated(bytes);}inline bool QScriptEnginePrivate::blockGC(bool block){ return objectAllocator.blockGC(block);}inline void QScriptEnginePrivate::markString(QScriptNameIdImpl *id, int /*generation*/){ id->used = true;}inline QScriptValueImpl QScriptEnginePrivate::createFunction(QScriptFunction *fun){ QScriptValueImpl v; newFunction(&v, fun); return v;}inline QScriptValueImpl QScriptEnginePrivate::newArray(const QScript::Array &value){ QScriptValueImpl v; newArray(&v, value); return v;}inline QScriptValueImpl QScriptEnginePrivate::newArray(uint length){ QScriptValueImpl v; QScript::Array a; a.resize(length); newArray(&v, a); return v;}inline QScriptClassInfo *QScriptEnginePrivate::registerClass(const QString &pname, QScript::Type type){ if (type == -1) type = QScript::Type(QScript::ObjectBased | ++m_class_prev_id); QScriptClassInfo *oc = new QScriptClassInfo(); m_allocated_classes.append(oc); oc->m_engine = q_func(); oc->m_type = type; oc->m_name = pname; oc->m_data = 0; m_classes[type] = oc; return oc;}inline QScriptClassInfo *QScriptEnginePrivate::registerClass(const QString &name){ return registerClass(name, QScript::Type(-1));}inline QScriptValueImpl QScriptEnginePrivate::createFunction(QScriptInternalFunctionSignature fun, int length, QScriptClassInfo *classInfo){ return createFunction(new QScript::C2Function(fun, length, classInfo));}inline void QScriptEnginePrivate::newFunction(QScriptValueImpl *o, QScriptFunction *function){ QScriptValueImpl proto; if (functionConstructor) proto = functionConstructor->publicPrototype; else { // creating the Function prototype object Q_ASSERT(objectConstructor); proto = objectConstructor->publicPrototype; } newObject(o, proto, m_class_function); o->setObjectData(QExplicitlySharedDataPointer<QScriptObjectData>(function));}inline void QScriptEnginePrivate::newConstructor(QScriptValueImpl *ctor, QScriptFunction *function, QScriptValueImpl &proto){ newFunction(ctor, function); ctor->setProperty(QLatin1String("prototype"), proto, QScriptValue::Undeletable | QScriptValue::ReadOnly | QScriptValue::SkipInEnumeration); proto.setProperty(QLatin1String("constructor"), *ctor, QScriptValue::Undeletable | QScriptValue::SkipInEnumeration);}inline void QScriptEnginePrivate::newArguments(QScriptValueImpl *object, const QScriptValueImpl &activation, uint length, const QScriptValueImpl &callee){ QScript::ArgumentsObjectData *data = new QScript::ArgumentsObjectData(); data->activation = activation; data->length = length; data->callee = callee; newObject(object, m_class_arguments); object->setObjectData(QExplicitlySharedDataPointer<QScriptObjectData>(data));}inline QScriptFunction *QScriptEnginePrivate::convertToNativeFunction(const QScriptValueImpl &object){ if (object.isFunction()) return static_cast<QScriptFunction*> (object.objectData().data()); return 0;}inline QScriptValueImpl QScriptEnginePrivate::toObject(const QScriptValueImpl &value){ if (value.isObject() || !value.isValid()) return value; return toObject_helper(value);}inline QScriptValueImpl QScriptEnginePrivate::toPrimitive(const QScriptValueImpl &object, QScriptValueImpl::TypeHint hint){ Q_ASSERT(object.isValid()); if (! object.isObject()) return object; return toPrimitive_helper(object, hint);}inline QDateTime QScriptEnginePrivate::toDateTime(const QScriptValueImpl &value) const{ return dateConstructor->toDateTime(value);}inline void QScriptEnginePrivate::newArray(QScriptValueImpl *object, const QScript::Array &value){ arrayConstructor->newArray(object, value);}inline void QScriptEnginePrivate::newObject(QScriptValueImpl *o, const QScriptValueImpl &proto, QScriptClassInfo *oc){ Q_ASSERT(o != 0); QScriptObject *od = allocObject(); od->reset(); if (proto.isValid()) od->m_prototype = proto; else { Q_ASSERT(objectConstructor); od->m_prototype = objectConstructor->publicPrototype; } o->m_class = (oc ? oc : m_class_object); o->m_object_value = od;}inline void QScriptEnginePrivate::newObject(QScriptValueImpl *o, QScriptClassInfo *oc){ newObject(o, objectConstructor->publicPrototype, oc);}inline QScriptValueImpl QScriptEnginePrivate::newObject(){ QScriptValueImpl v; newObject(&v); return v;}inline QScriptValueImpl QScriptEnginePrivate::newVariant(const QVariant &value){ Q_ASSERT(variantConstructor != 0); QScriptValueImpl v; variantConstructor->newVariant(&v, value); QScriptValueImpl proto = defaultPrototype(value.userType()); if (proto.isValid()) v.setPrototype(proto); return v;}#ifndef QT_NO_QOBJECTinline QScriptValueImpl QScriptEnginePrivate::newQObject(QObject *object, QScriptEngine::ValueOwnership ownership, const QScriptEngine::QObjectWrapOptions &options){ if (!object) return nullValue(); Q_ASSERT(qobjectConstructor != 0); QScriptValueImpl v; qobjectConstructor->newQObject(&v, object, ownership, options); // see if we have a default prototype QByteArray typeString = object->metaObject()->className(); typeString.append('*'); int typeId = QMetaType::type(typeString); if (typeId != 0) { QScriptValueImpl proto = defaultPrototype(typeId); if (proto.isValid()) v.setPrototype(proto); } return v;}#ifndef Q_SCRIPT_NO_QMETAOBJECT_CACHEinline QScriptMetaObject *QScriptEnginePrivate::cachedMetaObject(const QMetaObject *meta){ QScriptMetaObject *value = m_cachedMetaObjects.value(meta); if (!value) { value = new QScriptMetaObject; m_cachedMetaObjects.insert(meta, value); } return value;}#endif#endif // !QT_NO_QOBJECTinline QScriptNameIdImpl *QScriptEnginePrivate::nameId(const QString &str, bool persistent){ QScriptNameIdImpl *entry = toStringEntry(str); if (! entry) entry = insertStringEntry(str); Q_ASSERT(entry->unique); if (persistent) entry->persistent = true; return entry;}inline QScriptNameIdImpl *QScriptEnginePrivate::intern(const QChar *u, int s){ QString tmp(u, s); return nameId(tmp, /*persistent=*/ true);}inline QScriptValueImpl QScriptEnginePrivate::valueFromVariant(const QVariant &v){ QScriptValueImpl result = create(v.userType(), v.data()); if (!result.isValid()) result = newVariant(v); return result;}inline QScriptValueImpl QScriptEnginePrivate::undefinedValue(){ QScriptValueImpl v; newUndefined(&v); return v;}inline QScriptValueImpl QScriptEnginePrivate::nullValue(){ QScriptValueImpl v; newNull(&v); return v;}inline QScriptValueImpl QScriptEnginePrivate::defaultPrototype(int metaTypeId) const{ QScriptCustomTypeInfo info = m_customTypes.value(metaTypeId); return info.prototype;}inline void QScriptEnginePrivate::setDefaultPrototype(int metaTypeId, const QScriptValueImpl &prototype){ QScriptCustomTypeInfo info = m_customTypes.value(metaTypeId); info.prototype = prototype; m_customTypes.insert(metaTypeId, info);}inline uint _q_scriptHash(const QString &key){ const QChar *p = key.unicode(); int n = qMin(key.size(), 128); uint h = key.size(); uint g; while (n--) { h = (h << 4) + (*p++).unicode(); if ((g = (h & 0xf0000000)) != 0) h ^= g >> 23; h &= ~g; } return h;}inline QScriptNameIdImpl *QScriptEnginePrivate::toStringEntry(const QString &s){ uint h = _q_scriptHash(s) % m_string_hash_size; for (QScriptNameIdImpl *entry = m_string_hash_base[h]; entry && entry->h == h; entry = entry->next) { if (entry->s == s) return entry; } return 0;}inline bool QScriptEnginePrivate::lessThan(const QScriptValueImpl &lhs, const QScriptValueImpl &rhs) const{ return QScriptContextPrivate::get(currentContext())->lt_cmp(lhs, rhs);}inline bool QScriptEnginePrivate::equals(const QScriptValueImpl &lhs, const QScriptValueImpl &rhs) const{ return QScriptContextPrivate::get(currentContext())->eq_cmp(lhs, rhs);}inline bool QScriptEnginePrivate::strictlyEquals(const QScriptValueImpl &lhs, const QScriptValueImpl &rhs) const{ return QScriptContextPrivate::strict_eq_cmp(lhs, rhs);}inline void QScriptEnginePrivate::unregisterValue(QScriptValuePrivate *p){ QScriptValueImpl &v = p->value; Q_ASSERT(v.isValid()); if (v.isString()) { QScriptNameIdImpl *id = v.stringValue(); m_stringHandles.remove(id); } else if (v.isObject()) { QScriptObject *instance = v.objectValue(); m_objectHandles.remove(instance); } else { int i = m_otherHandles.indexOf(p); Q_ASSERT(i != -1); m_otherHandles.remove(i); } m_handleRepository.release(p);}inline QScriptValueImpl QScriptEnginePrivate::globalObject() const{ return m_globalObject;}inline bool QScriptEnginePrivate::hasUncaughtException() const{ return (currentContext()->state() == QScriptContext::ExceptionState);}inline QScriptValueImpl QScriptEnginePrivate::uncaughtException() const{ if (!hasUncaughtException()) return QScriptValueImpl(); return QScriptContextPrivate::get(currentContext())->returnValue();}inline void QScriptEnginePrivate::maybeProcessEvents(){ if (m_processEventsInterval > 0 && ++m_processEventIncr > 512) { m_processEventIncr = 0; processEvents(); }}#endif // QT_NO_SCRIPT#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -