Ignore:
Timestamp:
Mar 1, 2009, 11:35:47 AM (16 years ago)
Author:
[email protected]
Message:

JavaScriptCore:

2009-03-01 Horia Olaru <[email protected]>

By looking in grammar.y there are only a few types of statement nodes
on which the debugger should stop.

Removed isBlock and isLoop virtual calls. No need to emit debug hooks in
the "statementListEmitCode" method as long as the necessary hooks can be
added in each "emitCode".

https://bugs.webkit.org/show_bug.cgi?id=21073

Reviewed by Kevin McCullough.

  • parser/Nodes.cpp: (JSC::ConstStatementNode::emitBytecode): (JSC::statementListEmitCode): (JSC::EmptyStatementNode::emitBytecode): (JSC::ExprStatementNode::emitBytecode): (JSC::VarStatementNode::emitBytecode): (JSC::IfNode::emitBytecode): (JSC::IfElseNode::emitBytecode): (JSC::DoWhileNode::emitBytecode): (JSC::WhileNode::emitBytecode): (JSC::ForNode::emitBytecode): (JSC::ForInNode::emitBytecode): (JSC::ContinueNode::emitBytecode): (JSC::BreakNode::emitBytecode): (JSC::ReturnNode::emitBytecode): (JSC::WithNode::emitBytecode): (JSC::SwitchNode::emitBytecode): (JSC::LabelNode::emitBytecode): (JSC::ThrowNode::emitBytecode): (JSC::TryNode::emitBytecode):
  • parser/Nodes.h:

WebCore:

2009-03-01 Horia Olaru <[email protected]>

Adding manual debugger test cases for bug.

https://bugs.webkit.org/show_bug.cgi?id=21073

Reviewed by Kevin McCullough.

  • manual-tests/inspector/debugger-step-on-do-while-statements.html: Added.
  • manual-tests/inspector/debugger-step-on-for-in-statements.html: Added.
  • manual-tests/inspector/debugger-step-on-for-statements.html: Added.
  • manual-tests/inspector/debugger-step-on-while-statements.html: Added.
  • manual-tests/inspector/resources/loop-statements.js: Added.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/parser/Nodes.cpp

    r40993 r41342  
    15801580RegisterID* ConstStatementNode::emitBytecode(BytecodeGenerator& generator, RegisterID*)
    15811581{
     1582    generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine());
    15821583    return generator.emitNode(m_next.get());
    15831584}
     
    15901591    for (StatementVector::const_iterator it = statements.begin(); it != end; ++it) {
    15911592        StatementNode* n = it->get();
    1592         if (!n->isLoop())
    1593             generator.emitDebugHook(WillExecuteStatement, n->firstLine(), n->lastLine());
    15941593        generator.emitNode(dst, n);
    15951594    }
     
    16251624// ------------------------------ EmptyStatementNode ---------------------------
    16261625
    1627 RegisterID* EmptyStatementNode::emitBytecode(BytecodeGenerator&, RegisterID* dst)
    1628 {
     1626RegisterID* EmptyStatementNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst)
     1627{
     1628    generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine());
    16291629    return dst;
    16301630}
     
    16431643{
    16441644    ASSERT(m_expr);
     1645    generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine());
    16451646    return generator.emitNode(dst, m_expr.get());
    16461647}
     
    16611662{
    16621663    ASSERT(m_expr);
     1664    generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine());
    16631665    return generator.emitNode(m_expr.get());
    16641666}
     
    16791681RegisterID* IfNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst)
    16801682{
     1683    generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine());
     1684   
    16811685    RefPtr<Label> afterThen = generator.newLabel();
    16821686
     
    16841688    generator.emitJumpIfFalse(cond, afterThen.get());
    16851689
    1686     if (!m_ifBlock->isBlock())
    1687         generator.emitDebugHook(WillExecuteStatement, m_ifBlock->firstLine(), m_ifBlock->lastLine());
    1688 
    16891690    generator.emitNode(dst, m_ifBlock.get());
    16901691    generator.emitLabel(afterThen.get());
     
    17091710RegisterID* IfElseNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst)
    17101711{
     1712    generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine());
     1713   
    17111714    RefPtr<Label> beforeElse = generator.newLabel();
    17121715    RefPtr<Label> afterElse = generator.newLabel();
     
    17151718    generator.emitJumpIfFalse(cond, beforeElse.get());
    17161719
    1717     if (!m_ifBlock->isBlock())
    1718         generator.emitDebugHook(WillExecuteStatement, m_ifBlock->firstLine(), m_ifBlock->lastLine());
    1719 
    17201720    generator.emitNode(dst, m_ifBlock.get());
    17211721    generator.emitJump(afterElse.get());
     
    17231723    generator.emitLabel(beforeElse.get());
    17241724
    1725     if (!m_elseBlock->isBlock())
    1726         generator.emitDebugHook(WillExecuteStatement, m_elseBlock->firstLine(), m_elseBlock->lastLine());
    1727 
    17281725    generator.emitNode(dst, m_elseBlock.get());
    17291726
     
    17551752
    17561753    generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine());
    1757 
    1758     if (!m_statement->isBlock())
    1759         generator.emitDebugHook(WillExecuteStatement, m_statement->firstLine(), m_statement->lastLine());
    1760        
     1754   
    17611755    RefPtr<RegisterID> result = generator.emitNode(dst, m_statement.get());
    17621756
     
    17911785    RefPtr<Label> topOfLoop = generator.newLabel();
    17921786    generator.emitLabel(topOfLoop.get());
    1793 
    1794     if (!m_statement->isBlock())
    1795         generator.emitDebugHook(WillExecuteStatement, m_statement->firstLine(), m_statement->lastLine());
    1796  
     1787   
    17971788    generator.emitNode(dst, m_statement.get());
    17981789
     
    18411832    generator.emitLabel(topOfLoop.get());
    18421833
    1843     if (!m_statement->isBlock())
    1844         generator.emitDebugHook(WillExecuteStatement, m_statement->firstLine(), m_statement->lastLine());
    18451834    RefPtr<RegisterID> result = generator.emitNode(dst, m_statement.get());
    18461835
    18471836    generator.emitLabel(scope->continueTarget());
     1837    generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine());
    18481838    if (m_expr3)
    18491839        generator.emitNode(generator.ignoredResult(), m_expr3.get());
     
    19541944    }   
    19551945
    1956     if (!m_statement->isBlock())
    1957         generator.emitDebugHook(WillExecuteStatement, m_statement->firstLine(), m_statement->lastLine());
    19581946    generator.emitNode(dst, m_statement.get());
    19591947
    19601948    generator.emitLabel(scope->continueTarget());
    19611949    generator.emitNextPropertyName(propertyName, iter.get(), loopStart.get());
     1950    generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine());
    19621951    generator.emitLabel(scope->breakTarget());
    19631952    return dst;
     
    19691958RegisterID* ContinueNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst)
    19701959{
     1960    generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine());
     1961   
    19711962    LabelScope* scope = generator.continueTarget(m_ident);
    19721963
     
    19851976RegisterID* BreakNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst)
    19861977{
     1978    generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine());
     1979   
    19871980    LabelScope* scope = generator.breakTarget(m_ident);
    19881981   
     
    20102003RegisterID* ReturnNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst)
    20112004{
     2005    generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine());
    20122006    if (generator.codeType() != FunctionCode)
    20132007        return emitThrowError(generator, SyntaxError, "Invalid return statement.");
     
    20402034RegisterID* WithNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst)
    20412035{
     2036    generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine());
     2037   
    20422038    RefPtr<RegisterID> scope = generator.newTemporary();
    20432039    generator.emitNode(scope.get(), m_expr.get()); // scope must be protected until popped
     
    22452241RegisterID* SwitchNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst)
    22462242{
     2243    generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine());
     2244   
    22472245    RefPtr<LabelScope> scope = generator.newLabelScope(LabelScope::Switch);
    22482246
     
    22682266RegisterID* LabelNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst)
    22692267{
     2268    generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine());
     2269
    22702270    if (generator.breakTarget(m_name))
    22712271        return emitThrowError(generator, SyntaxError, "Duplicate label: %s.", m_name);
     
    22922292RegisterID* ThrowNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst)
    22932293{
     2294    generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine());
     2295
    22942296    if (dst == generator.ignoredResult())
    22952297        dst = 0;
     
    23162318RegisterID* TryNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst)
    23172319{
     2320    generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine());
     2321
    23182322    RefPtr<Label> tryStartLabel = generator.newLabel();
    23192323    RefPtr<Label> tryEndLabel = generator.newLabel();
Note: See TracChangeset for help on using the changeset viewer.