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

📄 qscriptecmaglobal.cpp

📁 奇趣公司比较新的qt/emd版本
💻 CPP
📖 第 1 页 / 共 2 页
字号:
};} // anonumousnamespace QScript { namespace Ecma {Global::Global(QScriptEnginePrivate *engine, QScriptClassInfo *classInfo)    : m_engine(engine), m_classInfo(classInfo){}Global::~Global(){}void Global::construct(QScriptValueImpl *object, QScriptEnginePrivate *eng){    QScriptClassInfo *classInfo = eng->registerClass(QLatin1String("global"),                                                     QScript::ActivationType);    // create with prototype null, since Object.prototype doesn't exist at this point    eng->newObject(object, eng->nullValue(), classInfo);    Global *instance = new Global(eng, classInfo);    object->setObjectData(QExplicitlySharedDataPointer<QScriptObjectData>(instance));}void Global::initialize(QScriptValueImpl *object, QScriptEnginePrivate *eng){    // set the real prototype    object->setPrototype(eng->objectConstructor->publicPrototype);    const QScriptValue::PropertyFlags flags = QScriptValue::Undeletable                                              | QScriptValue::SkipInEnumeration;    object->setProperty(QLatin1String("NaN"), QScriptValueImpl(eng, qSNaN()), flags);    object->setProperty(QLatin1String("Infinity"), QScriptValueImpl(eng, qInf()), flags);    object->setProperty(QLatin1String("undefined"), eng->undefinedValue(), flags);    QScriptClassInfo *classInfo = object->classInfo();    object->setProperty(QLatin1String("print"),                        eng->createFunction(new PrintFunction()), flags);    object->setProperty(QLatin1String("parseInt"),                        eng->createFunction(method_parseInt, 2, classInfo), flags);    object->setProperty(QLatin1String("parseFloat"),                        eng->createFunction(method_parseFloat, 1, classInfo), flags);    object->setProperty(QLatin1String("isNaN"),                        eng->createFunction(method_isNaN, 1, classInfo), flags);    object->setProperty(QLatin1String("isFinite"),                        eng->createFunction(method_isFinite, 1, classInfo), flags);    object->setProperty(QLatin1String("decodeURI"),                        eng->createFunction(method_decodeURI, 1, classInfo), flags);    object->setProperty(QLatin1String("decodeURIComponent"),                        eng->createFunction(method_decodeURIComponent, 1, classInfo), flags);    object->setProperty(QLatin1String("encodeURI"),                        eng->createFunction(method_encodeURI, 1, classInfo), flags);    object->setProperty(QLatin1String("encodeURIComponent"),                        eng->createFunction(method_encodeURIComponent, 1, classInfo), flags);    object->setProperty(QLatin1String("escape"),                        eng->createFunction(method_escape, 1, classInfo), flags);    object->setProperty(QLatin1String("unescape"),                        eng->createFunction(method_unescape, 1, classInfo), flags);    object->setProperty(QLatin1String("version"),                        eng->createFunction(method_version, 0, classInfo), flags);    object->setProperty(QLatin1String("gc"),                        eng->createFunction(method_gc, 0, classInfo), flags);}QScriptValueImpl Global::method_parseInt(QScriptContextPrivate *context,                                         QScriptEnginePrivate *eng,                                         QScriptClassInfo *){    if (context->argumentCount() == 0) {        return QScriptValueImpl(eng, qSNaN());    }    qsreal radix = 0;    if (context->argumentCount() > 1) {        radix = context->argument(1).toInteger();        if (qIsNaN(radix) || (radix && (radix < 2 || radix > 36))) {            return QScriptValueImpl(eng, qSNaN());        }    }    QString str = context->argument(0).toString().trimmed();    if (radix == 0) {        if ((str.length() >= 2) && (str.at(0) == QLatin1Char('0'))) {            if ((str.at(1) == QLatin1Char('x'))                || (str.at(1) == QLatin1Char('X'))) {                str.remove(0, 2);                radix = 16;            } else {                str.remove(0, 1);                radix = 8;            }        }    }    const QByteArray ba = str.toUtf8();    const char *startPtr = ba.constData();    qsreal result;//#if defined(Q_WS_WIN) && !defined(Q_CC_MINGW)// always use the Qt version for now#if 1    const char *endPtr = 0;    bool ok;    result = qstrtoll(startPtr, &endPtr, int (radix), &ok);#else    char *endPtr = 0;    result = strtoll(startPtr, &endPtr, int (radix));#endif    if (startPtr == endPtr) {        if (str.isEmpty())            result = qSNaN();        else if (str == QLatin1String("Infinity"))            result = +qInf();        else if (str == QLatin1String("+Infinity"))            result = +qInf();        else if (str == QLatin1String("-Infinity"))            result = -qInf();        else            result = qSNaN();    }    return QScriptValueImpl(eng, result);}QScriptValueImpl Global::method_parseFloat(QScriptContextPrivate *context,                                           QScriptEnginePrivate *eng,                                           QScriptClassInfo *){    if (context->argumentCount() == 0)        return QScriptValueImpl(eng, qSNaN());    QString str = context->argument(0).toString().trimmed();    bool ok = false;    qsreal result = str.toDouble(&ok);    if (!ok) {        if (str == QLatin1String("Infinity"))            result = +qInf();        else if (str == QLatin1String("+Infinity"))            result = +qInf();        else if (str == QLatin1String("-Infinity"))            result = -qInf();        else if (str.isEmpty())            result = qSNaN();        else if (str.at(0).isNumber())            result = 0;        else            result = qSNaN();    }    return QScriptValueImpl(eng, result);}QScriptValueImpl Global::method_isNaN(QScriptContextPrivate *context,                                      QScriptEnginePrivate *eng,                                      QScriptClassInfo *){    qsreal v = qSNaN();    if (context->argumentCount() > 0)        v = context->argument(0).toNumber();    return (QScriptValueImpl(eng, qIsNaN(v)));}QScriptValueImpl Global::method_isFinite(QScriptContextPrivate *context,                                         QScriptEnginePrivate *eng,                                         QScriptClassInfo *){    qsreal v = qInf();    if (context->argumentCount() > 0)        v = context->argument(0).toNumber();    return (QScriptValueImpl(eng, qIsFinite(v)));}QScriptValueImpl Global::method_decodeURI(QScriptContextPrivate *context,                                          QScriptEnginePrivate *eng,                                          QScriptClassInfo *){    QScriptValueImpl result;    if (context->argumentCount() > 0) {        QString str = context->argument(0).toString();        bool ok;        QString out = decode(str, QString::fromUtf8(uriReserved) + QString::fromUtf8("#"), &ok);        if (ok)            return QScriptValueImpl(eng, out);        else            return context->throwError(QScriptContext::URIError,                                         QLatin1String("malformed URI sequence"));    }    return eng->undefinedValue();}QScriptValueImpl Global::method_decodeURIComponent(QScriptContextPrivate *context,                                                   QScriptEnginePrivate *eng,                                                   QScriptClassInfo *){    QScriptValueImpl result;    if (context->argumentCount() > 0) {        QString str = context->argument(0).toString();        bool ok;        QString out = decode(str, QString::fromUtf8(""), &ok);        if (ok)            result = QScriptValueImpl(eng, out);        else            result = context->throwError(QScriptContext::URIError,                                         QLatin1String("malformed URI sequence"));    } else {        result = eng->undefinedValue();    }    return result;}QScriptValueImpl Global::method_encodeURI(QScriptContextPrivate *context,                                          QScriptEnginePrivate *eng,                                          QScriptClassInfo *){    QScriptValueImpl result;    if (context->argumentCount() > 0) {        QString str = context->argument(0).toString();        bool ok;        QString out = encode(str,                             QLatin1String(uriReserved)                             + QLatin1String(uriUnescaped)                             + QString::fromUtf8("#"),                             &ok);        if (ok)            result = QScriptValueImpl(eng, out);        else            result = context->throwError(QScriptContext::URIError,                                         QLatin1String("malformed URI sequence"));    } else {        result = eng->undefinedValue();    }    return result;}QScriptValueImpl Global::method_encodeURIComponent(QScriptContextPrivate *context,                                                   QScriptEnginePrivate *eng,                                                   QScriptClassInfo *){    QScriptValueImpl result;    if (context->argumentCount() > 0) {        QString str = context->argument(0).toString();        bool ok;        QString out = encode(str, QLatin1String(uriUnescaped), &ok);        if (ok)            result = QScriptValueImpl(eng, out);        else            result = context->throwError(QScriptContext::URIError,                                         QLatin1String("malformed URI sequence"));    } else {        result = eng->undefinedValue();    }    return result;}QScriptValueImpl Global::method_escape(QScriptContextPrivate *context,                                       QScriptEnginePrivate *eng,                                       QScriptClassInfo *){    if (context->argumentCount() > 0) {        QString str = context->argument(0).toString();        return QScriptValueImpl(eng, QLatin1String(escape(str)));    }    return QScriptValueImpl(eng, QLatin1String("undefined"));}QScriptValueImpl Global::method_unescape(QScriptContextPrivate *context,                                         QScriptEnginePrivate *eng,                                         QScriptClassInfo *){    if (context->argumentCount() > 0) {        QByteArray data = context->argument(0).toString().toLatin1();        return QScriptValueImpl(eng, unescape(data));    }    return QScriptValueImpl(eng, QLatin1String("undefined"));}QScriptValueImpl Global::method_version(QScriptContextPrivate *,                                        QScriptEnginePrivate *eng,                                        QScriptClassInfo *){    return (QScriptValueImpl(eng, 1));}QScriptValueImpl Global::method_gc(QScriptContextPrivate *,                                   QScriptEnginePrivate *eng,                                   QScriptClassInfo *){    eng->gc();    return QScriptValueImpl(eng, eng->objectAllocator.freeBlocks());}} } // namespace QScript::Ecma#endif // QT_NO_SCRIPT

⌨️ 快捷键说明

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