Changeset 34457 in webkit for trunk/JavaScriptCore/VM/CodeBlock.h


Ignore:
Timestamp:
Jun 8, 2008, 5:57:28 PM (17 years ago)
Author:
[email protected]
Message:

2008-06-08 Cameron Zwarich <[email protected]>

Reviewed by Darin.

Bug 19346: REGRESSION: Mootools 1.2 Class inheritance broken in post-SquirrelFish merge
<https://bugs.webkit.org/show_bug.cgi?id=19346>

A check for whether a function's caller is eval code accidentally included
the case where the caller's caller is native code. Add a CodeType field to
CodeBlock and use this for the eval caller test instead.

JavaScriptCore:

  • VM/CodeBlock.h: (KJS::CodeBlock::CodeBlock): (KJS::ProgramCodeBlock::ProgramCodeBlock): (KJS::EvalCodeBlock::EvalCodeBlock):
  • VM/Machine.cpp: (KJS::getCallerFunctionOffset):
  • kjs/nodes.cpp: (KJS::FunctionBodyNode::generateCode): (KJS::ProgramNode::generateCode):

LayoutTests:

  • fast/js/function-dot-arguments-and-caller-expected.txt:
  • fast/js/function-dot-arguments-and-caller.html:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/VM/CodeBlock.h

    r34372 r34457  
    5757
    5858    struct CodeBlock {
    59         CodeBlock(ScopeNode* ownerNode_)
     59        CodeBlock(ScopeNode* ownerNode_, CodeType codeType_)
    6060            : ownerNode(ownerNode_)
    6161            , numTemporaries(0)
     
    6565            , needsFullScopeChain(ownerNode_->usesEval() || ownerNode_->needsClosure())
    6666            , usesEval(ownerNode_->usesEval())
     67            , codeType(codeType_)
    6768        {
    6869        }
     
    8283        bool needsFullScopeChain;
    8384        bool usesEval;
     85        CodeType codeType;
    8486
    8587        Vector<Instruction> instructions;
     
    102104
    103105    struct ProgramCodeBlock : public CodeBlock {
    104         ProgramCodeBlock(ScopeNode* ownerNode, JSGlobalObject* globalObject_)
    105             : CodeBlock(ownerNode)
     106        ProgramCodeBlock(ScopeNode* ownerNode_, CodeType codeType_, JSGlobalObject* globalObject_)
     107            : CodeBlock(ownerNode_, codeType_)
    106108            , globalObject(globalObject_)
    107109        {
     
    119121
    120122    struct EvalCodeBlock : public ProgramCodeBlock {
    121         EvalCodeBlock(ScopeNode* ownerNode, JSGlobalObject* globalObject_)
    122             : ProgramCodeBlock(ownerNode, globalObject_)
     123        EvalCodeBlock(ScopeNode* ownerNode_, JSGlobalObject* globalObject_)
     124            : ProgramCodeBlock(ownerNode_, EvalCode, globalObject_)
    123125        {
    124126        }
Note: See TracChangeset for help on using the changeset viewer.