1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@876 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
matz 2000-08-07 05:05:04 +00:00
parent 14fe04bdac
commit c67251edb4
23 changed files with 244 additions and 83 deletions

View file

@ -1,3 +1,7 @@
Mon Aug 7 13:59:12 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
* regex.c (re_match): check for stack depth was needed.
Sat Aug 5 16:43:43 2000 WATANABE Hirofumi <eban@os.rim.or.jp> Sat Aug 5 16:43:43 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
* djgpp/*: convert DOS line endings to UNIX style. * djgpp/*: convert DOS line endings to UNIX style.
@ -8,6 +12,26 @@ Sat Aug 5 16:43:43 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
* lib/ftools.rb (move): typo. not `tpath', but `to'. * lib/ftools.rb (move): typo. not `tpath', but `to'.
Fri Aug 4 23:26:48 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
* eval.c (proc_call): gives warning if a block is supplied.
* eval.c (rb_eval): no warning for discarding if an alias for the
method is already made.
Fri Aug 4 16:32:29 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
* array.c (rb_ary_reject_bang): returns nil if no element removed.
* hash.c (rb_hash_reject_bang): returns nil if no element removed.
Thu Aug 3 19:44:26 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
* eval.c (rb_thread_fd_writable): should return integer value.
* array.c (rb_ary_assoc): search array element whose length is
longer than 0 (not 1).
Wed Aug 2 18:27:47 2000 Yukihiro Matsumoto <matz@netlab.co.jp> Wed Aug 2 18:27:47 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
* eval.c (rb_thread_wait_fd): prohibit thread context switch * eval.c (rb_thread_wait_fd): prohibit thread context switch

15
array.c
View file

@ -1121,7 +1121,7 @@ rb_ary_slice_bang(argc, argv, ary)
} }
static VALUE static VALUE
rb_ary_delete_if(ary) rb_ary_reject_bang(ary)
VALUE ary; VALUE ary;
{ {
long i1, i2; long i1, i2;
@ -1134,11 +1134,20 @@ rb_ary_delete_if(ary)
} }
i2++; i2++;
} }
if (RARRAY(ary)->len == i2) return Qnil;
RARRAY(ary)->len = i2; RARRAY(ary)->len = i2;
return ary; return ary;
} }
static VALUE
rb_ary_delete_if(ary)
VALUE ary;
{
rb_ary_reject_bang(ary);
return ary;
}
static VALUE static VALUE
rb_ary_replace_m(ary, ary2) rb_ary_replace_m(ary, ary2)
VALUE ary, ary2; VALUE ary, ary2;
@ -1274,7 +1283,7 @@ rb_ary_assoc(ary, key)
p = RARRAY(ary)->ptr; pend = p + RARRAY(ary)->len; p = RARRAY(ary)->ptr; pend = p + RARRAY(ary)->len;
while (p < pend) { while (p < pend) {
if (TYPE(*p) == T_ARRAY if (TYPE(*p) == T_ARRAY
&& RARRAY(*p)->len > 1 && RARRAY(*p)->len > 0
&& rb_equal(RARRAY(*p)->ptr[0], key)) && rb_equal(RARRAY(*p)->ptr[0], key))
return *p; return *p;
p++; p++;
@ -1626,7 +1635,7 @@ Init_Array()
rb_define_method(rb_cArray, "delete", rb_ary_delete, 1); rb_define_method(rb_cArray, "delete", rb_ary_delete, 1);
rb_define_method(rb_cArray, "delete_at", rb_ary_delete_at_m, 1); rb_define_method(rb_cArray, "delete_at", rb_ary_delete_at_m, 1);
rb_define_method(rb_cArray, "delete_if", rb_ary_delete_if, 0); rb_define_method(rb_cArray, "delete_if", rb_ary_delete_if, 0);
rb_define_method(rb_cArray, "reject!", rb_ary_delete_if, 0); rb_define_method(rb_cArray, "reject!", rb_ary_reject_bang, 0);
rb_define_method(rb_cArray, "replace", rb_ary_replace_m, 1); rb_define_method(rb_cArray, "replace", rb_ary_replace_m, 1);
rb_define_method(rb_cArray, "clear", rb_ary_clear, 0); rb_define_method(rb_cArray, "clear", rb_ary_clear, 0);
rb_define_method(rb_cArray, "fill", rb_ary_fill, -1); rb_define_method(rb_cArray, "fill", rb_ary_fill, -1);

View file

@ -223,7 +223,7 @@ AC_FUNC_MEMCMP
AC_REPLACE_FUNCS(dup2 memmove mkdir strcasecmp strncasecmp strerror strftime\ AC_REPLACE_FUNCS(dup2 memmove mkdir strcasecmp strncasecmp strerror strftime\
strchr strstr strtoul crypt flock vsnprintf\ strchr strstr strtoul crypt flock vsnprintf\
isinf isnan finite) isinf isnan finite)
AC_CHECK_FUNCS(fmod killpg drand48 random wait4 waitpid syscall getcwd\ AC_CHECK_FUNCS(fmod killpg drand48 random wait4 waitpid syscall getcwd chroot\
truncate chsize times utimes fcntl lockf setitimer pause\ truncate chsize times utimes fcntl lockf setitimer pause\
setruid seteuid setreuid setrgid setegid setregid\ setruid seteuid setreuid setrgid setegid setregid\
getpgrp setpgrp getpgid setpgid getgroups getpriority\ getpgrp setpgrp getpgid setpgid getgroups getpriority\
@ -861,6 +861,7 @@ esac
AC_SUBST(LIBRUBY_LDSHARED) AC_SUBST(LIBRUBY_LDSHARED)
AC_SUBST(LIBRUBY_DLDFLAGS) AC_SUBST(LIBRUBY_DLDFLAGS)
AC_SUBST(RUBY_INSTALL_NAME) AC_SUBST(RUBY_INSTALL_NAME)
AC_SUBST(RUBY_SO_NAME)
AC_SUBST(LIBRUBY_A) AC_SUBST(LIBRUBY_A)
AC_SUBST(LIBRUBY_SO) AC_SUBST(LIBRUBY_SO)
AC_SUBST(LIBRUBY_ALIASES) AC_SUBST(LIBRUBY_ALIASES)

View file

@ -14,19 +14,20 @@ else
endif endif
WPROGRAM = $(RUBYW_INSTALL_NAME)$(EXEEXT) WPROGRAM = $(RUBYW_INSTALL_NAME)$(EXEEXT)
RUBYDEF = $(RUBY_INSTALL_NAME).def RUBYDEF = $(RUBY_INSTALL_NAME).def
SOLIBS := $(RUBY_INSTALL_NAME).dll.res.o $(SOLIBS) RUBY_SO_NAME = $(LIBRUBY_SO:.dll=)
SOLIBS := $(RUBY_SO_NAME).res.o $(SOLIBS)
EXTOBJS += $(@:$(EXEEXT)=.res.o) EXTOBJS += $(@:$(EXEEXT)=.res.o)
$(LIBRUBY_SO): $(RUBYDEF) $(RUBY_INSTALL_NAME).dll.res.o $(LIBRUBY_SO): $(RUBYDEF) $(RUBY_SO_NAME).res.o
$(LIBRUBY): $(LIBRUBY_SO) $(LIBRUBY): $(LIBRUBY_SO)
%.res.o: %.rc %.res.o: %.rc
@WINDRES@ --include-dir . --include-dir $(<D) --include-dir $(srcdir)/win32 $< $@ @WINDRES@ --include-dir . --include-dir $(<D) --include-dir $(srcdir)/win32 $< $@
$(RUBY_INSTALL_NAME).rc $(RUBYW_INSTALL_NAME).rc $(RUBY_INSTALL_NAME).dll.rc: rbconfig.rb $(RUBY_INSTALL_NAME).rc $(RUBYW_INSTALL_NAME).rc $(RUBY_SO_NAME).rc: rbconfig.rb
@@MINIRUBY@ $(srcdir)/win32/resource.rb \ @@MINIRUBY@ $(srcdir)/win32/resource.rb \
-ruby_name=$(RUBY_INSTALL_NAME) -rubyw_name=$(RUBYW_INSTALL_NAME) \ -ruby_name=$(RUBY_INSTALL_NAME) -rubyw_name=$(RUBYW_INSTALL_NAME) \
-so_name=$(RUBY_INSTALL_NAME).dll \ -so_name=$(RUBY_SO_NAME) \
. $(icondirs) $(srcdir)/win32 . $(icondirs) $(srcdir)/win32
$(PROGRAM): $(RUBY_INSTALL_NAME).res.o $(PROGRAM): $(RUBY_INSTALL_NAME).res.o

2
dir.c
View file

@ -433,7 +433,7 @@ static VALUE
dir_s_chroot(dir, path) dir_s_chroot(dir, path)
VALUE dir, path; VALUE dir, path;
{ {
#if !defined(DJGPP) && !defined(NT) && !defined(__human68k__) && !defined(__BEOS__) && !defined(__EMX__) && !defined(riscos) #if defined(HAVE_CHROOT) && !defined(__CHECKER__)
rb_secure(2); rb_secure(2);
Check_SafeStr(path); Check_SafeStr(path);

77
djgpp/config.status Normal file
View file

@ -0,0 +1,77 @@
/^SHELL/s,/bin/sh,$(COMPSEC),
s%@srcdir@%.%g
s%@top_srcdir@%..%
s%@CFLAGS@%-O2%g
s%@CPPFLAGS@%%g
s%@CXXFLAGS@%%g
s%@LDFLAGS@%%g
s%@LIBS@%-lm %g
s%@exec_prefix@%${prefix}%g
s%@prefix@%/usr/local%g
s%@program_transform_name@%s,x,x,%g
s%@bindir@%${exec_prefix}/bin%g
s%@sbindir@%${exec_prefix}/sbin%g
s%@libexecdir@%${exec_prefix}/libexec%g
s%@datadir@%${prefix}/share%g
s%@sysconfdir@%${prefix}/etc%g
s%@sharedstatedir@%${prefix}/com%g
s%@localstatedir@%${prefix}/var%g
s%@libdir@%${exec_prefix}/lib%g
s%@includedir@%${prefix}/include%g
s%@oldincludedir@%/usr/include%g
s%@infodir@%${prefix}/info%g
s%@mandir@%${prefix}/man%g
s%@host@%i386-pc-msdosdjgpp%g
s%@host_alias@%i386-msdosdjgpp%g
s%@host_cpu@%i386%g
s%@host_vendor@%pc%g
s%@host_os@%msdosdjgpp%g
s%@CC@%gcc%g
s%@CPP@%gcc -E%g
s%@YACC@%bison -y%g
s%@RANLIB@%ranlib%g
s%@AR@%ar%g
s%@INSTALL_PROGRAM@%${INSTALL}%g
s%@INSTALL_DATA@%${INSTALL} -m 644%g
s%@SET_MAKE@%%g
s%@LIBOBJS@% crypt.o flock.o vsnprintf.o%g
s%@ALLOCA@%%g
s%@DEFAULT_KCODE@%%g
s%@EXEEXT@%.exe%g
s%@OBJEXT@%o%g
s%@XLDFLAGS@%%g
s%@DLDFLAGS@%%g
s%@STATIC@%%g
s%@CCDLFLAGS@%%g
s%@LDSHARED@%ld%g
s%@DLEXT@%o%g
s%@STRIP@%strip%g
s%@EXTSTATIC@%%g
s%@binsuffix@%.exe%g
s%@setup@%Setup.dj%g
s%@LIBRUBY@%libruby.a%g
s%@LIBRUBY_A@%libruby.a%g
s%@LIBRUBYARG@%libruby.a%g
s%@LIBRUBY_SO@%%g
s%@SOLIBS@%%g
s%@arch@%i386-msdosdjgpp%g
;s%/bin/rm%rm%
s%@DLDLIBS@%-lc%g
s%@PREP@%%
s%@RUBY_INSTALL_NAME@%ruby%g
s%@RUBY_SO_NAME@%%g
s%@arch@%i386-msdosdjgpp%g
s%@sitedir@%${prefix}/lib/ruby/site_ruby%g
s%@MINIRUBY@%./miniruby%
s%@archlib@%/usr/local/lib/ruby/i386-msdosdjgpp%
;s%|| true%%
;/\/dev\/null/ {
;s,/dev/null 2>&1, nul,
;s,2> /dev/null,,
;}
;/^config.status/ {
; N;N;N;N;N;d
;}
;s%y\.tab\.c%y_tab.c%
/^,THIS_IS_DUMMY_PATTERN_/i\
ac_given_srcdir=.

6
dln.c
View file

@ -14,6 +14,12 @@
#include "defines.h" #include "defines.h"
#include "dln.h" #include "dln.h"
#ifdef __CHECKER__
#undef HAVE_DLOPEN
#undef USE_DLN_A_OUT
#undef USE_DLN_DLOPEN
#endif
char *dln_argv0; char *dln_argv0;
void rb_loaderror(); void rb_loaderror();

18
eval.c
View file

@ -1516,6 +1516,7 @@ rb_alias(klass, name, def)
print_undef(klass, def); print_undef(klass, def);
} }
body = orig->nd_body; body = orig->nd_body;
orig->nd_cnt++;
if (nd_type(body) == NODE_FBODY) { /* was alias */ if (nd_type(body) == NODE_FBODY) { /* was alias */
def = body->nd_mid; def = body->nd_mid;
origin = body->nd_orig; origin = body->nd_orig;
@ -1793,7 +1794,7 @@ static VALUE
rb_obj_is_block(block) rb_obj_is_block(block)
VALUE block; VALUE block;
{ {
if (TYPE(block) == T_DATA && RDATA(block)->dfree == blk_free) { if (TYPE(block) == T_DATA && RDATA(block)->dfree == (RUBY_DATA_FUNC)blk_free) {
return Qtrue; return Qtrue;
} }
return Qfalse; return Qfalse;
@ -2792,7 +2793,7 @@ rb_eval(self, n)
frozen_class_p(ruby_class); frozen_class_p(ruby_class);
body = search_method(ruby_class, node->nd_mid, &origin); body = search_method(ruby_class, node->nd_mid, &origin);
if (body){ if (body){
if (RTEST(ruby_verbose) && ruby_class == origin) { if (RTEST(ruby_verbose) && ruby_class == origin && body->nd_cnt == 0) {
rb_warning("discarding old %s", rb_id2name(node->nd_mid)); rb_warning("discarding old %s", rb_id2name(node->nd_mid));
} }
rb_clear_cache_by_id(node->nd_mid); rb_clear_cache_by_id(node->nd_mid);
@ -5932,6 +5933,12 @@ proc_call(proc, args)
volatile int orphan; volatile int orphan;
volatile int safe = ruby_safe_level; volatile int safe = ruby_safe_level;
if (rb_block_given_p()) {
rb_warning("block for %s#%s is useless",
rb_class2name(CLASS_OF(proc)),
rb_id2name(ruby_frame->last_func));
}
Data_Get_Struct(proc, struct BLOCK, data); Data_Get_Struct(proc, struct BLOCK, data);
orphan = blk_orphan(data); orphan = blk_orphan(data);
@ -6601,7 +6608,7 @@ static rb_thread_t
rb_thread_check(data) rb_thread_check(data)
VALUE data; VALUE data;
{ {
if (TYPE(data) != T_DATA || RDATA(data)->dfree != thread_free) { if (TYPE(data) != T_DATA || RDATA(data)->dfree != (RUBY_DATA_FUNC)thread_free) {
rb_raise(rb_eTypeError, "wrong argument type %s (expected Thread)", rb_raise(rb_eTypeError, "wrong argument type %s (expected Thread)",
rb_class2name(CLASS_OF(data))); rb_class2name(CLASS_OF(data)));
} }
@ -7089,7 +7096,9 @@ rb_thread_wait_fd(fd)
int fd; int fd;
{ {
if (curr_thread == curr_thread->next) return; if (curr_thread == curr_thread->next) return;
#if 0
if (ruby_in_compile) return; if (ruby_in_compile) return;
#endif
curr_thread->status = THREAD_STOPPED; curr_thread->status = THREAD_STOPPED;
curr_thread->fd = fd; curr_thread->fd = fd;
@ -7101,7 +7110,7 @@ int
rb_thread_fd_writable(fd) rb_thread_fd_writable(fd)
int fd; int fd;
{ {
if (curr_thread == curr_thread->next) return; if (curr_thread == curr_thread->next) return Qtrue;
curr_thread->status = THREAD_STOPPED; curr_thread->status = THREAD_STOPPED;
FD_ZERO(&curr_thread->readfds); FD_ZERO(&curr_thread->readfds);
@ -7111,6 +7120,7 @@ rb_thread_fd_writable(fd)
curr_thread->fd = fd+1; curr_thread->fd = fd+1;
curr_thread->wait_for = WAIT_SELECT; curr_thread->wait_for = WAIT_SELECT;
rb_thread_schedule(); rb_thread_schedule();
return Qfalse;
} }
void void

6
file.c
View file

@ -1022,7 +1022,7 @@ rb_file_chown(obj, owner, group)
struct timeval rb_time_timeval(); struct timeval rb_time_timeval();
#ifdef HAVE_UTIMES #if defined(HAVE_UTIMES) && !defined(__CHECKER__)
static void static void
utime_internal(path, tvp) utime_internal(path, tvp)
@ -1504,7 +1504,7 @@ rb_file_truncate(obj, len)
# define LOCK_UN 8 # define LOCK_UN 8
# endif # endif
#if defined(EWOULDBLOCK) #if defined(EWOULDBLOCK) && 0
static int static int
rb_thread_flock(fd, op, fptr) rb_thread_flock(fd, op, fptr)
int fd, op; int fd, op;
@ -1535,6 +1535,7 @@ rb_file_flock(obj, operation)
VALUE obj; VALUE obj;
VALUE operation; VALUE operation;
{ {
#ifndef __CHECKER__
OpenFile *fptr; OpenFile *fptr;
rb_secure(2); rb_secure(2);
@ -1551,6 +1552,7 @@ rb_file_flock(obj, operation)
#endif #endif
rb_sys_fail(fptr->path); rb_sys_fail(fptr->path);
} }
#endif
return INT2FIX(0); return INT2FIX(0);
} }
#undef flock #undef flock

10
gc.c
View file

@ -278,15 +278,11 @@ rb_newobj()
{ {
VALUE obj; VALUE obj;
if (freelist) { if (!freelist) rb_gc();
retry:
obj = (VALUE)freelist; obj = (VALUE)freelist;
freelist = freelist->as.free.next; freelist = freelist->as.free.next;
return obj; return obj;
}
rb_gc();
goto retry;
} }
VALUE VALUE
@ -649,8 +645,6 @@ rb_gc_mark(ptr)
} }
} }
#define MIN_FREE_OBJ 512
static void obj_free _((VALUE)); static void obj_free _((VALUE));
static void static void

26
hash.c
View file

@ -456,7 +456,16 @@ rb_hash_delete_if(hash)
{ {
rb_hash_modify(hash); rb_hash_modify(hash);
rb_hash_foreach(hash, delete_if_i, 0); rb_hash_foreach(hash, delete_if_i, 0);
return hash;
}
VALUE
rb_hash_reject_bang(hash)
VALUE hash;
{
int n = RHASH(hash)->tbl->num_entries;
rb_hash_delete_if(hash);
if (n == RHASH(hash)->tbl->num_entries) return Qnil;
return hash; return hash;
} }
@ -1211,11 +1220,11 @@ env_each(hash)
} }
static VALUE static VALUE
env_delete_if() env_reject_bang()
{ {
volatile VALUE keys; volatile VALUE keys;
VALUE *ptr; VALUE *ptr;
int len; int len, del = 0;
rb_secure(4); rb_secure(4);
keys = env_keys(); keys = env_keys();
@ -1227,10 +1236,19 @@ env_delete_if()
if (!NIL_P(val)) { if (!NIL_P(val)) {
if (RTEST(rb_yield(rb_assoc_new(*ptr, val)))) { if (RTEST(rb_yield(rb_assoc_new(*ptr, val)))) {
env_delete(Qnil, *ptr); env_delete(Qnil, *ptr);
del++;
} }
} }
ptr++; ptr++;
} }
if (del == 0) return Qnil;
return envtbl;
}
static VALUE
env_delete_if()
{
env_reject_bang();
return envtbl; return envtbl;
} }
@ -1425,8 +1443,8 @@ Init_Hash()
rb_define_method(rb_cHash,"shift", rb_hash_shift, 0); rb_define_method(rb_cHash,"shift", rb_hash_shift, 0);
rb_define_method(rb_cHash,"delete", rb_hash_delete, 1); rb_define_method(rb_cHash,"delete", rb_hash_delete, 1);
rb_define_method(rb_cHash,"delete_if", rb_hash_delete_if, 0); rb_define_method(rb_cHash,"delete_if", rb_hash_delete_if, 0);
rb_define_method(rb_cHash,"reject!", rb_hash_delete_if, 0);
rb_define_method(rb_cHash,"reject", rb_hash_reject, 0); rb_define_method(rb_cHash,"reject", rb_hash_reject, 0);
rb_define_method(rb_cHash,"reject!", rb_hash_reject_bang, 0);
rb_define_method(rb_cHash,"clear", rb_hash_clear, 0); rb_define_method(rb_cHash,"clear", rb_hash_clear, 0);
rb_define_method(rb_cHash,"invert", rb_hash_invert, 0); rb_define_method(rb_cHash,"invert", rb_hash_invert, 0);
rb_define_method(rb_cHash,"update", rb_hash_update, 1); rb_define_method(rb_cHash,"update", rb_hash_update, 1);
@ -1454,8 +1472,8 @@ Init_Hash()
rb_define_singleton_method(envtbl,"each_value", env_each_value, 0); rb_define_singleton_method(envtbl,"each_value", env_each_value, 0);
rb_define_singleton_method(envtbl,"delete", env_delete_m, 1); rb_define_singleton_method(envtbl,"delete", env_delete_m, 1);
rb_define_singleton_method(envtbl,"delete_if", env_delete_if, 0); rb_define_singleton_method(envtbl,"delete_if", env_delete_if, 0);
rb_define_singleton_method(envtbl,"reject!", env_delete_if, 0);
rb_define_singleton_method(envtbl,"reject", env_reject, 0); rb_define_singleton_method(envtbl,"reject", env_reject, 0);
rb_define_singleton_method(envtbl,"reject!", env_reject_bang, 0);
rb_define_singleton_method(envtbl,"to_s", env_to_s, 0); rb_define_singleton_method(envtbl,"to_s", env_to_s, 0);
rb_define_singleton_method(envtbl,"rehash", env_none, 0); rb_define_singleton_method(envtbl,"rehash", env_none, 0);
rb_define_singleton_method(envtbl,"to_a", env_to_a, 0); rb_define_singleton_method(envtbl,"to_a", env_to_a, 0);

4
io.c
View file

@ -1450,8 +1450,9 @@ pipe_del_fptr(fptr)
} }
} }
#if defined (NT) || defined(DJGPP) || defined(__CYGWIN__) || defined(__human68k__)
static void static void
pipe_atexit() pipe_atexit _((void))
{ {
struct pipe_list *list = pipe_list; struct pipe_list *list = pipe_list;
struct pipe_list *tmp; struct pipe_list *tmp;
@ -1462,6 +1463,7 @@ pipe_atexit()
list = tmp; list = tmp;
} }
} }
#endif
static void static void
pipe_finalize(fptr) pipe_finalize(fptr)

View file

@ -125,12 +125,12 @@ class Complex < Numeric
def / (other) def / (other)
if other.kind_of?(Complex) if other.kind_of?(Complex)
self * other.conjugate / other.abs2 self*other.conjugate/other.abs2
elsif Complex.generic?(other) elsif Complex.generic?(other)
Complex(@real / other, @image / other) Complex(@real/other, @image/other)
else else
x , y = other.coerce(self) x, y = other.coerce(self)
x / y x/y
end end
end end
@ -171,8 +171,8 @@ class Complex < Numeric
r, theta = polar r, theta = polar
Complex.polar(r.power!(other), theta * other) Complex.polar(r.power!(other), theta * other)
else else
x , y = other.coerce(self) x, y = other.coerce(self)
x / y x/y
end end
end end

View file

@ -10,7 +10,7 @@ SCRIPT_LINES__ = {} unless defined? SCRIPT_LINES__
require 'tracer' require 'tracer'
class Tracer class Tracer
def Tracer.trace_func(*vars) def Tracer.trace_func(*vars)
Single.trace_func *vars Single.trace_func(*vars)
end end
end end
@ -216,7 +216,7 @@ class DEBUGGER__
@frames[0] = [binding, file, line, id] @frames[0] = [binding, file, line, id]
display_expressions(binding) display_expressions(binding)
while input = readline("(rdb:%d) "%thnum(), true) while input = readline("(rdb:%d) "%thnum(), true)
catch (:debug_error) do catch(:debug_error) do
if input == "" if input == ""
input = DEBUG_LAST_CMD[0] input = DEBUG_LAST_CMD[0]
stdout.print input, "\n" stdout.print input, "\n"

View file

@ -21,13 +21,13 @@ if $DEBUG
end end
def Thread.exclusive def Thread.exclusive
_old = Thread.critical
begin begin
Thread.critical = true Thread.critical = true
r = yield return yield
ensure ensure
Thread.critical = false Thread.critical = _old
end end
r
end end
class Mutex class Mutex

View file

@ -574,7 +574,7 @@ void
rb_syswait(pid) rb_syswait(pid)
int pid; int pid;
{ {
RETSIGTYPE (*hfunc)(), (*qfunc)(), (*ifunc)(); RETSIGTYPE (*hfunc)_((int)), (*qfunc)_((int)), (*ifunc)_((int));
int status; int status;
int i; int i;
@ -817,7 +817,7 @@ static VALUE
proc_getpgid(obj, pid) proc_getpgid(obj, pid)
VALUE obj, pid; VALUE obj, pid;
{ {
#ifdef HAVE_GETPGID #if defined(HAVE_GETPGID) && !defined(__CHECKER__)
int i; int i;
i = getpgid(NUM2INT(pid)); i = getpgid(NUM2INT(pid));

View file

@ -3964,7 +3964,7 @@ re_match(bufp, string_arg, size, pos, regs)
because didn't fail. Also remove the register information because didn't fail. Also remove the register information
put on by the on_failure_jump. */ put on by the on_failure_jump. */
case finalize_jump: case finalize_jump:
if (stackp[-2] == d) { if (stackp > stackb && stackp[-2] == d) {
p = stackp[-3]; p = stackp[-3];
POP_FAILURE_POINT(); POP_FAILURE_POINT();
continue; continue;
@ -3981,7 +3981,7 @@ re_match(bufp, string_arg, size, pos, regs)
case jump: case jump:
nofinalize: nofinalize:
EXTRACT_NUMBER_AND_INCR(mcnt, p); EXTRACT_NUMBER_AND_INCR(mcnt, p);
if (mcnt < 0 && stackp > stackb && stackp[-2] == d) /* avoid infinit loop */ if (mcnt < 0 && stackp > stackb && stackp[-2] == d) /* avoid infinite loop */
goto fail; goto fail;
p += mcnt; p += mcnt;
continue; continue;
@ -4072,7 +4072,7 @@ re_match(bufp, string_arg, size, pos, regs)
case finalize_push: case finalize_push:
POP_FAILURE_POINT(); POP_FAILURE_POINT();
EXTRACT_NUMBER_AND_INCR(mcnt, p); EXTRACT_NUMBER_AND_INCR(mcnt, p);
if (mcnt < 0 && stackp[-2] == d) /* avoid infinit loop */ if (mcnt < 0 && stackp > stackb && stackp[-2] == d) /* avoid infinite loop */
goto fail; goto fail;
PUSH_FAILURE_POINT(p + mcnt, d); PUSH_FAILURE_POINT(p + mcnt, d);
stackp[-1] = NON_GREEDY; stackp[-1] = NON_GREEDY;

View file

@ -282,7 +282,7 @@ rb_gc_mark_trap_list()
void void
posix_signal(signum, handler) posix_signal(signum, handler)
int signum; int signum;
RETSIGTYPE (*handler)(); RETSIGTYPE (*handler)_((int));
{ {
struct sigaction sigact; struct sigaction sigact;
@ -336,6 +336,7 @@ signal_exec(sig)
} }
} }
static RETSIGTYPE sighandle _((int));
static RETSIGTYPE static RETSIGTYPE
sighandle(sig) sighandle(sig)
int sig; int sig;
@ -360,6 +361,7 @@ sighandle(sig)
} }
#ifdef SIGBUS #ifdef SIGBUS
static RETSIGTYPE sigbus _((int));
static RETSIGTYPE static RETSIGTYPE
sigbus(sig) sigbus(sig)
int sig; int sig;
@ -369,6 +371,7 @@ sigbus(sig)
#endif #endif
#ifdef SIGSEGV #ifdef SIGSEGV
static RETSIGTYPE sigsegv _((int));
static RETSIGTYPE static RETSIGTYPE
sigsegv(sig) sigsegv(sig)
int sig; int sig;
@ -420,8 +423,10 @@ static sigset_t trap_last_mask;
static int trap_last_mask; static int trap_last_mask;
# endif # endif
static RETSIGTYPE sigexit _((int));
static RETSIGTYPE static RETSIGTYPE
sigexit() sigexit(sig)
int sig;
{ {
rb_exit(0); rb_exit(0);
} }
@ -430,7 +435,7 @@ static VALUE
trap(arg) trap(arg)
struct trap_arg *arg; struct trap_arg *arg;
{ {
RETSIGTYPE (*func)(); RETSIGTYPE (*func)_((int));
VALUE command, old; VALUE command, old;
int sig; int sig;
char *s; char *s;

View file

@ -97,7 +97,12 @@ rb_str_new4(orig)
VALUE orig; VALUE orig;
{ {
if (OBJ_FROZEN(orig)) return orig; if (OBJ_FROZEN(orig)) return orig;
if (RSTRING(orig)->orig && !FL_TEST(orig, STR_NO_ORIG)) { if (RSTRING(orig)->orig) {
if (FL_TEST(orig, STR_NO_ORIG)) {
orig = rb_str_new(RSTRING(orig)->ptr, RSTRING(orig)->len);
OBJ_FREEZE(orig);
return orig;
}
OBJ_FREEZE(RSTRING(orig)->orig); OBJ_FREEZE(RSTRING(orig)->orig);
return RSTRING(orig)->orig; return RSTRING(orig)->orig;
} }
@ -349,24 +354,32 @@ rb_str_substr(str, beg, len)
return str2; return str2;
} }
static int
str_independent(str)
VALUE str;
{
if (OBJ_FROZEN(str)) rb_error_frozen("string");
if (!OBJ_TAINTED(str) && rb_safe_level() >= 4)
rb_raise(rb_eSecurityError, "Insecure: can't modify string");
if (!RSTRING(str)->orig || FL_TEST(str, STR_NO_ORIG)) return 1;
if (TYPE(RSTRING(str)->orig) != T_STRING) rb_bug("non string str->orig");
RSTRING(str)->orig = 0;
return 0;
}
void void
rb_str_modify(str) rb_str_modify(str)
VALUE str; VALUE str;
{ {
char *ptr; char *ptr;
if (OBJ_FROZEN(str)) rb_error_frozen("string"); if (str_independent(str)) return;
if (!OBJ_TAINTED(str) && rb_safe_level() >= 4)
rb_raise(rb_eSecurityError, "Insecure: can't modify string");
if (!RSTRING(str)->orig || FL_TEST(str, STR_NO_ORIG)) return;
if (TYPE(RSTRING(str)->orig) != T_STRING) abort();
ptr = ALLOC_N(char, RSTRING(str)->len+1); ptr = ALLOC_N(char, RSTRING(str)->len+1);
if (RSTRING(str)->ptr) { if (RSTRING(str)->ptr) {
memcpy(ptr, RSTRING(str)->ptr, RSTRING(str)->len); memcpy(ptr, RSTRING(str)->ptr, RSTRING(str)->len);
} }
ptr[RSTRING(str)->len] = 0; ptr[RSTRING(str)->len] = 0;
RSTRING(str)->ptr = ptr; RSTRING(str)->ptr = ptr;
RSTRING(str)->orig = 0;
} }
VALUE VALUE
@ -1250,9 +1263,10 @@ str_gsub(argc, argv, str, bang)
} }
rb_backref_set(match); rb_backref_set(match);
if (bang) { if (bang) {
rb_str_modify(str); if (str_independent(str)) {
free(RSTRING(str)->ptr); free(RSTRING(str)->ptr);
} }
}
else { else {
NEWOBJ(dup, struct RString); NEWOBJ(dup, struct RString);
OBJSETUP(dup, rb_cString, T_STRING); OBJSETUP(dup, rb_cString, T_STRING);
@ -1325,13 +1339,12 @@ rb_f_sub(argc, argv)
int argc; int argc;
VALUE *argv; VALUE *argv;
{ {
VALUE str = uscore_get(); VALUE str = rb_str_dup(uscore_get());
VALUE dup = rb_str_dup(str);
if (NIL_P(rb_str_sub_bang(argc, argv, dup))) if (NIL_P(rb_str_sub_bang(argc, argv, str)))
return str;
rb_lastline_set(str);
return str; return str;
rb_lastline_set(dup);
return dup;
} }
static VALUE static VALUE
@ -1347,13 +1360,12 @@ rb_f_gsub(argc, argv)
int argc; int argc;
VALUE *argv; VALUE *argv;
{ {
VALUE str = uscore_get(); VALUE str = rb_str_dup(uscore_get());
VALUE dup = rb_str_dup(str);
if (NIL_P(rb_str_gsub_bang(argc, argv, dup))) if (NIL_P(rb_str_gsub_bang(argc, argv, str)))
return str;
rb_lastline_set(str);
return str; return str;
rb_lastline_set(dup);
return dup;
} }
static VALUE static VALUE

View file

@ -1,4 +1,4 @@
#define RUBY_VERSION "1.5.5" #define RUBY_VERSION "1.5.5"
#define RUBY_RELEASE_DATE "2000-08-05" #define RUBY_RELEASE_DATE "2000-08-07"
#define RUBY_VERSION_CODE 155 #define RUBY_VERSION_CODE 155
#define RUBY_RELEASE_CODE 20000805 #define RUBY_RELEASE_CODE 20000807

View file

@ -29,12 +29,12 @@ AUTOCONF = autoconf
prefix = /usr prefix = /usr
CFLAGS = -nologo -DNT=1 -Zi -O2b2x -G5 CFLAGS = -nologo -DNT=1 -MDd -Zi
CPPFLAGS = -I$(srcdir) -I$(srcdir)/missing CPPFLAGS = -I$(srcdir) -I$(srcdir)/missing
LDFLAGS = $(CFLAGS) -Fm LDFLAGS = $(CFLAGS) -Fm
XLDFLAGS = XLDFLAGS =
#EXTLIBS = #EXTLIBS =
LIBS = user32.lib advapi32.lib wsock32.lib $(EXTLIBS) LIBS = RubyCRTD.lib user32.lib advapi32.lib ws2_32.lib $(EXTLIBS)
MISSING = crypt.obj alloca.obj win32.obj isinf.obj isnan.obj MISSING = crypt.obj alloca.obj win32.obj isinf.obj isnan.obj
LDSHARED = LDSHARED =
DLDFLAGS = DLDFLAGS =

View file

@ -1,12 +1,12 @@
s%@SHELL@%%g s%@SHELL@%%g
s%@CFLAGS@%-nologo -DNT=1 -Zi -O2b2x -G5%g s%@CFLAGS@%-nologo -DNT=1 -MDd -Zi%g
s%@CPPFLAGS@%%g s%@CPPFLAGS@%%g
s%@CXXFLAGS@%%g s%@CXXFLAGS@%%g
s%@FFLAGS@%%g s%@FFLAGS@%%g
s%@DEFS@% s%@DEFS@%
-DUSE_THREAD -DSIZEOF_INT=4 -DSIZEOF_SHORT=2 -DSIZEOF_LONG=4 -DSIZEOF_VOIDP=4 -DSIZEOF_FLOAT=4 -DSIZEOF_DOUBLE=8 -DHAVE_PROTOTYPES=1 -DHAVE_STDARG_PROTOTYPES=1 -DHAVE_STDLIB_H=1 -DHAVE_LIMITS_H=1 -DHAVE_FCNTL_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ST_RDEV=1 -DGETGROUPS_T=int -DRETSIGTYPE=void -DHAVE_ALLOCA=1 -DHAVE_FMOD=1 -DHAVE_WAITPID=1 -DHAVE_GETCWD=1 -DHAVE_CHSIZE=1 -DHAVE_GETGROUPS=1 -DHAVE_GETLOGIN=1 -DRSHIFT=\(x,y\)\ \(\(x\)\>\>y\) -DFILE_COUNT=_cnt -DDLEXT=\".so\" -DDLEXT2=\".dll\" -DRUBY_PLATFORM=\"i586-mswin32\" %g -DUSE_THREAD -DSIZEOF_INT=4 -DSIZEOF_SHORT=2 -DSIZEOF_LONG=4 -DSIZEOF_VOIDP=4 -DSIZEOF_FLOAT=4 -DSIZEOF_DOUBLE=8 -DHAVE_PROTOTYPES=1 -DHAVE_STDARG_PROTOTYPES=1 -DHAVE_STDLIB_H=1 -DHAVE_LIMITS_H=1 -DHAVE_FCNTL_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ST_RDEV=1 -DGETGROUPS_T=int -DRETSIGTYPE=void -DHAVE_ALLOCA=1 -DHAVE_FMOD=1 -DHAVE_WAITPID=1 -DHAVE_GETCWD=1 -DHAVE_CHSIZE=1 -DHAVE_GETGROUPS=1 -DHAVE_GETLOGIN=1 -DRSHIFT=\(x,y\)\ \(\(x\)\>\>y\) -DFILE_COUNT=_cnt -DDLEXT=\".so\" -DDLEXT2=\".dll\" -DRUBY_PLATFORM=\"i586-mswin32\" %g
s%@LDFLAGS@%-nologo -Ox%g s%@LDFLAGS@%-nologo -MDd -Zi%g
s%@LIBS@%user32.lib advapi32.lib wsock32.lib%g s%@LIBS@%RubyCRTD.lib user32.lib advapi32.lib ws2_32.lib%g
s%@exec_prefix@%${prefix}%g s%@exec_prefix@%${prefix}%g
s%@prefix@%%g s%@prefix@%%g
s%@program_transform_name@%s,x,x,%g s%@program_transform_name@%s,x,x,%g
@ -40,7 +40,7 @@ s%@DEFAULT_KCODE@%%g
s%@EXEEXT@%.exe%g s%@EXEEXT@%.exe%g
s%@OBJEXT@%obj%g s%@OBJEXT@%obj%g
s%@XLDFLAGS@%%g s%@XLDFLAGS@%%g
s%@DLDFLAGS@%%g s%@DLDFLAGS@%-MDd -Zi%g
s%@STATIC@%%g s%@STATIC@%%g
s%@CCDLFLAGS@%-DIMPORT%g s%@CCDLFLAGS@%-DIMPORT%g
s%@LDSHARED@%cl -LD%g s%@LDSHARED@%cl -LD%g
@ -59,10 +59,10 @@ s%@LIBRUBY_ALIASES@%%g
s%@LIBRUBY@%$(RUBY_SO_NAME).lib%g s%@LIBRUBY@%$(RUBY_SO_NAME).lib%g
s%@LIBRUBYARG@%$(topdir)/$(RUBY_SO_NAME).lib%g s%@LIBRUBYARG@%$(topdir)/$(RUBY_SO_NAME).lib%g
s%@SOLIBS@%%g s%@SOLIBS@%%g
s%@DLDLIBS@%%g s%@DLDLIBS@%RubyCRTD.lib%g
s%@arch@%i586-mswin32%g s%@arch@%i586-mswin32%g
s%@sitedir@%${prefix}/lib/ruby/site_ruby%g s%@sitedir@%${prefix}/lib/ruby/site_ruby%g
s%@configure_args@%--with-make-prog=nmake%g s%@configure_args@%--with-make-prog=nmake --with-tcllib=tcl83 --with-tklib=tk83%g
s%@configure_input@%$configure_input%g s%@configure_input@%$configure_input%g
s%@srcdir@%$srcdir%g s%@srcdir@%$srcdir%g
s%@top_srcdir@%$top_srcdir%g s%@top_srcdir@%$top_srcdir%g

View file

@ -15,11 +15,11 @@ all: Makefile
all:; @echo type `nmake' to make ruby for mswin32. all:; @echo type `nmake' to make ruby for mswin32.
Makefile: Makefile:
@echo> $@ ### makefile for ruby $(OS) ### @echo ### makefile for ruby $(OS) ###> $@
@echo>> $@ srcdir = $(srcdir:\=/) @echo srcdir = $(srcdir:\=/)>> $@
@echo>> $@ RUBY_INSTALL_NAME = ruby @echo RUBY_INSTALL_NAME = ruby>> $@
@echo>> $@ RUBY_SO_NAME = $$(RUBY_INSTALL_NAME).$(OS) @echo RUBY_SO_NAME = $$(RUBY_INSTALL_NAME).$(OS)>> $@
@echo>> $@ !INCLUDE $$(srcdir)/win32/Makefile.sub @echo !INCLUDE $$(srcdir)/win32/Makefile.sub>> $@
config.h config.status: $(srcdir)/win32/$$@.in config.h config.status: $(srcdir)/win32/$$@.in
@copy $(srcdir:/=\)\win32\$@.in $@ > nul @copy $(srcdir:/=\)\win32\$@.in $@ > nul