Author: yamakenz
Date: Fri Aug 31 08:45:18 2007
New Revision: 4929
Added:
sigscheme-trunk/lib/srfi-0.scm
Modified:
sigscheme-trunk/NEWS
sigscheme-trunk/README
sigscheme-trunk/RELNOTE
sigscheme-trunk/configure.in
sigscheme-trunk/doc/spec.txt
sigscheme-trunk/lib/Makefile.am
sigscheme-trunk/sigscheme.pc.in
sigscheme-trunk/src/sigscheme.c
Log:
* lib/srfi-0.scm
- New file
- (%cond-expand-feature?): New procedure
- (cond-expand): New macro
* lib/Makefile.am
- (dist_scmlib_DATA): Add srfi-0.scm
* src/sigscheme.c
- (scm_initialize_internal): Enable SRFI-0 if available
* configure.in
- Add --enable-srfi0
* sigscheme.pc.in
- (sscm_srfi0, sscm_srfi9, sscm_srfi43, sscm_srfi69, sscm_srfi95): New
variable
* doc/spec.txt
* README
* NEWS
* RELNOTE
- Update
Modified: sigscheme-trunk/NEWS
==============================================================================
--- sigscheme-trunk/NEWS (original)
+++ sigscheme-trunk/NEWS Fri Aug 31 08:45:18 2007
@@ -3,6 +3,8 @@
* New features
+ - SRFI-0 Feature-based conditional expansion construct
+
- SRFI-1 List Library (full featured)
- SRFI-9 Defining Record Types
Modified: sigscheme-trunk/README
==============================================================================
--- sigscheme-trunk/README (original)
+++ sigscheme-trunk/README Fri Aug 31 08:45:18 2007
@@ -28,6 +28,7 @@
- Conforms to R5RS basically (not fully)
- R5RS hygienic macros (experimental)
- Supports Following SRFIs
+ - SRFI-0 : Feature-based conditional expansion construct
- SRFI-1 : List Library
- SRFI-2 : AND-LET*: an AND with local bindings, a guarded LET* special form
- SRFI-6 : Basic String Ports
Modified: sigscheme-trunk/RELNOTE
==============================================================================
--- sigscheme-trunk/RELNOTE (original)
+++ sigscheme-trunk/RELNOTE Fri Aug 31 08:45:18 2007
@@ -51,6 +51,7 @@
What's New
----------
+ - SRFI-0 Feature-based conditional expansion construct
- SRFI-1 List Library (full-featured)
- SRFI-9 Defining Record Types
- SRFI-43 Vector library
Modified: sigscheme-trunk/configure.in
==============================================================================
--- sigscheme-trunk/configure.in (original)
+++ sigscheme-trunk/configure.in Fri Aug 31 08:45:18 2007
@@ -488,6 +488,7 @@
# SRFIs
case "$enable_conf" in
full|r5rs|dev|uim)
+ use_srfi0=yes
use_srfi1=yes
use_srfi2=yes
use_srfi6=yes
@@ -506,6 +507,7 @@
use_srfi95=yes
;;
small|siod)
+ use_srfi0=no
use_srfi1=no
use_srfi2=no
use_srfi6=no
@@ -652,6 +654,7 @@
AX_FEATURE_ARG_Y(load, [R5RS 'load'])
# SRFIs
+AX_FEATURE_ARG_Y(srfi0, [SRFI-0 'cond-expand'])
AX_FEATURE_ARG_Y(srfi1, [SRFI-1 list library])
AX_FEATURE_ARG_Y(srfi2, [SRFI-2 'and-let*'])
AX_FEATURE_ARG_Y(srfi6, [SRFI-6 basic string ports])
@@ -726,6 +729,7 @@
load: port reader string
sscm_extensions: load
eval_c_string: reader srfi6
+srfi0: load srfi55 legacy_macro srfi1 srfi23
srfi1: continuation deep_cadrs load sscm_extensions srfi8 srfi23
srfi6: port string
srfi9: load vector srfi23
@@ -878,6 +882,7 @@
AX_FEATURE_DEFINE(load)
# SRFIs
+AX_FEATURE_DEFINE(srfi0)
AX_FEATURE_DEFINE(srfi1)
AX_FEATURE_DEFINE(srfi2)
AX_FEATURE_DEFINE(srfi6)
@@ -958,6 +963,7 @@
AC_SUBST(use_reader)
AC_SUBST(use_writer)
AC_SUBST(use_load)
+AC_SUBST(use_srfi0)
AC_SUBST(use_srfi1)
AC_SUBST(use_srfi2)
AC_SUBST(use_srfi6)
@@ -1117,6 +1123,7 @@
Load: $use_load
[SRFIs]
+SRFI-0: $use_srfi0
SRFI-1: $use_srfi1
SRFI-2: $use_srfi2
SRFI-6: $use_srfi6
Modified: sigscheme-trunk/doc/spec.txt
==============================================================================
--- sigscheme-trunk/doc/spec.txt (original)
+++ sigscheme-trunk/doc/spec.txt Fri Aug 31 08:45:18 2007
@@ -457,6 +457,13 @@
SRFI conformance
----------------
+SRFI-0 Feature-based conditional expansion construct
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Supported. But since the macro expansion is performed at evaluation-time and
+the expanded form is not stored as the code, the form may be expanded
+differently at next time.
+
SRFI-1 List Library
~~~~~~~~~~~~~~~~~~~~
@@ -580,6 +587,14 @@
sscm> lst
#1=(a . #1#)
================================================================
+
+SRFI-43 Vector library
+~~~~~~~~~~~~~~~~~~~~~~
+
+Fully supported.
+
+It is based on the reference implementation of SRFI-43.
+
SRFI-48 Intermediate Format Strings
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Modified: sigscheme-trunk/lib/Makefile.am
==============================================================================
--- sigscheme-trunk/lib/Makefile.am (original)
+++ sigscheme-trunk/lib/Makefile.am Fri Aug 31 08:45:18 2007
@@ -1,4 +1,7 @@
dist_scmlib_DATA = sigscheme-init.scm
+if USE_SRFI0
+dist_scmlib_DATA += srfi-0.scm
+endif
if USE_SRFI1
dist_scmlib_DATA += srfi-1.scm
endif
Added: sigscheme-trunk/lib/srfi-0.scm
==============================================================================
--- (empty file)
+++ sigscheme-trunk/lib/srfi-0.scm Fri Aug 31 08:45:18 2007
@@ -0,0 +1,65 @@
+;; Filename : srfi-0.scm
+;; About : SRFI-0 Feature-based conditional expansion construct
+;;
+;; Copyright (c) 2007 SigScheme Project <uim-en AT googlegroups.com>
+;;
+;; All rights reserved.
+;;
+;; Redistribution and use in source and binary forms, with or without
+;; modification, are permitted provided that the following conditions
+;; are met:
+;;
+;; 1. Redistributions of source code must retain the above copyright
+;; notice, this list of conditions and the following disclaimer.
+;; 2. Redistributions in binary form must reproduce the above copyright
+;; notice, this list of conditions and the following disclaimer in the
+;; documentation and/or other materials provided with the distribution.
+;; 3. Neither the name of authors nor the names of its contributors
+;; may be used to endorse or promote products derived from this software
+;; without specific prior written permission.
+;;
+;; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
+;; IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+;; THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+;; PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
+;; CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+;; EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+;; PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+;; PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+;; LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+;; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+;; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+(require-extension (srfi 1 23))
+
+(define %cond-expand-feature?
+ (lambda (feature-exp)
+ (cond
+ ((symbol? feature-exp)
+ (or (eq? feature-exp 'else)
+ (provided? (symbol->string feature-exp))))
+ ((pair? feature-exp)
+ (let ((directive (car feature-exp))
+ (args (cdr feature-exp)))
+ (case directive
+ ((and)
+ (every %cond-expand-feature? args))
+ ((or)
+ (any %cond-expand-feature? args))
+ ((not)
+ (if (not (null? (cdr args)))
+ (error "invalid feature expression"))
+ (not (%cond-expand-feature? (car args))))
+ (else
+ (error "invalid feature expression"))))))))
+
+(define-macro cond-expand
+ (lambda clauses
+ (if (null? clauses)
+ (error "unfulfilled cond-expand")
+ (let ((clause (find (lambda (clause)
+ (%cond-expand-feature? (car clause)))
+ clauses)))
+ (and clause
+ (cons 'begin (cdr clause)))))))
Modified: sigscheme-trunk/sigscheme.pc.in
==============================================================================
--- sigscheme-trunk/sigscheme.pc.in (original)
+++ sigscheme-trunk/sigscheme.pc.in Fri Aug 31 08:45:18 2007
@@ -36,18 +36,23 @@
[EMAIL PROTECTED]@
[EMAIL PROTECTED]@
[EMAIL PROTECTED]@
[EMAIL PROTECTED]@
[EMAIL PROTECTED]@
[EMAIL PROTECTED]@
[EMAIL PROTECTED]@
[EMAIL PROTECTED]@
[EMAIL PROTECTED]@
[EMAIL PROTECTED]@
[EMAIL PROTECTED]@
[EMAIL PROTECTED]@
[EMAIL PROTECTED]@
[EMAIL PROTECTED]@
[EMAIL PROTECTED]@
[EMAIL PROTECTED]@
[EMAIL PROTECTED]@
[EMAIL PROTECTED]@
[EMAIL PROTECTED]@
[EMAIL PROTECTED]@
[EMAIL PROTECTED]@
[EMAIL PROTECTED]@
[EMAIL PROTECTED]@
Modified: sigscheme-trunk/src/sigscheme.c
==============================================================================
--- sigscheme-trunk/src/sigscheme.c (original)
+++ sigscheme-trunk/src/sigscheme.c Fri Aug 31 08:45:18 2007
@@ -356,9 +356,15 @@
scm_load_system_file("sigscheme-init.scm");
#endif
- /* require-extension is enabled by default */
#if SCM_USE_SRFI55
+ /* require-extension is enabled by default */
scm_require_module("srfi-55");
+#endif
+#if SCM_USE_SRFI0
+ /* cond-expand is enabled by default */
+ scm_s_srfi55_require_extension(LIST_1(LIST_2(scm_intern("srfi"),
+ MAKE_INT(0))),
+ SCM_INTERACTION_ENV);
#endif
return rest_argv;