Coverage Report

Created: 2018-07-03 15:31

/home/travis/build/MoarVM/MoarVM/src/core/frame.h
Line
Count
Source
1
/* Frame flags; provide some HLLs can alias. */
2
#define MVM_FRAME_FLAG_STATE_INIT       1 << 0
3
7
#define MVM_FRAME_FLAG_EXIT_HAND_RUN    1 << 1
4
#define MVM_FRAME_FLAG_HLL_1            1 << 3
5
#define MVM_FRAME_FLAG_HLL_2            1 << 4
6
#define MVM_FRAME_FLAG_HLL_3            1 << 5
7
#define MVM_FRAME_FLAG_HLL_4            1 << 6
8
9
/* Lexical hash entry for ->lexical_names on a frame. */
10
struct MVMLexicalRegistry {
11
    /* key string */
12
    MVMString *key;
13
14
    /* index of the lexical entry. */
15
    MVMuint32 value;
16
17
    /* the uthash hash handle inline struct. */
18
    UT_hash_handle hash_handle;
19
};
20
21
/* Entry in the linked list of continuation tags for the frame. */
22
struct MVMContinuationTag {
23
    /* The tag itself. */
24
    MVMObject *tag;
25
26
    /* The active exception handler at the point the tag was taken. */
27
    MVMActiveHandler *active_handlers;
28
29
    /* The next continuation tag entry. */
30
    MVMContinuationTag *next;
31
};
32
33
/* Function pointer type of special return handler. These are used to allow
34
 * return to be intercepted in some way, for things that need to do multiple
35
 * calls into the runloop in some C-managed process. Essentially, instead of
36
 * nested runloops, you just re-work the C code in question into CPS. */
37
typedef void (* MVMSpecialReturn)(MVMThreadContext *tc, void *data);
38
39
/* Function pointer for marking the special return handler data. */
40
typedef void (* MVMSpecialReturnDataMark)(MVMThreadContext *tc, MVMFrame *frame,
41
                                          MVMGCWorklist *worklist);
42
43
/* This represents an call frame, aka invocation record. It may exist either on
44
 * the heap, in which case its header will have the MVM_CF_FRAME flag set, or
45
 * in on a thread-local stack, in which case the collectable header will be
46
 * fully zeroed. */
47
struct MVMFrame {
48
    /* Commonalities that all collectable entities have. */
49
    MVMCollectable header;
50
51
    /* The environment for this frame, which lives beyond its execution.
52
     * Has space for, for instance, lexicals. */
53
    MVMRegister *env;
54
55
    /* The temporary work space for this frame. After a call is over, this
56
     * can be freed up. Must be NULLed out when this happens. */
57
    MVMRegister *work;
58
59
    /* The args buffer. Actually a pointer into an area inside of *work, to
60
     * decrease number of allocations. */
61
    MVMRegister *args;
62
63
    /* Callsite that indicates how the current args buffer is being used, if
64
     * it is. */
65
    MVMCallsite *cur_args_callsite;
66
67
    /* The outer frame, thus forming the static chain. */
68
    MVMFrame *outer;
69
70
    /* The caller frame, thus forming the dynamic chain. */
71
    MVMFrame *caller;
72
73
    /* The static frame information. Holds all we statically know about
74
     * this kind of frame, including information needed to GC-trace it. */
75
    MVMStaticFrame *static_info;
76
77
    /* The code ref object for this frame. */
78
    MVMObject *code_ref;
79
80
    /* Parameters received by this frame. */
81
    MVMArgProcContext params;
82
83
    /* Effective set of spesh slots, if any. */
84
    MVMCollectable **effective_spesh_slots;
85
86
    /* The spesh candidate information, if we're in one. */
87
    MVMSpeshCandidate *spesh_cand;
88
89
    /* Address of the next op to execute if we return to this frame. */
90
    MVMuint8 *return_address;
91
92
    /* The register we should store the return value in, if any. */
93
    MVMRegister *return_value;
94
95
    /* The type of return value that is expected. */
96
    MVMReturnType return_type;
97
98
    /* Assorted frame flags. */
99
    MVMuint8 flags;
100
101
    /* The allocated work/env sizes. */
102
    MVMuint16 allocd_work;
103
    MVMuint16 allocd_env;
104
105
    /* The current spesh correlation ID, if we're interpreting code and
106
     * recording logs. Zero if interpreting unspecialized and not recording.
107
     * Junk if running specialized code. */
108
    MVMint32 spesh_correlation_id;
109
110
    /* A sequence number to indicate our place in the call stack */
111
    MVMint32 sequence_nr;
112
113
    /* The 'entry label' is a sort of indirect return address for the JIT */
114
    void * jit_entry_label;
115
116
    /* Extra data that some frames need, allocated on demand. If allocated,
117
     * lives for the dynamic scope of the frame. */
118
    MVMFrameExtra *extra;
119
};
120
121
/* Extra data that a handful of call frames optionally need. It is needed
122
 * only while the frame is in dynamic scope; after that it can go away. */
123
struct MVMFrameExtra {
124
    /* If we want to invoke a special handler upon a return to this
125
     * frame, this function pointer is set. */
126
    MVMSpecialReturn special_return;
127
128
    /* If we want to invoke a special handler upon unwinding past a
129
     * frame, this function pointer is set. */
130
    MVMSpecialReturn special_unwind;
131
132
    /* Data slot for the special return handler function. */
133
    void *special_return_data;
134
135
    /* Flag for if special_return_data need to be GC marked. */
136
    MVMSpecialReturnDataMark mark_special_return_data;
137
138
    /* Linked list of any continuation tags we have. */
139
    MVMContinuationTag *continuation_tags;
140
141
    /* If we were invoked with a call capture, that call capture, so we can
142
     * keep its callsite alive. */
143
    MVMObject *invoked_call_capture;
144
145
    /* Cache for dynlex lookup; if the name is non-null, the cache is valid
146
     * and the register can be accessed directly to find the contextual. */
147
    MVMString   *dynlex_cache_name;
148
    MVMRegister *dynlex_cache_reg;
149
    MVMuint16    dynlex_cache_type;
150
};
151
152
/* How do we invoke this thing? Specifies either an attribute to look at for
153
 * an invokable thing, a method to call, and maybe a multi-dispatch cache to
154
 * look in first for an answer. */
155
struct MVMInvocationSpec {
156
    /* Offsets for fast access; placed first as they are what will be most
157
     * often needed. */
158
    size_t code_ref_offset;
159
    size_t md_cache_offset;
160
    size_t md_valid_offset;
161
162
    /* Function that handles invocation, if any. */
163
    MVMObject *invocation_handler;
164
165
    /* Class handle, name and hint for attribute holding code to invoke. */
166
    MVMObject *class_handle;
167
    MVMString *attr_name;
168
    MVMint64   hint;
169
170
    /* Multi-dispatch info class handle, and name/hint of attribute that
171
     * holds the cache itself and a flag to check if it's allowed to
172
     * consider the cache. */
173
    MVMObject *md_class_handle;
174
    MVMString *md_cache_attr_name;
175
    MVMint64   md_cache_hint;
176
    MVMint64   md_valid_hint;
177
    MVMString *md_valid_attr_name;
178
};
179
180
/* Checks if a frame is allocated on a call stack or on the heap. If it is on
181
 * the call stack, then it will have zeroed flags (since heap-allocated frames
182
 * always have the "I'm a heap frame" bit set). */
183
19.4M
MVM_STATIC_INLINE MVMuint32 MVM_FRAME_IS_ON_CALLSTACK(MVMThreadContext *tc, MVMFrame *frame) {
184
19.4M
    return frame->header.flags == 0;
185
19.4M
}
Unexecuted instantiation: facts.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: sc.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: serialization.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: compiler.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: driver.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: dump.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: graph.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: codegen.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: candidate.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: manipulate.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: bootstrap.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: optimize.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: dead_bb_elimination.c:MVM_FRAME_IS_ON_CALLSTACK
deopt.c:MVM_FRAME_IS_ON_CALLSTACK
Line
Count
Source
183
28.4k
MVM_STATIC_INLINE MVMuint32 MVM_FRAME_IS_ON_CALLSTACK(MVMThreadContext *tc, MVMFrame *frame) {
184
28.4k
    return frame->header.flags == 0;
185
28.4k
}
Unexecuted instantiation: log.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: threshold.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: inline.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: osr.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: lookup.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: iterator.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: ConcBlockingQueue.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: NativeCall.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: CPointer.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: CStr.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: CArray.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: CStruct.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: CUnion.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: ReentrantMutex.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: ConditionVariable.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: Semaphore.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: worker.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: MVMAsyncTask.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: MVMNull.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: CPPStruct.c:MVM_FRAME_IS_ON_CALLSTACK
NativeRef.c:MVM_FRAME_IS_ON_CALLSTACK
Line
Count
Source
183
15
MVM_STATIC_INLINE MVMuint32 MVM_FRAME_IS_ON_CALLSTACK(MVMThreadContext *tc, MVMFrame *frame) {
184
15
    return frame->header.flags == 0;
185
15
}
Unexecuted instantiation: MultiDimArray.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: Decoder.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: MVMSpeshLog.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: MVMStaticFrameSpesh.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: 6model.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: time.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: heapsnapshot.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: telemeh.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: crossthreadwrite.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: line_coverage.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: sys.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: random.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: memmem32.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: moar.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: mmap.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: profile.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: label.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: compile.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: expr.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: tile.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: linear_scan.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: interface.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: emit.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: arch.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: callsite.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: nfg.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: stats.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: plan.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: arg_guard.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: plugin.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: decode_stream.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: ascii.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: parse_num.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: utf8.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: utf8_c8.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: args.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: unicode.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: normalize.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: latin1.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: utf16.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: windows1252.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: shiftjis.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: shiftjis_codeindex.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: bigintops.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: instrument.c:MVM_FRAME_IS_ON_CALLSTACK
roots.c:MVM_FRAME_IS_ON_CALLSTACK
Line
Count
Source
183
181k
MVM_STATIC_INLINE MVMuint32 MVM_FRAME_IS_ON_CALLSTACK(MVMThreadContext *tc, MVMFrame *frame) {
184
181k
    return frame->header.flags == 0;
185
181k
}
continuation.c:MVM_FRAME_IS_ON_CALLSTACK
Line
Count
Source
183
41
MVM_STATIC_INLINE MVMuint32 MVM_FRAME_IS_ON_CALLSTACK(MVMThreadContext *tc, MVMFrame *frame) {
184
41
    return frame->header.flags == 0;
185
41
}
Unexecuted instantiation: intcache.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: fixedsizealloc.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: regionalloc.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: debugserver.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: config.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: orchestrate.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: allocation.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: worklist.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: nativecall_dyncall.c:MVM_FRAME_IS_ON_CALLSTACK
collect.c:MVM_FRAME_IS_ON_CALLSTACK
Line
Count
Source
183
1.29k
MVM_STATIC_INLINE MVMuint32 MVM_FRAME_IS_ON_CALLSTACK(MVMThreadContext *tc, MVMFrame *frame) {
184
1.29k
    return frame->header.flags == 0;
185
1.29k
}
Unexecuted instantiation: gen2.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: wb.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: objectid.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: finalize.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: debug.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: io.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: eventloop.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: syncfile.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: bytecodedump.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: MVMContinuation.c:MVM_FRAME_IS_ON_CALLSTACK
exceptions.c:MVM_FRAME_IS_ON_CALLSTACK
Line
Count
Source
183
470
MVM_STATIC_INLINE MVMuint32 MVM_FRAME_IS_ON_CALLSTACK(MVMThreadContext *tc, MVMFrame *frame) {
184
470
    return frame->header.flags == 0;
185
470
}
interp.c:MVM_FRAME_IS_ON_CALLSTACK
Line
Count
Source
183
4.15k
MVM_STATIC_INLINE MVMuint32 MVM_FRAME_IS_ON_CALLSTACK(MVMThreadContext *tc, MVMFrame *frame) {
184
4.15k
    return frame->header.flags == 0;
185
4.15k
}
Unexecuted instantiation: threadcontext.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: compunit.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: bytecode.c:MVM_FRAME_IS_ON_CALLSTACK
frame.c:MVM_FRAME_IS_ON_CALLSTACK
Line
Count
Source
183
19.2M
MVM_STATIC_INLINE MVMuint32 MVM_FRAME_IS_ON_CALLSTACK(MVMThreadContext *tc, MVMFrame *frame) {
184
19.2M
    return frame->header.flags == 0;
185
19.2M
}
Unexecuted instantiation: callstack.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: validation.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: MVMMultiCache.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: threads.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: ops.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: hll.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: loadbytecode.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: num.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: coerce.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: dll.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: ext.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: nativecall.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: MVMThread.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: P6opaque.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: MVMCode.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: MVMOSHandle.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: MVMCompUnit.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: MVMStaticFrame.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: P6int.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: P6num.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: Uninstantiable.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: HashAttrStore.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: fileops.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: MVMIter.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: MVMContext.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: SCRef.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: MVMCallCapture.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: P6bigint.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: NFA.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: MVMException.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: MVMDLLSym.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: syncsocket.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: KnowHOWAttributeREPR.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: P6str.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: dirops.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: procops.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: timers.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: filewatchers.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: signals.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: asyncsocket.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: asyncsocketudp.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: reprs.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: containers.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: parametric.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: MVMString.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: VMArray.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: MVMHash.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: MVMCFunction.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: KnowHOWREPR.c:MVM_FRAME_IS_ON_CALLSTACK
Unexecuted instantiation: reprconv.c:MVM_FRAME_IS_ON_CALLSTACK
186
187
/* Forces a frame to the callstack if needed. Done as a static inline to make
188
 * the quite common case where nothing is needed cheaper. */
189
MVM_PUBLIC MVMFrame * MVM_frame_move_to_heap(MVMThreadContext *tc, MVMFrame *frame);
190
981k
MVM_STATIC_INLINE MVMFrame * MVM_frame_force_to_heap(MVMThreadContext *tc, MVMFrame *frame) {
191
981k
    return MVM_FRAME_IS_ON_CALLSTACK(tc, frame)
192
310k
        ? MVM_frame_move_to_heap(tc, frame)
193
671k
        : frame;
194
981k
}
Unexecuted instantiation: candidate.c:MVM_frame_force_to_heap
Unexecuted instantiation: codegen.c:MVM_frame_force_to_heap
Unexecuted instantiation: graph.c:MVM_frame_force_to_heap
Unexecuted instantiation: dump.c:MVM_frame_force_to_heap
Unexecuted instantiation: driver.c:MVM_frame_force_to_heap
Unexecuted instantiation: compiler.c:MVM_frame_force_to_heap
Unexecuted instantiation: serialization.c:MVM_frame_force_to_heap
Unexecuted instantiation: sc.c:MVM_frame_force_to_heap
Unexecuted instantiation: bootstrap.c:MVM_frame_force_to_heap
Unexecuted instantiation: manipulate.c:MVM_frame_force_to_heap
Unexecuted instantiation: facts.c:MVM_frame_force_to_heap
Unexecuted instantiation: optimize.c:MVM_frame_force_to_heap
Unexecuted instantiation: dead_bb_elimination.c:MVM_frame_force_to_heap
deopt.c:MVM_frame_force_to_heap
Line
Count
Source
190
28.4k
MVM_STATIC_INLINE MVMFrame * MVM_frame_force_to_heap(MVMThreadContext *tc, MVMFrame *frame) {
191
28.4k
    return MVM_FRAME_IS_ON_CALLSTACK(tc, frame)
192
24.0k
        ? MVM_frame_move_to_heap(tc, frame)
193
4.48k
        : frame;
194
28.4k
}
Unexecuted instantiation: log.c:MVM_frame_force_to_heap
Unexecuted instantiation: threshold.c:MVM_frame_force_to_heap
Unexecuted instantiation: inline.c:MVM_frame_force_to_heap
Unexecuted instantiation: osr.c:MVM_frame_force_to_heap
Unexecuted instantiation: lookup.c:MVM_frame_force_to_heap
Unexecuted instantiation: Semaphore.c:MVM_frame_force_to_heap
Unexecuted instantiation: MVMContinuation.c:MVM_frame_force_to_heap
Unexecuted instantiation: NativeCall.c:MVM_frame_force_to_heap
Unexecuted instantiation: CPointer.c:MVM_frame_force_to_heap
Unexecuted instantiation: CStr.c:MVM_frame_force_to_heap
Unexecuted instantiation: CArray.c:MVM_frame_force_to_heap
Unexecuted instantiation: CStruct.c:MVM_frame_force_to_heap
Unexecuted instantiation: CUnion.c:MVM_frame_force_to_heap
Unexecuted instantiation: ReentrantMutex.c:MVM_frame_force_to_heap
Unexecuted instantiation: ConditionVariable.c:MVM_frame_force_to_heap
Unexecuted instantiation: 6model.c:MVM_frame_force_to_heap
Unexecuted instantiation: ConcBlockingQueue.c:MVM_frame_force_to_heap
Unexecuted instantiation: MVMAsyncTask.c:MVM_frame_force_to_heap
Unexecuted instantiation: MVMNull.c:MVM_frame_force_to_heap
Unexecuted instantiation: CPPStruct.c:MVM_frame_force_to_heap
NativeRef.c:MVM_frame_force_to_heap
Line
Count
Source
190
15
MVM_STATIC_INLINE MVMFrame * MVM_frame_force_to_heap(MVMThreadContext *tc, MVMFrame *frame) {
191
15
    return MVM_FRAME_IS_ON_CALLSTACK(tc, frame)
192
10
        ? MVM_frame_move_to_heap(tc, frame)
193
5
        : frame;
194
15
}
Unexecuted instantiation: MultiDimArray.c:MVM_frame_force_to_heap
Unexecuted instantiation: Decoder.c:MVM_frame_force_to_heap
Unexecuted instantiation: MVMSpeshLog.c:MVM_frame_force_to_heap
Unexecuted instantiation: MVMStaticFrameSpesh.c:MVM_frame_force_to_heap
Unexecuted instantiation: mmap.c:MVM_frame_force_to_heap
Unexecuted instantiation: profile.c:MVM_frame_force_to_heap
Unexecuted instantiation: heapsnapshot.c:MVM_frame_force_to_heap
Unexecuted instantiation: telemeh.c:MVM_frame_force_to_heap
Unexecuted instantiation: crossthreadwrite.c:MVM_frame_force_to_heap
Unexecuted instantiation: line_coverage.c:MVM_frame_force_to_heap
Unexecuted instantiation: sys.c:MVM_frame_force_to_heap
Unexecuted instantiation: random.c:MVM_frame_force_to_heap
Unexecuted instantiation: memmem32.c:MVM_frame_force_to_heap
Unexecuted instantiation: moar.c:MVM_frame_force_to_heap
Unexecuted instantiation: instrument.c:MVM_frame_force_to_heap
Unexecuted instantiation: time.c:MVM_frame_force_to_heap
Unexecuted instantiation: label.c:MVM_frame_force_to_heap
Unexecuted instantiation: compile.c:MVM_frame_force_to_heap
Unexecuted instantiation: expr.c:MVM_frame_force_to_heap
Unexecuted instantiation: tile.c:MVM_frame_force_to_heap
Unexecuted instantiation: linear_scan.c:MVM_frame_force_to_heap
Unexecuted instantiation: interface.c:MVM_frame_force_to_heap
Unexecuted instantiation: emit.c:MVM_frame_force_to_heap
Unexecuted instantiation: arch.c:MVM_frame_force_to_heap
Unexecuted instantiation: utf8_c8.c:MVM_frame_force_to_heap
Unexecuted instantiation: worker.c:MVM_frame_force_to_heap
Unexecuted instantiation: stats.c:MVM_frame_force_to_heap
Unexecuted instantiation: plan.c:MVM_frame_force_to_heap
Unexecuted instantiation: arg_guard.c:MVM_frame_force_to_heap
Unexecuted instantiation: plugin.c:MVM_frame_force_to_heap
Unexecuted instantiation: decode_stream.c:MVM_frame_force_to_heap
Unexecuted instantiation: ascii.c:MVM_frame_force_to_heap
Unexecuted instantiation: parse_num.c:MVM_frame_force_to_heap
Unexecuted instantiation: utf8.c:MVM_frame_force_to_heap
Unexecuted instantiation: iterator.c:MVM_frame_force_to_heap
Unexecuted instantiation: nfg.c:MVM_frame_force_to_heap
Unexecuted instantiation: unicode.c:MVM_frame_force_to_heap
Unexecuted instantiation: normalize.c:MVM_frame_force_to_heap
Unexecuted instantiation: latin1.c:MVM_frame_force_to_heap
Unexecuted instantiation: utf16.c:MVM_frame_force_to_heap
Unexecuted instantiation: windows1252.c:MVM_frame_force_to_heap
Unexecuted instantiation: shiftjis.c:MVM_frame_force_to_heap
Unexecuted instantiation: shiftjis_codeindex.c:MVM_frame_force_to_heap
Unexecuted instantiation: bigintops.c:MVM_frame_force_to_heap
Unexecuted instantiation: worklist.c:MVM_frame_force_to_heap
Unexecuted instantiation: nativecall_dyncall.c:MVM_frame_force_to_heap
continuation.c:MVM_frame_force_to_heap
Line
Count
Source
190
41
MVM_STATIC_INLINE MVMFrame * MVM_frame_force_to_heap(MVMThreadContext *tc, MVMFrame *frame) {
191
41
    return MVM_FRAME_IS_ON_CALLSTACK(tc, frame)
192
0
        ? MVM_frame_move_to_heap(tc, frame)
193
41
        : frame;
194
41
}
Unexecuted instantiation: intcache.c:MVM_frame_force_to_heap
Unexecuted instantiation: fixedsizealloc.c:MVM_frame_force_to_heap
Unexecuted instantiation: regionalloc.c:MVM_frame_force_to_heap
Unexecuted instantiation: debugserver.c:MVM_frame_force_to_heap
Unexecuted instantiation: config.c:MVM_frame_force_to_heap
Unexecuted instantiation: orchestrate.c:MVM_frame_force_to_heap
Unexecuted instantiation: allocation.c:MVM_frame_force_to_heap
Unexecuted instantiation: nativecall.c:MVM_frame_force_to_heap
Unexecuted instantiation: roots.c:MVM_frame_force_to_heap
Unexecuted instantiation: collect.c:MVM_frame_force_to_heap
Unexecuted instantiation: gen2.c:MVM_frame_force_to_heap
Unexecuted instantiation: wb.c:MVM_frame_force_to_heap
Unexecuted instantiation: objectid.c:MVM_frame_force_to_heap
Unexecuted instantiation: finalize.c:MVM_frame_force_to_heap
Unexecuted instantiation: debug.c:MVM_frame_force_to_heap
Unexecuted instantiation: io.c:MVM_frame_force_to_heap
Unexecuted instantiation: eventloop.c:MVM_frame_force_to_heap
Unexecuted instantiation: validation.c:MVM_frame_force_to_heap
Unexecuted instantiation: callsite.c:MVM_frame_force_to_heap
Unexecuted instantiation: args.c:MVM_frame_force_to_heap
exceptions.c:MVM_frame_force_to_heap
Line
Count
Source
190
470
MVM_STATIC_INLINE MVMFrame * MVM_frame_force_to_heap(MVMThreadContext *tc, MVMFrame *frame) {
191
470
    return MVM_FRAME_IS_ON_CALLSTACK(tc, frame)
192
428
        ? MVM_frame_move_to_heap(tc, frame)
193
42
        : frame;
194
470
}
Unexecuted instantiation: interp.c:MVM_frame_force_to_heap
Unexecuted instantiation: threadcontext.c:MVM_frame_force_to_heap
Unexecuted instantiation: compunit.c:MVM_frame_force_to_heap
Unexecuted instantiation: bytecode.c:MVM_frame_force_to_heap
frame.c:MVM_frame_force_to_heap
Line
Count
Source
190
952k
MVM_STATIC_INLINE MVMFrame * MVM_frame_force_to_heap(MVMThreadContext *tc, MVMFrame *frame) {
191
952k
    return MVM_FRAME_IS_ON_CALLSTACK(tc, frame)
192
285k
        ? MVM_frame_move_to_heap(tc, frame)
193
666k
        : frame;
194
952k
}
Unexecuted instantiation: callstack.c:MVM_frame_force_to_heap
Unexecuted instantiation: syncfile.c:MVM_frame_force_to_heap
Unexecuted instantiation: bytecodedump.c:MVM_frame_force_to_heap
Unexecuted instantiation: threads.c:MVM_frame_force_to_heap
Unexecuted instantiation: ops.c:MVM_frame_force_to_heap
Unexecuted instantiation: hll.c:MVM_frame_force_to_heap
Unexecuted instantiation: loadbytecode.c:MVM_frame_force_to_heap
Unexecuted instantiation: num.c:MVM_frame_force_to_heap
Unexecuted instantiation: coerce.c:MVM_frame_force_to_heap
Unexecuted instantiation: dll.c:MVM_frame_force_to_heap
Unexecuted instantiation: ext.c:MVM_frame_force_to_heap
Unexecuted instantiation: HashAttrStore.c:MVM_frame_force_to_heap
Unexecuted instantiation: P6str.c:MVM_frame_force_to_heap
Unexecuted instantiation: P6opaque.c:MVM_frame_force_to_heap
Unexecuted instantiation: MVMCode.c:MVM_frame_force_to_heap
Unexecuted instantiation: MVMOSHandle.c:MVM_frame_force_to_heap
Unexecuted instantiation: MVMCompUnit.c:MVM_frame_force_to_heap
Unexecuted instantiation: MVMStaticFrame.c:MVM_frame_force_to_heap
Unexecuted instantiation: P6int.c:MVM_frame_force_to_heap
Unexecuted instantiation: P6num.c:MVM_frame_force_to_heap
Unexecuted instantiation: Uninstantiable.c:MVM_frame_force_to_heap
Unexecuted instantiation: KnowHOWAttributeREPR.c:MVM_frame_force_to_heap
Unexecuted instantiation: MVMThread.c:MVM_frame_force_to_heap
Unexecuted instantiation: MVMIter.c:MVM_frame_force_to_heap
Unexecuted instantiation: MVMContext.c:MVM_frame_force_to_heap
Unexecuted instantiation: SCRef.c:MVM_frame_force_to_heap
Unexecuted instantiation: MVMCallCapture.c:MVM_frame_force_to_heap
Unexecuted instantiation: P6bigint.c:MVM_frame_force_to_heap
Unexecuted instantiation: NFA.c:MVM_frame_force_to_heap
Unexecuted instantiation: MVMException.c:MVM_frame_force_to_heap
Unexecuted instantiation: MVMDLLSym.c:MVM_frame_force_to_heap
Unexecuted instantiation: reprs.c:MVM_frame_force_to_heap
Unexecuted instantiation: syncsocket.c:MVM_frame_force_to_heap
Unexecuted instantiation: fileops.c:MVM_frame_force_to_heap
Unexecuted instantiation: dirops.c:MVM_frame_force_to_heap
Unexecuted instantiation: procops.c:MVM_frame_force_to_heap
Unexecuted instantiation: timers.c:MVM_frame_force_to_heap
Unexecuted instantiation: filewatchers.c:MVM_frame_force_to_heap
Unexecuted instantiation: signals.c:MVM_frame_force_to_heap
Unexecuted instantiation: asyncsocket.c:MVM_frame_force_to_heap
Unexecuted instantiation: asyncsocketudp.c:MVM_frame_force_to_heap
Unexecuted instantiation: MVMMultiCache.c:MVM_frame_force_to_heap
Unexecuted instantiation: reprconv.c:MVM_frame_force_to_heap
Unexecuted instantiation: containers.c:MVM_frame_force_to_heap
Unexecuted instantiation: parametric.c:MVM_frame_force_to_heap
Unexecuted instantiation: MVMString.c:MVM_frame_force_to_heap
Unexecuted instantiation: VMArray.c:MVM_frame_force_to_heap
Unexecuted instantiation: MVMHash.c:MVM_frame_force_to_heap
Unexecuted instantiation: MVMCFunction.c:MVM_frame_force_to_heap
Unexecuted instantiation: KnowHOWREPR.c:MVM_frame_force_to_heap
195
196
MVMFrame * MVM_frame_debugserver_move_to_heap(MVMThreadContext *tc, MVMThreadContext *owner, MVMFrame *frame);
197
198
MVMRegister * MVM_frame_initial_work(MVMThreadContext *tc, MVMuint16 *local_types,
199
                                     MVMuint16 num_locals);
200
void MVM_frame_invoke_code(MVMThreadContext *tc, MVMCode *code,
201
                           MVMCallsite *callsite, MVMint32 spesh_cand);
202
void MVM_frame_invoke(MVMThreadContext *tc, MVMStaticFrame *static_frame,
203
                      MVMCallsite *callsite, MVMRegister *args,
204
                      MVMFrame *outer, MVMObject *code_ref, MVMint32 spesh_cand);
205
MVMFrame * MVM_frame_create_context_only(MVMThreadContext *tc, MVMStaticFrame *static_frame,
206
        MVMObject *code_ref);
207
MVMFrame * MVM_frame_create_for_deopt(MVMThreadContext *tc, MVMStaticFrame *static_frame,
208
                                      MVMCode *code_ref);
209
MVM_PUBLIC MVMuint64 MVM_frame_try_return(MVMThreadContext *tc);
210
MVM_PUBLIC MVMuint64 MVM_frame_try_return_no_exit_handlers(MVMThreadContext *tc);
211
void MVM_frame_unwind_to(MVMThreadContext *tc, MVMFrame *frame, MVMuint8 *abs_addr,
212
                         MVMuint32 rel_addr, MVMObject *return_value, void *jit_return_label);
213
MVM_PUBLIC void MVM_frame_destroy(MVMThreadContext *tc, MVMFrame *frame);
214
MVM_PUBLIC MVMObject * MVM_frame_get_code_object(MVMThreadContext *tc, MVMCode *code);
215
MVM_PUBLIC void MVM_frame_capturelex(MVMThreadContext *tc, MVMObject *code);
216
MVM_PUBLIC void MVM_frame_capture_inner(MVMThreadContext *tc, MVMObject *code);
217
MVM_PUBLIC MVMObject * MVM_frame_takeclosure(MVMThreadContext *tc, MVMObject *code);
218
MVM_PUBLIC MVMObject * MVM_frame_vivify_lexical(MVMThreadContext *tc, MVMFrame *f, MVMuint16 idx);
219
MVM_PUBLIC MVMRegister * MVM_frame_find_lexical_by_name(MVMThreadContext *tc, MVMString *name, MVMuint16 type);
220
MVM_PUBLIC void MVM_frame_bind_lexical_by_name(MVMThreadContext *tc, MVMString *name, MVMuint16 type, MVMRegister *value);
221
MVMObject * MVM_frame_find_lexical_by_name_outer(MVMThreadContext *tc, MVMString *name);
222
MVM_PUBLIC MVMRegister * MVM_frame_find_lexical_by_name_rel(MVMThreadContext *tc, MVMString *name, MVMFrame *cur_frame);
223
MVM_PUBLIC MVMRegister * MVM_frame_find_lexical_by_name_rel_caller(MVMThreadContext *tc, MVMString *name, MVMFrame *cur_caller_frame);
224
MVMRegister * MVM_frame_find_contextual_by_name(MVMThreadContext *tc, MVMString *name, MVMuint16 *type, MVMFrame *cur_frame, MVMint32 vivify, MVMFrame **found_frame);
225
MVMObject * MVM_frame_getdynlex(MVMThreadContext *tc, MVMString *name, MVMFrame *cur_frame);
226
void MVM_frame_binddynlex(MVMThreadContext *tc, MVMString *name, MVMObject *value, MVMFrame *cur_frame);
227
MVMRegister * MVM_frame_lexical(MVMThreadContext *tc, MVMFrame *f, MVMString *name);
228
MVM_PUBLIC MVMRegister * MVM_frame_try_get_lexical(MVMThreadContext *tc, MVMFrame *f, MVMString *name, MVMuint16 type);
229
MVMuint16 MVM_frame_lexical_primspec(MVMThreadContext *tc, MVMFrame *f, MVMString *name);
230
MVM_PUBLIC MVMObject * MVM_frame_find_invokee(MVMThreadContext *tc, MVMObject *code, MVMCallsite **tweak_cs);
231
MVMObject * MVM_frame_find_invokee_multi_ok(MVMThreadContext *tc, MVMObject *code, MVMCallsite **tweak_cs, MVMRegister *args, MVMuint16 *was_multi);
232
MVMObject * MVM_frame_resolve_invokee_spesh(MVMThreadContext *tc, MVMObject *invokee);
233
MVM_PUBLIC MVMObject * MVM_frame_context_wrapper(MVMThreadContext *tc, MVMFrame *f);
234
MVMFrameExtra * MVM_frame_extra(MVMThreadContext *tc, MVMFrame *f);
235
MVM_PUBLIC void MVM_frame_special_return(MVMThreadContext *tc, MVMFrame *f,
236
    MVMSpecialReturn special_return, MVMSpecialReturn special_unwind,
237
    void *special_return_data, MVMSpecialReturnDataMark mark_special_return_data);
238
MVM_PUBLIC void MVM_frame_clear_special_return(MVMThreadContext *tc, MVMFrame *f);