~ chicken-core (chicken-5) 04b3b77967ad4b7c573ed59df5926ef0bf8a43d1


commit 04b3b77967ad4b7c573ed59df5926ef0bf8a43d1
Author:     felix <felix@call-with-current-continuation.org>
AuthorDate: Tue Feb 16 16:06:36 2010 +0100
Commit:     felix <felix@call-with-current-continuation.org>
CommitDate: Tue Feb 16 16:06:36 2010 +0100

    core-forms for define-inline and define-constant

diff --git a/chicken-syntax.scm b/chicken-syntax.scm
index 33494dd5..14154fee 100644
--- a/chicken-syntax.scm
+++ b/chicken-syntax.scm
@@ -42,6 +42,29 @@
 (define ##sys#chicken-macro-environment
   (let ((me0 (##sys#macro-environment)))
 
+(##sys#extend-macro-environment
+ 'define-constant
+ '()
+ (##sys#er-transformer
+  (lambda (form r c)
+    (##sys#check-syntax 'define-constant form '(_ symbol _))
+    `(##core#define-constant ,@(cdr form)))))
+
+(##sys#extend-macro-environment
+ 'define-inline
+ '()
+ (##sys#er-transformer
+  (lambda (form r c)
+    (let ((head (cadr form)))
+      (cond ((pair? head)
+	     (##sys#check-syntax 'define-inline form '(_ (symbol . _) . #(_ 1)))
+	     `(##core#define-inline
+	       ,(car head)
+	       `(,(r 'lambda) ,(cdr head) ,@(cdr form))))
+	    (else
+	     (##sys#check-syntax 'define-inline form '(_ symbol _))
+	     `(##core#define-inline ,@(cdr form))))))))
+
 (##sys#extend-macro-environment
  'define-record '()
  (##sys#er-transformer
diff --git a/compiler.scm b/compiler.scm
index 6ec64faf..1c728b16 100644
--- a/compiler.scm
+++ b/compiler.scm
@@ -133,7 +133,7 @@
 ; (##core#foreign-safe-lambda* <type> ({(<type> <var>)})) {<string>})
 ; (##core#foreign-primitive <type> ({(<type> <var>)}) {<string>})
 ; (##core#define-inline <name> <exp>)
-; (define-constant <name> <exp>)
+; (##core#define-constant <name> <exp*>)
 ; (##core#foreign-callback-wrapper '<name> <qualifiers> '<type> '({<type>}) <exp>)
 ; (##core#define-external-variable <name> <type> <bool> [<symbol>])
 ; (##core#check <exp>)
@@ -1096,7 +1096,7 @@
 			     (set! inline-table-used #t)
 			     '(##core#undefined)))
 
-			((define-constant)
+			((##core#define-constant)
 			 (let* ([name (second x)]
 				[valexp (third x)]
 				[val (handle-exceptions ex
diff --git a/eval.scm b/eval.scm
index 5543a48a..f0d37497 100644
--- a/eval.scm
+++ b/eval.scm
@@ -731,7 +731,7 @@
 			      (##sys#warn "declarations are ignored in interpreted code" x) )
 			  (compile '(##core#undefined) e #f tf cntr se) ]
 
-			 [(define-inline define-constant)
+			 [(##core#define-inline ##core#define-constant)
 			  (compile `(,(rename 'define se) ,@(cdr x)) e #f tf cntr se) ]
                    
 			 [(##core#primitive ##core#inline ##core#inline_allocate ##core#foreign-lambda 
Trap