Changeset 39951 in webkit for trunk/JavaScriptCore


Ignore:
Timestamp:
Jan 15, 2009, 3:49:55 PM (16 years ago)
Author:
[email protected]
Message:

2009-01-15 Sam Weinig <[email protected]>

Reviewed by Gavin Barraclough.

Fix crash seen running fast/canvas.

Make sure to mark the ScopeNode and CodeBlock being created
in the re-parse for exception information.

  • bytecode/CodeBlock.cpp: (JSC::CodeBlock::reparseForExceptionInfoIfNecessary):
  • parser/Nodes.h: (JSC::ScopeNode::mark):
  • runtime/Collector.cpp: (JSC::Heap::collect):
  • runtime/JSGlobalData.cpp: (JSC::JSGlobalData::JSGlobalData):
  • runtime/JSGlobalData.h:
Location:
trunk/JavaScriptCore
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/ChangeLog

    r39945 r39951  
     12009-01-15  Sam Weinig  <[email protected]>
     2
     3        Reviewed by Gavin Barraclough.
     4
     5        Fix crash seen running fast/canvas.
     6
     7        Make sure to mark the ScopeNode and CodeBlock being created
     8        in the re-parse for exception information.
     9
     10        * bytecode/CodeBlock.cpp:
     11        (JSC::CodeBlock::reparseForExceptionInfoIfNecessary):
     12        * parser/Nodes.h:
     13        (JSC::ScopeNode::mark):
     14        * runtime/Collector.cpp:
     15        (JSC::Heap::collect):
     16        * runtime/JSGlobalData.cpp:
     17        (JSC::JSGlobalData::JSGlobalData):
     18        * runtime/JSGlobalData.h:
     19
    1202009-01-15  Craig Schlenter  <[email protected]>
    221
  • trunk/JavaScriptCore/bytecode/CodeBlock.cpp

    r39910 r39951  
    14101410            RefPtr<FunctionBodyNode> newFunctionBody = m_globalData->parser->reparse<FunctionBodyNode>(m_globalData, ownerFunctionBodyNode);
    14111411            newFunctionBody->finishParsing(ownerFunctionBodyNode->copyParameters(), ownerFunctionBodyNode->parameterCount());
     1412
     1413            m_globalData->scopeNodeBeingReparsed = newFunctionBody.get();
     1414
    14121415            CodeBlock& newCodeBlock = newFunctionBody->bytecodeForExceptionInfoReparse(scopeChain, this);
    14131416            ASSERT(newCodeBlock.m_exceptionInfo);
     
    14201423
    14211424            m_exceptionInfo.set(newCodeBlock.m_exceptionInfo.release());
     1425
     1426            m_globalData->scopeNodeBeingReparsed = 0;
     1427
    14221428            break;
    14231429        }
     
    14251431            EvalNode* ownerEvalNode = static_cast<EvalNode*>(m_ownerNode);
    14261432            RefPtr<EvalNode> newEvalBody = m_globalData->parser->reparse<EvalNode>(m_globalData, ownerEvalNode);
     1433
     1434            m_globalData->scopeNodeBeingReparsed = newEvalBody.get();
     1435
    14271436            EvalCodeBlock& newCodeBlock = newEvalBody->bytecodeForExceptionInfoReparse(scopeChain, this);
    14281437            ASSERT(newCodeBlock.m_exceptionInfo);
     
    14351444
    14361445            m_exceptionInfo.set(newCodeBlock.m_exceptionInfo.release());
     1446
     1447            m_globalData->scopeNodeBeingReparsed = 0;
     1448
    14371449            break;
    14381450        }
  • trunk/JavaScriptCore/parser/Nodes.h

    r39910 r39951  
    21192119        }
    21202120
     2121        virtual void mark() { }
     2122
    21212123    protected:
    21222124        void setSource(const SourceCode& source) { m_source = source; }
     
    21612163        EvalCodeBlock& bytecodeForExceptionInfoReparse(ScopeChainNode*, CodeBlock*) JSC_FAST_CALL;
    21622164
    2163         void mark();
     2165        virtual void mark();
     2166
    21642167    private:
    21652168        EvalNode(JSGlobalData*, SourceElements*, VarStack*, FunctionStack*, const SourceCode&, CodeFeatures, int numConstants) JSC_FAST_CALL;
     
    22042207        }
    22052208
    2206         void mark();
     2209        virtual void mark();
    22072210
    22082211        void finishParsing(const SourceCode&, ParameterNode*);
  • trunk/JavaScriptCore/runtime/Collector.cpp

    r39851 r39951  
    987987    m_globalData->interpreter->registerFile().markCallFrames(this);
    988988    m_globalData->smallStrings.mark();
     989    if (m_globalData->scopeNodeBeingReparsed)
     990        m_globalData->scopeNodeBeingReparsed->mark();
    989991
    990992    JAVASCRIPTCORE_GC_MARKED();
  • trunk/JavaScriptCore/runtime/JSGlobalData.cpp

    r39755 r39951  
    9292    , isSharedInstance(isShared)
    9393    , clientData(0)
     94    , scopeNodeBeingReparsed(0)
    9495    , heap(this)
    9596{
  • trunk/JavaScriptCore/runtime/JSGlobalData.h

    r39670 r39951  
    4747    class Heap;
    4848    class IdentifierTable;
     49    class Interpreter;
    4950    class JSGlobalObject;
    5051    class JSObject;
    5152    class Lexer;
    52     class Interpreter;
    5353    class Parser;
    5454    class ParserRefCounted;
     55    class ScopeNode;
    5556    class Structure;
    5657    class UString;
     
    121122        HashSet<JSObject*> arrayVisitedElements;
    122123
     124        ScopeNode* scopeNodeBeingReparsed;
     125
    123126        Heap heap;
    124127#if ENABLE(ASSEMBLER)
Note: See TracChangeset for help on using the changeset viewer.