summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorMasahiro Yamada <masahiroy@kernel.org>2024-09-08 21:43:19 +0900
committerMasahiro Yamada <masahiroy@kernel.org>2024-09-20 09:21:52 +0900
commit440f67ccdcd31ca33d8d0439b16e4b6d4d7aba17 (patch)
tree1a54f7187f235e19919066d65f1ba0bb177eab35 /scripts
parent4fa146eaecaee6301e8f5b104fe63b41afdf83e6 (diff)
kconfig: refactor expr_eliminate_dups()
Currently, expr_eliminate_dups() passes two identical pointers down to expr_eliminate_dups1(), which later skips processing identical leaves. This approach is somewhat tricky and, more importantly, it will not work with the refactoring made in the next commit. This commit slightly changes the recursion logic; it deduplicates both the left and right arms, and then passes them to expr_eliminate_dups1(). expr_eliminate_dups() should produce the same result. Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
Diffstat (limited to 'scripts')
-rw-r--r--scripts/kconfig/expr.c14
1 files changed, 3 insertions, 11 deletions
diff --git a/scripts/kconfig/expr.c b/scripts/kconfig/expr.c
index e83fe0c3d62f..5b826d197f12 100644
--- a/scripts/kconfig/expr.c
+++ b/scripts/kconfig/expr.c
@@ -578,16 +578,6 @@ static void expr_eliminate_dups1(enum expr_type type, struct expr **ep1, struct
/* *ep1 and *ep2 are leaves. Compare and process them. */
- if (*ep1 == *ep2)
- return;
-
- switch ((*ep1)->type) {
- case E_OR: case E_AND:
- expr_eliminate_dups1((*ep1)->type, ep1, ep1);
- default:
- ;
- }
-
switch (type) {
case E_OR:
tmp = expr_join_or(*ep1, *ep2);
@@ -634,7 +624,9 @@ struct expr *expr_eliminate_dups(struct expr *e)
trans_count = 0;
switch (e->type) {
case E_OR: case E_AND:
- expr_eliminate_dups1(e->type, &e, &e);
+ e->left.expr = expr_eliminate_dups(e->left.expr);
+ e->right.expr = expr_eliminate_dups(e->right.expr);
+ expr_eliminate_dups1(e->type, &e->left.expr, &e->right.expr);
default:
;
}