diff options
author | Anton Kling <anton@kling.gg> | 2024-10-11 16:43:15 +0200 |
---|---|---|
committer | Anton Kling <anton@kling.gg> | 2024-10-11 16:43:15 +0200 |
commit | 01281bfbf523a80edad7999bb471104e8f43e2da (patch) | |
tree | 61f6bd56245a16eada86ed2f85b374d5e9215307 | |
parent | f4a7c749b0f4bfa4c1007e64ca5f8ecb254bbfe1 (diff) |
sh: Add parsing of newlines
-rw-r--r-- | userland/minibox/utilities/sh/ast.c | 3 | ||||
-rw-r--r-- | userland/minibox/utilities/sh/lexer.c | 3 | ||||
-rw-r--r-- | userland/minibox/utilities/sh/lexer.h | 1 |
3 files changed, 6 insertions, 1 deletions
diff --git a/userland/minibox/utilities/sh/ast.c b/userland/minibox/utilities/sh/ast.c index 98f4818..2b9c151 100644 --- a/userland/minibox/utilities/sh/ast.c +++ b/userland/minibox/utilities/sh/ast.c @@ -75,6 +75,9 @@ int parse_command(struct TOKEN **token_ptr, struct AST *cur) { exit(1); } } + if (token && TOKEN_NEWLINE == token->type) { + token = token->next; + } *token_ptr = token; return 1; } diff --git a/userland/minibox/utilities/sh/lexer.c b/userland/minibox/utilities/sh/lexer.c index 40e7211..d7f00c7 100644 --- a/userland/minibox/utilities/sh/lexer.c +++ b/userland/minibox/utilities/sh/lexer.c @@ -50,6 +50,7 @@ int parse_operand(struct sv *code_ptr, struct TOKEN *cur) { TRY_PARSE_STRING(">", TOKEN_STREAM); TRY_PARSE_STRING("|", TOKEN_PIPE); TRY_PARSE_STRING("&", TOKEN_BACKGROUND); + TRY_PARSE_STRING("\n", TOKEN_NEWLINE); // Failed to parse return 0; @@ -63,7 +64,7 @@ void skip_whitespace_and_comment(struct sv *s) { struct sv start; do { start = *s; - *s = sv_skip_chars(*s, " \t\n\r"); + *s = sv_skip_chars(*s, " \t\r"); if (!sv_partial_eq(*s, C_TO_SV("#"))) { return; } diff --git a/userland/minibox/utilities/sh/lexer.h b/userland/minibox/utilities/sh/lexer.h index 887c923..4a7e61c 100644 --- a/userland/minibox/utilities/sh/lexer.h +++ b/userland/minibox/utilities/sh/lexer.h @@ -12,6 +12,7 @@ typedef enum { TOKEN_STREAM, TOKEN_STREAM_APPEND, TOKEN_BACKGROUND, + TOKEN_NEWLINE, } token_type_t; struct TOKEN { |