Changeset 53391 in webkit for trunk/JavaScriptCore/bytecode


Ignore:
Timestamp:
Jan 17, 2010, 11:28:53 PM (15 years ago)
Author:
[email protected]
Message:

https://bugs.webkit.org/show_bug.cgi?id=33731
Remove uses of PtrAndFlags from JIT data stuctures.

Reviewed by Oliver Hunt.

These break the OS X Leaks tool. Free up a bit in CallLinkInfo, and invalid
permutation of pointer states in MethodCallLinkInfo to represent the removed bits.

  • bytecode/CodeBlock.h:

(JSC::CallLinkInfo::seenOnce):
(JSC::CallLinkInfo::setSeen):
(JSC::MethodCallLinkInfo::MethodCallLinkInfo):
(JSC::MethodCallLinkInfo::seenOnce):
(JSC::MethodCallLinkInfo::setSeen):

  • jit/JIT.cpp:

(JSC::JIT::unlinkCall):

  • jit/JITPropertyAccess.cpp:

(JSC::JIT::patchMethodCallProto):

  • runtime/UString.h:
File:
1 edited

Legend:

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

    r50537 r53391  
    111111        CodeLocationDataLabelPtr hotPathBegin;
    112112        CodeLocationNearCall hotPathOther;
    113         PtrAndFlags<CodeBlock, HasSeenShouldRepatch> ownerCodeBlock;
     113        CodeBlock* ownerCodeBlock;
    114114        CodeBlock* callee;
    115         unsigned position;
     115        unsigned position : 31;
     116        unsigned hasSeenShouldRepatch : 1;
    116117       
    117118        void setUnlinked() { callee = 0; }
     
    120121        bool seenOnce()
    121122        {
    122             return ownerCodeBlock.isFlagSet(hasSeenShouldRepatch);
     123            return hasSeenShouldRepatch;
    123124        }
    124125
    125126        void setSeen()
    126127        {
    127             ownerCodeBlock.setFlag(hasSeenShouldRepatch);
    128         }
    129     };
     128            hasSeenShouldRepatch = true;
     129        }
     130    };
     131
     132#define MethodCallLinkInfo_seenFlag ((Structure*)1)
    130133
    131134    struct MethodCallLinkInfo {
    132135        MethodCallLinkInfo()
    133136            : cachedStructure(0)
     137            , cachedPrototypeStructure(0)
    134138        {
    135139        }
     
    137141        bool seenOnce()
    138142        {
    139             return cachedPrototypeStructure.isFlagSet(hasSeenShouldRepatch);
     143            ASSERT(!cachedStructure);
     144            return cachedPrototypeStructure;
    140145        }
    141146
    142147        void setSeen()
    143148        {
    144             cachedPrototypeStructure.setFlag(hasSeenShouldRepatch);
     149            ASSERT(!cachedStructure && !cachedPrototypeStructure);
     150            // We use the values of cachedStructure & cachedPrototypeStructure to indicate the
     151            // current state.
     152            //     - In the initial state, both are null.
     153            //     - Once this transition has been taken once, cachedStructure is
     154            //       null and cachedPrototypeStructure is set to a nun-null value.
     155            //     - Once the call is linked both structures are set to non-null values.
     156            cachedPrototypeStructure = MethodCallLinkInfo_seenFlag;
    145157        }
    146158
     
    148160        CodeLocationDataLabelPtr structureLabel;
    149161        Structure* cachedStructure;
    150         PtrAndFlags<Structure, HasSeenShouldRepatch> cachedPrototypeStructure;
     162        Structure* cachedPrototypeStructure;
    151163    };
    152164
Note: See TracChangeset for help on using the changeset viewer.