Gwion coverage report


Directory: src/
File: src/vm/vm_shred.c
Date: 2023-01-30 18:32:28
Exec Total Coverage
Lines: 28 32 87.5%
Functions: 4 4 100.0%
Branches: 6 10 60.0%

Line Branch Exec Source
1 #include "gwion_util.h"
2 #include "gwion_ast.h"
3 #include "gwion_env.h"
4 #include "vm.h"
5 #include "gwion.h"
6 #include "object.h"
7
8 struct Stack_ {
9 VM_Shred shred;
10 char c[SIZEOF_REG];
11 char d[SIZEOF_MEM];
12 };
13
14 1067 static inline struct ShredInfo_ *new_shredinfo(MemPool p, const VM_Code c) {
15 1067 struct ShredInfo_ *const info = mp_calloc(p, ShredInfo);
16 1067 info->mp = p;
17 1067 info->orig = c;
18 1067 return info;
19 }
20
21 1063 static inline void free_shredinfo(MemPool mp, struct ShredInfo_ *info) {
22
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1063 times.
1063 if (info->args.ptr) {
23 const Vector v = &info->args;
24 LOOP_OPTIM
25 for (m_uint i = vector_size(v) + 1; --i;)
26 xfree((void *)vector_at(v, i - 1));
27 vector_release(v);
28 }
29
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1063 times.
1063 if (info->line.ptr) vector_release(&info->line);
30 1063 mp_free(mp, ShredInfo, info);
31 1063 }
32
33 1067 VM_Shred new_vm_shred(MemPool p, VM_Code c) {
34 1067 const VM_Shred shred = mp_calloc(p, Stack);
35 1067 shred->code = c;
36 1067 shred->reg = (m_bit *)shred + sizeof(struct VM_Shred_);
37 1067 shred->base = shred->mem = shred->reg + SIZEOF_REG;
38 1067 shred->info = new_shredinfo(p, c);
39 1067 MUTEX_SETUP(shred->mutex);
40 1067 return shred;
41 }
42
43 1063 void free_vm_shred(VM_Shred shred) {
44
2/2
✓ Branch 0 taken 3 times.
✓ Branch 1 taken 1060 times.
1063 if (shred->info->frame.ptr) vector_release(&shred->info->frame);
45
2/2
✓ Branch 0 taken 31 times.
✓ Branch 1 taken 1032 times.
1063 if (shred->tick->child.ptr) vector_release(&shred->tick->child);
46 1063 vmcode_remref(shred->info->orig, shred->info->vm->gwion);
47 1063 const MemPool mp = shred->info->mp;
48 1063 mp_free(mp, ShredTick, shred->tick);
49 1063 free_shredinfo(mp, shred->info);
50 1063 MUTEX_CLEANUP(shred->mutex);
51 1063 mp_free(mp, Stack, shred);
52 1063 }
53