From 52cd685e9adf38255159902d2c349fb474d7873b Mon Sep 17 00:00:00 2001 From: shivers Date: Sat, 9 Nov 1996 23:13:35 +0000 Subject: [PATCH] Truth-in-advertising documentation: confession is good for the soul. --- scsh/enumconst.scm | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/scsh/enumconst.scm b/scsh/enumconst.scm index 7aa1b77..7de5a3e 100644 --- a/scsh/enumconst.scm +++ b/scsh/enumconst.scm @@ -2,7 +2,9 @@ ;;; Handy for defining random flags and constants. ;;; (define-enum-constant "errno" intr 9) => (define errno/intr 9) -;;; Ugly, but it works. + +;;; This is deeply bogus code. It merely serves to demonstrate what a loser +;;; I am when it comes to serious modern-tech macrology. ;;; The question: is / the best separator? Alternates: $ . | @@ -12,8 +14,13 @@ (define-syntax define-enum-constant (lambda (form rename compare) - (let ((%define (rename 'define)) - (var (string->symbol (string-append (symbol->string (cadr form)) "/" + (let* ((%define (rename 'define)) + (base (let ((b (cadr form))) + (cond ((string? b) b) + ((symbol? b) (symbol->string b)) + (else (error "Enum constant base must be symbol or string" + b ))))) + (var (string->symbol (string-append base "/" (symbol->string (caddr form))))) (value (cadddr form))) `(,%define ,var ,value))))