diff options
| author | Ákos Kőrösi <korakos99@gmail.com> | 2026-05-18 12:29:53 +0200 |
|---|---|---|
| committer | Ákos Kőrösi <korakos99@gmail.com> | 2026-05-18 12:29:53 +0200 |
| commit | d31d9ce64c3085bea1a094e649f62176b1a896a6 (patch) | |
| tree | ed5b33946fb75a7ceaa275b02c09a5874771f668 | |
| parent | 7c69040ab68097811cb58e36a86b25a064e4c465 (diff) | |
put line processing in exec
| -rw-r--r-- | exec.c | 18 | ||||
| -rw-r--r-- | exec.h | 2 | ||||
| -rw-r--r-- | main.c | 15 |
3 files changed, 20 insertions, 15 deletions
@@ -196,3 +196,21 @@ void run_pipeline(Pipeline pl, ShellState* shstate) { while (waitpid(-pgid, NULL, 0) > 0); tcsetpgrp(STDIN_FILENO, getpgrp()); } + + +void process_input_line(char* line, ShellState* shstate) { + PreprocArena arena = { + .tokens = make_TokenVec(256), + .chunks = make_ChunkVec(256), + .regions = make_RegionVec(256), + }; + TokenPtrVec line_tok_ptrs = lex(line, &arena); + Token* line_toks = malloc(sizeof(Token) * line_tok_ptrs.count); + for (int i = 0; i < line_tok_ptrs.count; i++) { + line_toks[i] = **get_from_TokenPtrVec(&line_tok_ptrs, i); + } + Pipeline pl = parse_tokstream(line_toks); + run_pipeline(pl, shstate); + free(line_toks); +} + @@ -9,4 +9,4 @@ typedef struct { KeyValMap shell_vars; } ShellState; -void run_pipeline(Pipeline pl, ShellState* shstate); +void process_input_line(char* line, ShellState* shstate); @@ -3,7 +3,6 @@ #include <readline/readline.h> #include <string.h> -#include "preproc.h" #include "exec.h" @@ -14,19 +13,7 @@ int main() { line = readline("$ "); if (line[0] == '\0') continue; if (strcmp(line, "exit") == 0) exit(0); - PreprocArena arena = { - .tokens = make_TokenVec(256), - .chunks = make_ChunkVec(256), - .regions = make_RegionVec(256), - }; - TokenPtrVec line_tok_ptrs = lex(line, &arena); - Token* tokstream = malloc(sizeof(Token) * line_tok_ptrs.count); - for (int i = 0; i < line_tok_ptrs.count; i++) { - tokstream[i] = **get_from_TokenPtrVec(&line_tok_ptrs, i); - } - Pipeline pl = parse_tokstream(tokstream); - run_pipeline(pl, &shstate); - free(tokstream); + process_input_line(line, &shstate); } free(line); } |
