なかだです。

  年賀状代わりに、思い付きのパッチを。

RTEST(), SPECIAL_CONST_P() - こうすると若干 - 5%程度(笑) - 早くな
	りました。分かりやすさとトレードできるだけのものかは疑問
	ですが。Qfalse, Qtrue, Qnil の値と VALUE が unsigned であ
	ることに依存してます。

FL_*() - dangling else が怖かったから。OBJSETUP() も
	do{...}while(0) の方が安心?

OBJ_INFECT() - なんか使いそうだったので、というか拡張ライブラリと
	かいじってたら結構欲しかったので。OBJ_TAINT_WITH() の方が
	よかったかしらん。
	あるいは taint されたオブジェクトを返す関数の方が便利だっ
	たかも。

diff -ru2p dist/ChangeLog build/ChangeLog
--- dist/ChangeLog	Tue Dec 14 18:10:17 1999
+++ build/ChangeLog	Sat Jan  1 10:30:55 2000
@@ -1,2 +1,16 @@
+Sat Jan  1 10:12:26 2000  Nobuyoshi Nakada  <nobu.nokada / softhome.net>
+
+	* ruby.h util.c (rb_special_const_p): peep hole optimization.
+
+	* ruby.h util.c (rb_test_false_or_nil): unused.
+
+	* ruby.h (RTEST, SPECIAL_CONST_P): peep hole optimization.
+
+	* ruby.h (FL_ABLE, FL_SET, FL_UNSET, FL_REVERSE): made expressions
+	  not statements.
+
+	* ruby.h (OBJ_INFECT): newly added which copies taint from `s' to
+	  `x'.
+
 Sat Jan  1 09:50:28 2000  Nobuyoshi Nakada  <nobu.nokada / softhome.net>
 
diff -ru2p dist/ruby.h build/ruby.h
--- dist/ruby.h	Tue Dec 14 18:10:23 1999
+++ build/ruby.h	Sat Jan  1 10:20:45 2000
@@ -133,5 +133,5 @@ VALUE rb_uint2inum _((unsigned long));
 #define Qnil   4
 
-#define RTEST(v) rb_test_false_or_nil((VALUE)(v))
+#define RTEST(v) ((VALUE)(v) & ~Qnil)
 #define NIL_P(v) ((VALUE)(v) == Qnil)
 
@@ -344,12 +344,15 @@ struct RBignum {
 #define FL_UMASK  (0xff<<FL_USHIFT)
 
-#define FL_ABLE(x) (!(FIXNUM_P(x)||rb_special_const_p((VALUE)(x))))
+#define SPECIAL_CONST_P(x) (FIXNUM_P((VALUE)x) || (VALUE)(x) <= Qnil)
+
+#define FL_ABLE(x) (!SPECIAL_CONST_P(x))
 #define FL_TEST(x,f) (FL_ABLE(x)?(RBASIC(x)->flags&(f)):0)
-#define FL_SET(x,f) if (FL_ABLE(x)) {RBASIC(x)->flags |= (f);}
-#define FL_UNSET(x,f) if(FL_ABLE(x)){RBASIC(x)->flags &= ~(f);}
-#define FL_REVERSE(x,f) if(FL_ABLE(x)){RBASIC(x)->flags ^= f;}
+#define FL_SET(x,f) (FL_ABLE(x) && (RBASIC(x)->flags |= (f)))
+#define FL_UNSET(x,f) (FL_ABLE(x) && (RBASIC(x)->flags &= ~(f)))
+#define FL_REVERSE(x,f) (FL_ABLE(x) && (RBASIC(x)->flags ^= (f)))
 
 #define OBJ_TAINTED(x) FL_TEST((x), FL_TAINT)
 #define OBJ_TAINT(x) FL_SET((x), FL_TAINT)
+#define OBJ_INFECT(x,s) (FL_ABLE(x) && FL_ABLE(s) && (RBASIC(x)->flags |= RBASIC(s)->flags & FL_TAINT))
 
 void *xmalloc _((size_t));
@@ -504,5 +507,4 @@ extern __inline__ VALUE rb_class_of _((V
 extern __inline__ int rb_type _((VALUE));
 extern __inline__ int rb_special_const_p _((VALUE));
-extern __inline__ int rb_test_false_or_nil _((VALUE));
 
 extern __inline__ VALUE
@@ -530,21 +532,12 @@ extern __inline__ int
 rb_special_const_p(VALUE obj)
 {
-    if (FIXNUM_P(obj)) return Qtrue;
-    if (obj == Qnil) return Qtrue;
-    if (obj == Qfalse) return Qtrue;
-    if (obj == Qtrue) return Qtrue;;
+    if (SPECIAL_CONST_P(obj)) return Qtrue;
     return Qfalse;
 }
 
-extern __inline__ int
-rb_test_false_or_nil(VALUE v)
-{
-    return (v != Qnil) && (v != Qfalse);
-}
 #else
 VALUE rb_class_of _((VALUE));
 int rb_type _((VALUE));
 int rb_special_const_p _((VALUE));
-int rb_test_false_or_nil _((VALUE));
 #endif
 
diff -ru2p dist/util.c build/util.c
--- dist/util.c	Fri Aug 13 14:45:15 1999
+++ build/util.c	Sat Jan  1 10:11:54 2000
@@ -52,17 +52,7 @@ rb_special_const_p(obj)
     VALUE obj;
 {
-    if (FIXNUM_P(obj)) return Qtrue;
-    if (obj == Qnil) return Qtrue;
-    if (obj == Qfalse) return Qtrue;
-    if (obj == Qtrue) return Qtrue;
+    if (SPECIAL_CONST_P(obj)) return Qtrue;
 
     return Qfalse;
-}
-
-int
-rb_test_false_or_nil(v)
-    VALUE v;
-{
-    return (v != Qnil) && (v != Qfalse);
 }

-- 
そうだ 強気に ちょっと インチキに☆彡
    中田 "Bugるくらいがちょうどいいかも;-)" 伸悦