/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 */ |