Ignore:
Timestamp:
Jan 18, 2014, 9:55:07 AM (12 years ago)
Author:
[email protected]
Message:

Adding UnlinkedCodeBlock::opDebugBytecodeOffsetForLineAndColumn()..
https://bugs.webkit.org/show_bug.cgi?id=127127.

Reviewed by Geoffrey Garen.

In order to implement bytecode level breakpoints, we need a mechanism
for computing the best fit op_debug bytecode offset for any valid given
line and column value in the source. The "best fit" op_debug bytecode
in this case is defined below in the comment for
UnlinkedCodeBlock::opDebugBytecodeOffsetForLineAndColumn().

(JSC::CodeBlock::opDebugBytecodeOffsetForLineAndColumn):

  • Convert the line and column to unlinked line and column values and pass them to UnlinkedCodeBlock::opDebugBytecodeOffsetForLineAndColumn() to do the real work.
  • bytecode/CodeBlock.h:
  • bytecode/LineColumnInfo.h: Added.

(JSC::LineColumnInfo::operator <):
(JSC::LineColumnInfo::LineColumnPair::LineColumnPair):
(JSC::LineColumnInfo::operator ==):
(JSC::LineColumnInfo::operator !=):
(JSC::LineColumnInfo::operator <=):
(JSC::LineColumnInfo::operator >):
(JSC::LineColumnInfo::operator >=):

  • bytecode/LineInfo.h: Removed.
  • bytecode/UnlinkedCodeBlock.cpp:

(JSC::UnlinkedCodeBlock::decodeExpressionRangeLineAndColumn):

  • Factored this out of expressionRangeForBytecodeOffset() so that it can be called from multiple places.

(JSC::dumpLineColumnEntry):
(JSC::UnlinkedCodeBlock::dumpExpressionRangeInfo):
(JSC::UnlinkedCodeBlock::dumpOpDebugLineColumnInfoList):

  • Some dumpers for debugging use only.

(JSC::UnlinkedCodeBlock::expressionRangeForBytecodeOffset):
(JSC::UnlinkedCodeBlock::opDebugBytecodeOffsetForLineAndColumn):

  • Finds the earliest op_debug bytecode whose line and column matches the specified line and column values. If an exact match is not found, then finds the nearest op_debug bytecode that precedes the specified line and column values. If there are more than one op_debug at that preceding line and column value, then the earliest of those op_debug bytecodes will be be selected. The offset of the selected bytecode will be returned.

We want the earliest one because when we have multiple op_debug bytecodes
that map to a given line and column, a debugger user would expect to break
on the first one and step through the rest thereafter if needed.

(JSC::compareLineColumnInfo):
(JSC::UnlinkedCodeBlock::opDebugLineColumnInfoList):

  • Creates the sorted opDebugLineColumnInfoList on demand. This list is stored in the UnlinkedCodeBlock's rareData.
  • bytecode/UnlinkedCodeBlock.h:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/ChangeLog

    r162250 r162256  
     12014-01-18  Mark Lam  <[email protected]>
     2
     3        Adding UnlinkedCodeBlock::opDebugBytecodeOffsetForLineAndColumn()..
     4        https://bugs.webkit.org/show_bug.cgi?id=127127.
     5
     6        Reviewed by Geoffrey Garen.
     7
     8        In order to implement bytecode level breakpoints, we need a mechanism
     9        for computing the best fit op_debug bytecode offset for any valid given
     10        line and column value in the source. The "best fit" op_debug bytecode
     11        in this case is defined below in the comment for
     12        UnlinkedCodeBlock::opDebugBytecodeOffsetForLineAndColumn().
     13
     14        * GNUmakefile.list.am:
     15        * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
     16        * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters:
     17        * JavaScriptCore.xcodeproj/project.pbxproj:
     18        * bytecode/CodeBlock.cpp:
     19        (JSC::CodeBlock::opDebugBytecodeOffsetForLineAndColumn):
     20        - Convert the line and column to unlinked line and column values and
     21          pass them to UnlinkedCodeBlock::opDebugBytecodeOffsetForLineAndColumn()
     22          to do the real work.
     23
     24        * bytecode/CodeBlock.h:
     25        * bytecode/LineColumnInfo.h: Added.
     26        (JSC::LineColumnInfo::operator <):
     27        (JSC::LineColumnInfo::LineColumnPair::LineColumnPair):
     28        (JSC::LineColumnInfo::operator ==):
     29        (JSC::LineColumnInfo::operator !=):
     30        (JSC::LineColumnInfo::operator <=):
     31        (JSC::LineColumnInfo::operator >):
     32        (JSC::LineColumnInfo::operator >=):
     33        * bytecode/LineInfo.h: Removed.
     34
     35        * bytecode/UnlinkedCodeBlock.cpp:
     36        (JSC::UnlinkedCodeBlock::decodeExpressionRangeLineAndColumn):
     37        - Factored this out of expressionRangeForBytecodeOffset() so that it can
     38          be called from multiple places.
     39        (JSC::dumpLineColumnEntry):
     40        (JSC::UnlinkedCodeBlock::dumpExpressionRangeInfo):
     41        (JSC::UnlinkedCodeBlock::dumpOpDebugLineColumnInfoList):
     42        - Some dumpers for debugging use only.
     43        (JSC::UnlinkedCodeBlock::expressionRangeForBytecodeOffset):
     44        (JSC::UnlinkedCodeBlock::opDebugBytecodeOffsetForLineAndColumn):
     45        - Finds the earliest op_debug bytecode whose line and column matches the
     46          specified line and column values. If an exact match is not found, then
     47          finds the nearest op_debug bytecode that precedes the specified line
     48          and column values. If there are more than one op_debug at that preceding
     49          line and column value, then the earliest of those op_debug bytecodes will
     50          be be selected. The offset of the selected bytecode will be returned.
     51
     52          We want the earliest one because when we have multiple op_debug bytecodes
     53          that map to a given line and column, a debugger user would expect to break
     54          on the first one and step through the rest thereafter if needed.
     55
     56        (JSC::compareLineColumnInfo):
     57        (JSC::UnlinkedCodeBlock::opDebugLineColumnInfoList):
     58        - Creates the sorted opDebugLineColumnInfoList on demand. This list is
     59          stored in the UnlinkedCodeBlock's rareData.
     60        * bytecode/UnlinkedCodeBlock.h:
     61
    1622014-01-18  Zan Dobersek  <[email protected]>
    263
Note: See TracChangeset for help on using the changeset viewer.