- Timestamp:
- May 5, 2011, 5:36:53 AM (14 years ago)
- Location:
- trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk
- Property svn:mergeinfo changed
/branches/vendor/nokia/qt/4.7.2 (added) merged: 845 /branches/vendor/nokia/qt/current merged: 844 /branches/vendor/nokia/qt/4.6.3 removed
- Property svn:mergeinfo changed
-
trunk/src/scripttools/debugging/qscriptdebuggerscriptedconsolecommand.cpp
r651 r846 1 1 /**************************************************************************** 2 2 ** 3 ** Copyright (C) 201 0Nokia Corporation and/or its subsidiary(-ies).3 ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). 4 4 ** All rights reserved. 5 5 ** Contact: Nokia Corporation (qt-info@nokia.com) … … 47 47 #include "qscriptdebuggerconsoleglobalobject_p.h" 48 48 #include "qscriptdebuggerresponse_p.h" 49 #include "qscriptdebuggervalue_p.h"50 #include "qscriptdebuggervalueproperty_p.h"51 49 #include "qscriptdebuggercommandschedulerinterface_p.h" 52 50 … … 60 58 61 59 Q_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)74 60 75 61 QT_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 }257 62 258 63 /*! … … 280 85 QStringList argumentTypes; 281 86 QStringList subCommands; 282 QScript Engine *engine;87 QScriptValue globalObject; 283 88 QScriptValue execFunction; 284 89 QScriptValue responseFunction; … … 287 92 QScriptDebuggerScriptedConsoleCommandPrivate::QScriptDebuggerScriptedConsoleCommandPrivate() 288 93 { 289 engine = 0;290 94 } 291 95 292 96 QScriptDebuggerScriptedConsoleCommandPrivate::~QScriptDebuggerScriptedConsoleCommandPrivate() 293 97 { 294 delete engine;295 98 } 296 99 … … 300 103 const QStringList &aliases, const QStringList &seeAlso, 301 104 const QStringList &argumentTypes, const QStringList &subCommands, 105 const QScriptValue &globalObject, 302 106 const QScriptValue &execFunction, const QScriptValue &responseFunction) 303 107 : QScriptDebuggerConsoleCommand(*new QScriptDebuggerScriptedConsoleCommandPrivate) … … 312 116 d->argumentTypes = argumentTypes; 313 117 d->subCommands = subCommands; 118 d->globalObject = globalObject; 314 119 d->execFunction = execFunction; 315 120 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 since331 // ### the object ID refers to an object in a different engine!332 // qScriptRegisterMetaType(d->engine, debuggerScriptValueToScriptValue, debuggerScriptValueFromScriptValue);333 121 } 334 122 … … 406 194 { 407 195 Q_D(QScriptDebuggerScriptedConsoleCommandJob); 408 QScriptEngine *engine = d->command->engine; 196 QScriptEngine *engine = d->command->globalObject.engine(); 197 engine->setGlobalObject(d->command->globalObject); 409 198 QScriptValueList args; 410 199 for (int i = 0; i < d->arguments.size(); ++i) … … 436 225 Q_D(QScriptDebuggerScriptedConsoleCommandJob); 437 226 // ### generalize 438 QScriptEngine *engine = d->command->engine; 227 QScriptEngine *engine = d->command->globalObject.engine(); 228 engine->setGlobalObject(d->command->globalObject); 439 229 QScriptValueList args; 440 230 args.append(qScriptValueFromValue(engine, response)); 441 231 args.append(QScriptValue(engine, commandId)); 442 232 QScriptDebuggerConsoleGlobalObject *global; 443 global = qobject_cast<QScriptDebuggerConsoleGlobalObject*>( engine->globalObject().toQObject());233 global = qobject_cast<QScriptDebuggerConsoleGlobalObject*>(d->command->globalObject.toQObject()); 444 234 Q_ASSERT(global != 0); 445 235 global->setScheduler(this); … … 552 342 QScriptDebuggerScriptedConsoleCommand *QScriptDebuggerScriptedConsoleCommand::parse( 553 343 const QString &program, const QString &fileName, 554 QScriptMessageHandlerInterface *messageHandler) 555 { 556 QScriptEngine *engine = new QScriptEngine(); 344 QScriptEngine *engine, QScriptMessageHandlerInterface *messageHandler) 345 { 557 346 // create a custom global object 558 347 QScriptDebuggerConsoleGlobalObject *cppGlobal = new QScriptDebuggerConsoleGlobalObject(); … … 575 364 messageHandler->message(QtCriticalMsg, ret.toString(), fileName, 576 365 engine->uncaughtExceptionLineNumber()); 577 delete engine;578 366 return 0; 579 367 } … … 582 370 if (!name.isString()) { 583 371 messageHandler->message(QtCriticalMsg, QLatin1String("command definition lacks a name"), fileName); 584 delete engine;585 372 return 0; 586 373 } … … 591 378 messageHandler->message(QtCriticalMsg, QString::fromLatin1("definition of command \"%0\" lacks a group name") 592 379 .arg(nameStr), fileName); 593 delete engine;594 380 return 0; 595 381 } … … 600 386 messageHandler->message(QtCriticalMsg, QString::fromLatin1("definition of command \"%0\" lacks shortDescription") 601 387 .arg(nameStr), fileName); 602 delete engine;603 388 return 0; 604 389 } … … 609 394 messageHandler->message(QtCriticalMsg, QString::fromLatin1("definition of command \"%0\" lacks longDescription") 610 395 .arg(nameStr), fileName); 611 delete engine;612 396 return 0; 613 397 } … … 630 414 messageHandler->message(QtCriticalMsg, QString::fromLatin1("definition of command \"%0\" lacks execute() function") 631 415 .arg(nameStr), fileName); 632 delete engine;633 416 return 0; 634 417 } … … 641 424 aliases, seeAlso, 642 425 argTypes, subCommands, 643 execFunction, responseFunction);426 global, execFunction, responseFunction); 644 427 return result; 645 428 }
Note:
See TracChangeset
for help on using the changeset viewer.