| Differences between
and this patch
- Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj +8 lines
Lines 357-362 Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj_sec1
357
		0F9332A314CA7DD70085F3C6 /* PutByIdStatus.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F93329914CA7DC10085F3C6 /* PutByIdStatus.cpp */; };
357
		0F9332A314CA7DD70085F3C6 /* PutByIdStatus.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F93329914CA7DC10085F3C6 /* PutByIdStatus.cpp */; };
358
		0F9332A414CA7DD90085F3C6 /* PutByIdStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F93329A14CA7DC10085F3C6 /* PutByIdStatus.h */; settings = {ATTRIBUTES = (Private, ); }; };
358
		0F9332A414CA7DD90085F3C6 /* PutByIdStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F93329A14CA7DC10085F3C6 /* PutByIdStatus.h */; settings = {ATTRIBUTES = (Private, ); }; };
359
		0F9332A514CA7DDD0085F3C6 /* StructureSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F93329B14CA7DC10085F3C6 /* StructureSet.h */; settings = {ATTRIBUTES = (Private, ); }; };
359
		0F9332A514CA7DDD0085F3C6 /* StructureSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F93329B14CA7DC10085F3C6 /* StructureSet.h */; settings = {ATTRIBUTES = (Private, ); }; };
360
		0F93B4A918B92C4D00178A3F /* PutByIdVariant.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F93B4A718B92C4D00178A3F /* PutByIdVariant.cpp */; };
361
		0F93B4AA18B92C4D00178A3F /* PutByIdVariant.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F93B4A818B92C4D00178A3F /* PutByIdVariant.h */; settings = {ATTRIBUTES = (Private, ); }; };
360
		0F963B3813FC6FE90002D9B2 /* ValueProfile.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F963B3613FC6FDE0002D9B2 /* ValueProfile.h */; settings = {ATTRIBUTES = (Private, ); }; };
362
		0F963B3813FC6FE90002D9B2 /* ValueProfile.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F963B3613FC6FDE0002D9B2 /* ValueProfile.h */; settings = {ATTRIBUTES = (Private, ); }; };
361
		0F96EBB316676EF6008BADE3 /* CodeBlockWithJITType.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F96EBB116676EF4008BADE3 /* CodeBlockWithJITType.h */; settings = {ATTRIBUTES = (Private, ); }; };
363
		0F96EBB316676EF6008BADE3 /* CodeBlockWithJITType.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F96EBB116676EF4008BADE3 /* CodeBlockWithJITType.h */; settings = {ATTRIBUTES = (Private, ); }; };
362
		0F9749711687ADE400A4FF6A /* JSCellInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F97496F1687ADE200A4FF6A /* JSCellInlines.h */; settings = {ATTRIBUTES = (Private, ); }; };
364
		0F9749711687ADE400A4FF6A /* JSCellInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F97496F1687ADE200A4FF6A /* JSCellInlines.h */; settings = {ATTRIBUTES = (Private, ); }; };
Lines 1832-1837 Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj_sec2
1832
		0F93329914CA7DC10085F3C6 /* PutByIdStatus.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PutByIdStatus.cpp; sourceTree = "<group>"; };
1834
		0F93329914CA7DC10085F3C6 /* PutByIdStatus.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PutByIdStatus.cpp; sourceTree = "<group>"; };
1833
		0F93329A14CA7DC10085F3C6 /* PutByIdStatus.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PutByIdStatus.h; sourceTree = "<group>"; };
1835
		0F93329A14CA7DC10085F3C6 /* PutByIdStatus.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PutByIdStatus.h; sourceTree = "<group>"; };
1834
		0F93329B14CA7DC10085F3C6 /* StructureSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StructureSet.h; sourceTree = "<group>"; };
1836
		0F93329B14CA7DC10085F3C6 /* StructureSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StructureSet.h; sourceTree = "<group>"; };
1837
		0F93B4A718B92C4D00178A3F /* PutByIdVariant.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PutByIdVariant.cpp; sourceTree = "<group>"; };
1838
		0F93B4A818B92C4D00178A3F /* PutByIdVariant.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PutByIdVariant.h; sourceTree = "<group>"; };
1835
		0F963B3613FC6FDE0002D9B2 /* ValueProfile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ValueProfile.h; sourceTree = "<group>"; };
1839
		0F963B3613FC6FDE0002D9B2 /* ValueProfile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ValueProfile.h; sourceTree = "<group>"; };
1836
		0F96EBB116676EF4008BADE3 /* CodeBlockWithJITType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CodeBlockWithJITType.h; sourceTree = "<group>"; };
1840
		0F96EBB116676EF4008BADE3 /* CodeBlockWithJITType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CodeBlockWithJITType.h; sourceTree = "<group>"; };
1837
		0F97496F1687ADE200A4FF6A /* JSCellInlines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSCellInlines.h; sourceTree = "<group>"; };
1841
		0F97496F1687ADE200A4FF6A /* JSCellInlines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSCellInlines.h; sourceTree = "<group>"; };
Lines 4585-4590 Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj_sec3
4585
				0FC97F32182020D7002C9B26 /* ProfiledCodeBlockJettisoningWatchpoint.h */,
4589
				0FC97F32182020D7002C9B26 /* ProfiledCodeBlockJettisoningWatchpoint.h */,
4586
				0F93329914CA7DC10085F3C6 /* PutByIdStatus.cpp */,
4590
				0F93329914CA7DC10085F3C6 /* PutByIdStatus.cpp */,
4587
				0F93329A14CA7DC10085F3C6 /* PutByIdStatus.h */,
4591
				0F93329A14CA7DC10085F3C6 /* PutByIdStatus.h */,
4592
				0F93B4A718B92C4D00178A3F /* PutByIdVariant.cpp */,
4593
				0F93B4A818B92C4D00178A3F /* PutByIdVariant.h */,
4588
				0F9FC8C114E1B5FB00D52AE0 /* PutKind.h */,
4594
				0F9FC8C114E1B5FB00D52AE0 /* PutKind.h */,
4589
				0FF60ABF16740F8100029779 /* ReduceWhitespace.cpp */,
4595
				0FF60ABF16740F8100029779 /* ReduceWhitespace.cpp */,
4590
				0FF60AC016740F8100029779 /* ReduceWhitespace.h */,
4596
				0FF60AC016740F8100029779 /* ReduceWhitespace.h */,
Lines 5383-5388 Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj_sec4
5383
				0F2FCCFC18A60070001A27F8 /* DFGSafepoint.h in Headers */,
5389
				0F2FCCFC18A60070001A27F8 /* DFGSafepoint.h in Headers */,
5384
				860161E50F3A83C100F84710 /* MacroAssemblerX86_64.h in Headers */,
5390
				860161E50F3A83C100F84710 /* MacroAssemblerX86_64.h in Headers */,
5385
				860161E60F3A83C100F84710 /* MacroAssemblerX86Common.h in Headers */,
5391
				860161E60F3A83C100F84710 /* MacroAssemblerX86Common.h in Headers */,
5392
				0F93B4AA18B92C4D00178A3F /* PutByIdVariant.h in Headers */,
5386
				A700873A17CBE85300C3E643 /* MapConstructor.h in Headers */,
5393
				A700873A17CBE85300C3E643 /* MapConstructor.h in Headers */,
5387
				A78507D717CBC6FD0011F6E7 /* MapData.h in Headers */,
5394
				A78507D717CBC6FD0011F6E7 /* MapData.h in Headers */,
5388
				A700873E17CBE8D300C3E643 /* MapPrototype.h in Headers */,
5395
				A700873E17CBE8D300C3E643 /* MapPrototype.h in Headers */,
Lines 6176-6181 Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj_sec5
6176
				0F9FB4F417FCB91700CB67F8 /* DFGStackLayoutPhase.cpp in Sources */,
6183
				0F9FB4F417FCB91700CB67F8 /* DFGStackLayoutPhase.cpp in Sources */,
6177
				0F6B1CBD1861246A00845D97 /* RegisterPreservationWrapperGenerator.cpp in Sources */,
6184
				0F6B1CBD1861246A00845D97 /* RegisterPreservationWrapperGenerator.cpp in Sources */,
6178
				0FC097A1146B28CA00CF2442 /* DFGThunks.cpp in Sources */,
6185
				0FC097A1146B28CA00CF2442 /* DFGThunks.cpp in Sources */,
6186
				0F93B4A918B92C4D00178A3F /* PutByIdVariant.cpp in Sources */,
6179
				0FD8A32717D51F5700CA2C40 /* DFGTierUpCheckInjectionPhase.cpp in Sources */,
6187
				0FD8A32717D51F5700CA2C40 /* DFGTierUpCheckInjectionPhase.cpp in Sources */,
6180
				0FD8A32917D51F5700CA2C40 /* DFGToFTLDeferredCompilationCallback.cpp in Sources */,
6188
				0FD8A32917D51F5700CA2C40 /* DFGToFTLDeferredCompilationCallback.cpp in Sources */,
6181
				0F485327187DFDEC0083B687 /* FTLAvailableRecovery.cpp in Sources */,
6189
				0F485327187DFDEC0083B687 /* FTLAvailableRecovery.cpp in Sources */,
- Source/JavaScriptCore/bytecode/PutByIdStatus.h -37 / +13 lines
Lines 27-34 Source/JavaScriptCore/bytecode/PutByIdStatus.h_sec1
27
#define PutByIdStatus_h
27
#define PutByIdStatus_h
28
28
29
#include "ExitingJITType.h"
29
#include "ExitingJITType.h"
30
#include "IntendedStructureChain.h"
30
#include "PutByIdVariant.h"
31
#include "PropertyOffset.h"
32
#include "StructureStubInfo.h"
31
#include "StructureStubInfo.h"
33
#include <wtf/text/StringImpl.h>
32
#include <wtf/text/StringImpl.h>
34
33
Lines 45-95 public: Source/JavaScriptCore/bytecode/PutByIdStatus.h_sec2
45
    enum State {
44
    enum State {
46
        // It's uncached so we have no information.
45
        // It's uncached so we have no information.
47
        NoInformation,
46
        NoInformation,
48
        // It's cached as a direct store into an object property for cases where the object
47
        // It's cached as a simple store of some kind.
49
        // already has the property.
48
        Simple,
50
        SimpleReplace,
51
        // It's cached as a transition from one structure that lacks the property to one that
52
        // includes the property, and a direct store to this new property.
53
        SimpleTransition,
54
        // It's known to often take slow path.
49
        // It's known to often take slow path.
55
        TakesSlowPath
50
        TakesSlowPath
56
    };
51
    };
57
    
52
    
58
    PutByIdStatus()
53
    PutByIdStatus()
59
        : m_state(NoInformation)
54
        : m_state(NoInformation)
60
        , m_oldStructure(0)
61
        , m_newStructure(0)
62
        , m_structureChain(0)
63
        , m_offset(invalidOffset)
64
    {
55
    {
65
    }
56
    }
66
    
57
    
67
    explicit PutByIdStatus(State state)
58
    explicit PutByIdStatus(State state)
68
        : m_state(state)
59
        : m_state(state)
69
        , m_oldStructure(0)
70
        , m_newStructure(0)
71
        , m_structureChain(0)
72
        , m_offset(invalidOffset)
73
    {
60
    {
74
        ASSERT(m_state == NoInformation || m_state == TakesSlowPath);
61
        ASSERT(m_state == NoInformation || m_state == TakesSlowPath);
75
    }
62
    }
76
    
63
    
77
    PutByIdStatus(
64
    PutByIdStatus(const PutByIdVariant& variant)
78
        State state,
65
        : m_state(Simple)
79
        Structure* oldStructure,
80
        Structure* newStructure,
81
        PassRefPtr<IntendedStructureChain> structureChain,
82
        PropertyOffset offset)
83
        : m_state(state)
84
        , m_oldStructure(oldStructure)
85
        , m_newStructure(newStructure)
86
        , m_structureChain(structureChain)
87
        , m_offset(offset)
88
    {
66
    {
89
        ASSERT((m_state == NoInformation || m_state == TakesSlowPath) == !m_oldStructure);
67
        m_variants.append(variant);
90
        ASSERT((m_state != SimpleTransition) == !m_newStructure);
91
        ASSERT(!((m_state != SimpleTransition) && m_structureChain));
92
        ASSERT((m_state == NoInformation || m_state == TakesSlowPath) == (m_offset == invalidOffset));
93
    }
68
    }
94
    
69
    
95
    static PutByIdStatus computeFor(CodeBlock*, StubInfoMap&, unsigned bytecodeIndex, StringImpl* uid);
70
    static PutByIdStatus computeFor(CodeBlock*, StubInfoMap&, unsigned bytecodeIndex, StringImpl* uid);
Lines 101-114 public: Source/JavaScriptCore/bytecode/PutByIdStatus.h_sec3
101
    
76
    
102
    bool isSet() const { return m_state != NoInformation; }
77
    bool isSet() const { return m_state != NoInformation; }
103
    bool operator!() const { return m_state == NoInformation; }
78
    bool operator!() const { return m_state == NoInformation; }
104
    bool isSimpleReplace() const { return m_state == SimpleReplace; }
79
    bool isSimple() const { return m_state == Simple; }
105
    bool isSimpleTransition() const { return m_state == SimpleTransition; }
106
    bool takesSlowPath() const { return m_state == TakesSlowPath; }
80
    bool takesSlowPath() const { return m_state == TakesSlowPath; }
107
    
81
    
108
    Structure* oldStructure() const { return m_oldStructure; }
82
    size_t numVariants() const { return m_variants.size(); }
109
    Structure* newStructure() const { return m_newStructure; }
83
    const Vector<PutByIdVariant, 1>& variants() const { return m_variants; }
110
    IntendedStructureChain* structureChain() const { return m_structureChain.get(); }
84
    const PutByIdVariant& at(size_t index) const { return m_variants[index]; }
111
    PropertyOffset offset() const { return m_offset; }
85
    const PutByIdVariant& operator[](size_t index) const { return at(index); }
86
    
87
    void dump(PrintStream&) const;
112
    
88
    
113
private:
89
private:
114
#if ENABLE(DFG_JIT)
90
#if ENABLE(DFG_JIT)
- Source/JavaScriptCore/bytecode/PutByIdVariant.cpp +59 lines
Line 0 Source/JavaScriptCore/bytecode/PutByIdVariant.cpp_sec1
1
/*
2
 * Copyright (C) 2014 Apple Inc. All rights reserved.
3
 *
4
 * Redistribution and use in source and binary forms, with or without
5
 * modification, are permitted provided that the following conditions
6
 * are met:
7
 * 1. Redistributions of source code must retain the above copyright
8
 *    notice, this list of conditions and the following disclaimer.
9
 * 2. Redistributions in binary form must reproduce the above copyright
10
 *    notice, this list of conditions and the following disclaimer in the
11
 *    documentation and/or other materials provided with the distribution.
12
 *
13
 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
14
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
17
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21
 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
24
 */
25
26
#include "config.h"
27
#include "PutByIdVariant.h"
28
29
namespace JSC {
30
31
void PutByIdVariant::dump(PrintStream& out) const
32
{
33
    dumpInContext(out, 0);
34
}
35
36
void PutByIdVariant::dumpInContext(PrintStream& out, DumpContext* context) const
37
{
38
    switch (kind()) {
39
    case NotSet:
40
        out.print("<empty>");
41
        return;
42
        
43
    case Replace:
44
        out.print("<Replace: ", inContext(structure(), context), ", ", offset(), ">");
45
        return;
46
        
47
    case Transition:
48
        out.print(
49
            "<Transition: ", inContext(oldStructure(), context), " -> ",
50
            inContext(newStructure(), context), ", ",
51
            pointerDumpInContext(structureChain(), context), ", ", offset(), ">");
52
        return;
53
    }
54
    
55
    RELEASE_ASSERT_NOT_REACHED();
56
}
57
58
} // namespace JSC
59
- Source/JavaScriptCore/bytecode/PutByIdVariant.h +119 lines
Line 0 Source/JavaScriptCore/bytecode/PutByIdVariant.h_sec1
1
/*
2
 * Copyright (C) 2014 Apple Inc. All rights reserved.
3
 *
4
 * Redistribution and use in source and binary forms, with or without
5
 * modification, are permitted provided that the following conditions
6
 * are met:
7
 * 1. Redistributions of source code must retain the above copyright
8
 *    notice, this list of conditions and the following disclaimer.
9
 * 2. Redistributions in binary form must reproduce the above copyright
10
 *    notice, this list of conditions and the following disclaimer in the
11
 *    documentation and/or other materials provided with the distribution.
12
 *
13
 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
14
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
17
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21
 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
24
 */
25
26
#ifndef PutByIdVariant_h
27
#define PutByIdVariant_h
28
29
#include "IntendedStructureChain.h"
30
#include "PropertyOffset.h"
31
32
namespace JSC {
33
34
class PutByIdVariant {
35
public:
36
    enum Kind {
37
        NotSet,
38
        Replace,
39
        Transition
40
    };
41
    
42
    PutByIdVariant()
43
        : m_kind(NotSet)
44
        , m_oldStructure(0)
45
        , m_newStructure(0)
46
        , m_offset(invalid)
47
    {
48
    }
49
    
50
    static PutByIdVariant replace(Structure* structure, PropertyOffset offset)
51
    {
52
        PutByIdVariant result;
53
        result.m_oldStructure = structure;
54
        result.m_offset = offset;
55
        return result;
56
    }
57
    
58
    static PutByIdVariant transition(
59
        Structure* oldStructure, Structure* newStructure,
60
        PassRefPtr<IntendedStructureChain> structureChain, PropertyOffset offset)
61
    {
62
        PutByIdVariant result;
63
        result.m_oldStructure = oldStructure;
64
        result.m_newStructure = newStructure;
65
        result.m_structureChain = structureChain;
66
        result.m_offset = offset;
67
        return result;
68
    }
69
    
70
    Kind kind() const { return m_kind; }
71
    
72
    bool isSet() const { return kind() != NotSet; }
73
    bool operator!() const { return !isSet(); }
74
    
75
    Structure* structure() const
76
    {
77
        ASSERT(kind() == Replace);
78
        return m_oldStructure;
79
    }
80
    
81
    Structure* oldStructure() const
82
    {
83
        ASSERT(kind() == Transition);
84
        return m_oldStructure;
85
    }
86
    
87
    Structure* newStructure() const
88
    {
89
        ASSERT(kind() == Transition);
90
        return m_newStructure;
91
    }
92
    
93
    IntendedStructureChain* structureChain() const
94
    {
95
        ASSERT(kind() == Transition);
96
        return m_structureChain.get();
97
    }
98
    
99
    PropertyOffset offset() const
100
    {
101
        ASSERT(isSet());
102
        return m_offset;
103
    }
104
    
105
    void dump(PrintStream&) const;
106
    void dumpInContext(PrintStream&, DumpContext*) const;
107
108
private:
109
    Kind m_kind;
110
    Structure* m_oldStructure;
111
    Structure* m_newStructure;
112
    RefPtr<IntendedStructureChain> m_structureChain;
113
    PropertyOffset m_offset;
114
};
115
116
} // namespace JSC
117
118
#endif // PutByIdVariant_h
119

Return to Bug 129210