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

📄 qscriptecmaobject.cpp

📁 奇趣公司比较新的qt/emd版本
💻 CPP
字号:
/******************************************************************************** Copyright (C) 1992-2007 Trolltech ASA. All rights reserved.**** This file is part of the QtScript module of the Qt Toolkit.**** This file may be used under the terms of the GNU General Public** License version 2.0 as published by the Free Software Foundation** and appearing in the file LICENSE.GPL included in the packaging of** this file.  Please review the following information to ensure GNU** General Public Licensing requirements will be met:** http://trolltech.com/products/qt/licenses/licensing/opensource/**** If you are unsure which license is appropriate for your use, please** review the following information:** http://trolltech.com/products/qt/licenses/licensing/licensingoverview** or contact the sales department at sales@trolltech.com.**** In addition, as a special exception, Trolltech gives you certain** additional rights. These rights are described in the Trolltech GPL** Exception version 1.0, which can be found at** http://www.trolltech.com/products/qt/gplexception/ and in the file** GPL_EXCEPTION.txt in this package.**** In addition, as a special exception, Trolltech, as the sole copyright** holder for Qt Designer, grants users of the Qt/Eclipse Integration** plug-in the right for the Qt/Eclipse Integration to link to** functionality provided by Qt Designer and its related libraries.**** Trolltech reserves all rights not expressly granted herein.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.******************************************************************************/#include "qscriptecmaobject_p.h"#ifndef QT_NO_SCRIPT#include "qscriptengine_p.h"#include "qscriptvalueimpl_p.h"#include "qscriptcontext_p.h"#include "qscriptmember_p.h"#include "qscriptobject_p.h"#include <QtCore/QtDebug>namespace QScript { namespace Ecma {Object::Object(QScriptEnginePrivate *eng, QScriptClassInfo *classInfo):    Core(eng), m_classInfo(classInfo){    newObject(&publicPrototype, eng->nullValue());}Object::~Object(){}void Object::initialize(){    QScriptEnginePrivate *eng = engine();    eng->newConstructor(&ctor, this, publicPrototype);    const QScriptValue::PropertyFlags flags = QScriptValue::SkipInEnumeration;    publicPrototype.setProperty(QLatin1String("toString"),                                eng->createFunction(method_toString, 1, m_classInfo), flags);    publicPrototype.setProperty(QLatin1String("toLocaleString"),                                eng->createFunction(method_toLocaleString, 1, m_classInfo), flags);    publicPrototype.setProperty(QLatin1String("valueOf"),                                eng->createFunction(method_valueOf, 0, m_classInfo), flags);    publicPrototype.setProperty(QLatin1String("hasOwnProperty"),                                eng->createFunction(method_hasOwnProperty, 1, m_classInfo), flags);    publicPrototype.setProperty(QLatin1String("isPrototypeOf"),                                eng->createFunction(method_isPrototypeOf, 1, m_classInfo), flags);    publicPrototype.setProperty(QLatin1String("propertyIsEnumerable"),                                eng->createFunction(method_propertyIsEnumerable, 1, m_classInfo), flags);    publicPrototype.setProperty(QLatin1String("__defineGetter__"),                                eng->createFunction(method_defineGetter, 2, m_classInfo), flags);    publicPrototype.setProperty(QLatin1String("__defineSetter__"),                                eng->createFunction(method_defineSetter, 2, m_classInfo), flags);}void Object::execute(QScriptContextPrivate *context){    QScriptValueImpl value;    if (context->argumentCount() > 0)        value = context->argument(0).toObject();    else        value.invalidate();    if (! value.isValid())        newObject(&value);    context->setReturnValue(value);}void Object::newObject(QScriptValueImpl *result, const QScriptValueImpl &proto){    engine()->newObject(result, proto, classInfo());}QScriptValueImpl Object::method_toString(QScriptContextPrivate *context, QScriptEnginePrivate *eng, QScriptClassInfo *){    QScriptValueImpl glo = eng->globalObject();    QString s = QLatin1String("[object ");    QScriptValueImpl self = context->thisObject();    if (self.objectValue() == glo.objectValue())        s += QLatin1String("global");    else        s += self.classInfo()->name();    s += QLatin1String("]");    return (QScriptValueImpl(eng, s));}QScriptValueImpl Object::method_toLocaleString(QScriptContextPrivate *context, QScriptEnginePrivate *eng, QScriptClassInfo *classInfo){    return method_toString(context, eng, classInfo);}QScriptValueImpl Object::method_valueOf(QScriptContextPrivate *context, QScriptEnginePrivate *, QScriptClassInfo *){    return (context->thisObject());}QScriptValueImpl Object::method_hasOwnProperty(QScriptContextPrivate *context, QScriptEnginePrivate *eng, QScriptClassInfo *){    bool result = false;    if (context->thisObject().isObject() && (context->argumentCount() > 0)) {        QScriptValueImpl arg = context->argument(0);        QScriptNameIdImpl *id = 0;        if (arg.isString())            id = arg.stringValue();        if (! id || ! id->unique) {            QString str = arg.toString();            id = eng->nameId(str);        }        QScript::Member member;        QScriptValueImpl base;        QScriptValueImpl self = context->thisObject();        if (self.resolve(id, &member, &base, QScriptValue::ResolveLocal))            result = true;    }    return (QScriptValueImpl(eng, result));}QScriptValueImpl Object::method_isPrototypeOf(QScriptContextPrivate *context, QScriptEnginePrivate *eng, QScriptClassInfo *){    bool result = false;    if (context->thisObject().isObject() && (context->argumentCount() > 0)) {        QScriptValueImpl arg = context->argument(0);        if (arg.isObject()) {            QScriptValueImpl proto = arg.prototype();            if (proto.isObject()) {                QScriptValueImpl self = context->thisObject();                result = self.objectValue() == proto.objectValue();            }        }    }    return (QScriptValueImpl(eng, result));}QScriptValueImpl Object::method_propertyIsEnumerable(QScriptContextPrivate *context, QScriptEnginePrivate *eng, QScriptClassInfo *){    bool result = false;    if (context->thisObject().isObject() && (context->argumentCount() > 0)) {        QScriptValueImpl arg = context->argument(0);        QScriptNameIdImpl *id = 0;        if (arg.isString())            id = arg.stringValue();        if (! id || ! id->unique) {            QString str = arg.toString();            id = eng->nameId(str);        }        QScript::Member member;        QScriptValueImpl base;        QScriptValueImpl self = context->thisObject();        if (self.resolve(id, &member, &base, QScriptValue::ResolveLocal)) {            result = ! member.dontEnum();            if (result) {                QScriptValueImpl tmp;                base.get(member, &tmp);                result = tmp.isValid();            }        }    }    return (QScriptValueImpl(eng, result));}QScriptValueImpl Object::method_defineGetter(QScriptContextPrivate *context, QScriptEnginePrivate *eng,                                             QScriptClassInfo *){    QString propertyName = context->argument(0).toString();    QScriptValueImpl getter = context->argument(1);    if (!getter.isFunction())        return context->throwError(QLatin1String("getter must be a function"));    context->thisObject().setProperty(propertyName, getter, QScriptValue::PropertyGetter);    return eng->undefinedValue();}QScriptValueImpl Object::method_defineSetter(QScriptContextPrivate *context, QScriptEnginePrivate *eng,                                             QScriptClassInfo *){    QString propertyName = context->argument(0).toString();    QScriptValueImpl setter = context->argument(1);    if (!setter.isFunction())        return context->throwError(QLatin1String("setter must be a function"));    context->thisObject().setProperty(propertyName, setter, QScriptValue::PropertySetter);    return eng->undefinedValue();}} } // namespace QScript::Ecma#endif // QT_NO_SCRIPT

⌨️ 快捷键说明

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