diff --git a/geesh/lexer.scm b/geesh/lexer.scm index 0318156..1d2a9af 100644 --- a/geesh/lexer.scm +++ b/geesh/lexer.scm @@ -385,6 +385,7 @@ next character statisfies @var{pred} (or is a newline)." (#\" (begin (get-char port) `( ,(match (join-contiguous-strings (reverse! acc)) + (() "") ((word) word) (words words))))) ((or #\$ #\`) diff --git a/tests/lexer.scm b/tests/lexer.scm index 08cd548..ede50cb 100644 --- a/tests/lexer.scm +++ b/tests/lexer.scm @@ -225,6 +225,10 @@ '((WORD (0 . 12) ( "foo\n#\\`$<\""))) (tokenize "'foo\n#\\`$<\"'")) +(test-equal "Lexes an empty single quotation" + '((WORD (0 . 2) ( ""))) + (tokenize "''")) + ;;; ;;; Double quotations. ;;; @@ -241,6 +245,10 @@ '((WORD (0 . 9) ( "foo\n#<'"))) (tokenize "\"foo\n#<'\"")) +(test-equal "Recognizes an empty double quotation" + '((WORD (0 . 2) ( ""))) + (tokenize "\"\"")) + (test-equal "Respects escapes for special characters in double quotations" '((WORD (0 . 10) ( ("foo" ( "\"") "bar")))) (tokenize "\"foo\\\"bar\""))