- Timestamp:
- Feb 11, 2010, 11:19:06 PM (15 years ago)
- Location:
- trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk
-
Property svn:mergeinfo
set to (toggle deleted branches)
/branches/vendor/nokia/qt/4.6.1 merged eligible /branches/vendor/nokia/qt/current merged eligible /branches/vendor/trolltech/qt/current 3-149
-
Property svn:mergeinfo
set to (toggle deleted branches)
-
trunk/src/scripttools/debugging/qscriptdebuggercommandexecutor.cpp
r2 r561 2 2 ** 3 3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). 4 ** Contact: Qt Software Information (qt-info@nokia.com) 4 ** All rights reserved. 5 ** Contact: Nokia Corporation (qt-info@nokia.com) 5 6 ** 6 7 ** This file is part of the QtSCriptTools module of the Qt Toolkit. … … 21 22 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. 22 23 ** 23 ** In addition, as a special exception, Nokia gives you certain 24 ** additional rights. These rights are described in the Nokia Qt LGPL 25 ** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this 26 ** package. 24 ** In addition, as a special exception, Nokia gives you certain additional 25 ** rights. These rights are described in the Nokia Qt LGPL Exception 26 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. 27 27 ** 28 28 ** GNU General Public License Usage … … 34 34 ** met: http://www.gnu.org/copyleft/gpl.html. 35 35 ** 36 ** If you are unsure which license is appropriate for your use, please37 ** contact the sales department at qt-sales@nokia.com.36 ** If you have questions regarding the use of this file, please contact 37 ** Nokia at qt-info@nokia.com. 38 38 ** $QT_END_LICENSE$ 39 39 ** … … 99 99 QScriptDebuggerCommandExecutor::~QScriptDebuggerCommandExecutor() 100 100 { 101 delete d_ptr; 101 } 102 103 static bool isPrefixOf(const QString &prefix, const QString &what) 104 { 105 return ((what.length() > prefix.length()) 106 && what.startsWith(prefix)); 102 107 } 103 108 … … 106 111 */ 107 112 QScriptDebuggerResponse QScriptDebuggerCommandExecutor::execute( 108 109 113 QScriptDebuggerBackend *backend, 114 const QScriptDebuggerCommand &command) 110 115 { 111 116 QScriptDebuggerResponse response; … … 288 293 if (ctx) { 289 294 QScriptDebuggerValueList dest; 290 #if QT_VERSION >= 0x040500291 295 QScriptValueList src = ctx->scopeChain(); 292 296 for (int i = 0; i < src.size(); ++i) 293 297 dest.append(src.at(i)); 294 #else295 dest.append(ctx->activationObject());296 #endif297 298 response.setResult(dest); 298 299 } else { … … 303 304 case QScriptDebuggerCommand::ContextsCheckpoint: { 304 305 response.setResult(qVariantFromValue(backend->contextsCheckpoint())); 306 } break; 307 308 case QScriptDebuggerCommand::GetPropertyExpressionValue: { 309 QScriptContext *ctx = backend->context(command.contextIndex()); 310 int lineNumber = command.lineNumber(); 311 QVariant attr = command.attribute(QScriptDebuggerCommand::UserAttribute); 312 QStringList path = attr.toStringList(); 313 if (!ctx || path.isEmpty()) 314 break; 315 QScriptContextInfo ctxInfo(ctx); 316 if (ctx->callee().isValid() 317 && ((lineNumber < ctxInfo.functionStartLineNumber()) 318 || (lineNumber > ctxInfo.functionEndLineNumber()))) { 319 break; 320 } 321 QScriptValueList objects; 322 int pathIndex = 0; 323 if (path.at(0) == QLatin1String("this")) { 324 objects.append(ctx->thisObject()); 325 ++pathIndex; 326 } else { 327 objects << ctx->scopeChain(); 328 } 329 for (int i = 0; i < objects.size(); ++i) { 330 QScriptValue val = objects.at(i); 331 for (int j = pathIndex; val.isValid() && (j < path.size()); ++j) { 332 val = val.property(path.at(j)); 333 } 334 if (val.isValid()) { 335 bool hadException = (ctx->state() == QScriptContext::ExceptionState); 336 QString str = val.toString(); 337 if (!hadException && backend->engine()->hasUncaughtException()) 338 backend->engine()->clearExceptions(); 339 response.setResult(str); 340 break; 341 } 342 } 343 } break; 344 345 case QScriptDebuggerCommand::GetCompletions: { 346 QScriptContext *ctx = backend->context(command.contextIndex()); 347 QVariant attr = command.attribute(QScriptDebuggerCommand::UserAttribute); 348 QStringList path = attr.toStringList(); 349 if (!ctx || path.isEmpty()) 350 break; 351 QScriptValueList objects; 352 QString prefix = path.last(); 353 QSet<QString> matches; 354 if (path.size() > 1) { 355 const QString &topLevelIdent = path.at(0); 356 QScriptValue obj; 357 if (topLevelIdent == QLatin1String("this")) { 358 obj = ctx->thisObject(); 359 } else { 360 QScriptValueList scopeChain; 361 scopeChain = ctx->scopeChain(); 362 for (int i = 0; i < scopeChain.size(); ++i) { 363 QScriptValue oo = scopeChain.at(i).property(topLevelIdent); 364 if (oo.isObject()) { 365 obj = oo; 366 break; 367 } 368 } 369 } 370 for (int i = 1; obj.isObject() && (i < path.size()-1); ++i) 371 obj = obj.property(path.at(i)); 372 if (obj.isValid()) 373 objects.append(obj); 374 } else { 375 objects << ctx->scopeChain(); 376 QStringList keywords; 377 keywords.append(QString::fromLatin1("this")); 378 keywords.append(QString::fromLatin1("true")); 379 keywords.append(QString::fromLatin1("false")); 380 keywords.append(QString::fromLatin1("null")); 381 for (int i = 0; i < keywords.size(); ++i) { 382 const QString &kwd = keywords.at(i); 383 if (isPrefixOf(prefix, kwd)) 384 matches.insert(kwd); 385 } 386 } 387 388 for (int i = 0; i < objects.size(); ++i) { 389 QScriptValue obj = objects.at(i); 390 while (obj.isObject()) { 391 QScriptValueIterator it(obj); 392 while (it.hasNext()) { 393 it.next(); 394 QString propertyName = it.name(); 395 if (isPrefixOf(prefix, propertyName)) 396 matches.insert(propertyName); 397 } 398 obj = obj.prototype(); 399 } 400 } 401 QStringList matchesList = matches.toList(); 402 qStableSort(matchesList); 403 response.setResult(matchesList); 305 404 } break; 306 405
Note:
See TracChangeset
for help on using the changeset viewer.