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): distinguish between tokens and results...



details:   https://anonhg.NetBSD.org/src/rev/37ae790a5bb7
branches:  trunk
changeset: 980014:37ae790a5bb7
user:      rillig <rillig%NetBSD.org@localhost>
date:      Tue Jan 19 19:29:35 2021 +0000

description:
make(1): distinguish between tokens and results in conditionals

No functional change.

diffstat:

 usr.bin/make/cond.c |  93 +++++++++++++++++++++++++---------------------------
 1 files changed, 45 insertions(+), 48 deletions(-)

diffs (193 lines):

diff -r 1db3a6e77880 -r 37ae790a5bb7 usr.bin/make/cond.c
--- a/usr.bin/make/cond.c       Tue Jan 19 18:20:30 2021 +0000
+++ b/usr.bin/make/cond.c       Tue Jan 19 19:29:35 2021 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: cond.c,v 1.240 2021/01/19 18:20:30 rillig Exp $        */
+/*     $NetBSD: cond.c,v 1.241 2021/01/19 19:29:35 rillig Exp $        */
 
 /*
  * Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
@@ -95,7 +95,7 @@
 #include "dir.h"
 
 /*     "@(#)cond.c     8.2 (Berkeley) 1/2/94"  */
-MAKE_RCSID("$NetBSD: cond.c,v 1.240 2021/01/19 18:20:30 rillig Exp $");
+MAKE_RCSID("$NetBSD: cond.c,v 1.241 2021/01/19 19:29:35 rillig Exp $");
 
 /*
  * The parsing of conditional expressions is based on this grammar:
@@ -127,15 +127,16 @@
  * Other terminal symbols are evaluated using either the default function or
  * the function given in the terminal, they return either TOK_TRUE or
  * TOK_FALSE.
- *
- * All non-terminal functions (CondParser_Or, CondParser_And and
- * CondParser_Term) return either TOK_FALSE, TOK_TRUE, or TOK_ERROR on error.
  */
 typedef enum Token {
-       TOK_FALSE = 0, TOK_TRUE = 1, TOK_AND, TOK_OR, TOK_NOT,
+       TOK_FALSE, TOK_TRUE, TOK_AND, TOK_OR, TOK_NOT,
        TOK_LPAREN, TOK_RPAREN, TOK_EOF, TOK_NONE, TOK_ERROR
 } Token;
 
+typedef enum CondResult {
+       CR_FALSE, CR_TRUE, CR_ERROR
+} CondResult;
+
 typedef struct CondParser {
        const struct If *if_info; /* Info for current statement */
        const char *p;          /* The remaining condition to parse */
@@ -150,7 +151,7 @@
        Boolean printedError;
 } CondParser;
 
-static Token CondParser_Or(CondParser *par, Boolean);
+static CondResult CondParser_Or(CondParser *par, Boolean);
 
 static unsigned int cond_depth = 0;    /* current .if nesting level */
 static unsigned int cond_min_depth = 0;        /* depth at makefile open */
@@ -909,62 +910,60 @@
  * Term -> '!' Term
  * Term -> Leaf Operator Leaf
  * Term -> Leaf
- *
- * Results:
- *     TOK_TRUE, TOK_FALSE or TOK_ERROR.
  */
-static Token
+static CondResult
 CondParser_Term(CondParser *par, Boolean doEval)
 {
+       CondResult res;
        Token t;
 
        t = CondParser_Token(par, doEval);
-       if (t == TOK_TRUE || t == TOK_FALSE)
-               return t;
+       if (t == TOK_TRUE)
+               return CR_TRUE;
+       if (t == TOK_FALSE)
+               return CR_FALSE;
 
        if (t == TOK_LPAREN) {
-               t = CondParser_Or(par, doEval);
-               if (t == TOK_ERROR)
-                       return TOK_ERROR;
+               res = CondParser_Or(par, doEval);
+               if (res == CR_ERROR)
+                       return CR_ERROR;
                if (CondParser_Token(par, doEval) != TOK_RPAREN)
-                       return TOK_ERROR;
-               return t;
+                       return CR_ERROR;
+               return res;
        }
 
        if (t == TOK_NOT) {
-               t = CondParser_Term(par, doEval);
-               if (t == TOK_TRUE)
-                       t = TOK_FALSE;
-               else if (t == TOK_FALSE)
-                       t = TOK_TRUE;
-               return t;
+               res = CondParser_Term(par, doEval);
+               if (res == CR_TRUE)
+                       res = CR_FALSE;
+               else if (res == CR_FALSE)
+                       res = CR_TRUE;
+               return res;
        }
 
-       return TOK_ERROR;
+       return CR_ERROR;
 }
 
 /*
  * And -> Term '&&' And
  * And -> Term
- *
- * Results:
- *     TOK_TRUE, TOK_FALSE or TOK_ERROR
  */
-static Token
+static CondResult
 CondParser_And(CondParser *par, Boolean doEval)
 {
-       Token res, op;
+       CondResult res;
+       Token op;
 
        res = CondParser_Term(par, doEval);
-       if (res == TOK_ERROR)
-               return TOK_ERROR;
+       if (res == CR_ERROR)
+               return CR_ERROR;
 
        op = CondParser_Token(par, doEval);
        if (op == TOK_AND) {
-               if (res == TOK_TRUE)
+               if (res == CR_TRUE)
                        return CondParser_And(par, doEval);
-               if (CondParser_And(par, FALSE) == TOK_ERROR)
-                       return TOK_ERROR;
+               if (CondParser_And(par, FALSE) == CR_ERROR)
+                       return CR_ERROR;
                return res;
        }
 
@@ -975,25 +974,23 @@
 /*
  * Or -> And '||' Or
  * Or -> And
- *
- * Results:
- *     TOK_TRUE, TOK_FALSE or TOK_ERROR.
  */
-static Token
+static CondResult
 CondParser_Or(CondParser *par, Boolean doEval)
 {
-       Token res, op;
+       CondResult res;
+       Token op;
 
        res = CondParser_And(par, doEval);
-       if (res == TOK_ERROR)
-               return TOK_ERROR;
+       if (res == CR_ERROR)
+               return CR_ERROR;
 
        op = CondParser_Token(par, doEval);
        if (op == TOK_OR) {
-               if (res == TOK_FALSE)
+               if (res == CR_FALSE)
                        return CondParser_Or(par, doEval);
-               if (CondParser_Or(par, FALSE) == TOK_ERROR)
-                       return TOK_ERROR;
+               if (CondParser_Or(par, FALSE) == CR_ERROR)
+                       return CR_ERROR;
                return res;
        }
 
@@ -1004,18 +1001,18 @@
 static CondEvalResult
 CondParser_Eval(CondParser *par, Boolean *value)
 {
-       Token res;
+       CondResult res;
 
        DEBUG1(COND, "CondParser_Eval: %s\n", par->p);
 
        res = CondParser_Or(par, TRUE);
-       if (res != TOK_FALSE && res != TOK_TRUE)
+       if (res == CR_ERROR)
                return COND_INVALID;
 
        if (CondParser_Token(par, FALSE) != TOK_EOF)
                return COND_INVALID;
 
-       *value = res == TOK_TRUE;
+       *value = res == CR_TRUE;
        return COND_PARSE;
 }
 



Home | Main Index | Thread Index | Old Index