diff options
Diffstat (limited to 'src/lib/corelib/jsextensions/host.cpp')
-rw-r--r-- | src/lib/corelib/jsextensions/host.cpp | 138 |
1 files changed, 48 insertions, 90 deletions
diff --git a/src/lib/corelib/jsextensions/host.cpp b/src/lib/corelib/jsextensions/host.cpp index ebf302a82..24d40fe6a 100644 --- a/src/lib/corelib/jsextensions/host.cpp +++ b/src/lib/corelib/jsextensions/host.cpp @@ -37,6 +37,8 @@ ** ****************************************************************************/ +#include "jsextension.h" + #include <language/scriptengine.h> #include <logging/translator.h> #include <tools/fileinfo.h> @@ -44,27 +46,28 @@ #include <QtCore/qdir.h> #include <QtCore/qfileinfo.h> -#include <QtScript/qscriptable.h> -#include <QtScript/qscriptengine.h> - namespace qbs { namespace Internal { -class Host : public QObject, QScriptable +class Host : public JsExtension<Host> { - Q_OBJECT public: - static QScriptValue js_ctor(QScriptContext *context, QScriptEngine *engine); - static QScriptValue js_architecture(QScriptContext *context, QScriptEngine *engine); - static QScriptValue js_os(QScriptContext *context, QScriptEngine *engine); - static QScriptValue js_platform(QScriptContext *context, QScriptEngine *engine); - static QScriptValue js_osVersion(QScriptContext *context, QScriptEngine *engine); - static QScriptValue js_osBuildVersion(QScriptContext *context, QScriptEngine *engine); - static QScriptValue js_osVersionParts(QScriptContext *context, QScriptEngine *engine); - static QScriptValue js_osVersionMajor(QScriptContext *context, QScriptEngine *engine); - static QScriptValue js_osVersionMinor(QScriptContext *context, QScriptEngine *engine); - static QScriptValue js_osVersionPatch(QScriptContext *context, QScriptEngine *engine); - static QScriptValue js_nullDevice(QScriptContext *context, QScriptEngine *engine); + static const char *name() { return "Host"; } + static void setupStaticMethods(JSContext *ctx, JSValue classObj); + static JSValue jsArchitecture(JSContext *ctx, JSValueConst, int, JSValueConst *) { + return makeJsString(ctx, HostOsInfo::hostOSArchitecture()); + } + static JSValue jsOs(JSContext *ctx, JSValueConst, int, JSValueConst *); + static JSValue jsPlatform(JSContext *ctx, JSValueConst, int, JSValueConst *) { + return makeJsString(ctx, HostOsInfo::hostOSIdentifier()); + } + static JSValue jsOsVersion(JSContext *ctx, JSValueConst, int, JSValueConst *); + static JSValue jsOsBuildVersion(JSContext *ctx, JSValueConst, int, JSValueConst *); + static JSValue jsOsVersionParts(JSContext *ctx, JSValueConst, int, JSValueConst *); + static JSValue jsOsVersionMajor(JSContext *ctx, JSValueConst, int, JSValueConst *); + static JSValue jsOsVersionMinor(JSContext *ctx, JSValueConst, int, JSValueConst *); + static JSValue jsOsVersionPatch(JSContext *ctx, JSValueConst, int, JSValueConst *); + static JSValue jsNullDevice(JSContext *ctx, JSValueConst, int, JSValueConst *); }; static QStringList osList() @@ -75,119 +78,74 @@ static QStringList osList() return list; } -QScriptValue Host::js_ctor(QScriptContext *context, QScriptEngine *engine) -{ - Q_UNUSED(engine); - return context->throwError(Tr::tr("'Host' cannot be instantiated.")); -} - -QScriptValue Host::js_architecture(QScriptContext *context, QScriptEngine *engine) +void Host::setupStaticMethods(JSContext *ctx, JSValue classObj) { - Q_UNUSED(context); - Q_UNUSED(engine); - - return HostOsInfo::hostOSArchitecture(); + setupMethod(ctx, classObj, "architecture", &Host::jsArchitecture, 0); + setupMethod(ctx, classObj, "os", &Host::jsOs, 0); + setupMethod(ctx, classObj, "platform", &Host::jsPlatform, 0); + setupMethod(ctx, classObj, "osVersion", &Host::jsOsVersion, 0); + setupMethod(ctx, classObj, "osBuildVersion", &Host::jsOsBuildVersion, 0); + setupMethod(ctx, classObj, "osVersionParts", &Host::jsOsVersionParts, 0); + setupMethod(ctx, classObj, "osVersionMajor", &Host::jsOsVersionMajor, 0); + setupMethod(ctx, classObj, "osVersionMinor", &Host::jsOsVersionMinor, 0); + setupMethod(ctx, classObj, "osVersionPatch", &Host::jsOsVersionPatch, 0); + setupMethod(ctx, classObj, "nullDevice", &Host::jsNullDevice, 0); } -QScriptValue Host::js_os(QScriptContext *context, QScriptEngine *engine) +JSValue Host::jsOs(JSContext *ctx, JSValue, int, JSValue *) { - Q_UNUSED(context); static QStringList host = osList(); - return engine->toScriptValue(host); + return makeJsStringList(ctx, host); } -QScriptValue Host::js_platform(QScriptContext *context, QScriptEngine *engine) +JSValue Host::jsOsVersion(JSContext *ctx, JSValue, int, JSValue *) { - Q_UNUSED(context); - Q_UNUSED(engine); - return HostOsInfo::hostOSIdentifier(); -} - -QScriptValue Host::js_osVersion(QScriptContext *context, QScriptEngine *engine) -{ - Q_UNUSED(context); - Q_UNUSED(engine); static QString osVersion = HostOsInfo::hostOsVersion().toString(); - return osVersion.isNull() ? engine->undefinedValue() : osVersion; + return osVersion.isNull() ? JS_UNDEFINED : makeJsString(ctx, osVersion); } -QScriptValue Host::js_osBuildVersion(QScriptContext *context, QScriptEngine *engine) +JSValue Host::jsOsBuildVersion(JSContext *ctx, JSValue, int, JSValue *) { - Q_UNUSED(context); - Q_UNUSED(engine); static QString osBuildVersion = HostOsInfo::hostOsBuildVersion(); - return osBuildVersion.isNull() ? engine->undefinedValue() : osBuildVersion; + return osBuildVersion.isNull() ? JS_UNDEFINED : makeJsString(ctx, osBuildVersion); } -QScriptValue Host::js_osVersionParts(QScriptContext *context, QScriptEngine *engine) +JSValue Host::jsOsVersionParts(JSContext *ctx, JSValue, int, JSValue *) { - Q_UNUSED(context); - Q_UNUSED(engine); static QStringList osVersionParts = HostOsInfo::hostOsVersion().toString().split( QStringLiteral(".")); - return qScriptValueFromSequence(engine, osVersionParts); + return makeJsStringList(ctx, osVersionParts); } -QScriptValue Host::js_osVersionMajor(QScriptContext *context, QScriptEngine *engine) +JSValue Host::jsOsVersionMajor(JSContext *ctx, JSValue, int, JSValue *) { - Q_UNUSED(context); - Q_UNUSED(engine); static int osVersionMajor = HostOsInfo::hostOsVersion().majorVersion(); - return osVersionMajor; + return JS_NewInt32(ctx, osVersionMajor); } -QScriptValue Host::js_osVersionMinor(QScriptContext *context, QScriptEngine *engine) +JSValue Host::jsOsVersionMinor(JSContext *ctx, JSValue, int, JSValue *) { - Q_UNUSED(context); - Q_UNUSED(engine); static int osVersionMinor = HostOsInfo::hostOsVersion().minorVersion(); - return osVersionMinor; + return JS_NewInt32(ctx, osVersionMinor); } -QScriptValue Host::js_osVersionPatch(QScriptContext *context, QScriptEngine *engine) +JSValue Host::jsOsVersionPatch(JSContext *ctx, JSValue, int, JSValue *) { - Q_UNUSED(context); - Q_UNUSED(engine); static int osVersionPatch = HostOsInfo::hostOsVersion().patchLevel(); - return osVersionPatch; + return JS_NewInt32(ctx, osVersionPatch); } -QScriptValue Host::js_nullDevice(QScriptContext *context, QScriptEngine *engine) +JSValue Host::jsNullDevice(JSContext *ctx, JSValue, int, JSValue *) { - Q_UNUSED(context); - Q_UNUSED(engine); static QString nullDevice = HostOsInfo::isWindowsHost() ? QStringLiteral("NUL") : QStringLiteral("/dev/null"); - return nullDevice; + return makeJsString(ctx, nullDevice); } } // namespace Internal } // namespace qbs -void initializeJsExtensionHost(QScriptValue extensionObject) +void initializeJsExtensionHost(qbs::Internal::ScriptEngine *engine, JSValue extensionObject) { - using namespace qbs::Internal; - QScriptEngine *engine = extensionObject.engine(); - QScriptValue hostObj = engine->newQMetaObject(&Host::staticMetaObject, - engine->newFunction(&Host::js_ctor)); - hostObj.setProperty(QStringLiteral("architecture"), engine->newFunction(Host::js_architecture)); - hostObj.setProperty(QStringLiteral("os"), engine->newFunction(Host::js_os)); - hostObj.setProperty(QStringLiteral("platform"), engine->newFunction(Host::js_platform)); - hostObj.setProperty(QStringLiteral("osVersion"), engine->newFunction(Host::js_osVersion)); - hostObj.setProperty(QStringLiteral("osBuildVersion"), engine->newFunction( - Host::js_osBuildVersion)); - hostObj.setProperty(QStringLiteral("osVersionParts"), engine->newFunction( - Host::js_osVersionParts)); - hostObj.setProperty(QStringLiteral("osVersionMajor"), engine->newFunction( - Host::js_osVersionMajor)); - hostObj.setProperty(QStringLiteral("osVersionMinor"), engine->newFunction( - Host::js_osVersionMinor)); - hostObj.setProperty(QStringLiteral("osVersionPatch"), engine->newFunction( - Host::js_osVersionPatch)); - hostObj.setProperty(QStringLiteral("nullDevice"), engine->newFunction(Host::js_nullDevice)); - extensionObject.setProperty(QStringLiteral("Host"), hostObj); + qbs::Internal::Host::registerClass(engine, extensionObject); } - -Q_DECLARE_METATYPE(qbs::Internal::Host *) - -#include "host.moc" |