Changeset 34351 in webkit for trunk/JavaScriptCore/kjs


Ignore:
Timestamp:
Jun 3, 2008, 3:48:52 PM (17 years ago)
Author:
[email protected]
Message:

Bug 12983: Web Inspector break on the debugger keyword
<https://bugs.webkit.org/show_bug.cgi?id=12983>

Reviewed by Tim

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.

Location:
trunk/JavaScriptCore/kjs
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/kjs/debugger.h

    r34182 r34351  
    167167    virtual void willExecuteProgram(const DebuggerCallFrame&, int sourceId, int lineno) = 0;
    168168    virtual void didExecuteProgram(const DebuggerCallFrame&, int sourceId, int lineno) = 0;
     169    virtual void didReachBreakpoint(const DebuggerCallFrame&, int sourceId, int lineno) = 0;
    169170
    170171  private:
  • trunk/JavaScriptCore/kjs/grammar.y

    r33979 r34351  
    10211021
    10221022DebuggerStatement:
    1023     DEBUGGER ';'                        { $$ = createNodeDeclarationInfo<StatementNode*>(new EmptyStatementNode(), 0, 0, 0);
     1023    DEBUGGER ';'                        { $$ = createNodeDeclarationInfo<StatementNode*>(new DebuggerStatementNode(), 0, 0, 0);
    10241024                                          DBG($$.m_node, @1, @2); }
    1025   | DEBUGGER error                      { $$ = createNodeDeclarationInfo<StatementNode*>(new EmptyStatementNode(), 0, 0, 0);
     1025  | DEBUGGER error                      { $$ = createNodeDeclarationInfo<StatementNode*>(new DebuggerStatementNode(), 0, 0, 0);
    10261026                                          DBG($$.m_node, @1, @1); AUTO_SEMICOLON; }
    10271027;
  • trunk/JavaScriptCore/kjs/nodes.cpp

    r34334 r34351  
    48454845}
    48464846
     4847// ------------------------------ DebuggerStatementNode ---------------------------
     4848
     4849RegisterID* DebuggerStatementNode::emitCode(CodeGenerator& generator, RegisterID* dst)
     4850{
     4851    generator.emitDebugHook(DidReachBreakpoint, firstLine(), lastLine());
     4852    return dst;
     4853}
     4854
     4855JSValue* DebuggerStatementNode::execute(OldInterpreterExecState* exec)
     4856{
     4857    return exec->setNormalCompletion();
     4858}
     4859
    48474860// ------------------------------ ExprStatementNode ----------------------------
    48484861
  • trunk/JavaScriptCore/kjs/nodes.h

    r34319 r34351  
    26392639        virtual bool isEmptyStatement() const KJS_FAST_CALL { return true; }
    26402640    };
     2641   
     2642    class DebuggerStatementNode : public StatementNode {
     2643    public:
     2644        DebuggerStatementNode() KJS_FAST_CALL
     2645        {
     2646        }
     2647       
     2648        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
     2649
     2650        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     2651        virtual JSValue* execute(OldInterpreterExecState*) KJS_FAST_CALL;
     2652    };
    26412653
    26422654    class ExprStatementNode : public StatementNode {
  • trunk/JavaScriptCore/kjs/nodes2string.cpp

    r31149 r34351  
    821821}
    822822
     823void DebuggerStatementNode::streamTo(SourceStream& s) const
     824{
     825    s << Endl << "debugger;";
     826}
     827
    823828void ExprStatementNode::streamTo(SourceStream& s) const
    824829{
Note: See TracChangeset for help on using the changeset viewer.