OpenCoverage

declare.def

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/bash/src/builtins/declare.def
Source codeSwitch to Preprocessed file
LineSourceCount
1This file is declare.def, from which is created declare.c.-
2It implements the builtins "declare" and "local" in Bash.-
3-
4Copyright (C) 1987-2016 Free Software Foundation, Inc.-
5-
6This file is part of GNU Bash, the Bourne Again SHell.-
7-
8Bash is free software: you can redistribute it and/or modify-
9it under the terms of the GNU General Public License as published by-
10the Free Software Foundation, either version 3 of the License, or-
11(at your option) any later version.-
12-
13Bash is distributed in the hope that it will be useful,-
14but WITHOUT ANY WARRANTY; without even the implied warranty of-
15MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the-
16GNU General Public License for more details.-
17-
18You should have received a copy of the GNU General Public License-
19along with Bash. If not, see <http://www.gnu.org/licenses/>.-
20-
21$PRODUCES declare.c-
22-
23$BUILTIN declare-
24$FUNCTION declare_builtin-
25$SHORT_DOC declare [-aAfFgilnrtux] [-p] [name[=value] ...]-
26Set variable values and attributes.-
27-
28Declare variables and give them attributes. If no NAMEs are given,-
29display the attributes and values of all variables.-
30-
31Options:-
32 -f restrict action or display to function names and definitions-
33 -F restrict display to function names only (plus line number and-
34 source file when debugging)-
35 -g create global variables when used in a shell function; otherwise-
36 ignored-
37 -p display the attributes and value of each NAME-
38-
39Options which set attributes:-
40 -a to make NAMEs indexed arrays (if supported)-
41 -A to make NAMEs associative arrays (if supported)-
42 -i to make NAMEs have the `integer' attribute-
43 -l to convert the value of each NAME to lower case on assignment-
44 -n make NAME a reference to the variable named by its value-
45 -r to make NAMEs readonly-
46 -t to make NAMEs have the `trace' attribute-
47 -u to convert the value of each NAME to upper case on assignment-
48 -x to make NAMEs export-
49-
50Using `+' instead of `-' turns off the given attribute.-
51-
52Variables with the integer attribute have arithmetic evaluation (see-
53the `let' command) performed when the variable is assigned a value.-
54-
55When used in a function, `declare' makes NAMEs local, as with the `local'-
56command. The `-g' option suppresses this behavior.-
57-
58Exit Status:-
59Returns success unless an invalid option is supplied or a variable-
60assignment error occurs.-
61$END-
62-
63$BUILTIN typeset-
64$FUNCTION declare_builtin-
65$SHORT_DOC typeset [-aAfFgilnrtux] [-p] name[=value] ...-
66Set variable values and attributes.-
67-
68A synonym for `declare'. See `help declare'.-
69$END-
70-
71#include <config.h>-
72-
73#if defined (HAVE_UNISTD_H)-
74# ifdef _MINIX-
75# include <sys/types.h>-
76# endif-
77# include <unistd.h>-
78#endif-
79-
80#include <stdio.h>-
81-
82#include "../bashansi.h"-
83#include "../bashintl.h"-
84-
85#include "../shell.h"-
86#include "../flags.h"-
87#include "common.h"-
88#include "builtext.h"-
89#include "bashgetopt.h"-
90-
91static SHELL_VAR *declare_find_variable __P((const char *, int, int));-
92static int declare_internal __P((register WORD_LIST *, int));-
93-
94/* Declare or change variable attributes. */-
95int-
96declare_builtin (list)-
97 register WORD_LIST *list;-
98{-
99 return (declare_internal (list, 0));
executed 1666 times by 1 test: return (declare_internal (list, 0));
Executed by:
  • Self test
1666
100}-
101-
102$BUILTIN local-
103$FUNCTION local_builtin-
104$SHORT_DOC local [option] name[=value] ...-
105Define local variables.-
106-
107Create a local variable called NAME, and give it VALUE. OPTION can-
108be any option accepted by `declare'.-
109-
110Local variables can only be used within a function; they are visible-
111only to the function where they are defined and its children.-
112-
113Exit Status:-
114Returns success unless an invalid option is supplied, a variable-
115assignment error occurs, or the shell is not executing a function.-
116$END-
117int-
118local_builtin (list)-
119 register WORD_LIST *list;-
120{-
121 /* Catch a straight `local --help' before checking function context */-
122 if (list && list->word && STREQ (list->word->word, "--help"))
never executed: __result = (((const unsigned char *) (const char *) ( list->word->word ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "--help" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
listDescription
TRUEevaluated 381 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 8 times by 1 test
Evaluated by:
  • Self test
list->wordDescription
TRUEevaluated 381 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
(list->word->w... ("--help")[0]Description
TRUEevaluated 210 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 171 times by 1 test
Evaluated by:
  • Self test
__extension__ ... )))); }) == 0Description
TRUEnever evaluated
FALSEevaluated 210 times by 1 test
Evaluated by:
  • Self test
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0-381
123 {-
124 builtin_help ();-
125 return (EX_USAGE);
never executed: return (258);
0
126 }-
127 -
128 if (variable_context)
variable_contextDescription
TRUEevaluated 384 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 5 times by 1 test
Evaluated by:
  • Self test
5-384
129 return (declare_internal (list, 1));
executed 384 times by 1 test: return (declare_internal (list, 1));
Executed by:
  • Self test
384
130 else-
131 {-
132 builtin_error (_("can only be used in a function"));-
133 return (EXECUTION_FAILURE);
executed 5 times by 1 test: return (1);
Executed by:
  • Self test
5
134 }-
135}-
136-
137#if defined (ARRAY_VARS)-
138# define DECLARE_OPTS "+acfgilnprtuxAFG"-
139#else-
140# define DECLARE_OPTS "+cfgilnprtuxFG"-
141#endif-
142-
143static SHELL_VAR *-
144declare_find_variable (name, mkglobal, chklocal)-
145 const char *name;-
146 int mkglobal, chklocal;-
147{-
148 SHELL_VAR *var;-
149-
150 if (mkglobal == 0)
mkglobal == 0Description
TRUEevaluated 890 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 56 times by 1 test
Evaluated by:
  • Self test
56-890
151 return (find_variable (name));
executed 890 times by 1 test: return (find_variable (name));
Executed by:
  • Self test
890
152 else if (chklocal)
chklocalDescription
TRUEevaluated 16 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 40 times by 1 test
Evaluated by:
  • Self test
16-40
153 {-
154 var = find_variable (name);-
155 if (var && local_p (var) && var->context == variable_context)
varDescription
TRUEevaluated 12 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 4 times by 1 test
Evaluated by:
  • Self test
((((var)->attr... (0x0000020)))Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 10 times by 1 test
Evaluated by:
  • Self test
var->context =...riable_contextDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-12
156 return var;
executed 2 times by 1 test: return var;
Executed by:
  • Self test
2
157 return (find_global_variable (name));
executed 14 times by 1 test: return (find_global_variable (name));
Executed by:
  • Self test
14
158 }-
159 else-
160 return (find_global_variable (name));
executed 40 times by 1 test: return (find_global_variable (name));
Executed by:
  • Self test
40
161}-
162-
163/* The workhorse function. */-
164static int-
165declare_internal (list, local_var)-
166 register WORD_LIST *list;-
167 int local_var;-
168{-
169 int flags_on, flags_off, *flags;-
170 int any_failed, assign_error, pflag, nodefs, opt, onref, offref;-
171 int mkglobal, chklocal;-
172 char *t, *subscript_start;-
173 SHELL_VAR *var, *refvar, *v;-
174 FUNCTION_DEF *shell_fn;-
175-
176 flags_on = flags_off = any_failed = assign_error = pflag = nodefs = 0;-
177 mkglobal = chklocal = 0;-
178 refvar = (SHELL_VAR *)NULL;-
179 reset_internal_getopt ();-
180 while ((opt = internal_getopt (list, DECLARE_OPTS)) != -1)
(opt = interna...uxAFG")) != -1Description
TRUEevaluated 1890 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 2045 times by 1 test
Evaluated by:
  • Self test
1890-2045
181 {-
182 flags = list_opttype == '+' ? &flags_off : &flags_on;
list_opttype == '+'Description
TRUEevaluated 52 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 1838 times by 1 test
Evaluated by:
  • Self test
52-1838
183-
184 /* If you add options here, see whether or not they need to be added to-
185 the loop in subst.c:shell_expand_word_list() */-
186 switch (opt)-
187 {-
188 case 'a':
executed 298 times by 1 test: case 'a':
Executed by:
  • Self test
298
189#if defined (ARRAY_VARS)-
190 *flags |= att_array;-
191 break;
executed 298 times by 1 test: break;
Executed by:
  • Self test
298
192#else-
193 builtin_usage ();-
194 return (EX_USAGE);-
195#endif-
196 case 'A':
executed 135 times by 1 test: case 'A':
Executed by:
  • Self test
135
197#if defined (ARRAY_VARS)-
198 *flags |= att_assoc;-
199 break;
executed 135 times by 1 test: break;
Executed by:
  • Self test
135
200#else-
201 builtin_usage ();-
202 return (EX_USAGE);-
203#endif-
204 case 'p':
executed 433 times by 1 test: case 'p':
Executed by:
  • Self test
433
205 if (local_var == 0)
local_var == 0Description
TRUEevaluated 433 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-433
206 pflag++;
executed 433 times by 1 test: pflag++;
Executed by:
  • Self test
433
207 break;
executed 433 times by 1 test: break;
Executed by:
  • Self test
433
208 case 'F':
executed 14 times by 1 test: case 'F':
Executed by:
  • Self test
14
209 nodefs++;-
210 *flags |= att_function;-
211 break;
executed 14 times by 1 test: break;
Executed by:
  • Self test
14
212 case 'f':
executed 46 times by 1 test: case 'f':
Executed by:
  • Self test
46
213 *flags |= att_function;-
214 break;
executed 46 times by 1 test: break;
Executed by:
  • Self test
46
215 case 'G':
executed 16 times by 1 test: case 'G':
Executed by:
  • Self test
16
216 if (flags == &flags_on)
flags == &flags_onDescription
TRUEevaluated 16 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-16
217 chklocal = 1;
executed 16 times by 1 test: chklocal = 1;
Executed by:
  • Self test
16
218 /*FALLTHROUGH*/-
219 case 'g':
code before this statement executed 16 times by 1 test: case 'g':
Executed by:
  • Self test
executed 56 times by 1 test: case 'g':
Executed by:
  • Self test
16-56
220 if (flags == &flags_on)
flags == &flags_onDescription
TRUEevaluated 72 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-72
221 mkglobal = 1;
executed 72 times by 1 test: mkglobal = 1;
Executed by:
  • Self test
72
222 break;
executed 72 times by 1 test: break;
Executed by:
  • Self test
72
223 case 'i':
executed 371 times by 1 test: case 'i':
Executed by:
  • Self test
371
224 *flags |= att_integer;-
225 break;
executed 371 times by 1 test: break;
Executed by:
  • Self test
371
226 case 'n':
executed 375 times by 1 test: case 'n':
Executed by:
  • Self test
375
227 *flags |= att_nameref;-
228 break;
executed 375 times by 1 test: break;
Executed by:
  • Self test
375
229 case 'r':
executed 94 times by 1 test: case 'r':
Executed by:
  • Self test
94
230 *flags |= att_readonly;-
231 break;
executed 94 times by 1 test: break;
Executed by:
  • Self test
94
232 case 't':
executed 8 times by 1 test: case 't':
Executed by:
  • Self test
8
233 *flags |= att_trace;-
234 break;
executed 8 times by 1 test: break;
Executed by:
  • Self test
8
235 case 'x':
executed 26 times by 1 test: case 'x':
Executed by:
  • Self test
26
236 *flags |= att_exported;-
237 array_needs_making = 1;-
238 break;
executed 26 times by 1 test: break;
Executed by:
  • Self test
26
239#if defined (CASEMOD_ATTRS)-
240# if defined (CASEMOD_CAPCASE)-
241 case 'c':
executed 1 time by 1 test: case 'c':
Executed by:
  • Self test
1
242 *flags |= att_capcase;-
243 if (flags == &flags_on)
flags == &flags_onDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-1
244 flags_off |= att_uppercase|att_lowercase;
executed 1 time by 1 test: flags_off |= 0x0000100|0x0000200;
Executed by:
  • Self test
1
245 break;
executed 1 time by 1 test: break;
Executed by:
  • Self test
1
246# endif-
247 case 'l':
executed 10 times by 1 test: case 'l':
Executed by:
  • Self test
10
248 *flags |= att_lowercase;-
249 if (flags == &flags_on)
flags == &flags_onDescription
TRUEevaluated 10 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-10
250 flags_off |= att_capcase|att_uppercase;
executed 10 times by 1 test: flags_off |= 0x0000400|0x0000100;
Executed by:
  • Self test
10
251 break;
executed 10 times by 1 test: break;
Executed by:
  • Self test
10
252 case 'u':
executed 2 times by 1 test: case 'u':
Executed by:
  • Self test
2
253 *flags |= att_uppercase;-
254 if (flags == &flags_on)
flags == &flags_onDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-2
255 flags_off |= att_capcase|att_lowercase;
executed 2 times by 1 test: flags_off |= 0x0000400|0x0000200;
Executed by:
  • Self test
2
256 break;
executed 2 times by 1 test: break;
Executed by:
  • Self test
2
257#endif /* CASEMOD_ATTRS */-
258 CASE_HELPOPT;
never executed: return (258);
never executed: case -99:
0
259 default:
executed 5 times by 1 test: default:
Executed by:
  • Self test
5
260 builtin_usage ();-
261 return (EX_USAGE);
executed 5 times by 1 test: return (258);
Executed by:
  • Self test
5
262 }-
263 }-
264-
265 list = loptend;-
266-
267 /* If there are no more arguments left, then we just want to show-
268 some variables. */-
269 if (list == 0) /* declare -[aAfFirtx] */
list == 0Description
TRUEevaluated 32 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 2013 times by 1 test
Evaluated by:
  • Self test
32-2013
270 {-
271 /* Show local variables defined at this context level if this is-
272 the `local' builtin. */-
273 if (local_var)
local_varDescription
TRUEevaluated 3 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 29 times by 1 test
Evaluated by:
  • Self test
3-29
274 {-
275 register SHELL_VAR **vlist;-
276 register int i;-
277-
278 vlist = all_local_variables ();-
279-
280 if (vlist)
vlistDescription
TRUEevaluated 3 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-3
281 {-
282 for (i = 0; vlist[i]; i++)
vlist[i]Description
TRUEevaluated 6 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 3 times by 1 test
Evaluated by:
  • Self test
3-6
283 print_assignment (vlist[i]);
executed 6 times by 1 test: print_assignment (vlist[i]);
Executed by:
  • Self test
6
284-
285 free (vlist);-
286 }
executed 3 times by 1 test: end of block
Executed by:
  • Self test
3
287 }
executed 3 times by 1 test: end of block
Executed by:
  • Self test
3
288 else if (pflag && (flags_on == 0 || flags_on == att_function))
pflagDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test
FALSEevaluated 28 times by 1 test
Evaluated by:
  • Self test
flags_on == 0Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • Self test
flags_on == 0x0000008Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • Self test
0-28
289 show_all_var_attributes (flags_on == 0, nodefs);
never executed: show_all_var_attributes (flags_on == 0, nodefs);
0
290 else if (flags_on == 0)
flags_on == 0Description
TRUEnever evaluated
FALSEevaluated 29 times by 1 test
Evaluated by:
  • Self test
0-29
291 return (set_builtin ((WORD_LIST *)NULL));
never executed: return (set_builtin ((WORD_LIST *) ((void *)0) ));
0
292 else-
293 set_or_show_attributes ((WORD_LIST *)NULL, flags_on, nodefs);
executed 29 times by 1 test: set_or_show_attributes ((WORD_LIST *) ((void *)0) , flags_on, nodefs);
Executed by:
  • Self test
29
294-
295 return (sh_chkwrite (EXECUTION_SUCCESS));
executed 32 times by 1 test: return (sh_chkwrite (0));
Executed by:
  • Self test
32
296 }-
297-
298 if (pflag) /* declare -p [-aAfFirtx] name [name...] */
pflagDescription
TRUEevaluated 432 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 1581 times by 1 test
Evaluated by:
  • Self test
432-1581
299 {-
300 for (any_failed = 0; list; list = list->next)
listDescription
TRUEevaluated 520 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 432 times by 1 test
Evaluated by:
  • Self test
432-520
301 {-
302 if (flags_on & att_function)
flags_on & 0x0000008Description
TRUEevaluated 8 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 512 times by 1 test
Evaluated by:
  • Self test
8-512
303 pflag = show_func_attributes (list->word->word, nodefs);
executed 8 times by 1 test: pflag = show_func_attributes (list->word->word, nodefs);
Executed by:
  • Self test
8
304 else-
305 pflag = show_name_attributes (list->word->word, nodefs);
executed 512 times by 1 test: pflag = show_name_attributes (list->word->word, nodefs);
Executed by:
  • Self test
512
306 if (pflag)
pflagDescription
TRUEevaluated 53 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 467 times by 1 test
Evaluated by:
  • Self test
53-467
307 {-
308 sh_notfound (list->word->word);-
309 any_failed++;-
310 }
executed 53 times by 1 test: end of block
Executed by:
  • Self test
53
311 }
executed 520 times by 1 test: end of block
Executed by:
  • Self test
520
312 return (sh_chkwrite (any_failed ? EXECUTION_FAILURE : EXECUTION_SUCCESS));
executed 432 times by 1 test: return (sh_chkwrite (any_failed ? 1 : 0));
Executed by:
  • Self test
432
313 }-
314-
315#define NEXT_VARIABLE() free (name); list = list->next; continue-
316-
317 /* There are arguments left, so we are making variables. */-
318 while (list) /* declare [-aAfFirx] name [name ...] */
listDescription
TRUEevaluated 1803 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 1572 times by 1 test
Evaluated by:
  • Self test
1572-1803
319 {-
320 char *value, *name, *oldname;-
321 int offset, aflags, wflags, created_var, namelen;-
322 int assoc_noexpand;-
323#if defined (ARRAY_VARS)-
324 int making_array_special, compound_array_assign, simple_array_assign;-
325 int var_exists, array_exists, creating_array, array_subscript_assignment;-
326#endif-
327-
328 name = savestring (list->word->word);-
329 wflags = list->word->flags;-
330#if defined (ARRAY_VARS)-
331 assoc_noexpand = assoc_expand_once && (wflags & W_ASSIGNMENT);
assoc_expand_onceDescription
TRUEevaluated 7 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 1796 times by 1 test
Evaluated by:
  • Self test
(wflags & 0x000004)Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test
FALSEevaluated 6 times by 1 test
Evaluated by:
  • Self test
1-1796
332#else-
333 assoc_noexpand = 0;-
334#endif-
335 offset = assignment (name, assoc_noexpand ? 2 : 0);-
336 aflags = 0;-
337 created_var = 0;-
338-
339 if (local_var && variable_context && STREQ (name, "-"))
never executed: __result = (((const unsigned char *) (const char *) ( name ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "-" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
local_varDescription
TRUEevaluated 520 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 1283 times by 1 test
Evaluated by:
  • Self test
variable_contextDescription
TRUEevaluated 520 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
(name)[0] == ("-")[0]Description
TRUEnever evaluated
FALSEevaluated 520 times by 1 test
Evaluated by:
  • Self test
__extension__ ... )))); }) == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0-1283
340 {-
341 var = make_local_variable ("-", 0);-
342 FREE (value_cell (var)); /* just in case */
never executed: sh_xfree((((var)->value)), "./declare.def", 342);
((var)->value)Description
TRUEnever evaluated
FALSEnever evaluated
0
343 value = get_current_options ();-
344 var_setvalue (var, value);-
345 VSETATTR (var, att_invisible);-
346 NEXT_VARIABLE ();
never executed: continue;
0
347 }-
348-
349 if (offset) /* declare [-aAfFirx] name=value */
offsetDescription
TRUEevaluated 824 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 979 times by 1 test
Evaluated by:
  • Self test
824-979
350 {-
351 name[offset] = '\0';-
352 value = name + offset + 1;-
353 if (name[offset - 1] == '+')
name[offset - 1] == '+'Description
TRUEevaluated 5 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 819 times by 1 test
Evaluated by:
  • Self test
5-819
354 {-
355 aflags |= ASS_APPEND;-
356 name[offset - 1] = '\0';-
357 }
executed 5 times by 1 test: end of block
Executed by:
  • Self test
5
358 }
executed 824 times by 1 test: end of block
Executed by:
  • Self test
824
359 else-
360 value = "";
executed 979 times by 1 test: value = "";
Executed by:
  • Self test
979
361-
362 /* Do some lexical error checking on the LHS and RHS of the assignment-
363 that is specific to nameref variables. */-
364 if (flags_on & att_nameref)
flags_on & 0x0000800Description
TRUEevaluated 362 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 1441 times by 1 test
Evaluated by:
  • Self test
362-1441
365 {-
366#if defined (ARRAY_VARS)-
367 if (valid_array_reference (name, 0))
valid_array_re...ence (name, 0)Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test
FALSEevaluated 361 times by 1 test
Evaluated by:
  • Self test
1-361
368 {-
369 builtin_error (_("%s: reference variable cannot be an array"), name);-
370 assign_error++;-
371 NEXT_VARIABLE ();
executed 1 time by 1 test: continue;
Executed by:
  • Self test
1
372 }-
373 else-
374#endif-
375 /* disallow self references at global scope, warn at function scope */-
376 if (check_selfref (name, value, 0))
check_selfref (name, value, 0)Description
TRUEevaluated 11 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 350 times by 1 test
Evaluated by:
  • Self test
11-350
377 {-
378 if (variable_context == 0)
variable_context == 0Description
TRUEevaluated 3 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 8 times by 1 test
Evaluated by:
  • Self test
3-8
379 {-
380 builtin_error (_("%s: nameref variable self references not allowed"), name);-
381 assign_error++;-
382 NEXT_VARIABLE ();
executed 3 times by 1 test: continue;
Executed by:
  • Self test
3
383 }-
384 else-
385 builtin_warning (_("%s: circular name reference"), name);
executed 8 times by 1 test: builtin_warning ( dcgettext (((void *)0), "%s: circular name reference" , 5) , name);
Executed by:
  • Self test
8
386 }-
387#if 1-
388 if (value && *value && (aflags & ASS_APPEND) == 0 && valid_nameref_value (value, 1) == 0)
valueDescription
TRUEevaluated 358 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
*valueDescription
TRUEevaluated 170 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 188 times by 1 test
Evaluated by:
  • Self test
(aflags & 0x0001) == 0Description
TRUEevaluated 168 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 2 times by 1 test
Evaluated by:
  • Self test
valid_nameref_...value, 1) == 0Description
TRUEevaluated 8 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 160 times by 1 test
Evaluated by:
  • Self test
0-358
389 {-
390 builtin_error (_("`%s': invalid variable name for name reference"), value);-
391 assign_error++;-
392 NEXT_VARIABLE ();
executed 8 times by 1 test: continue;
Executed by:
  • Self test
8
393 }-
394#endif-
395 }
executed 350 times by 1 test: end of block
Executed by:
  • Self test
350
396-
397restart_new_var_name:
code before this statement executed 1791 times by 1 test: restart_new_var_name:
Executed by:
  • Self test
1791
398#if defined (ARRAY_VARS)-
399 var_exists = array_exists = creating_array = 0;-
400 compound_array_assign = simple_array_assign = 0;-
401 array_subscript_assignment = 0;-
402 subscript_start = (char *)NULL;-
403 if ((t = strchr (name, '[')) && (flags_on & att_function) == 0) /* ] */
(t = (__extens...me , '[' ))) )Description
TRUEevaluated 96 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 1708 times by 1 test
Evaluated by:
  • Self test
__builtin_constant_p ( '[' )Description
TRUEevaluated 1804 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
!__builtin_constant_p ( name )Description
TRUEevaluated 1804 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
( '[' ) == '\0'Description
TRUEnever evaluated
FALSEevaluated 1804 times by 1 test
Evaluated by:
  • Self test
(flags_on & 0x0000008) == 0Description
TRUEevaluated 96 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-1804
404 {-
405 /* If offset != 0 we have already validated any array reference-
406 because assignment() calls skipsubscript() */-
407 if (offset == 0 && valid_array_reference (name, 0) == 0)
offset == 0Description
TRUEevaluated 39 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 57 times by 1 test
Evaluated by:
  • Self test
valid_array_re...(name, 0) == 0Description
TRUEevaluated 4 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 35 times by 1 test
Evaluated by:
  • Self test
4-57
408 {-
409 sh_invalidid (name);-
410 assign_error++;-
411 NEXT_VARIABLE ();
executed 4 times by 1 test: continue;
Executed by:
  • Self test
4
412 }-
413 subscript_start = t;-
414 *t = '\0';-
415 making_array_special = 1; /* XXX - should this check offset? */-
416 array_subscript_assignment = offset != 0;-
417 }
executed 92 times by 1 test: end of block
Executed by:
  • Self test
92
418 else-
419 making_array_special = 0;
executed 1708 times by 1 test: making_array_special = 0;
Executed by:
  • Self test
1708
420#endif-
421-
422 /* If we're in posix mode or not looking for a shell function (since-
423 shell function names don't have to be valid identifiers when the-
424 shell's not in posix mode), check whether or not the argument is a-
425 valid, well-formed shell identifier. */-
426 if ((posixly_correct || (flags_on & att_function) == 0) && legal_identifier (name) == 0)
posixly_correctDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 1798 times by 1 test
Evaluated by:
  • Self test
(flags_on & 0x0000008) == 0Description
TRUEevaluated 1756 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 42 times by 1 test
Evaluated by:
  • Self test
legal_identifier (name) == 0Description
TRUEevaluated 10 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 1748 times by 1 test
Evaluated by:
  • Self test
2-1798
427 {-
428 sh_invalidid (name);-
429 assign_error++;-
430 NEXT_VARIABLE ();
executed 10 times by 1 test: continue;
Executed by:
  • Self test
10
431 }-
432-
433 /* If VARIABLE_CONTEXT has a non-zero value, then we are executing-
434 inside of a function. This means we should make local variables,-
435 not global ones. */-
436-
437 /* XXX - this has consequences when we're making a local copy of a-
438 variable that was in the temporary environment. Watch out-
439 for this. */-
440 refvar = (SHELL_VAR *)NULL;-
441 if (variable_context && mkglobal == 0 && ((flags_on & att_function) == 0))
variable_contextDescription
TRUEevaluated 749 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 1041 times by 1 test
Evaluated by:
  • Self test
mkglobal == 0Description
TRUEevaluated 703 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 46 times by 1 test
Evaluated by:
  • Self test
((flags_on & 0x0000008) == 0)Description
TRUEevaluated 703 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-1041
442 {-
443 /* check name for validity here? */-
444#if defined (ARRAY_VARS)-
445 if (flags_on & att_assoc)
flags_on & 0x0000040Description
TRUEevaluated 3 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 700 times by 1 test
Evaluated by:
  • Self test
3-700
446 var = make_local_assoc_variable (name);
executed 3 times by 1 test: var = make_local_assoc_variable (name);
Executed by:
  • Self test
3
447 else if ((flags_on & att_array) || making_array_special)
(flags_on & 0x0000004)Description
TRUEevaluated 23 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 677 times by 1 test
Evaluated by:
  • Self test
making_array_specialDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test
FALSEevaluated 676 times by 1 test
Evaluated by:
  • Self test
1-677
448 var = make_local_array_variable (name, making_array_special);
executed 24 times by 1 test: var = make_local_array_variable (name, making_array_special);
Executed by:
  • Self test
24
449 else-
450#endif-
451 if (offset == 0 && (flags_on & att_nameref))
offset == 0Description
TRUEevaluated 259 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 417 times by 1 test
Evaluated by:
  • Self test
(flags_on & 0x0000800)Description
TRUEevaluated 21 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 238 times by 1 test
Evaluated by:
  • Self test
21-417
452 {-
453 /* First look for refvar at current scope */-
454 refvar = find_variable_last_nameref (name, 1);-
455 var = find_variable (name);-
456 /* VARIABLE_CONTEXT != 0, so we are attempting to create or modify-
457 the attributes for a local variable at the same scope. If we've-
458 used a reference from a previous context to resolve VAR, we-
459 want to throw REFVAR and VAR away and create a new local var. */-
460 if (refvar && refvar->context != variable_context)
refvarDescription
TRUEevaluated 16 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 5 times by 1 test
Evaluated by:
  • Self test
refvar->contex...riable_contextDescription
TRUEevaluated 3 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 13 times by 1 test
Evaluated by:
  • Self test
3-16
461 {-
462 refvar = 0;-
463 var = make_local_variable (name, 0);-
464 }
executed 3 times by 1 test: end of block
Executed by:
  • Self test
3
465 else if (refvar && refvar->context == variable_context)
refvarDescription
TRUEevaluated 13 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 5 times by 1 test
Evaluated by:
  • Self test
refvar->contex...riable_contextDescription
TRUEevaluated 13 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-13
466 var = refvar;
executed 13 times by 1 test: var = refvar;
Executed by:
  • Self test
13
467 /* Maybe we just want to create a new local variable */-
468 else if (var == 0 || var->context != variable_context)
var == 0Description
TRUEevaluated 5 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
var->context !...riable_contextDescription
TRUEnever evaluated
FALSEnever evaluated
0-5
469 var = make_local_variable (name, 0);
executed 5 times by 1 test: var = make_local_variable (name, 0);
Executed by:
  • Self test
5
470 /* otherwise we have a var at the right context */-
471 }
executed 21 times by 1 test: end of block
Executed by:
  • Self test
21
472 else-
473 /* XXX - check name for validity here with valid_nameref_value */-
474 var = make_local_variable (name, 0); /* sets att_invisible for new vars */
executed 655 times by 1 test: var = make_local_variable (name, 0);
Executed by:
  • Self test
655
475 if (var == 0)
var == 0Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 701 times by 1 test
Evaluated by:
  • Self test
2-701
476 {-
477 any_failed++;-
478 NEXT_VARIABLE ();
executed 2 times by 1 test: continue;
Executed by:
  • Self test
2
479 }-
480 if (var && nameref_p (var) && readonly_p (var) && nameref_cell (var) && (flags_off & att_nameref))
varDescription
TRUEevaluated 701 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
((((var)->attr... (0x0000800)))Description
TRUEevaluated 10 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 691 times by 1 test
Evaluated by:
  • Self test
((((var)->attr... (0x0000002)))Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 8 times by 1 test
Evaluated by:
  • Self test
((var)->value)Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test
FALSEevaluated 1 time by 1 test
Evaluated by:
  • Self test
(flags_off & 0x0000800)Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-701
481 {-
482 sh_readonly (name);-
483 any_failed++;-
484 NEXT_VARIABLE ();
executed 1 time by 1 test: continue;
Executed by:
  • Self test
1
485 }-
486 }
executed 700 times by 1 test: end of block
Executed by:
  • Self test
700
487 else-
488 var = (SHELL_VAR *)NULL;
executed 1087 times by 1 test: var = (SHELL_VAR *) ((void *)0) ;
Executed by:
  • Self test
1087
489-
490 /* If we are declaring a function, then complain about it in some way.-
491 We don't let people make functions by saying `typeset -f foo=bar'. */-
492-
493 /* There should be a way, however, to let people look at a particular-
494 function definition by saying `typeset -f foo'. */-
495-
496 if (flags_on & att_function)
flags_on & 0x0000008Description
TRUEevaluated 42 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 1745 times by 1 test
Evaluated by:
  • Self test
42-1745
497 {-
498 if (offset) /* declare -f [-rix] foo=bar */
offsetDescription
TRUEevaluated 5 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 37 times by 1 test
Evaluated by:
  • Self test
5-37
499 {-
500 builtin_error (_("cannot use `-f' to make functions"));-
501 free (name);-
502 return (EXECUTION_FAILURE);
executed 5 times by 1 test: return (1);
Executed by:
  • Self test
5
503 }-
504 else /* declare -f [-rx] name [name...] */-
505 {-
506 var = find_function (name);-
507-
508 if (var)
varDescription
TRUEevaluated 35 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 2 times by 1 test
Evaluated by:
  • Self test
2-35
509 {-
510 if (readonly_p (var) && (flags_off & att_readonly))
((((var)->attr... (0x0000002)))Description
TRUEevaluated 10 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 25 times by 1 test
Evaluated by:
  • Self test
(flags_off & 0x0000002)Description
TRUEevaluated 5 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 5 times by 1 test
Evaluated by:
  • Self test
5-25
511 {-
512 builtin_error (_("%s: readonly function"), name);-
513 any_failed++;-
514 NEXT_VARIABLE ();
executed 5 times by 1 test: continue;
Executed by:
  • Self test
5
515 }-
516-
517 /* declare -[Ff] name [name...] */-
518 if (flags_on == att_function && flags_off == 0)
flags_on == 0x0000008Description
TRUEevaluated 19 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 11 times by 1 test
Evaluated by:
  • Self test
flags_off == 0Description
TRUEevaluated 19 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-19
519 {-
520#if defined (DEBUGGER)-
521 if (nodefs && debugging_mode)
nodefsDescription
TRUEevaluated 5 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 14 times by 1 test
Evaluated by:
  • Self test
debugging_modeDescription
TRUEnever evaluated
FALSEevaluated 5 times by 1 test
Evaluated by:
  • Self test
0-14
522 {-
523 shell_fn = find_function_def (var->name);-
524 if (shell_fn)
shell_fnDescription
TRUEnever evaluated
FALSEnever evaluated
0
525 printf ("%s %d %s\n", var->name, shell_fn->line, shell_fn->source_file);
never executed: printf ("%s %d %s\n", var->name, shell_fn->line, shell_fn->source_file);
0
526 else-
527 printf ("%s\n", var->name);
never executed: printf ("%s\n", var->name);
0
528 }-
529 else-
530#endif /* DEBUGGER */-
531 { -
532 t = nodefs ? var->name
nodefsDescription
TRUEevaluated 5 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 14 times by 1 test
Evaluated by:
  • Self test
5-14
533 : named_function_string (name, function_cell (var), FUNC_MULTILINE|FUNC_EXTERNAL);-
534 printf ("%s\n", t);-
535 any_failed = sh_chkwrite (any_failed);-
536 }
executed 19 times by 1 test: end of block
Executed by:
  • Self test
19
537 }-
538 else /* declare -[fF] -[rx] name [name...] */-
539 {-
540 VSETATTR (var, flags_on);-
541 VUNSETATTR (var, flags_off);-
542 }
executed 11 times by 1 test: end of block
Executed by:
  • Self test
11
543 }-
544 else-
545 any_failed++;
executed 2 times by 1 test: any_failed++;
Executed by:
  • Self test
2
546 NEXT_VARIABLE ();
executed 32 times by 1 test: continue;
Executed by:
  • Self test
32
547 }-
548 }-
549 else /* declare -[aAinrx] name [name...] */-
550 {-
551 /* Non-null if we just created or fetched a local variable. */-
552#if 0-
553 /* This is bash-4.3 code. */-
554 /* Here's what ksh93 seems to do. If we are modifying an existing-
555 nameref variable, we don't follow the nameref chain past the last-
556 nameref, and we set the nameref variable's value so future-
557 references to that variable will return the value of the variable-
558 we're assigning right now. */-
559#else-
560 /* Here's what ksh93 seems to do as of the 2012 version: if we are-
561 using declare -n to modify the value of an existing nameref-
562 variable, don't follow the nameref chain at all and just search-
563 for a nameref at the current context. If we have a nameref,-
564 modify its value (changing which variable it references). */-
565#endif-
566 if (var == 0 && (flags_on & att_nameref))
var == 0Description
TRUEevaluated 1045 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 700 times by 1 test
Evaluated by:
  • Self test
(flags_on & 0x0000800)Description
TRUEevaluated 267 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 778 times by 1 test
Evaluated by:
  • Self test
267-1045
567 {-
568 /* See if we are trying to modify an existing nameref variable,-
569 but don't follow the nameref chain. */-
570 var = mkglobal ? find_global_variable_noref (name) : find_variable_noref (name);
mkglobalDescription
TRUEnever evaluated
FALSEevaluated 267 times by 1 test
Evaluated by:
  • Self test
0-267
571 if (var && nameref_p (var) == 0)
varDescription
TRUEevaluated 96 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 171 times by 1 test
Evaluated by:
  • Self test
((((var)->attr...000800))) == 0Description
TRUEevaluated 61 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 35 times by 1 test
Evaluated by:
  • Self test
35-171
572 var = 0;
executed 61 times by 1 test: var = 0;
Executed by:
  • Self test
61
573 }
executed 267 times by 1 test: end of block
Executed by:
  • Self test
267
574 /* However, if we're turning off the nameref attribute on an existing-
575 nameref variable, we first follow the nameref chain to the end,-
576 modify the value of the variable this nameref variable references-
577 if there is an assignment statement argument,-
578 *CHANGING ITS VALUE AS A SIDE EFFECT*, then turn off the nameref-
579 flag *LEAVING THE NAMEREF VARIABLE'S VALUE UNCHANGED* */-
580 else if (var == 0 && (flags_off & att_nameref))
var == 0Description
TRUEevaluated 778 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 700 times by 1 test
Evaluated by:
  • Self test
(flags_off & 0x0000800)Description
TRUEevaluated 15 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 763 times by 1 test
Evaluated by:
  • Self test
15-778
581 {-
582 /* See if we are trying to modify an existing nameref variable */-
583 refvar = mkglobal ? find_global_variable_last_nameref (name, 0) : find_variable_last_nameref (name, 0);
mkglobalDescription
TRUEnever evaluated
FALSEevaluated 15 times by 1 test
Evaluated by:
  • Self test
0-15
584 if (refvar && nameref_p (refvar) == 0)
refvarDescription
TRUEevaluated 11 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 4 times by 1 test
Evaluated by:
  • Self test
((((refvar)->a...000800))) == 0Description
TRUEnever evaluated
FALSEevaluated 11 times by 1 test
Evaluated by:
  • Self test
0-11
585 refvar = 0;
never executed: refvar = 0;
0
586 /* If the nameref is readonly but doesn't have a value, ksh93-
587 allows the nameref attribute to be removed. If it's readonly-
588 and has a value, even if the value doesn't reference an-
589 existing variable, we disallow the modification */-
590 if (refvar && nameref_cell (refvar) && readonly_p (refvar))
refvarDescription
TRUEevaluated 11 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 4 times by 1 test
Evaluated by:
  • Self test
((refvar)->value)Description
TRUEevaluated 11 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
((((refvar)->a... (0x0000002)))Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 9 times by 1 test
Evaluated by:
  • Self test
0-11
591 {-
592 sh_readonly (name);-
593 any_failed++;-
594 NEXT_VARIABLE ();
executed 2 times by 1 test: continue;
Executed by:
  • Self test
2
595 }-
596-
597 /* If all we're doing is turning off the nameref attribute, don't-
598 bother with VAR at all, whether it exists or not. Just turn it-
599 off and go on. */-
600 if (refvar && flags_on == 0 && offset == 0 && (flags_off & ~att_nameref) == 0)
refvarDescription
TRUEevaluated 9 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 4 times by 1 test
Evaluated by:
  • Self test
flags_on == 0Description
TRUEevaluated 8 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 1 time by 1 test
Evaluated by:
  • Self test
offset == 0Description
TRUEevaluated 7 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 1 time by 1 test
Evaluated by:
  • Self test
(flags_off & ~0x0000800) == 0Description
TRUEevaluated 7 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-9
601 {-
602 VUNSETATTR (refvar, att_nameref);-
603 NEXT_VARIABLE ();
executed 7 times by 1 test: continue;
Executed by:
  • Self test
7
604 }-
605-
606 if (refvar)
refvarDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 4 times by 1 test
Evaluated by:
  • Self test
2-4
607 /* XXX - use declare_find_variable here? */-
608 var = mkglobal ? find_global_variable (nameref_cell (refvar)) : find_variable (nameref_cell (refvar));
executed 2 times by 1 test: var = mkglobal ? find_global_variable (((refvar)->value)) : find_variable (((refvar)->value));
Executed by:
  • Self test
mkglobalDescription
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • Self test
0-2
609 }
executed 6 times by 1 test: end of block
Executed by:
  • Self test
6
610#if defined (ARRAY_VARS)-
611 /* If we have an array assignment to a nameref, remove the nameref-
612 attribute and go on. */-
613 else if (var == 0 && offset && array_subscript_assignment)
var == 0Description
TRUEevaluated 763 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 700 times by 1 test
Evaluated by:
  • Self test
offsetDescription
TRUEevaluated 287 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 476 times by 1 test
Evaluated by:
  • Self test
array_subscript_assignmentDescription
TRUEevaluated 56 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 231 times by 1 test
Evaluated by:
  • Self test
56-763
614 {-
615 var = mkglobal ? find_global_variable_noref (name) : find_variable_noref (name);
mkglobalDescription
TRUEnever evaluated
FALSEevaluated 56 times by 1 test
Evaluated by:
  • Self test
0-56
616 if (var && nameref_p (var))
varDescription
TRUEevaluated 38 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 18 times by 1 test
Evaluated by:
  • Self test
((((var)->attr... (0x0000800)))Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test
FALSEevaluated 37 times by 1 test
Evaluated by:
  • Self test
1-38
617 {-
618 internal_warning (_("%s: removing nameref attribute"), name);-
619 FREE (value_cell (var)); /* XXX - bash-4.3 compat */
executed 1 time by 1 test: sh_xfree((((var)->value)), "./declare.def", 619);
Executed by:
  • Self test
((var)->value)Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-1
620 var_setvalue (var, (char *)NULL);-
621 VUNSETATTR (var, att_nameref);-
622 }
executed 1 time by 1 test: end of block
Executed by:
  • Self test
1
623 }
executed 56 times by 1 test: end of block
Executed by:
  • Self test
56
624#endif-
625-
626 /* See if we are trying to set flags or value for an existing nameref-
627 that points to a non-existent variable: e.g.,-
628 declare -n foo=bar-
629 unset foo # unsets bar-
630 declare -i foo-
631 foo=4+4-
632 declare -p foo */-
633 if (var == 0 && (flags_on || flags_off || offset))
var == 0Description
TRUEevaluated 962 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 774 times by 1 test
Evaluated by:
  • Self test
flags_onDescription
TRUEevaluated 843 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 119 times by 1 test
Evaluated by:
  • Self test
flags_offDescription
TRUEevaluated 35 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 84 times by 1 test
Evaluated by:
  • Self test
offsetDescription
TRUEevaluated 71 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 13 times by 1 test
Evaluated by:
  • Self test
13-962
634 {-
635 refvar = mkglobal ? find_global_variable_last_nameref (name, 0) : find_variable_last_nameref (name, 0);
mkglobalDescription
TRUEevaluated 46 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 903 times by 1 test
Evaluated by:
  • Self test
46-903
636 if (refvar && nameref_p (refvar) == 0)
refvarDescription
TRUEevaluated 328 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 621 times by 1 test
Evaluated by:
  • Self test
((((refvar)->a...000800))) == 0Description
TRUEevaluated 312 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 16 times by 1 test
Evaluated by:
  • Self test
16-621
637 refvar = 0;
executed 312 times by 1 test: refvar = 0;
Executed by:
  • Self test
312
638 if (refvar)
refvarDescription
TRUEevaluated 16 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 933 times by 1 test
Evaluated by:
  • Self test
16-933
639 /* XXX - use declare_find_variable here? */-
640 var = mkglobal ? find_global_variable (nameref_cell (refvar)) : find_variable (nameref_cell (refvar));
executed 16 times by 1 test: var = mkglobal ? find_global_variable (((refvar)->value)) : find_variable (((refvar)->value));
Executed by:
  • Self test
mkglobalDescription
TRUEnever evaluated
FALSEevaluated 16 times by 1 test
Evaluated by:
  • Self test
0-16
641 if (refvar && var == 0)
refvarDescription
TRUEevaluated 16 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 933 times by 1 test
Evaluated by:
  • Self test
var == 0Description
TRUEevaluated 13 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 3 times by 1 test
Evaluated by:
  • Self test
3-933
642 {-
643 oldname = name; /* need to free this */-
644-
645 namelen = strlen (nameref_cell (refvar));-
646#if defined (ARRAY_VARS)-
647 if (subscript_start)
subscript_startDescription
TRUEnever evaluated
FALSEevaluated 13 times by 1 test
Evaluated by:
  • Self test
0-13
648 {-
649 *subscript_start = '['; /*]*/-
650 namelen += strlen (subscript_start);-
651 }
never executed: end of block
0
652#endif-
653 name = xmalloc (namelen + 2 + strlen (value) + 1);-
654 strcpy (name, nameref_cell (refvar));-
655#if defined (ARRAY_VARS)-
656 if (subscript_start)
subscript_startDescription
TRUEnever evaluated
FALSEevaluated 13 times by 1 test
Evaluated by:
  • Self test
0-13
657 strcpy (name + strlen (nameref_cell (refvar)), subscript_start);
never executed: strcpy (name + strlen (((refvar)->value)), subscript_start);
0
658#endif-
659 /* We are committed to using the new name, so reset */-
660 if (offset)
offsetDescription
TRUEevaluated 6 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 7 times by 1 test
Evaluated by:
  • Self test
6-7
661 {-
662 /* Rebuild assignment and restore offset and value */-
663 if (aflags & ASS_APPEND)
aflags & 0x0001Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test
FALSEevaluated 5 times by 1 test
Evaluated by:
  • Self test
1-5
664 name[namelen++] = '+';
executed 1 time by 1 test: name[namelen++] = '+';
Executed by:
  • Self test
1
665 name[namelen++] = '=';-
666 if (value && *value)
valueDescription
TRUEevaluated 6 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
*valueDescription
TRUEevaluated 4 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 2 times by 1 test
Evaluated by:
  • Self test
0-6
667 strcpy (name + namelen, value);
executed 4 times by 1 test: strcpy (name + namelen, value);
Executed by:
  • Self test
4
668 else-
669 name[namelen] = '\0';
executed 2 times by 1 test: name[namelen] = '\0';
Executed by:
  • Self test
2
670 offset = assignment (name, 0);-
671 /* if offset was valid previously, but the substituting-
672 of the nameref value results in an invalid assignment,-
673 throw an invalid identifier error */-
674 if (offset == 0)
offset == 0Description
TRUEnever evaluated
FALSEevaluated 6 times by 1 test
Evaluated by:
  • Self test
0-6
675 {-
676 free (oldname);-
677 sh_invalidid (name);-
678 assign_error++;-
679 NEXT_VARIABLE ();
never executed: continue;
0
680 }-
681 name[offset] = '\0';-
682 value = name + namelen;-
683 }
executed 6 times by 1 test: end of block
Executed by:
  • Self test
6
684 free (oldname);-
685-
686 /* OK, let's turn off the nameref attribute.-
687 Now everything else applies to VAR. */-
688 if (flags_off & att_nameref)
flags_off & 0x0000800Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test
FALSEevaluated 12 times by 1 test
Evaluated by:
  • Self test
1-12
689 VUNSETATTR (refvar, att_nameref);
executed 1 time by 1 test: ((refvar)->attributes &= ~(0x0000800));
Executed by:
  • Self test
1
690-
691 goto restart_new_var_name;
executed 13 times by 1 test: goto restart_new_var_name;
Executed by:
  • Self test
13
692 /* NOTREACHED */-
693 }-
694 }
executed 936 times by 1 test: end of block
Executed by:
  • Self test
936
695 if (var == 0)
var == 0Description
TRUEevaluated 946 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 777 times by 1 test
Evaluated by:
  • Self test
777-946
696 var = declare_find_variable (name, mkglobal, chklocal);
executed 946 times by 1 test: var = declare_find_variable (name, mkglobal, chklocal);
Executed by:
  • Self test
946
697-
698#if defined (ARRAY_VARS)-
699 var_exists = var != 0;-
700 array_exists = var && (array_p (var) || assoc_p (var));
varDescription
TRUEevaluated 1097 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 626 times by 1 test
Evaluated by:
  • Self test
((((var)->attr... (0x0000004)))Description
TRUEevaluated 157 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 940 times by 1 test
Evaluated by:
  • Self test
((((var)->attr... (0x0000040)))Description
TRUEevaluated 39 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 901 times by 1 test
Evaluated by:
  • Self test
39-1097
701 creating_array = flags_on & (att_array|att_assoc);-
702#endif-
703-
704 if (var == 0)
var == 0Description
TRUEevaluated 626 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 1097 times by 1 test
Evaluated by:
  • Self test
626-1097
705 {-
706#if defined (ARRAY_VARS)-
707 if (flags_on & att_assoc)
flags_on & 0x0000040Description
TRUEevaluated 112 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 514 times by 1 test
Evaluated by:
  • Self test
112-514
708 {-
709 var = make_new_assoc_variable (name);-
710 if (var && offset == 0 && no_invisible_vars == 0)
varDescription
TRUEevaluated 112 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
offset == 0Description
TRUEevaluated 104 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 8 times by 1 test
Evaluated by:
  • Self test
no_invisible_vars == 0Description
TRUEevaluated 104 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-112
711 VSETATTR (var, att_invisible);
executed 104 times by 1 test: ((var)->attributes |= (0x0001000));
Executed by:
  • Self test
104
712 }
executed 112 times by 1 test: end of block
Executed by:
  • Self test
112
713 else if ((flags_on & att_array) || making_array_special)
(flags_on & 0x0000004)Description
TRUEevaluated 181 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 333 times by 1 test
Evaluated by:
  • Self test
making_array_specialDescription
TRUEevaluated 21 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 312 times by 1 test
Evaluated by:
  • Self test
21-333
714 {-
715 var = make_new_array_variable (name);-
716 if (var && offset == 0 && no_invisible_vars == 0)
varDescription
TRUEevaluated 202 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
offset == 0Description
TRUEevaluated 136 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 66 times by 1 test
Evaluated by:
  • Self test
no_invisible_vars == 0Description
TRUEevaluated 136 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-202
717 VSETATTR (var, att_invisible);
executed 136 times by 1 test: ((var)->attributes |= (0x0001000));
Executed by:
  • Self test
136
718 }
executed 202 times by 1 test: end of block
Executed by:
  • Self test
202
719 else-
720#endif-
721 {-
722 var = mkglobal ? bind_global_variable (name, (char *)NULL, ASS_FORCE) : bind_variable (name, (char *)NULL, ASS_FORCE);
mkglobalDescription
TRUEevaluated 7 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 305 times by 1 test
Evaluated by:
  • Self test
7-305
723 if (var && offset == 0 && no_invisible_vars == 0)
varDescription
TRUEevaluated 311 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 1 time by 1 test
Evaluated by:
  • Self test
offset == 0Description
TRUEevaluated 151 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 160 times by 1 test
Evaluated by:
  • Self test
no_invisible_vars == 0Description
TRUEevaluated 151 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-311
724 VSETATTR (var, att_invisible);
executed 151 times by 1 test: ((var)->attributes |= (0x0001000));
Executed by:
  • Self test
151
725 }
executed 312 times by 1 test: end of block
Executed by:
  • Self test
312
726 if (var == 0)
var == 0Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test
FALSEevaluated 625 times by 1 test
Evaluated by:
  • Self test
1-625
727 {-
728 /* Has to appear in brackets */-
729 NEXT_VARIABLE ();
executed 1 time by 1 test: continue;
Executed by:
  • Self test
1
730 }-
731 created_var = 1;-
732 }
executed 625 times by 1 test: end of block
Executed by:
  • Self test
625
733 /* Can't take an existing array variable and make it a nameref */-
734 else if ((array_p (var) || assoc_p (var)) && (flags_on & att_nameref))
((((var)->attr... (0x0000004)))Description
TRUEevaluated 157 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 940 times by 1 test
Evaluated by:
  • Self test
((((var)->attr... (0x0000040)))Description
TRUEevaluated 39 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 901 times by 1 test
Evaluated by:
  • Self test
(flags_on & 0x0000800)Description
TRUEevaluated 6 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 190 times by 1 test
Evaluated by:
  • Self test
6-940
735 {-
736 builtin_error (_("%s: reference variable cannot be an array"), name);-
737 assign_error++;-
738 NEXT_VARIABLE ();
executed 6 times by 1 test: continue;
Executed by:
  • Self test
6
739 }-
740 else if (nameref_p (var) && (flags_on & att_nameref) == 0 && (flags_off & att_nameref) == 0 && offset && valid_nameref_value (value, 1) == 0)
((((var)->attr... (0x0000800)))Description
TRUEevaluated 44 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 1047 times by 1 test
Evaluated by:
  • Self test
(flags_on & 0x0000800) == 0Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 42 times by 1 test
Evaluated by:
  • Self test
(flags_off & 0x0000800) == 0Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test
FALSEevaluated 1 time by 1 test
Evaluated by:
  • Self test
offsetDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
valid_nameref_...value, 1) == 0Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-1047
741 {-
742 builtin_error (_("`%s': invalid variable name for name reference"), value);-
743 any_failed++;-
744 NEXT_VARIABLE ();
executed 1 time by 1 test: continue;
Executed by:
  • Self test
1
745 }-
746 else if (flags_on & att_nameref)
flags_on & 0x0000800Description
TRUEevaluated 173 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 917 times by 1 test
Evaluated by:
  • Self test
173-917
747 {-
748#if 1-
749 /* Check of offset is to allow an assignment to a nameref var as-
750 part of the declare word to override existing value */-
751 if (nameref_p (var) == 0 && var_isset (var) && offset == 0 && valid_nameref_value (value_cell (var), 0) == 0)
((((var)->attr...000800))) == 0Description
TRUEevaluated 131 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 42 times by 1 test
Evaluated by:
  • Self test
((var)->value != 0)Description
TRUEevaluated 61 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 70 times by 1 test
Evaluated by:
  • Self test
offset == 0Description
TRUEevaluated 58 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 3 times by 1 test
Evaluated by:
  • Self test
valid_nameref_...alue), 0) == 0Description
TRUEevaluated 42 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 16 times by 1 test
Evaluated by:
  • Self test
3-131
752 {-
753 builtin_error (_("`%s': invalid variable name for name reference"), value_cell (var));-
754 any_failed++;-
755 NEXT_VARIABLE ();
executed 42 times by 1 test: continue;
Executed by:
  • Self test
42
756 }-
757#endif-
758 if (readonly_p (var))
((((var)->attr... (0x0000002)))Description
TRUEevaluated 7 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 124 times by 1 test
Evaluated by:
  • Self test
7-124
759 {-
760 sh_readonly (name);-
761 any_failed++;-
762 NEXT_VARIABLE ();
executed 7 times by 1 test: continue;
Executed by:
  • Self test
7
763 }-
764 /* ksh93 compat: turning on nameref attribute turns off -ilu */-
765 VUNSETATTR (var, att_integer|att_uppercase|att_lowercase|att_capcase);-
766 }
executed 124 times by 1 test: end of block
Executed by:
  • Self test
124
767-
768 /* Cannot use declare +r to turn off readonly attribute. */ -
769 if (readonly_p (var) && (flags_off & att_readonly))
((((var)->attr... (0x0000002)))Description
TRUEevaluated 28 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 1638 times by 1 test
Evaluated by:
  • Self test
(flags_off & 0x0000002)Description
TRUEevaluated 5 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 23 times by 1 test
Evaluated by:
  • Self test
5-1638
770 {-
771 sh_readonly (name_cell (var));-
772 any_failed++;-
773 NEXT_VARIABLE ();
executed 5 times by 1 test: continue;
Executed by:
  • Self test
5
774 }-
775-
776 /* Cannot use declare to assign value to readonly or noassign-
777 variable. */-
778 if ((readonly_p (var) || noassign_p (var)) && offset)
((((var)->attr... (0x0000002)))Description
TRUEevaluated 23 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 1638 times by 1 test
Evaluated by:
  • Self test
((((var)->attr... (0x0004000)))Description
TRUEnever evaluated
FALSEevaluated 1638 times by 1 test
Evaluated by:
  • Self test
offsetDescription
TRUEevaluated 6 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 17 times by 1 test
Evaluated by:
  • Self test
0-1638
779 {-
780 if (readonly_p (var))
((((var)->attr... (0x0000002)))Description
TRUEevaluated 6 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-6
781 sh_readonly (name);
executed 6 times by 1 test: sh_readonly (name);
Executed by:
  • Self test
6
782 assign_error++;-
783 NEXT_VARIABLE ();
executed 6 times by 1 test: continue;
Executed by:
  • Self test
6
784 }-
785-
786#if defined (ARRAY_VARS)-
787 /* make declare a[2]=foo as similar to a[2]=foo as possible if-
788 a is already an array or assoc variable. */-
789 if (array_subscript_assignment && array_exists && creating_array == 0)
array_subscript_assignmentDescription
TRUEevaluated 57 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 1598 times by 1 test
Evaluated by:
  • Self test
array_existsDescription
TRUEevaluated 38 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 19 times by 1 test
Evaluated by:
  • Self test
creating_array == 0Description
TRUEevaluated 27 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 11 times by 1 test
Evaluated by:
  • Self test
11-1598
790 simple_array_assign = 1;
executed 27 times by 1 test: simple_array_assign = 1;
Executed by:
  • Self test
27
791 else if ((making_array_special || creating_array || array_exists) && offset)
making_array_specialDescription
TRUEevaluated 65 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 1563 times by 1 test
Evaluated by:
  • Self test
creating_arrayDescription
TRUEevaluated 374 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 1189 times by 1 test
Evaluated by:
  • Self test
array_existsDescription
TRUEevaluated 55 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 1134 times by 1 test
Evaluated by:
  • Self test
offsetDescription
TRUEevaluated 111 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 383 times by 1 test
Evaluated by:
  • Self test
55-1563
792 {-
793 int vlen;-
794 vlen = STRLEN (value);
(value)[1]Description
TRUEevaluated 107 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 3 times by 1 test
Evaluated by:
  • Self test
(value)[2]Description
TRUEevaluated 107 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
(value)Description
TRUEevaluated 111 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
(value)[0]Description
TRUEevaluated 110 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 1 time by 1 test
Evaluated by:
  • Self test
0-111
795/*itrace("declare_builtin: name = %s value = %s flags = %d", name, value, wflags);*/-
796 if (shell_compatibility_level > 43 && (wflags & W_COMPASSIGN) == 0 &&
shell_compatibility_level > 43Description
TRUEevaluated 111 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
(wflags & 0x008000) == 0Description
TRUEevaluated 111 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-111
797 value[0] == '(' && value[vlen-1] == ')')
value[0] == '('Description
TRUEevaluated 82 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 29 times by 1 test
Evaluated by:
  • Self test
value[vlen-1] == ')'Description
TRUEevaluated 82 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-82
798 {-
799 /* The warning is only printed when using compound assignment-
800 to an array variable that doesn't already exist. We use-
801 creating_array to allow things like-
802 declare -a foo$bar='(abc)' to work. */ -
803 if (array_exists == 0 && creating_array == 0)
array_exists == 0Description
TRUEevaluated 49 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 33 times by 1 test
Evaluated by:
  • Self test
creating_array == 0Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 47 times by 1 test
Evaluated by:
  • Self test
2-49
804 internal_warning (_("%s: quoted compound array assignment deprecated"), list->word->word);
executed 2 times by 1 test: internal_warning ( dcgettext (((void *)0), "%s: quoted compound array assignment deprecated" , 5) , list->word->word);
Executed by:
  • Self test
2
805 compound_array_assign = array_exists || creating_array;
array_existsDescription
TRUEevaluated 33 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 49 times by 1 test
Evaluated by:
  • Self test
creating_arrayDescription
TRUEevaluated 47 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 2 times by 1 test
Evaluated by:
  • Self test
2-49
806 simple_array_assign = making_array_special;-
807 }
executed 82 times by 1 test: end of block
Executed by:
  • Self test
82
808 else if (value[0] == '(' && value[vlen-1] == ')' && (shell_compatibility_level < 44 || (wflags & W_COMPASSIGN)))
value[0] == '('Description
TRUEnever evaluated
FALSEevaluated 29 times by 1 test
Evaluated by:
  • Self test
value[vlen-1] == ')'Description
TRUEnever evaluated
FALSEnever evaluated
shell_compatibility_level < 44Description
TRUEnever evaluated
FALSEnever evaluated
(wflags & 0x008000)Description
TRUEnever evaluated
FALSEnever evaluated
0-29
809 compound_array_assign = 1;
never executed: compound_array_assign = 1;
0
810 else-
811 simple_array_assign = 1;
executed 29 times by 1 test: simple_array_assign = 1;
Executed by:
  • Self test
29
812 }-
813-
814 /* Cannot use declare +a name or declare +A name to remove an-
815 array variable. */-
816 if (((flags_off & att_array) && array_p (var)) || ((flags_off & att_assoc) && assoc_p (var)))
(flags_off & 0x0000004)Description
TRUEevaluated 18 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 1637 times by 1 test
Evaluated by:
  • Self test
((((var)->attr... (0x0000004)))Description
TRUEevaluated 9 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 9 times by 1 test
Evaluated by:
  • Self test
(flags_off & 0x0000040)Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 1644 times by 1 test
Evaluated by:
  • Self test
((((var)->attr... (0x0000040)))Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-1644
817 {-
818 builtin_error (_("%s: cannot destroy array variables in this way"), name);-
819 any_failed++;-
820 NEXT_VARIABLE ();
executed 11 times by 1 test: continue;
Executed by:
  • Self test
11
821 }-
822-
823 if ((flags_on & att_array) && assoc_p (var))
(flags_on & 0x0000004)Description
TRUEevaluated 281 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 1363 times by 1 test
Evaluated by:
  • Self test
((((var)->attr... (0x0000040)))Description
TRUEnever evaluated
FALSEevaluated 281 times by 1 test
Evaluated by:
  • Self test
0-1363
824 {-
825 builtin_error (_("%s: cannot convert associative to indexed array"), name);-
826 any_failed++;-
827 NEXT_VARIABLE ();
never executed: continue;
0
828 }-
829 if ((flags_on & att_assoc) && array_p (var))
(flags_on & 0x0000040)Description
TRUEevaluated 135 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 1509 times by 1 test
Evaluated by:
  • Self test
((((var)->attr... (0x0000004)))Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test
FALSEevaluated 134 times by 1 test
Evaluated by:
  • Self test
1-1509
830 {-
831 builtin_error (_("%s: cannot convert indexed to associative array"), name);-
832 any_failed++;-
833 NEXT_VARIABLE ();
executed 1 time by 1 test: continue;
Executed by:
  • Self test
1
834 }-
835-
836 /* declare -A name[[n]] makes name an associative array variable. */-
837 if (flags_on & att_assoc)
flags_on & 0x0000040Description
TRUEevaluated 134 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 1509 times by 1 test
Evaluated by:
  • Self test
134-1509
838 {-
839 if (assoc_p (var) == 0)
((((var)->attr...000040))) == 0Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 132 times by 1 test
Evaluated by:
  • Self test
2-132
840 var = convert_var_to_assoc (var);
executed 2 times by 1 test: var = convert_var_to_assoc (var);
Executed by:
  • Self test
2
841 }
executed 134 times by 1 test: end of block
Executed by:
  • Self test
134
842 /* declare -a name[[n]] or declare name[n] makes name an indexed-
843 array variable. */-
844 else if ((making_array_special || (flags_on & att_array)) && array_p (var) == 0 && assoc_p (var) == 0)
making_array_specialDescription
TRUEevaluated 87 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 1422 times by 1 test
Evaluated by:
  • Self test
(flags_on & 0x0000004)Description
TRUEevaluated 244 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 1178 times by 1 test
Evaluated by:
  • Self test
((((var)->attr...000004))) == 0Description
TRUEevaluated 22 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 309 times by 1 test
Evaluated by:
  • Self test
((((var)->attr...000040))) == 0Description
TRUEevaluated 17 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 5 times by 1 test
Evaluated by:
  • Self test
5-1422
845 var = convert_var_to_array (var);
executed 17 times by 1 test: var = convert_var_to_array (var);
Executed by:
  • Self test
17
846#endif /* ARRAY_VARS */-
847-
848 /* XXX - we note that we are turning on nameref attribute and defer-
849 setting it until the assignment has been made so we don't do an-
850 inadvertent nameref lookup. Might have to do the same thing for-
851 flags_off&att_nameref. */-
852 /* XXX - ksh93 makes it an error to set a readonly nameref variable-
853 using a single typeset command. */-
854 onref = (flags_on & att_nameref);-
855 flags_on &= ~att_nameref;-
856#if defined (ARRAY_VARS)-
857 if (array_p (var) || assoc_p (var)
((((var)->attr... (0x0000004)))Description
TRUEevaluated 358 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 1285 times by 1 test
Evaluated by:
  • Self test
((((var)->attr... (0x0000040)))Description
TRUEevaluated 151 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 1134 times by 1 test
Evaluated by:
  • Self test
151-1285
858 || (offset && compound_array_assign)
offsetDescription
TRUEevaluated 659 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 475 times by 1 test
Evaluated by:
  • Self test
compound_array_assignDescription
TRUEnever evaluated
FALSEevaluated 659 times by 1 test
Evaluated by:
  • Self test
0-659
859 || simple_array_assign)
simple_array_assignDescription
TRUEnever evaluated
FALSEevaluated 1134 times by 1 test
Evaluated by:
  • Self test
0-1134
860 onref = 0; /* array variables may not be namerefs */
executed 509 times by 1 test: onref = 0;
Executed by:
  • Self test
509
861#endif-
862-
863 /* ksh93 seems to do this */-
864 offref = (flags_off & att_nameref);-
865 flags_off &= ~att_nameref;-
866-
867 VSETATTR (var, flags_on);-
868 VUNSETATTR (var, flags_off);-
869-
870#if defined (ARRAY_VARS)-
871 if (offset && compound_array_assign)
offsetDescription
TRUEevaluated 797 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 846 times by 1 test
Evaluated by:
  • Self test
compound_array_assignDescription
TRUEevaluated 80 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 717 times by 1 test
Evaluated by:
  • Self test
80-846
872 assign_array_var_from_string (var, value, aflags|ASS_FORCE);
executed 80 times by 1 test: assign_array_var_from_string (var, value, aflags|0x0020);
Executed by:
  • Self test
80
873 else if (simple_array_assign && subscript_start)
simple_array_assignDescription
TRUEevaluated 58 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 1505 times by 1 test
Evaluated by:
  • Self test
subscript_startDescription
TRUEevaluated 46 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 12 times by 1 test
Evaluated by:
  • Self test
12-1505
874 {-
875 int local_aflags;-
876 /* declare [-aA] name[N]=value */-
877 *subscript_start = '['; /* ] */-
878 /* XXX - problem here with appending */-
879 local_aflags = aflags&ASS_APPEND;-
880 local_aflags |= assoc_noexpand ? ASS_NOEXPAND : 0;
assoc_noexpandDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test
FALSEevaluated 45 times by 1 test
Evaluated by:
  • Self test
1-45
881 var = assign_array_element (name, value, local_aflags); /* XXX - not aflags */-
882 *subscript_start = '\0';-
883 if (var == 0) /* some kind of assignment error */
var == 0Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test
FALSEevaluated 45 times by 1 test
Evaluated by:
  • Self test
1-45
884 {-
885 assign_error++;-
886 flags_on |= onref;-
887 flags_off |= offref;-
888 NEXT_VARIABLE ();
executed 1 time by 1 test: continue;
Executed by:
  • Self test
1
889 }-
890 }
executed 45 times by 1 test: end of block
Executed by:
  • Self test
45
891 else if (simple_array_assign)
simple_array_assignDescription
TRUEevaluated 12 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 1505 times by 1 test
Evaluated by:
  • Self test
12-1505
892 {-
893 /* let bind_{array,assoc}_variable take care of this. */-
894 if (assoc_p (var))
((((var)->attr... (0x0000040)))Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 10 times by 1 test
Evaluated by:
  • Self test
2-10
895 bind_assoc_variable (var, name, savestring ("0"), value, aflags|ASS_FORCE);
executed 2 times by 1 test: bind_assoc_variable (var, name, (char *)strcpy (sh_xmalloc((1 + strlen ("0")), "./declare.def", 895), ("0")), value, aflags|0x0020);
Executed by:
  • Self test
2
896 else-
897 bind_array_variable (name, 0, value, aflags|ASS_FORCE);
executed 10 times by 1 test: bind_array_variable (name, 0, value, aflags|0x0020);
Executed by:
  • Self test
10
898 }-
899 else-
900#endif-
901 /* XXX - no ASS_FORCE here */-
902 /* bind_variable_value duplicates the essential internals of-
903 bind_variable() */-
904 if (offset)
offsetDescription
TRUEevaluated 659 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 846 times by 1 test
Evaluated by:
  • Self test
659-846
905 {-
906 if (onref || nameref_p (var))
onrefDescription
TRUEevaluated 166 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 493 times by 1 test
Evaluated by:
  • Self test
((((var)->attr... (0x0000800)))Description
TRUEevaluated 8 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 485 times by 1 test
Evaluated by:
  • Self test
8-493
907 aflags |= ASS_NAMEREF;
executed 174 times by 1 test: aflags |= 0x0010;
Executed by:
  • Self test
174
908 v = bind_variable_value (var, value, aflags);-
909 if (v == 0 && (onref || nameref_p (var)))
v == 0Description
TRUEevaluated 14 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 645 times by 1 test
Evaluated by:
  • Self test
onrefDescription
TRUEevaluated 6 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 8 times by 1 test
Evaluated by:
  • Self test
((((var)->attr... (0x0000800)))Description
TRUEevaluated 8 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-645
910 {-
911 if (valid_nameref_value (value, 1) == 0)
valid_nameref_...value, 1) == 0Description
TRUEevaluated 13 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 1 time by 1 test
Evaluated by:
  • Self test
1-13
912 sh_invalidid (value);
executed 13 times by 1 test: sh_invalidid (value);
Executed by:
  • Self test
13
913 assign_error++;-
914 /* XXX - unset this variable? or leave it as normal var? */-
915 if (created_var)
created_varDescription
TRUEevaluated 8 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 6 times by 1 test
Evaluated by:
  • Self test
6-8
916 delete_var (var->name, mkglobal ? global_variables : shell_variables);
executed 8 times by 1 test: delete_var (var->name, mkglobal ? global_variables : shell_variables);
Executed by:
  • Self test
8
917 flags_on |= onref; /* undo change from above */-
918 flags_off |= offref;-
919 NEXT_VARIABLE ();
executed 14 times by 1 test: continue;
Executed by:
  • Self test
14
920 }-
921 }
executed 645 times by 1 test: end of block
Executed by:
  • Self test
645
922-
923 /* If we found this variable in the temporary environment, as with-
924 `var=value declare -x var', make sure it is treated identically-
925 to `var=value export var'. Do the same for `declare -r' and-
926 `readonly'. Preserve the attributes, except for att_tempvar. */-
927 /* XXX -- should this create a variable in the global scope, or-
928 modify the local variable flags? ksh93 has it modify the-
929 global scope.-
930 Need to handle case like in set_var_attribute where a temporary-
931 variable is in the same table as the function local vars. */-
932 if ((flags_on & (att_exported|att_readonly)) && tempvar_p (var))
(flags_on & (0...01|0x0000002))Description
TRUEevaluated 86 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 1538 times by 1 test
Evaluated by:
  • Self test
((((var)->attr... (0x0100000)))Description
TRUEevaluated 10 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 76 times by 1 test
Evaluated by:
  • Self test
10-1538
933 {-
934 SHELL_VAR *tv;-
935 char *tvalue;-
936-
937 tv = find_tempenv_variable (var->name);-
938 if (tv)
tvDescription
TRUEevaluated 10 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-10
939 {-
940 tvalue = var_isset (var) ? savestring (value_cell (var)) : savestring ("");
((var)->value != 0)Description
TRUEevaluated 10 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-10
941 tv = bind_variable (var->name, tvalue, 0);-
942 tv->attributes |= var->attributes & ~att_tempvar;-
943 if (tv->context > 0)
tv->context > 0Description
TRUEnever evaluated
FALSEevaluated 10 times by 1 test
Evaluated by:
  • Self test
0-10
944 VSETATTR (tv, att_propagate);
never executed: ((tv)->attributes |= (0x0200000));
0
945 free (tvalue);-
946 }
executed 10 times by 1 test: end of block
Executed by:
  • Self test
10
947 VSETATTR (var, att_propagate);-
948 }
executed 10 times by 1 test: end of block
Executed by:
  • Self test
10
949 }
executed 1624 times by 1 test: end of block
Executed by:
  • Self test
1624
950-
951 /* Turn on nameref attribute we deferred above. */-
952 /* XXX - should we turn on the noassign attribute for consistency with-
953 ksh93 when we turn on the nameref attribute? */-
954 VSETATTR (var, onref);-
955 flags_on |= onref;-
956 VUNSETATTR (var, offref);-
957 flags_off |= offref;-
958 /* Yuck. ksh93 compatibility. XXX - need to investigate more but-
959 definitely happens when turning off nameref attribute on nameref-
960 (see comments above). Under no circumstances allow this to turn-
961 off readonly attribute on readonly nameref variable. */-
962 if (refvar)
refvarDescription
TRUEevaluated 9 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 1615 times by 1 test
Evaluated by:
  • Self test
9-1615
963 {-
964 if (flags_off & att_readonly)
flags_off & 0x0000002Description
TRUEnever evaluated
FALSEevaluated 9 times by 1 test
Evaluated by:
  • Self test
0-9
965 flags_off &= ~att_readonly;
never executed: flags_off &= ~0x0000002;
0
966 VUNSETATTR (refvar, flags_off);-
967 }
executed 9 times by 1 test: end of block
Executed by:
  • Self test
9
968-
969 stupidly_hack_special_variables (name);-
970-
971 NEXT_VARIABLE ();
executed 1624 times by 1 test: continue;
Executed by:
  • Self test
1624
972 }-
973-
974 return (assign_error ? EX_BADASSIGN
executed 1572 times by 1 test: return (assign_error ? 260 : ((any_failed == 0) ? 0 : 1));
Executed by:
  • Self test
1572
975 : ((any_failed == 0) ? EXECUTION_SUCCESS
executed 1572 times by 1 test: return (assign_error ? 260 : ((any_failed == 0) ? 0 : 1));
Executed by:
  • Self test
1572
976 : EXECUTION_FAILURE));
executed 1572 times by 1 test: return (assign_error ? 260 : ((any_failed == 0) ? 0 : 1));
Executed by:
  • Self test
1572
977}-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.1.2