[Gauche-devel-jp] slib.scm(もしくはerror)の問題

Back to archive index

Kimura Fuyuki fuyuk****@nigre*****
2003年 12月 1日 (月) 19:20:49 JST


SLIB 3a1が出たのでいじっていたところ、いろいろ問題が見つかりました。

1. slib.scmの*features*にsystemが含まれていますが、その定義がありませ
   ん。これは次のパッチでいいと思います。

--- lib/slib.scm.in	8 Aug 2003 10:39:42 -0000	1.10
+++ lib/slib.scm.in	1 Dec 2003 09:43:00 -0000
@@ -154,6 +154,9 @@
 ;;; (TMPNAM) makes a temporary file name.
 (define tmpnam sys-tmpnam)
 
+;;; SYSTEM
+(define system sys-system)
+
 ;;; GETENV
 (define getenv sys-getenv)
 

2. slib:errorが単純にerrorで置き換えられていますが、これではうまくいき
   ません。なぜならslib:errorの第1引数にはシンボルが渡されるからです。

   slib:errorの定義を修正してもいいのですが、いっそ下のようにerror自体
   の挙動を変えてしまうのも手かと思います。SRFI-23ではThe argument
   <reason> should be a stringと述べられているだけなので、互換性に問題
   は生じないと思われます。

--- src/error.c	5 Jul 2003 03:29:12 -0000	1.41
+++ src/error.c	1 Dec 2003 10:06:52 -0000
@@ -205,14 +205,14 @@
  */
 
 /* SRFI-23 compatible error */
-ScmObj Scm_SError(ScmString *reason, ScmObj args)
+ScmObj Scm_SError(ScmObj reason, ScmObj args)
 {
     volatile ScmObj e;
 
     SCM_UNWIND_PROTECT {
         ScmObj ostr = Scm_MakeOutputStringPort(TRUE);
         ScmObj ap;
-        Scm_Write(SCM_OBJ(reason), ostr, SCM_WRITE_DISPLAY);
+        Scm_Write(reason, ostr, SCM_WRITE_DISPLAY);
         SCM_FOR_EACH(ap, args) {
             SCM_PUTC(' ', ostr);
             Scm_Write(SCM_CAR(ap), ostr, SCM_WRITE_WRITE);
--- src/exclib.stub	5 Jul 2003 03:29:12 -0000	1.9
+++ src/exclib.stub	1 Dec 2003 10:07:11 -0000
@@ -42,7 +42,7 @@
 ;; Exception procedures
 ;;
 
-(define-cproc error (reason::<string> &rest args)
+(define-cproc error (reason &rest args)
   (return "Scm_SError"))
 
 (define-cproc errorf (fmt &rest args)
--- src/gauche.h	27 Nov 2003 17:10:41 -0000	1.352
+++ src/gauche.h	1 Dec 2003 10:07:29 -0000
@@ -2045,7 +2045,7 @@
 /* Throwing error */
 SCM_EXTERN void Scm_Error(const char *msg, ...);
 SCM_EXTERN void Scm_SysError(const char *msg, ...);
-SCM_EXTERN ScmObj Scm_SError(ScmString *reason, ScmObj args);
+SCM_EXTERN ScmObj Scm_SError(ScmObj reason, ScmObj args);
 SCM_EXTERN ScmObj Scm_FError(ScmObj fmt, ScmObj args);
 
 SCM_EXTERN void Scm_Warn(const char *msg, ...);



ほかにも何かありそうなのですが、とりあえずここまで…

-- 
木村 冬樹



Gauche-devel-jp メーリングリストの案内
Back to archive index