summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Templeton <bpt@hcoop.net>2010-07-22 15:12:50 -0400
committerAndy Wingo <wingo@pobox.com>2010-12-07 13:21:02 +0100
commitb7966c10efaaaf95e3a6fe300e79d9c3c195bde5 (patch)
tree6104c024c64394fcf0fa9ae43fab3d18f95c05cc
parentf5742cf042fbcdb9b8319a6b96fd32b03dcb42ca (diff)
downloadguile-b7966c10efaaaf95e3a6fe300e79d9c3c195bde5.tar.gz
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 <wingo@pobox.com>
-rw-r--r--module/language/elisp/lexer.scm11
-rw-r--r--module/language/elisp/parser.scm2
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))))