From b7966c10efaaaf95e3a6fe300e79d9c3c195bde5 Mon Sep 17 00:00:00 2001 From: Brian Templeton Date: Thu, 22 Jul 2010 15:12:50 -0400 Subject: [PATCH] support "#'" syntax for function expressions * module/language/elisp/lexer.scm (lex): * module/language/elisp/parser.scm (get-expression): Support sharpsign single-quote syntax as an abbreviation for `function' expressions. Signed-off-by: Andy Wingo --- module/language/elisp/lexer.scm | 11 ++++++++--- 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))))