Coverage Report

Created: 2018-09-25 14:53

/src/mozilla-central/js/src/jit/BaselineFrame-inl.h
Line
Count
Source (jump to first uncovered line)
1
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2
 * vim: set ts=8 sts=4 et sw=4 tw=99:
3
 * This Source Code Form is subject to the terms of the Mozilla Public
4
 * License, v. 2.0. If a copy of the MPL was not distributed with this
5
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6
7
#ifndef jit_BaselineFrame_inl_h
8
#define jit_BaselineFrame_inl_h
9
10
#include "jit/BaselineFrame.h"
11
12
#include "vm/EnvironmentObject.h"
13
#include "vm/JSContext.h"
14
#include "vm/Realm.h"
15
16
#include "vm/EnvironmentObject-inl.h"
17
#include "vm/JSScript-inl.h"
18
19
namespace js {
20
namespace jit {
21
22
template <typename SpecificEnvironment>
23
inline void
24
BaselineFrame::pushOnEnvironmentChain(SpecificEnvironment& env)
25
107
{
26
107
    MOZ_ASSERT(*environmentChain() == env.enclosingEnvironment());
27
107
    envChain_ = &env;
28
107
    if (IsFrameInitialEnvironment(this, env)) {
29
70
        flags_ |= HAS_INITIAL_ENV;
30
70
    }
31
107
}
void js::jit::BaselineFrame::pushOnEnvironmentChain<js::LexicalEnvironmentObject>(js::LexicalEnvironmentObject&)
Line
Count
Source
25
37
{
26
37
    MOZ_ASSERT(*environmentChain() == env.enclosingEnvironment());
27
37
    envChain_ = &env;
28
37
    if (IsFrameInitialEnvironment(this, env)) {
29
0
        flags_ |= HAS_INITIAL_ENV;
30
0
    }
31
37
}
Unexecuted instantiation: void js::jit::BaselineFrame::pushOnEnvironmentChain<js::NamedLambdaObject>(js::NamedLambdaObject&)
void js::jit::BaselineFrame::pushOnEnvironmentChain<js::CallObject>(js::CallObject&)
Line
Count
Source
25
70
{
26
70
    MOZ_ASSERT(*environmentChain() == env.enclosingEnvironment());
27
70
    envChain_ = &env;
28
70
    if (IsFrameInitialEnvironment(this, env)) {
29
70
        flags_ |= HAS_INITIAL_ENV;
30
70
    }
31
70
}
Unexecuted instantiation: void js::jit::BaselineFrame::pushOnEnvironmentChain<js::VarEnvironmentObject>(js::VarEnvironmentObject&)
Unexecuted instantiation: void js::jit::BaselineFrame::pushOnEnvironmentChain<js::WithEnvironmentObject>(js::WithEnvironmentObject&)
32
33
template <typename SpecificEnvironment>
34
inline void
35
BaselineFrame::popOffEnvironmentChain()
36
37
{
37
37
    MOZ_ASSERT(envChain_->is<SpecificEnvironment>());
38
37
    envChain_ = &envChain_->as<SpecificEnvironment>().enclosingEnvironment();
39
37
}
void js::jit::BaselineFrame::popOffEnvironmentChain<js::LexicalEnvironmentObject>()
Line
Count
Source
36
37
{
37
37
    MOZ_ASSERT(envChain_->is<SpecificEnvironment>());
38
37
    envChain_ = &envChain_->as<SpecificEnvironment>().enclosingEnvironment();
39
37
}
Unexecuted instantiation: void js::jit::BaselineFrame::popOffEnvironmentChain<js::VarEnvironmentObject>()
Unexecuted instantiation: void js::jit::BaselineFrame::popOffEnvironmentChain<js::WithEnvironmentObject>()
Unexecuted instantiation: void js::jit::BaselineFrame::popOffEnvironmentChain<js::CallObject>()
40
41
inline void
42
BaselineFrame::replaceInnermostEnvironment(EnvironmentObject& env)
43
0
{
44
0
    MOZ_ASSERT(env.enclosingEnvironment() ==
45
0
               envChain_->as<EnvironmentObject>().enclosingEnvironment());
46
0
    envChain_ = &env;
47
0
}
48
49
inline bool
50
BaselineFrame::pushLexicalEnvironment(JSContext* cx, Handle<LexicalScope*> scope)
51
37
{
52
37
    LexicalEnvironmentObject* env = LexicalEnvironmentObject::create(cx, scope, this);
53
37
    if (!env) {
54
0
        return false;
55
0
    }
56
37
    pushOnEnvironmentChain(*env);
57
37
58
37
    return true;
59
37
}
60
61
inline bool
62
BaselineFrame::freshenLexicalEnvironment(JSContext* cx)
63
0
{
64
0
    Rooted<LexicalEnvironmentObject*> current(cx, &envChain_->as<LexicalEnvironmentObject>());
65
0
    LexicalEnvironmentObject* clone = LexicalEnvironmentObject::clone(cx, current);
66
0
    if (!clone) {
67
0
        return false;
68
0
    }
69
0
70
0
    replaceInnermostEnvironment(*clone);
71
0
    return true;
72
0
}
73
74
inline bool
75
BaselineFrame::recreateLexicalEnvironment(JSContext* cx)
76
0
{
77
0
    Rooted<LexicalEnvironmentObject*> current(cx, &envChain_->as<LexicalEnvironmentObject>());
78
0
    LexicalEnvironmentObject* clone = LexicalEnvironmentObject::recreate(cx, current);
79
0
    if (!clone) {
80
0
        return false;
81
0
    }
82
0
83
0
    replaceInnermostEnvironment(*clone);
84
0
    return true;
85
0
}
86
87
inline CallObject&
88
BaselineFrame::callObj() const
89
0
{
90
0
    MOZ_ASSERT(hasInitialEnvironment());
91
0
    MOZ_ASSERT(callee()->needsCallObject());
92
0
93
0
    JSObject* obj = environmentChain();
94
0
    while (!obj->is<CallObject>()) {
95
0
        obj = obj->enclosingEnvironment();
96
0
    }
97
0
    return obj->as<CallObject>();
98
0
}
99
100
inline void
101
BaselineFrame::unsetIsDebuggee()
102
0
{
103
0
    MOZ_ASSERT(!script()->isDebuggee());
104
0
    flags_ &= ~DEBUGGEE;
105
0
}
106
107
} // namespace jit
108
} // namespace js
109
110
#endif /* jit_BaselineFrame_inl_h */