From: Mike Gran <spk121@yahoo.com>
To: Zelphir Kaltstahl <zelphirkaltstahl@gmail.com>
Cc: guile-user@gnu.org
Subject: Re: Guile assert macro
Date: Mon, 22 Apr 2019 12:36:25 -0700 [thread overview]
Message-ID: <20190422193625.GA30071@spikycactus.attlocal.net> (raw)
In-Reply-To: <5017489f-1e55-a3db-07c9-c1158c3160f8@gmail.com>
[-- Attachment #1: Type: text/plain, Size: 512 bytes --]
On Mon, Apr 22, 2019 at 08:57:32PM +0200, Zelphir Kaltstahl wrote:
> Hello Guile users,
>
> I was looking for an assert facility in Guile and found the following:
>
> https://www.gnu.org/software/guile/manual/html_node/rnrs-base.html#rnrs-base
>
> (Search for assert there to find it on the page.)
>
> However, while searching, I also found something that looks even better:
>
> http://okmij.org/ftp/Scheme/assert-syntax-rule.txt
This is my assert macro. I'm sure there are dozens of other versions.
---
[-- Attachment #2: assert.scm --]
[-- Type: text/plain, Size: 1044 bytes --]
(define-module (mlg assert)
#:export (assert
assert-type))
(define-syntax __FILE__
(syntax-rules ()
((_)
(or (assv-ref (current-source-location) 'filename)
"(unknown file)"))))
(define-syntax __LINE__
(syntax-rules ()
((_)
(or (assv-ref (current-source-location) 'line)
"(unknown line)"))))
(define-syntax assert
(lambda (x)
(syntax-case x ()
((_ expression)
#'(let ((ret expression))
(unless ret
(error
(format #f "~a:~a: assertion failed: ~a = ~s"
(__FILE__) (__LINE__) 'expression expression))))))))
(define-syntax assert-type
(lambda (x)
(syntax-case x ()
[(_ type var)
#`(if (not (#,(datum->syntax #'var
(string->symbol (string-append
(symbol->string (syntax->datum #`type))
"?")))
var))
(scm-error 'wrong-type-arg
#f
(string-append "not type '"
#,(symbol->string (syntax->datum #`type))
"': ~s")
(list var)
(list var)))])))
next prev parent reply other threads:[~2019-04-22 19:36 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-04-22 18:57 Guile assert macro Zelphir Kaltstahl
2019-04-22 19:36 ` Mike Gran [this message]
2019-04-22 21:52 ` Zelphir Kaltstahl
2019-04-23 0:54 ` Mark H Weaver
2019-04-23 20:47 ` Zelphir Kaltstahl
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/guile/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190422193625.GA30071@spikycactus.attlocal.net \
--to=spk121@yahoo.com \
--cc=guile-user@gnu.org \
--cc=zelphirkaltstahl@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).