+2008-06-03 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Tim.
+
+ Bug 12983: Web Inspector break on the debugger keyword
+ <https://bugs.webkit.org/show_bug.cgi?id=12983>
+
+ Added a DebuggerStatementNode to handle codegen, and added a new
+ DidReachBreakPoint debug event (which will hopefully be useful
+ if we ever move breakpoint management into JSC proper). Also
+ added didReachBreakpoint to Debugger to allow us to actually respond
+ to this event.
+
+ * VM/CodeBlock.cpp:
+ (KJS::debugHookName):
+ * VM/Machine.cpp:
+ (KJS::Machine::debug):
+ * VM/Machine.h:
+ (KJS::):
+ * kjs/debugger.h:
+ * kjs/grammar.y:
+ * kjs/nodes.cpp:
+ (KJS::DebuggerStatementNode::emitCode):
+ (KJS::DebuggerStatementNode::execute):
+ * kjs/nodes.h:
+ (KJS::DebuggerStatementNode::):
+ * kjs/nodes2string.cpp:
+ (KJS::DebuggerStatementNode::streamTo):
+
2008-06-03 Maciej Stachowiak <mjs@apple.com>
Reviewed by Oliver.
return "willExecuteProgram";
case DidExecuteProgram:
return "didExecuteProgram";
+ case DidReachBreakpoint:
+ return "didReachBreakpoint";
}
ASSERT_NOT_REACHED();
debugger->didExecuteProgram(debuggerCallFrame, codeBlock->ownerNode->sourceId(), lastLine);
return;
}
+ case DidReachBreakpoint: {
+ debugger->didReachBreakpoint(debuggerCallFrame, codeBlock->ownerNode->sourceId(), lastLine);
+ return;
+ }
}
}
WillExecuteProgram,
DidExecuteProgram,
DidEnterCallFrame,
+ DidReachBreakpoint,
WillLeaveCallFrame,
WillExecuteStatement
};
virtual void willExecuteProgram(const DebuggerCallFrame&, int sourceId, int lineno) = 0;
virtual void didExecuteProgram(const DebuggerCallFrame&, int sourceId, int lineno) = 0;
+ virtual void didReachBreakpoint(const DebuggerCallFrame&, int sourceId, int lineno) = 0;
private:
HashSet<JSGlobalObject*> m_globalObjects;
;
DebuggerStatement:
- DEBUGGER ';' { $$ = createNodeDeclarationInfo<StatementNode*>(new EmptyStatementNode(), 0, 0, 0);
+ DEBUGGER ';' { $$ = createNodeDeclarationInfo<StatementNode*>(new DebuggerStatementNode(), 0, 0, 0);
DBG($$.m_node, @1, @2); }
- | DEBUGGER error { $$ = createNodeDeclarationInfo<StatementNode*>(new EmptyStatementNode(), 0, 0, 0);
+ | DEBUGGER error { $$ = createNodeDeclarationInfo<StatementNode*>(new DebuggerStatementNode(), 0, 0, 0);
DBG($$.m_node, @1, @1); AUTO_SEMICOLON; }
;
return exec->setNormalCompletion();
}
+// ------------------------------ DebuggerStatementNode ---------------------------
+
+RegisterID* DebuggerStatementNode::emitCode(CodeGenerator& generator, RegisterID* dst)
+{
+ generator.emitDebugHook(DidReachBreakpoint, firstLine(), lastLine());
+ return dst;
+}
+
+JSValue* DebuggerStatementNode::execute(OldInterpreterExecState* exec)
+{
+ return exec->setNormalCompletion();
+}
+
// ------------------------------ ExprStatementNode ----------------------------
RegisterID* ExprStatementNode::emitCode(CodeGenerator& generator, RegisterID* dst)
virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
virtual bool isEmptyStatement() const KJS_FAST_CALL { return true; }
};
+
+ class DebuggerStatementNode : public StatementNode {
+ public:
+ DebuggerStatementNode() KJS_FAST_CALL
+ {
+ }
+
+ virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
+
+ virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
+ virtual JSValue* execute(OldInterpreterExecState*) KJS_FAST_CALL;
+ };
class ExprStatementNode : public StatementNode {
public:
s << Endl << ';';
}
+void DebuggerStatementNode::streamTo(SourceStream& s) const
+{
+ s << Endl << "debugger;";
+}
+
void ExprStatementNode::streamTo(SourceStream& s) const
{
s << Endl << m_expr << ';';
+2008-06-03 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Tim.
+
+ Bug 12983: Web Inspector break on the debugger keyword
+ <https://bugs.webkit.org/show_bug.cgi?id=12983>
+
+ Added support for the new debugger didReachBreakpoint
+ callback so that WebInspector receives the debugger event
+ and breaks.
+
+ * page/JavaScriptDebugServer.cpp:
+ (WebCore::JavaScriptDebugServer::didReachBreakpoint):
+ * page/JavaScriptDebugServer.h:
+
2008-06-03 Darin Adler <darin@apple.com>
Fix build with GCC.
m_currentCallFrame = m_currentCallFrame->caller();
}
+void JavaScriptDebugServer::didReachBreakpoint(const DebuggerCallFrame& debuggerCallFrame, int sourceID, int lineNumber)
+{
+ if (m_paused)
+ return;
+
+ ASSERT(m_currentCallFrame);
+ if (!m_currentCallFrame)
+ return;
+
+ m_pauseOnNextStatement = true;
+ m_currentCallFrame->update(debuggerCallFrame, sourceID, lineNumber);
+ pauseIfNeeded(toPage(debuggerCallFrame.dynamicGlobalObject()));
+}
+
} // namespace WebCore
virtual void exception(const KJS::DebuggerCallFrame&, int sourceID, int lineNumber);
virtual void willExecuteProgram(const KJS::DebuggerCallFrame&, int sourceId, int lineno);
virtual void didExecuteProgram(const KJS::DebuggerCallFrame&, int sourceId, int lineno);
+ virtual void didReachBreakpoint(const KJS::DebuggerCallFrame&, int sourceId, int lineno);
typedef HashMap<Page*, ListenerSet*> PageListenersMap;
PageListenersMap m_pageListenersMap;
+2008-06-03 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Tim.
+
+ Bug 12983: Web Inspector break on the debugger keyword
+ <https://bugs.webkit.org/show_bug.cgi?id=12983>
+
+ Add stubs to allow old webkit debugger interface to build.
+
+ * WebView/WebScriptDebugger.h:
+ * WebView/WebScriptDebugger.mm:
+
2008-06-03 Anders Carlsson <andersca@apple.com>
Reviewed by Darin.
virtual void exception(const KJS::DebuggerCallFrame&, int sourceID, int lineNumber);
virtual void willExecuteProgram(const KJS::DebuggerCallFrame&, int sourceId, int lineno);
virtual void didExecuteProgram(const KJS::DebuggerCallFrame&, int sourceId, int lineno);
+ virtual void didReachBreakpoint(const KJS::DebuggerCallFrame&, int sourceId, int lineno);
private:
bool m_callingDelegate;
{
[m_topCallFrame.get() _clearDebuggerCallFrame];
}
+
+void WebScriptDebugger::didReachBreakpoint(const DebuggerCallFrame&, int, int)
+{
+ return;
+}