diff options
-rw-r--r-- | module/language/elisp/lexer.scm | 11 | ||||
-rw-r--r-- | module/language/elisp/parser.scm | 2 |
2 files changed, 10 insertions, 3 deletions
diff --git a/module/language/elisp/lexer.scm b/module/language/elisp/lexer.scm index b201e18ce..ed6c5f8e2 100644 --- a/module/language/elisp/lexer.scm +++ b/module/language/elisp/lexer.scm @@ -313,10 +313,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 baac7f74c..df825eb4e 100644 --- a/module/language/elisp/parser.scm +++ b/module/language/elisp/parser.scm @@ -183,6 +183,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)))) |