diff mbox series

[RFC,04/28] cli: lil: Remove most functions by default

Message ID 20210701061611.957918-5-seanga2@gmail.com
State RFC
Delegated to: Tom Rini
Headers show
Series cli: Add a new shell | expand

Commit Message

Sean Anderson July 1, 2021, 6:15 a.m. UTC
This helps reduce the size impact of LIL to approximately that of hush. The
builtin functions have been chosen to roughly match the functionality
present in hush. In addition, arithmetic is removed from expr to reduce
size further.

Signed-off-by: Sean Anderson <seanga2@gmail.com>
---

 cmd/Kconfig      | 10 ++++++
 common/cli_lil.c | 83 +++++++++++++++++++++++++++---------------------
 2 files changed, 57 insertions(+), 36 deletions(-)

Comments

Simon Glass July 5, 2021, 3:29 p.m. UTC | #1
On Thu, 1 Jul 2021 at 00:16, Sean Anderson <seanga2@gmail.com> wrote:
>
> This helps reduce the size impact of LIL to approximately that of hush. The
> builtin functions have been chosen to roughly match the functionality
> present in hush. In addition, arithmetic is removed from expr to reduce
> size further.
>
> Signed-off-by: Sean Anderson <seanga2@gmail.com>
> ---
>
>  cmd/Kconfig      | 10 ++++++
>  common/cli_lil.c | 83 +++++++++++++++++++++++++++---------------------
>  2 files changed, 57 insertions(+), 36 deletions(-)

Reviewed-by: Simon Glass <sjg@chromium.org>
diff mbox series

Patch

diff --git a/cmd/Kconfig b/cmd/Kconfig
index 8bccc572af..0a7b73cb6d 100644
--- a/cmd/Kconfig
+++ b/cmd/Kconfig
@@ -32,6 +32,16 @@  config LIL
 	  like `proc name {args} {body}' functions or `echo [some command]`
 	  command substitution ("tcl scripts").
 
+if LIL
+
+config LIL_FULL
+	bool "Enable all LIL features"
+	help
+	  This enables all LIL builtin functions, as well as expression support
+	  for arithmetic and bitwise operations.
+
+endif
+
 config CMDLINE_EDITING
 	bool "Enable command line editing"
 	depends on CMDLINE
diff --git a/common/cli_lil.c b/common/cli_lil.c
index 294d79e86e..a2e5cdf35a 100644
--- a/common/cli_lil.c
+++ b/common/cli_lil.c
@@ -1321,7 +1321,7 @@  static void ee_unary(struct expreval *ee)
 static void ee_muldiv(struct expreval *ee)
 {
 	ee_unary(ee);
-	if (ee->error)
+	if (ee->error || !IS_ENABLED(CONFIG_LIL_FULL))
 		return;
 
 	ee_skip_spaces(ee);
@@ -1382,8 +1382,10 @@  static void ee_muldiv(struct expreval *ee)
 static void ee_addsub(struct expreval *ee)
 {
 	ee_muldiv(ee);
-	ee_skip_spaces(ee);
+	if (!IS_ENABLED(CONFIG_LIL_FULL))
+		return;
 
+	ee_skip_spaces(ee);
 	while (ee->head < ee->len && !ee->error &&
 	       !ee_invalidpunct(ee->code[ee->head + 1]) &&
 	       (ee->code[ee->head] == '+' || ee->code[ee->head] == '-')) {
@@ -1415,8 +1417,10 @@  static void ee_addsub(struct expreval *ee)
 static void ee_shift(struct expreval *ee)
 {
 	ee_addsub(ee);
-	ee_skip_spaces(ee);
+	if (!IS_ENABLED(CONFIG_LIL_FULL))
+		return;
 
+	ee_skip_spaces(ee);
 	while (ee->head < ee->len && !ee->error &&
 	       ((ee->code[ee->head] == '<' && ee->code[ee->head + 1] == '<') ||
 		(ee->code[ee->head] == '>' && ee->code[ee->head + 1] == '>'))) {
@@ -1545,8 +1549,10 @@  static void ee_equals(struct expreval *ee)
 static void ee_bitand(struct expreval *ee)
 {
 	ee_equals(ee);
-	ee_skip_spaces(ee);
+	if (!IS_ENABLED(CONFIG_LIL_FULL))
+		return;
 
+	ee_skip_spaces(ee);
 	while (ee->head < ee->len && !ee->error &&
 	       (ee->code[ee->head] == '&' &&
 		!ee_invalidpunct(ee->code[ee->head + 1]))) {
@@ -1566,8 +1572,10 @@  static void ee_bitand(struct expreval *ee)
 static void ee_bitor(struct expreval *ee)
 {
 	ee_bitand(ee);
-	ee_skip_spaces(ee);
+	if (!IS_ENABLED(CONFIG_LIL_FULL))
+		return;
 
+	ee_skip_spaces(ee);
 	while (ee->head < ee->len && !ee->error &&
 	       (ee->code[ee->head] == '|' &&
 		!ee_invalidpunct(ee->code[ee->head + 1]))) {
@@ -2932,49 +2940,52 @@  static struct lil_value *fnc_lmap(struct lil *lil, size_t argc,
 
 static void register_stdcmds(struct lil *lil)
 {
-	lil_register(lil, "append", fnc_append);
-	lil_register(lil, "char", fnc_char);
-	lil_register(lil, "charat", fnc_charat);
-	lil_register(lil, "codeat", fnc_codeat);
-	lil_register(lil, "concat", fnc_concat);
-	lil_register(lil, "count", fnc_count);
 	lil_register(lil, "dec", fnc_dec);
-	lil_register(lil, "downeval", fnc_downeval);
-	lil_register(lil, "error", fnc_error);
 	lil_register(lil, "eval", fnc_eval);
 	lil_register(lil, "expr", fnc_expr);
-	lil_register(lil, "filter", fnc_filter);
 	lil_register(lil, "for", fnc_for);
 	lil_register(lil, "foreach", fnc_foreach);
 	lil_register(lil, "func", fnc_func);
 	lil_register(lil, "if", fnc_if);
 	lil_register(lil, "inc", fnc_inc);
-	lil_register(lil, "index", fnc_index);
-	lil_register(lil, "indexof", fnc_indexof);
-	lil_register(lil, "length", fnc_length);
-	lil_register(lil, "list", fnc_list);
-	lil_register(lil, "lmap", fnc_lmap);
 	lil_register(lil, "local", fnc_local);
-	lil_register(lil, "ltrim", fnc_ltrim);
-	lil_register(lil, "quote", fnc_quote);
-	lil_register(lil, "reflect", fnc_reflect);
-	lil_register(lil, "rename", fnc_rename);
-	lil_register(lil, "repstr", fnc_repstr);
-	lil_register(lil, "result", fnc_result);
 	lil_register(lil, "return", fnc_return);
-	lil_register(lil, "rtrim", fnc_rtrim);
 	lil_register(lil, "set", fnc_set);
-	lil_register(lil, "slice", fnc_slice);
-	lil_register(lil, "split", fnc_split);
 	lil_register(lil, "strcmp", fnc_strcmp);
-	lil_register(lil, "streq", fnc_streq);
-	lil_register(lil, "strpos", fnc_strpos);
-	lil_register(lil, "subst", fnc_subst);
-	lil_register(lil, "substr", fnc_substr);
-	lil_register(lil, "topeval", fnc_topeval);
-	lil_register(lil, "trim", fnc_trim);
 	lil_register(lil, "try", fnc_try);
-	lil_register(lil, "unusedname", fnc_unusedname);
-	lil_register(lil, "upeval", fnc_upeval);
 	lil_register(lil, "while", fnc_while);
+
+	if (IS_ENABLED(CONFIG_LIL_FULL)) {
+		lil_register(lil, "append", fnc_append);
+		lil_register(lil, "char", fnc_char);
+		lil_register(lil, "charat", fnc_charat);
+		lil_register(lil, "codeat", fnc_codeat);
+		lil_register(lil, "concat", fnc_concat);
+		lil_register(lil, "count", fnc_count);
+		lil_register(lil, "downeval", fnc_downeval);
+		lil_register(lil, "error", fnc_error);
+		lil_register(lil, "filter", fnc_filter);
+		lil_register(lil, "index", fnc_index);
+		lil_register(lil, "indexof", fnc_indexof);
+		lil_register(lil, "length", fnc_length);
+		lil_register(lil, "list", fnc_list);
+		lil_register(lil, "lmap", fnc_lmap);
+		lil_register(lil, "ltrim", fnc_ltrim);
+		lil_register(lil, "quote", fnc_quote);
+		lil_register(lil, "reflect", fnc_reflect);
+		lil_register(lil, "rename", fnc_rename);
+		lil_register(lil, "repstr", fnc_repstr);
+		lil_register(lil, "result", fnc_result);
+		lil_register(lil, "rtrim", fnc_rtrim);
+		lil_register(lil, "slice", fnc_slice);
+		lil_register(lil, "split", fnc_split);
+		lil_register(lil, "streq", fnc_streq);
+		lil_register(lil, "strpos", fnc_strpos);
+		lil_register(lil, "subst", fnc_subst);
+		lil_register(lil, "substr", fnc_substr);
+		lil_register(lil, "topeval", fnc_topeval);
+		lil_register(lil, "trim", fnc_trim);
+		lil_register(lil, "unusedname", fnc_unusedname);
+		lil_register(lil, "upeval", fnc_upeval);
+	}
 }