[ANN] Ruby 1.9.1$B;EMME`7k(B

Yuguie$B$G$9!#e(B

e$B4{$K$*CN$i$;$7$?$h$&$K!"e(BRuby
1.9.1e$B$N;EMM$Oe(B9e$B7ne(B25e$BF|$GE`7k$5$l$^$9!#e(B

e$B$=$l0J9_!"e(B

  • Rubye$B%l%Y%k$Ne(BAPIe$B$OJQ99IT2De(B

Ce$B%l%Y%k$Ne(BAPIe$B$Oe(Bruby-core/ruby-deve$B$G$N;vA0AjCL$J$7$KJQ99IT2De(B
*
include/ruby/.he$B$K$"$k$9$Y$F$N9=B$BN!"%G!<%?7?!"JQ?t!“4X?t!”%^%/%me(B
e$B$Oe(BCe$B%l%Y%ke(BAPIe$B$H8+$J$7$^$9!#e(B
*
e$B8x3+$7$?$/$J$$$b$N$Oe(Binclude/ruby/
.he$B$+$i0\F0$5$;$F$/$@$5$$!#e(B

e$B$^$?!"e(B10e$B7ne(B25e$BF|$K$Oe(Bruby_1_9_1e$B%V%i%s%A$r:n@.$7$Fe(B1.9.1
RC1e$B$r%j%j!<%9$7$^e(B
e$B$9!#$=$l0J9_$Oe(B

  • Ce$B%l%Y%ke(BAPIe$BJQ99IT2De(B

e$B$=$l$+$i!"e(B1.9.xe$B$Ne(BCe$B%l%Y%ke(BAPIe$B$Oe(B1.9.1e$B$KBP$7$F%P%$%J%j8eJ}8_49@-$r;}$D$3$H$,e(B
e$B4|BT$5$l$^$9!#e(B

e$B0J>e%j%^%$%s%@$H!"e(Birce$B$G$NAjCL$NJs9p$G$7$?!#e(B

e$B$H$$$&$3$H$r4U$_$F!“e(B
*
node.he$B$re(Binclude/ruby/e$B$+$i0\F0$5$;$?$$e(B(rippere$B$O$J$s$H$+$9$ke(B)e$B$N$G$9$,!“e(B
e$B$3$N$X$s$N7hDj8”$OC/$K$”$k$N$G$7$g$&e(B?

  • ruby_io_te$B$OHs8x3+$K$7$J$$$H8e2y$7$^$;$s$+e(B?

  • oniguruma.he$B$OBg>fIWe(B?

e$B@.@%$G$9!#e(B

Yugui (Yuki S.) wrote:

  • Ce$B%l%Y%k$Ne(BAPIe$B$Oe(Bruby-core/ruby-deve$B$G$N;vA0AjCL$J$7$KJQ99IT2De(B
    • include/ruby/*.he$B$K$"$k$9$Y$F$N9=B$BN!"%G!<%?7?!"JQ?t!“4X?t!”%^%/%me(B
      e$B$Oe(BCe$B%l%Y%ke(BAPIe$B$H8+$J$7$^$9!#e(B
    • e$B8x3+$7$?$/$J$$$b$N$Oe(Binclude/ruby/*.he$B$+$i0\F0$5$;$F$/$@$5$$!#e(B

e$B%3%_%C%?B&$K8~$1$F$N;vA0AjCL5AL3$O$h$$$H;W$&$N$G$9$,!"e(B
e$B8x3+e(B C API e$B$H@k8@$7$F$7$^$&$N$OHyL/$+$b$7$l$^$;$s!#e(B

e$BNc$($Pe(B oniguruma.h e$B$Oe(B encoding.h
e$B$,0MB8$7$F$$$k$?$a$K$=$3$K$"$k$N$G$"$C$F!“e(B
e$B3HD%%i%$%V%i%j$N3+H/<T$N$?$a$K$=$3$K$*$$$F$”$k$N$H$O>/!90c$$$^$9!#e(B
e$B$=$7$F!"e(BRuby e$B$Ne(B encoding e$B$^$o$j$r$$$8$k$?$a$K!“e(B
rb_encoding e$B$N<BBN$G$”$ke(B OnigEncoding
e$B$r$$$8$i$l$F$b:$$j$^$9!#e(B

e$B$^$?JL$NNc$G$9$H!“e(BRString
e$B9=B$BN$N%a%s%P$rD>@$$$8$i$l$F$b:$$j$^$9!#e(B
e$B$3$l$r$$$8$k;~$Oe(B RSTRING_PTR e$B$de(B RSTRING_LEN
e$BEy$N%^%/%m$r;H$&$b$N$G$”$C$F!"e(B
RSTRING(str)->as.heap.len e$BEy$OHs8x3+$@$H9M$($k$Y$-$G$7$g$&!#e(B

e$B$D$^$k$H$3$m!"8x3+e(B C API
e$B$N%j%9%H$H$$$&$+%I%-%e%a%s%H$H$$$&$+$,I,MW$H$$$&$+!"e(B
README.EXT
e$B$,$=$l$J5$$,$9$k$N$G!"3HD%%i%$%V%i%j$r:n$kJ}$O$=$N$h$&$K$4N10U$/$@$5$$!#e(B

e$B!!$5$5$@$G$9!%e(B

NARUSE, Yui wrote:

e$B%3%_%C%?B&$K8~$1$F$N;vA0AjCL5AL3$O$h$$$H;W$&$N$G$9$,!"e(B
e$B8x3+e(B C API e$B$H@k8@$7$F$7$^$&$N$OHyL/$+$b$7$l$^$;$s!#e(B

e$B!!K\O@$H$O4X78$J$$$N$G$9$,!$e(Binclude/ruby/node.h
e$B$C$F8x3+$7$?$^$^$K$7e(B
e$B$^$9!)!!e(Bnodedump
e$B$H$+:n$k?M$K$O87$7$$$+$b$7$l$^$;$s$,!$!V8e$GFbIt>ue(B
e$BBV$rJQ99$9$k$+$b!W$H8@$C$F$$$k0J>e!$L5$/$7$F$7$^$C$?$[$&$,$$$$$N$G$Oe(B
e$B$J$$$G$7$g$&$+!%e(B

include/ruby/signal.h e$B$O!$L50UL#$J%3!<%I$7$+$J$+$C$?$N$Ge(B

e$B>C$7$^$7$?!%e(B

e$B!!$5$5$@$G$9!%e(B

Tadashi S. wrote:

e$B$H$$$&!Ve(Bdble$B!W$NA0Nc$O$?$/$5$s$"$k$N$K!"$I$&$7$Fe(B

DOUBLE2NUM

e$B$@$1!Ve(Bdoublee$B!W$J$N$G$7$g$&$+!#e(B1.9e$B$+$iF~$C$?%^%/%m$N$h$&$G$9$,!“FCJL$JM}M3$,$J$$8B$je(B
e$BB7$($F$”$C$?J}$,!"N?d$,8z$$$F%W%m%0%i%$,=q$-$d$9$$$G$9!#e(B

e$B!!$?$7$+!$;d$,F~$l$?$h$&$J5$$,$7$^$9$,!$e(Bdouble
e$B;H$&%W%m%0%i%`$J$s$Fe(B
e$B=q$$$F$3$H$,$J$+$C$?$s$G!$$3$s$J$U$&$K$7$?$s$@$H;W$$$^$9!%$H$/$K0U8+e(B
e$B$O$"$j$^$;$s!%$^$D$b$H$5$s$N$4H=CG$K$*G$$;!%e(B

e$B:XF#$H?=$7$^$9!#e(B

e$B$^$:$O0l3HD%%i%$%V%i%j$N:n<T$H$7$F!VCf?H$r4]=P$7$K$7$J$$$G%$%s%?!<%U%'!<%9$re(B
e$B$O$C$-$j$5$;$k!W$H$$$&J}8~@-$K;?@.$G$“$k!”$H$$$&$3$H$r8@$C$F$*$-$?$$$G$9!#e(B

On Tue, 2 Sep 2008 22:06:55 +0900
“NARUSE, Yui” [email protected] wrote:

e$B@.@%$G$9!#e(B

Yugui (Yuki S.) wrote:

  • Ce$B%l%Y%k$Ne(BAPIe$B$Oe(Bruby-core/ruby-deve$B$G$N;vA0AjCL$J$7$KJQ99IT2De(B
    • include/ruby/*.he$B$K$“$k$9$Y$F$N9=B$BN!”%G!<%?7?!"JQ?t!“4X?t!”%^%/%me(B
      e$B$Oe(BCe$B%l%Y%ke(BAPIe$B$H8+$J$7$^$9!#e(B
    • e$B8x3+$7$?$/$J$$$b$N$Oe(Binclude/ruby/*.he$B$+$i0\F0$5$;$F$/$@$5$$!#e(B

e$B%3%_%C%?B&$K8~$1$F$N;vA0AjCL5AL3$O$h$$$H;W$&$N$G$9$,!"e(B
e$B8x3+e(B C API e$B$H@k8@$7$F$7$^$&$N$OHyL/$+$b$7$l$^$;$s!#e(B

e$B$=$&$G$7$g$&$+!#<+J,$O!Ve(Binclude/rubye$B0J2<$O8x3+!W$H$$$&$N$,J,$+$j$d$9$/!“e(B
e$BK>$^$7$$;Q$G$”$k$H46$8$^$9!#e(B

e$BNc$($Pe(B oniguruma.h e$B$Oe(B encoding.h e$B$,0MB8$7$F$$$k$?$a$K$=$3$K$“$k$N$G$”$C$F!"e(B
(snip)

e$B$3$A$i$O$h$/J,$+$C$F$J$$$N$G$9$,!"e(B

e$B$^$?JL$NNc$G$9$H!“e(BRString e$B9=B$BN$N%a%s%P$rD>@$$$8$i$l$F$b:$$j$^$9!#e(B
e$B$3$l$r$$$8$k;~$Oe(B RSTRING_PTR e$B$de(B RSTRING_LEN e$BEy$N%^%/%m$r;H$&$b$N$G$”$C$F!"e(B
RSTRING(str)->as.heap.len e$BEy$OHs8x3+$@$H9M$($k$Y$-$G$7$g$&!#e(B

e$B$J$i$P!“Hs8x3+>pJs$rJ];}$7$F$$$ke(BRStringe$B<+BN$rHs8x3+$K$9$k$N$,6Z$G$O$J$$$G$7$g$&$+!#e(B
e$B$^$@$^$@Hs8x3+$K$9$Y$-!&$G$-$kItJ,$,$”$j$^$9$,!“$H$j$”$($:;n:n$7$?%Q%C%A$rKvHx$Ke(B
e$BIU$1$^$9!#e(B

e$B$=$&$$$&$*OC$G$O$J$$e(B? > yuguie$B$5$se(B

e$B$D$^$k$H$3$m!"8x3+e(B C API e$B$N%j%9%H$H$$$&$+%I%-%e%a%s%H$H$$$&$+$,I,MW$H$$$&$+!"e(B
README.EXT e$B$,$=$l$J5$$,$9$k$N$G!"3HD%%i%$%V%i%j$r:n$kJ}$O$=$N$h$&$K$4N10U$/$@$5$$!#e(B

e$B3HD%%i%$%V%i%j$r0lEY$G$b:n$C$?$3$H$N$"$k?M4V$J$i$P!"e(BREADME.EXTe$B$,LVMeE*$J$b$N$Ge(B
e$B$J$$$3$H$O!"2P$r8+$k$h$jL@$i$+$G$7$g$&!#e(B

e$B!V%$%s%9%H!<%k$5$l$?%X%C%@%U%!%$%k!a8x3+$5$l$?e(BAPIe$B!W$H$$$&$4$/Ev$?$jA0$N;v$,!"e(BRuby
e$B$G$b<B8=$5$l$k$3$H$rK>$_$^$9!#$=$&$9$l$P!“e(BAPIe$B$N%j%9%H$O%X%C%@%U%!%$%k$r8+$l$Pe(B
e$BJ,$+$j$^$9!#J8;zDL$j!”%=!<%9$,%I%-%e%a%s%H$G$9!#e(B

Index: include/ruby/ruby.h

— include/ruby/ruby.h (revision 19086)
+++ include/ruby/ruby.h (working copy)
@@ -573,32 +573,14 @@
#define ELTS_SHARED FL_USER2

#define RSTRING_EMBED_LEN_MAX ((sizeof(VALUE)*3)/sizeof(char)-1)
-struct RString {

  • struct RBasic basic;
  • union {
  • struct {
  •  long len;
    
  •  char *ptr;
    
  •  union {
    
  • long capa;
  • VALUE shared;
  •  } aux;
    
  • } heap;
  • char ary[RSTRING_EMBED_LEN_MAX + 1];
  • } as;
    -};
    #define RSTRING_NOEMBED FL_USER1
    #define RSTRING_EMBED_LEN_MASK
    (FL_USER2|FL_USER3|FL_USER4|FL_USER5|FL_USER6)
    #define RSTRING_EMBED_LEN_SHIFT (FL_USHIFT+2)
    -#define RSTRING_LEN(str) \
  • (!(RBASIC(str)->flags & RSTRING_NOEMBED) ? \
  • (long)((RBASIC(str)->flags >> RSTRING_EMBED_LEN_SHIFT) & \
    
  •        (RSTRING_EMBED_LEN_MASK >> RSTRING_EMBED_LEN_SHIFT)) : \
    
  • RSTRING(str)->as.heap.len)
    

-#define RSTRING_PTR(str) \

  • (!(RBASIC(str)->flags & RSTRING_NOEMBED) ? \
  • RSTRING(str)->as.ary : \
    
  • RSTRING(str)->as.heap.ptr)
    

+long RSTRING_LEN(VALUE str);
+char RSTRING_PTR(VALUE str);
+/
for compatibility */
+#define RSTRING_LEN(str) RSTRING_LEN(str)
+#define RSTRING_PTR(str) RSTRING_PTR(str)
#define RSTRING_END(str) (RSTRING_PTR(str)+RSTRING_LEN(str))

struct RArray {
@@ -746,7 +728,6 @@
#define RCLASS(obj) (R_CAST(RClass)(obj))
#define RMODULE(obj) RCLASS(obj)
#define RFLOAT(obj) (R_CAST(RFloat)(obj))
-#define RSTRING(obj) (R_CAST(RString)(obj))
#define RREGEXP(obj) (R_CAST(RRegexp)(obj))
#define RARRAY(obj) (R_CAST(RArray)(obj))
#define RHASH(obj) (R_CAST(RHash)(obj))
Index: string.c

— string.c (revision 19086)
+++ string.c (working copy)
@@ -14,6 +14,7 @@
#include “ruby/ruby.h”
#include “ruby/re.h”
#include “ruby/encoding.h”
+#include “private.h”

#define BEG(no) regs->beg[no]
#define END(no) regs->end[no]
@@ -106,6 +107,23 @@
}
} while (0)

+inline long
+RSTRING_LEN(VALUE str)
+{

  • return !(RBASIC(str)->flags & RSTRING_NOEMBED) ?
  •    (long)((RBASIC(str)->flags >> RSTRING_EMBED_LEN_SHIFT) &
    
  •           (RSTRING_EMBED_LEN_MASK >> RSTRING_EMBED_LEN_SHIFT)) :
    
  •    RSTRING(str)->as.heap.len;
    

+}
+
+inline char *
+RSTRING_PTR(VALUE str)
+{

  • return !(RBASIC(str)->flags & RSTRING_NOEMBED) ?
  •    RSTRING(str)->as.ary :
    
  •    RSTRING(str)->as.heap.ptr;
    

+}
+
#define is_ascii_string(str) (rb_enc_str_coderange(str) ==
ENC_CODERANGE_7BIT)
#define is_broken_string(str) (rb_enc_str_coderange(str) ==
ENC_CODERANGE_BROKEN)

Index: gc.c

— gc.c (revision 19086)
+++ gc.c (working copy)
@@ -20,6 +20,7 @@
#include “eval_intern.h”
#include “vm_core.h”
#include “gc.h”
+#include “private.h”
#include <stdio.h>
#include <setjmp.h>
#include <sys/types.h>
Index: parse.y

— parse.y (revision 19086)
+++ parse.y (working copy)
@@ -21,6 +21,7 @@
#include “ruby/encoding.h”
#include “id.h”
#include “regenc.h”
+#include “private.h”
#include <stdio.h>
#include <errno.h>
#include <ctype.h>

e$B1sF#$G$9!#e(B

2008/09/03 21:27 Tadashi S. [email protected]:

e$B$^$?JL$NNc$G$9$H!“e(BRString e$B9=B$BN$N%a%s%P$rD>@$$$8$i$l$F$b:$$j$^$9!#e(B
e$B$3$l$r$$$8$k;~$Oe(B RSTRING_PTR e$B$de(B RSTRING_LEN e$BEy$N%^%/%m$r;H$&$b$N$G$”$C$F!"e(B
RSTRING(str)->as.heap.len e$BEy$OHs8x3+$@$H9M$($k$Y$-$G$7$g$&!#e(B

e$B$J$i$P!“Hs8x3+>pJs$rJ];}$7$F$$$ke(BRStringe$B<+BN$rHs8x3+$K$9$k$N$,6Z$G$O$J$$$G$7$g$&$+!#e(B
e$B$^$@$^$@Hs8x3+$K$9$Y$-!&$G$-$kItJ,$,$”$j$^$9$,!“$H$j$”$($:;n:n$7$?%Q%C%A$rKvHx$Ke(B
e$BIU$1$^$9!#e(B

private.h e$B$,$J$+$C$?$N$G$9$,!"e(Bstruct RString e$B$He(B RSTRING
e$B%^%/%m$NDj5A$@$1=q$$$?$b$N$G%3%s%Q%$%k$7$F$_$^$7$?!#e(B
e$B$d$O$j!"4X?t$K$9$k$H%*!<%P!<%X%C%I$,H/@8$9$k$h$&$G$9!#e(B

e$B%Q%C%AA0e(B

$ time ./ruby.org -rstringio -e
s = StringIO.new(" " * 100)
i = 0
while i < 100000000
s.eof
i += 1
end

real 0m15.430s
user 0m15.400s
sys 0m0.020s

e$B%Q%C%A8ee(B

$ time ./ruby.new -rstringio -e ’
s = StringIO.new(" " * 100)
i = 0
while i < 100000000
s.eof
i += 1
end

real 0m16.280s
user 0m16.260s
sys 0m0.010s

e$B$3$l$@$1$J$iL5;k$G$-$k%l%Y%k$+$b$7$l$^$;$s$,!"B>$N9=B$BN$^$Ge(B
e$BF1MM$K07$C$F$$$/$H!"L5;k$G$-$J$$%l%Y%k$K$J$k$+$b$7$l$^$;$s!#e(B

e$B$D$^$k$H$3$m!"8x3+e(B C API e$B$N%j%9%H$H$$$&$+%I%-%e%a%s%H$H$$$&$+$,I,MW$H$$$&$+!"e(B
README.EXT e$B$,$=$l$J5$$,$9$k$N$G!"3HD%%i%$%V%i%j$r:n$kJ}$O$=$N$h$&$K$4N10U$/$@$5$$!#e(B

e$B3HD%%i%$%V%i%j$r0lEY$G$b:n$C$?$3$H$N$"$k?M4V$J$i$P!"e(BREADME.EXTe$B$,LVMeE*$J$b$N$Ge(B
e$B$J$$$3$H$O!"2P$r8+$k$h$jL@$i$+$G$7$g$&!#e(B

README.EXT e$B$r@0M}!&A}6/$7$F$$$/$N$,@5$7$$J}8~@-$@$H;W$$$^$9!#e(B
e$B$=$N$?$a$K$be(B README.EXT e$B$K=q$$$F$“$k$3$H$@$1$G$G$-$J$$$3$H$Ke(B
e$B5$$,$D$$$??M$O!”$=$N$?$S$Ke(B ML e$B$Ge(B API
e$B$N8x3+$rMW5a$r$9$k$N$,e(B
e$B$$$$$H;W$$$^$9!#e(B

e$B!V%$%s%9%H!<%k$5$l$?%X%C%@%U%!%$%k!a8x3+$5$l$?e(BAPIe$B!W$H$$$&$4$/Ev$?$jA0$N;v$,!"e(B

e$B$=$l$C$FEv$?$jA0$J$s$G$7$g$&$+!#e(B
e$B8D?ME*$K$O!Ve(Bundocumented e$B$J5!G=$r;H$C$?$i$I$&$J$C$F$bJ86g$,e(B
e$B8@$($J$$!W$H$$$&J}$,Ev$?$jA0$@$H;W$C$F$$$^$9!#e(B

e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B

In message “Re: [ruby-dev:36156] Re: [ANN] Ruby 1.9.1e$B;EMME`7ke(B”
on Thu, 4 Sep 2008 19:47:43 +0900, “Yusuke ENDOH” [email protected]
writes:

|> e$B!V%$%s%9%H!<%k$5$l$?%X%C%@%U%!%$%k!a8x3+$5$l$?e(BAPIe$B!W$H$$$&$4$/Ev$?$jA0$N;v$,!"e(B
|
|e$B$=$l$C$FEv$?$jA0$J$s$G$7$g$&$+!#e(B
|e$B8D?ME*$K$O!Ve(Bundocumented e$B$J5!G=$r;H$C$?$i$I$&$J$C$F$bJ86g$,e(B
|e$B8@$($J$$!W$H$$$&J}$,Ev$?$jA0$@$H;W$C$F$$$^$9!#e(B

e$B8D?ME*$K$O1sF#$5$s$HF1MM$N463P$G$9!#$N$G!"%3%9%H$r$+$1$F$^$Ge(B
e$B1#$90UL#$O$J$$$H;W$$$^$9!#e(B

e$B:XF#$H?=$7$^$9!#e(B

On Tue, 2 Sep 2008 15:23:30 +0900
“Yugui (Yuki S.)” [email protected] wrote:

  • Ce$B%l%Y%k$Ne(BAPIe$B$Oe(Bruby-core/ruby-deve$B$G$N;vA0AjCL$J$7$KJQ99IT2De(B
    • include/ruby/*.he$B$K$“$k$9$Y$F$N9=B$BN!”%G!<%?7?!"JQ?t!“4X?t!”%^%/%me(B
      e$B$Oe(BCe$B%l%Y%ke(BAPIe$B$H8+$J$7$^$9!#e(B

e$BA0!9$+$i5$$K$J$C$F$?$s$G$9$,!"e(B

NUM2DBL
rb_cstr_to_dbl
rb_str_to_dbl
rb_num2dbl
rb_dbl_cmp
rb_dbl2big
rb_big2dbl

e$B$H$$$&!Ve(Bdble$B!W$NA0Nc$O$?$/$5$s$“$k$N$K!”$I$&$7$Fe(B

DOUBLE2NUM

e$B$@$1!Ve(Bdoublee$B!W$J$N$G$7$g$&$+!#e(B1.9e$B$+$iF~$C$?%^%/%m$N$h$&$G$9$,!“FCJL$JM}M3$,$J$$8B$je(B
e$BB7$($F$”$C$?J}$,!"N?d$,8z$$$F%W%m%0%i%$,=q$-$d$9$$$G$9!#e(B

Index: math.c

— math.c (revision 19065)
+++ math.c (working copy)
@@ -85,7 +85,7 @@
math_atan2(VALUE obj, VALUE y, VALUE x)
{
Need_Float2(y, x);

  • return DOUBLE2NUM(atan2(RFLOAT_VALUE(y), RFLOAT_VALUE(x)));
  • return DBL2NUM(atan2(RFLOAT_VALUE(y), RFLOAT_VALUE(x)));
    }

@@ -101,7 +101,7 @@
math_cos(VALUE obj, VALUE x)
{
Need_Float(x);

  • return DOUBLE2NUM(cos(RFLOAT_VALUE(x)));
  • return DBL2NUM(cos(RFLOAT_VALUE(x)));
    }

/*
@@ -117,7 +117,7 @@
{
Need_Float(x);

  • return DOUBLE2NUM(sin(RFLOAT_VALUE(x)));
  • return DBL2NUM(sin(RFLOAT_VALUE(x)));
    }

@@ -133,7 +133,7 @@
{
Need_Float(x);

  • return DOUBLE2NUM(tan(RFLOAT_VALUE(x)));
  • return DBL2NUM(tan(RFLOAT_VALUE(x)));
    }

/*
@@ -152,7 +152,7 @@
errno = 0;
d = acos(RFLOAT_VALUE(x));
domain_check(d, “acos”);

  • return DOUBLE2NUM(d);
  • return DBL2NUM(d);
    }

/*
@@ -171,7 +171,7 @@
errno = 0;
d = asin(RFLOAT_VALUE(x));
domain_check(d, “asin”);

  • return DOUBLE2NUM(d);
  • return DBL2NUM(d);
    }

/*
@@ -185,7 +185,7 @@
math_atan(VALUE obj, VALUE x)
{
Need_Float(x);

  • return DOUBLE2NUM(atan(RFLOAT_VALUE(x)));
  • return DBL2NUM(atan(RFLOAT_VALUE(x)));
    }

#ifndef HAVE_COSH
@@ -208,7 +208,7 @@
{
Need_Float(x);

  • return DOUBLE2NUM(cosh(RFLOAT_VALUE(x)));
  • return DBL2NUM(cosh(RFLOAT_VALUE(x)));
    }

#ifndef HAVE_SINH
@@ -231,7 +231,7 @@
math_sinh(VALUE obj, VALUE x)
{
Need_Float(x);

  • return DOUBLE2NUM(sinh(RFLOAT_VALUE(x)));
  • return DBL2NUM(sinh(RFLOAT_VALUE(x)));
    }

#ifndef HAVE_TANH
@@ -254,7 +254,7 @@
math_tanh(VALUE obj, VALUE x)
{
Need_Float(x);

  • return DOUBLE2NUM(tanh(RFLOAT_VALUE(x)));
  • return DBL2NUM(tanh(RFLOAT_VALUE(x)));
    }

/*
@@ -273,7 +273,7 @@
errno = 0;
d = acosh(RFLOAT_VALUE(x));
domain_check(d, “acosh”);

  • return DOUBLE2NUM(d);
  • return DBL2NUM(d);
    }

/*
@@ -287,7 +287,7 @@
math_asinh(VALUE obj, VALUE x)
{
Need_Float(x);

  • return DOUBLE2NUM(asinh(RFLOAT_VALUE(x)));
  • return DBL2NUM(asinh(RFLOAT_VALUE(x)));
    }

/*
@@ -307,7 +307,7 @@
d = atanh(RFLOAT_VALUE(x));
domain_check(d, “atanh”);
infinity_check(x, d, “atanh”);

  • return DOUBLE2NUM(d);
  • return DBL2NUM(d);
    }

/*
@@ -321,7 +321,7 @@
math_exp(VALUE obj, VALUE x)
{
Need_Float(x);

  • return DOUBLE2NUM(exp(RFLOAT_VALUE(x)));
  • return DBL2NUM(exp(RFLOAT_VALUE(x)));
    }

#if defined CYGWIN
@@ -359,7 +359,7 @@
}
domain_check(d, “log”);
infinity_check(x, d, “log”);

  • return DOUBLE2NUM(d);
  • return DBL2NUM(d);
    }

#ifndef log2
@@ -391,7 +391,7 @@
d = log2(RFLOAT_VALUE(x));
domain_check(d, “log2”);
infinity_check(x, d, “log2”);

  • return DOUBLE2NUM(d);
  • return DBL2NUM(d);
    }

/*
@@ -411,7 +411,7 @@
d = log10(RFLOAT_VALUE(x));
domain_check(d, “log10”);
infinity_check(x, d, “log10”);

  • return DOUBLE2NUM(d);
  • return DBL2NUM(d);
    }

/*
@@ -447,7 +447,7 @@
errno = 0;
d = sqrt(RFLOAT_VALUE(x));
domain_check(d, “sqrt”);

  • return DOUBLE2NUM(d);
  • return DBL2NUM(d);
    }

/*
@@ -486,7 +486,7 @@
math_cbrt(VALUE obj, VALUE x)
{
Need_Float(x);

  • return DOUBLE2NUM(cbrt(RFLOAT_VALUE(x)));
  • return DBL2NUM(cbrt(RFLOAT_VALUE(x)));
    }

/*
@@ -510,7 +510,7 @@
Need_Float(x);

 d = frexp(RFLOAT_VALUE(x), &exp);
  • return rb_assoc_new(DOUBLE2NUM(d), INT2NUM(exp));
  • return rb_assoc_new(DBL2NUM(d), INT2NUM(exp));
    }

/*
@@ -527,7 +527,7 @@
math_ldexp(VALUE obj, VALUE x, VALUE n)
{
Need_Float(x);

  • return DOUBLE2NUM(ldexp(RFLOAT_VALUE(x), NUM2INT(n)));
  • return DBL2NUM(ldexp(RFLOAT_VALUE(x), NUM2INT(n)));
    }

/*
@@ -544,7 +544,7 @@
math_hypot(VALUE obj, VALUE x, VALUE y)
{
Need_Float2(x, y);

  • return DOUBLE2NUM(hypot(RFLOAT_VALUE(x), RFLOAT_VALUE(y)));
  • return DBL2NUM(hypot(RFLOAT_VALUE(x), RFLOAT_VALUE(y)));
    }

/*
@@ -558,7 +558,7 @@
math_erf(VALUE obj, VALUE x)
{
Need_Float(x);

  • return DOUBLE2NUM(erf(RFLOAT_VALUE(x)));
  • return DBL2NUM(erf(RFLOAT_VALUE(x)));
    }

/*
@@ -572,7 +572,7 @@
math_erfc(VALUE obj, VALUE x)
{
Need_Float(x);

  • return DOUBLE2NUM(erfc(RFLOAT_VALUE(x)));
  • return DBL2NUM(erfc(RFLOAT_VALUE(x)));
    }

/*
@@ -624,7 +624,7 @@
errno = 0;
d = tgamma(RFLOAT_VALUE(x));
domain_check(d, “gamma”);

  • return DOUBLE2NUM(d);
  • return DBL2NUM(d);
    }

/*
@@ -649,7 +649,7 @@
errno = 0;
d = lgamma_r(RFLOAT_VALUE(x), &sign);
domain_check(d, “lgamma”);

  • v = DOUBLE2NUM(d);
  • v = DBL2NUM(d);
    return rb_assoc_new(v, INT2FIX(sign));
    }

@@ -667,15 +667,15 @@
rb_mMath = rb_define_module(“Math”);

#ifdef M_PI

  • rb_define_const(rb_mMath, “PI”, DOUBLE2NUM(M_PI));
  • rb_define_const(rb_mMath, “PI”, DBL2NUM(M_PI));
    #else
  • rb_define_const(rb_mMath, “PI”, DOUBLE2NUM(atan(1.0)*4.0));
  • rb_define_const(rb_mMath, “PI”, DBL2NUM(atan(1.0)*4.0));
    #endif

#ifdef M_E

  • rb_define_const(rb_mMath, “E”, DOUBLE2NUM(M_E));
  • rb_define_const(rb_mMath, “E”, DBL2NUM(M_E));
    #else
  • rb_define_const(rb_mMath, “E”, DOUBLE2NUM(exp(1.0)));
  • rb_define_const(rb_mMath, “E”, DBL2NUM(exp(1.0)));
    #endif

    rb_define_module_function(rb_mMath, “atan2”, math_atan2, 2);
    Index: time.c
    ===================================================================
    — time.c (revision 19065)
    +++ time.c (working copy)
    @@ -1016,7 +1016,7 @@
    struct time_object *tobj;

    GetTimeval(time, tobj);

  • return
    DOUBLE2NUM((double)tobj->ts.tv_sec+(double)tobj->ts.tv_nsec/1e9);
  • return
    DBL2NUM((double)tobj->ts.tv_sec+(double)tobj->ts.tv_nsec/1e9);
    }

/*
@@ -1513,7 +1513,7 @@
f = (double)(unsigned_time_t)(tobj->ts.tv_sec -
tobj2->ts.tv_sec);
f += ((double)tobj->ts.tv_nsec - (double)tobj2->ts.tv_nsec)*1e-9;

  • return DOUBLE2NUM(f);
  • return DBL2NUM(f);
    }
    return time_add(tobj, time2, -1);
    }
    Index: include/ruby/ruby.h
    ===================================================================
    — include/ruby/ruby.h (revision 19065)
    +++ include/ruby/ruby.h (working copy)
    @@ -568,7 +568,7 @@
    double float_value;
    };
    #define RFLOAT_VALUE(v) (RFLOAT(v)->float_value)
    -#define DOUBLE2NUM(dbl) rb_float_new(dbl)
    +#define DBL2NUM(dbl) rb_float_new(dbl)

#define ELTS_SHARED FL_USER2

Index: insns.def

— insns.def (revision 19065)
+++ insns.def (working copy)
@@ -1319,7 +1319,7 @@
else if (HEAP_CLASS_OF(recv) == rb_cFloat &&
HEAP_CLASS_OF(obj) == rb_cFloat &&
BASIC_OP_UNREDEFINED_P(BOP_PLUS)) {

  •  val = DOUBLE2NUM(RFLOAT_VALUE(recv) + RFLOAT_VALUE(obj));
    
  •  val = DBL2NUM(RFLOAT_VALUE(recv) + RFLOAT_VALUE(obj));
    
    }
    #endif

@@ -1420,7 +1420,7 @@
else if (HEAP_CLASS_OF(recv) == rb_cFloat &&
HEAP_CLASS_OF(obj) == rb_cFloat &&
BASIC_OP_UNREDEFINED_P(BOP_MULT)) {

  •  val = DOUBLE2NUM(RFLOAT_VALUE(recv) * RFLOAT_VALUE(obj));
    
  •  val = DBL2NUM(RFLOAT_VALUE(recv) * RFLOAT_VALUE(obj));
    
    }
    #endif
    else {
    @@ -1484,7 +1484,7 @@
    else if (HEAP_CLASS_OF(recv) == rb_cFloat &&
    HEAP_CLASS_OF(obj) == rb_cFloat &&
    BASIC_OP_UNREDEFINED_P(BOP_DIV)) {
  •  val = DOUBLE2NUM(RFLOAT_VALUE(recv) / RFLOAT_VALUE(obj));
    
  •  val = DBL2NUM(RFLOAT_VALUE(recv) / RFLOAT_VALUE(obj));
    
    }
    #endif
    else {
    @@ -1564,7 +1564,7 @@
    mod += y;
    div -= 1.0;
    }
  •  val = DOUBLE2NUM(mod);
    
  •  val = DBL2NUM(mod);
    
    }
    else {
    goto INSN_LABEL(normal_dispatch);
    Index: object.c
    ===================================================================
    — object.c (revision 19065)
    +++ object.c (working copy)
    @@ -850,7 +850,7 @@
    static VALUE
    nil_to_f(VALUE obj)
    {
  • return DOUBLE2NUM(0.0);
  • return DBL2NUM(0.0);
    }

/*
@@ -2230,16 +2230,16 @@
{
switch (TYPE(val)) {
case T_FIXNUM:

  • return DOUBLE2NUM((double)FIX2LONG(val));
  • return DBL2NUM((double)FIX2LONG(val));

    case T_FLOAT:
    

    return val;

    case T_BIGNUM:
    
  • return DOUBLE2NUM(rb_big2dbl(val));
  • return DBL2NUM(rb_big2dbl(val));

    case T_STRING:
    
  • return DOUBLE2NUM(rb_str_to_dbl(val, Qtrue));
  • return DBL2NUM(rb_str_to_dbl(val, Qtrue));

    case T_NIL:
    

    rb_raise(rb_eTypeError, “can’t convert nil into Float”);
    Index: string.c
    ===================================================================
    — string.c (revision 19065)
    +++ string.c (working copy)
    @@ -3763,7 +3763,7 @@
    static VALUE
    rb_str_to_f(VALUE str)
    {

  • return DOUBLE2NUM(rb_str_to_dbl(str, Qfalse));
  • return DBL2NUM(rb_str_to_dbl(str, Qfalse));
    }

Index: pack.c

— pack.c (revision 19065)
+++ pack.c (working copy)
@@ -1642,7 +1642,7 @@
float tmp;
memcpy(&tmp, s, sizeof(float));
s += sizeof(float);

  • UNPACK_PUSH(DOUBLE2NUM((double)tmp));
  • UNPACK_PUSH(DBL2NUM((double)tmp));
    }
    PACK_ITEM_ADJUST();
    break;
    @@ -1656,7 +1656,7 @@
    memcpy(&tmp, s, sizeof(float));
    s += sizeof(float);
    tmp = VTOHF(tmp,ftmp);
  • UNPACK_PUSH(DOUBLE2NUM((double)tmp));
  • UNPACK_PUSH(DBL2NUM((double)tmp));
    }
    PACK_ITEM_ADJUST();
    break;
    @@ -1670,7 +1670,7 @@
    memcpy(&tmp, s, sizeof(double));
    s += sizeof(double);
    tmp = VTOHD(tmp,dtmp);
  • UNPACK_PUSH(DOUBLE2NUM(tmp));
  • UNPACK_PUSH(DBL2NUM(tmp));
    }
    PACK_ITEM_ADJUST();
    break;
    @@ -1682,7 +1682,7 @@
    double tmp;
    memcpy(&tmp, s, sizeof(double));
    s += sizeof(double);
  • UNPACK_PUSH(DOUBLE2NUM(tmp));
  • UNPACK_PUSH(DBL2NUM(tmp));
    }
    PACK_ITEM_ADJUST();
    break;
    @@ -1696,7 +1696,7 @@
    memcpy(&tmp, s, sizeof(float));
    s += sizeof(float);
    tmp = NTOHF(tmp,ftmp);
  • UNPACK_PUSH(DOUBLE2NUM((double)tmp));
  • UNPACK_PUSH(DBL2NUM((double)tmp));
    }
    PACK_ITEM_ADJUST();
    break;
    @@ -1710,7 +1710,7 @@
    memcpy(&tmp, s, sizeof(double));
    s += sizeof(double);
    tmp = NTOHD(tmp,dtmp);
  • UNPACK_PUSH(DOUBLE2NUM(tmp));
  • UNPACK_PUSH(DBL2NUM(tmp));
    }
    PACK_ITEM_ADJUST();
    break;
    Index: gc.c
    ===================================================================
    — gc.c (revision 19065)
    +++ gc.c (working copy)
    @@ -2695,14 +2695,14 @@

    for (i =0; i < objspace->profile.count; i++) {
    prof = rb_hash_new();

  •    rb_hash_aset(prof, ID2SYM(rb_intern("GC_TIME")), 
    

DOUBLE2NUM(objspace->profile.record[i].gc_time));

  •    rb_hash_aset(prof, ID2SYM(rb_intern("GC_INVOKE_TIME")), 
    

DOUBLE2NUM(objspace->profile.record[i].gc_invoke_time));

  •    rb_hash_aset(prof, ID2SYM(rb_intern("GC_TIME")), 
    

DBL2NUM(objspace->profile.record[i].gc_time));

  •    rb_hash_aset(prof, ID2SYM(rb_intern("GC_INVOKE_TIME")), 
    

DBL2NUM(objspace->profile.record[i].gc_invoke_time));
rb_hash_aset(prof, ID2SYM(rb_intern(“HEAP_USE_SIZE”)),
rb_uint2inum(objspace->profile.record[i].heap_use_size));
rb_hash_aset(prof, ID2SYM(rb_intern(“HEAP_TOTAL_SIZE”)),
rb_uint2inum(objspace->profile.record[i].heap_total_size));
rb_hash_aset(prof, ID2SYM(rb_intern(“HEAP_TOTAL_OBJECTS”)),
rb_uint2inum(objspace->profile.record[i].heap_total_objects));
#if GC_PROFILE_MORE_DETAIL

  •    rb_hash_aset(prof, ID2SYM(rb_intern("GC_MARK_TIME")), 
    

DOUBLE2NUM(objspace->profile.record[i].gc_mark_time));

  •    rb_hash_aset(prof, ID2SYM(rb_intern("GC_SWEEP_TIME")), 
    

DOUBLE2NUM(objspace->profile.record[i].gc_sweep_time));

  •    rb_hash_aset(prof, ID2SYM(rb_intern("GC_MARK_TIME")), 
    

DBL2NUM(objspace->profile.record[i].gc_mark_time));

  •    rb_hash_aset(prof, ID2SYM(rb_intern("GC_SWEEP_TIME")), 
    

DBL2NUM(objspace->profile.record[i].gc_sweep_time));
rb_hash_aset(prof, ID2SYM(rb_intern(“ALLOCATE_INCREASE”)),
rb_uint2inum(objspace->profile.record[i].allocate_increase));
rb_hash_aset(prof, ID2SYM(rb_intern(“ALLOCATE_LIMIT”)),
rb_uint2inum(objspace->profile.record[i].allocate_limit));
rb_hash_aset(prof, ID2SYM(rb_intern(“HEAP_USE_SLOTS”)),
rb_uint2inum(objspace->profile.record[i].heap_use_slots));
Index: parse.y

— parse.y (revision 19065)
+++ parse.y (working copy)
@@ -6919,7 +6919,7 @@
rb_warningS(“Float %s out of range”, tok());
errno = 0;
}

  •            set_yylval_literal(DOUBLE2NUM(d));
    
  •            set_yylval_literal(DBL2NUM(d));
    

    return tFLOAT;
    }
    set_yylval_literal(rb_cstr_to_inum(tok(), 10, Qfalse));
    Index: process.c
    ===================================================================
    — process.c (revision 19065)
    +++ process.c (working copy)
    @@ -5049,10 +5049,10 @@

    times(&buf);
    return rb_struct_new(rb_cProcessTms,

  •   utime = DOUBLE2NUM(buf.tms_utime / hertz),
    
  •   stime = DOUBLE2NUM(buf.tms_stime / hertz),
    
  •   cutime = DOUBLE2NUM(buf.tms_cutime / hertz),
    
  •   sctime = DOUBLE2NUM(buf.tms_cstime / hertz));
    
  •   utime = DBL2NUM(buf.tms_utime / hertz),
    
  •   stime = DBL2NUM(buf.tms_stime / hertz),
    
  •   cutime = DBL2NUM(buf.tms_cutime / hertz),
    
  •   sctime = DBL2NUM(buf.tms_cstime / hertz));
    

#else
rb_notimplement();
#endif
Index: numeric.c

— numeric.c (revision 19065)
+++ numeric.c (working copy)
@@ -562,7 +562,7 @@
static VALUE
flo_uminus(VALUE flt)
{

  • return DOUBLE2NUM(-RFLOAT_VALUE(flt));
  • return DBL2NUM(-RFLOAT_VALUE(flt));
    }

/*
@@ -578,11 +578,11 @@
{
switch (TYPE(y)) {
case T_FIXNUM:

  • return DOUBLE2NUM(RFLOAT_VALUE(x) + (double)FIX2LONG(y));
  • return DBL2NUM(RFLOAT_VALUE(x) + (double)FIX2LONG(y));
    case T_BIGNUM:
  • return DOUBLE2NUM(RFLOAT_VALUE(x) + rb_big2dbl(y));
  • return DBL2NUM(RFLOAT_VALUE(x) + rb_big2dbl(y));
    case T_FLOAT:
  • return DOUBLE2NUM(RFLOAT_VALUE(x) + RFLOAT_VALUE(y));
  • return DBL2NUM(RFLOAT_VALUE(x) + RFLOAT_VALUE(y));
    default:
    return rb_num_coerce_bin(x, y, ‘+’);
    }
    @@ -601,11 +601,11 @@
    {
    switch (TYPE(y)) {
    case T_FIXNUM:
  • return DOUBLE2NUM(RFLOAT_VALUE(x) - (double)FIX2LONG(y));
  • return DBL2NUM(RFLOAT_VALUE(x) - (double)FIX2LONG(y));
    case T_BIGNUM:
  • return DOUBLE2NUM(RFLOAT_VALUE(x) - rb_big2dbl(y));
  • return DBL2NUM(RFLOAT_VALUE(x) - rb_big2dbl(y));
    case T_FLOAT:
  • return DOUBLE2NUM(RFLOAT_VALUE(x) - RFLOAT_VALUE(y));
  • return DBL2NUM(RFLOAT_VALUE(x) - RFLOAT_VALUE(y));
    default:
    return rb_num_coerce_bin(x, y, ‘-’);
    }
    @@ -624,11 +624,11 @@
    {
    switch (TYPE(y)) {
    case T_FIXNUM:
  • return DOUBLE2NUM(RFLOAT_VALUE(x) * (double)FIX2LONG(y));
  • return DBL2NUM(RFLOAT_VALUE(x) * (double)FIX2LONG(y));
    case T_BIGNUM:
  • return DOUBLE2NUM(RFLOAT_VALUE(x) * rb_big2dbl(y));
  • return DBL2NUM(RFLOAT_VALUE(x) * rb_big2dbl(y));
    case T_FLOAT:
  • return DOUBLE2NUM(RFLOAT_VALUE(x) * RFLOAT_VALUE(y));
  • return DBL2NUM(RFLOAT_VALUE(x) * RFLOAT_VALUE(y));
    default:
    return rb_num_coerce_bin(x, y, ‘*’);
    }
    @@ -651,12 +651,12 @@
    switch (TYPE(y)) {
    case T_FIXNUM:
    f_y = FIX2LONG(y);
  • return DOUBLE2NUM(RFLOAT_VALUE(x) / (double)f_y);
  • return DBL2NUM(RFLOAT_VALUE(x) / (double)f_y);
    case T_BIGNUM:
    d = rb_big2dbl(y);
  • return DOUBLE2NUM(RFLOAT_VALUE(x) / d);
  • return DBL2NUM(RFLOAT_VALUE(x) / d);
    case T_FLOAT:
  • return DOUBLE2NUM(RFLOAT_VALUE(x) / RFLOAT_VALUE(y));
  • return DBL2NUM(RFLOAT_VALUE(x) / RFLOAT_VALUE(y));
    default:
    return rb_num_coerce_bin(x, y, ‘/’);
    }
    @@ -726,7 +726,7 @@
    return rb_num_coerce_bin(x, y, ‘%’);
    }
    flodivmod(RFLOAT_VALUE(x), fy, 0, &mod);
  • return DOUBLE2NUM(mod);
  • return DBL2NUM(mod);
    }

static VALUE
@@ -773,7 +773,7 @@
}
flodivmod(RFLOAT_VALUE(x), fy, &div, &mod);
a = dbl2ival(div);

  • b = DOUBLE2NUM(mod);
  • b = DBL2NUM(mod);
    return rb_assoc_new(a, b);
    }

@@ -790,11 +790,11 @@
{
switch (TYPE(y)) {
case T_FIXNUM:

  • return DOUBLE2NUM(pow(RFLOAT_VALUE(x), (double)FIX2LONG(y)));
  • return DBL2NUM(pow(RFLOAT_VALUE(x), (double)FIX2LONG(y)));
    case T_BIGNUM:
  • return DOUBLE2NUM(pow(RFLOAT_VALUE(x), rb_big2dbl(y)));
  • return DBL2NUM(pow(RFLOAT_VALUE(x), rb_big2dbl(y)));
    case T_FLOAT:
  • return DOUBLE2NUM(pow(RFLOAT_VALUE(x), RFLOAT_VALUE(y)));
  • return DBL2NUM(pow(RFLOAT_VALUE(x), RFLOAT_VALUE(y)));
    default:
    return rb_num_coerce_bin(x, y, rb_intern(“**”));
    }
    @@ -1130,7 +1130,7 @@
    flo_abs(VALUE flt)
    {
    double val = fabs(RFLOAT_VALUE(flt));
  • return DOUBLE2NUM(val);
  • return DBL2NUM(val);
    }

/*
@@ -1312,7 +1312,7 @@
else number /= f;
}

  • if (ndigits > 0) return DOUBLE2NUM(number);
  • if (ndigits > 0) return DBL2NUM(number);

    if (!FIXABLE(number)) {
    return rb_dbl2big(number);
    @@ -1501,7 +1501,7 @@
    if (err>0.5) err=0.5;
    n = floor(n + err) + 1;
    for (i=0; i<n; i++) {

  •  rb_yield(DOUBLE2NUM(i*unit+beg));
    
  •  rb_yield(DBL2NUM(i*unit+beg));
    
    }
    }
    else {
    @@ -2106,7 +2106,7 @@
    case T_BIGNUM:
    return rb_big_plus(y, x);
    case T_FLOAT:
  • return DOUBLE2NUM((double)FIX2LONG(x) + RFLOAT_VALUE(y));
  • return DBL2NUM((double)FIX2LONG(x) + RFLOAT_VALUE(y));
    default:
    return rb_num_coerce_bin(x, y, ‘+’);
    }
    @@ -2140,7 +2140,7 @@
    x = rb_int2big(FIX2LONG(x));
    return rb_big_minus(x, y);
    case T_FLOAT:
  • return DOUBLE2NUM((double)FIX2LONG(x) - RFLOAT_VALUE(y));
  • return DBL2NUM((double)FIX2LONG(x) - RFLOAT_VALUE(y));
    default:
    return rb_num_coerce_bin(x, y, ‘-’);
    }
    @@ -2199,7 +2199,7 @@
    case T_BIGNUM:
    return rb_big_mul(y, x);
    case T_FLOAT:
  • return DOUBLE2NUM((double)FIX2LONG(x) * RFLOAT_VALUE(y));
  • return DBL2NUM((double)FIX2LONG(x) * RFLOAT_VALUE(y));
    default:
    return rb_num_coerce_bin(x, y, ‘*’);
    }
    @@ -2248,13 +2248,13 @@
    fix_fdiv(VALUE x, VALUE y)
    {
    if (FIXNUM_P(y)) {
  • return DOUBLE2NUM((double)FIX2LONG(x) / (double)FIX2LONG(y));
  • return DBL2NUM((double)FIX2LONG(x) / (double)FIX2LONG(y));
    }
    switch (TYPE(y)) {
    case T_BIGNUM:
  • return DOUBLE2NUM((double)FIX2LONG(x) / rb_big2dbl(y));
  • return DBL2NUM((double)FIX2LONG(x) / rb_big2dbl(y));
    case T_FLOAT:
  • return DOUBLE2NUM((double)FIX2LONG(x) / RFLOAT_VALUE(y));
  • return DBL2NUM((double)FIX2LONG(x) / RFLOAT_VALUE(y));
    default:
    return rb_num_coerce_bin(x, y, rb_intern(“fdiv”));
    }
    @@ -2279,7 +2279,7 @@

    if (op == '/') {
    

    div = (double)FIX2LONG(x) / RFLOAT_VALUE(y);

  • return DOUBLE2NUM(div);
  • return DBL2NUM(div);
    }
    else {
    if (RFLOAT_VALUE(y) == 0) rb_num_zerodiv();
    @@ -2347,7 +2347,7 @@
    double mod;

    flodivmod((double)FIX2LONG(x), RFLOAT_VALUE(y), 0, &mod);

  •  return DOUBLE2NUM(mod);
    
  •  return DBL2NUM(mod);
    

    }
    default:
    return rb_num_coerce_bin(x, y, ‘%’);
    @@ -2381,7 +2381,7 @@

     flodivmod((double)FIX2LONG(x), RFLOAT_VALUE(y), &div, &mod);
     a = dbl2ival(div);
    
  •  b = DOUBLE2NUM(mod);
    
  •  b = DBL2NUM(mod);
     return rb_assoc_new(a, b);
    
    }
    default:
    @@ -2453,7 +2453,7 @@
    if (b == 1) return x;
    if (a == 0) {
    if (b > 0) return INT2FIX(0);
  •  return DOUBLE2NUM(1.0 / zero);
    
  •  return DBL2NUM(1.0 / zero);
    
    }
    if (a == 1) return INT2FIX(1);
    if (a == -1) {
    @@ -2479,12 +2479,12 @@
    x = rb_int2big(FIX2LONG(x));
    return rb_big_pow(x, y);
    case T_FLOAT:
  • if (RFLOAT_VALUE(y) == 0.0) return DOUBLE2NUM(1.0);
  • if (RFLOAT_VALUE(y) == 0.0) return DBL2NUM(1.0);
    if (a == 0) {
  •  return DOUBLE2NUM(RFLOAT_VALUE(y) < 0 ? (1.0 / zero) : 0.0);
    
  •  return DBL2NUM(RFLOAT_VALUE(y) < 0 ? (1.0 / zero) : 0.0);
    
    }
  • if (a == 1) return DOUBLE2NUM(1.0);
  • return DOUBLE2NUM(pow((double)a, RFLOAT_VALUE(y)));
  • if (a == 1) return DBL2NUM(1.0);

  • return DBL2NUM(pow((double)a, RFLOAT_VALUE(y)));
    default:
    return rb_num_coerce_bin(x, y, rb_intern(“**”));
    }
    @@ -2854,7 +2854,7 @@

    val = (double)FIX2LONG(num);

  • return DOUBLE2NUM(val);
  • return DBL2NUM(val);
    }

/*
@@ -3245,9 +3245,9 @@
rb_define_const(rb_cFloat, “MAX_EXP”, INT2FIX(DBL_MAX_EXP));
rb_define_const(rb_cFloat, “MIN_10_EXP”, INT2FIX(DBL_MIN_10_EXP));
rb_define_const(rb_cFloat, “MAX_10_EXP”, INT2FIX(DBL_MAX_10_EXP));

  • rb_define_const(rb_cFloat, “MIN”, DOUBLE2NUM(DBL_MIN));
  • rb_define_const(rb_cFloat, “MAX”, DOUBLE2NUM(DBL_MAX));
  • rb_define_const(rb_cFloat, “EPSILON”, DOUBLE2NUM(DBL_EPSILON));
  • rb_define_const(rb_cFloat, “MIN”, DBL2NUM(DBL_MIN));

  • rb_define_const(rb_cFloat, “MAX”, DBL2NUM(DBL_MAX));

  • rb_define_const(rb_cFloat, “EPSILON”, DBL2NUM(DBL_EPSILON));

    rb_define_method(rb_cFloat, “to_s”, flo_to_s, 0);
    rb_define_method(rb_cFloat, “coerce”, flo_coerce, 1);
    Index: bignum.c
    ===================================================================
    — bignum.c (revision 19065)
    +++ bignum.c (working copy)
    @@ -1237,7 +1237,7 @@
    static VALUE
    rb_big_to_f(VALUE x)
    {

  • return DOUBLE2NUM(rb_big2dbl(x));
  • return DBL2NUM(rb_big2dbl(x));
    }

/*
@@ -1499,7 +1499,7 @@
return bignorm(bigadd(x, y, 1));

   case T_FLOAT:
  • return DOUBLE2NUM(rb_big2dbl(x) + RFLOAT_VALUE(y));
  • return DBL2NUM(rb_big2dbl(x) + RFLOAT_VALUE(y));

    default:
    

    return rb_num_coerce_bin(x, y, ‘+’);
    @@ -1524,7 +1524,7 @@
    return bignorm(bigadd(x, y, 0));

    case T_FLOAT:
    
  • return DOUBLE2NUM(rb_big2dbl(x) - RFLOAT_VALUE(y));
  • return DBL2NUM(rb_big2dbl(x) - RFLOAT_VALUE(y));

    default:
    

    return rb_num_coerce_bin(x, y, ‘-’);
    @@ -1588,7 +1588,7 @@
    break;

    case T_FLOAT:
    
  • return DOUBLE2NUM(rb_big2dbl(x) * RFLOAT_VALUE(y));
  • return DBL2NUM(rb_big2dbl(x) * RFLOAT_VALUE(y));

    default:
    

    return rb_num_coerce_bin(x, y, ‘*’);
    @@ -1817,7 +1817,7 @@
    {
    double div = rb_big2dbl(x) / RFLOAT_VALUE(y);
    if (op == ‘/’) {

  • return DOUBLE2NUM(div);
  • return DBL2NUM(div);
    }
    else {
    return rb_dbl2big(div);
    @@ -2010,7 +2010,7 @@
    if (ey) y = big_shift(y, ey);
    bignum:
    bigdivrem(x, y, &z, 0);
  •  return DOUBLE2NUM(ldexp(big2dbl(z), ex - ey));
    
  •  return DBL2NUM(ldexp(big2dbl(z), ex - ey));
    
    }
    case T_FLOAT:
    if (isnan(RFLOAT_VALUE(y))) return y;
    @@ -2035,7 +2035,7 @@
    default:
    return rb_num_coerce_bin(x, y, rb_intern(“fdiv”));
    }
  • return DOUBLE2NUM(dx / dy);
  • return DBL2NUM(dx / dy);
    }

static VALUE
@@ -2148,7 +2148,7 @@
default:
return rb_num_coerce_bin(x, y, rb_intern(“**”));
}

  • return DOUBLE2NUM(pow(rb_big2dbl(x), d));
  • return DBL2NUM(pow(rb_big2dbl(x), d));
    }

static VALUE
Index: marshal.c

— marshal.c (revision 19065)
+++ marshal.c (working copy)
@@ -1306,7 +1306,7 @@
d = strtod(ptr, &e);
d = load_mantissa(d, e, RSTRING_LEN(str) - (e - ptr));
}

  •  v = DOUBLE2NUM(d);
    
  •  v = DBL2NUM(d);
     v = r_entry(v, arg);
           v = r_leave(v, arg);
    
    }
    Index: random.c
    ===================================================================
    — random.c (revision 19065)
    +++ random.c (working copy)
    @@ -505,7 +505,7 @@
    limit = (struct RBignum *)rb_big_minus((VALUE)limit,
    INT2FIX(1));
    if (FIXNUM_P((VALUE)limit)) {
    if (FIX2LONG((VALUE)limit) == -1)
  •                return DOUBLE2NUM(genrand_real(mt));
    
  •                return DBL2NUM(genrand_real(mt));
               return LONG2NUM(limited_rand(mt, 
    

FIX2LONG((VALUE)limit)));
}
return limited_big_rand(mt, limit);
@@ -522,7 +522,7 @@
}

 if (max == 0) {
  • return DOUBLE2NUM(genrand_real(mt));
  • return DBL2NUM(genrand_real(mt));
    }
    if (max < 0) max = -max;
    val = limited_rand(mt, max-1);

e$B$3$s$K$A$O!"$J$+$`$ie(B(e$B$&e(B)e$B$G$9!#e(B

In message “[ruby-dev:36166] Re: [ANN] Ruby 1.9.1e$B;EMME`7ke(B”
on Sep.05,2008 20:02:15, [email protected] wrote:

e$B<+J,$Oe(BREADME.EXTe$B$O%A%e!<%H%j%“%k$K=`$:$k$b$N$G!”$9$Y$F$Ne(BAPIe$B$r2r@b$9$k$H$$$&<q;]$,e(B
e$B85$+$i$J$$$N$@$H;W$C$F$^$7$?!#e(B

README.EXTe$B$,%A%e!<%H%j%“%k$K=`$:$kDxEY$NFbMF$K2a$.$J$$$N$OC1e(B
e$B$K%^%s%Q%o!<$NLdBj$G$”$j!"K\Mh$O;H$C$F$h$$e(BAPIe$B$OA4$F2r@b$5$l$ke(B
e$B$Y$-$@$H;W$$$^$9!#e(B

e$B$,!"$=$l$rE:IU$N%F%-%9%H%U%!%$%k$K=q$$$F$$$/$^$^$G$$$$$N$+e(B

e$B$I$&$+$O0l9M$NM>CO$"$j!#e(B

  • Ce$B%l%Y%k$Ne(BAPIe$B$Oe(Bruby-core/ruby-deve$B$G$N;vA0AjCL$J$7$KJQ99IT2De(B
    • include/ruby/*.he$B$K$“$k$9$Y$F$N9=B$BN!”%G!<%?7?!"JQ?t!“4X?t!”%^%/%me(B
      e$B$Oe(BCe$B%l%Y%ke(BAPIe$B$H8+$J$7$^$9!#e(B
    • e$B8x3+$7$?$/$J$$$b$N$Oe(Binclude/ruby/*.he$B$+$i0\F0$5$;$F$/$@$5$$!#e(B

e$B$H$$$&@k8@$O$=$b$=$b0UL#$r@.$5$J$$!We(B

e$B$H$J$k!"$H$$$&$3$H$G$h$m$7$$$N$G$7$g$&$+!#e(B

9e$B7ne(B25e$BF|0J9_!"e(B1.9e$B7ONsFb$G$O8x3+e(BAPIe$B$NJQ99$OG’$a$J$$!#e(B
*
e$B8x3+e(BAPIe$B$NDj5A$O8=;~E@$G$OB8:$7$J$$$N$G!"e(Binclude/rubye$B0J2<$Ke(B
e$BB8:
$9$k$b$N$OA4$F8x3+$5$l$F$$$k$b$N$H4GPv$7$F>e=R$N@)8B$re(B
e$B2]$9!#e(B

  • e$B8N$K!"JQ99$7$?$$$b$N$O:#$N$&$A$KJQ99$9$k$+1#JC$9$k$+$;$h!#e(B

e$B$H$$$&$N$,@k8@$N<q;]$@$H;W$$$^$9!#e(B
e$B<B:]$K%$%s%9%H!<%k$5$l$A$c$&0J>e$Oe(B(e$B;H$C$FM_$7$/$J$$$+$I$&$+$Ke(B
e$B4X$o$i$:e(B)e$B;H$o$l$A$c$&2DG=@-$,$"$k$o$1$G!“0BDjHG7ONsFb$G$N:#8ee(B
e$B$NJQ99$rG’$a$J$$$N$OEvA3$G$9$7!”$=$N$3$H$K5$$E$$$F$J$$?M$KE`e(B
e$B7kA0$KCm0U4-5/$rB%$9$N$b$^$?EvA3$N$3$H$G$7$g$&!#e(B

e$B$H$$$&$o$1$G!“:#2s$N@k8@$H!“e(Binclude/rubye$B$K$”$k$+$i%P%s%P%s;He(B
e$B$C$F$$$$$+$I$&$+!”$H$$$&$N$O$^$?JLLdBj!"$H$$$&M}2r$,@5$7$$$Ne(B
e$B$G$O$J$$$G$7$g$&$+!#e(B

e$B$J$!“:#$NOC$HA4A34X78$J$/!”>/$J$/$H$be(BRStringe$B$$h$Se(BRArraye$B$O8xe(B
e$B3+e(BAPIe$B$G$"$k$H;d$OM}2r$7$F$$$^$9!#e(B
e$B$H$$$&$N$O!"e(BREADME.EXE.jae$B$Ke(B

e$B9=B$BN$O!Ve(Bstruct
RXxxxxe$B!W$H$$$&L>A0$Ge(Bruby.he$B$GDj5A$5$l$F$$$^e(B
e$B$9!%Nc$($PJ8;zNs$O!Ve(Bstruct
RStringe$B!W$G$9!%<B:]$K;H$&2DG=@-$,e(B
e$B$"$k$N$OJ8;zNs$HG[Ns$/$i$$$@$H;W$$$^$9!%e(B

e$B$H=q$$$F$"$k$?$a$G$9!#e(B
e$B$^$?0lJ}$G!"e(B

Rubye$B$N9=B$BN$rD>@%"%/%;%9$9$k;~$K5$$r$D$1$J$1$l$P$J$i$J$$$3e(B
e$B$H$O!$G[Ns$dJ8;zNs$N9=B$BN$NCf?H$O;2>H$9$k$@$1$G!$D>@\JQ99$7e(B
e$B$J$$$3$H$G$9!%D>@\JQ99$7$?>l9g!$%*%V%8%'%/%H$NFbMF$N@09g@-$,e(B
e$B$H$l$J$/$J$C$F!$;W$o$L%P%0$N860x$K$J$j$^$9!%e(B

e$B$H$b$“$k$h$&$K!“e(Binclude/rubye$B$K$”$k$1$I;H$$J}$KCm0U4-5/$,I,MWe(B
e$B$J$b$N$K$D$$$F$O!”$=$s$J46$8$G$=$l$>$l@bL@$5$l$kI,MW$,$"$k$He(B
e$B$b;W$$$^$9!#e(B
e$BNc$($P!"e(B

include/ruby/onigiruma.h
rubye$B$,FbIt$G;HMQ$7$F$$$k@55,I=8=%(%s%8%s!V54<V!W$N%X%C%@!#e(B
e$B%f!<%6$,$3$N%X%C%@$rMxMQ$7$FD>@\e(Brubye$B%*%V%8%'%/%H$NFbIt$re(B
e$BA`:n$9$k$3$H$O$G$-$J$$!#e(B

e$B$H$+e(B(e$B$3$l$,@5$7$$$N$+$I$&$+$OCN$j$^$;$s$,e(B)e$B!#e(B

e$B$=$l$G$O!#e(B

Yuguie$B$G$9!#e(B

e$B$H$$$&$+!“%j%j!<%9%^%M!<%8%c$G$”$ke(Byuguie$B$5$s$,!"$I$N$h$&$J0U?^$r;}$C$Fe(B

  • include/ruby/*.he$B$K$“$k$9$Y$F$N9=B$BN!”%G!<%?7?!"JQ?t!“4X?t!”%^%/%me(B
    e$B$Oe(BCe$B%l%Y%ke(BAPIe$B$H8+$J$7$^$9!#e(B

e$B$H$$C$7$c$C$?$+$,5$$K$J$j$^$9!#<+J,$O!“%G!<%?9=B$$r1#JC$9$Y$-$@!”$H$$e(B
e$B$&<gD%$KFI$a$?e(B
e$B$N$G$9$,e(B(e$B$=$l$H$b!"%
%V%8%'%/%HKd$a9~$_$N;EMM$H$+$^$Ge(BAPIe$B$H@k8@$7$?$+$Ce(B
e$B$?e(B?)e$B!#e(B

e$B$&!<$s!“$”$o$h$/$P%G!<%?9=B$$r1#$7$F$7$^$$$?$$$H$$$&;W$$$O$+$9$+$K$“$C$?e(B
e$B$N$G$9$,!”$d$O$j%3%9%H$,3]$+$j$=$&$G$9$M!#e(B

e$B:GDc8B$N%i%$%s$H$$$&0UL#$G8@$($P!"e(B

  • rb_xxxe$B4X?t$N%W%m%H%?%$%W$rJQ99$9$k$Je(B

e$B8x3+$r0U?^$7$F$$$k%^%/%m$+$i%"%/%;%9$9$k9=B$BN%a%s%P!<$N%*%U%;%C%H$re(B
e$BJQ99$9$k$Je(B

e$B$G$9$+$M!#e(B
e$B$J$+$$ie(B(e$B$&e(B)e$B$5$s$K!V%3%s%Q%$%i$,<j85$K$"$k$H$O8B$i$J$$$N$G3HD%%i%$%V%i%je(B e$B8~$1$N%P%$%J%j8_49@-$O=EMW!W$H8@$o$l$F$=$j$cL$b$@$H;W$C$?$N$,H/C<$G$9$N$G!#e(B

On Tue, 2 Sep 2008 15:23:30 +0900
“Yugui (Yuki S.)” [email protected] wrote:

  • Ce$B%l%Y%k$Ne(BAPIe$B$Oe(Bruby-core/ruby-deve$B$G$N;vA0AjCL$J$7$KJQ99IT2De(B
    • include/ruby/*.he$B$K$“$k$9$Y$F$N9=B$BN!”%G!<%?7?!"JQ?t!“4X?t!”%^%/%me(B
      e$B$Oe(BCe$B%l%Y%ke(BAPIe$B$H8+$J$7$^$9!#e(B
    • e$B8x3+$7$?$/$J$$$b$N$Oe(Binclude/ruby/*.he$B$+$i0\F0$5$;$F$/$@$5$$!#e(B

e$B$7$F$_$k$H!"$3$l$O$A$g$C$HMpK=$9$.$?$+$b$7$l$J$$$N$G$9$1$l$I$b!#e(B
e$B2~$a$F!"e(B

  • ASTe$B$OHs8x3+$J$N$G$7$ge(B? node.he$B$r0\F0$5$;$F$bNI$$$G$9$+e(B?

  • include/ruby/.he$B$r8+D>$7$F$/$@$5$$!#e(B
    *
    e$B9=B$BNe(B(e$B;D$k$Oe(BRArraye$B$+$Je(B?)e$B$X$NKd$a9~$_$O:#$N$&$A$K$d$C$F$7$^$&$+!"$^e(B
    e$B$?$Oe(B2.0e$B$^$G1d$P$93P8g$r$7$F$/$@$5$$!#e(B
    *
    e$B1
    oh$K;H$o$l$=$&$JL>A0$N4X?t$,$"$C$?$i!“0\F0$5$;$k$+2~L>$9$k$+!”$^$?e(B
    e$B$Oe(BREADME.EXTe$B$K;H$&$J$H=q$$$F$/$@$5$$!#e(B

    • e$B8x3+$;$:$K:Q$^$;$i$l$k$b$N$O6KNO0\F0$9$k$h$&$K$7$F$/$@$5$$!#e(B

e$B$H$$$&$3$H$G$h$m$7$/$*4j$$$7$^$9!#e(B

e$B:XF#$G$9!#e(B

On Thu, 4 Sep 2008 19:47:43 +0900
“Yusuke ENDOH” [email protected] wrote:

private.h e$B$,$J$+$C$?$N$G$9$,!"e(Bstruct RString e$B$He(B RSTRING
e$B%^%/%m$NDj5A$@$1=q$$$?$b$N$G%3%s%Q%$%k$7$F$_$^$7$?!#e(B

e$B$4$a$s$J$5$$!"IU$1K:$l$^$7$?!#$$C$7$c$k$H$$j$N$b$N$G$9!#e(B

private.h:

#define RSTRING(obj) (R_CAST(RString)(obj))

struct RString {
struct RBasic basic;
union {
struct {
long len;
char *ptr;
union {
long capa;
VALUE shared;
} aux;
} heap;
char ary[RSTRING_EMBED_LEN_MAX + 1];
} as;
};

e$B$d$O$j!"4X?t$K$9$k$H%*!<%P!<%X%C%I$,H/@8$9$k$h$&$G$9!#e(B

e$B$“$l!”:GE,2=%*%W%7%g%sIU$1$F$^$9$+e(B?
e$B<j85$Ge(B-O2e$B$rIU$1$k$H!"0J2<$N$h$&$K$J$j$^$7$?!#e(B
e$B?tCM$O!"e(B5e$B2sB,$C$F0lHVB.$+$C$?$b$N$G$9!#e(B

e$B%Q%C%AA0e(B

$ time ./ruby-trunk -rstringio -e ’
s = StringIO.new(" " * 100)
i = 0
while i < 100000000
s.eof
i += 1
end’

real 0m15.810s
user 0m15.801s
sys 0m0.020s

e$B%Q%C%A8ee(B

$ time ./ruby-trunk -rstringio -e ’
s = StringIO.new(" " * 100)
i = 0
while i < 100000000
s.eof
i += 1
end’

real 0m15.781s
user 0m15.777s
sys 0m0.008s

e$B$H$$$&$3$H$G!“%$%s%i%$%s4X?tHG$NJ}$,$J$<$+B.$/$J$C$F$7$^$$$^$7$?!#e(B
e$B<+J,$K$OM}M3$O$h$/J,$+$j$^$;$s$,!”$H$K$+$/1F6A$,e(B(e$B>/$J$/$H$b<+J,$N4D6-$G$Oe(B)e$B8m:9HO0OFb$Ke(B
e$B$H$I$^$k!"$H$@$1$O8@$($=$&$G$9!#e(B

e$B3HD%%i%$%V%i%j$r0lEY$G$b:n$C$?$3$H$N$"$k?M4V$J$i$P!"e(BREADME.EXTe$B$,LVMeE*$J$b$N$Ge(B
e$B$J$$$3$H$O!"2P$r8+$k$h$jL@$i$+$G$7$g$&!#e(B

README.EXT e$B$r@0M}!&A}6/$7$F$$$/$N$,@5$7$$J}8~@-$@$H;W$$$^$9!#e(B

e$B<+J,$Oe(BREADME.EXTe$B$O%A%e!<%H%j%“%k$K=`$:$k$b$N$G!”$9$Y$F$Ne(BAPIe$B$r2r@b$9$k$H$$$&<q;]$,e(B
e$B85$+$i$J$$$N$@$H;W$C$F$^$7$?!#e(B

e$B$G$A$g$C$HJL$NOC$G$9$,!"8=>u$NOC$G$9$He(B

e$B!Ve(BREADME.EXTe$B$K5-:$5$l$F$$$k$b$N$,8x3+e(BAPIe$B$G$“$k!We(B
e$B”!V:#$O40A4$G$O$J$$!We(B
(e$B30It%7%s%%k$K$J$C$F$$$F$b5-:$5$l$F$$$J$$$b$N$,$?$/$5$se(B)
e$B"
!V:#$O8x3+e(BAPIe$B$,$I$l$@$+$h$/J,$+$i$J$$!We(B
e$B"*!V;EMM$re(Bfreezee$B$9$kBP>]e(B(API)e$B$,$h$/J,$+$C$F$J$$$N$G!“:#$Oe(Bfreezee$B$7$h$&$,$J$$!We(B
e$B”*e(B e$B!V"-e(B

On Tue, 2 Sep 2008 15:23:30 +0900
“Yugui (Yuki S.)” [email protected] wrote:

  • Ce$B%l%Y%k$Ne(BAPIe$B$Oe(Bruby-core/ruby-deve$B$G$N;vA0AjCL$J$7$KJQ99IT2De(B
    • include/ruby/*.he$B$K$“$k$9$Y$F$N9=B$BN!”%G!<%?7?!"JQ?t!“4X?t!”%^%/%me(B
      e$B$Oe(BCe$B%l%Y%ke(BAPIe$B$H8+$J$7$^$9!#e(B
    • e$B8x3+$7$?$/$J$$$b$N$Oe(Binclude/ruby/*.he$B$+$i0\F0$5$;$F$/$@$5$$!#e(B

e$B$H$$$&@k8@$O$=$b$=$b0UL#$r@.$5$J$$!We(B

e$B$H$J$k!"$H$$$&$3$H$G$h$m$7$$$N$G$7$g$&$+!#e(B

e$B$=$N$?$a$K$be(B README.EXT e$B$K=q$$$F$“$k$3$H$@$1$G$G$-$J$$$3$H$Ke(B
e$B5$$,$D$$$??M$O!”$=$N$?$S$Ke(B ML e$B$Ge(B API e$B$N8x3+$rMW5a$r$9$k$N$,e(B
e$B$$$$$H;W$$$^$9!#e(B

e$B$3$l$O$^$?$=$N$&$A!"<+J,$,7P83$7$?$b$N$rJL%a!<%k$G=P$7$F$_$^$9!#e(B

e$B!V%$%s%9%H!<%k$5$l$?%X%C%@%U%!%$%k!a8x3+$5$l$?e(BAPIe$B!W$H$$$&$4$/Ev$?$jA0$N;v$,!"e(B

e$B$=$l$C$FEv$?$jA0$J$s$G$7$g$&$+!#e(B

e$B$^$D$b$H$5$s$b0c$&$H$*$C$7$c$C$F$k$“$?$j!”$3$3$O<+J,$N8+<1$,69$+$C$?$@$1$J$s$@$He(B
e$B;W$$$^$9!#$9$_$^$;$s!#e(B

e$B8D?ME*$K$O!Ve(Bundocumented e$B$J5!G=$r;H$C$?$i$I$&$J$C$F$bJ86g$,e(B
e$B8@$($J$$!W$H$$$&J}$,Ev$?$jA0$@$H;W$C$F$$$^$9!#e(B

e$B<+J,$b$=$l$,Ev$?$jA0$G$"$C$FM_$7$$$H;W$$$^$9!#$7$+$78=>u$Ne(BRubye$B$K$9$0$=$l$rMW5a$9$k$N$Oe(B
e$BFq$7$$$H$b;W$$$^$9!#e(B

e$B$H$$$&$+!“%j%j!<%9%^%M!<%8%c$G$”$ke(Byuguie$B$5$s$,!"$I$N$h$&$J0U?^$r;}$C$Fe(B

  • include/ruby/*.he$B$K$“$k$9$Y$F$N9=B$BN!”%G!<%?7?!"JQ?t!“4X?t!”%^%/%me(B
    e$B$Oe(BCe$B%l%Y%ke(BAPIe$B$H8+$J$7$^$9!#e(B

e$B$H$$C$7$c$C$?$+$,5$$K$J$j$^$9!#<+J,$O!“%G!<%?9=B$$r1#JC$9$Y$-$@!”$H$$$&<gD%$KFI$a$?e(B
e$B$N$G$9$,e(B(e$B$=$l$H$b!"%
%V%8%'%/%HKd$a9~$_$N;EMM$H$+$^$Ge(BAPIe$B$H@k8@$7$?$+$C$?e(B?)e$B!#e(B

e$B:XF#$H?=$7$^$9!#e(B

On Fri, 5 Sep 2008 21:52:13 +0900
“U.Nakamura” [email protected] wrote:

README.EXTe$B$,%A%e!<%H%j%“%k$K=`$:$kDxEY$NFbMF$K2a$.$J$$$N$OC1e(B
e$B$K%^%s%Q%o!<$NLdBj$G$”$j!"K\Mh$O;H$C$F$h$$e(BAPIe$B$OA4$F2r@b$5$l$ke(B
e$B$Y$-$@$H;W$$$^$9!#e(B

e$B$,!"$=$l$rE:IU$N%F%-%9%H%U%!%$%k$K=q$$$F$$$/$^$^$G$$$$$N$+e(B

e$B$I$&$+$O0l9M$NM>CO$"$j!#e(B

e$B%3%a%s%HFb30$H$b$K!"<+J,$b$=$&;W$$$^$9!#e(B

e$B$H$$$&$o$1$G!“:#2s$N@k8@$H!“e(Binclude/rubye$B$K$”$k$+$i%P%s%P%s;He(B
e$B$C$F$$$$$+$I$&$+!”$H$$$&$N$O$^$?JLLdBj!"$H$$$&M}2r$,@5$7$$$Ne(B
e$B$G$O$J$$$G$7$g$&$+!#e(B

e$BA0!9$+$i5?Ld$J$N$G$9$,!“e(Binclude/rubye$B$K$”$C$F%P%s%P%s;H$&$Y$-$G$J$$4X?te(B(e$BEye(B)e$B$He(B
e$B$$$&$N$O!“<B:]$I$l$G!”$=$l$i$O$I$&$$$&B8:_$J$N$G$7$g$&$+!#e(B
e$BJ#?t$Ne(B.ce$B$G6&MQ$7$?$$$+$i!"<BAu$NET9g>e30It$K=P$F$$$k$,!“Bh;0<T$N%i%$%V%i%j$+$ie(B
e$B;H$o$l$k$3$H$rA[Dj$7$F$$$J$$!”$H$+$G$7$g$&$+!#e(B

APIe$B$H$5$l$k4X?t$NF0:n$r2r@O$7$F%I%-%e%a%s%H$rIU$1$k$N$O!“:n$C$?$4K?M0J30$G$b$G$-$^$9$,!“e(B
e$B!V$3$l$O;H$o$J$$$GM_$7$$!W$H$$$&0U;V$O!”$5$9$,$KK?M0J30$OC/$bJ,$+$i$J$$$H;W$$$^$9!#e(B
e$B$=$l$r;H$C$F3HD%%i%$%V%i%j$r=q$$$F$$$F!”!V$b$H$b$H;H$&$Y$-$G$J$+$C$?!W$H8@$o$l$F;EMM$,e(B
e$BJQ99$5$l$k!“$H$+$$$&;vBV$K$J$l$P!”$H$F$bHa$7$$$G$9!#e(B

e$B$J$!“:#$NOC$HA4A34X78$J$/!”>/$J$/$H$be(BRStringe$B$$h$Se(BRArraye$B$O8xe(B
e$B3+e(BAPIe$B$G$"$k$H;d$OM}2r$7$F$$$^$9!#e(B
e$B$H$$$&$N$O!"e(BREADME.EXE.jae$B$Ke(B

e$B9=B$BN$O!Ve(Bstruct RXxxxxe$B!W$H$$$&L>A0$Ge(Bruby.he$B$GDj5A$5$l$F$$$^e(B
e$B$9!%Nc$($PJ8;zNs$O!Ve(Bstruct RStringe$B!W$G$9!%<B:]$K;H$&2DG=@-$,e(B
e$B$"$k$N$OJ8;zNs$HG[Ns$/$i$$$@$H;W$$$^$9!%e(B

e$B$H=q$$$F$"$k$?$a$G$9!#e(B

e$B<+J,$O!“$3$3$Oe(Bobsoletee$B$J5-=R$G$”$k$H9M$($F$$$^$7$?!#$H$$$&$N$b!“e(BRSTRING_XXXe$B$H$$$&e(B
e$B%^%/%m$,B8:$9$kA0$+$i>e5-J8=q$OB8:$7!”$+$D$=$N;~Be$O9=B$BN$KD>@?($k$7$+%a%s%P$Ke(B
e$B%"%/%;%9$9$kJ}K!$,e(B(e$BI,MWe(B)e$B$J$+$C$?$?$a$G$9!#e(B

e$B:#$Oe(BRSTRING_LENe$BEy$N%^%/%m$G$7$+!“e(B(e$BKd$a9~$!&HsKd$a9~$%*%V%8%'%/%H$Xe(B)e$B0l4S$7$?J}K!$Ge(B
e$B%”%/%;%9$G$-$J$$$N$G!">/$J$/$H$b%^%/%m$,Ds6!$5$l$F$$$kItJ,$N%a%s%P$K4X$7$F$O!“e(B
e$BD>@?($k$Y$-$G$J$$$H;W$C$F$$$^$9$,!”$I$&$G$7$g$&$+!#e(B

e$BNc$($P!"e(B

include/ruby/onigiruma.h
rubye$B$,FbIt$G;HMQ$7$F$$$k@55,I=8=%(%s%8%s!V54<V!W$N%X%C%@!#e(B
e$B%f!<%6$,$3$N%X%C%@$rMxMQ$7$FD>@\e(Brubye$B%*%V%8%'%/%H$NFbIt$re(B
e$BA`:n$9$k$3$H$O$G$-$J$$!#e(B

e$B$H$+e(B(e$B$3$l$,@5$7$$$N$+$I$&$+$OCN$j$^$;$s$,e(B)e$B!#e(B

e$B$3$s$J46$8$G$I$3$+$K5-=R$7$F$“$l$P$H$F$b$”$j$,$?$$$G$9!#e(B
e$B8=>u!“!V8x3+$7$F$”$k!W!V$J$$!W$@$1$N4p=`$G$7$+8+J,$1$k$3$H$,$G$-$:!"$I$l$r;H$C$Fe(B
e$B0BA4$J$N$+$^$C$?$/J,$+$i$J$$$N$G!#e(B