Mercurial > vim
annotate src/typval.c @ 32513:57e589d18e7d v9.0.1588
patch 9.0.1588: Incsearch not triggered when pasting clipboard register
Commit: https://github.com/vim/vim/commit/9cf6ab133227ac7e9169941752293bb7178d8e38
Author: K.Takata <kentkt@csc.jp>
Date: Mon May 29 16:08:08 2023 +0100
patch 9.0.1588: Incsearch not triggered when pasting clipboard register
Problem: Incsearch not triggered when pasting clipboard register on the
command line.
Solution: Also set "literally" when using a clipboard register. (Ken Takata,
closes #12460)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Mon, 29 May 2023 17:15:04 +0200 |
parents | ec0d5bd9083c |
children | e4851934751a |
rev | line source |
---|---|
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1 /* vi:set ts=8 sts=4 sw=4 noet: |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2 * |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3 * VIM - Vi IMproved by Bram Moolenaar |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
4 * |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
5 * Do ":help uganda" in Vim to read copying and usage conditions. |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
6 * Do ":help credits" in Vim to see a list of people who contributed. |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
7 * See README.txt for an overview of the Vim source code. |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
8 */ |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
9 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
10 /* |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
11 * typval.c: functions that deal with a typval |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
12 */ |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
13 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
14 #include "vim.h" |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
15 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
16 #if defined(FEAT_EVAL) || defined(PROTO) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
17 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
18 /* |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
19 * Allocate memory for a variable type-value, and make it empty (0 or NULL |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
20 * value). |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
21 */ |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
22 typval_T * |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
23 alloc_tv(void) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
24 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
25 return ALLOC_CLEAR_ONE(typval_T); |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
26 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
27 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
28 /* |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
29 * Allocate memory for a variable type-value, and assign a string to it. |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
30 * The string "s" must have been allocated, it is consumed. |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
31 * Return NULL for out of memory, the variable otherwise. |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
32 */ |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
33 typval_T * |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
34 alloc_string_tv(char_u *s) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
35 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
36 typval_T *rettv; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
37 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
38 rettv = alloc_tv(); |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
39 if (rettv != NULL) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
40 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
41 rettv->v_type = VAR_STRING; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
42 rettv->vval.v_string = s; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
43 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
44 else |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
45 vim_free(s); |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
46 return rettv; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
47 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
48 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
49 /* |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
50 * Free the memory for a variable type-value. |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
51 */ |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
52 void |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
53 free_tv(typval_T *varp) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
54 { |
31825
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
55 if (varp == NULL) |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
56 return; |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
57 |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
58 switch (varp->v_type) |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
59 { |
31825
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
60 case VAR_FUNC: |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
61 func_unref(varp->vval.v_string); |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
62 // FALLTHROUGH |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
63 case VAR_STRING: |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
64 vim_free(varp->vval.v_string); |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
65 break; |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
66 case VAR_PARTIAL: |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
67 partial_unref(varp->vval.v_partial); |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
68 break; |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
69 case VAR_BLOB: |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
70 blob_unref(varp->vval.v_blob); |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
71 break; |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
72 case VAR_LIST: |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
73 list_unref(varp->vval.v_list); |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
74 break; |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
75 case VAR_DICT: |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
76 dict_unref(varp->vval.v_dict); |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
77 break; |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
78 case VAR_JOB: |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
79 #ifdef FEAT_JOB_CHANNEL |
31825
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
80 job_unref(varp->vval.v_job); |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
81 break; |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
82 #endif |
31825
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
83 case VAR_CHANNEL: |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
84 #ifdef FEAT_JOB_CHANNEL |
31825
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
85 channel_unref(varp->vval.v_channel); |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
86 break; |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
87 #endif |
31825
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
88 case VAR_CLASS: |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
89 class_unref(varp->vval.v_class); |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
90 break; |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
91 case VAR_OBJECT: |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
92 object_unref(varp->vval.v_object); |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
93 break; |
31396
307f68a41b03
patch 9.0.1031: Vim9 class is not implemented yet
Bram Moolenaar <Bram@vim.org>
parents:
31289
diff
changeset
|
94 |
31825
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
95 case VAR_NUMBER: |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
96 case VAR_FLOAT: |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
97 case VAR_ANY: |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
98 case VAR_UNKNOWN: |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
99 case VAR_VOID: |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
100 case VAR_BOOL: |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
101 case VAR_SPECIAL: |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
102 case VAR_INSTR: |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
103 break; |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
104 } |
31825
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
105 vim_free(varp); |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
106 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
107 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
108 /* |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
109 * Free the memory for a variable value and set the value to NULL or 0. |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
110 */ |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
111 void |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
112 clear_tv(typval_T *varp) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
113 { |
31825
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
114 if (varp == NULL) |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
115 return; |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
116 |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
117 switch (varp->v_type) |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
118 { |
31825
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
119 case VAR_FUNC: |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
120 func_unref(varp->vval.v_string); |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
121 // FALLTHROUGH |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
122 case VAR_STRING: |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
123 VIM_CLEAR(varp->vval.v_string); |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
124 break; |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
125 case VAR_PARTIAL: |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
126 partial_unref(varp->vval.v_partial); |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
127 varp->vval.v_partial = NULL; |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
128 break; |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
129 case VAR_BLOB: |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
130 blob_unref(varp->vval.v_blob); |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
131 varp->vval.v_blob = NULL; |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
132 break; |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
133 case VAR_LIST: |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
134 list_unref(varp->vval.v_list); |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
135 varp->vval.v_list = NULL; |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
136 break; |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
137 case VAR_DICT: |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
138 dict_unref(varp->vval.v_dict); |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
139 varp->vval.v_dict = NULL; |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
140 break; |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
141 case VAR_NUMBER: |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
142 case VAR_BOOL: |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
143 case VAR_SPECIAL: |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
144 varp->vval.v_number = 0; |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
145 break; |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
146 case VAR_FLOAT: |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
147 varp->vval.v_float = 0.0; |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
148 break; |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
149 case VAR_JOB: |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
150 #ifdef FEAT_JOB_CHANNEL |
31825
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
151 job_unref(varp->vval.v_job); |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
152 varp->vval.v_job = NULL; |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
153 #endif |
31825
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
154 break; |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
155 case VAR_CHANNEL: |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
156 #ifdef FEAT_JOB_CHANNEL |
31825
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
157 channel_unref(varp->vval.v_channel); |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
158 varp->vval.v_channel = NULL; |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
159 #endif |
31825
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
160 break; |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
161 case VAR_INSTR: |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
162 VIM_CLEAR(varp->vval.v_instr); |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
163 break; |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
164 case VAR_CLASS: |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
165 class_unref(varp->vval.v_class); |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
166 varp->vval.v_class = NULL; |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
167 break; |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
168 case VAR_OBJECT: |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
169 object_unref(varp->vval.v_object); |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
170 varp->vval.v_object = NULL; |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
171 break; |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
172 case VAR_UNKNOWN: |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
173 case VAR_ANY: |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
174 case VAR_VOID: |
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
175 break; |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
176 } |
31825
0d27ddce621d
patch 9.0.1245: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31604
diff
changeset
|
177 varp->v_lock = 0; |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
178 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
179 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
180 /* |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
181 * Set the value of a variable to NULL without freeing items. |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
182 */ |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
183 void |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
184 init_tv(typval_T *varp) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
185 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
186 if (varp != NULL) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
187 CLEAR_POINTER(varp); |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
188 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
189 |
21851
727820154b1a
patch 8.2.1475: Vim9: can't use v:true for option flags
Bram Moolenaar <Bram@vim.org>
parents:
21831
diff
changeset
|
190 static varnumber_T |
32130
ec0d5bd9083c
patch 9.0.1396: sort(list, 'N') does not work in Vim9 script context
Bram Moolenaar <Bram@vim.org>
parents:
32098
diff
changeset
|
191 tv_get_bool_or_number_chk( |
ec0d5bd9083c
patch 9.0.1396: sort(list, 'N') does not work in Vim9 script context
Bram Moolenaar <Bram@vim.org>
parents:
32098
diff
changeset
|
192 typval_T *varp, |
ec0d5bd9083c
patch 9.0.1396: sort(list, 'N') does not work in Vim9 script context
Bram Moolenaar <Bram@vim.org>
parents:
32098
diff
changeset
|
193 int *denote, |
ec0d5bd9083c
patch 9.0.1396: sort(list, 'N') does not work in Vim9 script context
Bram Moolenaar <Bram@vim.org>
parents:
32098
diff
changeset
|
194 int want_bool, |
ec0d5bd9083c
patch 9.0.1396: sort(list, 'N') does not work in Vim9 script context
Bram Moolenaar <Bram@vim.org>
parents:
32098
diff
changeset
|
195 int vim9_string_error) // in Vim9 using a string is an error |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
196 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
197 varnumber_T n = 0L; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
198 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
199 switch (varp->v_type) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
200 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
201 case VAR_NUMBER: |
22405
0ef3ae4ec70e
patch 8.2.1751: using 2 where bool is expected may throw an error
Bram Moolenaar <Bram@vim.org>
parents:
22298
diff
changeset
|
202 if (in_vim9script() && want_bool && varp->vval.v_number != 0 |
21913
9fc27a955f00
patch 8.2.1506: Vim9: no error when using a number other than 0 or 1 as bool
Bram Moolenaar <Bram@vim.org>
parents:
21861
diff
changeset
|
203 && varp->vval.v_number != 1) |
9fc27a955f00
patch 8.2.1506: Vim9: no error when using a number other than 0 or 1 as bool
Bram Moolenaar <Bram@vim.org>
parents:
21861
diff
changeset
|
204 { |
9fc27a955f00
patch 8.2.1506: Vim9: no error when using a number other than 0 or 1 as bool
Bram Moolenaar <Bram@vim.org>
parents:
21861
diff
changeset
|
205 semsg(_(e_using_number_as_bool_nr), varp->vval.v_number); |
9fc27a955f00
patch 8.2.1506: Vim9: no error when using a number other than 0 or 1 as bool
Bram Moolenaar <Bram@vim.org>
parents:
21861
diff
changeset
|
206 break; |
9fc27a955f00
patch 8.2.1506: Vim9: no error when using a number other than 0 or 1 as bool
Bram Moolenaar <Bram@vim.org>
parents:
21861
diff
changeset
|
207 } |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
208 return varp->vval.v_number; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
209 case VAR_FLOAT: |
26962
85866e069c24
patch 8.2.4010: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26958
diff
changeset
|
210 emsg(_(e_using_float_as_number)); |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
211 break; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
212 case VAR_FUNC: |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
213 case VAR_PARTIAL: |
26952
b34ddbca305c
patch 8.2.4005: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26948
diff
changeset
|
214 emsg(_(e_using_funcref_as_number)); |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
215 break; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
216 case VAR_STRING: |
32130
ec0d5bd9083c
patch 9.0.1396: sort(list, 'N') does not work in Vim9 script context
Bram Moolenaar <Bram@vim.org>
parents:
32098
diff
changeset
|
217 if (vim9_string_error && in_vim9script()) |
21831
d8422de73113
patch 8.2.1465: Vim9: subscript not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
21425
diff
changeset
|
218 { |
22860
53acb89ec9f2
patch 8.2.1977: Vim9: error for using a string in a condition is confusing
Bram Moolenaar <Bram@vim.org>
parents:
22405
diff
changeset
|
219 emsg_using_string_as(varp, !want_bool); |
21831
d8422de73113
patch 8.2.1465: Vim9: subscript not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
21425
diff
changeset
|
220 break; |
d8422de73113
patch 8.2.1465: Vim9: subscript not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
21425
diff
changeset
|
221 } |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
222 if (varp->vval.v_string != NULL) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
223 vim_str2nr(varp->vval.v_string, NULL, NULL, |
32098
39f4126d2a0d
patch 9.0.1380: CTRL-X on 2**64 subtracts two
Bram Moolenaar <Bram@vim.org>
parents:
31825
diff
changeset
|
224 STR2NR_ALL, &n, NULL, 0, FALSE, NULL); |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
225 return n; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
226 case VAR_LIST: |
26958
d92e0d85923f
patch 8.2.4008: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26952
diff
changeset
|
227 emsg(_(e_using_list_as_number)); |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
228 break; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
229 case VAR_DICT: |
26952
b34ddbca305c
patch 8.2.4005: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26948
diff
changeset
|
230 emsg(_(e_using_dictionary_as_number)); |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
231 break; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
232 case VAR_BOOL: |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
233 case VAR_SPECIAL: |
21851
727820154b1a
patch 8.2.1475: Vim9: can't use v:true for option flags
Bram Moolenaar <Bram@vim.org>
parents:
21831
diff
changeset
|
234 if (!want_bool && in_vim9script()) |
21831
d8422de73113
patch 8.2.1465: Vim9: subscript not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
21425
diff
changeset
|
235 { |
22930
84567584951f
patch 8.2.2012: Vim9: confusing error message when using bool wrongly
Bram Moolenaar <Bram@vim.org>
parents:
22860
diff
changeset
|
236 if (varp->v_type == VAR_BOOL) |
84567584951f
patch 8.2.2012: Vim9: confusing error message when using bool wrongly
Bram Moolenaar <Bram@vim.org>
parents:
22860
diff
changeset
|
237 emsg(_(e_using_bool_as_number)); |
84567584951f
patch 8.2.2012: Vim9: confusing error message when using bool wrongly
Bram Moolenaar <Bram@vim.org>
parents:
22860
diff
changeset
|
238 else |
26948
51ddf6740ac6
patch 8.2.4003: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26913
diff
changeset
|
239 emsg(_(e_using_special_as_number)); |
21831
d8422de73113
patch 8.2.1465: Vim9: subscript not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
21425
diff
changeset
|
240 break; |
d8422de73113
patch 8.2.1465: Vim9: subscript not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
21425
diff
changeset
|
241 } |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
242 return varp->vval.v_number == VVAL_TRUE ? 1 : 0; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
243 case VAR_JOB: |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
244 #ifdef FEAT_JOB_CHANNEL |
26966
ac75c145f0a9
patch 8.2.4012: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
245 emsg(_(e_using_job_as_number)); |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
246 break; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
247 #endif |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
248 case VAR_CHANNEL: |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
249 #ifdef FEAT_JOB_CHANNEL |
26966
ac75c145f0a9
patch 8.2.4012: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
250 emsg(_(e_using_channel_as_number)); |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
251 break; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
252 #endif |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
253 case VAR_BLOB: |
26966
ac75c145f0a9
patch 8.2.4012: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
254 emsg(_(e_using_blob_as_number)); |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
255 break; |
31396
307f68a41b03
patch 9.0.1031: Vim9 class is not implemented yet
Bram Moolenaar <Bram@vim.org>
parents:
31289
diff
changeset
|
256 case VAR_CLASS: |
307f68a41b03
patch 9.0.1031: Vim9 class is not implemented yet
Bram Moolenaar <Bram@vim.org>
parents:
31289
diff
changeset
|
257 emsg(_(e_using_class_as_number)); |
307f68a41b03
patch 9.0.1031: Vim9 class is not implemented yet
Bram Moolenaar <Bram@vim.org>
parents:
31289
diff
changeset
|
258 break; |
307f68a41b03
patch 9.0.1031: Vim9 class is not implemented yet
Bram Moolenaar <Bram@vim.org>
parents:
31289
diff
changeset
|
259 case VAR_OBJECT: |
307f68a41b03
patch 9.0.1031: Vim9 class is not implemented yet
Bram Moolenaar <Bram@vim.org>
parents:
31289
diff
changeset
|
260 emsg(_(e_using_object_as_number)); |
307f68a41b03
patch 9.0.1031: Vim9 class is not implemented yet
Bram Moolenaar <Bram@vim.org>
parents:
31289
diff
changeset
|
261 break; |
24936
345619f35112
patch 8.2.3005: Vim9: using a void value does not give a proper error message
Bram Moolenaar <Bram@vim.org>
parents:
24820
diff
changeset
|
262 case VAR_VOID: |
345619f35112
patch 8.2.3005: Vim9: using a void value does not give a proper error message
Bram Moolenaar <Bram@vim.org>
parents:
24820
diff
changeset
|
263 emsg(_(e_cannot_use_void_value)); |
345619f35112
patch 8.2.3005: Vim9: using a void value does not give a proper error message
Bram Moolenaar <Bram@vim.org>
parents:
24820
diff
changeset
|
264 break; |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
265 case VAR_UNKNOWN: |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
266 case VAR_ANY: |
24606
a4fda40e0bb9
patch 8.2.2842: Vim9: skip argument to searchpair() is not compiled
Bram Moolenaar <Bram@vim.org>
parents:
24424
diff
changeset
|
267 case VAR_INSTR: |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
268 internal_error_no_abort("tv_get_number(UNKNOWN)"); |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
269 break; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
270 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
271 if (denote == NULL) // useful for values that must be unsigned |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
272 n = -1; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
273 else |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
274 *denote = TRUE; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
275 return n; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
276 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
277 |
21851
727820154b1a
patch 8.2.1475: Vim9: can't use v:true for option flags
Bram Moolenaar <Bram@vim.org>
parents:
21831
diff
changeset
|
278 /* |
727820154b1a
patch 8.2.1475: Vim9: can't use v:true for option flags
Bram Moolenaar <Bram@vim.org>
parents:
21831
diff
changeset
|
279 * Get the number value of a variable. |
727820154b1a
patch 8.2.1475: Vim9: can't use v:true for option flags
Bram Moolenaar <Bram@vim.org>
parents:
21831
diff
changeset
|
280 * If it is a String variable, uses vim_str2nr(). |
727820154b1a
patch 8.2.1475: Vim9: can't use v:true for option flags
Bram Moolenaar <Bram@vim.org>
parents:
21831
diff
changeset
|
281 * For incompatible types, return 0. |
727820154b1a
patch 8.2.1475: Vim9: can't use v:true for option flags
Bram Moolenaar <Bram@vim.org>
parents:
21831
diff
changeset
|
282 * tv_get_number_chk() is similar to tv_get_number(), but informs the |
727820154b1a
patch 8.2.1475: Vim9: can't use v:true for option flags
Bram Moolenaar <Bram@vim.org>
parents:
21831
diff
changeset
|
283 * caller of incompatible types: it sets *denote to TRUE if "denote" |
727820154b1a
patch 8.2.1475: Vim9: can't use v:true for option flags
Bram Moolenaar <Bram@vim.org>
parents:
21831
diff
changeset
|
284 * is not NULL or returns -1 otherwise. |
727820154b1a
patch 8.2.1475: Vim9: can't use v:true for option flags
Bram Moolenaar <Bram@vim.org>
parents:
21831
diff
changeset
|
285 */ |
727820154b1a
patch 8.2.1475: Vim9: can't use v:true for option flags
Bram Moolenaar <Bram@vim.org>
parents:
21831
diff
changeset
|
286 varnumber_T |
727820154b1a
patch 8.2.1475: Vim9: can't use v:true for option flags
Bram Moolenaar <Bram@vim.org>
parents:
21831
diff
changeset
|
287 tv_get_number(typval_T *varp) |
727820154b1a
patch 8.2.1475: Vim9: can't use v:true for option flags
Bram Moolenaar <Bram@vim.org>
parents:
21831
diff
changeset
|
288 { |
727820154b1a
patch 8.2.1475: Vim9: can't use v:true for option flags
Bram Moolenaar <Bram@vim.org>
parents:
21831
diff
changeset
|
289 int error = FALSE; |
727820154b1a
patch 8.2.1475: Vim9: can't use v:true for option flags
Bram Moolenaar <Bram@vim.org>
parents:
21831
diff
changeset
|
290 |
727820154b1a
patch 8.2.1475: Vim9: can't use v:true for option flags
Bram Moolenaar <Bram@vim.org>
parents:
21831
diff
changeset
|
291 return tv_get_number_chk(varp, &error); // return 0L on error |
727820154b1a
patch 8.2.1475: Vim9: can't use v:true for option flags
Bram Moolenaar <Bram@vim.org>
parents:
21831
diff
changeset
|
292 } |
727820154b1a
patch 8.2.1475: Vim9: can't use v:true for option flags
Bram Moolenaar <Bram@vim.org>
parents:
21831
diff
changeset
|
293 |
32130
ec0d5bd9083c
patch 9.0.1396: sort(list, 'N') does not work in Vim9 script context
Bram Moolenaar <Bram@vim.org>
parents:
32098
diff
changeset
|
294 /* |
ec0d5bd9083c
patch 9.0.1396: sort(list, 'N') does not work in Vim9 script context
Bram Moolenaar <Bram@vim.org>
parents:
32098
diff
changeset
|
295 * Like tv_get_numbe() but in Vim9 script do convert a number in a string to a |
ec0d5bd9083c
patch 9.0.1396: sort(list, 'N') does not work in Vim9 script context
Bram Moolenaar <Bram@vim.org>
parents:
32098
diff
changeset
|
296 * number without giving an error. |
ec0d5bd9083c
patch 9.0.1396: sort(list, 'N') does not work in Vim9 script context
Bram Moolenaar <Bram@vim.org>
parents:
32098
diff
changeset
|
297 */ |
ec0d5bd9083c
patch 9.0.1396: sort(list, 'N') does not work in Vim9 script context
Bram Moolenaar <Bram@vim.org>
parents:
32098
diff
changeset
|
298 varnumber_T |
ec0d5bd9083c
patch 9.0.1396: sort(list, 'N') does not work in Vim9 script context
Bram Moolenaar <Bram@vim.org>
parents:
32098
diff
changeset
|
299 tv_to_number(typval_T *varp) |
ec0d5bd9083c
patch 9.0.1396: sort(list, 'N') does not work in Vim9 script context
Bram Moolenaar <Bram@vim.org>
parents:
32098
diff
changeset
|
300 { |
ec0d5bd9083c
patch 9.0.1396: sort(list, 'N') does not work in Vim9 script context
Bram Moolenaar <Bram@vim.org>
parents:
32098
diff
changeset
|
301 int error = FALSE; |
ec0d5bd9083c
patch 9.0.1396: sort(list, 'N') does not work in Vim9 script context
Bram Moolenaar <Bram@vim.org>
parents:
32098
diff
changeset
|
302 |
ec0d5bd9083c
patch 9.0.1396: sort(list, 'N') does not work in Vim9 script context
Bram Moolenaar <Bram@vim.org>
parents:
32098
diff
changeset
|
303 return tv_get_bool_or_number_chk(varp, &error, FALSE, FALSE); |
ec0d5bd9083c
patch 9.0.1396: sort(list, 'N') does not work in Vim9 script context
Bram Moolenaar <Bram@vim.org>
parents:
32098
diff
changeset
|
304 } |
ec0d5bd9083c
patch 9.0.1396: sort(list, 'N') does not work in Vim9 script context
Bram Moolenaar <Bram@vim.org>
parents:
32098
diff
changeset
|
305 |
21851
727820154b1a
patch 8.2.1475: Vim9: can't use v:true for option flags
Bram Moolenaar <Bram@vim.org>
parents:
21831
diff
changeset
|
306 varnumber_T |
727820154b1a
patch 8.2.1475: Vim9: can't use v:true for option flags
Bram Moolenaar <Bram@vim.org>
parents:
21831
diff
changeset
|
307 tv_get_number_chk(typval_T *varp, int *denote) |
727820154b1a
patch 8.2.1475: Vim9: can't use v:true for option flags
Bram Moolenaar <Bram@vim.org>
parents:
21831
diff
changeset
|
308 { |
32130
ec0d5bd9083c
patch 9.0.1396: sort(list, 'N') does not work in Vim9 script context
Bram Moolenaar <Bram@vim.org>
parents:
32098
diff
changeset
|
309 return tv_get_bool_or_number_chk(varp, denote, FALSE, TRUE); |
21851
727820154b1a
patch 8.2.1475: Vim9: can't use v:true for option flags
Bram Moolenaar <Bram@vim.org>
parents:
21831
diff
changeset
|
310 } |
727820154b1a
patch 8.2.1475: Vim9: can't use v:true for option flags
Bram Moolenaar <Bram@vim.org>
parents:
21831
diff
changeset
|
311 |
727820154b1a
patch 8.2.1475: Vim9: can't use v:true for option flags
Bram Moolenaar <Bram@vim.org>
parents:
21831
diff
changeset
|
312 /* |
727820154b1a
patch 8.2.1475: Vim9: can't use v:true for option flags
Bram Moolenaar <Bram@vim.org>
parents:
21831
diff
changeset
|
313 * Get the boolean value of "varp". This is like tv_get_number_chk(), |
21913
9fc27a955f00
patch 8.2.1506: Vim9: no error when using a number other than 0 or 1 as bool
Bram Moolenaar <Bram@vim.org>
parents:
21861
diff
changeset
|
314 * but in Vim9 script accepts Number (0 and 1) and Bool/Special. |
21851
727820154b1a
patch 8.2.1475: Vim9: can't use v:true for option flags
Bram Moolenaar <Bram@vim.org>
parents:
21831
diff
changeset
|
315 */ |
727820154b1a
patch 8.2.1475: Vim9: can't use v:true for option flags
Bram Moolenaar <Bram@vim.org>
parents:
21831
diff
changeset
|
316 varnumber_T |
727820154b1a
patch 8.2.1475: Vim9: can't use v:true for option flags
Bram Moolenaar <Bram@vim.org>
parents:
21831
diff
changeset
|
317 tv_get_bool(typval_T *varp) |
727820154b1a
patch 8.2.1475: Vim9: can't use v:true for option flags
Bram Moolenaar <Bram@vim.org>
parents:
21831
diff
changeset
|
318 { |
32130
ec0d5bd9083c
patch 9.0.1396: sort(list, 'N') does not work in Vim9 script context
Bram Moolenaar <Bram@vim.org>
parents:
32098
diff
changeset
|
319 return tv_get_bool_or_number_chk(varp, NULL, TRUE, TRUE); |
21851
727820154b1a
patch 8.2.1475: Vim9: can't use v:true for option flags
Bram Moolenaar <Bram@vim.org>
parents:
21831
diff
changeset
|
320 } |
727820154b1a
patch 8.2.1475: Vim9: can't use v:true for option flags
Bram Moolenaar <Bram@vim.org>
parents:
21831
diff
changeset
|
321 |
21861
cd8dafe937ba
patch 8.2.1480: Vim9: skip expression in search() gives error
Bram Moolenaar <Bram@vim.org>
parents:
21851
diff
changeset
|
322 /* |
cd8dafe937ba
patch 8.2.1480: Vim9: skip expression in search() gives error
Bram Moolenaar <Bram@vim.org>
parents:
21851
diff
changeset
|
323 * Get the boolean value of "varp". This is like tv_get_number_chk(), |
cd8dafe937ba
patch 8.2.1480: Vim9: skip expression in search() gives error
Bram Moolenaar <Bram@vim.org>
parents:
21851
diff
changeset
|
324 * but in Vim9 script accepts Number and Bool. |
cd8dafe937ba
patch 8.2.1480: Vim9: skip expression in search() gives error
Bram Moolenaar <Bram@vim.org>
parents:
21851
diff
changeset
|
325 */ |
cd8dafe937ba
patch 8.2.1480: Vim9: skip expression in search() gives error
Bram Moolenaar <Bram@vim.org>
parents:
21851
diff
changeset
|
326 varnumber_T |
cd8dafe937ba
patch 8.2.1480: Vim9: skip expression in search() gives error
Bram Moolenaar <Bram@vim.org>
parents:
21851
diff
changeset
|
327 tv_get_bool_chk(typval_T *varp, int *denote) |
cd8dafe937ba
patch 8.2.1480: Vim9: skip expression in search() gives error
Bram Moolenaar <Bram@vim.org>
parents:
21851
diff
changeset
|
328 { |
32130
ec0d5bd9083c
patch 9.0.1396: sort(list, 'N') does not work in Vim9 script context
Bram Moolenaar <Bram@vim.org>
parents:
32098
diff
changeset
|
329 return tv_get_bool_or_number_chk(varp, denote, TRUE, TRUE); |
21861
cd8dafe937ba
patch 8.2.1480: Vim9: skip expression in search() gives error
Bram Moolenaar <Bram@vim.org>
parents:
21851
diff
changeset
|
330 } |
cd8dafe937ba
patch 8.2.1480: Vim9: skip expression in search() gives error
Bram Moolenaar <Bram@vim.org>
parents:
21851
diff
changeset
|
331 |
26696
1cee572f2fd7
patch 8.2.3877: function does not abort after a type error in compare
Bram Moolenaar <Bram@vim.org>
parents:
26644
diff
changeset
|
332 static float_T |
1cee572f2fd7
patch 8.2.3877: function does not abort after a type error in compare
Bram Moolenaar <Bram@vim.org>
parents:
26644
diff
changeset
|
333 tv_get_float_chk(typval_T *varp, int *error) |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
334 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
335 switch (varp->v_type) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
336 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
337 case VAR_NUMBER: |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
338 return (float_T)(varp->vval.v_number); |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
339 case VAR_FLOAT: |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
340 return varp->vval.v_float; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
341 case VAR_FUNC: |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
342 case VAR_PARTIAL: |
26966
ac75c145f0a9
patch 8.2.4012: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
343 emsg(_(e_using_funcref_as_float)); |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
344 break; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
345 case VAR_STRING: |
26966
ac75c145f0a9
patch 8.2.4012: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
346 emsg(_(e_using_string_as_float)); |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
347 break; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
348 case VAR_LIST: |
26966
ac75c145f0a9
patch 8.2.4012: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
349 emsg(_(e_using_list_as_float)); |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
350 break; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
351 case VAR_DICT: |
26966
ac75c145f0a9
patch 8.2.4012: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
352 emsg(_(e_using_dictionary_as_float)); |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
353 break; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
354 case VAR_BOOL: |
27034
b31cc7630773
patch 8.2.4046: some error messages not in the right place
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
355 emsg(_(e_using_boolean_value_as_float)); |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
356 break; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
357 case VAR_SPECIAL: |
26966
ac75c145f0a9
patch 8.2.4012: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
358 emsg(_(e_using_special_value_as_float)); |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
359 break; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
360 case VAR_JOB: |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
361 # ifdef FEAT_JOB_CHANNEL |
26966
ac75c145f0a9
patch 8.2.4012: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
362 emsg(_(e_using_job_as_float)); |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
363 break; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
364 # endif |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
365 case VAR_CHANNEL: |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
366 # ifdef FEAT_JOB_CHANNEL |
26966
ac75c145f0a9
patch 8.2.4012: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
367 emsg(_(e_using_channel_as_float)); |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
368 break; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
369 # endif |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
370 case VAR_BLOB: |
26966
ac75c145f0a9
patch 8.2.4012: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
371 emsg(_(e_using_blob_as_float)); |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
372 break; |
31396
307f68a41b03
patch 9.0.1031: Vim9 class is not implemented yet
Bram Moolenaar <Bram@vim.org>
parents:
31289
diff
changeset
|
373 case VAR_CLASS: |
307f68a41b03
patch 9.0.1031: Vim9 class is not implemented yet
Bram Moolenaar <Bram@vim.org>
parents:
31289
diff
changeset
|
374 emsg(_(e_using_class_as_float)); |
307f68a41b03
patch 9.0.1031: Vim9 class is not implemented yet
Bram Moolenaar <Bram@vim.org>
parents:
31289
diff
changeset
|
375 break; |
307f68a41b03
patch 9.0.1031: Vim9 class is not implemented yet
Bram Moolenaar <Bram@vim.org>
parents:
31289
diff
changeset
|
376 case VAR_OBJECT: |
307f68a41b03
patch 9.0.1031: Vim9 class is not implemented yet
Bram Moolenaar <Bram@vim.org>
parents:
31289
diff
changeset
|
377 emsg(_(e_using_object_as_float)); |
307f68a41b03
patch 9.0.1031: Vim9 class is not implemented yet
Bram Moolenaar <Bram@vim.org>
parents:
31289
diff
changeset
|
378 break; |
24936
345619f35112
patch 8.2.3005: Vim9: using a void value does not give a proper error message
Bram Moolenaar <Bram@vim.org>
parents:
24820
diff
changeset
|
379 case VAR_VOID: |
345619f35112
patch 8.2.3005: Vim9: using a void value does not give a proper error message
Bram Moolenaar <Bram@vim.org>
parents:
24820
diff
changeset
|
380 emsg(_(e_cannot_use_void_value)); |
345619f35112
patch 8.2.3005: Vim9: using a void value does not give a proper error message
Bram Moolenaar <Bram@vim.org>
parents:
24820
diff
changeset
|
381 break; |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
382 case VAR_UNKNOWN: |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
383 case VAR_ANY: |
24606
a4fda40e0bb9
patch 8.2.2842: Vim9: skip argument to searchpair() is not compiled
Bram Moolenaar <Bram@vim.org>
parents:
24424
diff
changeset
|
384 case VAR_INSTR: |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
385 internal_error_no_abort("tv_get_float(UNKNOWN)"); |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
386 break; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
387 } |
26696
1cee572f2fd7
patch 8.2.3877: function does not abort after a type error in compare
Bram Moolenaar <Bram@vim.org>
parents:
26644
diff
changeset
|
388 if (error != NULL) |
1cee572f2fd7
patch 8.2.3877: function does not abort after a type error in compare
Bram Moolenaar <Bram@vim.org>
parents:
26644
diff
changeset
|
389 *error = TRUE; |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
390 return 0; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
391 } |
26696
1cee572f2fd7
patch 8.2.3877: function does not abort after a type error in compare
Bram Moolenaar <Bram@vim.org>
parents:
26644
diff
changeset
|
392 |
1cee572f2fd7
patch 8.2.3877: function does not abort after a type error in compare
Bram Moolenaar <Bram@vim.org>
parents:
26644
diff
changeset
|
393 float_T |
1cee572f2fd7
patch 8.2.3877: function does not abort after a type error in compare
Bram Moolenaar <Bram@vim.org>
parents:
26644
diff
changeset
|
394 tv_get_float(typval_T *varp) |
1cee572f2fd7
patch 8.2.3877: function does not abort after a type error in compare
Bram Moolenaar <Bram@vim.org>
parents:
26644
diff
changeset
|
395 { |
1cee572f2fd7
patch 8.2.3877: function does not abort after a type error in compare
Bram Moolenaar <Bram@vim.org>
parents:
26644
diff
changeset
|
396 return tv_get_float_chk(varp, NULL); |
1cee572f2fd7
patch 8.2.3877: function does not abort after a type error in compare
Bram Moolenaar <Bram@vim.org>
parents:
26644
diff
changeset
|
397 } |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
398 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
399 /* |
28674
38f7a132bba3
patch 8.2.4861: it is not easy to restore saved mappings
Bram Moolenaar <Bram@vim.org>
parents:
28668
diff
changeset
|
400 * Give an error and return FAIL unless "args[idx]" is unknown |
38f7a132bba3
patch 8.2.4861: it is not easy to restore saved mappings
Bram Moolenaar <Bram@vim.org>
parents:
28668
diff
changeset
|
401 */ |
38f7a132bba3
patch 8.2.4861: it is not easy to restore saved mappings
Bram Moolenaar <Bram@vim.org>
parents:
28668
diff
changeset
|
402 int |
38f7a132bba3
patch 8.2.4861: it is not easy to restore saved mappings
Bram Moolenaar <Bram@vim.org>
parents:
28668
diff
changeset
|
403 check_for_unknown_arg(typval_T *args, int idx) |
38f7a132bba3
patch 8.2.4861: it is not easy to restore saved mappings
Bram Moolenaar <Bram@vim.org>
parents:
28668
diff
changeset
|
404 { |
38f7a132bba3
patch 8.2.4861: it is not easy to restore saved mappings
Bram Moolenaar <Bram@vim.org>
parents:
28668
diff
changeset
|
405 if (args[idx].v_type != VAR_UNKNOWN) |
38f7a132bba3
patch 8.2.4861: it is not easy to restore saved mappings
Bram Moolenaar <Bram@vim.org>
parents:
28668
diff
changeset
|
406 { |
38f7a132bba3
patch 8.2.4861: it is not easy to restore saved mappings
Bram Moolenaar <Bram@vim.org>
parents:
28668
diff
changeset
|
407 semsg(_(e_too_many_arguments), idx + 1); |
38f7a132bba3
patch 8.2.4861: it is not easy to restore saved mappings
Bram Moolenaar <Bram@vim.org>
parents:
28668
diff
changeset
|
408 return FAIL; |
38f7a132bba3
patch 8.2.4861: it is not easy to restore saved mappings
Bram Moolenaar <Bram@vim.org>
parents:
28668
diff
changeset
|
409 } |
38f7a132bba3
patch 8.2.4861: it is not easy to restore saved mappings
Bram Moolenaar <Bram@vim.org>
parents:
28668
diff
changeset
|
410 return OK; |
38f7a132bba3
patch 8.2.4861: it is not easy to restore saved mappings
Bram Moolenaar <Bram@vim.org>
parents:
28668
diff
changeset
|
411 } |
38f7a132bba3
patch 8.2.4861: it is not easy to restore saved mappings
Bram Moolenaar <Bram@vim.org>
parents:
28668
diff
changeset
|
412 |
38f7a132bba3
patch 8.2.4861: it is not easy to restore saved mappings
Bram Moolenaar <Bram@vim.org>
parents:
28668
diff
changeset
|
413 /* |
25272
712e867f9721
patch 8.2.3173: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25252
diff
changeset
|
414 * Give an error and return FAIL unless "args[idx]" is a string. |
23142
5f08d4a42898
patch 8.2.2117: some functions use any value as a string
Bram Moolenaar <Bram@vim.org>
parents:
22930
diff
changeset
|
415 */ |
5f08d4a42898
patch 8.2.2117: some functions use any value as a string
Bram Moolenaar <Bram@vim.org>
parents:
22930
diff
changeset
|
416 int |
24246
35603c7991d7
patch 8.2.2664: Vim9: not enough function arguments checked for string
Bram Moolenaar <Bram@vim.org>
parents:
24210
diff
changeset
|
417 check_for_string_arg(typval_T *args, int idx) |
23142
5f08d4a42898
patch 8.2.2117: some functions use any value as a string
Bram Moolenaar <Bram@vim.org>
parents:
22930
diff
changeset
|
418 { |
24246
35603c7991d7
patch 8.2.2664: Vim9: not enough function arguments checked for string
Bram Moolenaar <Bram@vim.org>
parents:
24210
diff
changeset
|
419 if (args[idx].v_type != VAR_STRING) |
23142
5f08d4a42898
patch 8.2.2117: some functions use any value as a string
Bram Moolenaar <Bram@vim.org>
parents:
22930
diff
changeset
|
420 { |
26622
a28f91b893b2
patch 8.2.3840: useless test for negative index in check functions
Bram Moolenaar <Bram@vim.org>
parents:
26602
diff
changeset
|
421 semsg(_(e_string_required_for_argument_nr), idx + 1); |
23142
5f08d4a42898
patch 8.2.2117: some functions use any value as a string
Bram Moolenaar <Bram@vim.org>
parents:
22930
diff
changeset
|
422 return FAIL; |
5f08d4a42898
patch 8.2.2117: some functions use any value as a string
Bram Moolenaar <Bram@vim.org>
parents:
22930
diff
changeset
|
423 } |
5f08d4a42898
patch 8.2.2117: some functions use any value as a string
Bram Moolenaar <Bram@vim.org>
parents:
22930
diff
changeset
|
424 return OK; |
5f08d4a42898
patch 8.2.2117: some functions use any value as a string
Bram Moolenaar <Bram@vim.org>
parents:
22930
diff
changeset
|
425 } |
5f08d4a42898
patch 8.2.2117: some functions use any value as a string
Bram Moolenaar <Bram@vim.org>
parents:
22930
diff
changeset
|
426 |
5f08d4a42898
patch 8.2.2117: some functions use any value as a string
Bram Moolenaar <Bram@vim.org>
parents:
22930
diff
changeset
|
427 /* |
24246
35603c7991d7
patch 8.2.2664: Vim9: not enough function arguments checked for string
Bram Moolenaar <Bram@vim.org>
parents:
24210
diff
changeset
|
428 * Give an error and return FAIL unless "args[idx]" is a non-empty string. |
23175
d7294a6220ac
patch 8.2.2133: Vim9: checking for a non-empty string is too strict
Bram Moolenaar <Bram@vim.org>
parents:
23142
diff
changeset
|
429 */ |
d7294a6220ac
patch 8.2.2133: Vim9: checking for a non-empty string is too strict
Bram Moolenaar <Bram@vim.org>
parents:
23142
diff
changeset
|
430 int |
24246
35603c7991d7
patch 8.2.2664: Vim9: not enough function arguments checked for string
Bram Moolenaar <Bram@vim.org>
parents:
24210
diff
changeset
|
431 check_for_nonempty_string_arg(typval_T *args, int idx) |
23175
d7294a6220ac
patch 8.2.2133: Vim9: checking for a non-empty string is too strict
Bram Moolenaar <Bram@vim.org>
parents:
23142
diff
changeset
|
432 { |
24246
35603c7991d7
patch 8.2.2664: Vim9: not enough function arguments checked for string
Bram Moolenaar <Bram@vim.org>
parents:
24210
diff
changeset
|
433 if (check_for_string_arg(args, idx) == FAIL) |
23175
d7294a6220ac
patch 8.2.2133: Vim9: checking for a non-empty string is too strict
Bram Moolenaar <Bram@vim.org>
parents:
23142
diff
changeset
|
434 return FAIL; |
24246
35603c7991d7
patch 8.2.2664: Vim9: not enough function arguments checked for string
Bram Moolenaar <Bram@vim.org>
parents:
24210
diff
changeset
|
435 if (args[idx].vval.v_string == NULL || *args[idx].vval.v_string == NUL) |
23175
d7294a6220ac
patch 8.2.2133: Vim9: checking for a non-empty string is too strict
Bram Moolenaar <Bram@vim.org>
parents:
23142
diff
changeset
|
436 { |
24424 | 437 semsg(_(e_non_empty_string_required_for_argument_nr), idx + 1); |
23175
d7294a6220ac
patch 8.2.2133: Vim9: checking for a non-empty string is too strict
Bram Moolenaar <Bram@vim.org>
parents:
23142
diff
changeset
|
438 return FAIL; |
d7294a6220ac
patch 8.2.2133: Vim9: checking for a non-empty string is too strict
Bram Moolenaar <Bram@vim.org>
parents:
23142
diff
changeset
|
439 } |
d7294a6220ac
patch 8.2.2133: Vim9: checking for a non-empty string is too strict
Bram Moolenaar <Bram@vim.org>
parents:
23142
diff
changeset
|
440 return OK; |
d7294a6220ac
patch 8.2.2133: Vim9: checking for a non-empty string is too strict
Bram Moolenaar <Bram@vim.org>
parents:
23142
diff
changeset
|
441 } |
d7294a6220ac
patch 8.2.2133: Vim9: checking for a non-empty string is too strict
Bram Moolenaar <Bram@vim.org>
parents:
23142
diff
changeset
|
442 |
d7294a6220ac
patch 8.2.2133: Vim9: checking for a non-empty string is too strict
Bram Moolenaar <Bram@vim.org>
parents:
23142
diff
changeset
|
443 /* |
25302
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
444 * Check for an optional string argument at 'idx' |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
445 */ |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
446 int |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
447 check_for_opt_string_arg(typval_T *args, int idx) |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
448 { |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
449 return (args[idx].v_type == VAR_UNKNOWN |
30228
642b5e748028
patch 9.0.0450: return value of argument check functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
30188
diff
changeset
|
450 || check_for_string_arg(args, idx) != FAIL) ? OK : FAIL; |
25302
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
451 } |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
452 |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
453 /* |
25272
712e867f9721
patch 8.2.3173: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25252
diff
changeset
|
454 * Give an error and return FAIL unless "args[idx]" is a number. |
25252
acda780ffc3e
patch 8.2.3162: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25198
diff
changeset
|
455 */ |
acda780ffc3e
patch 8.2.3162: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25198
diff
changeset
|
456 int |
acda780ffc3e
patch 8.2.3162: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25198
diff
changeset
|
457 check_for_number_arg(typval_T *args, int idx) |
acda780ffc3e
patch 8.2.3162: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25198
diff
changeset
|
458 { |
acda780ffc3e
patch 8.2.3162: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25198
diff
changeset
|
459 if (args[idx].v_type != VAR_NUMBER) |
acda780ffc3e
patch 8.2.3162: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25198
diff
changeset
|
460 { |
26622
a28f91b893b2
patch 8.2.3840: useless test for negative index in check functions
Bram Moolenaar <Bram@vim.org>
parents:
26602
diff
changeset
|
461 semsg(_(e_number_required_for_argument_nr), idx + 1); |
25252
acda780ffc3e
patch 8.2.3162: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25198
diff
changeset
|
462 return FAIL; |
acda780ffc3e
patch 8.2.3162: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25198
diff
changeset
|
463 } |
acda780ffc3e
patch 8.2.3162: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25198
diff
changeset
|
464 return OK; |
acda780ffc3e
patch 8.2.3162: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25198
diff
changeset
|
465 } |
acda780ffc3e
patch 8.2.3162: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25198
diff
changeset
|
466 |
acda780ffc3e
patch 8.2.3162: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25198
diff
changeset
|
467 /* |
25302
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
468 * Check for an optional number argument at 'idx' |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
469 */ |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
470 int |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
471 check_for_opt_number_arg(typval_T *args, int idx) |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
472 { |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
473 return (args[idx].v_type == VAR_UNKNOWN |
30228
642b5e748028
patch 9.0.0450: return value of argument check functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
30188
diff
changeset
|
474 || check_for_number_arg(args, idx) != FAIL) ? OK : FAIL; |
25302
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
475 } |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
476 |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
477 /* |
25368
1ffa8eb30353
patch 8.2.3221: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25348
diff
changeset
|
478 * Give an error and return FAIL unless "args[idx]" is a float or a number. |
1ffa8eb30353
patch 8.2.3221: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25348
diff
changeset
|
479 */ |
1ffa8eb30353
patch 8.2.3221: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25348
diff
changeset
|
480 int |
1ffa8eb30353
patch 8.2.3221: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25348
diff
changeset
|
481 check_for_float_or_nr_arg(typval_T *args, int idx) |
1ffa8eb30353
patch 8.2.3221: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25348
diff
changeset
|
482 { |
1ffa8eb30353
patch 8.2.3221: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25348
diff
changeset
|
483 if (args[idx].v_type != VAR_FLOAT && args[idx].v_type != VAR_NUMBER) |
1ffa8eb30353
patch 8.2.3221: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25348
diff
changeset
|
484 { |
26622
a28f91b893b2
patch 8.2.3840: useless test for negative index in check functions
Bram Moolenaar <Bram@vim.org>
parents:
26602
diff
changeset
|
485 semsg(_(e_float_or_number_required_for_argument_nr), idx + 1); |
25368
1ffa8eb30353
patch 8.2.3221: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25348
diff
changeset
|
486 return FAIL; |
1ffa8eb30353
patch 8.2.3221: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25348
diff
changeset
|
487 } |
1ffa8eb30353
patch 8.2.3221: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25348
diff
changeset
|
488 return OK; |
1ffa8eb30353
patch 8.2.3221: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25348
diff
changeset
|
489 } |
1ffa8eb30353
patch 8.2.3221: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25348
diff
changeset
|
490 |
1ffa8eb30353
patch 8.2.3221: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25348
diff
changeset
|
491 /* |
25272
712e867f9721
patch 8.2.3173: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25252
diff
changeset
|
492 * Give an error and return FAIL unless "args[idx]" is a bool. |
712e867f9721
patch 8.2.3173: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25252
diff
changeset
|
493 */ |
712e867f9721
patch 8.2.3173: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25252
diff
changeset
|
494 int |
712e867f9721
patch 8.2.3173: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25252
diff
changeset
|
495 check_for_bool_arg(typval_T *args, int idx) |
712e867f9721
patch 8.2.3173: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25252
diff
changeset
|
496 { |
712e867f9721
patch 8.2.3173: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25252
diff
changeset
|
497 if (args[idx].v_type != VAR_BOOL |
712e867f9721
patch 8.2.3173: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25252
diff
changeset
|
498 && !(args[idx].v_type == VAR_NUMBER |
712e867f9721
patch 8.2.3173: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25252
diff
changeset
|
499 && (args[idx].vval.v_number == 0 |
712e867f9721
patch 8.2.3173: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25252
diff
changeset
|
500 || args[idx].vval.v_number == 1))) |
712e867f9721
patch 8.2.3173: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25252
diff
changeset
|
501 { |
26622
a28f91b893b2
patch 8.2.3840: useless test for negative index in check functions
Bram Moolenaar <Bram@vim.org>
parents:
26602
diff
changeset
|
502 semsg(_(e_bool_required_for_argument_nr), idx + 1); |
25272
712e867f9721
patch 8.2.3173: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25252
diff
changeset
|
503 return FAIL; |
712e867f9721
patch 8.2.3173: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25252
diff
changeset
|
504 } |
712e867f9721
patch 8.2.3173: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25252
diff
changeset
|
505 return OK; |
712e867f9721
patch 8.2.3173: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25252
diff
changeset
|
506 } |
712e867f9721
patch 8.2.3173: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25252
diff
changeset
|
507 |
712e867f9721
patch 8.2.3173: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25252
diff
changeset
|
508 /* |
25802
5ef704de7709
patch 8.2.3436: check for optional bool type has confusing return type
Bram Moolenaar <Bram@vim.org>
parents:
25622
diff
changeset
|
509 * Check for an optional bool argument at 'idx'. |
5ef704de7709
patch 8.2.3436: check for optional bool type has confusing return type
Bram Moolenaar <Bram@vim.org>
parents:
25622
diff
changeset
|
510 * Return FAIL if the type is wrong. |
25302
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
511 */ |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
512 int |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
513 check_for_opt_bool_arg(typval_T *args, int idx) |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
514 { |
25802
5ef704de7709
patch 8.2.3436: check for optional bool type has confusing return type
Bram Moolenaar <Bram@vim.org>
parents:
25622
diff
changeset
|
515 if (args[idx].v_type == VAR_UNKNOWN) |
5ef704de7709
patch 8.2.3436: check for optional bool type has confusing return type
Bram Moolenaar <Bram@vim.org>
parents:
25622
diff
changeset
|
516 return OK; |
5ef704de7709
patch 8.2.3436: check for optional bool type has confusing return type
Bram Moolenaar <Bram@vim.org>
parents:
25622
diff
changeset
|
517 return check_for_bool_arg(args, idx); |
25302
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
518 } |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
519 |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
520 /* |
25806
8d55e978f95b
patch 8.2.3438: cannot manipulate blobs
Bram Moolenaar <Bram@vim.org>
parents:
25802
diff
changeset
|
521 * Give an error and return FAIL unless "args[idx]" is a blob. |
8d55e978f95b
patch 8.2.3438: cannot manipulate blobs
Bram Moolenaar <Bram@vim.org>
parents:
25802
diff
changeset
|
522 */ |
8d55e978f95b
patch 8.2.3438: cannot manipulate blobs
Bram Moolenaar <Bram@vim.org>
parents:
25802
diff
changeset
|
523 int |
8d55e978f95b
patch 8.2.3438: cannot manipulate blobs
Bram Moolenaar <Bram@vim.org>
parents:
25802
diff
changeset
|
524 check_for_blob_arg(typval_T *args, int idx) |
8d55e978f95b
patch 8.2.3438: cannot manipulate blobs
Bram Moolenaar <Bram@vim.org>
parents:
25802
diff
changeset
|
525 { |
8d55e978f95b
patch 8.2.3438: cannot manipulate blobs
Bram Moolenaar <Bram@vim.org>
parents:
25802
diff
changeset
|
526 if (args[idx].v_type != VAR_BLOB) |
8d55e978f95b
patch 8.2.3438: cannot manipulate blobs
Bram Moolenaar <Bram@vim.org>
parents:
25802
diff
changeset
|
527 { |
26622
a28f91b893b2
patch 8.2.3840: useless test for negative index in check functions
Bram Moolenaar <Bram@vim.org>
parents:
26602
diff
changeset
|
528 semsg(_(e_blob_required_for_argument_nr), idx + 1); |
25806
8d55e978f95b
patch 8.2.3438: cannot manipulate blobs
Bram Moolenaar <Bram@vim.org>
parents:
25802
diff
changeset
|
529 return FAIL; |
8d55e978f95b
patch 8.2.3438: cannot manipulate blobs
Bram Moolenaar <Bram@vim.org>
parents:
25802
diff
changeset
|
530 } |
8d55e978f95b
patch 8.2.3438: cannot manipulate blobs
Bram Moolenaar <Bram@vim.org>
parents:
25802
diff
changeset
|
531 return OK; |
8d55e978f95b
patch 8.2.3438: cannot manipulate blobs
Bram Moolenaar <Bram@vim.org>
parents:
25802
diff
changeset
|
532 } |
8d55e978f95b
patch 8.2.3438: cannot manipulate blobs
Bram Moolenaar <Bram@vim.org>
parents:
25802
diff
changeset
|
533 |
8d55e978f95b
patch 8.2.3438: cannot manipulate blobs
Bram Moolenaar <Bram@vim.org>
parents:
25802
diff
changeset
|
534 /* |
25272
712e867f9721
patch 8.2.3173: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25252
diff
changeset
|
535 * Give an error and return FAIL unless "args[idx]" is a list. |
712e867f9721
patch 8.2.3173: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25252
diff
changeset
|
536 */ |
712e867f9721
patch 8.2.3173: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25252
diff
changeset
|
537 int |
712e867f9721
patch 8.2.3173: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25252
diff
changeset
|
538 check_for_list_arg(typval_T *args, int idx) |
712e867f9721
patch 8.2.3173: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25252
diff
changeset
|
539 { |
712e867f9721
patch 8.2.3173: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25252
diff
changeset
|
540 if (args[idx].v_type != VAR_LIST) |
712e867f9721
patch 8.2.3173: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25252
diff
changeset
|
541 { |
712e867f9721
patch 8.2.3173: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25252
diff
changeset
|
542 semsg(_(e_list_required_for_argument_nr), idx + 1); |
712e867f9721
patch 8.2.3173: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25252
diff
changeset
|
543 return FAIL; |
712e867f9721
patch 8.2.3173: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25252
diff
changeset
|
544 } |
712e867f9721
patch 8.2.3173: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25252
diff
changeset
|
545 return OK; |
712e867f9721
patch 8.2.3173: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25252
diff
changeset
|
546 } |
712e867f9721
patch 8.2.3173: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25252
diff
changeset
|
547 |
712e867f9721
patch 8.2.3173: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25252
diff
changeset
|
548 /* |
30015
adb0de8be4ce
patch 9.0.0345: error message for list argument could be clearer
Bram Moolenaar <Bram@vim.org>
parents:
29994
diff
changeset
|
549 * Give an error and return FAIL unless "args[idx]" is a non-NULL list. |
adb0de8be4ce
patch 9.0.0345: error message for list argument could be clearer
Bram Moolenaar <Bram@vim.org>
parents:
29994
diff
changeset
|
550 */ |
adb0de8be4ce
patch 9.0.0345: error message for list argument could be clearer
Bram Moolenaar <Bram@vim.org>
parents:
29994
diff
changeset
|
551 int |
adb0de8be4ce
patch 9.0.0345: error message for list argument could be clearer
Bram Moolenaar <Bram@vim.org>
parents:
29994
diff
changeset
|
552 check_for_nonnull_list_arg(typval_T *args, int idx) |
adb0de8be4ce
patch 9.0.0345: error message for list argument could be clearer
Bram Moolenaar <Bram@vim.org>
parents:
29994
diff
changeset
|
553 { |
adb0de8be4ce
patch 9.0.0345: error message for list argument could be clearer
Bram Moolenaar <Bram@vim.org>
parents:
29994
diff
changeset
|
554 if (check_for_list_arg(args, idx) == FAIL) |
adb0de8be4ce
patch 9.0.0345: error message for list argument could be clearer
Bram Moolenaar <Bram@vim.org>
parents:
29994
diff
changeset
|
555 return FAIL; |
adb0de8be4ce
patch 9.0.0345: error message for list argument could be clearer
Bram Moolenaar <Bram@vim.org>
parents:
29994
diff
changeset
|
556 |
adb0de8be4ce
patch 9.0.0345: error message for list argument could be clearer
Bram Moolenaar <Bram@vim.org>
parents:
29994
diff
changeset
|
557 if (args[idx].vval.v_list == NULL) |
adb0de8be4ce
patch 9.0.0345: error message for list argument could be clearer
Bram Moolenaar <Bram@vim.org>
parents:
29994
diff
changeset
|
558 { |
adb0de8be4ce
patch 9.0.0345: error message for list argument could be clearer
Bram Moolenaar <Bram@vim.org>
parents:
29994
diff
changeset
|
559 semsg(_(e_non_null_list_required_for_argument_nr), idx + 1); |
adb0de8be4ce
patch 9.0.0345: error message for list argument could be clearer
Bram Moolenaar <Bram@vim.org>
parents:
29994
diff
changeset
|
560 return FAIL; |
adb0de8be4ce
patch 9.0.0345: error message for list argument could be clearer
Bram Moolenaar <Bram@vim.org>
parents:
29994
diff
changeset
|
561 } |
adb0de8be4ce
patch 9.0.0345: error message for list argument could be clearer
Bram Moolenaar <Bram@vim.org>
parents:
29994
diff
changeset
|
562 return OK; |
adb0de8be4ce
patch 9.0.0345: error message for list argument could be clearer
Bram Moolenaar <Bram@vim.org>
parents:
29994
diff
changeset
|
563 } |
adb0de8be4ce
patch 9.0.0345: error message for list argument could be clearer
Bram Moolenaar <Bram@vim.org>
parents:
29994
diff
changeset
|
564 |
adb0de8be4ce
patch 9.0.0345: error message for list argument could be clearer
Bram Moolenaar <Bram@vim.org>
parents:
29994
diff
changeset
|
565 /* |
25302
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
566 * Check for an optional list argument at 'idx' |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
567 */ |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
568 int |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
569 check_for_opt_list_arg(typval_T *args, int idx) |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
570 { |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
571 return (args[idx].v_type == VAR_UNKNOWN |
30228
642b5e748028
patch 9.0.0450: return value of argument check functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
30188
diff
changeset
|
572 || check_for_list_arg(args, idx) != FAIL) ? OK : FAIL; |
25302
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
573 } |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
574 |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
575 /* |
25272
712e867f9721
patch 8.2.3173: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25252
diff
changeset
|
576 * Give an error and return FAIL unless "args[idx]" is a dict. |
25198
eafc0e07b188
patch 8.2.3135: Vim9: builtin function arguments not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25064
diff
changeset
|
577 */ |
eafc0e07b188
patch 8.2.3135: Vim9: builtin function arguments not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25064
diff
changeset
|
578 int |
eafc0e07b188
patch 8.2.3135: Vim9: builtin function arguments not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25064
diff
changeset
|
579 check_for_dict_arg(typval_T *args, int idx) |
eafc0e07b188
patch 8.2.3135: Vim9: builtin function arguments not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25064
diff
changeset
|
580 { |
eafc0e07b188
patch 8.2.3135: Vim9: builtin function arguments not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25064
diff
changeset
|
581 if (args[idx].v_type != VAR_DICT) |
eafc0e07b188
patch 8.2.3135: Vim9: builtin function arguments not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25064
diff
changeset
|
582 { |
26622
a28f91b893b2
patch 8.2.3840: useless test for negative index in check functions
Bram Moolenaar <Bram@vim.org>
parents:
26602
diff
changeset
|
583 semsg(_(e_dict_required_for_argument_nr), idx + 1); |
25198
eafc0e07b188
patch 8.2.3135: Vim9: builtin function arguments not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25064
diff
changeset
|
584 return FAIL; |
eafc0e07b188
patch 8.2.3135: Vim9: builtin function arguments not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25064
diff
changeset
|
585 } |
eafc0e07b188
patch 8.2.3135: Vim9: builtin function arguments not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25064
diff
changeset
|
586 return OK; |
eafc0e07b188
patch 8.2.3135: Vim9: builtin function arguments not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25064
diff
changeset
|
587 } |
eafc0e07b188
patch 8.2.3135: Vim9: builtin function arguments not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25064
diff
changeset
|
588 |
eafc0e07b188
patch 8.2.3135: Vim9: builtin function arguments not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25064
diff
changeset
|
589 /* |
29994
86eb4aba16c3
patch 9.0.0335: checks for Dictionary argument often give a vague error
Bram Moolenaar <Bram@vim.org>
parents:
29525
diff
changeset
|
590 * Give an error and return FAIL unless "args[idx]" is a non-NULL dict. |
86eb4aba16c3
patch 9.0.0335: checks for Dictionary argument often give a vague error
Bram Moolenaar <Bram@vim.org>
parents:
29525
diff
changeset
|
591 */ |
86eb4aba16c3
patch 9.0.0335: checks for Dictionary argument often give a vague error
Bram Moolenaar <Bram@vim.org>
parents:
29525
diff
changeset
|
592 int |
86eb4aba16c3
patch 9.0.0335: checks for Dictionary argument often give a vague error
Bram Moolenaar <Bram@vim.org>
parents:
29525
diff
changeset
|
593 check_for_nonnull_dict_arg(typval_T *args, int idx) |
86eb4aba16c3
patch 9.0.0335: checks for Dictionary argument often give a vague error
Bram Moolenaar <Bram@vim.org>
parents:
29525
diff
changeset
|
594 { |
86eb4aba16c3
patch 9.0.0335: checks for Dictionary argument often give a vague error
Bram Moolenaar <Bram@vim.org>
parents:
29525
diff
changeset
|
595 if (check_for_dict_arg(args, idx) == FAIL) |
86eb4aba16c3
patch 9.0.0335: checks for Dictionary argument often give a vague error
Bram Moolenaar <Bram@vim.org>
parents:
29525
diff
changeset
|
596 return FAIL; |
86eb4aba16c3
patch 9.0.0335: checks for Dictionary argument often give a vague error
Bram Moolenaar <Bram@vim.org>
parents:
29525
diff
changeset
|
597 |
86eb4aba16c3
patch 9.0.0335: checks for Dictionary argument often give a vague error
Bram Moolenaar <Bram@vim.org>
parents:
29525
diff
changeset
|
598 if (args[idx].vval.v_dict == NULL) |
86eb4aba16c3
patch 9.0.0335: checks for Dictionary argument often give a vague error
Bram Moolenaar <Bram@vim.org>
parents:
29525
diff
changeset
|
599 { |
86eb4aba16c3
patch 9.0.0335: checks for Dictionary argument often give a vague error
Bram Moolenaar <Bram@vim.org>
parents:
29525
diff
changeset
|
600 semsg(_(e_non_null_dict_required_for_argument_nr), idx + 1); |
86eb4aba16c3
patch 9.0.0335: checks for Dictionary argument often give a vague error
Bram Moolenaar <Bram@vim.org>
parents:
29525
diff
changeset
|
601 return FAIL; |
86eb4aba16c3
patch 9.0.0335: checks for Dictionary argument often give a vague error
Bram Moolenaar <Bram@vim.org>
parents:
29525
diff
changeset
|
602 } |
86eb4aba16c3
patch 9.0.0335: checks for Dictionary argument often give a vague error
Bram Moolenaar <Bram@vim.org>
parents:
29525
diff
changeset
|
603 return OK; |
86eb4aba16c3
patch 9.0.0335: checks for Dictionary argument often give a vague error
Bram Moolenaar <Bram@vim.org>
parents:
29525
diff
changeset
|
604 } |
86eb4aba16c3
patch 9.0.0335: checks for Dictionary argument often give a vague error
Bram Moolenaar <Bram@vim.org>
parents:
29525
diff
changeset
|
605 |
86eb4aba16c3
patch 9.0.0335: checks for Dictionary argument often give a vague error
Bram Moolenaar <Bram@vim.org>
parents:
29525
diff
changeset
|
606 /* |
25302
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
607 * Check for an optional dict argument at 'idx' |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
608 */ |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
609 int |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
610 check_for_opt_dict_arg(typval_T *args, int idx) |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
611 { |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
612 return (args[idx].v_type == VAR_UNKNOWN |
30228
642b5e748028
patch 9.0.0450: return value of argument check functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
30188
diff
changeset
|
613 || check_for_dict_arg(args, idx) != FAIL) ? OK : FAIL; |
25302
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
614 } |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
615 |
27018
268f6a3511df
patch 8.2.4038: various code not used when features are disabled
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
616 #if defined(FEAT_JOB_CHANNEL) || defined(PROTO) |
25302
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
617 /* |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
618 * Give an error and return FAIL unless "args[idx]" is a channel or a job. |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
619 */ |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
620 int |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
621 check_for_chan_or_job_arg(typval_T *args, int idx) |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
622 { |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
623 if (args[idx].v_type != VAR_CHANNEL && args[idx].v_type != VAR_JOB) |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
624 { |
26622
a28f91b893b2
patch 8.2.3840: useless test for negative index in check functions
Bram Moolenaar <Bram@vim.org>
parents:
26602
diff
changeset
|
625 semsg(_(e_chan_or_job_required_for_argument_nr), idx + 1); |
25302
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
626 return FAIL; |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
627 } |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
628 return OK; |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
629 } |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
630 |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
631 /* |
25348
75031a22be39
patch 8.2.3211: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25338
diff
changeset
|
632 * Give an error and return FAIL unless "args[idx]" is an optional channel or a |
75031a22be39
patch 8.2.3211: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25338
diff
changeset
|
633 * job. |
75031a22be39
patch 8.2.3211: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25338
diff
changeset
|
634 */ |
75031a22be39
patch 8.2.3211: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25338
diff
changeset
|
635 int |
75031a22be39
patch 8.2.3211: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25338
diff
changeset
|
636 check_for_opt_chan_or_job_arg(typval_T *args, int idx) |
75031a22be39
patch 8.2.3211: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25338
diff
changeset
|
637 { |
75031a22be39
patch 8.2.3211: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25338
diff
changeset
|
638 return (args[idx].v_type == VAR_UNKNOWN |
30228
642b5e748028
patch 9.0.0450: return value of argument check functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
30188
diff
changeset
|
639 || check_for_chan_or_job_arg(args, idx) != FAIL) ? OK : FAIL; |
25348
75031a22be39
patch 8.2.3211: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25338
diff
changeset
|
640 } |
75031a22be39
patch 8.2.3211: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25338
diff
changeset
|
641 |
75031a22be39
patch 8.2.3211: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25338
diff
changeset
|
642 /* |
25302
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
643 * Give an error and return FAIL unless "args[idx]" is a job. |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
644 */ |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
645 int |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
646 check_for_job_arg(typval_T *args, int idx) |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
647 { |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
648 if (args[idx].v_type != VAR_JOB) |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
649 { |
26622
a28f91b893b2
patch 8.2.3840: useless test for negative index in check functions
Bram Moolenaar <Bram@vim.org>
parents:
26602
diff
changeset
|
650 semsg(_(e_job_required_for_argument_nr), idx + 1); |
25302
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
651 return FAIL; |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
652 } |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
653 return OK; |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
654 } |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
655 |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
656 /* |
25384
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
657 * Check for an optional job argument at 'idx'. |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
658 */ |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
659 int |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
660 check_for_opt_job_arg(typval_T *args, int idx) |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
661 { |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
662 return (args[idx].v_type == VAR_UNKNOWN |
30228
642b5e748028
patch 9.0.0450: return value of argument check functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
30188
diff
changeset
|
663 || check_for_job_arg(args, idx) != FAIL) ? OK : FAIL; |
25384
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
664 } |
31289
4f1e70a709bb
patch 9.0.0978: build errors without the +channel feature
Bram Moolenaar <Bram@vim.org>
parents:
30986
diff
changeset
|
665 #else |
4f1e70a709bb
patch 9.0.0978: build errors without the +channel feature
Bram Moolenaar <Bram@vim.org>
parents:
30986
diff
changeset
|
666 /* |
4f1e70a709bb
patch 9.0.0978: build errors without the +channel feature
Bram Moolenaar <Bram@vim.org>
parents:
30986
diff
changeset
|
667 * Give an error and return FAIL unless "args[idx]" is an optional channel or a |
4f1e70a709bb
patch 9.0.0978: build errors without the +channel feature
Bram Moolenaar <Bram@vim.org>
parents:
30986
diff
changeset
|
668 * job. Used without the +channel feature, thus only VAR_UNKNOWN is accepted. |
4f1e70a709bb
patch 9.0.0978: build errors without the +channel feature
Bram Moolenaar <Bram@vim.org>
parents:
30986
diff
changeset
|
669 */ |
4f1e70a709bb
patch 9.0.0978: build errors without the +channel feature
Bram Moolenaar <Bram@vim.org>
parents:
30986
diff
changeset
|
670 int |
4f1e70a709bb
patch 9.0.0978: build errors without the +channel feature
Bram Moolenaar <Bram@vim.org>
parents:
30986
diff
changeset
|
671 check_for_opt_chan_or_job_arg(typval_T *args, int idx) |
4f1e70a709bb
patch 9.0.0978: build errors without the +channel feature
Bram Moolenaar <Bram@vim.org>
parents:
30986
diff
changeset
|
672 { |
4f1e70a709bb
patch 9.0.0978: build errors without the +channel feature
Bram Moolenaar <Bram@vim.org>
parents:
30986
diff
changeset
|
673 return args[idx].v_type == VAR_UNKNOWN ? OK : FAIL; |
4f1e70a709bb
patch 9.0.0978: build errors without the +channel feature
Bram Moolenaar <Bram@vim.org>
parents:
30986
diff
changeset
|
674 } |
27018
268f6a3511df
patch 8.2.4038: various code not used when features are disabled
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
675 #endif |
25384
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
676 |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
677 /* |
25302
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
678 * Give an error and return FAIL unless "args[idx]" is a string or |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
679 * a number. |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
680 */ |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
681 int |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
682 check_for_string_or_number_arg(typval_T *args, int idx) |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
683 { |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
684 if (args[idx].v_type != VAR_STRING && args[idx].v_type != VAR_NUMBER) |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
685 { |
26622
a28f91b893b2
patch 8.2.3840: useless test for negative index in check functions
Bram Moolenaar <Bram@vim.org>
parents:
26602
diff
changeset
|
686 semsg(_(e_string_or_number_required_for_argument_nr), idx + 1); |
25302
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
687 return FAIL; |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
688 } |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
689 return OK; |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
690 } |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
691 |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
692 /* |
25314
7e620652bd13
patch 8.2.3194: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25302
diff
changeset
|
693 * Check for an optional string or number argument at 'idx'. |
7e620652bd13
patch 8.2.3194: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25302
diff
changeset
|
694 */ |
7e620652bd13
patch 8.2.3194: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25302
diff
changeset
|
695 int |
7e620652bd13
patch 8.2.3194: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25302
diff
changeset
|
696 check_for_opt_string_or_number_arg(typval_T *args, int idx) |
7e620652bd13
patch 8.2.3194: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25302
diff
changeset
|
697 { |
7e620652bd13
patch 8.2.3194: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25302
diff
changeset
|
698 return (args[idx].v_type == VAR_UNKNOWN |
30228
642b5e748028
patch 9.0.0450: return value of argument check functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
30188
diff
changeset
|
699 || check_for_string_or_number_arg(args, idx) != FAIL) ? OK : FAIL; |
25314
7e620652bd13
patch 8.2.3194: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25302
diff
changeset
|
700 } |
7e620652bd13
patch 8.2.3194: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25302
diff
changeset
|
701 |
7e620652bd13
patch 8.2.3194: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25302
diff
changeset
|
702 /* |
7e620652bd13
patch 8.2.3194: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25302
diff
changeset
|
703 * Give an error and return FAIL unless "args[idx]" is a buffer number. |
7e620652bd13
patch 8.2.3194: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25302
diff
changeset
|
704 * Buffer number can be a number or a string. |
25302
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
705 */ |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
706 int |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
707 check_for_buffer_arg(typval_T *args, int idx) |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
708 { |
25314
7e620652bd13
patch 8.2.3194: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25302
diff
changeset
|
709 return check_for_string_or_number_arg(args, idx); |
7e620652bd13
patch 8.2.3194: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25302
diff
changeset
|
710 } |
7e620652bd13
patch 8.2.3194: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25302
diff
changeset
|
711 |
7e620652bd13
patch 8.2.3194: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25302
diff
changeset
|
712 /* |
7e620652bd13
patch 8.2.3194: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25302
diff
changeset
|
713 * Check for an optional buffer argument at 'idx' |
7e620652bd13
patch 8.2.3194: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25302
diff
changeset
|
714 */ |
7e620652bd13
patch 8.2.3194: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25302
diff
changeset
|
715 int |
7e620652bd13
patch 8.2.3194: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25302
diff
changeset
|
716 check_for_opt_buffer_arg(typval_T *args, int idx) |
7e620652bd13
patch 8.2.3194: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25302
diff
changeset
|
717 { |
7e620652bd13
patch 8.2.3194: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25302
diff
changeset
|
718 return (args[idx].v_type == VAR_UNKNOWN |
30228
642b5e748028
patch 9.0.0450: return value of argument check functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
30188
diff
changeset
|
719 || check_for_buffer_arg(args, idx) != FAIL) ? OK : FAIL; |
25314
7e620652bd13
patch 8.2.3194: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25302
diff
changeset
|
720 } |
7e620652bd13
patch 8.2.3194: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25302
diff
changeset
|
721 |
7e620652bd13
patch 8.2.3194: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25302
diff
changeset
|
722 /* |
7e620652bd13
patch 8.2.3194: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25302
diff
changeset
|
723 * Give an error and return FAIL unless "args[idx]" is a line number. |
7e620652bd13
patch 8.2.3194: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25302
diff
changeset
|
724 * Line number can be a number or a string. |
7e620652bd13
patch 8.2.3194: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25302
diff
changeset
|
725 */ |
7e620652bd13
patch 8.2.3194: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25302
diff
changeset
|
726 int |
7e620652bd13
patch 8.2.3194: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25302
diff
changeset
|
727 check_for_lnum_arg(typval_T *args, int idx) |
7e620652bd13
patch 8.2.3194: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25302
diff
changeset
|
728 { |
7e620652bd13
patch 8.2.3194: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25302
diff
changeset
|
729 return check_for_string_or_number_arg(args, idx); |
7e620652bd13
patch 8.2.3194: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25302
diff
changeset
|
730 } |
7e620652bd13
patch 8.2.3194: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25302
diff
changeset
|
731 |
7e620652bd13
patch 8.2.3194: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25302
diff
changeset
|
732 /* |
7e620652bd13
patch 8.2.3194: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25302
diff
changeset
|
733 * Check for an optional line number argument at 'idx' |
7e620652bd13
patch 8.2.3194: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25302
diff
changeset
|
734 */ |
7e620652bd13
patch 8.2.3194: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25302
diff
changeset
|
735 int |
7e620652bd13
patch 8.2.3194: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25302
diff
changeset
|
736 check_for_opt_lnum_arg(typval_T *args, int idx) |
7e620652bd13
patch 8.2.3194: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25302
diff
changeset
|
737 { |
7e620652bd13
patch 8.2.3194: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25302
diff
changeset
|
738 return (args[idx].v_type == VAR_UNKNOWN |
30228
642b5e748028
patch 9.0.0450: return value of argument check functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
30188
diff
changeset
|
739 || check_for_lnum_arg(args, idx) != FAIL) ? OK : FAIL; |
25302
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
740 } |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
741 |
27018
268f6a3511df
patch 8.2.4038: various code not used when features are disabled
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
742 #if defined(FEAT_JOB_CHANNEL) || defined(PROTO) |
25302
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
743 /* |
25338
e2be9f3c5907
patch 8.2.3206: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25314
diff
changeset
|
744 * Give an error and return FAIL unless "args[idx]" is a string or a blob. |
25302
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
745 */ |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
746 int |
25314
7e620652bd13
patch 8.2.3194: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25302
diff
changeset
|
747 check_for_string_or_blob_arg(typval_T *args, int idx) |
25302
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
748 { |
25314
7e620652bd13
patch 8.2.3194: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25302
diff
changeset
|
749 if (args[idx].v_type != VAR_STRING && args[idx].v_type != VAR_BLOB) |
25302
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
750 { |
26622
a28f91b893b2
patch 8.2.3840: useless test for negative index in check functions
Bram Moolenaar <Bram@vim.org>
parents:
26602
diff
changeset
|
751 semsg(_(e_string_or_blob_required_for_argument_nr), idx + 1); |
25302
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
752 return FAIL; |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
753 } |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
754 return OK; |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
755 } |
27018
268f6a3511df
patch 8.2.4038: various code not used when features are disabled
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
756 #endif |
25302
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
757 |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
758 /* |
25338
e2be9f3c5907
patch 8.2.3206: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25314
diff
changeset
|
759 * Give an error and return FAIL unless "args[idx]" is a string or a list. |
25302
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
760 */ |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
761 int |
25314
7e620652bd13
patch 8.2.3194: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25302
diff
changeset
|
762 check_for_string_or_list_arg(typval_T *args, int idx) |
25302
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
763 { |
25314
7e620652bd13
patch 8.2.3194: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25302
diff
changeset
|
764 if (args[idx].v_type != VAR_STRING && args[idx].v_type != VAR_LIST) |
25302
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
765 { |
26622
a28f91b893b2
patch 8.2.3840: useless test for negative index in check functions
Bram Moolenaar <Bram@vim.org>
parents:
26602
diff
changeset
|
766 semsg(_(e_string_or_list_required_for_argument_nr), idx + 1); |
25302
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
767 return FAIL; |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
768 } |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
769 return OK; |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
770 } |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
771 |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
772 /* |
26638
6fd15d82e898
patch 8.2.3848: cannot use reduce() for a string
Bram Moolenaar <Bram@vim.org>
parents:
26622
diff
changeset
|
773 * Give an error and return FAIL unless "args[idx]" is a string, a list or a |
6fd15d82e898
patch 8.2.3848: cannot use reduce() for a string
Bram Moolenaar <Bram@vim.org>
parents:
26622
diff
changeset
|
774 * blob. |
6fd15d82e898
patch 8.2.3848: cannot use reduce() for a string
Bram Moolenaar <Bram@vim.org>
parents:
26622
diff
changeset
|
775 */ |
6fd15d82e898
patch 8.2.3848: cannot use reduce() for a string
Bram Moolenaar <Bram@vim.org>
parents:
26622
diff
changeset
|
776 int |
6fd15d82e898
patch 8.2.3848: cannot use reduce() for a string
Bram Moolenaar <Bram@vim.org>
parents:
26622
diff
changeset
|
777 check_for_string_or_list_or_blob_arg(typval_T *args, int idx) |
6fd15d82e898
patch 8.2.3848: cannot use reduce() for a string
Bram Moolenaar <Bram@vim.org>
parents:
26622
diff
changeset
|
778 { |
6fd15d82e898
patch 8.2.3848: cannot use reduce() for a string
Bram Moolenaar <Bram@vim.org>
parents:
26622
diff
changeset
|
779 if (args[idx].v_type != VAR_STRING |
6fd15d82e898
patch 8.2.3848: cannot use reduce() for a string
Bram Moolenaar <Bram@vim.org>
parents:
26622
diff
changeset
|
780 && args[idx].v_type != VAR_LIST |
6fd15d82e898
patch 8.2.3848: cannot use reduce() for a string
Bram Moolenaar <Bram@vim.org>
parents:
26622
diff
changeset
|
781 && args[idx].v_type != VAR_BLOB) |
6fd15d82e898
patch 8.2.3848: cannot use reduce() for a string
Bram Moolenaar <Bram@vim.org>
parents:
26622
diff
changeset
|
782 { |
6fd15d82e898
patch 8.2.3848: cannot use reduce() for a string
Bram Moolenaar <Bram@vim.org>
parents:
26622
diff
changeset
|
783 semsg(_(e_string_list_or_blob_required_for_argument_nr), idx + 1); |
6fd15d82e898
patch 8.2.3848: cannot use reduce() for a string
Bram Moolenaar <Bram@vim.org>
parents:
26622
diff
changeset
|
784 return FAIL; |
6fd15d82e898
patch 8.2.3848: cannot use reduce() for a string
Bram Moolenaar <Bram@vim.org>
parents:
26622
diff
changeset
|
785 } |
6fd15d82e898
patch 8.2.3848: cannot use reduce() for a string
Bram Moolenaar <Bram@vim.org>
parents:
26622
diff
changeset
|
786 return OK; |
6fd15d82e898
patch 8.2.3848: cannot use reduce() for a string
Bram Moolenaar <Bram@vim.org>
parents:
26622
diff
changeset
|
787 } |
6fd15d82e898
patch 8.2.3848: cannot use reduce() for a string
Bram Moolenaar <Bram@vim.org>
parents:
26622
diff
changeset
|
788 |
6fd15d82e898
patch 8.2.3848: cannot use reduce() for a string
Bram Moolenaar <Bram@vim.org>
parents:
26622
diff
changeset
|
789 /* |
25368
1ffa8eb30353
patch 8.2.3221: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25348
diff
changeset
|
790 * Check for an optional string or list argument at 'idx' |
1ffa8eb30353
patch 8.2.3221: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25348
diff
changeset
|
791 */ |
1ffa8eb30353
patch 8.2.3221: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25348
diff
changeset
|
792 int |
1ffa8eb30353
patch 8.2.3221: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25348
diff
changeset
|
793 check_for_opt_string_or_list_arg(typval_T *args, int idx) |
1ffa8eb30353
patch 8.2.3221: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25348
diff
changeset
|
794 { |
1ffa8eb30353
patch 8.2.3221: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25348
diff
changeset
|
795 return (args[idx].v_type == VAR_UNKNOWN |
30228
642b5e748028
patch 9.0.0450: return value of argument check functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
30188
diff
changeset
|
796 || check_for_string_or_list_arg(args, idx) != FAIL) ? OK : FAIL; |
25368
1ffa8eb30353
patch 8.2.3221: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25348
diff
changeset
|
797 } |
1ffa8eb30353
patch 8.2.3221: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25348
diff
changeset
|
798 |
1ffa8eb30353
patch 8.2.3221: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25348
diff
changeset
|
799 /* |
25384
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
800 * Give an error and return FAIL unless "args[idx]" is a string or a dict. |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
801 */ |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
802 int |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
803 check_for_string_or_dict_arg(typval_T *args, int idx) |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
804 { |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
805 if (args[idx].v_type != VAR_STRING && args[idx].v_type != VAR_DICT) |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
806 { |
26622
a28f91b893b2
patch 8.2.3840: useless test for negative index in check functions
Bram Moolenaar <Bram@vim.org>
parents:
26602
diff
changeset
|
807 semsg(_(e_string_or_dict_required_for_argument_nr), idx + 1); |
25384
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
808 return FAIL; |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
809 } |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
810 return OK; |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
811 } |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
812 |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
813 /* |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
814 * Give an error and return FAIL unless "args[idx]" is a string or a number |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
815 * or a list. |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
816 */ |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
817 int |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
818 check_for_string_or_number_or_list_arg(typval_T *args, int idx) |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
819 { |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
820 if (args[idx].v_type != VAR_STRING |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
821 && args[idx].v_type != VAR_NUMBER |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
822 && args[idx].v_type != VAR_LIST) |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
823 { |
26638
6fd15d82e898
patch 8.2.3848: cannot use reduce() for a string
Bram Moolenaar <Bram@vim.org>
parents:
26622
diff
changeset
|
824 semsg(_(e_string_number_or_list_required_for_argument_nr), idx + 1); |
25384
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
825 return FAIL; |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
826 } |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
827 return OK; |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
828 } |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
829 |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
830 /* |
25390
a6c347a0c6e3
patch 8.2.3232: system() does not work without a second argument
Bram Moolenaar <Bram@vim.org>
parents:
25384
diff
changeset
|
831 * Give an error and return FAIL unless "args[idx]" is an optional string |
a6c347a0c6e3
patch 8.2.3232: system() does not work without a second argument
Bram Moolenaar <Bram@vim.org>
parents:
25384
diff
changeset
|
832 * or number or a list |
a6c347a0c6e3
patch 8.2.3232: system() does not work without a second argument
Bram Moolenaar <Bram@vim.org>
parents:
25384
diff
changeset
|
833 */ |
a6c347a0c6e3
patch 8.2.3232: system() does not work without a second argument
Bram Moolenaar <Bram@vim.org>
parents:
25384
diff
changeset
|
834 int |
a6c347a0c6e3
patch 8.2.3232: system() does not work without a second argument
Bram Moolenaar <Bram@vim.org>
parents:
25384
diff
changeset
|
835 check_for_opt_string_or_number_or_list_arg(typval_T *args, int idx) |
a6c347a0c6e3
patch 8.2.3232: system() does not work without a second argument
Bram Moolenaar <Bram@vim.org>
parents:
25384
diff
changeset
|
836 { |
a6c347a0c6e3
patch 8.2.3232: system() does not work without a second argument
Bram Moolenaar <Bram@vim.org>
parents:
25384
diff
changeset
|
837 return (args[idx].v_type == VAR_UNKNOWN |
30228
642b5e748028
patch 9.0.0450: return value of argument check functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
30188
diff
changeset
|
838 || check_for_string_or_number_or_list_arg(args, idx) |
642b5e748028
patch 9.0.0450: return value of argument check functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
30188
diff
changeset
|
839 != FAIL) ? OK : FAIL; |
25390
a6c347a0c6e3
patch 8.2.3232: system() does not work without a second argument
Bram Moolenaar <Bram@vim.org>
parents:
25384
diff
changeset
|
840 } |
a6c347a0c6e3
patch 8.2.3232: system() does not work without a second argument
Bram Moolenaar <Bram@vim.org>
parents:
25384
diff
changeset
|
841 |
a6c347a0c6e3
patch 8.2.3232: system() does not work without a second argument
Bram Moolenaar <Bram@vim.org>
parents:
25384
diff
changeset
|
842 /* |
30188
ba22d5536d3e
patch 9.0.0430: cannot use repeat() with a blob
Bram Moolenaar <Bram@vim.org>
parents:
30015
diff
changeset
|
843 * Give an error and return FAIL unless "args[idx]" is a string or a number |
ba22d5536d3e
patch 9.0.0430: cannot use repeat() with a blob
Bram Moolenaar <Bram@vim.org>
parents:
30015
diff
changeset
|
844 * or a list or a blob. |
ba22d5536d3e
patch 9.0.0430: cannot use repeat() with a blob
Bram Moolenaar <Bram@vim.org>
parents:
30015
diff
changeset
|
845 */ |
ba22d5536d3e
patch 9.0.0430: cannot use repeat() with a blob
Bram Moolenaar <Bram@vim.org>
parents:
30015
diff
changeset
|
846 int |
ba22d5536d3e
patch 9.0.0430: cannot use repeat() with a blob
Bram Moolenaar <Bram@vim.org>
parents:
30015
diff
changeset
|
847 check_for_string_or_number_or_list_or_blob_arg(typval_T *args, int idx) |
ba22d5536d3e
patch 9.0.0430: cannot use repeat() with a blob
Bram Moolenaar <Bram@vim.org>
parents:
30015
diff
changeset
|
848 { |
ba22d5536d3e
patch 9.0.0430: cannot use repeat() with a blob
Bram Moolenaar <Bram@vim.org>
parents:
30015
diff
changeset
|
849 if (args[idx].v_type != VAR_STRING |
ba22d5536d3e
patch 9.0.0430: cannot use repeat() with a blob
Bram Moolenaar <Bram@vim.org>
parents:
30015
diff
changeset
|
850 && args[idx].v_type != VAR_NUMBER |
ba22d5536d3e
patch 9.0.0430: cannot use repeat() with a blob
Bram Moolenaar <Bram@vim.org>
parents:
30015
diff
changeset
|
851 && args[idx].v_type != VAR_LIST |
ba22d5536d3e
patch 9.0.0430: cannot use repeat() with a blob
Bram Moolenaar <Bram@vim.org>
parents:
30015
diff
changeset
|
852 && args[idx].v_type != VAR_BLOB) |
ba22d5536d3e
patch 9.0.0430: cannot use repeat() with a blob
Bram Moolenaar <Bram@vim.org>
parents:
30015
diff
changeset
|
853 { |
ba22d5536d3e
patch 9.0.0430: cannot use repeat() with a blob
Bram Moolenaar <Bram@vim.org>
parents:
30015
diff
changeset
|
854 semsg(_(e_string_number_list_or_blob_required_for_argument_nr), idx + 1); |
ba22d5536d3e
patch 9.0.0430: cannot use repeat() with a blob
Bram Moolenaar <Bram@vim.org>
parents:
30015
diff
changeset
|
855 return FAIL; |
ba22d5536d3e
patch 9.0.0430: cannot use repeat() with a blob
Bram Moolenaar <Bram@vim.org>
parents:
30015
diff
changeset
|
856 } |
ba22d5536d3e
patch 9.0.0430: cannot use repeat() with a blob
Bram Moolenaar <Bram@vim.org>
parents:
30015
diff
changeset
|
857 return OK; |
ba22d5536d3e
patch 9.0.0430: cannot use repeat() with a blob
Bram Moolenaar <Bram@vim.org>
parents:
30015
diff
changeset
|
858 } |
ba22d5536d3e
patch 9.0.0430: cannot use repeat() with a blob
Bram Moolenaar <Bram@vim.org>
parents:
30015
diff
changeset
|
859 |
ba22d5536d3e
patch 9.0.0430: cannot use repeat() with a blob
Bram Moolenaar <Bram@vim.org>
parents:
30015
diff
changeset
|
860 /* |
25384
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
861 * Give an error and return FAIL unless "args[idx]" is a string or a list |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
862 * or a dict. |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
863 */ |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
864 int |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
865 check_for_string_or_list_or_dict_arg(typval_T *args, int idx) |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
866 { |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
867 if (args[idx].v_type != VAR_STRING |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
868 && args[idx].v_type != VAR_LIST |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
869 && args[idx].v_type != VAR_DICT) |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
870 { |
26622
a28f91b893b2
patch 8.2.3840: useless test for negative index in check functions
Bram Moolenaar <Bram@vim.org>
parents:
26602
diff
changeset
|
871 semsg(_(e_string_list_or_dict_required_for_argument_nr), idx + 1); |
25384
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
872 return FAIL; |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
873 } |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
874 return OK; |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
875 } |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
876 |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
877 /* |
26731
7f4cc4e58f75
patch 8.2.3894: Vim9: no proper type check for first argument of call()
Bram Moolenaar <Bram@vim.org>
parents:
26696
diff
changeset
|
878 * Give an error and return FAIL unless "args[idx]" is a string |
7f4cc4e58f75
patch 8.2.3894: Vim9: no proper type check for first argument of call()
Bram Moolenaar <Bram@vim.org>
parents:
26696
diff
changeset
|
879 * or a function reference. |
7f4cc4e58f75
patch 8.2.3894: Vim9: no proper type check for first argument of call()
Bram Moolenaar <Bram@vim.org>
parents:
26696
diff
changeset
|
880 */ |
7f4cc4e58f75
patch 8.2.3894: Vim9: no proper type check for first argument of call()
Bram Moolenaar <Bram@vim.org>
parents:
26696
diff
changeset
|
881 int |
7f4cc4e58f75
patch 8.2.3894: Vim9: no proper type check for first argument of call()
Bram Moolenaar <Bram@vim.org>
parents:
26696
diff
changeset
|
882 check_for_string_or_func_arg(typval_T *args, int idx) |
7f4cc4e58f75
patch 8.2.3894: Vim9: no proper type check for first argument of call()
Bram Moolenaar <Bram@vim.org>
parents:
26696
diff
changeset
|
883 { |
7f4cc4e58f75
patch 8.2.3894: Vim9: no proper type check for first argument of call()
Bram Moolenaar <Bram@vim.org>
parents:
26696
diff
changeset
|
884 if (args[idx].v_type != VAR_PARTIAL |
7f4cc4e58f75
patch 8.2.3894: Vim9: no proper type check for first argument of call()
Bram Moolenaar <Bram@vim.org>
parents:
26696
diff
changeset
|
885 && args[idx].v_type != VAR_FUNC |
7f4cc4e58f75
patch 8.2.3894: Vim9: no proper type check for first argument of call()
Bram Moolenaar <Bram@vim.org>
parents:
26696
diff
changeset
|
886 && args[idx].v_type != VAR_STRING) |
7f4cc4e58f75
patch 8.2.3894: Vim9: no proper type check for first argument of call()
Bram Moolenaar <Bram@vim.org>
parents:
26696
diff
changeset
|
887 { |
7f4cc4e58f75
patch 8.2.3894: Vim9: no proper type check for first argument of call()
Bram Moolenaar <Bram@vim.org>
parents:
26696
diff
changeset
|
888 semsg(_(e_string_or_function_required_for_argument_nr), idx + 1); |
7f4cc4e58f75
patch 8.2.3894: Vim9: no proper type check for first argument of call()
Bram Moolenaar <Bram@vim.org>
parents:
26696
diff
changeset
|
889 return FAIL; |
7f4cc4e58f75
patch 8.2.3894: Vim9: no proper type check for first argument of call()
Bram Moolenaar <Bram@vim.org>
parents:
26696
diff
changeset
|
890 } |
7f4cc4e58f75
patch 8.2.3894: Vim9: no proper type check for first argument of call()
Bram Moolenaar <Bram@vim.org>
parents:
26696
diff
changeset
|
891 return OK; |
7f4cc4e58f75
patch 8.2.3894: Vim9: no proper type check for first argument of call()
Bram Moolenaar <Bram@vim.org>
parents:
26696
diff
changeset
|
892 } |
7f4cc4e58f75
patch 8.2.3894: Vim9: no proper type check for first argument of call()
Bram Moolenaar <Bram@vim.org>
parents:
26696
diff
changeset
|
893 |
7f4cc4e58f75
patch 8.2.3894: Vim9: no proper type check for first argument of call()
Bram Moolenaar <Bram@vim.org>
parents:
26696
diff
changeset
|
894 /* |
25338
e2be9f3c5907
patch 8.2.3206: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25314
diff
changeset
|
895 * Give an error and return FAIL unless "args[idx]" is a list or a blob. |
e2be9f3c5907
patch 8.2.3206: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25314
diff
changeset
|
896 */ |
e2be9f3c5907
patch 8.2.3206: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25314
diff
changeset
|
897 int |
e2be9f3c5907
patch 8.2.3206: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25314
diff
changeset
|
898 check_for_list_or_blob_arg(typval_T *args, int idx) |
e2be9f3c5907
patch 8.2.3206: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25314
diff
changeset
|
899 { |
e2be9f3c5907
patch 8.2.3206: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25314
diff
changeset
|
900 if (args[idx].v_type != VAR_LIST && args[idx].v_type != VAR_BLOB) |
e2be9f3c5907
patch 8.2.3206: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25314
diff
changeset
|
901 { |
26638
6fd15d82e898
patch 8.2.3848: cannot use reduce() for a string
Bram Moolenaar <Bram@vim.org>
parents:
26622
diff
changeset
|
902 semsg(_(e_list_or_blob_required_for_argument_nr), idx + 1); |
25384
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
903 return FAIL; |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
904 } |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
905 return OK; |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
906 } |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
907 |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
908 /* |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
909 * Give an error and return FAIL unless "args[idx]" is a list or dict |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
910 */ |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
911 int |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
912 check_for_list_or_dict_arg(typval_T *args, int idx) |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
913 { |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
914 if (args[idx].v_type != VAR_LIST |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
915 && args[idx].v_type != VAR_DICT) |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
916 { |
26622
a28f91b893b2
patch 8.2.3840: useless test for negative index in check functions
Bram Moolenaar <Bram@vim.org>
parents:
26602
diff
changeset
|
917 semsg(_(e_list_or_dict_required_for_argument_nr), idx + 1); |
25338
e2be9f3c5907
patch 8.2.3206: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25314
diff
changeset
|
918 return FAIL; |
e2be9f3c5907
patch 8.2.3206: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25314
diff
changeset
|
919 } |
e2be9f3c5907
patch 8.2.3206: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25314
diff
changeset
|
920 return OK; |
e2be9f3c5907
patch 8.2.3206: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25314
diff
changeset
|
921 } |
e2be9f3c5907
patch 8.2.3206: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25314
diff
changeset
|
922 |
e2be9f3c5907
patch 8.2.3206: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25314
diff
changeset
|
923 /* |
e2be9f3c5907
patch 8.2.3206: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25314
diff
changeset
|
924 * Give an error and return FAIL unless "args[idx]" is a list or dict or a |
e2be9f3c5907
patch 8.2.3206: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25314
diff
changeset
|
925 * blob. |
e2be9f3c5907
patch 8.2.3206: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25314
diff
changeset
|
926 */ |
e2be9f3c5907
patch 8.2.3206: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25314
diff
changeset
|
927 int |
e2be9f3c5907
patch 8.2.3206: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25314
diff
changeset
|
928 check_for_list_or_dict_or_blob_arg(typval_T *args, int idx) |
e2be9f3c5907
patch 8.2.3206: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25314
diff
changeset
|
929 { |
e2be9f3c5907
patch 8.2.3206: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25314
diff
changeset
|
930 if (args[idx].v_type != VAR_LIST |
e2be9f3c5907
patch 8.2.3206: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25314
diff
changeset
|
931 && args[idx].v_type != VAR_DICT |
e2be9f3c5907
patch 8.2.3206: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25314
diff
changeset
|
932 && args[idx].v_type != VAR_BLOB) |
e2be9f3c5907
patch 8.2.3206: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25314
diff
changeset
|
933 { |
26622
a28f91b893b2
patch 8.2.3840: useless test for negative index in check functions
Bram Moolenaar <Bram@vim.org>
parents:
26602
diff
changeset
|
934 semsg(_(e_list_dict_or_blob_required_for_argument_nr), idx + 1); |
25338
e2be9f3c5907
patch 8.2.3206: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25314
diff
changeset
|
935 return FAIL; |
e2be9f3c5907
patch 8.2.3206: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25314
diff
changeset
|
936 } |
e2be9f3c5907
patch 8.2.3206: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25314
diff
changeset
|
937 return OK; |
e2be9f3c5907
patch 8.2.3206: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25314
diff
changeset
|
938 } |
e2be9f3c5907
patch 8.2.3206: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25314
diff
changeset
|
939 |
e2be9f3c5907
patch 8.2.3206: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25314
diff
changeset
|
940 /* |
26585
0d2a709e2ff0
patch 8.2.3822: leaking memory in map() and filter(), no string in Vim9
Bram Moolenaar <Bram@vim.org>
parents:
26441
diff
changeset
|
941 * Give an error and return FAIL unless "args[idx]" is a list or dict or a |
0d2a709e2ff0
patch 8.2.3822: leaking memory in map() and filter(), no string in Vim9
Bram Moolenaar <Bram@vim.org>
parents:
26441
diff
changeset
|
942 * blob or a string. |
0d2a709e2ff0
patch 8.2.3822: leaking memory in map() and filter(), no string in Vim9
Bram Moolenaar <Bram@vim.org>
parents:
26441
diff
changeset
|
943 */ |
0d2a709e2ff0
patch 8.2.3822: leaking memory in map() and filter(), no string in Vim9
Bram Moolenaar <Bram@vim.org>
parents:
26441
diff
changeset
|
944 int |
0d2a709e2ff0
patch 8.2.3822: leaking memory in map() and filter(), no string in Vim9
Bram Moolenaar <Bram@vim.org>
parents:
26441
diff
changeset
|
945 check_for_list_or_dict_or_blob_or_string_arg(typval_T *args, int idx) |
0d2a709e2ff0
patch 8.2.3822: leaking memory in map() and filter(), no string in Vim9
Bram Moolenaar <Bram@vim.org>
parents:
26441
diff
changeset
|
946 { |
0d2a709e2ff0
patch 8.2.3822: leaking memory in map() and filter(), no string in Vim9
Bram Moolenaar <Bram@vim.org>
parents:
26441
diff
changeset
|
947 if (args[idx].v_type != VAR_LIST |
0d2a709e2ff0
patch 8.2.3822: leaking memory in map() and filter(), no string in Vim9
Bram Moolenaar <Bram@vim.org>
parents:
26441
diff
changeset
|
948 && args[idx].v_type != VAR_DICT |
0d2a709e2ff0
patch 8.2.3822: leaking memory in map() and filter(), no string in Vim9
Bram Moolenaar <Bram@vim.org>
parents:
26441
diff
changeset
|
949 && args[idx].v_type != VAR_BLOB |
0d2a709e2ff0
patch 8.2.3822: leaking memory in map() and filter(), no string in Vim9
Bram Moolenaar <Bram@vim.org>
parents:
26441
diff
changeset
|
950 && args[idx].v_type != VAR_STRING) |
0d2a709e2ff0
patch 8.2.3822: leaking memory in map() and filter(), no string in Vim9
Bram Moolenaar <Bram@vim.org>
parents:
26441
diff
changeset
|
951 { |
26622
a28f91b893b2
patch 8.2.3840: useless test for negative index in check functions
Bram Moolenaar <Bram@vim.org>
parents:
26602
diff
changeset
|
952 semsg(_(e_list_dict_blob_or_string_required_for_argument_nr), idx + 1); |
26585
0d2a709e2ff0
patch 8.2.3822: leaking memory in map() and filter(), no string in Vim9
Bram Moolenaar <Bram@vim.org>
parents:
26441
diff
changeset
|
953 return FAIL; |
0d2a709e2ff0
patch 8.2.3822: leaking memory in map() and filter(), no string in Vim9
Bram Moolenaar <Bram@vim.org>
parents:
26441
diff
changeset
|
954 } |
0d2a709e2ff0
patch 8.2.3822: leaking memory in map() and filter(), no string in Vim9
Bram Moolenaar <Bram@vim.org>
parents:
26441
diff
changeset
|
955 return OK; |
0d2a709e2ff0
patch 8.2.3822: leaking memory in map() and filter(), no string in Vim9
Bram Moolenaar <Bram@vim.org>
parents:
26441
diff
changeset
|
956 } |
0d2a709e2ff0
patch 8.2.3822: leaking memory in map() and filter(), no string in Vim9
Bram Moolenaar <Bram@vim.org>
parents:
26441
diff
changeset
|
957 |
0d2a709e2ff0
patch 8.2.3822: leaking memory in map() and filter(), no string in Vim9
Bram Moolenaar <Bram@vim.org>
parents:
26441
diff
changeset
|
958 /* |
25384
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
959 * Give an error and return FAIL unless "args[idx]" is an optional buffer |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
960 * number or a dict. |
25302
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
961 */ |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
962 int |
25384
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
963 check_for_opt_buffer_or_dict_arg(typval_T *args, int idx) |
25302
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
964 { |
25384
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
965 if (args[idx].v_type != VAR_UNKNOWN |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25368
diff
changeset
|
966 && args[idx].v_type != VAR_STRING |
25314
7e620652bd13
patch 8.2.3194: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25302
diff
changeset
|
967 && args[idx].v_type != VAR_NUMBER |
7e620652bd13
patch 8.2.3194: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25302
diff
changeset
|
968 && args[idx].v_type != VAR_DICT) |
25302
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
969 { |
26622
a28f91b893b2
patch 8.2.3840: useless test for negative index in check functions
Bram Moolenaar <Bram@vim.org>
parents:
26602
diff
changeset
|
970 semsg(_(e_string_required_for_argument_nr), idx + 1); |
25302
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
971 return FAIL; |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
972 } |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
973 return OK; |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
974 } |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
975 |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25278
diff
changeset
|
976 /* |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
977 * Get the string value of a variable. |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
978 * If it is a Number variable, the number is converted into a string. |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
979 * tv_get_string() uses a single, static buffer. YOU CAN ONLY USE IT ONCE! |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
980 * tv_get_string_buf() uses a given buffer. |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
981 * If the String variable has never been set, return an empty string. |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
982 * Never returns NULL; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
983 * tv_get_string_chk() and tv_get_string_buf_chk() are similar, but return |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
984 * NULL on error. |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
985 */ |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
986 char_u * |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
987 tv_get_string(typval_T *varp) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
988 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
989 static char_u mybuf[NUMBUFLEN]; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
990 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
991 return tv_get_string_buf(varp, mybuf); |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
992 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
993 |
23786
0512923e54e1
patch 8.2.2434: Vim9: no error when compiling str2nr() with a number
Bram Moolenaar <Bram@vim.org>
parents:
23563
diff
changeset
|
994 /* |
0512923e54e1
patch 8.2.2434: Vim9: no error when compiling str2nr() with a number
Bram Moolenaar <Bram@vim.org>
parents:
23563
diff
changeset
|
995 * Like tv_get_string() but don't allow number to string conversion for Vim9. |
0512923e54e1
patch 8.2.2434: Vim9: no error when compiling str2nr() with a number
Bram Moolenaar <Bram@vim.org>
parents:
23563
diff
changeset
|
996 */ |
0512923e54e1
patch 8.2.2434: Vim9: no error when compiling str2nr() with a number
Bram Moolenaar <Bram@vim.org>
parents:
23563
diff
changeset
|
997 char_u * |
0512923e54e1
patch 8.2.2434: Vim9: no error when compiling str2nr() with a number
Bram Moolenaar <Bram@vim.org>
parents:
23563
diff
changeset
|
998 tv_get_string_strict(typval_T *varp) |
0512923e54e1
patch 8.2.2434: Vim9: no error when compiling str2nr() with a number
Bram Moolenaar <Bram@vim.org>
parents:
23563
diff
changeset
|
999 { |
0512923e54e1
patch 8.2.2434: Vim9: no error when compiling str2nr() with a number
Bram Moolenaar <Bram@vim.org>
parents:
23563
diff
changeset
|
1000 static char_u mybuf[NUMBUFLEN]; |
0512923e54e1
patch 8.2.2434: Vim9: no error when compiling str2nr() with a number
Bram Moolenaar <Bram@vim.org>
parents:
23563
diff
changeset
|
1001 char_u *res = tv_get_string_buf_chk_strict( |
0512923e54e1
patch 8.2.2434: Vim9: no error when compiling str2nr() with a number
Bram Moolenaar <Bram@vim.org>
parents:
23563
diff
changeset
|
1002 varp, mybuf, in_vim9script()); |
0512923e54e1
patch 8.2.2434: Vim9: no error when compiling str2nr() with a number
Bram Moolenaar <Bram@vim.org>
parents:
23563
diff
changeset
|
1003 |
0512923e54e1
patch 8.2.2434: Vim9: no error when compiling str2nr() with a number
Bram Moolenaar <Bram@vim.org>
parents:
23563
diff
changeset
|
1004 return res != NULL ? res : (char_u *)""; |
0512923e54e1
patch 8.2.2434: Vim9: no error when compiling str2nr() with a number
Bram Moolenaar <Bram@vim.org>
parents:
23563
diff
changeset
|
1005 } |
0512923e54e1
patch 8.2.2434: Vim9: no error when compiling str2nr() with a number
Bram Moolenaar <Bram@vim.org>
parents:
23563
diff
changeset
|
1006 |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1007 char_u * |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1008 tv_get_string_buf(typval_T *varp, char_u *buf) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1009 { |
24812
8fdf839af1f4
patch 8.2.2944: Vim9: no error when using job or channel as a string
Bram Moolenaar <Bram@vim.org>
parents:
24614
diff
changeset
|
1010 char_u *res = tv_get_string_buf_chk(varp, buf); |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1011 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1012 return res != NULL ? res : (char_u *)""; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1013 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1014 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1015 /* |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1016 * Careful: This uses a single, static buffer. YOU CAN ONLY USE IT ONCE! |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1017 */ |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1018 char_u * |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1019 tv_get_string_chk(typval_T *varp) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1020 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1021 static char_u mybuf[NUMBUFLEN]; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1022 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1023 return tv_get_string_buf_chk(varp, mybuf); |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1024 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1025 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1026 char_u * |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1027 tv_get_string_buf_chk(typval_T *varp, char_u *buf) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1028 { |
23786
0512923e54e1
patch 8.2.2434: Vim9: no error when compiling str2nr() with a number
Bram Moolenaar <Bram@vim.org>
parents:
23563
diff
changeset
|
1029 return tv_get_string_buf_chk_strict(varp, buf, FALSE); |
0512923e54e1
patch 8.2.2434: Vim9: no error when compiling str2nr() with a number
Bram Moolenaar <Bram@vim.org>
parents:
23563
diff
changeset
|
1030 } |
0512923e54e1
patch 8.2.2434: Vim9: no error when compiling str2nr() with a number
Bram Moolenaar <Bram@vim.org>
parents:
23563
diff
changeset
|
1031 |
0512923e54e1
patch 8.2.2434: Vim9: no error when compiling str2nr() with a number
Bram Moolenaar <Bram@vim.org>
parents:
23563
diff
changeset
|
1032 char_u * |
0512923e54e1
patch 8.2.2434: Vim9: no error when compiling str2nr() with a number
Bram Moolenaar <Bram@vim.org>
parents:
23563
diff
changeset
|
1033 tv_get_string_buf_chk_strict(typval_T *varp, char_u *buf, int strict) |
0512923e54e1
patch 8.2.2434: Vim9: no error when compiling str2nr() with a number
Bram Moolenaar <Bram@vim.org>
parents:
23563
diff
changeset
|
1034 { |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1035 switch (varp->v_type) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1036 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1037 case VAR_NUMBER: |
23786
0512923e54e1
patch 8.2.2434: Vim9: no error when compiling str2nr() with a number
Bram Moolenaar <Bram@vim.org>
parents:
23563
diff
changeset
|
1038 if (strict) |
0512923e54e1
patch 8.2.2434: Vim9: no error when compiling str2nr() with a number
Bram Moolenaar <Bram@vim.org>
parents:
23563
diff
changeset
|
1039 { |
0512923e54e1
patch 8.2.2434: Vim9: no error when compiling str2nr() with a number
Bram Moolenaar <Bram@vim.org>
parents:
23563
diff
changeset
|
1040 emsg(_(e_using_number_as_string)); |
0512923e54e1
patch 8.2.2434: Vim9: no error when compiling str2nr() with a number
Bram Moolenaar <Bram@vim.org>
parents:
23563
diff
changeset
|
1041 break; |
0512923e54e1
patch 8.2.2434: Vim9: no error when compiling str2nr() with a number
Bram Moolenaar <Bram@vim.org>
parents:
23563
diff
changeset
|
1042 } |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1043 vim_snprintf((char *)buf, NUMBUFLEN, "%lld", |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1044 (varnumber_T)varp->vval.v_number); |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1045 return buf; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1046 case VAR_FUNC: |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1047 case VAR_PARTIAL: |
26952
b34ddbca305c
patch 8.2.4005: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26948
diff
changeset
|
1048 emsg(_(e_using_funcref_as_string)); |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1049 break; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1050 case VAR_LIST: |
26952
b34ddbca305c
patch 8.2.4005: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26948
diff
changeset
|
1051 emsg(_(e_using_list_as_string)); |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1052 break; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1053 case VAR_DICT: |
26952
b34ddbca305c
patch 8.2.4005: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26948
diff
changeset
|
1054 emsg(_(e_using_dictionary_as_string)); |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1055 break; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1056 case VAR_FLOAT: |
24820
b1093c1ac109
patch 8.2.2948: substitute() accepts a number but not a float expression
Bram Moolenaar <Bram@vim.org>
parents:
24812
diff
changeset
|
1057 if (strict) |
b1093c1ac109
patch 8.2.2948: substitute() accepts a number but not a float expression
Bram Moolenaar <Bram@vim.org>
parents:
24812
diff
changeset
|
1058 { |
26885
ed39730119bd
patch 8.2.3971: build fails
Bram Moolenaar <Bram@vim.org>
parents:
26877
diff
changeset
|
1059 emsg(_(e_using_float_as_string)); |
24820
b1093c1ac109
patch 8.2.2948: substitute() accepts a number but not a float expression
Bram Moolenaar <Bram@vim.org>
parents:
24812
diff
changeset
|
1060 break; |
b1093c1ac109
patch 8.2.2948: substitute() accepts a number but not a float expression
Bram Moolenaar <Bram@vim.org>
parents:
24812
diff
changeset
|
1061 } |
b1093c1ac109
patch 8.2.2948: substitute() accepts a number but not a float expression
Bram Moolenaar <Bram@vim.org>
parents:
24812
diff
changeset
|
1062 vim_snprintf((char *)buf, NUMBUFLEN, "%g", varp->vval.v_float); |
b1093c1ac109
patch 8.2.2948: substitute() accepts a number but not a float expression
Bram Moolenaar <Bram@vim.org>
parents:
24812
diff
changeset
|
1063 return buf; |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1064 case VAR_STRING: |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1065 if (varp->vval.v_string != NULL) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1066 return varp->vval.v_string; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1067 return (char_u *)""; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1068 case VAR_BOOL: |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1069 case VAR_SPECIAL: |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1070 STRCPY(buf, get_var_special_name(varp->vval.v_number)); |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1071 return buf; |
28809
d0241e74bfdb
patch 8.2.4928: various white space and cosmetic mistakes
Bram Moolenaar <Bram@vim.org>
parents:
28718
diff
changeset
|
1072 case VAR_BLOB: |
26966
ac75c145f0a9
patch 8.2.4012: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1073 emsg(_(e_using_blob_as_string)); |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1074 break; |
31396
307f68a41b03
patch 9.0.1031: Vim9 class is not implemented yet
Bram Moolenaar <Bram@vim.org>
parents:
31289
diff
changeset
|
1075 case VAR_CLASS: |
307f68a41b03
patch 9.0.1031: Vim9 class is not implemented yet
Bram Moolenaar <Bram@vim.org>
parents:
31289
diff
changeset
|
1076 emsg(_(e_using_class_as_string)); |
307f68a41b03
patch 9.0.1031: Vim9 class is not implemented yet
Bram Moolenaar <Bram@vim.org>
parents:
31289
diff
changeset
|
1077 break; |
307f68a41b03
patch 9.0.1031: Vim9 class is not implemented yet
Bram Moolenaar <Bram@vim.org>
parents:
31289
diff
changeset
|
1078 case VAR_OBJECT: |
307f68a41b03
patch 9.0.1031: Vim9 class is not implemented yet
Bram Moolenaar <Bram@vim.org>
parents:
31289
diff
changeset
|
1079 emsg(_(e_using_object_as_string)); |
307f68a41b03
patch 9.0.1031: Vim9 class is not implemented yet
Bram Moolenaar <Bram@vim.org>
parents:
31289
diff
changeset
|
1080 break; |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1081 case VAR_JOB: |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1082 #ifdef FEAT_JOB_CHANNEL |
24812
8fdf839af1f4
patch 8.2.2944: Vim9: no error when using job or channel as a string
Bram Moolenaar <Bram@vim.org>
parents:
24614
diff
changeset
|
1083 if (in_vim9script()) |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1084 { |
24812
8fdf839af1f4
patch 8.2.2944: Vim9: no error when using job or channel as a string
Bram Moolenaar <Bram@vim.org>
parents:
24614
diff
changeset
|
1085 semsg(_(e_using_invalid_value_as_string_str), "job"); |
8fdf839af1f4
patch 8.2.2944: Vim9: no error when using job or channel as a string
Bram Moolenaar <Bram@vim.org>
parents:
24614
diff
changeset
|
1086 break; |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1087 } |
24812
8fdf839af1f4
patch 8.2.2944: Vim9: no error when using job or channel as a string
Bram Moolenaar <Bram@vim.org>
parents:
24614
diff
changeset
|
1088 return job_to_string_buf(varp, buf); |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1089 #endif |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1090 break; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1091 case VAR_CHANNEL: |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1092 #ifdef FEAT_JOB_CHANNEL |
24812
8fdf839af1f4
patch 8.2.2944: Vim9: no error when using job or channel as a string
Bram Moolenaar <Bram@vim.org>
parents:
24614
diff
changeset
|
1093 if (in_vim9script()) |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1094 { |
24812
8fdf839af1f4
patch 8.2.2944: Vim9: no error when using job or channel as a string
Bram Moolenaar <Bram@vim.org>
parents:
24614
diff
changeset
|
1095 semsg(_(e_using_invalid_value_as_string_str), "channel"); |
8fdf839af1f4
patch 8.2.2944: Vim9: no error when using job or channel as a string
Bram Moolenaar <Bram@vim.org>
parents:
24614
diff
changeset
|
1096 break; |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1097 } |
24812
8fdf839af1f4
patch 8.2.2944: Vim9: no error when using job or channel as a string
Bram Moolenaar <Bram@vim.org>
parents:
24614
diff
changeset
|
1098 return channel_to_string_buf(varp, buf); |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1099 #endif |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1100 break; |
24936
345619f35112
patch 8.2.3005: Vim9: using a void value does not give a proper error message
Bram Moolenaar <Bram@vim.org>
parents:
24820
diff
changeset
|
1101 case VAR_VOID: |
345619f35112
patch 8.2.3005: Vim9: using a void value does not give a proper error message
Bram Moolenaar <Bram@vim.org>
parents:
24820
diff
changeset
|
1102 emsg(_(e_cannot_use_void_value)); |
345619f35112
patch 8.2.3005: Vim9: using a void value does not give a proper error message
Bram Moolenaar <Bram@vim.org>
parents:
24820
diff
changeset
|
1103 break; |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1104 case VAR_UNKNOWN: |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1105 case VAR_ANY: |
24606
a4fda40e0bb9
patch 8.2.2842: Vim9: skip argument to searchpair() is not compiled
Bram Moolenaar <Bram@vim.org>
parents:
24424
diff
changeset
|
1106 case VAR_INSTR: |
24614
07b3d21a8b4b
patch 8.2.2846: Vim9: "echo Func()" does not give an error for using void
Bram Moolenaar <Bram@vim.org>
parents:
24610
diff
changeset
|
1107 semsg(_(e_using_invalid_value_as_string_str), |
07b3d21a8b4b
patch 8.2.2846: Vim9: "echo Func()" does not give an error for using void
Bram Moolenaar <Bram@vim.org>
parents:
24610
diff
changeset
|
1108 vartype_name(varp->v_type)); |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1109 break; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1110 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1111 return NULL; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1112 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1113 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1114 /* |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1115 * Turn a typeval into a string. Similar to tv_get_string_buf() but uses |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1116 * string() on Dict, List, etc. |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1117 */ |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1118 char_u * |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1119 tv_stringify(typval_T *varp, char_u *buf) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1120 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1121 if (varp->v_type == VAR_LIST |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1122 || varp->v_type == VAR_DICT |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1123 || varp->v_type == VAR_BLOB |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1124 || varp->v_type == VAR_FUNC |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1125 || varp->v_type == VAR_PARTIAL |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1126 || varp->v_type == VAR_FLOAT) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1127 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1128 typval_T tmp; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1129 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1130 f_string(varp, &tmp); |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1131 tv_get_string_buf(&tmp, buf); |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1132 clear_tv(varp); |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1133 *varp = tmp; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1134 return tmp.vval.v_string; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1135 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1136 return tv_get_string_buf(varp, buf); |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1137 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1138 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1139 /* |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1140 * Return TRUE if typeval "tv" and its value are set to be locked (immutable). |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1141 * Also give an error message, using "name" or _("name") when use_gettext is |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1142 * TRUE. |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1143 */ |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1144 int |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1145 tv_check_lock(typval_T *tv, char_u *name, int use_gettext) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1146 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1147 int lock = 0; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1148 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1149 switch (tv->v_type) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1150 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1151 case VAR_BLOB: |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1152 if (tv->vval.v_blob != NULL) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1153 lock = tv->vval.v_blob->bv_lock; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1154 break; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1155 case VAR_LIST: |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1156 if (tv->vval.v_list != NULL) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1157 lock = tv->vval.v_list->lv_lock; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1158 break; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1159 case VAR_DICT: |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1160 if (tv->vval.v_dict != NULL) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1161 lock = tv->vval.v_dict->dv_lock; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1162 break; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1163 default: |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1164 break; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1165 } |
22298
07e48ee8c3bb
patch 8.2.1698: cannot lock a variable in legacy Vim script like in Vim9
Bram Moolenaar <Bram@vim.org>
parents:
22043
diff
changeset
|
1166 return value_check_lock(tv->v_lock, name, use_gettext) |
07e48ee8c3bb
patch 8.2.1698: cannot lock a variable in legacy Vim script like in Vim9
Bram Moolenaar <Bram@vim.org>
parents:
22043
diff
changeset
|
1167 || (lock != 0 && value_check_lock(lock, name, use_gettext)); |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1168 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1169 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1170 /* |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1171 * Copy the values from typval_T "from" to typval_T "to". |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1172 * When needed allocates string or increases reference count. |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1173 * Does not make a copy of a list, blob or dict but copies the reference! |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1174 * It is OK for "from" and "to" to point to the same item. This is used to |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1175 * make a copy later. |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1176 */ |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1177 void |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1178 copy_tv(typval_T *from, typval_T *to) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1179 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1180 to->v_type = from->v_type; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1181 to->v_lock = 0; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1182 switch (from->v_type) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1183 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1184 case VAR_NUMBER: |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1185 case VAR_BOOL: |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1186 case VAR_SPECIAL: |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1187 to->vval.v_number = from->vval.v_number; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1188 break; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1189 case VAR_FLOAT: |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1190 to->vval.v_float = from->vval.v_float; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1191 break; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1192 case VAR_JOB: |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1193 #ifdef FEAT_JOB_CHANNEL |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1194 to->vval.v_job = from->vval.v_job; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1195 if (to->vval.v_job != NULL) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1196 ++to->vval.v_job->jv_refcount; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1197 break; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1198 #endif |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1199 case VAR_CHANNEL: |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1200 #ifdef FEAT_JOB_CHANNEL |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1201 to->vval.v_channel = from->vval.v_channel; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1202 if (to->vval.v_channel != NULL) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1203 ++to->vval.v_channel->ch_refcount; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1204 break; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1205 #endif |
24606
a4fda40e0bb9
patch 8.2.2842: Vim9: skip argument to searchpair() is not compiled
Bram Moolenaar <Bram@vim.org>
parents:
24424
diff
changeset
|
1206 case VAR_INSTR: |
a4fda40e0bb9
patch 8.2.2842: Vim9: skip argument to searchpair() is not compiled
Bram Moolenaar <Bram@vim.org>
parents:
24424
diff
changeset
|
1207 to->vval.v_instr = from->vval.v_instr; |
a4fda40e0bb9
patch 8.2.2842: Vim9: skip argument to searchpair() is not compiled
Bram Moolenaar <Bram@vim.org>
parents:
24424
diff
changeset
|
1208 break; |
a4fda40e0bb9
patch 8.2.2842: Vim9: skip argument to searchpair() is not compiled
Bram Moolenaar <Bram@vim.org>
parents:
24424
diff
changeset
|
1209 |
31396
307f68a41b03
patch 9.0.1031: Vim9 class is not implemented yet
Bram Moolenaar <Bram@vim.org>
parents:
31289
diff
changeset
|
1210 case VAR_CLASS: |
307f68a41b03
patch 9.0.1031: Vim9 class is not implemented yet
Bram Moolenaar <Bram@vim.org>
parents:
31289
diff
changeset
|
1211 copy_class(from, to); |
307f68a41b03
patch 9.0.1031: Vim9 class is not implemented yet
Bram Moolenaar <Bram@vim.org>
parents:
31289
diff
changeset
|
1212 break; |
307f68a41b03
patch 9.0.1031: Vim9 class is not implemented yet
Bram Moolenaar <Bram@vim.org>
parents:
31289
diff
changeset
|
1213 |
307f68a41b03
patch 9.0.1031: Vim9 class is not implemented yet
Bram Moolenaar <Bram@vim.org>
parents:
31289
diff
changeset
|
1214 case VAR_OBJECT: |
307f68a41b03
patch 9.0.1031: Vim9 class is not implemented yet
Bram Moolenaar <Bram@vim.org>
parents:
31289
diff
changeset
|
1215 copy_object(from, to); |
307f68a41b03
patch 9.0.1031: Vim9 class is not implemented yet
Bram Moolenaar <Bram@vim.org>
parents:
31289
diff
changeset
|
1216 break; |
307f68a41b03
patch 9.0.1031: Vim9 class is not implemented yet
Bram Moolenaar <Bram@vim.org>
parents:
31289
diff
changeset
|
1217 |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1218 case VAR_STRING: |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1219 case VAR_FUNC: |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1220 if (from->vval.v_string == NULL) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1221 to->vval.v_string = NULL; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1222 else |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1223 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1224 to->vval.v_string = vim_strsave(from->vval.v_string); |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1225 if (from->v_type == VAR_FUNC) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1226 func_ref(to->vval.v_string); |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1227 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1228 break; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1229 case VAR_PARTIAL: |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1230 if (from->vval.v_partial == NULL) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1231 to->vval.v_partial = NULL; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1232 else |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1233 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1234 to->vval.v_partial = from->vval.v_partial; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1235 ++to->vval.v_partial->pt_refcount; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1236 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1237 break; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1238 case VAR_BLOB: |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1239 if (from->vval.v_blob == NULL) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1240 to->vval.v_blob = NULL; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1241 else |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1242 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1243 to->vval.v_blob = from->vval.v_blob; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1244 ++to->vval.v_blob->bv_refcount; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1245 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1246 break; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1247 case VAR_LIST: |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1248 if (from->vval.v_list == NULL) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1249 to->vval.v_list = NULL; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1250 else |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1251 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1252 to->vval.v_list = from->vval.v_list; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1253 ++to->vval.v_list->lv_refcount; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1254 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1255 break; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1256 case VAR_DICT: |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1257 if (from->vval.v_dict == NULL) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1258 to->vval.v_dict = NULL; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1259 else |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1260 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1261 to->vval.v_dict = from->vval.v_dict; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1262 ++to->vval.v_dict->dv_refcount; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1263 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1264 break; |
24940
0c415a0f54f9
patch 8.2.3007: Vim9: test for void value fails
Bram Moolenaar <Bram@vim.org>
parents:
24936
diff
changeset
|
1265 case VAR_VOID: |
0c415a0f54f9
patch 8.2.3007: Vim9: test for void value fails
Bram Moolenaar <Bram@vim.org>
parents:
24936
diff
changeset
|
1266 emsg(_(e_cannot_use_void_value)); |
0c415a0f54f9
patch 8.2.3007: Vim9: test for void value fails
Bram Moolenaar <Bram@vim.org>
parents:
24936
diff
changeset
|
1267 break; |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1268 case VAR_UNKNOWN: |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1269 case VAR_ANY: |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1270 internal_error_no_abort("copy_tv(UNKNOWN)"); |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1271 break; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1272 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1273 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1274 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1275 /* |
26644
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1276 * Compare "tv1" and "tv2". |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1277 * Put the result in "tv1". Caller should clear "tv2". |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1278 */ |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1279 int |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1280 typval_compare( |
26644
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1281 typval_T *tv1, // first operand |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1282 typval_T *tv2, // second operand |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1283 exprtype_T type, // operator |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1284 int ic) // ignore case |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1285 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1286 varnumber_T n1, n2; |
26644
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1287 int res = 0; |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1288 int type_is = type == EXPR_IS || type == EXPR_ISNOT; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1289 |
26644
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1290 if (type_is && tv1->v_type != tv2->v_type) |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1291 { |
29994
86eb4aba16c3
patch 9.0.0335: checks for Dictionary argument often give a vague error
Bram Moolenaar <Bram@vim.org>
parents:
29525
diff
changeset
|
1292 // For "is" a different type always means FALSE, for "isnot" |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1293 // it means TRUE. |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1294 n1 = (type == EXPR_ISNOT); |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1295 } |
27924
e6e3abc28c7a
patch 8.2.4487: Vim9: cannot compare with v:null
Bram Moolenaar <Bram@vim.org>
parents:
27034
diff
changeset
|
1296 else if (((tv1->v_type == VAR_SPECIAL && tv1->vval.v_number == VVAL_NULL) |
e6e3abc28c7a
patch 8.2.4487: Vim9: cannot compare with v:null
Bram Moolenaar <Bram@vim.org>
parents:
27034
diff
changeset
|
1297 || (tv2->v_type == VAR_SPECIAL |
e6e3abc28c7a
patch 8.2.4487: Vim9: cannot compare with v:null
Bram Moolenaar <Bram@vim.org>
parents:
27034
diff
changeset
|
1298 && tv2->vval.v_number == VVAL_NULL)) |
e6e3abc28c7a
patch 8.2.4487: Vim9: cannot compare with v:null
Bram Moolenaar <Bram@vim.org>
parents:
27034
diff
changeset
|
1299 && tv1->v_type != tv2->v_type |
e6e3abc28c7a
patch 8.2.4487: Vim9: cannot compare with v:null
Bram Moolenaar <Bram@vim.org>
parents:
27034
diff
changeset
|
1300 && (type == EXPR_EQUAL || type == EXPR_NEQUAL)) |
e6e3abc28c7a
patch 8.2.4487: Vim9: cannot compare with v:null
Bram Moolenaar <Bram@vim.org>
parents:
27034
diff
changeset
|
1301 { |
e6e3abc28c7a
patch 8.2.4487: Vim9: cannot compare with v:null
Bram Moolenaar <Bram@vim.org>
parents:
27034
diff
changeset
|
1302 n1 = typval_compare_null(tv1, tv2); |
e6e3abc28c7a
patch 8.2.4487: Vim9: cannot compare with v:null
Bram Moolenaar <Bram@vim.org>
parents:
27034
diff
changeset
|
1303 if (n1 == MAYBE) |
e6e3abc28c7a
patch 8.2.4487: Vim9: cannot compare with v:null
Bram Moolenaar <Bram@vim.org>
parents:
27034
diff
changeset
|
1304 { |
e6e3abc28c7a
patch 8.2.4487: Vim9: cannot compare with v:null
Bram Moolenaar <Bram@vim.org>
parents:
27034
diff
changeset
|
1305 clear_tv(tv1); |
e6e3abc28c7a
patch 8.2.4487: Vim9: cannot compare with v:null
Bram Moolenaar <Bram@vim.org>
parents:
27034
diff
changeset
|
1306 return FAIL; |
e6e3abc28c7a
patch 8.2.4487: Vim9: cannot compare with v:null
Bram Moolenaar <Bram@vim.org>
parents:
27034
diff
changeset
|
1307 } |
e6e3abc28c7a
patch 8.2.4487: Vim9: cannot compare with v:null
Bram Moolenaar <Bram@vim.org>
parents:
27034
diff
changeset
|
1308 if (type == EXPR_NEQUAL) |
e6e3abc28c7a
patch 8.2.4487: Vim9: cannot compare with v:null
Bram Moolenaar <Bram@vim.org>
parents:
27034
diff
changeset
|
1309 n1 = !n1; |
e6e3abc28c7a
patch 8.2.4487: Vim9: cannot compare with v:null
Bram Moolenaar <Bram@vim.org>
parents:
27034
diff
changeset
|
1310 } |
26644
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1311 else if (tv1->v_type == VAR_BLOB || tv2->v_type == VAR_BLOB) |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1312 { |
26644
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1313 if (typval_compare_blob(tv1, tv2, type, &res) == FAIL) |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1314 { |
26644
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1315 clear_tv(tv1); |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1316 return FAIL; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1317 } |
26644
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1318 n1 = res; |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1319 } |
26644
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1320 else if (tv1->v_type == VAR_LIST || tv2->v_type == VAR_LIST) |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1321 { |
26644
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1322 if (typval_compare_list(tv1, tv2, type, ic, &res) == FAIL) |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1323 { |
26644
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1324 clear_tv(tv1); |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1325 return FAIL; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1326 } |
26644
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1327 n1 = res; |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1328 } |
31604
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1329 else if (tv1->v_type == VAR_CLASS || tv2->v_type == VAR_CLASS) |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1330 { |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1331 if (typval_compare_class(tv1, tv2, type, ic, &res) == FAIL) |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1332 { |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1333 clear_tv(tv1); |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1334 return FAIL; |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1335 } |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1336 n1 = res; |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1337 } |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1338 else if (tv1->v_type == VAR_OBJECT || tv2->v_type == VAR_OBJECT) |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1339 { |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1340 if (typval_compare_object(tv1, tv2, type, ic, &res) == FAIL) |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1341 { |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1342 clear_tv(tv1); |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1343 return FAIL; |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1344 } |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1345 n1 = res; |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1346 } |
26644
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1347 else if (tv1->v_type == VAR_DICT || tv2->v_type == VAR_DICT) |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1348 { |
26644
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1349 if (typval_compare_dict(tv1, tv2, type, ic, &res) == FAIL) |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1350 { |
26644
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1351 clear_tv(tv1); |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1352 return FAIL; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1353 } |
26644
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1354 n1 = res; |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1355 } |
26644
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1356 else if (tv1->v_type == VAR_FUNC || tv2->v_type == VAR_FUNC |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1357 || tv1->v_type == VAR_PARTIAL || tv2->v_type == VAR_PARTIAL) |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1358 { |
26644
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1359 if (typval_compare_func(tv1, tv2, type, ic, &res) == FAIL) |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1360 { |
26644
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1361 clear_tv(tv1); |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1362 return FAIL; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1363 } |
26644
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1364 n1 = res; |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1365 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1366 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1367 // If one of the two variables is a float, compare as a float. |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1368 // When using "=~" or "!~", always compare as string. |
26644
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1369 else if ((tv1->v_type == VAR_FLOAT || tv2->v_type == VAR_FLOAT) |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1370 && type != EXPR_MATCH && type != EXPR_NOMATCH) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1371 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1372 float_T f1, f2; |
26696
1cee572f2fd7
patch 8.2.3877: function does not abort after a type error in compare
Bram Moolenaar <Bram@vim.org>
parents:
26644
diff
changeset
|
1373 int error = FALSE; |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1374 |
26696
1cee572f2fd7
patch 8.2.3877: function does not abort after a type error in compare
Bram Moolenaar <Bram@vim.org>
parents:
26644
diff
changeset
|
1375 f1 = tv_get_float_chk(tv1, &error); |
1cee572f2fd7
patch 8.2.3877: function does not abort after a type error in compare
Bram Moolenaar <Bram@vim.org>
parents:
26644
diff
changeset
|
1376 if (!error) |
1cee572f2fd7
patch 8.2.3877: function does not abort after a type error in compare
Bram Moolenaar <Bram@vim.org>
parents:
26644
diff
changeset
|
1377 f2 = tv_get_float_chk(tv2, &error); |
1cee572f2fd7
patch 8.2.3877: function does not abort after a type error in compare
Bram Moolenaar <Bram@vim.org>
parents:
26644
diff
changeset
|
1378 if (error) |
1cee572f2fd7
patch 8.2.3877: function does not abort after a type error in compare
Bram Moolenaar <Bram@vim.org>
parents:
26644
diff
changeset
|
1379 { |
1cee572f2fd7
patch 8.2.3877: function does not abort after a type error in compare
Bram Moolenaar <Bram@vim.org>
parents:
26644
diff
changeset
|
1380 clear_tv(tv1); |
1cee572f2fd7
patch 8.2.3877: function does not abort after a type error in compare
Bram Moolenaar <Bram@vim.org>
parents:
26644
diff
changeset
|
1381 return FAIL; |
1cee572f2fd7
patch 8.2.3877: function does not abort after a type error in compare
Bram Moolenaar <Bram@vim.org>
parents:
26644
diff
changeset
|
1382 } |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1383 n1 = FALSE; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1384 switch (type) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1385 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1386 case EXPR_IS: |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1387 case EXPR_EQUAL: n1 = (f1 == f2); break; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1388 case EXPR_ISNOT: |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1389 case EXPR_NEQUAL: n1 = (f1 != f2); break; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1390 case EXPR_GREATER: n1 = (f1 > f2); break; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1391 case EXPR_GEQUAL: n1 = (f1 >= f2); break; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1392 case EXPR_SMALLER: n1 = (f1 < f2); break; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1393 case EXPR_SEQUAL: n1 = (f1 <= f2); break; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1394 case EXPR_UNKNOWN: |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1395 case EXPR_MATCH: |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1396 default: break; // avoid gcc warning |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1397 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1398 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1399 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1400 // If one of the two variables is a number, compare as a number. |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1401 // When using "=~" or "!~", always compare as string. |
26644
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1402 else if ((tv1->v_type == VAR_NUMBER || tv2->v_type == VAR_NUMBER) |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1403 && type != EXPR_MATCH && type != EXPR_NOMATCH) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1404 { |
26696
1cee572f2fd7
patch 8.2.3877: function does not abort after a type error in compare
Bram Moolenaar <Bram@vim.org>
parents:
26644
diff
changeset
|
1405 int error = FALSE; |
1cee572f2fd7
patch 8.2.3877: function does not abort after a type error in compare
Bram Moolenaar <Bram@vim.org>
parents:
26644
diff
changeset
|
1406 |
1cee572f2fd7
patch 8.2.3877: function does not abort after a type error in compare
Bram Moolenaar <Bram@vim.org>
parents:
26644
diff
changeset
|
1407 n1 = tv_get_number_chk(tv1, &error); |
1cee572f2fd7
patch 8.2.3877: function does not abort after a type error in compare
Bram Moolenaar <Bram@vim.org>
parents:
26644
diff
changeset
|
1408 if (!error) |
1cee572f2fd7
patch 8.2.3877: function does not abort after a type error in compare
Bram Moolenaar <Bram@vim.org>
parents:
26644
diff
changeset
|
1409 n2 = tv_get_number_chk(tv2, &error); |
1cee572f2fd7
patch 8.2.3877: function does not abort after a type error in compare
Bram Moolenaar <Bram@vim.org>
parents:
26644
diff
changeset
|
1410 if (error) |
1cee572f2fd7
patch 8.2.3877: function does not abort after a type error in compare
Bram Moolenaar <Bram@vim.org>
parents:
26644
diff
changeset
|
1411 { |
1cee572f2fd7
patch 8.2.3877: function does not abort after a type error in compare
Bram Moolenaar <Bram@vim.org>
parents:
26644
diff
changeset
|
1412 clear_tv(tv1); |
1cee572f2fd7
patch 8.2.3877: function does not abort after a type error in compare
Bram Moolenaar <Bram@vim.org>
parents:
26644
diff
changeset
|
1413 return FAIL; |
1cee572f2fd7
patch 8.2.3877: function does not abort after a type error in compare
Bram Moolenaar <Bram@vim.org>
parents:
26644
diff
changeset
|
1414 } |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1415 switch (type) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1416 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1417 case EXPR_IS: |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1418 case EXPR_EQUAL: n1 = (n1 == n2); break; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1419 case EXPR_ISNOT: |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1420 case EXPR_NEQUAL: n1 = (n1 != n2); break; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1421 case EXPR_GREATER: n1 = (n1 > n2); break; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1422 case EXPR_GEQUAL: n1 = (n1 >= n2); break; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1423 case EXPR_SMALLER: n1 = (n1 < n2); break; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1424 case EXPR_SEQUAL: n1 = (n1 <= n2); break; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1425 case EXPR_UNKNOWN: |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1426 case EXPR_MATCH: |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1427 default: break; // avoid gcc warning |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1428 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1429 } |
26644
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1430 else if (in_vim9script() && (tv1->v_type == VAR_BOOL |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1431 || tv2->v_type == VAR_BOOL |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1432 || (tv1->v_type == VAR_SPECIAL |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1433 && tv2->v_type == VAR_SPECIAL))) |
23555
0f7bb6f706f0
patch 8.2.2320: Vim9: no error for comparing bool with string
Bram Moolenaar <Bram@vim.org>
parents:
23553
diff
changeset
|
1434 { |
26644
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1435 if (tv1->v_type != tv2->v_type) |
23555
0f7bb6f706f0
patch 8.2.2320: Vim9: no error for comparing bool with string
Bram Moolenaar <Bram@vim.org>
parents:
23553
diff
changeset
|
1436 { |
0f7bb6f706f0
patch 8.2.2320: Vim9: no error for comparing bool with string
Bram Moolenaar <Bram@vim.org>
parents:
23553
diff
changeset
|
1437 semsg(_(e_cannot_compare_str_with_str), |
26644
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1438 vartype_name(tv1->v_type), vartype_name(tv2->v_type)); |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1439 clear_tv(tv1); |
23555
0f7bb6f706f0
patch 8.2.2320: Vim9: no error for comparing bool with string
Bram Moolenaar <Bram@vim.org>
parents:
23553
diff
changeset
|
1440 return FAIL; |
0f7bb6f706f0
patch 8.2.2320: Vim9: no error for comparing bool with string
Bram Moolenaar <Bram@vim.org>
parents:
23553
diff
changeset
|
1441 } |
26644
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1442 n1 = tv1->vval.v_number; |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1443 n2 = tv2->vval.v_number; |
23555
0f7bb6f706f0
patch 8.2.2320: Vim9: no error for comparing bool with string
Bram Moolenaar <Bram@vim.org>
parents:
23553
diff
changeset
|
1444 switch (type) |
0f7bb6f706f0
patch 8.2.2320: Vim9: no error for comparing bool with string
Bram Moolenaar <Bram@vim.org>
parents:
23553
diff
changeset
|
1445 { |
0f7bb6f706f0
patch 8.2.2320: Vim9: no error for comparing bool with string
Bram Moolenaar <Bram@vim.org>
parents:
23553
diff
changeset
|
1446 case EXPR_IS: |
0f7bb6f706f0
patch 8.2.2320: Vim9: no error for comparing bool with string
Bram Moolenaar <Bram@vim.org>
parents:
23553
diff
changeset
|
1447 case EXPR_EQUAL: n1 = (n1 == n2); break; |
0f7bb6f706f0
patch 8.2.2320: Vim9: no error for comparing bool with string
Bram Moolenaar <Bram@vim.org>
parents:
23553
diff
changeset
|
1448 case EXPR_ISNOT: |
0f7bb6f706f0
patch 8.2.2320: Vim9: no error for comparing bool with string
Bram Moolenaar <Bram@vim.org>
parents:
23553
diff
changeset
|
1449 case EXPR_NEQUAL: n1 = (n1 != n2); break; |
0f7bb6f706f0
patch 8.2.2320: Vim9: no error for comparing bool with string
Bram Moolenaar <Bram@vim.org>
parents:
23553
diff
changeset
|
1450 default: |
25278
55c85c3a43a0
patch 8.2.3176: Vim9: no type error for comparing number with string
Bram Moolenaar <Bram@vim.org>
parents:
25272
diff
changeset
|
1451 semsg(_(e_invalid_operation_for_str), |
26644
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1452 vartype_name(tv1->v_type)); |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1453 clear_tv(tv1); |
23555
0f7bb6f706f0
patch 8.2.2320: Vim9: no error for comparing bool with string
Bram Moolenaar <Bram@vim.org>
parents:
23553
diff
changeset
|
1454 return FAIL; |
0f7bb6f706f0
patch 8.2.2320: Vim9: no error for comparing bool with string
Bram Moolenaar <Bram@vim.org>
parents:
23553
diff
changeset
|
1455 } |
0f7bb6f706f0
patch 8.2.2320: Vim9: no error for comparing bool with string
Bram Moolenaar <Bram@vim.org>
parents:
23553
diff
changeset
|
1456 } |
28217
662d2d5db9a6
patch 8.2.4634: Vim9: cannot initialize a variable to null_list
Bram Moolenaar <Bram@vim.org>
parents:
28103
diff
changeset
|
1457 #ifdef FEAT_JOB_CHANNEL |
662d2d5db9a6
patch 8.2.4634: Vim9: cannot initialize a variable to null_list
Bram Moolenaar <Bram@vim.org>
parents:
28103
diff
changeset
|
1458 else if (tv1->v_type == tv2->v_type |
662d2d5db9a6
patch 8.2.4634: Vim9: cannot initialize a variable to null_list
Bram Moolenaar <Bram@vim.org>
parents:
28103
diff
changeset
|
1459 && (tv1->v_type == VAR_CHANNEL || tv1->v_type == VAR_JOB) |
662d2d5db9a6
patch 8.2.4634: Vim9: cannot initialize a variable to null_list
Bram Moolenaar <Bram@vim.org>
parents:
28103
diff
changeset
|
1460 && (type == EXPR_NEQUAL || type == EXPR_EQUAL)) |
662d2d5db9a6
patch 8.2.4634: Vim9: cannot initialize a variable to null_list
Bram Moolenaar <Bram@vim.org>
parents:
28103
diff
changeset
|
1461 { |
662d2d5db9a6
patch 8.2.4634: Vim9: cannot initialize a variable to null_list
Bram Moolenaar <Bram@vim.org>
parents:
28103
diff
changeset
|
1462 if (tv1->v_type == VAR_CHANNEL) |
662d2d5db9a6
patch 8.2.4634: Vim9: cannot initialize a variable to null_list
Bram Moolenaar <Bram@vim.org>
parents:
28103
diff
changeset
|
1463 n1 = tv1->vval.v_channel == tv2->vval.v_channel; |
662d2d5db9a6
patch 8.2.4634: Vim9: cannot initialize a variable to null_list
Bram Moolenaar <Bram@vim.org>
parents:
28103
diff
changeset
|
1464 else |
662d2d5db9a6
patch 8.2.4634: Vim9: cannot initialize a variable to null_list
Bram Moolenaar <Bram@vim.org>
parents:
28103
diff
changeset
|
1465 n1 = tv1->vval.v_job == tv2->vval.v_job; |
662d2d5db9a6
patch 8.2.4634: Vim9: cannot initialize a variable to null_list
Bram Moolenaar <Bram@vim.org>
parents:
28103
diff
changeset
|
1466 if (type == EXPR_NEQUAL) |
662d2d5db9a6
patch 8.2.4634: Vim9: cannot initialize a variable to null_list
Bram Moolenaar <Bram@vim.org>
parents:
28103
diff
changeset
|
1467 n1 = !n1; |
662d2d5db9a6
patch 8.2.4634: Vim9: cannot initialize a variable to null_list
Bram Moolenaar <Bram@vim.org>
parents:
28103
diff
changeset
|
1468 } |
662d2d5db9a6
patch 8.2.4634: Vim9: cannot initialize a variable to null_list
Bram Moolenaar <Bram@vim.org>
parents:
28103
diff
changeset
|
1469 #endif |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1470 else |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1471 { |
26644
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1472 if (typval_compare_string(tv1, tv2, type, ic, &res) == FAIL) |
25278
55c85c3a43a0
patch 8.2.3176: Vim9: no type error for comparing number with string
Bram Moolenaar <Bram@vim.org>
parents:
25272
diff
changeset
|
1473 { |
26644
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1474 clear_tv(tv1); |
25278
55c85c3a43a0
patch 8.2.3176: Vim9: no type error for comparing number with string
Bram Moolenaar <Bram@vim.org>
parents:
25272
diff
changeset
|
1475 return FAIL; |
55c85c3a43a0
patch 8.2.3176: Vim9: no type error for comparing number with string
Bram Moolenaar <Bram@vim.org>
parents:
25272
diff
changeset
|
1476 } |
26644
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1477 n1 = res; |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1478 } |
26644
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1479 clear_tv(tv1); |
21425
a6c316ef161a
patch 8.2.1263: Vim9: comperators use 'ignorecase' in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents:
21120
diff
changeset
|
1480 if (in_vim9script()) |
a6c316ef161a
patch 8.2.1263: Vim9: comperators use 'ignorecase' in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents:
21120
diff
changeset
|
1481 { |
26644
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1482 tv1->v_type = VAR_BOOL; |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1483 tv1->vval.v_number = n1 ? VVAL_TRUE : VVAL_FALSE; |
21425
a6c316ef161a
patch 8.2.1263: Vim9: comperators use 'ignorecase' in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents:
21120
diff
changeset
|
1484 } |
a6c316ef161a
patch 8.2.1263: Vim9: comperators use 'ignorecase' in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents:
21120
diff
changeset
|
1485 else |
a6c316ef161a
patch 8.2.1263: Vim9: comperators use 'ignorecase' in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents:
21120
diff
changeset
|
1486 { |
26644
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1487 tv1->v_type = VAR_NUMBER; |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1488 tv1->vval.v_number = n1; |
21425
a6c316ef161a
patch 8.2.1263: Vim9: comperators use 'ignorecase' in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents:
21120
diff
changeset
|
1489 } |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1490 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1491 return OK; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1492 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1493 |
23788
d12ef361d9de
patch 8.2.2435: setline() gives an error for some types
Bram Moolenaar <Bram@vim.org>
parents:
23786
diff
changeset
|
1494 /* |
30986
360f286b5869
patch 9.0.0828: various typos
Bram Moolenaar <Bram@vim.org>
parents:
30761
diff
changeset
|
1495 * Compare "tv1" to "tv2" as lists according to "type" and "ic". |
26644
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1496 * Put the result, false or true, in "res". |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1497 * Return FAIL and give an error message when the comparison can't be done. |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1498 */ |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1499 int |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1500 typval_compare_list( |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1501 typval_T *tv1, |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1502 typval_T *tv2, |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1503 exprtype_T type, |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1504 int ic, |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1505 int *res) |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1506 { |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1507 int val = 0; |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1508 |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1509 if (type == EXPR_IS || type == EXPR_ISNOT) |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1510 { |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1511 val = (tv1->v_type == tv2->v_type |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1512 && tv1->vval.v_list == tv2->vval.v_list); |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1513 if (type == EXPR_ISNOT) |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1514 val = !val; |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1515 } |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1516 else if (tv1->v_type != tv2->v_type |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1517 || (type != EXPR_EQUAL && type != EXPR_NEQUAL)) |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1518 { |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1519 if (tv1->v_type != tv2->v_type) |
26952
b34ddbca305c
patch 8.2.4005: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26948
diff
changeset
|
1520 emsg(_(e_can_only_compare_list_with_list)); |
26644
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1521 else |
26952
b34ddbca305c
patch 8.2.4005: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26948
diff
changeset
|
1522 emsg(_(e_invalid_operation_for_list)); |
26644
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1523 return FAIL; |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1524 } |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1525 else |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1526 { |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1527 val = list_equal(tv1->vval.v_list, tv2->vval.v_list, |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1528 ic, FALSE); |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1529 if (type == EXPR_NEQUAL) |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1530 val = !val; |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1531 } |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1532 *res = val; |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1533 return OK; |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1534 } |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1535 |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1536 /* |
28011
d10d5cc8e657
patch 8.2.4530: making comparison with null work changes legacy behavior
Bram Moolenaar <Bram@vim.org>
parents:
27928
diff
changeset
|
1537 * Compare v:null with another type. Return TRUE if the value is NULL. |
27924
e6e3abc28c7a
patch 8.2.4487: Vim9: cannot compare with v:null
Bram Moolenaar <Bram@vim.org>
parents:
27034
diff
changeset
|
1538 */ |
e6e3abc28c7a
patch 8.2.4487: Vim9: cannot compare with v:null
Bram Moolenaar <Bram@vim.org>
parents:
27034
diff
changeset
|
1539 int |
e6e3abc28c7a
patch 8.2.4487: Vim9: cannot compare with v:null
Bram Moolenaar <Bram@vim.org>
parents:
27034
diff
changeset
|
1540 typval_compare_null(typval_T *tv1, typval_T *tv2) |
e6e3abc28c7a
patch 8.2.4487: Vim9: cannot compare with v:null
Bram Moolenaar <Bram@vim.org>
parents:
27034
diff
changeset
|
1541 { |
e6e3abc28c7a
patch 8.2.4487: Vim9: cannot compare with v:null
Bram Moolenaar <Bram@vim.org>
parents:
27034
diff
changeset
|
1542 if ((tv1->v_type == VAR_SPECIAL && tv1->vval.v_number == VVAL_NULL) |
e6e3abc28c7a
patch 8.2.4487: Vim9: cannot compare with v:null
Bram Moolenaar <Bram@vim.org>
parents:
27034
diff
changeset
|
1543 || (tv2->v_type == VAR_SPECIAL && tv2->vval.v_number == VVAL_NULL)) |
e6e3abc28c7a
patch 8.2.4487: Vim9: cannot compare with v:null
Bram Moolenaar <Bram@vim.org>
parents:
27034
diff
changeset
|
1544 { |
e6e3abc28c7a
patch 8.2.4487: Vim9: cannot compare with v:null
Bram Moolenaar <Bram@vim.org>
parents:
27034
diff
changeset
|
1545 typval_T *tv = tv1->v_type == VAR_SPECIAL ? tv2 : tv1; |
e6e3abc28c7a
patch 8.2.4487: Vim9: cannot compare with v:null
Bram Moolenaar <Bram@vim.org>
parents:
27034
diff
changeset
|
1546 |
e6e3abc28c7a
patch 8.2.4487: Vim9: cannot compare with v:null
Bram Moolenaar <Bram@vim.org>
parents:
27034
diff
changeset
|
1547 switch (tv->v_type) |
e6e3abc28c7a
patch 8.2.4487: Vim9: cannot compare with v:null
Bram Moolenaar <Bram@vim.org>
parents:
27034
diff
changeset
|
1548 { |
e6e3abc28c7a
patch 8.2.4487: Vim9: cannot compare with v:null
Bram Moolenaar <Bram@vim.org>
parents:
27034
diff
changeset
|
1549 case VAR_BLOB: return tv->vval.v_blob == NULL; |
27926
46c06f741d12
patch 8.2.4488: build error with +eval but without +channel or +job
Bram Moolenaar <Bram@vim.org>
parents:
27924
diff
changeset
|
1550 #ifdef FEAT_JOB_CHANNEL |
27924
e6e3abc28c7a
patch 8.2.4487: Vim9: cannot compare with v:null
Bram Moolenaar <Bram@vim.org>
parents:
27034
diff
changeset
|
1551 case VAR_CHANNEL: return tv->vval.v_channel == NULL; |
27926
46c06f741d12
patch 8.2.4488: build error with +eval but without +channel or +job
Bram Moolenaar <Bram@vim.org>
parents:
27924
diff
changeset
|
1552 #endif |
27924
e6e3abc28c7a
patch 8.2.4487: Vim9: cannot compare with v:null
Bram Moolenaar <Bram@vim.org>
parents:
27034
diff
changeset
|
1553 case VAR_DICT: return tv->vval.v_dict == NULL; |
e6e3abc28c7a
patch 8.2.4487: Vim9: cannot compare with v:null
Bram Moolenaar <Bram@vim.org>
parents:
27034
diff
changeset
|
1554 case VAR_FUNC: return tv->vval.v_string == NULL; |
27926
46c06f741d12
patch 8.2.4488: build error with +eval but without +channel or +job
Bram Moolenaar <Bram@vim.org>
parents:
27924
diff
changeset
|
1555 #ifdef FEAT_JOB_CHANNEL |
27924
e6e3abc28c7a
patch 8.2.4487: Vim9: cannot compare with v:null
Bram Moolenaar <Bram@vim.org>
parents:
27034
diff
changeset
|
1556 case VAR_JOB: return tv->vval.v_job == NULL; |
27926
46c06f741d12
patch 8.2.4488: build error with +eval but without +channel or +job
Bram Moolenaar <Bram@vim.org>
parents:
27924
diff
changeset
|
1557 #endif |
27924
e6e3abc28c7a
patch 8.2.4487: Vim9: cannot compare with v:null
Bram Moolenaar <Bram@vim.org>
parents:
27034
diff
changeset
|
1558 case VAR_LIST: return tv->vval.v_list == NULL; |
e6e3abc28c7a
patch 8.2.4487: Vim9: cannot compare with v:null
Bram Moolenaar <Bram@vim.org>
parents:
27034
diff
changeset
|
1559 case VAR_PARTIAL: return tv->vval.v_partial == NULL; |
e6e3abc28c7a
patch 8.2.4487: Vim9: cannot compare with v:null
Bram Moolenaar <Bram@vim.org>
parents:
27034
diff
changeset
|
1560 case VAR_STRING: return tv->vval.v_string == NULL; |
27928
ca7a207d83cd
patch 8.2.4489: failing test for comparing v:null with number
Bram Moolenaar <Bram@vim.org>
parents:
27926
diff
changeset
|
1561 |
ca7a207d83cd
patch 8.2.4489: failing test for comparing v:null with number
Bram Moolenaar <Bram@vim.org>
parents:
27926
diff
changeset
|
1562 case VAR_NUMBER: if (!in_vim9script()) |
ca7a207d83cd
patch 8.2.4489: failing test for comparing v:null with number
Bram Moolenaar <Bram@vim.org>
parents:
27926
diff
changeset
|
1563 return tv->vval.v_number == 0; |
ca7a207d83cd
patch 8.2.4489: failing test for comparing v:null with number
Bram Moolenaar <Bram@vim.org>
parents:
27926
diff
changeset
|
1564 break; |
ca7a207d83cd
patch 8.2.4489: failing test for comparing v:null with number
Bram Moolenaar <Bram@vim.org>
parents:
27926
diff
changeset
|
1565 case VAR_FLOAT: if (!in_vim9script()) |
ca7a207d83cd
patch 8.2.4489: failing test for comparing v:null with number
Bram Moolenaar <Bram@vim.org>
parents:
27926
diff
changeset
|
1566 return tv->vval.v_float == 0.0; |
ca7a207d83cd
patch 8.2.4489: failing test for comparing v:null with number
Bram Moolenaar <Bram@vim.org>
parents:
27926
diff
changeset
|
1567 break; |
27924
e6e3abc28c7a
patch 8.2.4487: Vim9: cannot compare with v:null
Bram Moolenaar <Bram@vim.org>
parents:
27034
diff
changeset
|
1568 default: break; |
e6e3abc28c7a
patch 8.2.4487: Vim9: cannot compare with v:null
Bram Moolenaar <Bram@vim.org>
parents:
27034
diff
changeset
|
1569 } |
e6e3abc28c7a
patch 8.2.4487: Vim9: cannot compare with v:null
Bram Moolenaar <Bram@vim.org>
parents:
27034
diff
changeset
|
1570 } |
28217
662d2d5db9a6
patch 8.2.4634: Vim9: cannot initialize a variable to null_list
Bram Moolenaar <Bram@vim.org>
parents:
28103
diff
changeset
|
1571 // although comparing null with number, float or bool is not very useful |
28103
1615d305c71d
patch 8.2.4576: Vim9: error for comparing with null can be annoying
Bram Moolenaar <Bram@vim.org>
parents:
28019
diff
changeset
|
1572 // we won't give an error |
1615d305c71d
patch 8.2.4576: Vim9: error for comparing with null can be annoying
Bram Moolenaar <Bram@vim.org>
parents:
28019
diff
changeset
|
1573 return FALSE; |
27924
e6e3abc28c7a
patch 8.2.4487: Vim9: cannot compare with v:null
Bram Moolenaar <Bram@vim.org>
parents:
27034
diff
changeset
|
1574 } |
e6e3abc28c7a
patch 8.2.4487: Vim9: cannot compare with v:null
Bram Moolenaar <Bram@vim.org>
parents:
27034
diff
changeset
|
1575 |
e6e3abc28c7a
patch 8.2.4487: Vim9: cannot compare with v:null
Bram Moolenaar <Bram@vim.org>
parents:
27034
diff
changeset
|
1576 /* |
30986
360f286b5869
patch 9.0.0828: various typos
Bram Moolenaar <Bram@vim.org>
parents:
30761
diff
changeset
|
1577 * Compare "tv1" to "tv2" as blobs according to "type". |
26644
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1578 * Put the result, false or true, in "res". |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1579 * Return FAIL and give an error message when the comparison can't be done. |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1580 */ |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1581 int |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1582 typval_compare_blob( |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1583 typval_T *tv1, |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1584 typval_T *tv2, |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1585 exprtype_T type, |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1586 int *res) |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1587 { |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1588 int val = 0; |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1589 |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1590 if (type == EXPR_IS || type == EXPR_ISNOT) |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1591 { |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1592 val = (tv1->v_type == tv2->v_type |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1593 && tv1->vval.v_blob == tv2->vval.v_blob); |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1594 if (type == EXPR_ISNOT) |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1595 val = !val; |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1596 } |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1597 else if (tv1->v_type != tv2->v_type |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1598 || (type != EXPR_EQUAL && type != EXPR_NEQUAL)) |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1599 { |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1600 if (tv1->v_type != tv2->v_type) |
26966
ac75c145f0a9
patch 8.2.4012: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
1601 emsg(_(e_can_only_compare_blob_with_blob)); |
26644
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1602 else |
26877
06a137af96f8
patch 8.2.3967: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26782
diff
changeset
|
1603 emsg(_(e_invalid_operation_for_blob)); |
26644
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1604 return FAIL; |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1605 } |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1606 else |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1607 { |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1608 val = blob_equal(tv1->vval.v_blob, tv2->vval.v_blob); |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1609 if (type == EXPR_NEQUAL) |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1610 val = !val; |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1611 } |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1612 *res = val; |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1613 return OK; |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1614 } |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1615 |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1616 /* |
31604
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1617 * Compare "tv1" to "tv2" as classes according to "type". |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1618 * Put the result, false or true, in "res". |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1619 * Return FAIL and give an error message when the comparison can't be done. |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1620 */ |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1621 int |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1622 typval_compare_class( |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1623 typval_T *tv1, |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1624 typval_T *tv2, |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1625 exprtype_T type UNUSED, |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1626 int ic UNUSED, |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1627 int *res) |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1628 { |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1629 // TODO: use "type" |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1630 *res = tv1->vval.v_class == tv2->vval.v_class; |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1631 return OK; |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1632 } |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1633 |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1634 /* |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1635 * Compare "tv1" to "tv2" as objects according to "type". |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1636 * Put the result, false or true, in "res". |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1637 * Return FAIL and give an error message when the comparison can't be done. |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1638 */ |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1639 int |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1640 typval_compare_object( |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1641 typval_T *tv1, |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1642 typval_T *tv2, |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1643 exprtype_T type, |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1644 int ic, |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1645 int *res) |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1646 { |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1647 int res_match = type == EXPR_EQUAL || type == EXPR_IS ? TRUE : FALSE; |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1648 |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1649 if (tv1->vval.v_object == NULL && tv2->vval.v_object == NULL) |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1650 { |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1651 *res = res_match; |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1652 return OK; |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1653 } |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1654 if (tv1->vval.v_object == NULL || tv2->vval.v_object == NULL) |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1655 { |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1656 *res = !res_match; |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1657 return OK; |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1658 } |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1659 |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1660 class_T *cl1 = tv1->vval.v_object->obj_class; |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1661 class_T *cl2 = tv2->vval.v_object->obj_class; |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1662 if (cl1 != cl2 || cl1 == NULL || cl2 == NULL) |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1663 { |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1664 *res = !res_match; |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1665 return OK; |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1666 } |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1667 |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1668 object_T *obj1 = tv1->vval.v_object; |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1669 object_T *obj2 = tv2->vval.v_object; |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1670 if (type == EXPR_IS || type == EXPR_ISNOT) |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1671 { |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1672 *res = obj1 == obj2 ? res_match : !res_match; |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1673 return OK; |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1674 } |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1675 |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1676 for (int i = 0; i < cl1->class_obj_member_count; ++i) |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1677 if (!tv_equal((typval_T *)(obj1 + 1) + i, |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1678 (typval_T *)(obj2 + 1) + i, ic, TRUE)) |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1679 { |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1680 *res = !res_match; |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1681 return OK; |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1682 } |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1683 *res = res_match; |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1684 return OK; |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1685 } |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1686 |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
1687 /* |
30986
360f286b5869
patch 9.0.0828: various typos
Bram Moolenaar <Bram@vim.org>
parents:
30761
diff
changeset
|
1688 * Compare "tv1" to "tv2" as dictionaries according to "type" and "ic". |
26644
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1689 * Put the result, false or true, in "res". |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1690 * Return FAIL and give an error message when the comparison can't be done. |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1691 */ |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1692 int |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1693 typval_compare_dict( |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1694 typval_T *tv1, |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1695 typval_T *tv2, |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1696 exprtype_T type, |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1697 int ic, |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1698 int *res) |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1699 { |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1700 int val; |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1701 |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1702 if (type == EXPR_IS || type == EXPR_ISNOT) |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1703 { |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1704 val = (tv1->v_type == tv2->v_type |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1705 && tv1->vval.v_dict == tv2->vval.v_dict); |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1706 if (type == EXPR_ISNOT) |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1707 val = !val; |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1708 } |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1709 else if (tv1->v_type != tv2->v_type |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1710 || (type != EXPR_EQUAL && type != EXPR_NEQUAL)) |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1711 { |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1712 if (tv1->v_type != tv2->v_type) |
26952
b34ddbca305c
patch 8.2.4005: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26948
diff
changeset
|
1713 emsg(_(e_can_only_compare_dictionary_with_dictionary)); |
26644
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1714 else |
26952
b34ddbca305c
patch 8.2.4005: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26948
diff
changeset
|
1715 emsg(_(e_invalid_operation_for_dictionary)); |
26644
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1716 return FAIL; |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1717 } |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1718 else |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1719 { |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1720 val = dict_equal(tv1->vval.v_dict, tv2->vval.v_dict, ic, FALSE); |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1721 if (type == EXPR_NEQUAL) |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1722 val = !val; |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1723 } |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1724 *res = val; |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1725 return OK; |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1726 } |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1727 |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1728 /* |
30986
360f286b5869
patch 9.0.0828: various typos
Bram Moolenaar <Bram@vim.org>
parents:
30761
diff
changeset
|
1729 * Compare "tv1" to "tv2" as funcrefs according to "type" and "ic". |
26644
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1730 * Put the result, false or true, in "res". |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1731 * Return FAIL and give an error message when the comparison can't be done. |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1732 */ |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1733 int |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1734 typval_compare_func( |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1735 typval_T *tv1, |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1736 typval_T *tv2, |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1737 exprtype_T type, |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1738 int ic, |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1739 int *res) |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1740 { |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1741 int val = 0; |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1742 |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1743 if (type != EXPR_EQUAL && type != EXPR_NEQUAL |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1744 && type != EXPR_IS && type != EXPR_ISNOT) |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1745 { |
26952
b34ddbca305c
patch 8.2.4005: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26948
diff
changeset
|
1746 emsg(_(e_invalid_operation_for_funcrefs)); |
26644
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1747 return FAIL; |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1748 } |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1749 if ((tv1->v_type == VAR_PARTIAL && tv1->vval.v_partial == NULL) |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1750 || (tv2->v_type == VAR_PARTIAL && tv2->vval.v_partial == NULL)) |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1751 // When both partials are NULL, then they are equal. |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1752 // Otherwise they are not equal. |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1753 val = (tv1->vval.v_partial == tv2->vval.v_partial); |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1754 else if (type == EXPR_IS || type == EXPR_ISNOT) |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1755 { |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1756 if (tv1->v_type == VAR_FUNC && tv2->v_type == VAR_FUNC) |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1757 // strings are considered the same if their value is |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1758 // the same |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1759 val = tv_equal(tv1, tv2, ic, FALSE); |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1760 else if (tv1->v_type == VAR_PARTIAL && tv2->v_type == VAR_PARTIAL) |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1761 val = (tv1->vval.v_partial == tv2->vval.v_partial); |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1762 else |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1763 val = FALSE; |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1764 } |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1765 else |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1766 val = tv_equal(tv1, tv2, ic, FALSE); |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1767 if (type == EXPR_NEQUAL || type == EXPR_ISNOT) |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1768 val = !val; |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1769 *res = val; |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1770 return OK; |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1771 } |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1772 |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1773 /* |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1774 * Compare "tv1" to "tv2" as strings according to "type" and "ic". |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1775 * Put the result, false or true, in "res". |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1776 * Return FAIL and give an error message when the comparison can't be done. |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1777 */ |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1778 int |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1779 typval_compare_string( |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1780 typval_T *tv1, |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1781 typval_T *tv2, |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1782 exprtype_T type, |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1783 int ic, |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1784 int *res) |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1785 { |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1786 int i = 0; |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1787 int val = FALSE; |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1788 char_u *s1, *s2; |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1789 char_u buf1[NUMBUFLEN], buf2[NUMBUFLEN]; |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1790 |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1791 if (in_vim9script() |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1792 && ((tv1->v_type != VAR_STRING && tv1->v_type != VAR_SPECIAL) |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1793 || (tv2->v_type != VAR_STRING && tv2->v_type != VAR_SPECIAL))) |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1794 { |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1795 semsg(_(e_cannot_compare_str_with_str), |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1796 vartype_name(tv1->v_type), vartype_name(tv2->v_type)); |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1797 return FAIL; |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1798 } |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1799 s1 = tv_get_string_buf(tv1, buf1); |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1800 s2 = tv_get_string_buf(tv2, buf2); |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1801 if (type != EXPR_MATCH && type != EXPR_NOMATCH) |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1802 i = ic ? MB_STRICMP(s1, s2) : STRCMP(s1, s2); |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1803 switch (type) |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1804 { |
28019
53e2bf6032e5
patch 8.2.4534: Vim9: "is" operator with empty string and null returns true
Bram Moolenaar <Bram@vim.org>
parents:
28011
diff
changeset
|
1805 case EXPR_IS: if (in_vim9script()) |
53e2bf6032e5
patch 8.2.4534: Vim9: "is" operator with empty string and null returns true
Bram Moolenaar <Bram@vim.org>
parents:
28011
diff
changeset
|
1806 { |
53e2bf6032e5
patch 8.2.4534: Vim9: "is" operator with empty string and null returns true
Bram Moolenaar <Bram@vim.org>
parents:
28011
diff
changeset
|
1807 // Really check it is the same string, not just |
53e2bf6032e5
patch 8.2.4534: Vim9: "is" operator with empty string and null returns true
Bram Moolenaar <Bram@vim.org>
parents:
28011
diff
changeset
|
1808 // the same value. |
53e2bf6032e5
patch 8.2.4534: Vim9: "is" operator with empty string and null returns true
Bram Moolenaar <Bram@vim.org>
parents:
28011
diff
changeset
|
1809 val = tv1->vval.v_string == tv2->vval.v_string; |
53e2bf6032e5
patch 8.2.4534: Vim9: "is" operator with empty string and null returns true
Bram Moolenaar <Bram@vim.org>
parents:
28011
diff
changeset
|
1810 break; |
53e2bf6032e5
patch 8.2.4534: Vim9: "is" operator with empty string and null returns true
Bram Moolenaar <Bram@vim.org>
parents:
28011
diff
changeset
|
1811 } |
53e2bf6032e5
patch 8.2.4534: Vim9: "is" operator with empty string and null returns true
Bram Moolenaar <Bram@vim.org>
parents:
28011
diff
changeset
|
1812 // FALLTHROUGH |
26644
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1813 case EXPR_EQUAL: val = (i == 0); break; |
28019
53e2bf6032e5
patch 8.2.4534: Vim9: "is" operator with empty string and null returns true
Bram Moolenaar <Bram@vim.org>
parents:
28011
diff
changeset
|
1814 case EXPR_ISNOT: if (in_vim9script()) |
53e2bf6032e5
patch 8.2.4534: Vim9: "is" operator with empty string and null returns true
Bram Moolenaar <Bram@vim.org>
parents:
28011
diff
changeset
|
1815 { |
53e2bf6032e5
patch 8.2.4534: Vim9: "is" operator with empty string and null returns true
Bram Moolenaar <Bram@vim.org>
parents:
28011
diff
changeset
|
1816 // Really check it is not the same string, not |
53e2bf6032e5
patch 8.2.4534: Vim9: "is" operator with empty string and null returns true
Bram Moolenaar <Bram@vim.org>
parents:
28011
diff
changeset
|
1817 // just a different value. |
53e2bf6032e5
patch 8.2.4534: Vim9: "is" operator with empty string and null returns true
Bram Moolenaar <Bram@vim.org>
parents:
28011
diff
changeset
|
1818 val = tv1->vval.v_string != tv2->vval.v_string; |
53e2bf6032e5
patch 8.2.4534: Vim9: "is" operator with empty string and null returns true
Bram Moolenaar <Bram@vim.org>
parents:
28011
diff
changeset
|
1819 break; |
53e2bf6032e5
patch 8.2.4534: Vim9: "is" operator with empty string and null returns true
Bram Moolenaar <Bram@vim.org>
parents:
28011
diff
changeset
|
1820 } |
53e2bf6032e5
patch 8.2.4534: Vim9: "is" operator with empty string and null returns true
Bram Moolenaar <Bram@vim.org>
parents:
28011
diff
changeset
|
1821 // FALLTHROUGH |
26644
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1822 case EXPR_NEQUAL: val = (i != 0); break; |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1823 case EXPR_GREATER: val = (i > 0); break; |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1824 case EXPR_GEQUAL: val = (i >= 0); break; |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1825 case EXPR_SMALLER: val = (i < 0); break; |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1826 case EXPR_SEQUAL: val = (i <= 0); break; |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1827 |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1828 case EXPR_MATCH: |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1829 case EXPR_NOMATCH: |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1830 val = pattern_match(s2, s1, ic); |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1831 if (type == EXPR_NOMATCH) |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1832 val = !val; |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1833 break; |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1834 |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1835 default: break; // avoid gcc warning |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1836 } |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1837 *res = val; |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1838 return OK; |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1839 } |
2fc1e528e0e1
patch 8.2.3851: Vim9: overhead when comparing string, dict or function
Bram Moolenaar <Bram@vim.org>
parents:
26638
diff
changeset
|
1840 /* |
23788
d12ef361d9de
patch 8.2.2435: setline() gives an error for some types
Bram Moolenaar <Bram@vim.org>
parents:
23786
diff
changeset
|
1841 * Convert any type to a string, never give an error. |
d12ef361d9de
patch 8.2.2435: setline() gives an error for some types
Bram Moolenaar <Bram@vim.org>
parents:
23786
diff
changeset
|
1842 * When "quotes" is TRUE add quotes to a string. |
d12ef361d9de
patch 8.2.2435: setline() gives an error for some types
Bram Moolenaar <Bram@vim.org>
parents:
23786
diff
changeset
|
1843 * Returns an allocated string. |
d12ef361d9de
patch 8.2.2435: setline() gives an error for some types
Bram Moolenaar <Bram@vim.org>
parents:
23786
diff
changeset
|
1844 */ |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1845 char_u * |
23788
d12ef361d9de
patch 8.2.2435: setline() gives an error for some types
Bram Moolenaar <Bram@vim.org>
parents:
23786
diff
changeset
|
1846 typval_tostring(typval_T *arg, int quotes) |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1847 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1848 char_u *tofree; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1849 char_u numbuf[NUMBUFLEN]; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1850 char_u *ret = NULL; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1851 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1852 if (arg == NULL) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1853 return vim_strsave((char_u *)"(does not exist)"); |
23788
d12ef361d9de
patch 8.2.2435: setline() gives an error for some types
Bram Moolenaar <Bram@vim.org>
parents:
23786
diff
changeset
|
1854 if (!quotes && arg->v_type == VAR_STRING) |
d12ef361d9de
patch 8.2.2435: setline() gives an error for some types
Bram Moolenaar <Bram@vim.org>
parents:
23786
diff
changeset
|
1855 { |
d12ef361d9de
patch 8.2.2435: setline() gives an error for some types
Bram Moolenaar <Bram@vim.org>
parents:
23786
diff
changeset
|
1856 ret = vim_strsave(arg->vval.v_string == NULL ? (char_u *)"" |
d12ef361d9de
patch 8.2.2435: setline() gives an error for some types
Bram Moolenaar <Bram@vim.org>
parents:
23786
diff
changeset
|
1857 : arg->vval.v_string); |
d12ef361d9de
patch 8.2.2435: setline() gives an error for some types
Bram Moolenaar <Bram@vim.org>
parents:
23786
diff
changeset
|
1858 } |
d12ef361d9de
patch 8.2.2435: setline() gives an error for some types
Bram Moolenaar <Bram@vim.org>
parents:
23786
diff
changeset
|
1859 else |
d12ef361d9de
patch 8.2.2435: setline() gives an error for some types
Bram Moolenaar <Bram@vim.org>
parents:
23786
diff
changeset
|
1860 { |
d12ef361d9de
patch 8.2.2435: setline() gives an error for some types
Bram Moolenaar <Bram@vim.org>
parents:
23786
diff
changeset
|
1861 ret = tv2string(arg, &tofree, numbuf, 0); |
d12ef361d9de
patch 8.2.2435: setline() gives an error for some types
Bram Moolenaar <Bram@vim.org>
parents:
23786
diff
changeset
|
1862 // Make a copy if we have a value but it's not in allocated memory. |
d12ef361d9de
patch 8.2.2435: setline() gives an error for some types
Bram Moolenaar <Bram@vim.org>
parents:
23786
diff
changeset
|
1863 if (ret != NULL && tofree == NULL) |
d12ef361d9de
patch 8.2.2435: setline() gives an error for some types
Bram Moolenaar <Bram@vim.org>
parents:
23786
diff
changeset
|
1864 ret = vim_strsave(ret); |
d12ef361d9de
patch 8.2.2435: setline() gives an error for some types
Bram Moolenaar <Bram@vim.org>
parents:
23786
diff
changeset
|
1865 } |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1866 return ret; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1867 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1868 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1869 /* |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1870 * Return TRUE if typeval "tv" is locked: Either that value is locked itself |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1871 * or it refers to a List or Dictionary that is locked. |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1872 */ |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1873 int |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1874 tv_islocked(typval_T *tv) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1875 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1876 return (tv->v_lock & VAR_LOCKED) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1877 || (tv->v_type == VAR_LIST |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1878 && tv->vval.v_list != NULL |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1879 && (tv->vval.v_list->lv_lock & VAR_LOCKED)) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1880 || (tv->v_type == VAR_DICT |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1881 && tv->vval.v_dict != NULL |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1882 && (tv->vval.v_dict->dv_lock & VAR_LOCKED)); |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1883 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1884 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1885 static int |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1886 func_equal( |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1887 typval_T *tv1, |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1888 typval_T *tv2, |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1889 int ic) // ignore case |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1890 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1891 char_u *s1, *s2; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1892 dict_T *d1, *d2; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1893 int a1, a2; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1894 int i; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1895 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1896 // empty and NULL function name considered the same |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1897 s1 = tv1->v_type == VAR_FUNC ? tv1->vval.v_string |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1898 : partial_name(tv1->vval.v_partial); |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1899 if (s1 != NULL && *s1 == NUL) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1900 s1 = NULL; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1901 s2 = tv2->v_type == VAR_FUNC ? tv2->vval.v_string |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1902 : partial_name(tv2->vval.v_partial); |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1903 if (s2 != NULL && *s2 == NUL) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1904 s2 = NULL; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1905 if (s1 == NULL || s2 == NULL) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1906 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1907 if (s1 != s2) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1908 return FALSE; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1909 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1910 else if (STRCMP(s1, s2) != 0) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1911 return FALSE; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1912 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1913 // empty dict and NULL dict is different |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1914 d1 = tv1->v_type == VAR_FUNC ? NULL : tv1->vval.v_partial->pt_dict; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1915 d2 = tv2->v_type == VAR_FUNC ? NULL : tv2->vval.v_partial->pt_dict; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1916 if (d1 == NULL || d2 == NULL) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1917 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1918 if (d1 != d2) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1919 return FALSE; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1920 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1921 else if (!dict_equal(d1, d2, ic, TRUE)) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1922 return FALSE; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1923 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1924 // empty list and no list considered the same |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1925 a1 = tv1->v_type == VAR_FUNC ? 0 : tv1->vval.v_partial->pt_argc; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1926 a2 = tv2->v_type == VAR_FUNC ? 0 : tv2->vval.v_partial->pt_argc; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1927 if (a1 != a2) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1928 return FALSE; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1929 for (i = 0; i < a1; ++i) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1930 if (!tv_equal(tv1->vval.v_partial->pt_argv + i, |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1931 tv2->vval.v_partial->pt_argv + i, ic, TRUE)) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1932 return FALSE; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1933 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1934 return TRUE; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1935 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1936 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1937 /* |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1938 * Return TRUE if "tv1" and "tv2" have the same value. |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1939 * Compares the items just like "==" would compare them, but strings and |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1940 * numbers are different. Floats and numbers are also different. |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1941 */ |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1942 int |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1943 tv_equal( |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1944 typval_T *tv1, |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1945 typval_T *tv2, |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1946 int ic, // ignore case |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1947 int recursive) // TRUE when used recursively |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1948 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1949 char_u buf1[NUMBUFLEN], buf2[NUMBUFLEN]; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1950 char_u *s1, *s2; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1951 static int recursive_cnt = 0; // catch recursive loops |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1952 int r; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1953 static int tv_equal_recurse_limit; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1954 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1955 // Catch lists and dicts that have an endless loop by limiting |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1956 // recursiveness to a limit. We guess they are equal then. |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1957 // A fixed limit has the problem of still taking an awful long time. |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1958 // Reduce the limit every time running into it. That should work fine for |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1959 // deeply linked structures that are not recursively linked and catch |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1960 // recursiveness quickly. |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1961 if (!recursive) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1962 tv_equal_recurse_limit = 1000; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1963 if (recursive_cnt >= tv_equal_recurse_limit) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1964 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1965 --tv_equal_recurse_limit; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1966 return TRUE; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1967 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1968 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1969 // For VAR_FUNC and VAR_PARTIAL compare the function name, bound dict and |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1970 // arguments. |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1971 if ((tv1->v_type == VAR_FUNC |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1972 || (tv1->v_type == VAR_PARTIAL && tv1->vval.v_partial != NULL)) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1973 && (tv2->v_type == VAR_FUNC |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1974 || (tv2->v_type == VAR_PARTIAL && tv2->vval.v_partial != NULL))) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1975 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1976 ++recursive_cnt; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1977 r = func_equal(tv1, tv2, ic); |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1978 --recursive_cnt; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1979 return r; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1980 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1981 |
23909
5db7d275543c
patch 8.2.2497: no error when using more than one character for a register
Bram Moolenaar <Bram@vim.org>
parents:
23788
diff
changeset
|
1982 if (tv1->v_type != tv2->v_type |
5db7d275543c
patch 8.2.2497: no error when using more than one character for a register
Bram Moolenaar <Bram@vim.org>
parents:
23788
diff
changeset
|
1983 && ((tv1->v_type != VAR_BOOL && tv1->v_type != VAR_SPECIAL) |
5db7d275543c
patch 8.2.2497: no error when using more than one character for a register
Bram Moolenaar <Bram@vim.org>
parents:
23788
diff
changeset
|
1984 || (tv2->v_type != VAR_BOOL && tv2->v_type != VAR_SPECIAL))) |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1985 return FALSE; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1986 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1987 switch (tv1->v_type) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1988 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1989 case VAR_LIST: |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1990 ++recursive_cnt; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1991 r = list_equal(tv1->vval.v_list, tv2->vval.v_list, ic, TRUE); |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1992 --recursive_cnt; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1993 return r; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1994 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1995 case VAR_DICT: |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1996 ++recursive_cnt; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1997 r = dict_equal(tv1->vval.v_dict, tv2->vval.v_dict, ic, TRUE); |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1998 --recursive_cnt; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1999 return r; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2000 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2001 case VAR_BLOB: |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2002 return blob_equal(tv1->vval.v_blob, tv2->vval.v_blob); |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2003 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2004 case VAR_NUMBER: |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2005 case VAR_BOOL: |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2006 case VAR_SPECIAL: |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2007 return tv1->vval.v_number == tv2->vval.v_number; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2008 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2009 case VAR_STRING: |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2010 s1 = tv_get_string_buf(tv1, buf1); |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2011 s2 = tv_get_string_buf(tv2, buf2); |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2012 return ((ic ? MB_STRICMP(s1, s2) : STRCMP(s1, s2)) == 0); |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2013 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2014 case VAR_FLOAT: |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2015 return tv1->vval.v_float == tv2->vval.v_float; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2016 case VAR_JOB: |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2017 #ifdef FEAT_JOB_CHANNEL |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2018 return tv1->vval.v_job == tv2->vval.v_job; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2019 #endif |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2020 case VAR_CHANNEL: |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2021 #ifdef FEAT_JOB_CHANNEL |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2022 return tv1->vval.v_channel == tv2->vval.v_channel; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2023 #endif |
24606
a4fda40e0bb9
patch 8.2.2842: Vim9: skip argument to searchpair() is not compiled
Bram Moolenaar <Bram@vim.org>
parents:
24424
diff
changeset
|
2024 case VAR_INSTR: |
a4fda40e0bb9
patch 8.2.2842: Vim9: skip argument to searchpair() is not compiled
Bram Moolenaar <Bram@vim.org>
parents:
24424
diff
changeset
|
2025 return tv1->vval.v_instr == tv2->vval.v_instr; |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2026 |
31396
307f68a41b03
patch 9.0.1031: Vim9 class is not implemented yet
Bram Moolenaar <Bram@vim.org>
parents:
31289
diff
changeset
|
2027 case VAR_CLASS: |
31604
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
2028 // A class only exists once, equality is identity. |
31396
307f68a41b03
patch 9.0.1031: Vim9 class is not implemented yet
Bram Moolenaar <Bram@vim.org>
parents:
31289
diff
changeset
|
2029 return tv1->vval.v_class == tv2->vval.v_class; |
307f68a41b03
patch 9.0.1031: Vim9 class is not implemented yet
Bram Moolenaar <Bram@vim.org>
parents:
31289
diff
changeset
|
2030 |
307f68a41b03
patch 9.0.1031: Vim9 class is not implemented yet
Bram Moolenaar <Bram@vim.org>
parents:
31289
diff
changeset
|
2031 case VAR_OBJECT: |
31604
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
2032 (void)typval_compare_object(tv1, tv2, EXPR_EQUAL, ic, &r); |
9b13b3a63bc0
patch 9.0.1134: comparing objects uses identity instead of equality
Bram Moolenaar <Bram@vim.org>
parents:
31525
diff
changeset
|
2033 return r; |
31396
307f68a41b03
patch 9.0.1031: Vim9 class is not implemented yet
Bram Moolenaar <Bram@vim.org>
parents:
31289
diff
changeset
|
2034 |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2035 case VAR_PARTIAL: |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2036 return tv1->vval.v_partial == tv2->vval.v_partial; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2037 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2038 case VAR_FUNC: |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2039 return tv1->vval.v_string == tv2->vval.v_string; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2040 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2041 case VAR_UNKNOWN: |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2042 case VAR_ANY: |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2043 case VAR_VOID: |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2044 break; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2045 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2046 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2047 // VAR_UNKNOWN can be the result of a invalid expression, let's say it |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2048 // does not equal anything, not even itself. |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2049 return FALSE; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2050 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2051 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2052 /* |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2053 * Get an option value. |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2054 * "arg" points to the '&' or '+' before the option name. |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2055 * "arg" is advanced to character after the option name. |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2056 * Return OK or FAIL. |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2057 */ |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2058 int |
21120
4d844a65183d
patch 8.2.1111: inconsistent naming of get_list_tv() and eval_dict()
Bram Moolenaar <Bram@vim.org>
parents:
20925
diff
changeset
|
2059 eval_option( |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2060 char_u **arg, |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2061 typval_T *rettv, // when NULL, only check if option exists |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2062 int evaluate) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2063 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2064 char_u *option_end; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2065 long numval; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2066 char_u *stringval; |
23422
bb0c53f4ef8b
patch 8.2.2254: Vim9: bool option type is number
Bram Moolenaar <Bram@vim.org>
parents:
23276
diff
changeset
|
2067 getoption_T opt_type; |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2068 int c; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2069 int working = (**arg == '+'); // has("+option") |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2070 int ret = OK; |
26441
65ab0b035dd8
patch 8.2.3751: cannot assign a lambda to an option that takes a function
Bram Moolenaar <Bram@vim.org>
parents:
26342
diff
changeset
|
2071 int scope; |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2072 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2073 // Isolate the option name and find its value. |
26441
65ab0b035dd8
patch 8.2.3751: cannot assign a lambda to an option that takes a function
Bram Moolenaar <Bram@vim.org>
parents:
26342
diff
changeset
|
2074 option_end = find_option_end(arg, &scope); |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2075 if (option_end == NULL) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2076 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2077 if (rettv != NULL) |
26602
fac6673086df
patch 8.2.3830: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26585
diff
changeset
|
2078 semsg(_(e_option_name_missing_str), *arg); |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2079 return FAIL; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2080 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2081 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2082 if (!evaluate) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2083 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2084 *arg = option_end; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2085 return OK; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2086 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2087 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2088 c = *option_end; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2089 *option_end = NUL; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2090 opt_type = get_option_value(*arg, &numval, |
26441
65ab0b035dd8
patch 8.2.3751: cannot assign a lambda to an option that takes a function
Bram Moolenaar <Bram@vim.org>
parents:
26342
diff
changeset
|
2091 rettv == NULL ? NULL : &stringval, NULL, scope); |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2092 |
23422
bb0c53f4ef8b
patch 8.2.2254: Vim9: bool option type is number
Bram Moolenaar <Bram@vim.org>
parents:
23276
diff
changeset
|
2093 if (opt_type == gov_unknown) |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2094 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2095 if (rettv != NULL) |
26602
fac6673086df
patch 8.2.3830: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26585
diff
changeset
|
2096 semsg(_(e_unknown_option_str), *arg); |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2097 ret = FAIL; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2098 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2099 else if (rettv != NULL) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2100 { |
23519
cb66613dd9d5
patch 8.2.2302: Vim9: using an option value may use uninitialized memory
Bram Moolenaar <Bram@vim.org>
parents:
23422
diff
changeset
|
2101 rettv->v_lock = 0; |
23422
bb0c53f4ef8b
patch 8.2.2254: Vim9: bool option type is number
Bram Moolenaar <Bram@vim.org>
parents:
23276
diff
changeset
|
2102 if (opt_type == gov_hidden_string) |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2103 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2104 rettv->v_type = VAR_STRING; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2105 rettv->vval.v_string = NULL; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2106 } |
23422
bb0c53f4ef8b
patch 8.2.2254: Vim9: bool option type is number
Bram Moolenaar <Bram@vim.org>
parents:
23276
diff
changeset
|
2107 else if (opt_type == gov_hidden_bool || opt_type == gov_hidden_number) |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2108 { |
23422
bb0c53f4ef8b
patch 8.2.2254: Vim9: bool option type is number
Bram Moolenaar <Bram@vim.org>
parents:
23276
diff
changeset
|
2109 rettv->v_type = in_vim9script() && opt_type == gov_hidden_bool |
bb0c53f4ef8b
patch 8.2.2254: Vim9: bool option type is number
Bram Moolenaar <Bram@vim.org>
parents:
23276
diff
changeset
|
2110 ? VAR_BOOL : VAR_NUMBER; |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2111 rettv->vval.v_number = 0; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2112 } |
23422
bb0c53f4ef8b
patch 8.2.2254: Vim9: bool option type is number
Bram Moolenaar <Bram@vim.org>
parents:
23276
diff
changeset
|
2113 else if (opt_type == gov_bool || opt_type == gov_number) |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2114 { |
23422
bb0c53f4ef8b
patch 8.2.2254: Vim9: bool option type is number
Bram Moolenaar <Bram@vim.org>
parents:
23276
diff
changeset
|
2115 if (in_vim9script() && opt_type == gov_bool) |
bb0c53f4ef8b
patch 8.2.2254: Vim9: bool option type is number
Bram Moolenaar <Bram@vim.org>
parents:
23276
diff
changeset
|
2116 { |
bb0c53f4ef8b
patch 8.2.2254: Vim9: bool option type is number
Bram Moolenaar <Bram@vim.org>
parents:
23276
diff
changeset
|
2117 rettv->v_type = VAR_BOOL; |
bb0c53f4ef8b
patch 8.2.2254: Vim9: bool option type is number
Bram Moolenaar <Bram@vim.org>
parents:
23276
diff
changeset
|
2118 rettv->vval.v_number = numval ? VVAL_TRUE : VVAL_FALSE; |
bb0c53f4ef8b
patch 8.2.2254: Vim9: bool option type is number
Bram Moolenaar <Bram@vim.org>
parents:
23276
diff
changeset
|
2119 } |
bb0c53f4ef8b
patch 8.2.2254: Vim9: bool option type is number
Bram Moolenaar <Bram@vim.org>
parents:
23276
diff
changeset
|
2120 else |
bb0c53f4ef8b
patch 8.2.2254: Vim9: bool option type is number
Bram Moolenaar <Bram@vim.org>
parents:
23276
diff
changeset
|
2121 { |
bb0c53f4ef8b
patch 8.2.2254: Vim9: bool option type is number
Bram Moolenaar <Bram@vim.org>
parents:
23276
diff
changeset
|
2122 rettv->v_type = VAR_NUMBER; |
bb0c53f4ef8b
patch 8.2.2254: Vim9: bool option type is number
Bram Moolenaar <Bram@vim.org>
parents:
23276
diff
changeset
|
2123 rettv->vval.v_number = numval; |
bb0c53f4ef8b
patch 8.2.2254: Vim9: bool option type is number
Bram Moolenaar <Bram@vim.org>
parents:
23276
diff
changeset
|
2124 } |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2125 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2126 else // string option |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2127 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2128 rettv->v_type = VAR_STRING; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2129 rettv->vval.v_string = stringval; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2130 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2131 } |
23422
bb0c53f4ef8b
patch 8.2.2254: Vim9: bool option type is number
Bram Moolenaar <Bram@vim.org>
parents:
23276
diff
changeset
|
2132 else if (working && (opt_type == gov_hidden_bool |
bb0c53f4ef8b
patch 8.2.2254: Vim9: bool option type is number
Bram Moolenaar <Bram@vim.org>
parents:
23276
diff
changeset
|
2133 || opt_type == gov_hidden_number |
bb0c53f4ef8b
patch 8.2.2254: Vim9: bool option type is number
Bram Moolenaar <Bram@vim.org>
parents:
23276
diff
changeset
|
2134 || opt_type == gov_hidden_string)) |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2135 ret = FAIL; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2136 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2137 *option_end = c; // put back for error messages |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2138 *arg = option_end; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2139 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2140 return ret; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2141 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2142 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2143 /* |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2144 * Allocate a variable for a number constant. Also deals with "0z" for blob. |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2145 * Return OK or FAIL. |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2146 */ |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2147 int |
21120
4d844a65183d
patch 8.2.1111: inconsistent naming of get_list_tv() and eval_dict()
Bram Moolenaar <Bram@vim.org>
parents:
20925
diff
changeset
|
2148 eval_number( |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2149 char_u **arg, |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2150 typval_T *rettv, |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2151 int evaluate, |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2152 int want_string UNUSED) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2153 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2154 int len; |
25622
15b54e0a576b
patch 8.2.3347: check for legacy script is incomplete
Bram Moolenaar <Bram@vim.org>
parents:
25585
diff
changeset
|
2155 int skip_quotes = !in_old_script(4); |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2156 char_u *p; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2157 int get_float = FALSE; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2158 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2159 // We accept a float when the format matches |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2160 // "[0-9]\+\.[0-9]\+\([eE][+-]\?[0-9]\+\)\?". This is very |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2161 // strict to avoid backwards compatibility problems. |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2162 // With script version 2 and later the leading digit can be |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2163 // omitted. |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2164 // Don't look for a float after the "." operator, so that |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2165 // ":let vers = 1.2.3" doesn't fail. |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2166 if (**arg == '.') |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2167 p = *arg; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2168 else |
25557
763ea8f075db
patch 8.2.3315: cannot use single quote in a float number for readability
Bram Moolenaar <Bram@vim.org>
parents:
25443
diff
changeset
|
2169 { |
763ea8f075db
patch 8.2.3315: cannot use single quote in a float number for readability
Bram Moolenaar <Bram@vim.org>
parents:
25443
diff
changeset
|
2170 p = *arg + 1; |
763ea8f075db
patch 8.2.3315: cannot use single quote in a float number for readability
Bram Moolenaar <Bram@vim.org>
parents:
25443
diff
changeset
|
2171 if (skip_quotes) |
763ea8f075db
patch 8.2.3315: cannot use single quote in a float number for readability
Bram Moolenaar <Bram@vim.org>
parents:
25443
diff
changeset
|
2172 for (;;) |
763ea8f075db
patch 8.2.3315: cannot use single quote in a float number for readability
Bram Moolenaar <Bram@vim.org>
parents:
25443
diff
changeset
|
2173 { |
763ea8f075db
patch 8.2.3315: cannot use single quote in a float number for readability
Bram Moolenaar <Bram@vim.org>
parents:
25443
diff
changeset
|
2174 if (*p == '\'') |
763ea8f075db
patch 8.2.3315: cannot use single quote in a float number for readability
Bram Moolenaar <Bram@vim.org>
parents:
25443
diff
changeset
|
2175 ++p; |
763ea8f075db
patch 8.2.3315: cannot use single quote in a float number for readability
Bram Moolenaar <Bram@vim.org>
parents:
25443
diff
changeset
|
2176 if (!vim_isdigit(*p)) |
763ea8f075db
patch 8.2.3315: cannot use single quote in a float number for readability
Bram Moolenaar <Bram@vim.org>
parents:
25443
diff
changeset
|
2177 break; |
763ea8f075db
patch 8.2.3315: cannot use single quote in a float number for readability
Bram Moolenaar <Bram@vim.org>
parents:
25443
diff
changeset
|
2178 p = skipdigits(p); |
763ea8f075db
patch 8.2.3315: cannot use single quote in a float number for readability
Bram Moolenaar <Bram@vim.org>
parents:
25443
diff
changeset
|
2179 } |
763ea8f075db
patch 8.2.3315: cannot use single quote in a float number for readability
Bram Moolenaar <Bram@vim.org>
parents:
25443
diff
changeset
|
2180 else |
763ea8f075db
patch 8.2.3315: cannot use single quote in a float number for readability
Bram Moolenaar <Bram@vim.org>
parents:
25443
diff
changeset
|
2181 p = skipdigits(p); |
763ea8f075db
patch 8.2.3315: cannot use single quote in a float number for readability
Bram Moolenaar <Bram@vim.org>
parents:
25443
diff
changeset
|
2182 } |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2183 if (!want_string && p[0] == '.' && vim_isdigit(p[1])) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2184 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2185 get_float = TRUE; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2186 p = skipdigits(p + 2); |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2187 if (*p == 'e' || *p == 'E') |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2188 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2189 ++p; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2190 if (*p == '-' || *p == '+') |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2191 ++p; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2192 if (!vim_isdigit(*p)) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2193 get_float = FALSE; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2194 else |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2195 p = skipdigits(p + 1); |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2196 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2197 if (ASCII_ISALPHA(*p) || *p == '.') |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2198 get_float = FALSE; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2199 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2200 if (get_float) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2201 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2202 float_T f; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2203 |
25557
763ea8f075db
patch 8.2.3315: cannot use single quote in a float number for readability
Bram Moolenaar <Bram@vim.org>
parents:
25443
diff
changeset
|
2204 *arg += string2float(*arg, &f, skip_quotes); |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2205 if (evaluate) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2206 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2207 rettv->v_type = VAR_FLOAT; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2208 rettv->vval.v_float = f; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2209 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2210 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2211 else |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2212 if (**arg == '0' && ((*arg)[1] == 'z' || (*arg)[1] == 'Z')) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2213 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2214 char_u *bp; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2215 blob_T *blob = NULL; // init for gcc |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2216 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2217 // Blob constant: 0z0123456789abcdef |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2218 if (evaluate) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2219 blob = blob_alloc(); |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2220 for (bp = *arg + 2; vim_isxdigit(bp[0]); bp += 2) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2221 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2222 if (!vim_isxdigit(bp[1])) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2223 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2224 if (blob != NULL) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2225 { |
26966
ac75c145f0a9
patch 8.2.4012: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
2226 emsg(_(e_blob_literal_should_have_an_even_number_of_hex_characters)); |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2227 ga_clear(&blob->bv_ga); |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2228 VIM_CLEAR(blob); |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2229 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2230 return FAIL; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2231 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2232 if (blob != NULL) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2233 ga_append(&blob->bv_ga, |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2234 (hex2nr(*bp) << 4) + hex2nr(*(bp+1))); |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2235 if (bp[2] == '.' && vim_isxdigit(bp[3])) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2236 ++bp; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2237 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2238 if (blob != NULL) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2239 rettv_blob_set(rettv, blob); |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2240 *arg = bp; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2241 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2242 else |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2243 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2244 varnumber_T n; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2245 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2246 // decimal, hex or octal number |
25557
763ea8f075db
patch 8.2.3315: cannot use single quote in a float number for readability
Bram Moolenaar <Bram@vim.org>
parents:
25443
diff
changeset
|
2247 vim_str2nr(*arg, NULL, &len, skip_quotes |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2248 ? STR2NR_NO_OCT + STR2NR_QUOTE |
32098
39f4126d2a0d
patch 9.0.1380: CTRL-X on 2**64 subtracts two
Bram Moolenaar <Bram@vim.org>
parents:
31825
diff
changeset
|
2249 : STR2NR_ALL, &n, NULL, 0, TRUE, NULL); |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2250 if (len == 0) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2251 { |
26342
936f77929f16
patch 8.2.3702: first key in dict is seen as curly expression and fails
Bram Moolenaar <Bram@vim.org>
parents:
25806
diff
changeset
|
2252 if (evaluate) |
936f77929f16
patch 8.2.3702: first key in dict is seen as curly expression and fails
Bram Moolenaar <Bram@vim.org>
parents:
25806
diff
changeset
|
2253 semsg(_(e_invalid_expression_str), *arg); |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2254 return FAIL; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2255 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2256 *arg += len; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2257 if (evaluate) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2258 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2259 rettv->v_type = VAR_NUMBER; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2260 rettv->vval.v_number = n; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2261 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2262 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2263 return OK; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2264 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2265 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2266 /* |
28813
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2267 * Evaluate a string constant and put the result in "rettv". |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2268 * "*arg" points to the double quote or to after it when "interpolate" is TRUE. |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2269 * When "interpolate" is TRUE reduce "{{" to "{", reduce "}}" to "}" and stop |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2270 * at a single "{". |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2271 * Return OK or FAIL. |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2272 */ |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2273 int |
28813
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2274 eval_string(char_u **arg, typval_T *rettv, int evaluate, int interpolate) |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2275 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2276 char_u *p; |
20925
0aeac2b45846
patch 8.2.1014: using "name" for a string result is confusing
Bram Moolenaar <Bram@vim.org>
parents:
20627
diff
changeset
|
2277 char_u *end; |
28813
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2278 int extra = interpolate ? 1 : 0; |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2279 int off = interpolate ? 0 : 1; |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2280 int len; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2281 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2282 // Find the end of the string, skipping backslashed characters. |
28813
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2283 for (p = *arg + off; *p != NUL && *p != '"'; MB_PTR_ADV(p)) |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2284 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2285 if (*p == '\\' && p[1] != NUL) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2286 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2287 ++p; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2288 // A "\<x>" form occupies at least 4 characters, and produces up |
28668
53c608c7ea9e
patch 8.2.4858: K_SPECIAL may be escaped twice
Bram Moolenaar <Bram@vim.org>
parents:
28217
diff
changeset
|
2289 // to 9 characters (6 for the char and 3 for a modifier): |
53c608c7ea9e
patch 8.2.4858: K_SPECIAL may be escaped twice
Bram Moolenaar <Bram@vim.org>
parents:
28217
diff
changeset
|
2290 // reserve space for 5 extra. |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2291 if (*p == '<') |
29525
5063dfe96a59
patch 9.0.0104: going beyond allocated memory when evaluating string constant
Bram Moolenaar <Bram@vim.org>
parents:
28821
diff
changeset
|
2292 { |
5063dfe96a59
patch 9.0.0104: going beyond allocated memory when evaluating string constant
Bram Moolenaar <Bram@vim.org>
parents:
28821
diff
changeset
|
2293 int modifiers = 0; |
5063dfe96a59
patch 9.0.0104: going beyond allocated memory when evaluating string constant
Bram Moolenaar <Bram@vim.org>
parents:
28821
diff
changeset
|
2294 int flags = FSK_KEYCODE | FSK_IN_STRING; |
5063dfe96a59
patch 9.0.0104: going beyond allocated memory when evaluating string constant
Bram Moolenaar <Bram@vim.org>
parents:
28821
diff
changeset
|
2295 |
28668
53c608c7ea9e
patch 8.2.4858: K_SPECIAL may be escaped twice
Bram Moolenaar <Bram@vim.org>
parents:
28217
diff
changeset
|
2296 extra += 5; |
29525
5063dfe96a59
patch 9.0.0104: going beyond allocated memory when evaluating string constant
Bram Moolenaar <Bram@vim.org>
parents:
28821
diff
changeset
|
2297 |
5063dfe96a59
patch 9.0.0104: going beyond allocated memory when evaluating string constant
Bram Moolenaar <Bram@vim.org>
parents:
28821
diff
changeset
|
2298 // Skip to the '>' to avoid using '{' inside for string |
5063dfe96a59
patch 9.0.0104: going beyond allocated memory when evaluating string constant
Bram Moolenaar <Bram@vim.org>
parents:
28821
diff
changeset
|
2299 // interpolation. |
5063dfe96a59
patch 9.0.0104: going beyond allocated memory when evaluating string constant
Bram Moolenaar <Bram@vim.org>
parents:
28821
diff
changeset
|
2300 if (p[1] != '*') |
5063dfe96a59
patch 9.0.0104: going beyond allocated memory when evaluating string constant
Bram Moolenaar <Bram@vim.org>
parents:
28821
diff
changeset
|
2301 flags |= FSK_SIMPLIFY; |
5063dfe96a59
patch 9.0.0104: going beyond allocated memory when evaluating string constant
Bram Moolenaar <Bram@vim.org>
parents:
28821
diff
changeset
|
2302 if (find_special_key(&p, &modifiers, flags, NULL) != 0) |
5063dfe96a59
patch 9.0.0104: going beyond allocated memory when evaluating string constant
Bram Moolenaar <Bram@vim.org>
parents:
28821
diff
changeset
|
2303 --p; // leave "p" on the ">" |
5063dfe96a59
patch 9.0.0104: going beyond allocated memory when evaluating string constant
Bram Moolenaar <Bram@vim.org>
parents:
28821
diff
changeset
|
2304 } |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2305 } |
28813
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2306 else if (interpolate && (*p == '{' || *p == '}')) |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2307 { |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2308 if (*p == '{' && p[1] != '{') // start of expression |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2309 break; |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2310 ++p; |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2311 if (p[-1] == '}' && *p != '}') // single '}' is an error |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2312 { |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2313 semsg(_(e_stray_closing_curly_str), *arg); |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2314 return FAIL; |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2315 } |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2316 --extra; // "{{" becomes "{", "}}" becomes "}" |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2317 } |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2318 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2319 |
28813
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2320 if (*p != '"' && !(interpolate && *p == '{')) |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2321 { |
26602
fac6673086df
patch 8.2.3830: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26585
diff
changeset
|
2322 semsg(_(e_missing_double_quote_str), *arg); |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2323 return FAIL; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2324 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2325 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2326 // If only parsing, set *arg and return here |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2327 if (!evaluate) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2328 { |
28813
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2329 *arg = p + off; |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2330 return OK; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2331 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2332 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2333 // Copy the string into allocated memory, handling backslashed |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2334 // characters. |
20925
0aeac2b45846
patch 8.2.1014: using "name" for a string result is confusing
Bram Moolenaar <Bram@vim.org>
parents:
20627
diff
changeset
|
2335 rettv->v_type = VAR_STRING; |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2336 len = (int)(p - *arg + extra); |
20925
0aeac2b45846
patch 8.2.1014: using "name" for a string result is confusing
Bram Moolenaar <Bram@vim.org>
parents:
20627
diff
changeset
|
2337 rettv->vval.v_string = alloc(len); |
0aeac2b45846
patch 8.2.1014: using "name" for a string result is confusing
Bram Moolenaar <Bram@vim.org>
parents:
20627
diff
changeset
|
2338 if (rettv->vval.v_string == NULL) |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2339 return FAIL; |
20925
0aeac2b45846
patch 8.2.1014: using "name" for a string result is confusing
Bram Moolenaar <Bram@vim.org>
parents:
20627
diff
changeset
|
2340 end = rettv->vval.v_string; |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2341 |
28813
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2342 for (p = *arg + off; *p != NUL && *p != '"'; ) |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2343 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2344 if (*p == '\\') |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2345 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2346 switch (*++p) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2347 { |
20925
0aeac2b45846
patch 8.2.1014: using "name" for a string result is confusing
Bram Moolenaar <Bram@vim.org>
parents:
20627
diff
changeset
|
2348 case 'b': *end++ = BS; ++p; break; |
0aeac2b45846
patch 8.2.1014: using "name" for a string result is confusing
Bram Moolenaar <Bram@vim.org>
parents:
20627
diff
changeset
|
2349 case 'e': *end++ = ESC; ++p; break; |
0aeac2b45846
patch 8.2.1014: using "name" for a string result is confusing
Bram Moolenaar <Bram@vim.org>
parents:
20627
diff
changeset
|
2350 case 'f': *end++ = FF; ++p; break; |
0aeac2b45846
patch 8.2.1014: using "name" for a string result is confusing
Bram Moolenaar <Bram@vim.org>
parents:
20627
diff
changeset
|
2351 case 'n': *end++ = NL; ++p; break; |
0aeac2b45846
patch 8.2.1014: using "name" for a string result is confusing
Bram Moolenaar <Bram@vim.org>
parents:
20627
diff
changeset
|
2352 case 'r': *end++ = CAR; ++p; break; |
0aeac2b45846
patch 8.2.1014: using "name" for a string result is confusing
Bram Moolenaar <Bram@vim.org>
parents:
20627
diff
changeset
|
2353 case 't': *end++ = TAB; ++p; break; |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2354 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2355 case 'X': // hex: "\x1", "\x12" |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2356 case 'x': |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2357 case 'u': // Unicode: "\u0023" |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2358 case 'U': |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2359 if (vim_isxdigit(p[1])) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2360 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2361 int n, nr; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2362 int c = toupper(*p); |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2363 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2364 if (c == 'X') |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2365 n = 2; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2366 else if (*p == 'u') |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2367 n = 4; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2368 else |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2369 n = 8; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2370 nr = 0; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2371 while (--n >= 0 && vim_isxdigit(p[1])) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2372 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2373 ++p; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2374 nr = (nr << 4) + hex2nr(*p); |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2375 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2376 ++p; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2377 // For "\u" store the number according to |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2378 // 'encoding'. |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2379 if (c != 'X') |
20925
0aeac2b45846
patch 8.2.1014: using "name" for a string result is confusing
Bram Moolenaar <Bram@vim.org>
parents:
20627
diff
changeset
|
2380 end += (*mb_char2bytes)(nr, end); |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2381 else |
20925
0aeac2b45846
patch 8.2.1014: using "name" for a string result is confusing
Bram Moolenaar <Bram@vim.org>
parents:
20627
diff
changeset
|
2382 *end++ = nr; |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2383 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2384 break; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2385 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2386 // octal: "\1", "\12", "\123" |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2387 case '0': |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2388 case '1': |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2389 case '2': |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2390 case '3': |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2391 case '4': |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2392 case '5': |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2393 case '6': |
20925
0aeac2b45846
patch 8.2.1014: using "name" for a string result is confusing
Bram Moolenaar <Bram@vim.org>
parents:
20627
diff
changeset
|
2394 case '7': *end = *p++ - '0'; |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2395 if (*p >= '0' && *p <= '7') |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2396 { |
20925
0aeac2b45846
patch 8.2.1014: using "name" for a string result is confusing
Bram Moolenaar <Bram@vim.org>
parents:
20627
diff
changeset
|
2397 *end = (*end << 3) + *p++ - '0'; |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2398 if (*p >= '0' && *p <= '7') |
20925
0aeac2b45846
patch 8.2.1014: using "name" for a string result is confusing
Bram Moolenaar <Bram@vim.org>
parents:
20627
diff
changeset
|
2399 *end = (*end << 3) + *p++ - '0'; |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2400 } |
20925
0aeac2b45846
patch 8.2.1014: using "name" for a string result is confusing
Bram Moolenaar <Bram@vim.org>
parents:
20627
diff
changeset
|
2401 ++end; |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2402 break; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2403 |
20627
8bce783af0cb
patch 8.2.0867: using {xxx} for encoding a modifier is not nice
Bram Moolenaar <Bram@vim.org>
parents:
20603
diff
changeset
|
2404 // Special key, e.g.: "\<C-W>" |
20603
c2570baa2e4c
patch 8.2.0855: GUI tests fail because the test doesn't use a modifier
Bram Moolenaar <Bram@vim.org>
parents:
20587
diff
changeset
|
2405 case '<': |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2406 { |
20603
c2570baa2e4c
patch 8.2.0855: GUI tests fail because the test doesn't use a modifier
Bram Moolenaar <Bram@vim.org>
parents:
20587
diff
changeset
|
2407 int flags = FSK_KEYCODE | FSK_IN_STRING; |
c2570baa2e4c
patch 8.2.0855: GUI tests fail because the test doesn't use a modifier
Bram Moolenaar <Bram@vim.org>
parents:
20587
diff
changeset
|
2408 |
20627
8bce783af0cb
patch 8.2.0867: using {xxx} for encoding a modifier is not nice
Bram Moolenaar <Bram@vim.org>
parents:
20603
diff
changeset
|
2409 if (p[1] != '*') |
20603
c2570baa2e4c
patch 8.2.0855: GUI tests fail because the test doesn't use a modifier
Bram Moolenaar <Bram@vim.org>
parents:
20587
diff
changeset
|
2410 flags |= FSK_SIMPLIFY; |
28668
53c608c7ea9e
patch 8.2.4858: K_SPECIAL may be escaped twice
Bram Moolenaar <Bram@vim.org>
parents:
28217
diff
changeset
|
2411 extra = trans_special(&p, end, flags, FALSE, NULL); |
20603
c2570baa2e4c
patch 8.2.0855: GUI tests fail because the test doesn't use a modifier
Bram Moolenaar <Bram@vim.org>
parents:
20587
diff
changeset
|
2412 if (extra != 0) |
c2570baa2e4c
patch 8.2.0855: GUI tests fail because the test doesn't use a modifier
Bram Moolenaar <Bram@vim.org>
parents:
20587
diff
changeset
|
2413 { |
20925
0aeac2b45846
patch 8.2.1014: using "name" for a string result is confusing
Bram Moolenaar <Bram@vim.org>
parents:
20627
diff
changeset
|
2414 end += extra; |
0aeac2b45846
patch 8.2.1014: using "name" for a string result is confusing
Bram Moolenaar <Bram@vim.org>
parents:
20627
diff
changeset
|
2415 if (end >= rettv->vval.v_string + len) |
21120
4d844a65183d
patch 8.2.1111: inconsistent naming of get_list_tv() and eval_dict()
Bram Moolenaar <Bram@vim.org>
parents:
20925
diff
changeset
|
2416 iemsg("eval_string() used more space than allocated"); |
20603
c2570baa2e4c
patch 8.2.0855: GUI tests fail because the test doesn't use a modifier
Bram Moolenaar <Bram@vim.org>
parents:
20587
diff
changeset
|
2417 break; |
c2570baa2e4c
patch 8.2.0855: GUI tests fail because the test doesn't use a modifier
Bram Moolenaar <Bram@vim.org>
parents:
20587
diff
changeset
|
2418 } |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2419 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2420 // FALLTHROUGH |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2421 |
28813
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2422 default: MB_COPY_CHAR(p, end); |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2423 break; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2424 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2425 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2426 else |
28813
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2427 { |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2428 if (interpolate && (*p == '{' || *p == '}')) |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2429 { |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2430 if (*p == '{' && p[1] != '{') // start of expression |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2431 break; |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2432 ++p; // reduce "{{" to "{" and "}}" to "}" |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2433 } |
20925
0aeac2b45846
patch 8.2.1014: using "name" for a string result is confusing
Bram Moolenaar <Bram@vim.org>
parents:
20627
diff
changeset
|
2434 MB_COPY_CHAR(p, end); |
28813
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2435 } |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2436 } |
20925
0aeac2b45846
patch 8.2.1014: using "name" for a string result is confusing
Bram Moolenaar <Bram@vim.org>
parents:
20627
diff
changeset
|
2437 *end = NUL; |
28813
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2438 if (*p == '"' && !interpolate) |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2439 ++p; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2440 *arg = p; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2441 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2442 return OK; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2443 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2444 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2445 /* |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2446 * Allocate a variable for a 'str''ing' constant. |
28813
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2447 * When "interpolate" is TRUE reduce "{{" to "{" and stop at a single "{". |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2448 * Return OK when a "rettv" was set to the string. |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2449 * Return FAIL on error, "rettv" is not set. |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2450 */ |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2451 int |
28813
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2452 eval_lit_string(char_u **arg, typval_T *rettv, int evaluate, int interpolate) |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2453 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2454 char_u *p; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2455 char_u *str; |
28813
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2456 int reduce = interpolate ? -1 : 0; |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2457 int off = interpolate ? 0 : 1; |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2458 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2459 // Find the end of the string, skipping ''. |
28813
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2460 for (p = *arg + off; *p != NUL; MB_PTR_ADV(p)) |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2461 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2462 if (*p == '\'') |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2463 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2464 if (p[1] != '\'') |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2465 break; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2466 ++reduce; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2467 ++p; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2468 } |
28813
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2469 else if (interpolate) |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2470 { |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2471 if (*p == '{') |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2472 { |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2473 if (p[1] != '{') |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2474 break; |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2475 ++p; |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2476 ++reduce; |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2477 } |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2478 else if (*p == '}') |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2479 { |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2480 ++p; |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2481 if (*p != '}') |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2482 { |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2483 semsg(_(e_stray_closing_curly_str), *arg); |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2484 return FAIL; |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2485 } |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2486 ++reduce; |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2487 } |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2488 } |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2489 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2490 |
28813
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2491 if (*p != '\'' && !(interpolate && *p == '{')) |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2492 { |
26602
fac6673086df
patch 8.2.3830: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26585
diff
changeset
|
2493 semsg(_(e_missing_single_quote_str), *arg); |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2494 return FAIL; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2495 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2496 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2497 // If only parsing return after setting "*arg" |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2498 if (!evaluate) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2499 { |
28813
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2500 *arg = p + off; |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2501 return OK; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2502 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2503 |
28813
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2504 // Copy the string into allocated memory, handling '' to ' reduction and |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2505 // any expressions. |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2506 str = alloc((p - *arg) - reduce); |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2507 if (str == NULL) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2508 return FAIL; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2509 rettv->v_type = VAR_STRING; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2510 rettv->vval.v_string = str; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2511 |
28813
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2512 for (p = *arg + off; *p != NUL; ) |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2513 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2514 if (*p == '\'') |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2515 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2516 if (p[1] != '\'') |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2517 break; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2518 ++p; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2519 } |
28813
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2520 else if (interpolate && (*p == '{' || *p == '}')) |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2521 { |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2522 if (*p == '{' && p[1] != '{') |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2523 break; |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2524 ++p; |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2525 } |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2526 MB_COPY_CHAR(p, str); |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2527 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2528 *str = NUL; |
28813
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2529 *arg = p + off; |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2530 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2531 return OK; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2532 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2533 |
28813
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2534 /* |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2535 * Evaluate a single or double quoted string possibly containing expressions. |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2536 * "arg" points to the '$'. The result is put in "rettv". |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2537 * Returns OK or FAIL. |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2538 */ |
28718
723c7d940cba
patch 8.2.4883: string interpolation only works in heredoc
Bram Moolenaar <Bram@vim.org>
parents:
28674
diff
changeset
|
2539 int |
723c7d940cba
patch 8.2.4883: string interpolation only works in heredoc
Bram Moolenaar <Bram@vim.org>
parents:
28674
diff
changeset
|
2540 eval_interp_string(char_u **arg, typval_T *rettv, int evaluate) |
723c7d940cba
patch 8.2.4883: string interpolation only works in heredoc
Bram Moolenaar <Bram@vim.org>
parents:
28674
diff
changeset
|
2541 { |
723c7d940cba
patch 8.2.4883: string interpolation only works in heredoc
Bram Moolenaar <Bram@vim.org>
parents:
28674
diff
changeset
|
2542 typval_T tv; |
28813
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2543 int ret = OK; |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2544 int quote; |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2545 garray_T ga; |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2546 char_u *p; |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2547 |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2548 ga_init2(&ga, 1, 80); |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2549 |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2550 // *arg is on the '$' character, move it to the first string character. |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2551 ++*arg; |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2552 quote = **arg; |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2553 ++*arg; |
28718
723c7d940cba
patch 8.2.4883: string interpolation only works in heredoc
Bram Moolenaar <Bram@vim.org>
parents:
28674
diff
changeset
|
2554 |
28813
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2555 for (;;) |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2556 { |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2557 // Get the string up to the matching quote or to a single '{'. |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2558 // "arg" is advanced to either the quote or the '{'. |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2559 if (quote == '"') |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2560 ret = eval_string(arg, &tv, evaluate, TRUE); |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2561 else |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2562 ret = eval_lit_string(arg, &tv, evaluate, TRUE); |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2563 if (ret == FAIL) |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2564 break; |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2565 if (evaluate) |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2566 { |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2567 ga_concat(&ga, tv.vval.v_string); |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2568 clear_tv(&tv); |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2569 } |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2570 |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2571 if (**arg != '{') |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2572 { |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2573 // found terminating quote |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2574 ++*arg; |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2575 break; |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2576 } |
28821
006d525419fa
patch 8.2.4934: string interpolation fails when not evaluating
Bram Moolenaar <Bram@vim.org>
parents:
28813
diff
changeset
|
2577 p = eval_one_expr_in_str(*arg, &ga, evaluate); |
28813
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2578 if (p == NULL) |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2579 { |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2580 ret = FAIL; |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2581 break; |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2582 } |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2583 *arg = p; |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2584 } |
28718
723c7d940cba
patch 8.2.4883: string interpolation only works in heredoc
Bram Moolenaar <Bram@vim.org>
parents:
28674
diff
changeset
|
2585 |
723c7d940cba
patch 8.2.4883: string interpolation only works in heredoc
Bram Moolenaar <Bram@vim.org>
parents:
28674
diff
changeset
|
2586 rettv->v_type = VAR_STRING; |
28813
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2587 if (ret == FAIL || !evaluate || ga_append(&ga, NUL) == FAIL) |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2588 { |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2589 ga_clear(&ga); |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2590 rettv->vval.v_string = NULL; |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2591 return ret; |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2592 } |
28718
723c7d940cba
patch 8.2.4883: string interpolation only works in heredoc
Bram Moolenaar <Bram@vim.org>
parents:
28674
diff
changeset
|
2593 |
28813
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2594 rettv->vval.v_string = ga.ga_data; |
3626ca6a20ea
patch 8.2.4930: interpolated string expression requires escaping
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
2595 return OK; |
28718
723c7d940cba
patch 8.2.4883: string interpolation only works in heredoc
Bram Moolenaar <Bram@vim.org>
parents:
28674
diff
changeset
|
2596 } |
723c7d940cba
patch 8.2.4883: string interpolation only works in heredoc
Bram Moolenaar <Bram@vim.org>
parents:
28674
diff
changeset
|
2597 |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2598 /* |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2599 * Return a string with the string representation of a variable. |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2600 * If the memory is allocated "tofree" is set to it, otherwise NULL. |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2601 * "numbuf" is used for a number. |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2602 * Puts quotes around strings, so that they can be parsed back by eval(). |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2603 * May return NULL. |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2604 */ |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2605 char_u * |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2606 tv2string( |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2607 typval_T *tv, |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2608 char_u **tofree, |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2609 char_u *numbuf, |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2610 int copyID) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2611 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2612 return echo_string_core(tv, tofree, numbuf, copyID, FALSE, TRUE, FALSE); |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2613 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2614 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2615 /* |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2616 * Get the value of an environment variable. |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2617 * "arg" is pointing to the '$'. It is advanced to after the name. |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2618 * If the environment variable was not set, silently assume it is empty. |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2619 * Return FAIL if the name is invalid. |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2620 */ |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2621 int |
21120
4d844a65183d
patch 8.2.1111: inconsistent naming of get_list_tv() and eval_dict()
Bram Moolenaar <Bram@vim.org>
parents:
20925
diff
changeset
|
2622 eval_env_var(char_u **arg, typval_T *rettv, int evaluate) |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2623 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2624 char_u *string = NULL; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2625 int len; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2626 int cc; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2627 char_u *name; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2628 int mustfree = FALSE; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2629 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2630 ++*arg; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2631 name = *arg; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2632 len = get_env_len(arg); |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2633 if (evaluate) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2634 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2635 if (len == 0) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2636 return FAIL; // invalid empty name |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2637 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2638 cc = name[len]; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2639 name[len] = NUL; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2640 // first try vim_getenv(), fast for normal environment vars |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2641 string = vim_getenv(name, &mustfree); |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2642 if (string != NULL && *string != NUL) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2643 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2644 if (!mustfree) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2645 string = vim_strsave(string); |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2646 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2647 else |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2648 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2649 if (mustfree) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2650 vim_free(string); |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2651 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2652 // next try expanding things like $VIM and ${HOME} |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2653 string = expand_env_save(name - 1); |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2654 if (string != NULL && *string == '$') |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2655 VIM_CLEAR(string); |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2656 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2657 name[len] = cc; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2658 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2659 rettv->v_type = VAR_STRING; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2660 rettv->vval.v_string = string; |
25585
10edc624b171
patch 8.2.3329: v_lock not set when getting value of environment variable
Bram Moolenaar <Bram@vim.org>
parents:
25563
diff
changeset
|
2661 rettv->v_lock = 0; |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2662 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2663 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2664 return OK; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2665 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2666 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2667 /* |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2668 * Get the lnum from the first argument. |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2669 * Also accepts ".", "$", etc., but that only works for the current buffer. |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2670 * Returns -1 on error. |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2671 */ |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2672 linenr_T |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2673 tv_get_lnum(typval_T *argvars) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2674 { |
23276
b79cdad3ea2e
patch 8.2.2184: Vim9: no error when using "2" for a line number
Bram Moolenaar <Bram@vim.org>
parents:
23175
diff
changeset
|
2675 linenr_T lnum = -1; |
30761
c9b31c8eb3b3
patch 9.0.0715: wrong argument for append() gives two error messages
Bram Moolenaar <Bram@vim.org>
parents:
30310
diff
changeset
|
2676 int did_emsg_before = did_emsg; |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2677 |
21831
d8422de73113
patch 8.2.1465: Vim9: subscript not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
21425
diff
changeset
|
2678 if (argvars[0].v_type != VAR_STRING || !in_vim9script()) |
d8422de73113
patch 8.2.1465: Vim9: subscript not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
21425
diff
changeset
|
2679 lnum = (linenr_T)tv_get_number_chk(&argvars[0], NULL); |
30761
c9b31c8eb3b3
patch 9.0.0715: wrong argument for append() gives two error messages
Bram Moolenaar <Bram@vim.org>
parents:
30310
diff
changeset
|
2680 if (lnum <= 0 && did_emsg_before == did_emsg |
c9b31c8eb3b3
patch 9.0.0715: wrong argument for append() gives two error messages
Bram Moolenaar <Bram@vim.org>
parents:
30310
diff
changeset
|
2681 && argvars[0].v_type != VAR_NUMBER) |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2682 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2683 int fnum; |
26782
b7b82279426f
patch 8.2.3919: Vim9: wrong argument for append() results in two errors
Bram Moolenaar <Bram@vim.org>
parents:
26731
diff
changeset
|
2684 pos_T *fp; |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2685 |
24260
ad065f64eb20
patch 8.2.2671: error for line number in legacy script
Bram Moolenaar <Bram@vim.org>
parents:
24258
diff
changeset
|
2686 // no valid number, try using arg like line() |
26782
b7b82279426f
patch 8.2.3919: Vim9: wrong argument for append() results in two errors
Bram Moolenaar <Bram@vim.org>
parents:
26731
diff
changeset
|
2687 fp = var2fpos(&argvars[0], TRUE, &fnum, FALSE); |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2688 if (fp != NULL) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2689 lnum = fp->lnum; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2690 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2691 return lnum; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2692 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2693 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2694 /* |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2695 * Get the lnum from the first argument. |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2696 * Also accepts "$", then "buf" is used. |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2697 * Returns 0 on error. |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2698 */ |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2699 linenr_T |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2700 tv_get_lnum_buf(typval_T *argvars, buf_T *buf) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2701 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2702 if (argvars[0].v_type == VAR_STRING |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2703 && argvars[0].vval.v_string != NULL |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2704 && argvars[0].vval.v_string[0] == '$' |
26782
b7b82279426f
patch 8.2.3919: Vim9: wrong argument for append() results in two errors
Bram Moolenaar <Bram@vim.org>
parents:
26731
diff
changeset
|
2705 && argvars[0].vval.v_string[1] == NUL |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2706 && buf != NULL) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2707 return buf->b_ml.ml_line_count; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2708 return (linenr_T)tv_get_number_chk(&argvars[0], NULL); |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2709 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2710 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2711 /* |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2712 * Get buffer by number or pattern. |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2713 */ |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2714 buf_T * |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2715 tv_get_buf(typval_T *tv, int curtab_only) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2716 { |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2717 char_u *name = tv->vval.v_string; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2718 buf_T *buf; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2719 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2720 if (tv->v_type == VAR_NUMBER) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2721 return buflist_findnr((int)tv->vval.v_number); |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2722 if (tv->v_type != VAR_STRING) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2723 return NULL; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2724 if (name == NULL || *name == NUL) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2725 return curbuf; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2726 if (name[0] == '$' && name[1] == NUL) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2727 return lastbuf; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2728 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2729 buf = buflist_find_by_name(name, curtab_only); |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2730 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2731 // If not found, try expanding the name, like done for bufexists(). |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2732 if (buf == NULL) |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2733 buf = find_buffer(tv); |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2734 |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2735 return buf; |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2736 } |
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2737 |
22025
71f886a48ef5
patch 8.2.1562: Vim9: error when using "%" where a buffer is expected
Bram Moolenaar <Bram@vim.org>
parents:
21913
diff
changeset
|
2738 /* |
71f886a48ef5
patch 8.2.1562: Vim9: error when using "%" where a buffer is expected
Bram Moolenaar <Bram@vim.org>
parents:
21913
diff
changeset
|
2739 * Like tv_get_buf() but give an error message is the type is wrong. |
71f886a48ef5
patch 8.2.1562: Vim9: error when using "%" where a buffer is expected
Bram Moolenaar <Bram@vim.org>
parents:
21913
diff
changeset
|
2740 */ |
71f886a48ef5
patch 8.2.1562: Vim9: error when using "%" where a buffer is expected
Bram Moolenaar <Bram@vim.org>
parents:
21913
diff
changeset
|
2741 buf_T * |
71f886a48ef5
patch 8.2.1562: Vim9: error when using "%" where a buffer is expected
Bram Moolenaar <Bram@vim.org>
parents:
21913
diff
changeset
|
2742 tv_get_buf_from_arg(typval_T *tv) |
71f886a48ef5
patch 8.2.1562: Vim9: error when using "%" where a buffer is expected
Bram Moolenaar <Bram@vim.org>
parents:
21913
diff
changeset
|
2743 { |
71f886a48ef5
patch 8.2.1562: Vim9: error when using "%" where a buffer is expected
Bram Moolenaar <Bram@vim.org>
parents:
21913
diff
changeset
|
2744 buf_T *buf; |
71f886a48ef5
patch 8.2.1562: Vim9: error when using "%" where a buffer is expected
Bram Moolenaar <Bram@vim.org>
parents:
21913
diff
changeset
|
2745 |
71f886a48ef5
patch 8.2.1562: Vim9: error when using "%" where a buffer is expected
Bram Moolenaar <Bram@vim.org>
parents:
21913
diff
changeset
|
2746 ++emsg_off; |
71f886a48ef5
patch 8.2.1562: Vim9: error when using "%" where a buffer is expected
Bram Moolenaar <Bram@vim.org>
parents:
21913
diff
changeset
|
2747 buf = tv_get_buf(tv, FALSE); |
71f886a48ef5
patch 8.2.1562: Vim9: error when using "%" where a buffer is expected
Bram Moolenaar <Bram@vim.org>
parents:
21913
diff
changeset
|
2748 --emsg_off; |
71f886a48ef5
patch 8.2.1562: Vim9: error when using "%" where a buffer is expected
Bram Moolenaar <Bram@vim.org>
parents:
21913
diff
changeset
|
2749 if (buf == NULL |
71f886a48ef5
patch 8.2.1562: Vim9: error when using "%" where a buffer is expected
Bram Moolenaar <Bram@vim.org>
parents:
21913
diff
changeset
|
2750 && tv->v_type != VAR_NUMBER |
71f886a48ef5
patch 8.2.1562: Vim9: error when using "%" where a buffer is expected
Bram Moolenaar <Bram@vim.org>
parents:
21913
diff
changeset
|
2751 && tv->v_type != VAR_STRING) |
71f886a48ef5
patch 8.2.1562: Vim9: error when using "%" where a buffer is expected
Bram Moolenaar <Bram@vim.org>
parents:
21913
diff
changeset
|
2752 // issue errmsg for type error |
71f886a48ef5
patch 8.2.1562: Vim9: error when using "%" where a buffer is expected
Bram Moolenaar <Bram@vim.org>
parents:
21913
diff
changeset
|
2753 (void)tv_get_number(tv); |
71f886a48ef5
patch 8.2.1562: Vim9: error when using "%" where a buffer is expected
Bram Moolenaar <Bram@vim.org>
parents:
21913
diff
changeset
|
2754 return buf; |
71f886a48ef5
patch 8.2.1562: Vim9: error when using "%" where a buffer is expected
Bram Moolenaar <Bram@vim.org>
parents:
21913
diff
changeset
|
2755 } |
71f886a48ef5
patch 8.2.1562: Vim9: error when using "%" where a buffer is expected
Bram Moolenaar <Bram@vim.org>
parents:
21913
diff
changeset
|
2756 |
20587
f502455965c0
patch 8.2.0847: typval related code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2757 #endif // FEAT_EVAL |