1 | #ifndef DEFINE_FUNC_ATTRIBUTES |
2 | # define DEFINE_FUNC_ATTRIBUTES |
3 | #endif |
4 | #include "nvim/func_attr.h" |
5 | #undef DEFINE_FUNC_ATTRIBUTES |
6 | static inline kh_functions_t *kh_init_functions(void); |
7 | static inline void kh_dealloc_functions(kh_functions_t *h); |
8 | static inline void kh_destroy_functions(kh_functions_t *h); |
9 | static inline void kh_clear_functions(kh_functions_t *h); |
10 | static inline khint_t kh_get_functions(const kh_functions_t *h, kh_cstr_t key); |
11 | static inline void kh_resize_functions(kh_functions_t *h, khint_t new_n_buckets); |
12 | static inline khint_t kh_put_functions(kh_functions_t *h, kh_cstr_t key, int *ret); |
13 | static inline void kh_del_functions(kh_functions_t *h, khint_t x); |
14 | static int eval1_emsg(char_u **arg, typval_T *rettv, _Bool evaluate) FUNC_ATTR_NONNULL_ARG(1, 2); |
15 | static int eval_expr_typval(const typval_T *expr, typval_T *argv, int argc, typval_T *rettv) FUNC_ATTR_NONNULL_ARG(1, 2, 4); |
16 | static _Bool eval_expr_to_bool(const typval_T *expr, _Bool *error) FUNC_ATTR_NONNULL_ARG(1, 2); |
17 | static void prepare_vimvar(int idx, typval_T *save_tv); |
18 | static void restore_vimvar(int idx, typval_T *save_tv); |
19 | static void find_win_for_curbuf(void); |
20 | static void ex_let_const(exarg_T *eap, const _Bool is_const); |
21 | static int ex_let_vars(char_u *arg_start, typval_T *tv, int copy, int semicolon, int var_count, int is_const, char_u *nextchars ); |
22 | static const char_u *skip_var_list(const char_u *arg, int *var_count, int *semicolon); |
23 | static const char_u *skip_var_one(const char_u *arg); |
24 | static void list_hashtable_vars(hashtab_T *ht, const char *prefix, int empty, int *first); |
25 | static void list_glob_vars(int *first); |
26 | static void list_buf_vars(int *first); |
27 | static void list_win_vars(int *first); |
28 | static void list_tab_vars(int *first); |
29 | static void list_vim_vars(int *first); |
30 | static void list_script_vars(int *first); |
31 | static void list_func_vars(int *first); |
32 | static const char *list_arg_vars(exarg_T *eap, const char *arg, int *first); |
33 | static char_u *ex_let_one(char_u *arg, typval_T *const tv, const _Bool copy, const _Bool is_const, const char_u *const endchars, const char_u *const op) FUNC_ATTR_NONNULL_ARG(1, 2) FUNC_ATTR_WARN_UNUSED_RESULT; |
34 | static char_u *get_lval(char_u *const name, typval_T *const rettv, lval_T *const lp, const _Bool unlet, const _Bool skip, const int flags, const int fne_flags) FUNC_ATTR_NONNULL_ARG(1, 3); |
35 | static void clear_lval(lval_T *lp); |
36 | static void set_var_lval(lval_T *lp, char_u *endp, typval_T *rettv, int copy, const _Bool is_const, const char_u *op); |
37 | static void ex_unletlock(exarg_T *eap, char_u *argstart, int deep); |
38 | static int do_unlet_var(lval_T *const lp, char_u *const name_end, int forceit); |
39 | static int do_lock_var(lval_T *lp, char_u *const name_end, const int deep, const _Bool lock); |
40 | static char_u *cat_prefix_varname(int prefix, char_u *name); |
41 | static int pattern_match(char_u *pat, char_u *text, int ic); |
42 | static int eval1(char_u **arg, typval_T *rettv, int evaluate); |
43 | static int eval2(char_u **arg, typval_T *rettv, int evaluate); |
44 | static int eval3(char_u **arg, typval_T *rettv, int evaluate); |
45 | static int eval4(char_u **arg, typval_T *rettv, int evaluate); |
46 | static int eval5(char_u **arg, typval_T *rettv, int evaluate); |
47 | static int eval6(char_u **arg, typval_T *rettv, int evaluate, int want_string) FUNC_ATTR_NO_SANITIZE_UNDEFINED; |
48 | static int eval7(char_u **arg, typval_T *rettv, int evaluate, int want_string ); |
49 | static int eval_index(char_u **arg, typval_T *rettv, int evaluate, int verbose ); |
50 | static int get_option_tv(const char **const arg, typval_T *const rettv, const _Bool evaluate) FUNC_ATTR_NONNULL_ARG(1); |
51 | static int get_string_tv(char_u **arg, typval_T *rettv, int evaluate); |
52 | static int get_lit_string_tv(char_u **arg, typval_T *rettv, int evaluate); |
53 | static void partial_free(partial_T *pt); |
54 | static int get_list_tv(char_u **arg, typval_T *rettv, int evaluate); |
55 | static int free_unref_items(int copyID); |
56 | static inline _Bool set_ref_in_fmark(fmark_T fm, int copyID) FUNC_ATTR_WARN_UNUSED_RESULT; |
57 | static inline _Bool set_ref_list(list_T *list, int copyID) FUNC_ATTR_WARN_UNUSED_RESULT; |
58 | static inline _Bool set_ref_dict(dict_T *dict, int copyID) FUNC_ATTR_WARN_UNUSED_RESULT; |
59 | static _Bool set_ref_in_funccal(funccall_T *fc, int copyID); |
60 | static int dict_get_tv(char_u **arg, typval_T *rettv, int evaluate); |
61 | static int get_function_args(char_u **argp, char_u endchar, garray_T *newargs, int *varargs, _Bool skip); |
62 | static void register_closure(ufunc_T *fp); |
63 | static int get_lambda_tv(char_u **arg, typval_T *rettv, _Bool evaluate); |
64 | static int get_env_tv(char_u **arg, typval_T *rettv, int evaluate); |
65 | static const VimLFuncDef *find_internal_func(const char *const name) FUNC_ATTR_WARN_UNUSED_RESULT FUNC_ATTR_PURE FUNC_ATTR_NONNULL_ALL; |
66 | static char_u *deref_func_name(const char *name, int *lenp, partial_T **const partialp, _Bool no_autoload) FUNC_ATTR_NONNULL_ARG(1, 2); |
67 | static int get_func_tv(char_u *name, int len, typval_T *rettv, char_u **arg, linenr_T firstline, linenr_T lastline, int *doesrange, int evaluate, partial_T *partial, dict_T *selfdict ); |
68 | static char_u *fname_trans_sid(const char_u *const name, char_u *const fname_buf, char_u **const tofree, int *const error) FUNC_ATTR_NONNULL_ALL FUNC_ATTR_WARN_UNUSED_RESULT; |
69 | static void emsg_funcname(char *ermsg, char_u *name); |
70 | static int non_zero_arg(typval_T *argvars); |
71 | static void float_op_wrapper(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
72 | static void api_wrapper(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
73 | static void f_abs(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
74 | static void f_add(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
75 | static void f_and(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
76 | static void f_api_info(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
77 | static void f_append(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
78 | static void f_appendbufline(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
79 | static void f_argc(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
80 | static void f_argidx(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
81 | static void f_arglistid(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
82 | static void get_arglist_as_rettv(aentry_T *arglist, int argcount, typval_T *rettv); |
83 | static void f_argv(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
84 | static void prepare_assert_error(garray_T *gap); |
85 | static void ga_concat_esc(garray_T *gap, char_u *str); |
86 | static void fill_assert_error(garray_T *gap, typval_T *opt_msg_tv, char_u *exp_str, typval_T *exp_tv, typval_T *got_tv, assert_type_T atype); |
87 | static void assert_error(garray_T *gap); |
88 | static void assert_equal_common(typval_T *argvars, assert_type_T atype); |
89 | static void f_assert_beeps(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
90 | static void f_assert_equal(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
91 | static void f_assert_notequal(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
92 | static void f_assert_report(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
93 | static void f_assert_exception(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
94 | static void f_assert_fails(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
95 | static void assert_bool(typval_T *argvars, _Bool is_true); |
96 | static void f_assert_false(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
97 | static void assert_match_common(typval_T *argvars, assert_type_T atype); |
98 | static void f_assert_inrange(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
99 | static void f_assert_match(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
100 | static void f_assert_notmatch(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
101 | static void f_assert_true(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
102 | static void f_atan2(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
103 | static void f_browse(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
104 | static void f_browsedir(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
105 | static buf_T *find_buffer(typval_T *avar); |
106 | static void f_bufadd(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
107 | static void f_bufexists(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
108 | static void f_buflisted(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
109 | static void f_bufload(typval_T *argvars, typval_T *unused, FunPtr fptr); |
110 | static void f_bufloaded(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
111 | static buf_T *tv_get_buf(typval_T *tv, int curtab_only); |
112 | static buf_T *get_buf_arg(typval_T *arg); |
113 | static void f_bufname(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
114 | static void f_bufnr(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
115 | static void buf_win_common(typval_T *argvars, typval_T *rettv, _Bool get_nr); |
116 | static void f_bufwinid(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
117 | static void f_bufwinnr(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
118 | static void f_byte2line(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
119 | static void byteidx(typval_T *argvars, typval_T *rettv, int comp); |
120 | static void f_byteidx(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
121 | static void f_byteidxcomp(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
122 | static void f_call(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
123 | static void f_changenr(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
124 | static void f_chanclose(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
125 | static void f_chansend(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
126 | static void f_char2nr(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
127 | static void f_cindent(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
128 | static void f_clearmatches(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
129 | static void f_col(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
130 | static void f_complete(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
131 | static void f_complete_add(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
132 | static void f_complete_check(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
133 | static void f_complete_info(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
134 | static void f_confirm(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
135 | static void f_copy(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
136 | static void f_count(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
137 | static void f_cscope_connection(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
138 | static void f_ctxget(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
139 | static void f_ctxpop(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
140 | static void f_ctxpush(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
141 | static void f_ctxset(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
142 | static void f_ctxsize(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
143 | static void f_cursor(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
144 | static void f_deepcopy(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
145 | static void f_delete(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
146 | static void f_dictwatcheradd(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
147 | static void f_dictwatcherdel(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
148 | static void f_deletebufline(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
149 | static void f_did_filetype(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
150 | static void f_diff_filler(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
151 | static void f_diff_hlID(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
152 | static void f_empty(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
153 | static void f_environ(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
154 | static void f_escape(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
155 | static void f_getenv(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
156 | static void f_eval(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
157 | static void f_eventhandler(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
158 | static void f_executable(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
159 | static char_u *get_list_line(int c, void *cookie, int indent); |
160 | static void f_execute(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
161 | static void f_exepath(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
162 | static void f_exists(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
163 | static void f_expand(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
164 | static void (typval_T *argvars, typval_T *rettv, FunPtr fptr); |
165 | static void f_extend(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
166 | static void f_feedkeys(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
167 | static void f_filereadable(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
168 | static void f_filewritable(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
169 | static void findfilendir(typval_T *argvars, typval_T *rettv, int find_what); |
170 | static void filter_map(typval_T *argvars, typval_T *rettv, int map); |
171 | static int filter_map_one(typval_T *tv, typval_T *expr, int map, int *remp) FUNC_ATTR_NONNULL_ARG(1, 2); |
172 | static void f_filter(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
173 | static void f_finddir(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
174 | static void f_findfile(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
175 | static void f_float2nr(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
176 | static void f_fmod(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
177 | static void f_fnameescape(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
178 | static void f_fnamemodify(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
179 | static void foldclosed_both(typval_T *argvars, typval_T *rettv, int end); |
180 | static void f_foldclosed(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
181 | static void f_foldclosedend(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
182 | static void f_foldlevel(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
183 | static void f_foldtext(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
184 | static void f_foldtextresult(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
185 | static void f_foreground(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
186 | static void common_function(typval_T *argvars, typval_T *rettv, _Bool is_funcref, FunPtr fptr); |
187 | static void f_funcref(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
188 | static void f_function(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
189 | static void f_garbagecollect(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
190 | static void f_get(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
191 | static dict_T *get_buffer_info(buf_T *buf); |
192 | static void f_getbufinfo(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
193 | static void get_buffer_lines(buf_T *buf, linenr_T start, linenr_T end, int retlist, typval_T *rettv); |
194 | static linenr_T tv_get_lnum_buf(const typval_T *const tv, const buf_T *const buf) FUNC_ATTR_NONNULL_ARG(1) FUNC_ATTR_WARN_UNUSED_RESULT; |
195 | static void f_getbufline(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
196 | static void f_getbufvar(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
197 | static void f_getchangelist(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
198 | static void f_getchar(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
199 | static void f_getcharmod(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
200 | static void f_getcharsearch(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
201 | static void f_getcmdline(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
202 | static void f_getcmdpos(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
203 | static void f_getcmdtype(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
204 | static void f_getcmdwintype(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
205 | static void f_getcompletion(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
206 | static void f_getcwd(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
207 | static void f_getfontname(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
208 | static void f_getfperm(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
209 | static void f_getfsize(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
210 | static void f_getftime(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
211 | static void f_getftype(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
212 | static void f_getjumplist(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
213 | static void f_getline(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
214 | static void get_qf_loc_list(int is_qf, win_T *wp, typval_T *what_arg, typval_T *rettv); |
215 | static void f_getloclist(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
216 | static void f_getmatches(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
217 | static void f_getpid(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
218 | static void getpos_both(typval_T *argvars, typval_T *rettv, _Bool getcurpos); |
219 | static void f_getcurpos(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
220 | static void f_getpos(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
221 | static void f_getqflist(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
222 | static void f_getreg(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
223 | static void f_getregtype(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
224 | static dict_T *get_tabpage_info(tabpage_T *tp, int tp_idx); |
225 | static void f_gettabinfo(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
226 | static void f_gettabvar(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
227 | static void f_gettabwinvar(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
228 | static void f_gettagstack(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
229 | static dict_T *get_win_info(win_T *wp, int16_t tpnr, int16_t winnr); |
230 | static void f_getwininfo(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
231 | static void dummy_timer_due_cb(TimeWatcher *tw, void *data); |
232 | static void dummy_timer_close_cb(TimeWatcher *tw, void *data); |
233 | static void f_wait(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
234 | static void f_win_screenpos(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
235 | static void f_getwinpos(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
236 | static void f_getwinposx(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
237 | static void f_getwinposy(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
238 | static win_T *find_win_by_nr(typval_T *vp, tabpage_T *tp ); |
239 | static win_T *find_tabwin(typval_T *wvp, typval_T *tvp); |
240 | static void f_getwinvar(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
241 | static void getwinvar(typval_T *argvars, typval_T *rettv, int off ); |
242 | static void f_glob(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
243 | static void f_globpath(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
244 | static void f_glob2regpat(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
245 | static void f_has(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
246 | static void f_has_key(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
247 | static void f_haslocaldir(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
248 | static void f_hasmapto(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
249 | static void f_histadd(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
250 | static void f_histdel(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
251 | static void f_histget(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
252 | static void f_histnr(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
253 | static void f_hlID(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
254 | static void f_hlexists(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
255 | static void f_hostname(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
256 | static void f_iconv(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
257 | static void f_indent(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
258 | static void f_index(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
259 | static void f_input(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
260 | static void f_inputdialog(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
261 | static void f_inputlist(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
262 | static void f_inputrestore(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
263 | static void f_inputsave(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
264 | static void f_inputsecret(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
265 | static void f_insert(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
266 | static void f_invert(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
267 | static void f_isdirectory(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
268 | static void f_islocked(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
269 | static void f_isinf(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
270 | static void f_isnan(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
271 | static void dict_list(typval_T *const tv, typval_T *const rettv, const DictListType what); |
272 | static void f_id(typval_T *argvars, typval_T *rettv, FunPtr fptr) FUNC_ATTR_NONNULL_ALL; |
273 | static void f_items(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
274 | static void f_jobpid(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
275 | static void f_jobresize(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
276 | static char **tv_to_argv(typval_T *cmd_tv, const char **cmd, _Bool *executable); |
277 | static void f_jobstart(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
278 | static void f_jobstop(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
279 | static void f_jobwait(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
280 | static void f_join(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
281 | static void f_json_decode(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
282 | static void f_json_encode(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
283 | static void f_keys(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
284 | static void f_last_buffer_nr(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
285 | static void f_len(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
286 | static void libcall_common(typval_T *argvars, typval_T *rettv, int out_type); |
287 | static void f_libcall(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
288 | static void f_libcallnr(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
289 | static void f_line(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
290 | static void f_line2byte(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
291 | static void f_lispindent(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
292 | static void f_localtime(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
293 | static void get_maparg(typval_T *argvars, typval_T *rettv, int exact); |
294 | static void f_luaeval(typval_T *argvars, typval_T *rettv, FunPtr fptr) FUNC_ATTR_NONNULL_ALL; |
295 | static void f_map(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
296 | static void f_maparg(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
297 | static void f_mapcheck(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
298 | static void find_some_match(typval_T *const argvars, typval_T *const rettv, const SomeMatchType type); |
299 | static void f_match(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
300 | static int matchadd_dict_arg(typval_T *tv, const char **conceal_char, win_T **win); |
301 | static void f_matchadd(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
302 | static void f_matchaddpos(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
303 | static void f_matcharg(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
304 | static void f_matchdelete(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
305 | static void f_matchend(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
306 | static void f_matchlist(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
307 | static void f_matchstr(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
308 | static void f_matchstrpos(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
309 | static void max_min(const typval_T *const tv, typval_T *const rettv, const _Bool domax) FUNC_ATTR_NONNULL_ALL; |
310 | static void f_max(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
311 | static void f_min(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
312 | static void f_mkdir(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
313 | static void f_mode(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
314 | static void f_msgpackdump(typval_T *argvars, typval_T *rettv, FunPtr fptr) FUNC_ATTR_NONNULL_ALL; |
315 | static void f_msgpackparse(typval_T *argvars, typval_T *rettv, FunPtr fptr) FUNC_ATTR_NONNULL_ALL; |
316 | static void f_nextnonblank(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
317 | static void f_nr2char(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
318 | static void f_or(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
319 | static void f_pathshorten(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
320 | static void f_pow(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
321 | static void f_prevnonblank(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
322 | static void f_printf(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
323 | static void f_pumvisible(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
324 | static void f_pyeval(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
325 | static void f_py3eval(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
326 | static void f_pyxeval(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
327 | static void f_range(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
328 | static void f_readfile(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
329 | static void return_register(int regname, typval_T *rettv); |
330 | static void f_reg_executing(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
331 | static void f_reg_recording(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
332 | static int list2proftime(typval_T *arg, proftime_T *tm) FUNC_ATTR_NONNULL_ALL; |
333 | static void f_reltime(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
334 | static void f_reltimestr(typval_T *argvars, typval_T *rettv, FunPtr fptr) FUNC_ATTR_NONNULL_ALL; |
335 | static void f_remove(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
336 | static void f_rename(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
337 | static void f_repeat(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
338 | static void f_resolve(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
339 | static void f_reverse(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
340 | static int get_search_arg(typval_T *varp, int *flagsp); |
341 | static int search_cmn(typval_T *argvars, pos_T *match_pos, int *flagsp); |
342 | static void f_rpcnotify(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
343 | static void f_rpcrequest(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
344 | static void f_rpcstart(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
345 | static void f_rpcstop(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
346 | static void screenchar_adjust_grid(ScreenGrid **grid, int *row, int *col); |
347 | static void f_screenattr(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
348 | static void f_screenchar(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
349 | static void f_screencol(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
350 | static void f_screenpos(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
351 | static void f_screenrow(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
352 | static void f_search(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
353 | static void f_searchdecl(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
354 | static int searchpair_cmn(typval_T *argvars, pos_T *match_pos); |
355 | static void f_searchpair(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
356 | static void f_searchpairpos(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
357 | static void f_searchpos(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
358 | static void f_serverlist(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
359 | static void f_serverstart(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
360 | static void f_serverstop(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
361 | static void set_buffer_lines(buf_T *buf, linenr_T lnum_arg, _Bool append, const typval_T *lines, typval_T *rettv) FUNC_ATTR_NONNULL_ARG(4, 5); |
362 | static void f_setbufline(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
363 | static void f_setbufvar(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
364 | static void f_setcharsearch(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
365 | static void f_setcmdpos(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
366 | static void f_setenv(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
367 | static void f_setfperm(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
368 | static void f_setline(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
369 | static void set_qf_ll_list(win_T *wp, typval_T *args, typval_T *rettv) FUNC_ATTR_NONNULL_ARG(2, 3); |
370 | static void f_setloclist(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
371 | static void f_setmatches(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
372 | static void f_setpos(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
373 | static void f_setqflist(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
374 | static void f_setreg(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
375 | static void f_settabvar(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
376 | static void f_settabwinvar(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
377 | static void f_settagstack(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
378 | static void f_setwinvar(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
379 | static void setwinvar(typval_T *argvars, typval_T *rettv, int off); |
380 | static void f_sha256(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
381 | static void f_shellescape(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
382 | static void f_shiftwidth(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
383 | static void f_sign_define(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
384 | static void f_sign_getdefined(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
385 | static void f_sign_getplaced(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
386 | static void f_sign_jump(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
387 | static void f_sign_place(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
388 | static void f_sign_undefine(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
389 | static void f_sign_unplace(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
390 | static void f_simplify(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
391 | static void f_sockconnect(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
392 | static int item_compare(const void *s1, const void *s2, _Bool keep_zero); |
393 | static int item_compare_keeping_zero(const void *s1, const void *s2); |
394 | static int item_compare_not_keeping_zero(const void *s1, const void *s2); |
395 | static int item_compare2(const void *s1, const void *s2, _Bool keep_zero); |
396 | static int item_compare2_keeping_zero(const void *s1, const void *s2); |
397 | static int item_compare2_not_keeping_zero(const void *s1, const void *s2); |
398 | static void do_sort_uniq(typval_T *argvars, typval_T *rettv, _Bool sort); |
399 | static void f_sort(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
400 | static void f_stdioopen(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
401 | static void f_uniq(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
402 | static void f_reltimefloat(typval_T *argvars, typval_T *rettv, FunPtr fptr) FUNC_ATTR_NONNULL_ALL; |
403 | static void f_soundfold(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
404 | static void f_spellbadword(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
405 | static void f_spellsuggest(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
406 | static void f_split(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
407 | static void get_xdg_var_list(const XDGVarType xdg, typval_T *rettv) FUNC_ATTR_NONNULL_ALL; |
408 | static void f_stdpath(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
409 | static void f_str2float(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
410 | static void f_str2nr(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
411 | static void f_strftime(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
412 | static void f_strgetchar(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
413 | static void f_stridx(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
414 | static void f_string(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
415 | static void f_strlen(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
416 | static void f_strchars(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
417 | static void f_strdisplaywidth(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
418 | static void f_strwidth(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
419 | static void f_strcharpart(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
420 | static void f_strpart(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
421 | static void f_strridx(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
422 | static void f_strtrans(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
423 | static void f_submatch(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
424 | static void f_substitute(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
425 | static void f_swapinfo(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
426 | static void f_swapname(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
427 | static void f_synID(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
428 | static void f_synIDattr(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
429 | static void f_synIDtrans(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
430 | static void f_synconcealed(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
431 | static void f_synstack(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
432 | static list_T *string_to_list(const char *str, size_t len, const _Bool keepempty); |
433 | static void get_system_output_as_rettv(typval_T *argvars, typval_T *rettv, _Bool retlist); |
434 | static void f_system(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
435 | static void f_systemlist(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
436 | static void f_tabpagebuflist(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
437 | static void f_tabpagenr(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
438 | static int get_winnr(tabpage_T *tp, typval_T *argvar); |
439 | static void f_tabpagewinnr(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
440 | static void f_tagfiles(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
441 | static void f_taglist(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
442 | static void f_tempname(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
443 | static void f_termopen(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
444 | static void f_test_garbagecollect_now(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
445 | static void f_test_write_list_log(typval_T *const argvars, typval_T *const rettv, FunPtr fptr); |
446 | static _Bool set_ref_in_callback(Callback *callback, int copyID, ht_stack_T **ht_stack, list_stack_T **list_stack); |
447 | static _Bool set_ref_in_callback_reader(CallbackReader *reader, int copyID, ht_stack_T **ht_stack, list_stack_T **list_stack); |
448 | static void add_timer_info(typval_T *rettv, timer_T *timer); |
449 | static void add_timer_info_all(typval_T *rettv); |
450 | static void f_timer_info(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
451 | static void f_timer_pause(typval_T *argvars, typval_T *unused, FunPtr fptr); |
452 | static void f_timer_start(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
453 | static void f_timer_stop(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
454 | static void f_timer_stopall(typval_T *argvars, typval_T *unused, FunPtr fptr); |
455 | static void timer_due_cb(TimeWatcher *tw, void *data); |
456 | static void timer_stop(timer_T *timer); |
457 | static void timer_close_cb(TimeWatcher *tw, void *data); |
458 | static void timer_decref(timer_T *timer); |
459 | static void timer_stop_all(void); |
460 | static void f_tolower(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
461 | static void f_toupper(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
462 | static void f_tr(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
463 | static void f_trim(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
464 | static void f_type(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
465 | static void f_undofile(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
466 | static void f_undotree(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
467 | static void f_values(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
468 | static void f_virtcol(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
469 | static void f_visualmode(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
470 | static void (typval_T *argvars, typval_T *rettv, FunPtr fptr); |
471 | static void f_win_findbuf(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
472 | static void f_win_getid(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
473 | static void f_win_gotoid(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
474 | static void f_win_id2tabwin(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
475 | static void f_win_id2win(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
476 | static void f_winbufnr(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
477 | static void f_wincol(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
478 | static void f_winheight(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
479 | static void f_winlayout(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
480 | static void f_winline(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
481 | static void f_winnr(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
482 | static void f_winrestcmd(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
483 | static void f_winrestview(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
484 | static void f_winsaveview(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
485 | static _Bool write_list(FileDescriptor *const fp, const list_T *const list, const _Bool binary) FUNC_ATTR_NONNULL_ARG(1); |
486 | static char *save_tv_as_string(typval_T *tv, ptrdiff_t *const len, _Bool endnl) FUNC_ATTR_MALLOC FUNC_ATTR_NONNULL_ALL; |
487 | static void f_winwidth(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
488 | static void f_wordcount(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
489 | static void f_writefile(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
490 | static void f_xor(typval_T *argvars, typval_T *rettv, FunPtr fptr); |
491 | static int get_env_len(const char_u **arg); |
492 | static int get_id_len(const char **const arg); |
493 | static int get_name_len(const char **const arg, char **alias, int evaluate, int verbose); |
494 | static const char_u *find_name_end(const char_u *arg, const char_u **expr_start, const char_u **expr_end, int flags); |
495 | static char_u *make_expanded_name(const char_u *in_start, char_u *expr_start, char_u *expr_end, char_u *in_end); |
496 | static int eval_isnamec(int c); |
497 | static int eval_isnamec1(int c); |
498 | static int get_var_tv(const char *name, int len, typval_T *rettv, dictitem_T **dip, int verbose, int no_autoload ); |
499 | static void check_vars(const char *name, size_t len); |
500 | static int handle_subscript(const char **const arg, typval_T *rettv, int evaluate, int verbose ); |
501 | static dictitem_T *find_var(const char *const name, const size_t name_len, hashtab_T **htp, int no_autoload); |
502 | static dictitem_T *find_var_in_ht(hashtab_T *const ht, int htname, const char *const varname, const size_t varname_len, int no_autoload) FUNC_ATTR_WARN_UNUSED_RESULT FUNC_ATTR_NONNULL_ALL; |
503 | static funccall_T *get_funccal(void); |
504 | static hashtab_T *get_funccal_args_ht(void); |
505 | static hashtab_T *get_funccal_local_ht(void); |
506 | static hashtab_T *find_var_ht_dict(const char *name, const size_t name_len, const char **varname, dict_T **d); |
507 | static hashtab_T *find_var_ht(const char *name, const size_t name_len, const char **varname); |
508 | static void vars_clear_ext(hashtab_T *ht, int free_val); |
509 | static void delete_var(hashtab_T *ht, hashitem_T *hi); |
510 | static void list_one_var(dictitem_T *v, const char *prefix, int *first); |
511 | static void list_one_var_a(const char *prefix, const char *name, const ptrdiff_t name_len, const int type, const char *string, int *first); |
512 | static void set_var(const char *name, const size_t name_len, typval_T *const tv, const _Bool copy) FUNC_ATTR_NONNULL_ALL; |
513 | static void set_var_const(const char *name, const size_t name_len, typval_T *const tv, const _Bool copy, const _Bool is_const) FUNC_ATTR_NONNULL_ALL; |
514 | static _Bool var_check_fixed(const int flags, const char *name, size_t name_len) FUNC_ATTR_WARN_UNUSED_RESULT FUNC_ATTR_NONNULL_ALL; |
515 | static const char *find_option_end(const char **const arg, int *const opt_flags); |
516 | static char_u *trans_function_name(char_u **pp, int skip, int flags, funcdict_T *fdp, partial_T **partial ); |
517 | static int eval_fname_script(const char *const p); |
518 | static inline _Bool eval_fname_sid(const char *const name) FUNC_ATTR_PURE FUNC_ATTR_ALWAYS_INLINE FUNC_ATTR_WARN_UNUSED_RESULT FUNC_ATTR_NONNULL_ALL; |
519 | static void list_func_head(ufunc_T *fp, int indent, _Bool force); |
520 | static ufunc_T *find_func(const char_u *name); |
521 | static _Bool function_exists(const char *const name, _Bool no_deref); |
522 | static _Bool builtin_function(const char *name, int len); |
523 | static void func_do_profile(ufunc_T *fp); |
524 | static void prof_sort_list(FILE *fd, ufunc_T **sorttab, int st_len, char *title, int prefer_self ); |
525 | static void prof_func_line(FILE *fd, int count, proftime_T *total, proftime_T *self, int prefer_self ); |
526 | static int prof_total_cmp(const void *s1, const void *s2); |
527 | static int prof_self_cmp(const void *s1, const void *s2); |
528 | static _Bool script_autoload(const char *const name, const size_t name_len, const _Bool reload); |
529 | static char *autoload_name(const char *const name, const size_t name_len) FUNC_ATTR_MALLOC FUNC_ATTR_WARN_UNUSED_RESULT; |
530 | static void cat_func_name(char_u *buf, ufunc_T *fp); |
531 | static _Bool func_name_refcount(char_u *name); |
532 | static _Bool func_remove(ufunc_T *fp); |
533 | static void func_clear_items(ufunc_T *fp); |
534 | static void func_clear(ufunc_T *fp, _Bool force); |
535 | static void func_free(ufunc_T *fp); |
536 | static void func_clear_free(ufunc_T *fp, _Bool force); |
537 | static inline _Bool fc_referenced(const funccall_T *const fc) FUNC_ATTR_ALWAYS_INLINE FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT FUNC_ATTR_NONNULL_ALL; |
538 | static void funccal_unref(funccall_T *fc, ufunc_T *fp, _Bool force); |
539 | static int can_free_funccal(funccall_T *fc, int copyID); |
540 | static void free_funccal(funccall_T *fc, int free_val ); |
541 | static void cleanup_function_call(funccall_T *fc); |
542 | static void add_nr_var(dict_T *dp, dictitem_T *v, char *name, varnumber_T nr); |
543 | static var_flavour_T var_flavour(char_u *varname); |
544 | static inline _Bool common_job_callbacks(dict_T *vopts, CallbackReader *on_stdout, CallbackReader *on_stderr, Callback *on_exit); |
545 | static Channel *find_job(uint64_t id, _Bool show_error); |
546 | static void script_host_eval(char *name, typval_T *argvars, typval_T *rettv); |
547 | #include "nvim/func_attr.h" |
548 | |