diff --git a/pkg/shsh/token.go b/pkg/shsh/token.go index fd81863..54ddd83 100644 --- a/pkg/shsh/token.go +++ b/pkg/shsh/token.go @@ -22,42 +22,41 @@ type parse_tag enum { type Token struct { Token *next - interface{} *_inner + interface{} _inner } -func lex(string input) string { +func lex(string input) Token { ret := new(Token) iter := &ret - // buffered reader via new or make i dunno - buff_is_dirty := false + var tok strings.Builder iter_alloced := false for pos, char := range input { switch char { case '\'', '\"', '`': // parse new token - fallthrough // ? + fallthrough case ' ', '\t', '\n', '\f', '\r': - // parse new token + *iter = new(Token) + (*iter)->_inner = tok.String() + iter_alloced = true case '(': // match paren - // parse list + *iter = new(Token) + (*iter)->_inner = lex(tok.String()) + iter_alloced = true case ')': // SHOULDNT HAPPEN default: - // add to buffer + tok.WriteRune(char) buf_is_dirty = true } - if buf_is_dirty { - // clear buffer - buf_is_dirty = false - } - if iter_alloced { iter = &(*iter)->next iter_alloced = false + // clear buffer } } }