Ignore:
Timestamp:
May 5, 2011, 5:36:53 AM (14 years ago)
Author:
Dmitry A. Kuminov
Message:

trunk: Merged in qt 4.7.2 sources from branches/vendor/nokia/qt.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk

  • trunk/src/scripttools/debugging/qscriptdebuggerscriptedconsolecommand.cpp

    r651 r846  
    11/****************************************************************************
    22**
    3 ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
     3** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
    44** All rights reserved.
    55** Contact: Nokia Corporation (qt-info@nokia.com)
     
    4747#include "qscriptdebuggerconsoleglobalobject_p.h"
    4848#include "qscriptdebuggerresponse_p.h"
    49 #include "qscriptdebuggervalue_p.h"
    50 #include "qscriptdebuggervalueproperty_p.h"
    5149#include "qscriptdebuggercommandschedulerinterface_p.h"
    5250
     
    6058
    6159Q_DECLARE_METATYPE(QScriptDebuggerResponse)
    62 Q_DECLARE_METATYPE(QScriptBreakpointData)
    63 Q_DECLARE_METATYPE(QScriptBreakpointMap)
    64 Q_DECLARE_METATYPE(QScriptScriptData)
    65 Q_DECLARE_METATYPE(QScriptScriptMap)
    66 Q_DECLARE_METATYPE(QScriptContextInfo)
    67 Q_DECLARE_METATYPE(QScriptDebuggerValue)
    68 Q_DECLARE_METATYPE(QScriptDebuggerValueProperty)
    69 Q_DECLARE_METATYPE(QScriptDebuggerValuePropertyList)
    70 Q_DECLARE_METATYPE(QScriptDebuggerConsoleCommand*)
    71 Q_DECLARE_METATYPE(QScriptDebuggerConsoleCommandList)
    72 Q_DECLARE_METATYPE(QScriptDebuggerConsoleCommandGroupData)
    73 Q_DECLARE_METATYPE(QScriptDebuggerConsoleCommandGroupMap)
    7460
    7561QT_BEGIN_NAMESPACE
    76 
    77 static QScriptValue debuggerResponseToScriptValue(QScriptEngine *eng, const QScriptDebuggerResponse &in)
    78 {
    79     QScriptValue out = eng->newObject();
    80     out.setProperty(QString::fromLatin1("result"), qScriptValueFromValue(eng, in.result()));
    81     out.setProperty(QString::fromLatin1("error"), QScriptValue(eng, in.error()));
    82     out.setProperty(QString::fromLatin1("async"), QScriptValue(eng, in.async()));
    83     return out;
    84 }
    85 
    86 static void debuggerResponseFromScriptValue(const QScriptValue &, QScriptDebuggerResponse &)
    87 {
    88     Q_ASSERT(0);
    89 }
    90 
    91 static QScriptValue breakpointDataToScriptValue(QScriptEngine *eng, const QScriptBreakpointData &in)
    92 {
    93     QScriptValue out = eng->newObject();
    94     out.setProperty(QString::fromLatin1("scriptId"), QScriptValue(eng, qsreal(in.scriptId())));
    95     out.setProperty(QString::fromLatin1("fileName"), QScriptValue(eng, in.fileName()));
    96     out.setProperty(QString::fromLatin1("lineNumber"), QScriptValue(eng, in.lineNumber()));
    97     out.setProperty(QString::fromLatin1("enabled"), QScriptValue(eng, in.isEnabled()));
    98     out.setProperty(QString::fromLatin1("singleShot"), QScriptValue(eng, in.isSingleShot()));
    99     out.setProperty(QString::fromLatin1("ignoreCount"), QScriptValue(eng, in.ignoreCount()));
    100     out.setProperty(QString::fromLatin1("condition"), QScriptValue(eng, in.condition()));
    101     return out;
    102 }
    103 
    104 static void breakpointDataFromScriptValue(const QScriptValue &in, QScriptBreakpointData &out)
    105 {
    106     QScriptValue scriptId = in.property(QString::fromLatin1("scriptId"));
    107     if (scriptId.isValid())
    108         out.setScriptId((qint64)scriptId.toNumber());
    109     out.setFileName(in.property(QString::fromLatin1("fileName")).toString());
    110     out.setLineNumber(in.property(QString::fromLatin1("lineNumber")).toInt32());
    111     QScriptValue enabled = in.property(QString::fromLatin1("enabled"));
    112     if (enabled.isValid())
    113         out.setEnabled(enabled.toBoolean());
    114     QScriptValue singleShot = in.property(QString::fromLatin1("singleShot"));
    115     if (singleShot.isValid())
    116         out.setSingleShot(singleShot.toBoolean());
    117     out.setIgnoreCount(in.property(QString::fromLatin1("ignoreCount")).toInt32());
    118     out.setCondition(in.property(QString::fromLatin1("condition")).toString());
    119 }
    120 
    121 static QScriptValue breakpointMapToScriptValue(QScriptEngine *eng, const QScriptBreakpointMap &in)
    122 {
    123     QScriptValue out = eng->newObject();
    124     QScriptBreakpointMap::const_iterator it;
    125     for (it = in.constBegin(); it != in.constEnd(); ++it) {
    126         out.setProperty(QString::number(it.key()), qScriptValueFromValue(eng, it.value()));
    127     }
    128     return out;
    129 }
    130 
    131 static void breakpointMapFromScriptValue(const QScriptValue &, QScriptBreakpointMap &)
    132 {
    133     Q_ASSERT(0);
    134 }
    135 
    136 static QScriptValue scriptDataToScriptValue(QScriptEngine *eng, const QScriptScriptData &in)
    137 {
    138     QScriptValue out = eng->newObject();
    139     out.setProperty(QString::fromLatin1("contents"), QScriptValue(eng, in.contents()));
    140     out.setProperty(QString::fromLatin1("fileName"), QScriptValue(eng, in.fileName()));
    141     out.setProperty(QString::fromLatin1("baseLineNumber"), QScriptValue(eng, in.baseLineNumber()));
    142     return out;
    143 }
    144 
    145 static void scriptDataFromScriptValue(const QScriptValue &in, QScriptScriptData &out)
    146 {
    147     QString contents = in.property(QString::fromLatin1("contents")).toString();
    148     QString fileName = in.property(QString::fromLatin1("fileName")).toString();
    149     int baseLineNumber = in.property(QString::fromLatin1("baseLineNumber")).toInt32();
    150     QScriptScriptData tmp(contents, fileName, baseLineNumber);
    151     out = tmp;
    152 }
    153 
    154 static QScriptValue scriptMapToScriptValue(QScriptEngine *eng, const QScriptScriptMap &in)
    155 {
    156     QScriptValue out = eng->newObject();
    157     QScriptScriptMap::const_iterator it;
    158     for (it = in.constBegin(); it != in.constEnd(); ++it) {
    159         out.setProperty(QString::number(it.key()), qScriptValueFromValue(eng, it.value()));
    160     }
    161     return out;
    162 }
    163 
    164 static void scriptMapFromScriptValue(const QScriptValue &, QScriptScriptMap &)
    165 {
    166     Q_ASSERT(0);
    167 }
    168 
    169 static QScriptValue consoleCommandToScriptValue(
    170     QScriptEngine *eng, QScriptDebuggerConsoleCommand* const &in)
    171 {
    172     if (!in)
    173         return eng->undefinedValue();
    174     QScriptValue out = eng->newObject();
    175     out.setProperty(QString::fromLatin1("name"), QScriptValue(eng, in->name()));
    176     out.setProperty(QString::fromLatin1("group"), QScriptValue(eng, in->group()));
    177     out.setProperty(QString::fromLatin1("shortDescription"), QScriptValue(eng, in->shortDescription()));
    178     out.setProperty(QString::fromLatin1("longDescription"), QScriptValue(eng, in->longDescription()));
    179     out.setProperty(QString::fromLatin1("aliases"), qScriptValueFromValue(eng, in->aliases()));
    180     out.setProperty(QString::fromLatin1("seeAlso"), qScriptValueFromValue(eng, in->seeAlso()));
    181     return out;
    182 }
    183 
    184 static void consoleCommandFromScriptValue(
    185     const QScriptValue &, QScriptDebuggerConsoleCommand* &)
    186 {
    187     Q_ASSERT(0);
    188 }
    189 
    190 static QScriptValue consoleCommandGroupDataToScriptValue(
    191     QScriptEngine *eng, const QScriptDebuggerConsoleCommandGroupData &in)
    192 {
    193     QScriptValue out = eng->newObject();
    194     out.setProperty(QString::fromLatin1("longDescription"), QScriptValue(eng, in.longDescription()));
    195     out.setProperty(QString::fromLatin1("shortDescription"), QScriptValue(eng, in.shortDescription()));
    196     return out;
    197 }
    198 
    199 static void consoleCommandGroupDataFromScriptValue(
    200     const QScriptValue &, QScriptDebuggerConsoleCommandGroupData &)
    201 {
    202     Q_ASSERT(0);
    203 }
    204 
    205 static QScriptValue consoleCommandGroupMapToScriptValue(
    206     QScriptEngine *eng, const QScriptDebuggerConsoleCommandGroupMap &in)
    207 {
    208     QScriptValue out = eng->newObject();
    209     QScriptDebuggerConsoleCommandGroupMap::const_iterator it;
    210     for (it = in.constBegin(); it != in.constEnd(); ++it) {
    211         out.setProperty(it.key(), qScriptValueFromValue(eng, it.value()));
    212     }
    213     return out;
    214 }
    215 
    216 static void consoleCommandGroupMapFromScriptValue(
    217     const QScriptValue &, QScriptDebuggerConsoleCommandGroupMap &)
    218 {
    219     Q_ASSERT(0);
    220 }
    221 
    222 static QScriptValue contextInfoToScriptValue(QScriptEngine *eng, const QScriptContextInfo &in)
    223 {
    224     QScriptValue out = eng->newObject();
    225     out.setProperty(QString::fromLatin1("scriptId"), QScriptValue(eng, qsreal(in.scriptId())));
    226     out.setProperty(QString::fromLatin1("fileName"), QScriptValue(eng, in.fileName()));
    227     out.setProperty(QString::fromLatin1("lineNumber"), QScriptValue(eng, in.lineNumber()));
    228     out.setProperty(QString::fromLatin1("columnNumber"), QScriptValue(eng, in.columnNumber()));
    229     out.setProperty(QString::fromLatin1("functionName"), QScriptValue(eng, in.functionName()));
    230     return out;
    231 }
    232 
    233 static void contextInfoFromScriptValue(const QScriptValue &, QScriptContextInfo &)
    234 {
    235     Q_ASSERT(0);
    236 }
    237 
    238 static QScriptValue debuggerScriptValuePropertyToScriptValue(QScriptEngine *eng, const QScriptDebuggerValueProperty &in)
    239 {
    240     QScriptValue out = eng->newObject();
    241     out.setProperty(QString::fromLatin1("name"), QScriptValue(eng, in.name()));
    242     out.setProperty(QString::fromLatin1("value"), qScriptValueFromValue(eng, in.value()));
    243     out.setProperty(QString::fromLatin1("valueAsString"), QScriptValue(eng, in.valueAsString()));
    244     out.setProperty(QString::fromLatin1("flags"), QScriptValue(eng, static_cast<int>(in.flags())));
    245     return out;
    246 }
    247 
    248 static void debuggerScriptValuePropertyFromScriptValue(const QScriptValue &in, QScriptDebuggerValueProperty &out)
    249 {
    250     QString name = in.property(QString::fromLatin1("name")).toString();
    251     QScriptDebuggerValue value = qscriptvalue_cast<QScriptDebuggerValue>(in.property(QString::fromLatin1("value")));
    252     QString valueAsString = in.property(QString::fromLatin1("valueAsString")).toString();
    253     int flags = in.property(QString::fromLatin1("flags")).toInt32();
    254     QScriptDebuggerValueProperty tmp(name, value, valueAsString, QScriptValue::PropertyFlags(flags));
    255     out = tmp;
    256 }
    25762
    25863/*!
     
    28085    QStringList argumentTypes;
    28186    QStringList subCommands;
    282     QScriptEngine *engine;
     87    QScriptValue globalObject;
    28388    QScriptValue execFunction;
    28489    QScriptValue responseFunction;
     
    28792QScriptDebuggerScriptedConsoleCommandPrivate::QScriptDebuggerScriptedConsoleCommandPrivate()
    28893{
    289     engine = 0;
    29094}
    29195
    29296QScriptDebuggerScriptedConsoleCommandPrivate::~QScriptDebuggerScriptedConsoleCommandPrivate()
    29397{
    294     delete engine;
    29598}
    29699
     
    300103    const QStringList &aliases, const QStringList &seeAlso,
    301104    const QStringList &argumentTypes, const QStringList &subCommands,
     105    const QScriptValue &globalObject,
    302106    const QScriptValue &execFunction, const QScriptValue &responseFunction)
    303107    : QScriptDebuggerConsoleCommand(*new QScriptDebuggerScriptedConsoleCommandPrivate)
     
    312116    d->argumentTypes = argumentTypes;
    313117    d->subCommands = subCommands;
     118    d->globalObject = globalObject;
    314119    d->execFunction = execFunction;
    315120    d->responseFunction = responseFunction;
    316     d->engine = execFunction.engine();
    317 
    318     qScriptRegisterMetaType<QScriptBreakpointData>(d->engine, breakpointDataToScriptValue, breakpointDataFromScriptValue);
    319     qScriptRegisterMetaType<QScriptBreakpointMap>(d->engine, breakpointMapToScriptValue, breakpointMapFromScriptValue);
    320     qScriptRegisterMetaType<QScriptScriptData>(d->engine, scriptDataToScriptValue, scriptDataFromScriptValue);
    321     qScriptRegisterMetaType<QScriptScriptMap>(d->engine, scriptMapToScriptValue, scriptMapFromScriptValue);
    322     qScriptRegisterMetaType<QScriptContextInfo>(d->engine, contextInfoToScriptValue, contextInfoFromScriptValue);
    323     qScriptRegisterMetaType<QScriptDebuggerValueProperty>(d->engine, debuggerScriptValuePropertyToScriptValue, debuggerScriptValuePropertyFromScriptValue);
    324     qScriptRegisterSequenceMetaType<QScriptDebuggerValuePropertyList>(d->engine);
    325     qScriptRegisterMetaType<QScriptDebuggerResponse>(d->engine, debuggerResponseToScriptValue, debuggerResponseFromScriptValue);
    326     qScriptRegisterMetaType<QScriptDebuggerConsoleCommand*>(d->engine, consoleCommandToScriptValue, consoleCommandFromScriptValue);
    327     qScriptRegisterSequenceMetaType<QScriptDebuggerConsoleCommandList>(d->engine);
    328     qScriptRegisterMetaType<QScriptDebuggerConsoleCommandGroupData>(d->engine, consoleCommandGroupDataToScriptValue, consoleCommandGroupDataFromScriptValue);
    329     qScriptRegisterMetaType<QScriptDebuggerConsoleCommandGroupMap>(d->engine, consoleCommandGroupMapToScriptValue, consoleCommandGroupMapFromScriptValue);
    330 // ### can't do this, if it's an object ID the conversion will be incorrect since
    331 // ### the object ID refers to an object in a different engine!
    332 //    qScriptRegisterMetaType(d->engine, debuggerScriptValueToScriptValue, debuggerScriptValueFromScriptValue);
    333121}
    334122
     
    406194{
    407195    Q_D(QScriptDebuggerScriptedConsoleCommandJob);
    408     QScriptEngine *engine = d->command->engine;
     196    QScriptEngine *engine = d->command->globalObject.engine();
     197    engine->setGlobalObject(d->command->globalObject);
    409198    QScriptValueList args;
    410199    for (int i = 0; i < d->arguments.size(); ++i)
     
    436225    Q_D(QScriptDebuggerScriptedConsoleCommandJob);
    437226    // ### generalize
    438     QScriptEngine *engine = d->command->engine;
     227    QScriptEngine *engine = d->command->globalObject.engine();
     228    engine->setGlobalObject(d->command->globalObject);
    439229    QScriptValueList args;
    440230    args.append(qScriptValueFromValue(engine, response));
    441231    args.append(QScriptValue(engine, commandId));
    442232    QScriptDebuggerConsoleGlobalObject *global;
    443     global = qobject_cast<QScriptDebuggerConsoleGlobalObject*>(engine->globalObject().toQObject());
     233    global = qobject_cast<QScriptDebuggerConsoleGlobalObject*>(d->command->globalObject.toQObject());
    444234    Q_ASSERT(global != 0);
    445235    global->setScheduler(this);
     
    552342QScriptDebuggerScriptedConsoleCommand *QScriptDebuggerScriptedConsoleCommand::parse(
    553343    const QString &program, const QString &fileName,
    554     QScriptMessageHandlerInterface *messageHandler)
    555 {
    556     QScriptEngine *engine = new QScriptEngine();
     344    QScriptEngine *engine, QScriptMessageHandlerInterface *messageHandler)
     345{
    557346    // create a custom global object
    558347    QScriptDebuggerConsoleGlobalObject *cppGlobal = new QScriptDebuggerConsoleGlobalObject();
     
    575364        messageHandler->message(QtCriticalMsg, ret.toString(), fileName,
    576365                                engine->uncaughtExceptionLineNumber());
    577         delete engine;
    578366        return 0;
    579367    }
     
    582370    if (!name.isString()) {
    583371        messageHandler->message(QtCriticalMsg, QLatin1String("command definition lacks a name"), fileName);
    584         delete engine;
    585372        return 0;
    586373    }
     
    591378        messageHandler->message(QtCriticalMsg, QString::fromLatin1("definition of command \"%0\" lacks a group name")
    592379                                .arg(nameStr), fileName);
    593         delete engine;
    594380        return 0;
    595381    }
     
    600386        messageHandler->message(QtCriticalMsg, QString::fromLatin1("definition of command \"%0\" lacks shortDescription")
    601387                                .arg(nameStr), fileName);
    602         delete engine;
    603388        return 0;
    604389    }
     
    609394        messageHandler->message(QtCriticalMsg, QString::fromLatin1("definition of command \"%0\" lacks longDescription")
    610395                                .arg(nameStr), fileName);
    611         delete engine;
    612396        return 0;
    613397    }
     
    630414        messageHandler->message(QtCriticalMsg, QString::fromLatin1("definition of command \"%0\" lacks execute() function")
    631415                                .arg(nameStr), fileName);
    632         delete engine;
    633416        return 0;
    634417    }
     
    641424        aliases, seeAlso,
    642425        argTypes, subCommands,
    643         execFunction, responseFunction);
     426        global, execFunction, responseFunction);
    644427    return result;
    645428}
Note: See TracChangeset for help on using the changeset viewer.