From 73414716bbc8bd3c3c1404f4a06cb85391b77ef2 Mon Sep 17 00:00:00 2001 From: Timothy Sample Date: Fri, 9 Nov 2018 16:22:11 -0500 Subject: [PATCH] Fix lexing of empty double quotes * geesh/lexer.scm (get-double-quotation): Handle empty quotation. * tests/lexer.scm: Add a test for this and for empty single quotes (which already worked correctly). --- geesh/lexer.scm | 1 + tests/lexer.scm | 8 ++++++++ 2 files changed, 9 insertions(+) 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\""))