| } | } | ||||
| } | } | ||||
| static int repl() { | |||||
| static void repl() { | |||||
| struct l2_io_mem_writer w = { | struct l2_io_mem_writer w = { | ||||
| .w.write = l2_io_mem_write, | .w.write = l2_io_mem_write, | ||||
| }; | }; | ||||
| char line[4096]; | char line[4096]; | ||||
| #ifdef USE_READLINE | #ifdef USE_READLINE | ||||
| char *rline = readline("> "); | char *rline = readline("> "); | ||||
| if (rline == NULL) return -1; | |||||
| if (rline == NULL) return; | |||||
| if (rline[0] == '\0') continue; | if (rline[0] == '\0') continue; | ||||
| snprintf(line, sizeof(line), "print (%s)", rline); | snprintf(line, sizeof(line), "print (%s)", rline); | ||||
| free(rline); | free(rline); | ||||
| #else | #else | ||||
| char rline[4096]; | char rline[4096]; | ||||
| if (fgets(rline, sizeof(rline), stdin) == NULL) return -1; | |||||
| if (fgets(rline, sizeof(rline), stdin) == NULL) return; | |||||
| if (rline[0] == '\n' && rline[1] == '\0') continue; | if (rline[0] == '\n' && rline[1] == '\0') continue; | ||||
| snprintf(line, sizeof(line), "print (%s)", rline); | snprintf(line, sizeof(line), "print (%s)", rline); | ||||
| #endif | #endif | ||||
| l2_vm_gc(&vm); | l2_vm_gc(&vm); | ||||
| } | } | ||||
| } | } | ||||
| return 0; | |||||
| } | } | ||||
| static void usage(const char *argv0) { | static void usage(const char *argv0) { | ||||
| } | } | ||||
| if (do_repl) { | if (do_repl) { | ||||
| if (repl() < 0) { | |||||
| return 1; | |||||
| } | |||||
| repl(); | |||||
| printf("\n"); | |||||
| return 0; | return 0; | ||||
| } | } | ||||