]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
kconfig: refactor expr_eliminate_dups()
authorMasahiro Yamada <masahiroy@kernel.org>
Sun, 8 Sep 2024 12:43:19 +0000 (21:43 +0900)
committerMasahiro Yamada <masahiroy@kernel.org>
Fri, 20 Sep 2024 00:21:52 +0000 (09:21 +0900)
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>
scripts/kconfig/expr.c

index e83fe0c3d62fe51137779da299c0f20b36c34831..5b826d197f1257ff48dbee0090cf046d6fcebd82 100644 (file)
@@ -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:
                        ;
                }