LCOV - code coverage report
Current view: top level - src - simplevector.c (source / functions) Hit Total Coverage
Test: [test only] commit 0f242327d2cc9bd130497f44b6350c924185606a Lines: 56 61 91.8 %
Date: 2022-07-16 23:42:53 Functions: 9 11 81.8 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 15 18 83.3 %

           Branch data     Line data    Source code
       1                 :            : // This file is a part of Julia. License is MIT: https://julialang.org/license
       2                 :            : 
       3                 :            : #include <stdlib.h>
       4                 :            : #include <string.h>
       5                 :            : #include <stdarg.h>
       6                 :            : #include "julia.h"
       7                 :            : #include "julia_internal.h"
       8                 :            : #include "julia_assert.h"
       9                 :            : 
      10                 :        256 : JL_DLLEXPORT jl_svec_t *(ijl_svec)(size_t n, ...)
      11                 :            : {
      12                 :            :     va_list args;
      13         [ -  + ]:        256 :     if (n == 0) return jl_emptysvec;
      14                 :        256 :     va_start(args, n);
      15                 :        256 :     jl_svec_t *jv = jl_alloc_svec_uninit(n);
      16         [ +  + ]:        893 :     for (size_t i = 0; i < n; i++)
      17                 :        637 :         jl_svecset(jv, i, va_arg(args, jl_value_t*));
      18                 :        256 :     va_end(args);
      19                 :        256 :     return jv;
      20                 :            : }
      21                 :            : 
      22                 :         37 : jl_svec_t *(jl_perm_symsvec)(size_t n, ...)
      23                 :            : {
      24         [ -  + ]:         37 :     if (n == 0) return jl_emptysvec;
      25                 :         37 :     jl_svec_t *jv = (jl_svec_t*)jl_gc_permobj((n + 1) * sizeof(void*), jl_simplevector_type);
      26                 :         37 :     jl_svec_set_len_unsafe(jv, n);
      27                 :            :     va_list args;
      28                 :         37 :     va_start(args, n);
      29         [ +  + ]:        233 :     for (size_t i = 0; i < n; i++)
      30                 :        196 :         jl_svecset(jv, i, jl_symbol(va_arg(args, const char*)));
      31                 :         37 :     va_end(args);
      32                 :         37 :     return jv;
      33                 :            : }
      34                 :            : 
      35                 :          7 : JL_DLLEXPORT jl_svec_t *jl_svec1(void *a)
      36                 :            : {
      37                 :          7 :     jl_task_t *ct = jl_current_task;
      38                 :          7 :     jl_svec_t *v = (jl_svec_t*)jl_gc_alloc(ct->ptls, sizeof(void*) * 2,
      39                 :            :                                            jl_simplevector_type);
      40                 :          7 :     jl_svec_set_len_unsafe(v, 1);
      41                 :          7 :     jl_svec_data(v)[0] = (jl_value_t*)a;
      42                 :          7 :     return v;
      43                 :            : }
      44                 :            : 
      45                 :     285726 : JL_DLLEXPORT jl_svec_t *jl_svec2(void *a, void *b)
      46                 :            : {
      47                 :     285726 :     jl_task_t *ct = jl_current_task;
      48                 :     285726 :     jl_svec_t *v = (jl_svec_t*)jl_gc_alloc(ct->ptls, sizeof(void*) * 3,
      49                 :            :                                            jl_simplevector_type);
      50                 :     285726 :     jl_svec_set_len_unsafe(v, 2);
      51                 :     285726 :     jl_svec_data(v)[0] = (jl_value_t*)a;
      52                 :     285726 :     jl_svec_data(v)[1] = (jl_value_t*)b;
      53                 :     285726 :     return v;
      54                 :            : }
      55                 :            : 
      56                 :  885489000 : JL_DLLEXPORT jl_svec_t *jl_alloc_svec_uninit(size_t n)
      57                 :            : {
      58                 :  885489000 :     jl_task_t *ct = jl_current_task;
      59         [ +  + ]:  885489000 :     if (n == 0) return jl_emptysvec;
      60                 :  885311000 :     jl_svec_t *jv = (jl_svec_t*)jl_gc_alloc(ct->ptls, (n + 1) * sizeof(void*),
      61                 :            :                                             jl_simplevector_type);
      62                 :  885311000 :     jl_svec_set_len_unsafe(jv, n);
      63                 :  885311000 :     return jv;
      64                 :            : }
      65                 :            : 
      66                 : 2948180000 : JL_DLLEXPORT jl_svec_t *jl_alloc_svec(size_t n)
      67                 :            : {
      68         [ +  + ]: 2948180000 :     if (n == 0) return jl_emptysvec;
      69                 :  700779000 :     jl_svec_t *jv = jl_alloc_svec_uninit(n);
      70                 :  700779000 :     memset(jl_assume_aligned(jl_svec_data(jv), sizeof(void*)), 0, n * sizeof(void*));
      71                 :  700779000 :     return jv;
      72                 :            : }
      73                 :            : 
      74                 :    2977490 : JL_DLLEXPORT jl_svec_t *jl_svec_copy(jl_svec_t *a)
      75                 :            : {
      76                 :    2977490 :     size_t n = jl_svec_len(a);
      77                 :    2977490 :     jl_svec_t *c = jl_alloc_svec_uninit(n);
      78                 :    2977490 :     memmove_refs((void**)jl_svec_data(c), (void**)jl_svec_data(a), n);
      79                 :    2977490 :     return c;
      80                 :            : }
      81                 :            : 
      82                 :      53591 : JL_DLLEXPORT jl_svec_t *jl_svec_fill(size_t n, jl_value_t *x)
      83                 :            : {
      84         [ +  + ]:      53591 :     if (n == 0) return jl_emptysvec;
      85                 :      48757 :     jl_svec_t *v = jl_alloc_svec_uninit(n);
      86         [ +  + ]:     152594 :     for (size_t i = 0; i < n; i++)
      87                 :     103837 :         jl_svec_data(v)[i] = x;
      88                 :      48757 :     return v;
      89                 :            : }
      90                 :            : 
      91                 :          0 : JL_DLLEXPORT size_t (jl_svec_len)(jl_svec_t *t) JL_NOTSAFEPOINT
      92                 :            : {
      93                 :          0 :     return jl_svec_len(t);
      94                 :            : }
      95                 :            : 
      96                 :          0 : JL_DLLEXPORT int8_t jl_svec_isassigned(jl_svec_t *t JL_PROPAGATES_ROOT, ssize_t i) JL_NOTSAFEPOINT
      97                 :            : {
      98                 :          0 :     return jl_svecref(t, (size_t)i) != NULL;
      99                 :            : }
     100                 :            : 
     101                 :      15645 : JL_DLLEXPORT jl_value_t *jl_svec_ref(jl_svec_t *t JL_PROPAGATES_ROOT, ssize_t i)
     102                 :            : {
     103                 :      15645 :     jl_value_t *v = jl_svecref(t, (size_t)i);
     104         [ -  + ]:      15645 :     if (__unlikely(v == NULL))
     105                 :          0 :         jl_throw(jl_undefref_exception);
     106                 :      15645 :     return v;
     107                 :            : }

Generated by: LCOV version 1.14