Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/usr.bin/make make(1): extract CondParser_Func from CondParse...



details:   https://anonhg.NetBSD.org/src/rev/c614336ac25f
branches:  trunk
changeset: 1016144:c614336ac25f
user:      rillig <rillig%NetBSD.org@localhost>
date:      Sun Nov 08 23:20:19 2020 +0000

description:
make(1): extract CondParser_Func from CondParser_LeafToken

diffstat:

 usr.bin/make/cond.c |  38 ++++++++++++++++++++++++++------------
 1 files changed, 26 insertions(+), 12 deletions(-)

diffs (86 lines):

diff -r 3b8658d70908 -r c614336ac25f usr.bin/make/cond.c
--- a/usr.bin/make/cond.c       Sun Nov 08 23:10:22 2020 +0000
+++ b/usr.bin/make/cond.c       Sun Nov 08 23:20:19 2020 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: cond.c,v 1.195 2020/11/08 23:10:22 rillig Exp $        */
+/*     $NetBSD: cond.c,v 1.196 2020/11/08 23:20:19 rillig Exp $        */
 
 /*
  * Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
@@ -93,7 +93,7 @@
 #include "dir.h"
 
 /*     "@(#)cond.c     8.2 (Berkeley) 1/2/94"  */
-MAKE_RCSID("$NetBSD: cond.c,v 1.195 2020/11/08 23:10:22 rillig Exp $");
+MAKE_RCSID("$NetBSD: cond.c,v 1.196 2020/11/08 23:20:19 rillig Exp $");
 
 /*
  * The parsing of conditional expressions is based on this grammar:
@@ -718,10 +718,8 @@
     return arglen == 1;
 }
 
-/* Parse a function call, a number, a variable expression or a string
- * literal. */
-static Token
-CondParser_LeafToken(CondParser *par, Boolean doEval)
+static Boolean
+CondParser_Func(CondParser *par, Boolean doEval, Token *out_token)
 {
     static const struct fn_def {
        const char *fn_name;
@@ -738,17 +736,15 @@
        { NULL,       0, NULL, NULL },
     };
     const struct fn_def *fn_def;
-    Token t;
     char *arg = NULL;
     size_t arglen;
     const char *cp = par->p;
-    const char *cp1;
 
     for (fn_def = fn_defs; fn_def->fn_name != NULL; fn_def++) {
        if (!is_token(cp, fn_def->fn_name, fn_def->fn_name_len))
            continue;
+
        cp += fn_def->fn_name_len;
-       /* There can only be whitespace before the '(' */
        cpp_skip_whitespace(&cp);
        if (*cp != '(')
            break;
@@ -756,14 +752,32 @@
        arglen = fn_def->fn_parse(&cp, doEval, fn_def->fn_name, &arg);
        if (arglen == 0 || arglen == (size_t)-1) {
            par->p = cp;
-           return arglen == 0 ? TOK_FALSE : TOK_ERROR;
+           *out_token = arglen == 0 ? TOK_FALSE : TOK_ERROR;
+           return TRUE;
        }
        /* Evaluate the argument using the required function. */
-       t = ToToken(!doEval || fn_def->fn_eval(arglen, arg));
+       *out_token = ToToken(!doEval || fn_def->fn_eval(arglen, arg));
        free(arg);
        par->p = cp;
+       return TRUE;
+    }
+
+    return FALSE;
+}
+
+/* Parse a function call, a number, a variable expression or a string
+ * literal. */
+static Token
+CondParser_LeafToken(CondParser *par, Boolean doEval)
+{
+    Token t;
+    char *arg = NULL;
+    size_t arglen;
+    const char *cp = par->p;
+    const char *cp1;
+
+    if (CondParser_Func(par, doEval, &t))
        return t;
-    }
 
     /* Push anything numeric through the compare expression */
     cp = par->p;



Home | Main Index | Thread Index | Old Index