Lines Matching refs:fc
37 static void funccal_unref(funccall_T *fc, ufunc_T *fp, int force);
1995 free_funccal(funccall_T *fc) in free_funccal() argument
1999 for (i = 0; i < fc->fc_funcs.ga_len; ++i) in free_funccal()
2001 ufunc_T *fp = ((ufunc_T **)(fc->fc_funcs.ga_data))[i]; in free_funccal()
2007 if (fp != NULL && fp->uf_scoped == fc) in free_funccal()
2010 ga_clear(&fc->fc_funcs); in free_funccal()
2012 func_ptr_unref(fc->func); in free_funccal()
2013 vim_free(fc); in free_funccal()
2022 free_funccal_contents(funccall_T *fc) in free_funccal_contents() argument
2027 vars_clear(&fc->l_vars.dv_hashtab); in free_funccal_contents()
2030 vars_clear(&fc->l_avars.dv_hashtab); in free_funccal_contents()
2033 FOR_ALL_LIST_ITEMS(&fc->l_varlist, li) in free_funccal_contents()
2036 free_funccal(fc); in free_funccal_contents()
2044 cleanup_function_call(funccall_T *fc) in cleanup_function_call() argument
2046 int may_free_fc = fc->fc_refcount <= 0; in cleanup_function_call()
2049 current_funccal = fc->caller; in cleanup_function_call()
2052 if (may_free_fc && fc->l_vars.dv_refcount == DO_NOT_FREE_CNT) in cleanup_function_call()
2053 vars_clear(&fc->l_vars.dv_hashtab); in cleanup_function_call()
2060 if (may_free_fc && fc->l_avars.dv_refcount == DO_NOT_FREE_CNT) in cleanup_function_call()
2061 vars_clear_ext(&fc->l_avars.dv_hashtab, FALSE); in cleanup_function_call()
2071 todo = (int)fc->l_avars.dv_hashtab.ht_used; in cleanup_function_call()
2072 for (hi = fc->l_avars.dv_hashtab.ht_array; todo > 0; ++hi) in cleanup_function_call()
2083 if (may_free_fc && fc->l_varlist.lv_refcount == DO_NOT_FREE_CNT) in cleanup_function_call()
2084 fc->l_varlist.lv_first = NULL; in cleanup_function_call()
2092 FOR_ALL_LIST_ITEMS(&fc->l_varlist, li) in cleanup_function_call()
2097 free_funccal(fc); in cleanup_function_call()
2105 fc->caller = previous_funccal; in cleanup_function_call()
2106 previous_funccal = fc; in cleanup_function_call()
2111 else if (++made_copy >= (int)((4096 * 1024) / sizeof(*fc))) in cleanup_function_call()
2143 funccal_unref(funccall_T *fc, ufunc_T *fp, int force) in funccal_unref() argument
2148 if (fc == NULL) in funccal_unref()
2151 if (--fc->fc_refcount <= 0 && (force || ( in funccal_unref()
2152 fc->l_varlist.lv_refcount == DO_NOT_FREE_CNT in funccal_unref()
2153 && fc->l_vars.dv_refcount == DO_NOT_FREE_CNT in funccal_unref()
2154 && fc->l_avars.dv_refcount == DO_NOT_FREE_CNT))) in funccal_unref()
2157 if (fc == *pfc) in funccal_unref()
2159 *pfc = fc->caller; in funccal_unref()
2160 free_funccal_contents(fc); in funccal_unref()
2164 for (i = 0; i < fc->fc_funcs.ga_len; ++i) in funccal_unref()
2165 if (((ufunc_T **)(fc->fc_funcs.ga_data))[i] == fp) in funccal_unref()
2166 ((ufunc_T **)(fc->fc_funcs.ga_data))[i] = NULL; in funccal_unref()
2441 funccall_T *fc; in call_user_func() local
2472 fc = ALLOC_CLEAR_ONE(funccall_T); in call_user_func()
2473 if (fc == NULL) in call_user_func()
2475 fc->caller = current_funccal; in call_user_func()
2476 current_funccal = fc; in call_user_func()
2477 fc->func = fp; in call_user_func()
2478 fc->rettv = rettv; in call_user_func()
2479 fc->level = ex_nesting_level; in call_user_func()
2481 fc->breakpoint = dbg_find_breakpoint(FALSE, fp->uf_name, (linenr_T)0); in call_user_func()
2482 fc->dbg_tick = debug_tick; in call_user_func()
2484 ga_init2(&fc->fc_funcs, sizeof(ufunc_T *), 1); in call_user_func()
2490 ufunc_T *caller = fc->caller == NULL ? NULL : fc->caller->func; in call_user_func()
2504 current_funccal = fc->caller; in call_user_func()
2505 free_funccal(fc); in call_user_func()
2520 init_var_dict(&fc->l_vars, &fc->l_vars_var, VAR_DEF_SCOPE); in call_user_func()
2525 v = &fc->fixvar[fixvar_idx++].var; in call_user_func()
2529 hash_add(&fc->l_vars.dv_hashtab, DI2HIKEY(v)); in call_user_func()
2541 init_var_dict(&fc->l_avars, &fc->l_avars_var, VAR_SCOPE); in call_user_func()
2543 add_nr_var(&fc->l_avars, &fc->fixvar[fixvar_idx++].var, "0", in call_user_func()
2546 fc->l_avars.dv_lock = VAR_FIXED; in call_user_func()
2551 v = &fc->fixvar[fixvar_idx++].var; in call_user_func()
2555 hash_add(&fc->l_avars.dv_hashtab, DI2HIKEY(v)); in call_user_func()
2558 v->di_tv.vval.v_list = &fc->l_varlist; in call_user_func()
2560 CLEAR_FIELD(fc->l_varlist); in call_user_func()
2561 fc->l_varlist.lv_refcount = DO_NOT_FREE_CNT; in call_user_func()
2562 fc->l_varlist.lv_lock = VAR_FIXED; in call_user_func()
2572 add_nr_var(&fc->l_avars, &fc->fixvar[fixvar_idx++].var, "firstline", in call_user_func()
2574 add_nr_var(&fc->l_avars, &fc->fixvar[fixvar_idx++].var, "lastline", in call_user_func()
2623 v = &fc->fixvar[fixvar_idx++].var; in call_user_func()
2649 hash_add(&fc->l_vars.dv_hashtab, DI2HIKEY(v)); in call_user_func()
2652 hash_add(&fc->l_avars.dv_hashtab, DI2HIKEY(v)); in call_user_func()
2656 listitem_T *li = &fc->l_listitems[ai]; in call_user_func()
2660 list_append(&fc->l_varlist, li); in call_user_func()
2723 fc->caller == NULL ? NULL : fc->caller->func); in call_user_func()
2745 do_cmdline(NULL, get_func_line, (void *)fc, in call_user_func()
2761 ufunc_T *caller = fc->caller == NULL ? NULL : fc->caller->func; in call_user_func()
2776 else if (fc->rettv->v_type == VAR_NUMBER) in call_user_func()
2778 (long)fc->rettv->vval.v_number); in call_user_func()
2790 s = tv2string(fc->rettv, &tofree, numbuf2, 0); in call_user_func()
2835 cleanup_function_call(fc); in call_user_func()
4851 can_free_funccal(funccall_T *fc, int copyID) in can_free_funccal() argument
4853 return (fc->l_varlist.lv_copyID != copyID in can_free_funccal()
4854 && fc->l_vars.dv_copyID != copyID in can_free_funccal()
4855 && fc->l_avars.dv_copyID != copyID in can_free_funccal()
4856 && fc->fc_copyID != copyID); in can_free_funccal()
5430 funccall_T *fc, **pfc; in free_unref_funccal() local
5436 fc = *pfc; in free_unref_funccal()
5437 *pfc = fc->caller; in free_unref_funccal()
5438 free_funccal_contents(fc); in free_unref_funccal()
5629 funccall_T *fc; in set_ref_in_previous_funccal() local
5631 for (fc = previous_funccal; fc != NULL; fc = fc->caller) in set_ref_in_previous_funccal()
5633 fc->fc_copyID = copyID + 1; in set_ref_in_previous_funccal()
5634 if (set_ref_in_ht(&fc->l_vars.dv_hashtab, copyID + 1, NULL) in set_ref_in_previous_funccal()
5635 || set_ref_in_ht(&fc->l_avars.dv_hashtab, copyID + 1, NULL) in set_ref_in_previous_funccal()
5636 || set_ref_in_list_items(&fc->l_varlist, copyID + 1, NULL)) in set_ref_in_previous_funccal()
5643 set_ref_in_funccal(funccall_T *fc, int copyID) in set_ref_in_funccal() argument
5645 if (fc->fc_copyID != copyID) in set_ref_in_funccal()
5647 fc->fc_copyID = copyID; in set_ref_in_funccal()
5648 if (set_ref_in_ht(&fc->l_vars.dv_hashtab, copyID, NULL) in set_ref_in_funccal()
5649 || set_ref_in_ht(&fc->l_avars.dv_hashtab, copyID, NULL) in set_ref_in_funccal()
5650 || set_ref_in_list_items(&fc->l_varlist, copyID, NULL) in set_ref_in_funccal()
5651 || set_ref_in_func(NULL, fc->func, copyID)) in set_ref_in_funccal()
5663 funccall_T *fc; in set_ref_in_call_stack() local
5666 for (fc = current_funccal; fc != NULL; fc = fc->caller) in set_ref_in_call_stack()
5667 if (set_ref_in_funccal(fc, copyID)) in set_ref_in_call_stack()
5672 for (fc = entry->top_funccal; fc != NULL; fc = fc->caller) in set_ref_in_call_stack()
5673 if (set_ref_in_funccal(fc, copyID)) in set_ref_in_call_stack()
5726 funccall_T *fc; in set_ref_in_func() local
5743 for (fc = fp->uf_scoped; fc != NULL; fc = fc->func->uf_scoped) in set_ref_in_func()
5744 abort = abort || set_ref_in_funccal(fc, copyID); in set_ref_in_func()