From 67cc243e34eb93ae23333afc4b234f71b73a4a11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C5=99emysl=20Janouch?= Date: Thu, 22 Jun 2017 16:14:11 +0200 Subject: _init() and _INITIALIZER -> _make() Gets rid of stupid memset()s and some preprocessor. --- ell.c | 41 ++++++++++++++++++++--------------------- interpreter.c | 8 +++----- repl.c | 5 ++--- 3 files changed, 25 insertions(+), 29 deletions(-) diff --git a/ell.c b/ell.c index e3951c4..670bc12 100644 --- a/ell.c +++ b/ell.c @@ -72,7 +72,10 @@ struct ell_buffer { bool memory_failure; ///< Memory allocation failed }; -#define ELL_BUFFER_INITIALIZER { NULL, 0, 0, false } +static struct ell_buffer +ell_buffer_make (void) { + return (struct ell_buffer) { NULL, 0, 0, false }; +} static bool ell_buffer_append (struct ell_buffer *self, const void *s, size_t n) { @@ -212,9 +215,9 @@ struct ell_lexer { struct ell_buffer string; ///< Parsed string value }; -static void -ell_lexer_init (struct ell_lexer *self, const char *p, size_t len) { - *self = (struct ell_lexer) { .p = (const unsigned char *) p, .len = len }; +static struct ell_lexer +ell_lexer_make (const char *p, size_t len) { + return (struct ell_lexer) { .p = (const unsigned char *) p, .len = len }; } static void @@ -311,7 +314,7 @@ ell_lexer_next (struct ell_lexer *self, const char **e) { return ELLT_ABORT; free (self->string.s); - self->string = (struct ell_buffer) ELL_BUFFER_INITIALIZER; + self->string = ell_buffer_make (); int c = ell_lexer_advance (self); if (c == ELL_LEXER_COMMENT) { @@ -476,14 +479,14 @@ struct ell_parser { bool memory_failure; ///< Memory allocation failed }; -static void -ell_parser_init (struct ell_parser *p, const char *script, size_t len) { - memset (p, 0, sizeof *p); - ell_lexer_init (&p->lexer, script, len); - +static struct ell_parser +ell_parser_make (const char *script, size_t len) { // As reading in tokens may cause exceptions, we wait for the first peek() // to replace the initial ELLT_ABORT. - p->replace_token = true; + return (struct ell_parser) { + .lexer = ell_lexer_make (script, len), + .replace_token = true, + }; } static void @@ -673,10 +676,7 @@ struct ell_native_fn { char name[]; ///< The name of the function }; -static void -ell_init (struct ell *ell) { - memset (ell, 0, sizeof *ell); -} +static struct ell ell_make (void) { return (struct ell) {}; } static void ell_free (struct ell *ell) { @@ -990,7 +990,7 @@ ell_number (double n) { } static bool ell_truthy (struct ell_v *v) { return v && (v->head || v->len); } -static struct ell_v * ell_boolean (bool b) { return ell_string ("1", b); } +static struct ell_v *ell_boolean (bool b) { return ell_string ("1", b); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -1127,7 +1127,7 @@ ell_defn (ell_fn_print) { } ell_defn (ell_fn_cat) { - struct ell_buffer buf = ELL_BUFFER_INITIALIZER; + struct ell_buffer buf = ell_buffer_make (); struct ell_buffer_printer bp = { { ell_buffer_printer_putchar }, &buf }; for (; args; args = args->next) { if (args->type != ELL_STRING) @@ -1155,8 +1155,7 @@ ell_defn (ell_fn_parse) { if (!body || body->type != ELL_STRING) return ell_error (ell, "first argument must be string"); - struct ell_parser p; - ell_parser_init (&p, args->string, args->len); + struct ell_parser p = ell_parser_make (args->string, args->len); const char *e = NULL; bool ok = ell_check (ell, (*result = ell_list (ell_parser_run (&p, &e)))); if (e) @@ -1392,8 +1391,8 @@ ell_std_initialize (struct ell *ell) { return false; } - struct ell_parser p; - ell_parser_init (&p, ell_std_composed, sizeof ell_std_composed); + struct ell_parser p = + ell_parser_make (ell_std_composed, sizeof ell_std_composed); const char *e = NULL; struct ell_v *result = NULL; diff --git a/interpreter.c b/interpreter.c index c87e0ce..1c0eca1 100644 --- a/interpreter.c +++ b/interpreter.c @@ -28,14 +28,13 @@ main (int argc, char *argv[]) { } int c; - struct ell_buffer buf = ELL_BUFFER_INITIALIZER; + struct ell_buffer buf = ell_buffer_make (); while ((c = fgetc (fp)) != EOF) ell_buffer_append_c (&buf, c); ell_buffer_append_c (&buf, 0); fclose (fp); - struct ell_parser p; - ell_parser_init (&p, buf.s, buf.len - 1); + struct ell_parser p = ell_parser_make (buf.s, buf.len - 1); const char *e = NULL; struct ell_v *program = ell_parser_run (&p, &e); free (buf.s); @@ -45,8 +44,7 @@ main (int argc, char *argv[]) { } ell_parser_free (&p); - struct ell ell; - ell_init (&ell); + struct ell ell = ell_make (); if (!ell_std_initialize (&ell)) printf ("%s\n", "runtime library initialization failed"); diff --git a/repl.c b/repl.c index e84af3a..2692b8f 100644 --- a/repl.c +++ b/repl.c @@ -84,7 +84,7 @@ int main (int argc, char *argv[]) { (void) argc; - ell_init (&ell); + ell = ell_make (); if (!ell_std_initialize (&ell)) printf ("%s\n", "runtime library initialization failed"); @@ -96,8 +96,7 @@ main (int argc, char *argv[]) { char *line; while ((line = readline ("> "))) { - struct ell_parser p; - ell_parser_init (&p, line, strlen (line)); + struct ell_parser p = ell_parser_make (line, strlen (line)); add_history (line); const char *e = NULL; -- cgit v1.2.3