diff --git a/user/tb/interp.c b/user/tb/interp.c index 4a7469f..e04c3a1 100644 --- a/user/tb/interp.c +++ b/user/tb/interp.c @@ -28,7 +28,13 @@ void tz_free(Tokenizer *tz) { void tz_tokenize(Tokenizer *tz) { size_t len = string_len(tz->str); - for (size_t i = 0; i < len; i++) { + size_t i = 0; + + while (i < len && string_chr_isspace(tz->str[i])) { + i++; + } + + for (; i < len; i++) { if (tz->str[i] == '\'') { char *str = umalloc(TZ_MAX_TK); string_memset(str, 0, TZ_MAX_TK); @@ -167,7 +173,7 @@ bool interp_runstring(char *string, InterpResult **res, bool logcmds, bool inter rt_init(); bool ok = true; - char *line = string_tokenizealloc(string, "\n"); + char *line = string_tokenizealloc_linecontinue(string, "\n"); while (line != NULL) { if (logcmds) { uprintf("+%s\n", line); @@ -176,7 +182,8 @@ bool interp_runstring(char *string, InterpResult **res, bool logcmds, bool inter bool skip; STRING_CHECK_ALL(line, string_chr_isspace, skip); if (skip) { - line = string_tokenizealloc(NULL, "\n"); + ufree(line); + line = string_tokenizealloc_linecontinue(NULL, "\n"); continue; } @@ -250,7 +257,7 @@ bool interp_runstring(char *string, InterpResult **res, bool logcmds, bool inter next: tz_free(&tz); ufree(line); - line = string_tokenizealloc(NULL, "\n"); + line = string_tokenizealloc_linecontinue(NULL, "\n"); } return ok;