]> git.draconx.ca Git - cdecl99.git/commitdiff
cdecl99: Simplify main loops a bit.
authorNick Bowler <nbowler@draconx.ca>
Wed, 5 Jul 2023 05:48:11 +0000 (01:48 -0400)
committerNick Bowler <nbowler@draconx.ca>
Wed, 5 Jul 2023 05:48:31 +0000 (01:48 -0400)
Convert the calls to repl/repl_execute to tail calls from main.

src/cdecl99.c

index 1b821689625645e57265572d2f873767336d0d57..6eb00df53a57b934e06ee353a0813af17d607b08 100644 (file)
@@ -139,7 +139,7 @@ static int do_getline(char **linebuf, size_t *n)
        return 1;
 }
 
-static int do_readline(char **linebuf, size_t *n, int batch)
+static int do_readline(char **linebuf, size_t *n, bool batch)
 {
 #if !HAVE_READLINE
        if (!batch) {
@@ -161,38 +161,38 @@ static int do_readline(char **linebuf, size_t *n, int batch)
 #endif
 }
 
-static int repl(int batch)
+static int repl(bool batch)
 {
        char *line = NULL;
-       int ret = 0;
+       bool fail = 0;
        size_t n;
 
        while (do_readline(&line, &n, batch)) {
                int rc = run_command(line, batch);
                if (rc > 0)
                        break;
-               else if (rc < 0)
-                       ret = -batch;
+               if (rc < 0)
+                       fail = batch;
        }
 
        free(line);
-       return ret;
+       return fail ? EXIT_FAILURE : 0;
 }
 
 static int repl_cmdline(unsigned count, char **commands)
 {
-       int ret = 0;
+       bool fail = 0;
        unsigned i;
 
        for (i = 0; i < count; i++) {
                int rc = run_command(commands[i], true);
-               if (rc < 0)
-                       ret = -1;
-               else if (rc > 0)
+               if (rc > 0)
                        break;
+               if (rc < 0)
+                       fail = true;
        }
 
-       return ret;
+       return fail ? EXIT_FAILURE : 0;
 }
 
 /* Initialize gettext */
@@ -285,7 +285,7 @@ static int initialize(int argc, char **argv)
 
 int main(int argc, char **argv)
 {
-       int rc, execute;
+       int execute;
 
        switch ((execute = initialize(argc, argv))) {
        case INIT_EXIT_SUCCESS: return EXIT_SUCCESS;
@@ -293,11 +293,7 @@ int main(int argc, char **argv)
        }
 
        if (execute)
-               rc = repl_cmdline(execute, argv);
+               return repl_cmdline(execute, argv);
        else
-               rc = repl(batch_mode);
-
-       if (rc != 0)
-               return EXIT_FAILURE;
-       return EXIT_SUCCESS;
+               return repl(batch_mode);
 }