Author: yamakenz
Date: Mon Aug 27 09:48:18 2007
New Revision: 4906

Added:
   sigscheme-trunk/lib/srfi-43.scm
      - copied, changed from r4905, /vendor/misc/vector-lib.scm
   sigscheme-trunk/src/module-srfi43.c
Modified:
   sigscheme-trunk/COPYING
   sigscheme-trunk/NEWS
   sigscheme-trunk/QALog
   sigscheme-trunk/README
   sigscheme-trunk/RELNOTE
   sigscheme-trunk/configure.in
   sigscheme-trunk/lib/Makefile.am
   sigscheme-trunk/src/Makefile.am
   sigscheme-trunk/src/module.c
   sigscheme-trunk/src/sigschemeinternal.h

Log:
* This commit add SRFI-43. Basically working, but not tested yet

* src/sigschemeinternal.h
  - (scm_initialize_srfi43): New function decl
* src/module-srfi43.c
  - New file
  - (scm_initialize_srfi43, scm_s_let_vector_start_plus_end): New function
  - (QUOTE): New macro
  - (l_sym_vector_parse_start_plus_end, l_sym_check_type, l_sym_vectorp): New
    static variable
* src/module.c
  - (module_info_table): Add srfi-43
* src/Makefile.am
  - Add generation rule for functable-srfi43.c
  - (FUNC_TABLES): Add functable-srfi43.c
  - (libsscm_sources): Add module-srfi43.c
* lib/srfi-43.scm
  - New file copied from vendor/misc/vector-lib.scm
  - Adapted to SigScheme
  - (receive, let*-optionals, let*-optionals:aux, let-vector-start+end):
    Comment out
* lib/Makefile.am
  - (dist_scmlib_DATA): Add srfi-43.scm
* configure.in
  - Add --enable-srfi43
  - Add lacking 'vector' dependency of srfi9
* COPYING
* QALog
* README
* NEWS
* RELNOTE
  - Update


Modified: sigscheme-trunk/COPYING
==============================================================================
--- sigscheme-trunk/COPYING     (original)
+++ sigscheme-trunk/COPYING     Mon Aug 27 09:48:18 2007
@@ -95,6 +95,12 @@
 -----------------------------------------------------------------------------
 
 
+lib/srfi-43.scm is covered by:
+-----------------------------------------------------------------------------
+;;; Taylor Campbell wrote this code; he places it in the public domain.
+-----------------------------------------------------------------------------
+
+
 lib/srfi-69.scm is covered by:
 -----------------------------------------------------------------------------
 Copyright (C) Panu Kalliokoski (2005). All Rights Reserved.

Modified: sigscheme-trunk/NEWS
==============================================================================
--- sigscheme-trunk/NEWS        (original)
+++ sigscheme-trunk/NEWS        Mon Aug 27 09:48:18 2007
@@ -7,6 +7,8 @@
 
   - SRFI-9 Defining Record Types
 
+  - SRFI-43 Vector library
+
   - SRFI-55 require-extension
 
   - SRFI-69 Basic hash tables

Modified: sigscheme-trunk/QALog
==============================================================================
--- sigscheme-trunk/QALog       (original)
+++ sigscheme-trunk/QALog       Mon Aug 27 09:48:18 2007
@@ -179,6 +179,7 @@
   * module-srfi28.c
   * module-srfi34.c
   * module-srfi38.c
+  * module-srfi43.c
   * module-srfi48.c
   * module-srfi55.c
   * module-srfi60.c
@@ -277,6 +278,7 @@
 yyyy yyy srfi module-srfi28.c
 yyyy yyy srfi module-srfi34.c
 yyyy yyy srfi module-srfi38.c
+         srfi module-srfi43.c
 yyyy yyy srfi module-srfi48.c
 yyyy yy  srfi module-srfi55.c
 yyyyyyyy srfi module-srfi60.c
@@ -1017,6 +1019,17 @@
 coding style:      [EMAIL PROTECTED]
 normal case tests: [EMAIL PROTECTED]
 corner case tests: [EMAIL PROTECTED]
+
+file:              module-srfi43.c
+category:          srfi
+spec by eyes:      
+spec by tests:     
+general review:    
+64-bit by eyes:    
+64-bit by tests:   
+coding style:      
+normal case tests: 
+corner case tests: 
 
 file:              module-srfi48.c
 category:          srfi

Modified: sigscheme-trunk/README
==============================================================================
--- sigscheme-trunk/README      (original)
+++ sigscheme-trunk/README      Mon Aug 27 09:48:18 2007
@@ -38,6 +38,7 @@
   - SRFI-28 : Basic Format Strings
   - SRFI-34 : Exception Handling for Programs
   - SRFI-38 : External Representation for Data with Shared Structure (partial)
+  - SRFI-43 : Vector library
   - SRFI-48 : Intermediate Format Strings
   - SRFI-55 : require-extension
   - SRFI-60 : Integer as Bits (partial)

Modified: sigscheme-trunk/RELNOTE
==============================================================================
--- sigscheme-trunk/RELNOTE     (original)
+++ sigscheme-trunk/RELNOTE     Mon Aug 27 09:48:18 2007
@@ -53,6 +53,7 @@
 
   - SRFI-1  List Library (full-featured)
   - SRFI-9  Defining Record Types
+  - SRFI-43 Vector library
   - SRFI-55 require-extension
   - SRFI-69 Basic hash tables
   - SRFI-95 Sorting and Merging

Modified: sigscheme-trunk/configure.in
==============================================================================
--- sigscheme-trunk/configure.in        (original)
+++ sigscheme-trunk/configure.in        Mon Aug 27 09:48:18 2007
@@ -498,6 +498,7 @@
         use_srfi28=yes
         use_srfi34=yes
         use_srfi38=yes
+        use_srfi43=yes
         use_srfi48=yes
         use_srfi55=yes
         use_srfi60=yes
@@ -515,6 +516,7 @@
         use_srfi28=no
         use_srfi34=no
         use_srfi38=no
+        use_srfi43=no
         use_srfi48=no
         use_srfi55=no
         use_srfi60=no
@@ -660,6 +662,7 @@
 AX_FEATURE_ARG_Y(srfi28,         [SRFI-28 'format'])
 AX_FEATURE_ARG_Y(srfi34,         [SRFI-34 exception handling for programs])
 AX_FEATURE_ARG_Y(srfi38,         [SRFI-38 'write/ss' ('read/ss' is not 
provided)])
+AX_FEATURE_ARG_Y(srfi43,         [SRFI-43 vector library])
 AX_FEATURE_ARG_Y(srfi48,         [SRFI-48 'format' (superset of SRFI-28)])
 AX_FEATURE_ARG_Y(srfi55,         [SRFI-55 'require-extension'])
 AX_FEATURE_ARG_Y(srfi60,         [SRFI-60 integers as bits (partial)])
@@ -725,9 +728,10 @@
 eval_c_string: reader srfi6
 srfi1: continuation deep_cadrs load sscm_extensions srfi8 srfi23
 srfi6: port string
-srfi9: load srfi23
+srfi9: load vector srfi23
 srfi34: continuation srfi23
 srfi38: writer
+srfi43: load vector srfi8 srfi23 sscm_extensions
 srfi55: load sscm_extensions
 srfi60: int
 srfi69: load int string vector srfi9 srfi23
@@ -884,6 +888,7 @@
 AX_FEATURE_DEFINE(srfi28)
 AX_FEATURE_DEFINE(srfi34)
 AX_FEATURE_DEFINE(srfi38)
+AX_FEATURE_DEFINE(srfi43)
 AX_FEATURE_DEFINE(srfi48)
 AX_FEATURE_DEFINE(srfi55)
 AX_FEATURE_DEFINE(srfi60)
@@ -963,6 +968,7 @@
 AC_SUBST(use_srfi28)
 AC_SUBST(use_srfi34)
 AC_SUBST(use_srfi38)
+AC_SUBST(use_srfi43)
 AC_SUBST(use_srfi48)
 AC_SUBST(use_srfi55)
 AC_SUBST(use_srfi60)
@@ -1121,6 +1127,7 @@
 SRFI-28: $use_srfi28
 SRFI-34: $use_srfi34
 SRFI-38: $use_srfi38
+SRFI-43: $use_srfi43
 SRFI-48: $use_srfi48
 SRFI-55: $use_srfi55
 SRFI-60: $use_srfi60

Modified: sigscheme-trunk/lib/Makefile.am
==============================================================================
--- sigscheme-trunk/lib/Makefile.am     (original)
+++ sigscheme-trunk/lib/Makefile.am     Mon Aug 27 09:48:18 2007
@@ -5,6 +5,9 @@
 if USE_SRFI9
 dist_scmlib_DATA += srfi-9.scm
 endif
+if USE_SRFI43
+dist_scmlib_DATA += srfi-43.scm
+endif
 if USE_SRFI55
 dist_scmlib_DATA += srfi-55.scm
 endif

Copied: sigscheme-trunk/lib/srfi-43.scm (from r4905, 
/vendor/misc/vector-lib.scm)
==============================================================================
--- /vendor/misc/vector-lib.scm (original)
+++ sigscheme-trunk/lib/srfi-43.scm     Mon Aug 27 09:48:18 2007
@@ -2,6 +2,14 @@
 
 ;;; Taylor Campbell wrote this code; he places it in the public domain.
 
+
+;; ChangeLog
+;;
+;; 2007-08-28 yamaken   - Imported from
+;;                        http://srfi.schemers.org/srfi-43/vector-lib.scm
+;;                        and adapted to SigScheme
+
+
 ;;; --------------------
 ;;; Exported procedure index
 ;;;
@@ -78,41 +86,43 @@
 ;;; --------------------
 ;;; Utilities
 
-;;; SRFI 8, too trivial to put in the dependencies list.
-(define-syntax receive
-  (syntax-rules ()
-    ((receive ?formals ?producer ?body1 ?body2 ...)
-     (call-with-values (lambda () ?producer)
-       (lambda ?formals ?body1 ?body2 ...)))))
-
-;;; Not the best LET*-OPTIONALS, but not the worst, either.  Use Olin's
-;;; if it's available to you.
-(define-syntax let*-optionals
-  (syntax-rules ()
-    ((let*-optionals (?x ...) ((?var ?default) ...) ?body1 ?body2 ...)
-     (let ((args (?x ...)))
-       (let*-optionals args ((?var ?default) ...) ?body1 ?body2 ...)))
-    ((let*-optionals ?args ((?var ?default) ...) ?body1 ?body2 ...)
-     (let*-optionals:aux ?args ?args ((?var ?default) ...)
-       ?body1 ?body2 ...))))
-
-(define-syntax let*-optionals:aux
-  (syntax-rules ()
-    ((aux ?orig-args-var ?args-var () ?body1 ?body2 ...)
-     (if (null? ?args-var)
-         (let () ?body1 ?body2 ...)
-         (error "too many arguments" (length ?orig-args-var)
-                ?orig-args-var)))
-    ((aux ?orig-args-var ?args-var
-         ((?var ?default) ?more ...)
-       ?body1 ?body2 ...)
-     (if (null? ?args-var)
-         (let* ((?var ?default) ?more ...) ?body1 ?body2 ...)
-         (let ((?var (car ?args-var))
-               (new-args (cdr ?args-var)))
-           (let*-optionals:aux ?orig-args-var new-args
-               (?more ...)
-             ?body1 ?body2 ...))))))
+;;; SigScheme: Use native SRFI-8
+;;;;; SRFI 8, too trivial to put in the dependencies list.
+;;(define-syntax receive
+;;  (syntax-rules ()
+;;    ((receive ?formals ?producer ?body1 ?body2 ...)
+;;     (call-with-values (lambda () ?producer)
+;;       (lambda ?formals ?body1 ?body2 ...)))))
+
+;;; SigScheme: Define let*-optionals as an alias to let-optionals*
+;;;;; Not the best LET*-OPTIONALS, but not the worst, either.  Use Olin's
+;;;;; if it's available to you.
+;;(define-syntax let*-optionals
+;;  (syntax-rules ()
+;;    ((let*-optionals (?x ...) ((?var ?default) ...) ?body1 ?body2 ...)
+;;     (let ((args (?x ...)))
+;;       (let*-optionals args ((?var ?default) ...) ?body1 ?body2 ...)))
+;;    ((let*-optionals ?args ((?var ?default) ...) ?body1 ?body2 ...)
+;;     (let*-optionals:aux ?args ?args ((?var ?default) ...)
+;;       ?body1 ?body2 ...))))
+;;
+;;(define-syntax let*-optionals:aux
+;;  (syntax-rules ()
+;;    ((aux ?orig-args-var ?args-var () ?body1 ?body2 ...)
+;;     (if (null? ?args-var)
+;;         (let () ?body1 ?body2 ...)
+;;         (error "too many arguments" (length ?orig-args-var)
+;;                ?orig-args-var)))
+;;    ((aux ?orig-args-var ?args-var
+;;         ((?var ?default) ?more ...)
+;;       ?body1 ?body2 ...)
+;;     (if (null? ?args-var)
+;;         (let* ((?var ?default) ?more ...) ?body1 ?body2 ...)
+;;         (let ((?var (car ?args-var))
+;;               (new-args (cdr ?args-var)))
+;;           (let*-optionals:aux ?orig-args-var new-args
+;;               (?more ...)
+;;             ?body1 ?body2 ...))))))
 
 (define (nonneg-int? x)
   (and (integer? x)
@@ -286,15 +296,16 @@
                   `(extra args were ,(cddr args))
                   `(while calling ,callee))))))
 
-(define-syntax let-vector-start+end
-  (syntax-rules ()
-    ((let-vector-start+end ?callee ?vec ?args (?start ?end)
-       ?body1 ?body2 ...)
-     (let ((?vec (check-type vector? ?vec ?callee)))
-       (receive (?start ?end)
-                (vector-parse-start+end ?vec ?args '?start '?end
-                                        ?callee)
-         ?body1 ?body2 ...)))))
+;;; SigScheme: Defined in module-srfi43.c
+;;(define-syntax let-vector-start+end
+;;  (syntax-rules ()
+;;    ((let-vector-start+end ?callee ?vec ?args (?start ?end)
+;;       ?body1 ?body2 ...)
+;;     (let ((?vec (check-type vector? ?vec ?callee)))
+;;       (receive (?start ?end)
+;;                (vector-parse-start+end ?vec ?args '?start '?end
+;;                                        ?callee)
+;;         ?body1 ?body2 ...)))))
 
 ;;; (%SMALLEST-LENGTH <vector-list> <default-length> <callee>)
 ;;;       -> exact, nonnegative integer

Modified: sigscheme-trunk/src/Makefile.am
==============================================================================
--- sigscheme-trunk/src/Makefile.am     (original)
+++ sigscheme-trunk/src/Makefile.am     Mon Aug 27 09:48:18 2007
@@ -45,6 +45,7 @@
         functable-srfi28.c \
         functable-srfi34.c \
         functable-srfi38.c \
+        functable-srfi43.c \
         functable-srfi48.c \
         functable-srfi55.c \
         functable-srfi60.c
@@ -115,6 +116,8 @@
        $(BUILD_FUNCTBL_CMD) $@ "scm_functable_srfi34" $<
 functable-srfi38.c: module-srfi38.c $(BUILD_FUNCTBL_DEPS)
        $(BUILD_FUNCTBL_CMD) $@ "scm_functable_srfi38" $<
+functable-srfi43.c: module-srfi43.c $(BUILD_FUNCTBL_DEPS)
+       $(BUILD_FUNCTBL_CMD) $@ "scm_functable_srfi43" $<
 functable-srfi48.c: module-srfi48.c $(BUILD_FUNCTBL_DEPS)
        $(BUILD_FUNCTBL_CMD) $@ "scm_functable_srfi48" $<
 functable-srfi55.c: module-srfi55.c $(BUILD_FUNCTBL_DEPS)
@@ -341,6 +344,9 @@
 endif
 if USE_SRFI38
   libsscm_sources += module-srfi38.c
+endif
+if USE_SRFI43
+  libsscm_sources += module-srfi43.c
 endif
 if USE_SRFI48
   libsscm_sources += module-srfi48.c

Added: sigscheme-trunk/src/module-srfi43.c
==============================================================================
--- (empty file)
+++ sigscheme-trunk/src/module-srfi43.c Mon Aug 27 09:48:18 2007
@@ -0,0 +1,125 @@
+/*===========================================================================
+ *  Filename : module-srfi43.c
+ *  About    : SRFI-43 Vector library
+ *
+ *  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.
+===========================================================================*/
+
+#include <config.h>
+
+#include "sigscheme.h"
+#include "sigschemeinternal.h"
+
+/*=======================================
+  File Local Macro Definitions
+=======================================*/
+#define QUOTE(obj) (LIST_2(SYM_QUOTE, (obj)))
+
+/*=======================================
+  File Local Type Definitions
+=======================================*/
+
+/*=======================================
+  File Local Function Declarations
+=======================================*/
+SCM_EXPORT ScmObj scm_s_let_vector_start_plus_end(ScmObj callee, ScmObj vec,
+                                                  ScmObj args,
+                                                  ScmObj start_plus_end,
+                                                  ScmObj body,
+                                                  ScmEvalState *eval_state);
+
+/*=======================================
+  Variable Definitions
+=======================================*/
+#include "functable-srfi43.c"
+
+SCM_GLOBAL_VARS_BEGIN(static_srfi43);
+#define static
+static ScmObj l_sym_vector_parse_start_plus_end;
+static ScmObj l_sym_check_type, l_sym_vectorp;
+#undef static
+SCM_GLOBAL_VARS_END(static_srfi43);
+#define l_sym_vector_parse_start_plus_end                               \
+    SCM_GLOBAL_VAR(static_srfi43, l_sym_vector_parse_start_plus_end)
+#define l_sym_check_type SCM_GLOBAL_VAR(static_srfi43, l_sym_check_type)
+#define l_sym_vectorp    SCM_GLOBAL_VAR(static_srfi43, l_sym_vectorp)
+SCM_DEFINE_STATIC_VARS(static_srfi43);
+
+/*=======================================
+  Function Definitions
+=======================================*/
+SCM_EXPORT void
+scm_initialize_srfi43(void)
+{
+    SCM_GLOBAL_VARS_INIT(static_srfi43);
+
+    scm_register_funcs(scm_functable_srfi43);
+
+    scm_require_module("srfi-8");
+    scm_require_module("srfi-23");
+    scm_require_module("sscm-ext");  /* for let-optionals* */
+    scm_load_system_file("srfi-43.scm");
+
+    l_sym_vector_parse_start_plus_end = scm_intern("vector-parse-start+end");
+    l_sym_check_type                  = scm_intern("check-type");
+    l_sym_vectorp                     = scm_intern("vector?");
+
+    scm_define_alias("let*-optionals", "let-optionals*");
+}
+
+/* let-vector-start+end is not a part of SRFI-43. */
+SCM_EXPORT ScmObj
+scm_s_let_vector_start_plus_end(ScmObj callee, ScmObj vec,
+                                ScmObj args, ScmObj start_plus_end,
+                                ScmObj body,
+                                ScmEvalState *eval_state)
+{
+    ScmObj env, start, end, proc_check_type, check_type_args, receive_expr;
+    DECLARE_FUNCTION("let-vector-start+end", syntax_variadic_tailrec_4);
+
+    if (!LIST_2_P(start_plus_end))
+        ERR_OBJ("invalid start+end form", start_plus_end);
+    /* The responsibility of type checks for other args are delegated to
+     * 'check-type' and 'receive'. */
+
+    env = eval_state->env;
+
+    proc_check_type = EVAL(l_sym_check_type, env);
+    check_type_args = LIST_3(EVAL(l_sym_vectorp, env),
+                             EVAL(vec, env),
+                             EVAL(callee, env));
+    vec = scm_call(proc_check_type, check_type_args);
+
+    start = QUOTE(CAR(start_plus_end));
+    end   = QUOTE(CADR(start_plus_end));
+    receive_expr = CONS(l_sym_vector_parse_start_plus_end,
+                        LIST_5(QUOTE(vec), args, start, end, callee));
+    return scm_s_srfi8_receive(start_plus_end, receive_expr, body, eval_state);
+}

Modified: sigscheme-trunk/src/module.c
==============================================================================
--- sigscheme-trunk/src/module.c        (original)
+++ sigscheme-trunk/src/module.c        Mon Aug 27 09:48:18 2007
@@ -101,6 +101,9 @@
 #if SCM_USE_SRFI38
     {"srfi-38", scm_initialize_srfi38, NULL},
 #endif
+#if SCM_USE_SRFI43
+    {"srfi-43", scm_initialize_srfi43, NULL},
+#endif
 #if SCM_USE_SRFI48
     {"srfi-48", scm_initialize_srfi48, NULL},
 #endif

Modified: sigscheme-trunk/src/sigschemeinternal.h
==============================================================================
--- sigscheme-trunk/src/sigschemeinternal.h     (original)
+++ sigscheme-trunk/src/sigschemeinternal.h     Mon Aug 27 09:48:18 2007
@@ -833,6 +833,11 @@
 SCM_EXPORT void scm_initialize_srfi38(void);
 #endif
 
+/* module-srfi43.c */
+#if SCM_USE_SRFI43
+SCM_EXPORT void scm_initialize_srfi43(void);
+#endif
+
 /* module-srfi48.c */
 #if SCM_USE_SRFI48
 SCM_EXPORT void scm_initialize_srfi48(void);

Reply via email to