diff --git a/module/language/elisp/lexer.scm b/module/language/elisp/lexer.scm index c0d25f5ae..b199257b5 100644 --- a/module/language/elisp/lexer.scm +++ b/module/language/elisp/lexer.scm @@ -314,10 +314,15 @@ (cons (integer->char (get-character port #t)) result-chars)))))) (else (iterate (cons cur result-chars))))))) - ;; Circular markers (either reference or definition). ((#\#) - (let ((mark (get-circular-marker port))) - (return (car mark) (cdr mark)))) + (let ((c (read-char port))) + (case c + ((#\0 #\1 #\2 #\3 #\4 #\5 #\6 #\7 #\8 #\9) + (unread-char c port) + (let ((mark (get-circular-marker port))) + (return (car mark) (cdr mark)))) + ((#\') + (return 'function #f))))) ;; Parentheses and other special-meaning single characters. ((#\() (return 'paren-open #f)) ((#\)) (return 'paren-close #f)) diff --git a/module/language/elisp/parser.scm b/module/language/elisp/parser.scm index d420136d0..9d7f7b541 100644 --- a/module/language/elisp/parser.scm +++ b/module/language/elisp/parser.scm @@ -182,6 +182,8 @@ (parse-error token "end of file during parsing")) ((integer float symbol character string) (return (cdr token))) + ((function) + (return `(function ,(get-expression lex)))) ((quote backquote unquote unquote-splicing) (return (list (assq-ref quotation-symbols type) (get-expression lex))))