Ignore:
Timestamp:
Feb 2, 2012, 1:19:53 PM (13 years ago)
Author:
[email protected]
Message:

Getters and setters cause line numbers in errors/console.log to be offset for the whole file
https://bugs.webkit.org/show_bug.cgi?id=77675

Reviewed by Timothy Hatcher.

Source/JavaScriptCore:

Our default literal parsing logic doesn't handle the extra work required for
getters and setters. When it encounters one, it rolls back the lexer and
then switches to a more complete parsing function. Unfortunately it was only
winding back the character position, and was ignoring the line number and
other lexer data. This led to every getter and setter causing the line number
to be incorrectly incremented leading to increasingly incorrect numbers for
the rest of the file.

  • parser/Parser.cpp:

(JSC::::parseObjectLiteral):

LayoutTests:

Add getter and setter line number tests.

  • fast/js/exception-linenums-expected.txt:
  • fast/js/script-tests/exception-linenums.js:

(firstPropIsGetter.get getter):
(secondPropIsGetter.prop.1.get getter):
(firstPropIsSetter.set setter):
(secondPropIsSetter.prop.1.set setter):

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/parser/Parser.cpp

    r106512 r106589  
    12411241{
    12421242    int startOffset = m_token.m_data.intValue;
     1243    unsigned oldLastLineNumber = m_lexer->lastLineNumber();
     1244    unsigned oldLineNumber = m_lexer->lineNumber();
    12431245    consumeOrFailWithFlags(OPENBRACE, TreeBuilder::DontBuildStrings);
    12441246   
     
    12531255        m_lexer->setOffset(startOffset);
    12541256        next();
     1257        m_lexer->setLastLineNumber(oldLastLineNumber);
     1258        m_lexer->setLineNumber(oldLineNumber);
    12551259        return parseStrictObjectLiteral(context);
    12561260    }
     
    12671271            m_lexer->setOffset(startOffset);
    12681272            next();
     1273            m_lexer->setLastLineNumber(oldLastLineNumber);
     1274            m_lexer->setLineNumber(oldLineNumber);
    12691275            return parseStrictObjectLiteral(context);
    12701276        }
Note: See TracChangeset for help on using the changeset viewer.