Author: yamakenz
Date: Fri Aug 24 06:11:59 2007
New Revision: 4880
Modified:
sigscheme-trunk/NEWS
sigscheme-trunk/QALog
sigscheme-trunk/README
sigscheme-trunk/RELNOTE
sigscheme-trunk/src/sigscheme.c
sigscheme-trunk/src/sigscheme.h
sigscheme-trunk/test-c/test-array2list.c
Log:
* This commit simplify the C array <-> Scheme list conversion functions
* src/sigscheme.h
* src/sigscheme.c
- (scm_array2list): Rename 2nd arg to appropriate one
- (scm_list2array): New function
- (scm_null_term_array2list, scm_list2null_term_array): Removed
* test-c/test-array2list.c
- Remove tests for scm_null_term_array2list() and scm_list2null_term_array()
- Add tests for scm_list2array()
* QALog
* NEWS
* RELNOTE
* README
- Update
Modified: sigscheme-trunk/NEWS
==============================================================================
--- sigscheme-trunk/NEWS (original)
+++ sigscheme-trunk/NEWS Fri Aug 24 06:11:59 2007
@@ -15,14 +15,13 @@
- R5RS promises (delay and force)
- - legacy define-macro, expected to be compatible with other Scheme
+ - Legacy define-macro, expected to be compatible with other Scheme
implementations
- New syntax let-optionals* compatible with Gauche, for optional argument
processing
- - New C interface functions scm_array2list(), scm_null_term_array2list() and
- scm_list2null_term_array()
+ - New C interface functions scm_array2list() and scm_list2array()
- %%require-module and scm_require_module(). 'use' and scm_use() have been
deprecated and will be removed in SigScheme 0.9.0
Modified: sigscheme-trunk/QALog
==============================================================================
--- sigscheme-trunk/QALog (original)
+++ sigscheme-trunk/QALog Fri Aug 24 06:11:59 2007
@@ -712,7 +712,7 @@
file: sigscheme.c
category: core
-spec by eyes: [EMAIL PROTECTED], [EMAIL PROTECTED], [EMAIL PROTECTED],
[EMAIL PROTECTED], [EMAIL PROTECTED], [EMAIL PROTECTED], [EMAIL PROTECTED],
[EMAIL PROTECTED]
+spec by eyes: [EMAIL PROTECTED], [EMAIL PROTECTED], [EMAIL PROTECTED],
[EMAIL PROTECTED], [EMAIL PROTECTED], [EMAIL PROTECTED], [EMAIL PROTECTED],
[EMAIL PROTECTED], [EMAIL PROTECTED]
spec by tests:
general review: [EMAIL PROTECTED]
64-bit by eyes: [EMAIL PROTECTED]
@@ -1120,6 +1120,11 @@
Log
---
+2007-08-24 YamaKen <yamaken AT bp.iij4u.or.jp>
+ * sigscheme.c
+ - QA done again @r4880 for revised array<->list conversion
+ functions. Both 2 functions are fully tested with test-array2list.c
+
2007-08-19 YamaKen <yamaken AT bp.iij4u.or.jp>
* string.c
* string-procedure.c
Modified: sigscheme-trunk/README
==============================================================================
--- sigscheme-trunk/README (original)
+++ sigscheme-trunk/README Fri Aug 24 06:11:59 2007
@@ -45,6 +45,8 @@
- SRFI-95 : Sorting and Merging
- R6RS: R6RS characters (partial and preliminary)
- Multibyte character encodings support
+- define-macro
+- let-optionals* for optional argument processing
- Partial SIOD compatibility
See doc/spec.txt and doc/design.txt for furtuer information.
Modified: sigscheme-trunk/RELNOTE
==============================================================================
--- sigscheme-trunk/RELNOTE (original)
+++ sigscheme-trunk/RELNOTE Fri Aug 24 06:11:59 2007
@@ -57,6 +57,7 @@
- SRFI-69 Basic hash tables
- SRFI-95 Sorting and Merging
- R5RS promises (delay and force)
+ - define-macro
- let-optionals* for optional argument processing
- Character codec handling procedures
Modified: sigscheme-trunk/src/sigscheme.c
==============================================================================
--- sigscheme-trunk/src/sigscheme.c (original)
+++ sigscheme-trunk/src/sigscheme.c Fri Aug 24 06:11:59 2007
@@ -405,7 +405,7 @@
#endif /* SCM_USE_EVAL_C_STRING */
SCM_EXPORT ScmObj
-scm_array2list(void **ary, size_t size, ScmObj (*conv)(void *))
+scm_array2list(void **ary, size_t len, ScmObj (*conv)(void *))
{
void **p;
ScmObj elm, lst;
@@ -413,33 +413,11 @@
DECLARE_INTERNAL_FUNCTION("scm_array2list");
SCM_ASSERT(ary);
- SCM_ASSERT(size <= SCM_INT_T_MAX);
+ SCM_ASSERT(len <= SCM_INT_T_MAX);
lst = SCM_NULL;
SCM_QUEUE_POINT_TO(q, lst);
- for (p = &ary[0]; p < &ary[size]; p++) {
- elm = (conv) ? (*conv)(*p) : (ScmObj)(*p);
- SCM_QUEUE_ADD(q, elm);
- }
-
- return lst;
-}
-
-SCM_EXPORT ScmObj
-scm_null_term_array2list(void **ary, ScmObj (*conv)(void *))
-{
- void **p, *term;
- ScmObj elm, lst;
- ScmQueue q;
- DECLARE_INTERNAL_FUNCTION("scm_null_term_array2list");
-
- SCM_ASSERT(ary);
-
- term = (conv) ? NULL : (void *)SCM_EOF;
-
- lst = SCM_NULL;
- SCM_QUEUE_POINT_TO(q, lst);
- for (p = &ary[0]; *p != term; p++) {
+ for (p = &ary[0]; p < &ary[len]; p++) {
elm = (conv) ? (*conv)(*p) : (ScmObj)(*p);
SCM_QUEUE_ADD(q, elm);
}
@@ -448,21 +426,21 @@
}
SCM_EXPORT void **
-scm_list2null_term_array(ScmObj lst, void *(*conv)(ScmObj))
+scm_list2array(ScmObj lst, size_t *len, void *(*conv)(ScmObj))
{
- scm_int_t len;
+ scm_int_t scm_len;
void **ary, **p;
ScmObj elm;
- DECLARE_INTERNAL_FUNCTION("scm_list2null_term_array");
+ DECLARE_INTERNAL_FUNCTION("scm_list2array");
- len = scm_length(lst);
- if (!SCM_LISTLEN_PROPERP(len))
+ scm_len = scm_length(lst);
+ if (!SCM_LISTLEN_PROPERP(scm_len))
ERR("proper list required");
- p = ary = scm_malloc((len + 1) * sizeof(void *));
+ *len = (size_t)scm_len;
+ p = ary = scm_malloc(*len * sizeof(void *));
FOR_EACH (elm, lst)
*p++ = (conv) ? (*conv)(elm) : (void *)elm;
- *p = NULL;
return ary;
}
Modified: sigscheme-trunk/src/sigscheme.h
==============================================================================
--- sigscheme-trunk/src/sigscheme.h (original)
+++ sigscheme-trunk/src/sigscheme.h Fri Aug 24 06:11:59 2007
@@ -1273,10 +1273,10 @@
#if SCM_USE_EVAL_C_STRING
SCM_EXPORT ScmObj scm_eval_c_string(const char *exp);
#endif
-SCM_EXPORT ScmObj scm_array2list(void **ary, size_t size,
+SCM_EXPORT ScmObj scm_array2list(void **ary, size_t len,
ScmObj (*conv)(void *));
-SCM_EXPORT ScmObj scm_null_term_array2list(void **ary, ScmObj (*conv)(void *));
-SCM_EXPORT void **scm_list2null_term_array(ScmObj lst, void *(*conv)(ScmObj));
+SCM_EXPORT void **scm_list2array(ScmObj lst, size_t *len,
+ void *(*conv)(ScmObj));
/* module.c */
SCM_EXPORT void scm_provide(ScmObj feature);
Modified: sigscheme-trunk/test-c/test-array2list.c
==============================================================================
--- sigscheme-trunk/test-c/test-array2list.c (original)
+++ sigscheme-trunk/test-c/test-array2list.c Fri Aug 24 06:11:59 2007
@@ -1,6 +1,6 @@
/*===========================================================================
* Filename : test-array2list.c
- * About : test for list C array <-> Scheme list conversion functions
+ * About : test for C array <-> Scheme list conversion functions
*
* Copyright (c) 2007 SigScheme Project <uim-en AT googlegroups.com>
*
@@ -111,80 +111,44 @@
scm_array2list(ary, 3, NULL)));
}
-TST_CASE("scm_null_term_array2list()")
-{
- void **ary;
-
- ary = (void **)null_ary;
-
- TST_TN_EQ_INT(0, scm_length(scm_null_term_array2list(ary, make_str)));
- TST_TN_TRUE (NULLP(scm_null_term_array2list(ary, make_str)));
-
- ary = (void **)char_ary;
-
- TST_TN_EQ_INT(3, scm_length(scm_null_term_array2list(ary, make_str)));
- TST_TN_TRUE (EQUALP(scm_eval_c_string("'(\"abc\" \"def\" \"gh\")"),
- scm_null_term_array2list(ary, make_str)));
-}
-
-TST_CASE("scm_null_term_array2list() without conversion")
-{
- ScmObj obj_ary[4];
- void **ary;
-
- obj_ary[0] = SCM_EOF;
- ary = (void **)obj_ary;
-
- TST_TN_EQ_INT(0, scm_length(scm_null_term_array2list(ary, NULL)));
- TST_TN_TRUE (NULLP(scm_null_term_array2list(ary, NULL)));
-
- obj_ary[0] = make_str(char_ary[0]);
- obj_ary[1] = make_str(char_ary[1]);
- obj_ary[2] = make_str(char_ary[2]);
- obj_ary[3] = SCM_EOF;
- ary = (void **)obj_ary;
-
- TST_TN_EQ_INT(3, scm_length(scm_null_term_array2list(ary, NULL)));
- TST_TN_TRUE (EQUALP(scm_eval_c_string("'(\"abc\" \"def\" \"gh\")"),
- scm_null_term_array2list(ary, NULL)));
-}
-
-TST_CASE("scm_list2null_term_array()")
+TST_CASE("scm_list2array()")
{
const char *list1 = "'(\"abc\")";
const char *list3 = "'(\"abc\" \"def\" \"gh\")";
void **ary;
+ size_t len;
- ary = scm_list2null_term_array(SCM_NULL, refer_c_str);
- TST_TN_EQ_PTR(NULL, ary[0]);
+ ary = scm_list2array(SCM_NULL, &len, refer_c_str);
+ TST_TN_EQ_INT(0, len);
- ary = scm_list2null_term_array(scm_eval_c_string(list1), refer_c_str);
+ ary = scm_list2array(scm_eval_c_string(list1), &len, refer_c_str);
+ TST_TN_EQ_INT(1, len);
TST_TN_EQ_STR("abc", ary[0]);
- TST_TN_EQ_PTR(NULL, ary[1]);
- ary = scm_list2null_term_array(scm_eval_c_string(list3), refer_c_str);
+ ary = scm_list2array(scm_eval_c_string(list3), &len, refer_c_str);
+ TST_TN_EQ_INT(3, len);
TST_TN_EQ_STR("abc", ary[0]);
TST_TN_EQ_STR("def", ary[1]);
TST_TN_EQ_STR("gh", ary[2]);
- TST_TN_EQ_PTR(NULL, ary[3]);
}
-TST_CASE("scm_list2null_term_array() without conversion")
+TST_CASE("scm_list2array() without conversion")
{
const char *list1 = "'(\"abc\")";
const char *list3 = "'(\"abc\" \"def\" \"gh\")";
void **ary;
+ size_t len;
- ary = scm_list2null_term_array(SCM_NULL, NULL);
- TST_TN_EQ_PTR(NULL, ary[0]);
+ ary = scm_list2array(SCM_NULL, &len, NULL);
+ TST_TN_EQ_INT(0, len);
- ary = scm_list2null_term_array(scm_eval_c_string(list1), NULL);
+ ary = scm_list2array(scm_eval_c_string(list1), &len, NULL);
+ TST_TN_EQ_INT(1, len);
TST_TN_TRUE(EQUALP(CONST_STRING("abc"), (ScmObj)ary[0]));
- TST_TN_EQ_PTR(NULL, ary[1]);
- ary = scm_list2null_term_array(scm_eval_c_string(list3), NULL);
+ ary = scm_list2array(scm_eval_c_string(list3), &len, NULL);
+ TST_TN_EQ_INT(3, len);
TST_TN_TRUE(EQUALP(CONST_STRING("abc"), (ScmObj)ary[0]));
TST_TN_TRUE(EQUALP(CONST_STRING("def"), (ScmObj)ary[1]));
TST_TN_TRUE(EQUALP(CONST_STRING("gh"), (ScmObj)ary[2]));
- TST_TN_EQ_PTR(NULL, ary[3]);
}