| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | #include <signal.h> | ||
| 2 | #include "gwion_util.h" | ||
| 3 | #include "gwion_ast.h" | ||
| 4 | #include "gwion_env.h" | ||
| 5 | #include "vm.h" | ||
| 6 | #include "gwion.h" | ||
| 7 | #include "arg.h" | ||
| 8 | |||
| 9 | static struct Gwion_ gwion = {}; | ||
| 10 | |||
| 11 | 1 | static void sig(int unused NUSED) { | |
| 12 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | if(gwion.vm) |
| 13 | 1 | gwion.vm->bbq->is_running = false; | |
| 14 | else | ||
| 15 | ✗ | exit(EXIT_FAILURE); | |
| 16 | 1 | } | |
| 17 | |||
| 18 | #ifdef __AFL_HAVE_MANUAL_CONTROL | ||
| 19 | |||
| 20 | #include "compile.h" | ||
| 21 | |||
| 22 | static void afl_run(const Gwion gwion) { | ||
| 23 | const Env env = gwion->env; | ||
| 24 | __AFL_INIT(); | ||
| 25 | while (__AFL_LOOP(128)) { | ||
| 26 | const Nspc nspc = env->global_nspc; | ||
| 27 | env->curr = env->global_nspc = new_nspc(gwion->mp, "[afl]"); | ||
| 28 | env->global_nspc->parent = nspc; | ||
| 29 | FILE *f = fdopen(0, "r"); | ||
| 30 | if (compile_file(gwion, "afl", f)) gwion_run(gwion); | ||
| 31 | free_nspc(env->global_nspc, env->gwion); | ||
| 32 | env->curr = env->global_nspc = nspc; | ||
| 33 | } | ||
| 34 | } | ||
| 35 | |||
| 36 | int main(int argc, char **argv) { | ||
| 37 | Arg arg = {}; | ||
| 38 | gwion_ini(&gwion, &arg); | ||
| 39 | arg_release(&arg); | ||
| 40 | afl_run(&gwion); | ||
| 41 | return EXIT_SUCCESS; | ||
| 42 | } | ||
| 43 | |||
| 44 | #else | ||
| 45 | |||
| 46 | #ifdef GWION_CONFIG_ARGS | ||
| 47 | ANN char **config_args(int *, char **const); | ||
| 48 | #endif | ||
| 49 | #ifdef GWION_EMBED | ||
| 50 | ANN void gwion_embed(const Gwion); | ||
| 51 | #endif | ||
| 52 | |||
| 53 | 707 | int main(int argc, char **argv) { | |
| 54 | #ifndef GWION_CONFIG_ARGS | ||
| 55 | 707 | CliArg arg = {.arg = {.argc = argc, .argv = argv}, .loop = false}; | |
| 56 | #else | ||
| 57 | char **config_argv = config_args(&argc, argv); | ||
| 58 | CliArg arg = {.arg = {.argc = argc, .argv = config_argv}, .loop = false}; | ||
| 59 | #endif | ||
| 60 | 707 | signal(SIGINT, sig); | |
| 61 | 707 | signal(SIGTERM, sig); | |
| 62 | 707 | const m_bool ini = gwion_ini(&gwion, &arg); | |
| 63 | #ifdef GWION_EMBED | ||
| 64 | gwion_embed(&gwion); | ||
| 65 | #endif | ||
| 66 | 707 | arg_compile(&gwion, &arg); | |
| 67 | 707 | arg_release(&arg); | |
| 68 | #ifdef GWION_CONFIG_ARGS | ||
| 69 | free(config_argv); | ||
| 70 | #endif | ||
| 71 |
2/2✓ Branch 0 taken 638 times.
✓ Branch 1 taken 69 times.
|
707 | if (ini > 0) gwion_run(&gwion); |
| 72 | 707 | gwion_end(&gwion); | |
| 73 | 707 | gwion.vm = NULL; | |
| 74 | 707 | exit(EXIT_SUCCESS); | |
| 75 | } | ||
| 76 | |||
| 77 | #endif | ||
| 78 |