summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBT Templeton <bpt@hcoop.net>2011-06-20 17:08:56 -0400
committerBT Templeton <bpt@hcoop.net>2012-02-03 18:53:48 -0500
commit80687f2e4b50a41cb3b3ebe0cd5a05d7d71d414c (patch)
treefbb268028710b7585c5a4fb4196430ddeaf37bfd
parenta338fa3d87a89d5ea16e585ddabe20a254e37b02 (diff)
downloadguile-80687f2e4b50a41cb3b3ebe0cd5a05d7d71d414c.tar.gz
new elisp special form `eval-when-compile'
* module/language/elisp/compile-tree-il.scm (compile-eval-when-compile): New function. * module/language/elisp/runtime/function-slot.scm: Update module definition.
-rw-r--r--module/language/elisp/compile-tree-il.scm4
-rw-r--r--module/language/elisp/runtime/function-slot.scm2
2 files changed, 6 insertions, 0 deletions
diff --git a/module/language/elisp/compile-tree-il.scm b/module/language/elisp/compile-tree-il.scm
index ecdd9c90b..e9fcf9457 100644
--- a/module/language/elisp/compile-tree-il.scm
+++ b/module/language/elisp/compile-tree-il.scm
@@ -31,6 +31,7 @@
#:use-module (srfi srfi-26)
#:export (compile-tree-il
compile-progn
+ compile-eval-when-compile
compile-if
compile-defconst
compile-defvar
@@ -632,6 +633,9 @@
(defspecial progn (loc args)
(make-sequence loc (map compile-expr args)))
+(defspecial eval-when-compile (loc args)
+ (make-const loc (compile `(progn ,@args) #:from 'elisp #:to 'value)))
+
(defspecial if (loc args)
(pmatch args
((,cond ,then . ,else)
diff --git a/module/language/elisp/runtime/function-slot.scm b/module/language/elisp/runtime/function-slot.scm
index a3969c0e1..641173d86 100644
--- a/module/language/elisp/runtime/function-slot.scm
+++ b/module/language/elisp/runtime/function-slot.scm
@@ -32,6 +32,7 @@
#:use-module ((language elisp compile-tree-il)
#:select
((compile-progn . progn)
+ (compile-eval-when-compile . eval-when-compile)
(compile-if . if)
(compile-defconst . defconst)
(compile-defvar . defvar)
@@ -54,6 +55,7 @@
#:duplicates (last)
;; special operators
#:re-export (progn
+ eval-when-compile
if
defconst
defvar