aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2023-06-17 10:40:29 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2023-06-17 10:40:29 +0200
commit6221832bc15d9037360e3bdc9405df08ed801cc1 (patch)
tree1bed0a30a665f8c57f588888720b908d76dcaf14
parentd6f98f214b3bd242f7404b68a4f9d777114fffa3 (diff)
downloadbusybox-w32-6221832bc15d9037360e3bdc9405df08ed801cc1.tar.gz
busybox-w32-6221832bc15d9037360e3bdc9405df08ed801cc1.tar.bz2
busybox-w32-6221832bc15d9037360e3bdc9405df08ed801cc1.zip
shell/math.h: update comments, rearrange struct members for smaller code
function old new delta arith_apply 1000 998 -2 evaluate_string 1414 1406 -8 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-10) Total: -10 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--shell/math.c2
-rw-r--r--shell/math.h26
2 files changed, 5 insertions, 23 deletions
diff --git a/shell/math.c b/shell/math.c
index 56f866bf2..6196a6ad9 100644
--- a/shell/math.c
+++ b/shell/math.c
@@ -926,9 +926,9 @@ dbg(" numstack:%d val:%lld '%s'", (int)(numstackptr - numstack), numstackptr[
926arith_t FAST_FUNC 926arith_t FAST_FUNC
927arith(arith_state_t *math_state, const char *expr) 927arith(arith_state_t *math_state, const char *expr)
928{ 928{
929 math_state->evaluation_disabled = 0;
929 math_state->errmsg = NULL; 930 math_state->errmsg = NULL;
930 math_state->list_of_recursed_names = NULL; 931 math_state->list_of_recursed_names = NULL;
931 math_state->evaluation_disabled = 0;
932 return evaluate_string(math_state, expr); 932 return evaluate_string(math_state, expr);
933} 933}
934 934
diff --git a/shell/math.h b/shell/math.h
index 452ddaddd..9812184f1 100644
--- a/shell/math.h
+++ b/shell/math.h
@@ -6,7 +6,6 @@
6 * 6 *
7 * See math.c for internal documentation. 7 * See math.c for internal documentation.
8 */ 8 */
9
10/* The math library has just one function: 9/* The math library has just one function:
11 * 10 *
12 * arith_t arith(arith_state_t *state, const char *expr); 11 * arith_t arith(arith_state_t *state, const char *expr);
@@ -22,7 +21,6 @@
22 * "1 + 2 + 3" 21 * "1 + 2 + 3"
23 * you would obviously get back 6. 22 * you would obviously get back 6.
24 */ 23 */
25
26/* To add support to a shell, you need to implement three functions: 24/* To add support to a shell, you need to implement three functions:
27 * 25 *
28 * lookupvar() - look up and return the value of a variable 26 * lookupvar() - look up and return the value of a variable
@@ -36,28 +34,12 @@
36 * setvar() - set a variable to some value 34 * setvar() - set a variable to some value
37 * 35 *
38 * If the arithmetic expansion does something like: 36 * If the arithmetic expansion does something like:
39 * $(( i = 1)) 37 * $((i = 1))
40 * then the math code will make a call like so: 38 * then the math code will make a call like so:
41 * setvar("i", "1", 0); 39 * setvar("i", "1");
42 * The storage for the first two parameters are not allocated, so your 40 * The storage for the first two parameters are not allocated, so your
43 * shell implementation will most likely need to strdup() them to save. 41 * shell implementation will most likely need to strdup() them to save.
44 *
45 * endofname() - return the end of a variable name from input
46 *
47 * The arithmetic code does not know about variable naming conventions.
48 * So when it is given an experession, it knows something is not numeric,
49 * but it is up to the shell to dictate what is a valid identifiers.
50 * So when it encounters something like:
51 * $(( some_var + 123 ))
52 * It will make a call like so:
53 * end = endofname("some_var + 123");
54 * So the shell needs to scan the input string and return a pointer to the
55 * first non-identifier string. In this case, it should return the input
56 * pointer with an offset pointing to the first space. The typical
57 * implementation will return the offset of first char that does not match
58 * the regex (in C locale): ^[a-zA-Z_][a-zA-Z_0-9]*
59 */ 42 */
60
61#ifndef SHELL_MATH_H 43#ifndef SHELL_MATH_H
62#define SHELL_MATH_H 1 44#define SHELL_MATH_H 1
63 45
@@ -75,11 +57,11 @@ typedef const char* FAST_FUNC (*arith_var_lookup_t)(const char *name);
75typedef void FAST_FUNC (*arith_var_set_t)(const char *name, const char *val); 57typedef void FAST_FUNC (*arith_var_set_t)(const char *name, const char *val);
76 58
77typedef struct arith_state_t { 59typedef struct arith_state_t {
60 uint64_t evaluation_disabled;
78 const char *errmsg; 61 const char *errmsg;
62 void *list_of_recursed_names;
79 arith_var_lookup_t lookupvar; 63 arith_var_lookup_t lookupvar;
80 arith_var_set_t setvar; 64 arith_var_set_t setvar;
81 uint64_t evaluation_disabled;
82 void *list_of_recursed_names;
83} arith_state_t; 65} arith_state_t;
84 66
85arith_t FAST_FUNC arith(arith_state_t *state, const char *expr); 67arith_t FAST_FUNC arith(arith_state_t *state, const char *expr);