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;

Reply via email to