From bf70582cf30ae6f715769c519f451411f5d2a577 Mon Sep 17 00:00:00 2001 From: matz Date: Wed, 23 Feb 2000 05:23:12 +0000 Subject: 2000-02-23 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@624 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 18 ++++++++++++++++++ MANIFEST | 1 - array.c | 5 ++++- eval.c | 16 ++++++++++++++++ ext/socket/extconf.rb | 4 +++- hash.c | 21 ++++++++++++++++++++- lib/Env.rb | 3 +-- lib/eregex.rb | 1 + lib/ftplib.rb | 2 +- lib/getopts.rb | 2 +- lib/importenv.rb | 2 +- object.c | 2 ++ re.c | 4 +++- regex.c | 3 ++- sample/fib.pl | 19 ++++++++++--------- st.c | 24 ++++++++++++++++++++++++ string.c | 20 +++++++++++++++++++- struct.c | 2 ++ version.h | 4 ++-- 19 files changed, 130 insertions(+), 23 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5d04f682b3..5e0c182012 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,21 @@ +Wed Feb 23 14:22:32 2000 Yukihiro Matsumoto + + * array.c (rb_ary_join): forgot to initialize a local variable + `taint'. + +Tue Feb 22 07:40:55 2000 Yukihiro Matsumoto + + * re.c (Init_Regexp): renamed to MatchData, old name MatchingData + remain as alias. + +Sat Feb 19 23:58:51 2000 Yukihiro Matsumoto + + * regex.c (re_match): pop_loop should not pop at forward jump. + +Fri Feb 18 17:15:40 2000 Yukihiro Matsumoto + + * eval.c (method_clone): method objects are now clonable. + Fri Feb 18 00:27:34 2000 Yukihiro Matsumoto * variable.c (rb_shared_variable_declare): shared variable (aka diff --git a/MANIFEST b/MANIFEST index 7793e60949..12371349b9 100644 --- a/MANIFEST +++ b/MANIFEST @@ -89,7 +89,6 @@ lib/Env.rb lib/README lib/base64.rb lib/cgi.rb -lib/cgi-lib.rb lib/complex.rb lib/date.rb lib/date2.rb diff --git a/array.c b/array.c index 7172baaa8d..56957e3aac 100644 --- a/array.c +++ b/array.c @@ -669,7 +669,7 @@ rb_ary_join(ary, sep) VALUE ary, sep; { long i; - int taint; + int taint = 0; VALUE result, tmp; if (RARRAY(ary)->len == 0) return rb_str_new(0, 0); @@ -823,6 +823,7 @@ static VALUE inspect_ary(ary) VALUE ary; { + int tainted = OBJ_TAINTED(ary); long i = 0; VALUE s, str; @@ -830,11 +831,13 @@ inspect_ary(ary) for (i=0; ilen; i++) { s = rb_inspect(RARRAY(ary)->ptr[i]); + tainted = OBJ_TAINTED(s); if (i > 0) rb_str_cat(str, ", ", 2); rb_str_cat(str, RSTRING(s)->ptr, RSTRING(s)->len); } rb_str_cat(str, "]", 1); + if (tainted) OBJ_TAINT(str); return str; } diff --git a/eval.c b/eval.c index b913680eb0..d7895453a7 100644 --- a/eval.c +++ b/eval.c @@ -5957,6 +5957,21 @@ rb_obj_method(obj, vid) return method; } +static VALUE +method_clone(self) + VALUE self; +{ + VALUE clone; + struct METHOD *orig, *data; + + Data_Get_Struct(self, struct METHOD, orig); + clone = Data_Make_Struct(rb_cMethod,struct METHOD,bm_mark,free,data); + CLONESETUP(clone, self); + *data = *orig; + + return clone; +} + static VALUE method_call(argc, argv, method) int argc; @@ -6094,6 +6109,7 @@ Init_Proc() rb_cMethod = rb_define_class("Method", rb_cObject); rb_undef_method(CLASS_OF(rb_cMethod), "new"); + rb_define_method(rb_cMethod, "clone", method_clone, 0); rb_define_method(rb_cMethod, "call", method_call, -1); rb_define_method(rb_cMethod, "[]", method_call, -1); rb_define_method(rb_cMethod, "arity", method_arity, 0); diff --git a/ext/socket/extconf.rb b/ext/socket/extconf.rb index b7aee1cc36..6a2937bb3f 100644 --- a/ext/socket/extconf.rb +++ b/ext/socket/extconf.rb @@ -244,7 +244,9 @@ main() } } - if (inet6 != 2 || inet4 != 2) + if (!(inet4 == 0 || inet4 == 2)) + goto bad; + if (!(inet6 == 0 || inet6 == 2)) goto bad; if (aitop) diff --git a/hash.c b/hash.c index ea42674ecb..bfef46b1ad 100644 --- a/hash.c +++ b/hash.c @@ -89,7 +89,23 @@ rb_any_hash(a) break; case T_STRING: +#if 0 hval = rb_str_hash(a); +#else + { + register const char *p = RSTRING(a)->ptr; + register int len = RSTRING(a)->len; + register unsigned int h = 0, g; + + while (len--) { + h = ( h << 4 ) + *p++; + if ( g = h & 0xF0000000 ) + h ^= g >> 24; + h &= ~g; + } + hval = h; + } +#endif break; default: @@ -648,9 +664,11 @@ inspect_i(key, value, str) } str2 = rb_inspect(key); rb_str_cat(str, RSTRING(str2)->ptr, RSTRING(str2)->len); + OBJ_INFECT(str, str2); rb_str_cat(str, "=>", 2); str2 = rb_inspect(value); rb_str_cat(str, RSTRING(str2)->ptr, RSTRING(str2)->len); + OBJ_INFECT(str, str2); return ST_CONTINUE; } @@ -664,7 +682,8 @@ inspect_hash(hash) str = rb_str_new2("{"); st_foreach(RHASH(hash)->tbl, inspect_i, str); rb_str_cat(str, "}", 1); - + + OBJ_INFECT(str, hash); return str; } diff --git a/lib/Env.rb b/lib/Env.rb index b3ee3bae8a..7101b84c91 100644 --- a/lib/Env.rb +++ b/lib/Env.rb @@ -1,5 +1,4 @@ -# Env.rb -- imports environment variables as global variables -# +# Env.rb -- imports environment variables as global variables, Perlish ;( # Usage: # # require 'Env' diff --git a/lib/eregex.rb b/lib/eregex.rb index 384d531e0f..cc7a7f6f46 100644 --- a/lib/eregex.rb +++ b/lib/eregex.rb @@ -1,3 +1,4 @@ +# this is just a proof of concept toy. class RegOr def initialize(re1, re2) diff --git a/lib/ftplib.rb b/lib/ftplib.rb index 0b90749274..4cb1b752d6 100644 --- a/lib/ftplib.rb +++ b/lib/ftplib.rb @@ -2,7 +2,7 @@ # ftplib.rb # -$stderr.puts 'Warning: ftplib.rb is obsolute: use net/ftp' +$stderr.puts 'Warning: ftplib.rb is obsolete: use net/ftp' require 'net/ftp' diff --git a/lib/getopts.rb b/lib/getopts.rb index 5b9562d5b2..b513f89f31 100644 --- a/lib/getopts.rb +++ b/lib/getopts.rb @@ -6,8 +6,8 @@ # by Yasuo OHBA(SHL Japan Inc. Technology Dept.) # # -- +# this is obsolete; use getoptlong # -# # $RCS_ID=%q$Header$ diff --git a/lib/importenv.rb b/lib/importenv.rb index 10b289199c..fcf306a9ab 100644 --- a/lib/importenv.rb +++ b/lib/importenv.rb @@ -1,4 +1,4 @@ -# importenv.rb -- imports environment variables as global variables +# importenv.rb -- imports environment variables as global variables, Perlish ;( # # Usage: # diff --git a/object.c b/object.c index 572c7406f7..13d3db87ef 100644 --- a/object.c +++ b/object.c @@ -168,6 +168,7 @@ inspect_i(id, value, str) rb_str_cat(str, "=", 1); str2 = rb_inspect(value); rb_str_cat(str, RSTRING(str2)->ptr, RSTRING(str2)->len); + OBJ_INFECT(str, str2); return ST_CONTINUE; } @@ -178,6 +179,7 @@ inspect_obj(obj, str) { st_foreach(ROBJECT(obj)->iv_tbl, inspect_i, str); rb_str_cat(str, ">", 1); + OBJ_INFECT(str, obj); return str; } diff --git a/re.c b/re.c index 2685eaca32..72fae4728d 100644 --- a/re.c +++ b/re.c @@ -268,6 +268,7 @@ rb_reg_desc(s, len, re) } } } + OBJ_INFECT(str, re); return str; } @@ -1298,7 +1299,8 @@ Init_Regexp() rb_global_variable(®_cache); - rb_cMatch = rb_define_class("MatchingData", rb_cObject); + rb_cMatch = rb_define_class("MatchData", rb_cObject); + rb_define_global_const("MatchingData", rb_cMatch); rb_undef_method(CLASS_OF(rb_cMatch), "new"); rb_define_method(rb_cMatch, "clone", match_clone, 0); diff --git a/regex.c b/regex.c index 0ee2b066d3..60e23e038d 100644 --- a/regex.c +++ b/regex.c @@ -4194,9 +4194,10 @@ re_match(bufp, string_arg, size, pos, regs) case jump: p1++; EXTRACT_NUMBER_AND_INCR (mcnt, p1); + + if (mcnt >= 0) break; /* should be backward jump */ p1 += mcnt; - if (p1 >= pend) break; if (( is_a_jump_n && (enum regexpcode)*p1 == succeed_n) || (!is_a_jump_n && (enum regexpcode)*p1 == on_failure_jump)) { if (failed_paren) { diff --git a/sample/fib.pl b/sample/fib.pl index c5593764aa..945a4929a7 100644 --- a/sample/fib.pl +++ b/sample/fib.pl @@ -1,10 +1,11 @@ - sub fib { - local($n)=@_; - if( $n<2 ){ - return $n; - } { - return &fib($n-2)+&fib($n-1) - } - } +sub fib { + my($n)=@_; + if ($n<2) { + return $n; + } + else { + return fib($n-2)+fib($n-1); + } +} - print &fib(20), "\n"; +print fib(20), "\n"; diff --git a/st.c b/st.c index 08651d05c2..9789cc7cb2 100644 --- a/st.c +++ b/st.c @@ -111,6 +111,7 @@ new_size(size) { int i, newsize; +#if 0 for (i = 0, newsize = MINSIZE; i < sizeof(primes)/sizeof(primes[0]); i++, newsize <<= 1) @@ -119,6 +120,23 @@ new_size(size) } /* Ran out of polynomials */ return -1; /* should raise exception */ +#else + for (i=3; i<31; i++) { + if ((1< size) return 1<num_bins;\ ptr = (table)->bins[bin_pos];\ if (PTR_NOT_EQUAL(table, ptr, hash_val, key)) {\ + collision++;\ while (PTR_NOT_EQUAL(table, ptr->next, hash_val, key)) {\ ptr = ptr->next;\ }\ diff --git a/string.c b/string.c index e48a1ec53d..1040b7c405 100644 --- a/string.c +++ b/string.c @@ -421,6 +421,7 @@ rb_str_hash(str) register char *p = RSTRING(str)->ptr; register int key = 0; +#if 0 if (ruby_ignorecase) { while (len--) { key = key*65599 + toupper(*p); @@ -433,6 +434,20 @@ rb_str_hash(str) p++; } } +#else + if (ruby_ignorecase) { + while (len--) { + key = key*33 + toupper(*p); + p++; + } + } + else { + while (len--) { + key = key*33 + *p++; + } + } + key = key + (key>>5); +#endif return key; } @@ -1354,6 +1369,7 @@ rb_str_inspect(str) char buf[STRMAX]; char *p, *pend; char *b; + VALUE inspect; p = RSTRING(str)->ptr; pend = p + RSTRING(str)->len; b = buf; @@ -1430,7 +1446,9 @@ rb_str_inspect(str) } } *b++ = '"'; - return rb_str_new(buf, b - buf); + inspect = rb_str_new(buf, b - buf); + OBJ_INFECT(inspect, str); + return inspect; } static VALUE diff --git a/struct.c b/struct.c index 2fd7690039..d345a19d9a 100644 --- a/struct.c +++ b/struct.c @@ -376,8 +376,10 @@ inspect_struct(s) rb_str_cat(str, "=", 1); str2 = rb_inspect(RSTRUCT(s)->ptr[i]); rb_str_cat(str, RSTRING(str2)->ptr, RSTRING(str2)->len); + OBJ_INFECT(str, str2); } rb_str_cat(str, ">", 1); + OBJ_INFECT(str, s); return str; } diff --git a/version.h b/version.h index f06993d2af..4dcdb685b3 100644 --- a/version.h +++ b/version.h @@ -1,4 +1,4 @@ #define RUBY_VERSION "1.5.2" -#define RUBY_RELEASE_DATE "2000-02-18" +#define RUBY_RELEASE_DATE "2000-02-23" #define RUBY_VERSION_CODE 152 -#define RUBY_RELEASE_CODE 20000218 +#define RUBY_RELEASE_CODE 20000223 -- cgit v1.2.3