diff options
author | Francesco Romani <fromani@gmail.com> | 2014-07-07 08:09:06 +0200 |
---|---|---|
committer | Sebastian Dröge <sebastian@centricular.com> | 2023-04-12 21:12:41 +0300 |
commit | 4d1cee7b0d5ff28e504765590ca800d0febbc84c (patch) | |
tree | 4bc1e5b4f8d50851565575c0a3792a9fb87be866 | |
parent | ab5e9df025b5937c7b56477905d27e910d7296e6 (diff) | |
download | orc-4d1cee7b0d5ff28e504765590ca800d0febbc84c.tar.gz |
parser: extract function to handle .function
Co-authored-by: Sebastian Dröge <sebastian@centricular.com>
Part-of: <https://gitlab.freedesktop.org/gstreamer/orc/-/merge_requests/30>
-rw-r--r-- | orc/orcparse.c | 65 |
1 files changed, 43 insertions, 22 deletions
diff --git a/orc/orcparse.c b/orc/orcparse.c index 1bda8d5..2fbb842 100644 --- a/orc/orcparse.c +++ b/orc/orcparse.c @@ -91,6 +91,7 @@ static void orc_parse_advance (OrcParser *parser); static void orc_parse_sanity_check (OrcParser *parser, OrcProgram *program); static int orc_parse_handle_legacy (OrcParser *parser, const OrcLine *line); +static int orc_parse_handle_function (OrcParser *parser, const OrcLine *line); static int orc_parse_handle_directive (OrcParser *parser, const OrcLine *line); static int orc_parse_handle_opcode (OrcParser *parser, const OrcLine *line); @@ -430,28 +431,7 @@ orc_parse_handle_legacy (OrcParser *parser, const OrcLine *line) const char **token = (const char **)(line->tokens); int n_tokens = line->n_tokens; - if (strcmp (token[0], ".function") == 0) { - if (n_tokens < 2) { - orc_parse_add_error (parser, "line %d: .function without function name\n", - parser->line_number); - } else { - if (parser->program) { - orc_parse_sanity_check (parser, parser->program); - } - parser->program = orc_program_new (); - orc_program_set_name (parser->program, token[1]); - - orc_vector_append (&parser->programs, parser->program); - parser->creg_index = 1; - } - } else if (strcmp (token[0], ".backup") == 0) { - if (n_tokens < 2) { - orc_parse_add_error (parser, "line %d: .backup without function name\n", - parser->line_number); - } else { - orc_program_set_backup_name (parser->program, token[1]); - } - } else if (strcmp (token[0], ".init") == 0) { + if (strcmp (token[0], ".init") == 0) { free (parser->init_function); parser->init_function = NULL; if (n_tokens < 2) { @@ -631,9 +611,50 @@ orc_parse_handle_legacy (OrcParser *parser, const OrcLine *line) } static int +orc_parse_handle_function (OrcParser *parser, const OrcLine *line) +{ + const char *name; + + if (line->n_tokens < 2) { + orc_parse_add_error (parser, "line %d: .function without function name\n", + parser->line_number); + name = "unknown_function"; + } else { + name = line->tokens[1]; + } + + if (parser->program) { + orc_parse_sanity_check (parser, parser->program); + } + parser->program = orc_program_new (); + orc_program_set_name (parser->program, name); + + orc_vector_append (&parser->programs, parser->program); + parser->creg_index = 1; + + return 1; +} + +static int +orc_parse_handle_backup (OrcParser *parser, const OrcLine *line) +{ + if (line->n_tokens < 2) { + orc_parse_add_error (parser, "line %d: .backup without function name\n", + parser->line_number); + return 0; + } + + orc_program_set_backup_name (parser->program, line->tokens[1]); + + return 1; +} + +static int orc_parse_handle_directive (OrcParser *parser, const OrcLine *line) { static const OrcDirective dirs[] = { + { ".function", orc_parse_handle_function }, + { ".backup", orc_parse_handle_backup }, { NULL, NULL } }; int i; |