42 #include "qscriptdebuggerconsole_p.h" |
42 #include "qscriptdebuggerconsole_p.h" |
43 #include "qscriptdebuggerconsolecommandjob_p.h" |
43 #include "qscriptdebuggerconsolecommandjob_p.h" |
44 #include "qscriptdebuggerconsolecommandmanager_p.h" |
44 #include "qscriptdebuggerconsolecommandmanager_p.h" |
45 #include "qscriptdebuggerscriptedconsolecommand_p.h" |
45 #include "qscriptdebuggerscriptedconsolecommand_p.h" |
46 #include "qscriptmessagehandlerinterface_p.h" |
46 #include "qscriptmessagehandlerinterface_p.h" |
|
47 #include "qscriptbreakpointdata_p.h" |
|
48 #include "qscriptdebuggerresponse_p.h" |
|
49 #include "qscriptdebuggervalueproperty_p.h" |
|
50 #include "qscriptscriptdata_p.h" |
47 |
51 |
48 #include <QtCore/qdir.h> |
52 #include <QtCore/qdir.h> |
49 #include <QtCore/qfileinfo.h> |
53 #include <QtCore/qfileinfo.h> |
50 #include <QtCore/qstring.h> |
54 #include <QtCore/qstring.h> |
51 #include <QtCore/qstringlist.h> |
55 #include <QtCore/qstringlist.h> |
52 #include <QtCore/qdebug.h> |
56 #include <QtCore/qdebug.h> |
|
57 #include <QtScript/qscriptcontextinfo.h> |
53 #include <QtScript/qscriptengine.h> |
58 #include <QtScript/qscriptengine.h> |
54 |
59 |
|
60 Q_DECLARE_METATYPE(QScriptDebuggerResponse) |
|
61 Q_DECLARE_METATYPE(QScriptBreakpointData) |
|
62 Q_DECLARE_METATYPE(QScriptBreakpointMap) |
|
63 Q_DECLARE_METATYPE(QScriptScriptData) |
|
64 Q_DECLARE_METATYPE(QScriptScriptMap) |
|
65 Q_DECLARE_METATYPE(QScriptContextInfo) |
|
66 Q_DECLARE_METATYPE(QScriptDebuggerValue) |
|
67 Q_DECLARE_METATYPE(QScriptDebuggerValueProperty) |
|
68 Q_DECLARE_METATYPE(QScriptDebuggerValuePropertyList) |
|
69 Q_DECLARE_METATYPE(QScriptDebuggerConsoleCommand*) |
|
70 Q_DECLARE_METATYPE(QScriptDebuggerConsoleCommandList) |
|
71 Q_DECLARE_METATYPE(QScriptDebuggerConsoleCommandGroupData) |
|
72 Q_DECLARE_METATYPE(QScriptDebuggerConsoleCommandGroupMap) |
|
73 |
55 QT_BEGIN_NAMESPACE |
74 QT_BEGIN_NAMESPACE |
|
75 |
|
76 static QScriptValue debuggerResponseToScriptValue(QScriptEngine *eng, const QScriptDebuggerResponse &in) |
|
77 { |
|
78 QScriptValue out = eng->newObject(); |
|
79 out.setProperty(QString::fromLatin1("result"), qScriptValueFromValue(eng, in.result())); |
|
80 out.setProperty(QString::fromLatin1("error"), QScriptValue(eng, in.error())); |
|
81 out.setProperty(QString::fromLatin1("async"), QScriptValue(eng, in.async())); |
|
82 return out; |
|
83 } |
|
84 |
|
85 static void debuggerResponseFromScriptValue(const QScriptValue &, QScriptDebuggerResponse &) |
|
86 { |
|
87 Q_ASSERT(0); |
|
88 } |
|
89 |
|
90 static QScriptValue breakpointDataToScriptValue(QScriptEngine *eng, const QScriptBreakpointData &in) |
|
91 { |
|
92 QScriptValue out = eng->newObject(); |
|
93 out.setProperty(QString::fromLatin1("scriptId"), QScriptValue(eng, qsreal(in.scriptId()))); |
|
94 out.setProperty(QString::fromLatin1("fileName"), QScriptValue(eng, in.fileName())); |
|
95 out.setProperty(QString::fromLatin1("lineNumber"), QScriptValue(eng, in.lineNumber())); |
|
96 out.setProperty(QString::fromLatin1("enabled"), QScriptValue(eng, in.isEnabled())); |
|
97 out.setProperty(QString::fromLatin1("singleShot"), QScriptValue(eng, in.isSingleShot())); |
|
98 out.setProperty(QString::fromLatin1("ignoreCount"), QScriptValue(eng, in.ignoreCount())); |
|
99 out.setProperty(QString::fromLatin1("condition"), QScriptValue(eng, in.condition())); |
|
100 return out; |
|
101 } |
|
102 |
|
103 static void breakpointDataFromScriptValue(const QScriptValue &in, QScriptBreakpointData &out) |
|
104 { |
|
105 QScriptValue scriptId = in.property(QString::fromLatin1("scriptId")); |
|
106 if (scriptId.isValid()) |
|
107 out.setScriptId((qint64)scriptId.toNumber()); |
|
108 out.setFileName(in.property(QString::fromLatin1("fileName")).toString()); |
|
109 out.setLineNumber(in.property(QString::fromLatin1("lineNumber")).toInt32()); |
|
110 QScriptValue enabled = in.property(QString::fromLatin1("enabled")); |
|
111 if (enabled.isValid()) |
|
112 out.setEnabled(enabled.toBoolean()); |
|
113 QScriptValue singleShot = in.property(QString::fromLatin1("singleShot")); |
|
114 if (singleShot.isValid()) |
|
115 out.setSingleShot(singleShot.toBoolean()); |
|
116 out.setIgnoreCount(in.property(QString::fromLatin1("ignoreCount")).toInt32()); |
|
117 out.setCondition(in.property(QString::fromLatin1("condition")).toString()); |
|
118 } |
|
119 |
|
120 static QScriptValue breakpointMapToScriptValue(QScriptEngine *eng, const QScriptBreakpointMap &in) |
|
121 { |
|
122 QScriptValue out = eng->newObject(); |
|
123 QScriptBreakpointMap::const_iterator it; |
|
124 for (it = in.constBegin(); it != in.constEnd(); ++it) { |
|
125 out.setProperty(QString::number(it.key()), qScriptValueFromValue(eng, it.value())); |
|
126 } |
|
127 return out; |
|
128 } |
|
129 |
|
130 static void breakpointMapFromScriptValue(const QScriptValue &, QScriptBreakpointMap &) |
|
131 { |
|
132 Q_ASSERT(0); |
|
133 } |
|
134 |
|
135 static QScriptValue scriptDataToScriptValue(QScriptEngine *eng, const QScriptScriptData &in) |
|
136 { |
|
137 QScriptValue out = eng->newObject(); |
|
138 out.setProperty(QString::fromLatin1("contents"), QScriptValue(eng, in.contents())); |
|
139 out.setProperty(QString::fromLatin1("fileName"), QScriptValue(eng, in.fileName())); |
|
140 out.setProperty(QString::fromLatin1("baseLineNumber"), QScriptValue(eng, in.baseLineNumber())); |
|
141 return out; |
|
142 } |
|
143 |
|
144 static void scriptDataFromScriptValue(const QScriptValue &in, QScriptScriptData &out) |
|
145 { |
|
146 QString contents = in.property(QString::fromLatin1("contents")).toString(); |
|
147 QString fileName = in.property(QString::fromLatin1("fileName")).toString(); |
|
148 int baseLineNumber = in.property(QString::fromLatin1("baseLineNumber")).toInt32(); |
|
149 QScriptScriptData tmp(contents, fileName, baseLineNumber); |
|
150 out = tmp; |
|
151 } |
|
152 |
|
153 static QScriptValue scriptMapToScriptValue(QScriptEngine *eng, const QScriptScriptMap &in) |
|
154 { |
|
155 QScriptValue out = eng->newObject(); |
|
156 QScriptScriptMap::const_iterator it; |
|
157 for (it = in.constBegin(); it != in.constEnd(); ++it) { |
|
158 out.setProperty(QString::number(it.key()), qScriptValueFromValue(eng, it.value())); |
|
159 } |
|
160 return out; |
|
161 } |
|
162 |
|
163 static void scriptMapFromScriptValue(const QScriptValue &, QScriptScriptMap &) |
|
164 { |
|
165 Q_ASSERT(0); |
|
166 } |
|
167 |
|
168 static QScriptValue consoleCommandToScriptValue( |
|
169 QScriptEngine *eng, QScriptDebuggerConsoleCommand* const &in) |
|
170 { |
|
171 if (!in) |
|
172 return eng->undefinedValue(); |
|
173 QScriptValue out = eng->newObject(); |
|
174 out.setProperty(QString::fromLatin1("name"), QScriptValue(eng, in->name())); |
|
175 out.setProperty(QString::fromLatin1("group"), QScriptValue(eng, in->group())); |
|
176 out.setProperty(QString::fromLatin1("shortDescription"), QScriptValue(eng, in->shortDescription())); |
|
177 out.setProperty(QString::fromLatin1("longDescription"), QScriptValue(eng, in->longDescription())); |
|
178 out.setProperty(QString::fromLatin1("aliases"), qScriptValueFromValue(eng, in->aliases())); |
|
179 out.setProperty(QString::fromLatin1("seeAlso"), qScriptValueFromValue(eng, in->seeAlso())); |
|
180 return out; |
|
181 } |
|
182 |
|
183 static void consoleCommandFromScriptValue( |
|
184 const QScriptValue &, QScriptDebuggerConsoleCommand* &) |
|
185 { |
|
186 Q_ASSERT(0); |
|
187 } |
|
188 |
|
189 static QScriptValue consoleCommandGroupDataToScriptValue( |
|
190 QScriptEngine *eng, const QScriptDebuggerConsoleCommandGroupData &in) |
|
191 { |
|
192 QScriptValue out = eng->newObject(); |
|
193 out.setProperty(QString::fromLatin1("longDescription"), QScriptValue(eng, in.longDescription())); |
|
194 out.setProperty(QString::fromLatin1("shortDescription"), QScriptValue(eng, in.shortDescription())); |
|
195 return out; |
|
196 } |
|
197 |
|
198 static void consoleCommandGroupDataFromScriptValue( |
|
199 const QScriptValue &, QScriptDebuggerConsoleCommandGroupData &) |
|
200 { |
|
201 Q_ASSERT(0); |
|
202 } |
|
203 |
|
204 static QScriptValue consoleCommandGroupMapToScriptValue( |
|
205 QScriptEngine *eng, const QScriptDebuggerConsoleCommandGroupMap &in) |
|
206 { |
|
207 QScriptValue out = eng->newObject(); |
|
208 QScriptDebuggerConsoleCommandGroupMap::const_iterator it; |
|
209 for (it = in.constBegin(); it != in.constEnd(); ++it) { |
|
210 out.setProperty(it.key(), qScriptValueFromValue(eng, it.value())); |
|
211 } |
|
212 return out; |
|
213 } |
|
214 |
|
215 static void consoleCommandGroupMapFromScriptValue( |
|
216 const QScriptValue &, QScriptDebuggerConsoleCommandGroupMap &) |
|
217 { |
|
218 Q_ASSERT(0); |
|
219 } |
|
220 |
|
221 static QScriptValue contextInfoToScriptValue(QScriptEngine *eng, const QScriptContextInfo &in) |
|
222 { |
|
223 QScriptValue out = eng->newObject(); |
|
224 out.setProperty(QString::fromLatin1("scriptId"), QScriptValue(eng, qsreal(in.scriptId()))); |
|
225 out.setProperty(QString::fromLatin1("fileName"), QScriptValue(eng, in.fileName())); |
|
226 out.setProperty(QString::fromLatin1("lineNumber"), QScriptValue(eng, in.lineNumber())); |
|
227 out.setProperty(QString::fromLatin1("columnNumber"), QScriptValue(eng, in.columnNumber())); |
|
228 out.setProperty(QString::fromLatin1("functionName"), QScriptValue(eng, in.functionName())); |
|
229 return out; |
|
230 } |
|
231 |
|
232 static void contextInfoFromScriptValue(const QScriptValue &, QScriptContextInfo &) |
|
233 { |
|
234 Q_ASSERT(0); |
|
235 } |
|
236 |
|
237 static QScriptValue debuggerScriptValuePropertyToScriptValue(QScriptEngine *eng, const QScriptDebuggerValueProperty &in) |
|
238 { |
|
239 QScriptValue out = eng->newObject(); |
|
240 out.setProperty(QString::fromLatin1("name"), QScriptValue(eng, in.name())); |
|
241 out.setProperty(QString::fromLatin1("value"), qScriptValueFromValue(eng, in.value())); |
|
242 out.setProperty(QString::fromLatin1("valueAsString"), QScriptValue(eng, in.valueAsString())); |
|
243 out.setProperty(QString::fromLatin1("flags"), QScriptValue(eng, static_cast<int>(in.flags()))); |
|
244 return out; |
|
245 } |
|
246 |
|
247 static void debuggerScriptValuePropertyFromScriptValue(const QScriptValue &in, QScriptDebuggerValueProperty &out) |
|
248 { |
|
249 QString name = in.property(QString::fromLatin1("name")).toString(); |
|
250 QScriptDebuggerValue value = qscriptvalue_cast<QScriptDebuggerValue>(in.property(QString::fromLatin1("value"))); |
|
251 QString valueAsString = in.property(QString::fromLatin1("valueAsString")).toString(); |
|
252 int flags = in.property(QString::fromLatin1("flags")).toInt32(); |
|
253 QScriptDebuggerValueProperty tmp(name, value, valueAsString, QScriptValue::PropertyFlags(flags)); |
|
254 out = tmp; |
|
255 } |
56 |
256 |
57 /*! |
257 /*! |
58 \since 4.5 |
258 \since 4.5 |
59 \class QScriptDebuggerConsole |
259 \class QScriptDebuggerConsole |
60 \internal |
260 \internal |
97 currentScriptId = -1; |
298 currentScriptId = -1; |
98 currentLineNumber = -1; |
299 currentLineNumber = -1; |
99 evaluateAction = 0; |
300 evaluateAction = 0; |
100 commandPrefix = QLatin1String("."); |
301 commandPrefix = QLatin1String("."); |
101 commandManager = new QScriptDebuggerConsoleCommandManager(); |
302 commandManager = new QScriptDebuggerConsoleCommandManager(); |
|
303 |
|
304 commandEngine = new QScriptEngine; |
|
305 qScriptRegisterMetaType<QScriptBreakpointData>(commandEngine, breakpointDataToScriptValue, breakpointDataFromScriptValue); |
|
306 qScriptRegisterMetaType<QScriptBreakpointMap>(commandEngine, breakpointMapToScriptValue, breakpointMapFromScriptValue); |
|
307 qScriptRegisterMetaType<QScriptScriptData>(commandEngine, scriptDataToScriptValue, scriptDataFromScriptValue); |
|
308 qScriptRegisterMetaType<QScriptScriptMap>(commandEngine, scriptMapToScriptValue, scriptMapFromScriptValue); |
|
309 qScriptRegisterMetaType<QScriptContextInfo>(commandEngine, contextInfoToScriptValue, contextInfoFromScriptValue); |
|
310 qScriptRegisterMetaType<QScriptDebuggerValueProperty>(commandEngine, debuggerScriptValuePropertyToScriptValue, debuggerScriptValuePropertyFromScriptValue); |
|
311 qScriptRegisterSequenceMetaType<QScriptDebuggerValuePropertyList>(commandEngine); |
|
312 qScriptRegisterMetaType<QScriptDebuggerResponse>(commandEngine, debuggerResponseToScriptValue, debuggerResponseFromScriptValue); |
|
313 qScriptRegisterMetaType<QScriptDebuggerConsoleCommand*>(commandEngine, consoleCommandToScriptValue, consoleCommandFromScriptValue); |
|
314 qScriptRegisterSequenceMetaType<QScriptDebuggerConsoleCommandList>(commandEngine); |
|
315 qScriptRegisterMetaType<QScriptDebuggerConsoleCommandGroupData>(commandEngine, consoleCommandGroupDataToScriptValue, consoleCommandGroupDataFromScriptValue); |
|
316 qScriptRegisterMetaType<QScriptDebuggerConsoleCommandGroupMap>(commandEngine, consoleCommandGroupMapToScriptValue, consoleCommandGroupMapFromScriptValue); |
|
317 // ### can't do this, if it's an object ID the conversion will be incorrect since |
|
318 // ### the object ID refers to an object in a different engine! |
|
319 // qScriptRegisterMetaType(commandEngine, debuggerScriptValueToScriptValue, debuggerScriptValueFromScriptValue); |
102 } |
320 } |
103 |
321 |
104 QScriptDebuggerConsolePrivate::~QScriptDebuggerConsolePrivate() |
322 QScriptDebuggerConsolePrivate::~QScriptDebuggerConsolePrivate() |
105 { |
323 { |
106 delete commandManager; |
324 delete commandManager; |
|
325 delete commandEngine; |
107 } |
326 } |
108 |
327 |
109 /*! |
328 /*! |
110 Loads command definitions from scripts located in the given \a scriptsPath. |
329 Loads command definitions from scripts located in the given \a scriptsPath. |
111 */ |
330 */ |