diff options
-rw-r--r-- | module/language/elisp/lexer.scm | 30 |
1 files changed, 18 insertions, 12 deletions
diff --git a/module/language/elisp/lexer.scm b/module/language/elisp/lexer.scm index 8152a1182..826f6df87 100644 --- a/module/language/elisp/lexer.scm +++ b/module/language/elisp/lexer.scm @@ -370,18 +370,24 @@ (lambda (type str) (case type ((symbol) - ;; str could be empty if the first character is already - ;; something not allowed in a symbol (and not escaped)! - ;; Take care about that, it is an error because that - ;; character should have been handled elsewhere or is - ;; invalid in the input. - (if (zero? (string-length str)) - (begin - ;; Take it out so the REPL might not get into an - ;; infinite loop with further reading attempts. - (read-char port) - (error "invalid character in input" c)) - (return 'symbol (string->symbol str)))) + (cond + ((equal? str "nil") + (return 'symbol #nil)) + ((equal? str "t") + (return 'symbol #t)) + (else + ;; str could be empty if the first character is already + ;; something not allowed in a symbol (and not escaped)! + ;; Take care about that, it is an error because that + ;; character should have been handled elsewhere or is + ;; invalid in the input. + (if (zero? (string-length str)) + (begin + ;; Take it out so the REPL might not get into an + ;; infinite loop with further reading attempts. + (read-char port) + (error "invalid character in input" c)) + (return 'symbol (string->symbol str)))))) ((integer) ;; In elisp, something like "1." is an integer, while ;; string->number returns an inexact real. Thus we need |