Changeset 153074 in webkit


Ignore:
Timestamp:
Jul 23, 2013 6:10:02 PM (11 years ago)
Author:
mark.lam@apple.com
Message:

Need ExpressionRangeInfo before ResolveForPuts in strict mode.
https://bugs.webkit.org/show_bug.cgi?id=118997.

Reviewed by Oliver Hunt.

If we add an assertion in UnlinkedCodeBlock::expressionRangeForBytecodeOffset()
to ensure that we are able to find an ExpressionRangeInfo for any given bytecode
offset, the following tests will fails:

fast/js/basic-strict-mode.html
fast/js/mozilla/strict/8.7.2.html

With this fix, those tests will no longer fail.

  • bytecompiler/NodesCodegen.cpp:

(JSC::AssignResolveNode::emitBytecode):
(JSC::ForInNode::emitBytecode):

  • Emit expression info before calls to emitResolveBaseForPut() when in strict mode.
Location:
trunk/Source/JavaScriptCore
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/ChangeLog

    r153073 r153074  
     12013-07-10  Mark Lam  <mark.lam@apple.com>
     2
     3        Need ExpressionRangeInfo before ResolveForPuts in strict mode.
     4        https://bugs.webkit.org/show_bug.cgi?id=118997.
     5
     6        Reviewed by Oliver Hunt.
     7
     8        If we add an assertion in UnlinkedCodeBlock::expressionRangeForBytecodeOffset()
     9        to ensure that we are able to find an ExpressionRangeInfo for any given bytecode
     10        offset, the following tests will fails:
     11            fast/js/basic-strict-mode.html
     12            fast/js/mozilla/strict/8.7.2.html
     13        With this fix, those tests will no longer fail.
     14
     15        * bytecompiler/NodesCodegen.cpp:
     16        (JSC::AssignResolveNode::emitBytecode):
     17        (JSC::ForInNode::emitBytecode):
     18        - Emit expression info before calls to emitResolveBaseForPut() when in strict mode.
     19
    1202013-07-23  Mark Lam  <mark.lam@apple.com>
    221
  • trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp

    r153073 r153074  
    13621362
    13631363    NonlocalResolveInfo resolveVerifier;
     1364    if (generator.isStrictMode())
     1365        generator.emitExpressionInfo(divot(), divotStartOffset(), divotEndOffset(), divotLine(), divotLineStart());
    13641366    RefPtr<RegisterID> base = generator.emitResolveBaseForPut(generator.newTemporary(), resolveResult, m_ident, resolveVerifier);
    13651367    if (dst == generator.ignoredResult())
     
    17401742            RefPtr<RegisterID> protect = propertyName;
    17411743            NonlocalResolveInfo resolveVerifier;
     1744            if (generator.isStrictMode())
     1745                generator.emitExpressionInfo(divot(), divotStartOffset(), divotEndOffset(), divotLine(), divotLineStart());
    17421746            RegisterID* base = generator.emitResolveBaseForPut(generator.newTemporary(), resolveResult, ident, resolveVerifier);
    17431747
Note: See TracChangeset for help on using the changeset viewer.