]> git.ipfire.org Git - thirdparty/bash.git/blame - arrayfunc.h
Bash-5.2 patch 26: fix typo when specifying readline's custom color prefix
[thirdparty/bash.git] / arrayfunc.h
CommitLineData
f73dda09
JA
1/* arrayfunc.h -- declarations for miscellaneous array functions in arrayfunc.c */
2
74091dd4 3/* Copyright (C) 2001-2021 Free Software Foundation, Inc.
f73dda09
JA
4
5 This file is part of GNU Bash, the Bourne Again SHell.
6
3185942a
JA
7 Bash is free software: you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation, either version 3 of the License, or
10 (at your option) any later version.
f73dda09 11
3185942a
JA
12 Bash is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
f73dda09
JA
16
17 You should have received a copy of the GNU General Public License
3185942a
JA
18 along with Bash. If not, see <http://www.gnu.org/licenses/>.
19*/
f73dda09
JA
20
21#if !defined (_ARRAYFUNC_H_)
22#define _ARRAYFUNC_H_
23
24/* Must include variables.h before including this file. */
25
74091dd4
CR
26/* An object to encapsulate the state of an array element. It can describe
27 an array assignment A[KEY]=VALUE or a[IND]=VALUE depending on TYPE, or
28 for passing array subscript references around, where VALUE would be
29 ${a[IND]} or ${A[KEY]}. This is not dependent on ARRAY_VARS so we can
30 use it in function parameters. */
31
32/* values for `type' field */
33#define ARRAY_INVALID -1
34#define ARRAY_SCALAR 0
35#define ARRAY_INDEXED 1
36#define ARRAY_ASSOC 2
37
38/* KEY will contain allocated memory if called through the assign_array_element
39 code path because of how assoc_insert works. */
40typedef struct element_state
41{
42 short type; /* assoc or indexed, says which fields are valid */
43 short subtype; /* `*', `@', or something else */
44 arrayind_t ind;
45 char *key; /* can be allocated memory */
46 char *value;
47} array_eltstate_t;
48
f73dda09
JA
49#if defined (ARRAY_VARS)
50
d233b485
CR
51/* This variable means to not expand associative array subscripts more than
52 once, when performing variable expansion. */
53extern int assoc_expand_once;
54
55/* The analog for indexed array subscripts */
56extern int array_expand_once;
57
74091dd4
CR
58/* Flags for array_value_internal and callers array_value/get_array_value; also
59 used by array_variable_name and array_variable_part. */
60#define AV_ALLOWALL 0x001 /* treat a[@] like $@ and a[*] like $* */
495aee44
CR
61#define AV_QUOTED 0x002
62#define AV_USEIND 0x004
a0c0a00f
CR
63#define AV_USEVAL 0x008 /* XXX - should move this */
64#define AV_ASSIGNRHS 0x010 /* no splitting, special case ${a[@]} */
d233b485 65#define AV_NOEXPAND 0x020 /* don't run assoc subscripts through word expansion */
74091dd4
CR
66#define AV_ONEWORD 0x040 /* not used yet */
67#define AV_ATSTARKEYS 0x080 /* accept a[@] and a[*] but use them as keys, not special values */
d233b485 68
74091dd4
CR
69/* Flags for valid_array_reference. Value 1 is reserved for skipsubscript().
70 Also used by unbind_array_element, which is currently the only function
71 that uses VA_ALLOWALL. */
d233b485
CR
72#define VA_NOEXPAND 0x001
73#define VA_ONEWORD 0x002
74091dd4 74#define VA_ALLOWALL 0x004 /* allow @ to mean all elements of the array */
495aee44 75
8868edaf
CR
76extern SHELL_VAR *convert_var_to_array PARAMS((SHELL_VAR *));
77extern SHELL_VAR *convert_var_to_assoc PARAMS((SHELL_VAR *));
f73dda09 78
8868edaf 79extern char *make_array_variable_value PARAMS((SHELL_VAR *, arrayind_t, char *, char *, int));
ac50fbac 80
8868edaf
CR
81extern SHELL_VAR *bind_array_variable PARAMS((char *, arrayind_t, char *, int));
82extern SHELL_VAR *bind_array_element PARAMS((SHELL_VAR *, arrayind_t, char *, int));
74091dd4 83extern SHELL_VAR *assign_array_element PARAMS((char *, char *, int, array_eltstate_t *));
f73dda09 84
8868edaf 85extern SHELL_VAR *bind_assoc_variable PARAMS((SHELL_VAR *, char *, char *, char *, int));
0001803f 86
8868edaf 87extern SHELL_VAR *find_or_make_array_variable PARAMS((char *, int));
f73dda09 88
8868edaf
CR
89extern SHELL_VAR *assign_array_from_string PARAMS((char *, char *, int));
90extern SHELL_VAR *assign_array_var_from_word_list PARAMS((SHELL_VAR *, WORD_LIST *, int));
0628567a 91
8868edaf
CR
92extern WORD_LIST *expand_compound_array_assignment PARAMS((SHELL_VAR *, char *, int));
93extern void assign_compound_array_list PARAMS((SHELL_VAR *, WORD_LIST *, int));
94extern SHELL_VAR *assign_array_var_from_string PARAMS((SHELL_VAR *, char *, int));
f73dda09 95
8868edaf
CR
96extern char *expand_and_quote_assoc_word PARAMS((char *, int));
97extern void quote_compound_array_list PARAMS((WORD_LIST *, int));
3185942a 98
76404c85
CR
99extern int kvpair_assignment_p PARAMS((WORD_LIST *));
100extern char *expand_and_quote_kvpair_word PARAMS((char *));
101
8868edaf
CR
102extern int unbind_array_element PARAMS((SHELL_VAR *, char *, int));
103extern int skipsubscript PARAMS((const char *, int, int));
f73dda09 104
8868edaf
CR
105extern void print_array_assignment PARAMS((SHELL_VAR *, int));
106extern void print_assoc_assignment PARAMS((SHELL_VAR *, int));
f73dda09 107
8868edaf
CR
108extern arrayind_t array_expand_index PARAMS((SHELL_VAR *, char *, int, int));
109extern int valid_array_reference PARAMS((const char *, int));
74091dd4
CR
110extern int tokenize_array_reference PARAMS((char *, int, char **));
111
112extern char *array_value PARAMS((const char *, int, int, array_eltstate_t *));
113extern char *get_array_value PARAMS((const char *, int, array_eltstate_t *));
b80f6443 114
8868edaf
CR
115extern char *array_keys PARAMS((char *, int, int));
116
117extern char *array_variable_name PARAMS((const char *, int, char **, int *));
118extern SHELL_VAR *array_variable_part PARAMS((const char *, int, char **, int *));
f73dda09 119
74091dd4
CR
120extern void init_eltstate (array_eltstate_t *);
121extern void flush_eltstate (array_eltstate_t *);
122
ac50fbac
CR
123#else
124
125#define AV_ALLOWALL 0
126#define AV_QUOTED 0
127#define AV_USEIND 0
74091dd4 128#define AV_USEVAL 0
a0c0a00f 129#define AV_ASSIGNRHS 0
74091dd4
CR
130#define AV_NOEXPAND 0
131#define AV_ONEWORD 0
132#define AV_ATSTARKEYS 0
ac50fbac 133
74091dd4 134#define VA_NOEXPAND 0
d233b485 135#define VA_ONEWORD 0
74091dd4 136#define VA_ALLOWALL 0
d233b485 137
f73dda09
JA
138#endif
139
140#endif /* !_ARRAYFUNC_H_ */