Ah, the wonders of pointers.  Simplifies the configuration parsing
as all these cases are otherwise identical.

Signed-off-by: Elliott Mitchell <ehem+open...@m5p.com>
---
Oy vey.  I only spotted passing the second arg to parse_expr() *just*
before I was initially planning to send this.  That is quite the boody
trap lurking there.
---
 scripts/kconfig.pl | 35 ++++++++++++-----------------------
 1 file changed, 12 insertions(+), 23 deletions(-)

diff --git a/scripts/kconfig.pl b/scripts/kconfig.pl
index dd286479b3..5a53e2154b 100755
--- a/scripts/kconfig.pl
+++ b/scripts/kconfig.pl
@@ -130,32 +130,21 @@ sub parse_expr {
        my $mod_plus = shift;
        my $arg = $arg[$$pos++];
 
+       my %ops = (
+               '&'     => [\&config_and, undef],
+               '+'     => [\&config_add, 0],
+               'm+'    => [\&config_add, 1],
+               '>'     => [\&config_diff, 0],
+               '>+'    => [\&config_diff, 1],
+               '-'     => [\&config_sub, undef],
+       );
+
        die "Parse error" if (!$arg);
 
-       if ($arg eq '&') {
-               my $arg1 = parse_expr($pos);
-               my $arg2 = parse_expr($pos);
-               return config_and($arg1, $arg2, undef);
-       } elsif ($arg =~ /^\+/) {
-               my $arg1 = parse_expr($pos);
-               my $arg2 = parse_expr($pos);
-               return config_add($arg1, $arg2, 0);
-       } elsif ($arg =~ /^m\+/) {
-               my $arg1 = parse_expr($pos);
-               my $arg2 = parse_expr($pos, 1);
-               return config_add($arg1, $arg2, 1);
-       } elsif ($arg eq '>') {
-               my $arg1 = parse_expr($pos);
-               my $arg2 = parse_expr($pos);
-               return config_diff($arg1, $arg2, 0);
-       } elsif ($arg eq '>+') {
-               my $arg1 = parse_expr($pos);
-               my $arg2 = parse_expr($pos);
-               return config_diff($arg1, $arg2, 1);
-       } elsif ($arg eq '-') {
+       if (exists($ops{$arg})) {
                my $arg1 = parse_expr($pos);
-               my $arg2 = parse_expr($pos);
-               return config_sub($arg1, $arg2, undef);
+               my $arg2 = parse_expr($pos, ($arg eq 'm+') ? 1 : 0);
+               return &{$ops{$arg}->[0]}($arg1, $arg2, $ops{$arg}->[1]);
        } else {
                return load_config($arg, $mod_plus);
        }
-- 
(\___(\___(\______          --=> 8-) EHM <=--          ______/)___/)___/)
 \BS (    |       ehem+open...@m5p.com     PGP 87145445       |    )   /
  \_CS\   |  _____  -O #include <stddisclaimer.h> O-   _____  |   /  _/
8A19\___\_|_/58D2 7E3D DDF4 7BA6 <-PGP-> 41D1 B375 37D0 8714\_|_/___/5445




_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel

Reply via email to