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, ...); ほかにも何かありそうなのですが、とりあえずここまで… -- 木村 冬樹