[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/geiser-chez a0f6fc3 15/37: Add rudimentary Chez support fo
From: |
Philip Kaludercic |
Subject: |
[nongnu] elpa/geiser-chez a0f6fc3 15/37: Add rudimentary Chez support for macro expansion |
Date: |
Sun, 1 Aug 2021 18:25:57 -0400 (EDT) |
branch: elpa/geiser-chez
commit a0f6fc32a81267154ed71f8668a1ecd227e7b37b
Author: Aaron Marks <nymacro@gmail.com>
Commit: Aaron Marks <nymacro@gmail.com>
Add rudimentary Chez support for macro expansion
---
scheme/chez/geiser/geiser.ss | 18 +++++++++++-------
scheme/chez/geiser/test.ss | 33 ++++++++++++++++++++++++++++++++-
2 files changed, 43 insertions(+), 8 deletions(-)
diff --git a/scheme/chez/geiser/geiser.ss b/scheme/chez/geiser/geiser.ss
index 70b6b67..5c92a5b 100644
--- a/scheme/chez/geiser/geiser.ss
+++ b/scheme/chez/geiser/geiser.ss
@@ -5,7 +5,8 @@
geiser:autodoc
geiser:no-values
geiser:load-file
- geiser:newline)
+ geiser:newline
+ geiser:macroexpand)
(import (chezscheme))
(define (last-index-of str-list char idx last-idx)
@@ -56,8 +57,8 @@
(k `((result "")
(output . ,(get-output-string output-string))
(error (key . ,(with-output-to-string
- (lambda ()
- (display-condition e))))))))
+ (lambda ()
+ (display-condition e))))))))
(lambda ()
(call-with-values
;; evaluate form, allow for multiple return values,
@@ -69,9 +70,9 @@
(eval form))))
(lambda result
`((result ,(with-output-to-string
- (lambda ()
- (pretty-print
- (if (null? (cdr result)) (car result)
result)))))
+ (lambda ()
+ (pretty-print
+ (if (null? (cdr result)) (car result)
result)))))
(output . ,(get-output-string output-string))))))))))
(newline)
(close-output-port output-string)))
@@ -145,4 +146,7 @@
#f)
(define (geiser:newline)
- #f))
+ #f)
+
+ (define (geiser:macroexpand form . rest)
+ (syntax->datum (expand form))))
diff --git a/scheme/chez/geiser/test.ss b/scheme/chez/geiser/test.ss
index ac5503b..21f3396 100644
--- a/scheme/chez/geiser/test.ss
+++ b/scheme/chez/geiser/test.ss
@@ -1,13 +1,21 @@
(import (geiser)
(chezscheme))
+(define-syntax assert-equal
+ (syntax-rules ()
+ ((_ a b)
+ (if (equal? a b)
+ #t
+ (begin
+ (display (format "failed assertion `~a' == `~a'" a b))
+ (assert (equal? a b)))))))
(define-syntax get-result
(syntax-rules ()
((_ form)
(with-output-to-string
(lambda ()
- (geiser:eval #f form))))))
+ (geiser:eval #f form))))))
(define-syntax do-test
(syntax-rules ()
@@ -17,6 +25,29 @@
(get-result form)
result)))))
+(define-syntax do-test-macroexpand
+ (syntax-rules ()
+ ((_ form result)
+ (assert
+ (equal? (geiser:macroexpand form)
+ result)))))
+
+(define-syntax test-or
+ (syntax-rules ()
+ ((_ x) x)
+ ((_ x xs ...)
+ (if x
+ x
+ (test-or xs ...)))))
+
+(do-test-macroexpand
+ '(test-or 1)
+ '1)
+
+(do-test-macroexpand
+ '(test-or 1 2)
+ '(if 1 1 2))
+
;; (something-doesnot-exist)
;;=> Error: Exception: variable something-doesnot-exist is not bound
(do-test
- [nongnu] elpa/geiser-chez 1bb0a87 06/37: Handle exceptions of ChezScheme and multi-value as well, (continued)
- [nongnu] elpa/geiser-chez 1bb0a87 06/37: Handle exceptions of ChezScheme and multi-value as well, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-chez 993b630 07/37: Alway pretty-print for results, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-chez ab13b7f 03/37: Chez: add rudimentary autodoc support, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-chez e4c15a7 04/37: fix call the chez scheme executable., Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-chez 6a83bee 08/37: rewritten geiser:eval to fix the following bug:, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-chez 2fb484b 05/37: Use (car (process-lines ...)) instead of (shell-command ...), Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-chez a5a6176 11/37: fix compile and load for chez, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-chez 2d682c0 13/37: fix for geiser-chez-parameters, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-chez 7bc8f62 14/37: Capture stdout in ChezScheme's eval:geiser, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-chez 352515c 16/37: Begin the summary lines of all elisp libraries with three semicolons, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-chez a0f6fc3 15/37: Add rudimentary Chez support for macro expansion,
Philip Kaludercic <=
- [nongnu] elpa/geiser-chez 146d4a7 18/37: Fix indentation, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-chez 9d66c63 24/37: chez: pretty printing macroexpand results., Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-chez 502b3ac 20/37: Use cl-lib instead of cl, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-chez 086dbba 23/37: make chez display output and error messages., Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-chez 94296d8 25/37: files moved from original import locations, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-chez 111ecdd 26/37: scheme load path adjustments, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-chez 055e43d 27/37: license and readme, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-chez e038c28 09/37: more reduction on geiser:eval, add test, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-chez 6eb6a92 10/37: simple geiser-chez--display-error, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-chez 591c794 17/37: Mark the beginning of code part of elisp libraries with Code: heading, Philip Kaludercic, 2021/08/01