mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* string.c (rb_str_delete_bang): delete! should take at least 1
argument. * ruby.c (load_file): add rb_gc() after loading to avoid extraordinary memory growth. * dir.c (rb_glob_helper): "./foo" should match "foo", not "./foo". * eval.c (ev_const_get): retrieve Object's constant if no current class is available (e.g. defining singleton class for Fixnums). * eval.c (ev_const_defined): check Object's constant if no current class is available (e.g. defining singleton class for Fixnums). * time.c (time_timeval): negative time interval shoule not be allowed. * eval.c (proc_call): ignore block to `call' always, despite of being orphan or not. * eval.c (rb_yield_0): should check based on rb_block_given_p() and rb_f_block_given_p(). * configure.in (frame-address): --enable-frame-address to allow __builtin_frame_address() to be used. * eval.c (stack_length): use __builtin_frame_address() based on the macro USE_BUILTIN_FRAME_ADDRESS. * gc.c (rb_gc): ditto. * gc.c (Init_stack): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@1223 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
4fd84b6f2e
commit
b27393d6ca
7 changed files with 59 additions and 8 deletions
35
ChangeLog
35
ChangeLog
|
@ -1,11 +1,46 @@
|
||||||
|
Wed Feb 28 11:02:41 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||||
|
|
||||||
|
* string.c (rb_str_delete_bang): delete! should take at least 1
|
||||||
|
argument.
|
||||||
|
|
||||||
|
* ruby.c (load_file): add rb_gc() after loading to avoid
|
||||||
|
extraordinary memory growth.
|
||||||
|
|
||||||
|
Wed Feb 28 05:01:40 2001 Koji Arai <JCA02266@nifty.ne.jp>
|
||||||
|
|
||||||
|
* dir.c (rb_glob_helper): "./foo" should match "foo", not "./foo".
|
||||||
|
|
||||||
Tue Feb 27 16:38:15 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
|
Tue Feb 27 16:38:15 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||||
|
|
||||||
|
* eval.c (ev_const_get): retrieve Object's constant if no current
|
||||||
|
class is available (e.g. defining singleton class for Fixnums).
|
||||||
|
|
||||||
|
* eval.c (ev_const_defined): check Object's constant if no current
|
||||||
|
class is available (e.g. defining singleton class for Fixnums).
|
||||||
|
|
||||||
* time.c (time_timeval): negative time interval shoule not be
|
* time.c (time_timeval): negative time interval shoule not be
|
||||||
allowed.
|
allowed.
|
||||||
|
|
||||||
* eval.c (proc_call): ignore block to `call' always, despite of
|
* eval.c (proc_call): ignore block to `call' always, despite of
|
||||||
being orphan or not.
|
being orphan or not.
|
||||||
|
|
||||||
|
Wed Feb 27 10:16:32 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
|
||||||
|
|
||||||
|
* eval.c (rb_yield_0): should check based on rb_block_given_p()
|
||||||
|
and rb_f_block_given_p().
|
||||||
|
|
||||||
|
Tue Feb 27 04:13:45 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
|
||||||
|
|
||||||
|
* configure.in (frame-address): --enable-frame-address to allow
|
||||||
|
__builtin_frame_address() to be used.
|
||||||
|
|
||||||
|
* eval.c (stack_length): use __builtin_frame_address() based on
|
||||||
|
the macro USE_BUILTIN_FRAME_ADDRESS.
|
||||||
|
|
||||||
|
* gc.c (rb_gc): ditto.
|
||||||
|
|
||||||
|
* gc.c (Init_stack): ditto.
|
||||||
|
|
||||||
Mon Feb 26 16:20:27 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
|
Mon Feb 26 16:20:27 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||||
|
|
||||||
* ruby.c (proc_options): call ruby_show_version() just once.
|
* ruby.c (proc_options): call ruby_show_version() just once.
|
||||||
|
|
11
configure.in
11
configure.in
|
@ -74,6 +74,17 @@ AC_ARG_ENABLE(fat-binary,
|
||||||
echo "."
|
echo "."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
case $target_cpu in
|
||||||
|
i?86) frame_address=yes;;
|
||||||
|
*) frame_address=no;;
|
||||||
|
esac
|
||||||
|
AC_ARG_ENABLE(frame-address,
|
||||||
|
[--enable-frame-address use GCC __builtin_frame_address(). ],
|
||||||
|
[frame_address=$enableval])
|
||||||
|
if test $frame_address = yes; then
|
||||||
|
AC_DEFINE(USE_BUILTIN_FRAME_ADDRESS)
|
||||||
|
fi
|
||||||
|
|
||||||
AC_ARG_PROGRAM
|
AC_ARG_PROGRAM
|
||||||
|
|
||||||
dnl Checks for programs.
|
dnl Checks for programs.
|
||||||
|
|
2
dir.c
2
dir.c
|
@ -630,7 +630,7 @@ rb_glob_helper(path, flag, func, arg)
|
||||||
if (m && strcmp(magic, "**") == 0) {
|
if (m && strcmp(magic, "**") == 0) {
|
||||||
recursive = 1;
|
recursive = 1;
|
||||||
buf = ALLOC_N(char, strlen(base)+strlen(m)+3);
|
buf = ALLOC_N(char, strlen(base)+strlen(m)+3);
|
||||||
sprintf(buf, "%s%s%s", base, (*base)?"":".", m);
|
sprintf(buf, "%s%s", base, *base ? m : m+1);
|
||||||
rb_glob_helper(buf, flag, func, arg);
|
rb_glob_helper(buf, flag, func, arg);
|
||||||
free(buf);
|
free(buf);
|
||||||
}
|
}
|
||||||
|
|
11
eval.c
11
eval.c
|
@ -1431,8 +1431,8 @@ ev_const_defined(cref, id)
|
||||||
while (cbase && cbase->nd_clss != rb_cObject) {
|
while (cbase && cbase->nd_clss != rb_cObject) {
|
||||||
struct RClass *klass = RCLASS(cbase->nd_clss);
|
struct RClass *klass = RCLASS(cbase->nd_clss);
|
||||||
|
|
||||||
if (klass->iv_tbl &&
|
if (NIL_P(klass)) return rb_const_defined(rb_cObject, id);
|
||||||
st_lookup(klass->iv_tbl, id, 0)) {
|
if (klass->iv_tbl && st_lookup(klass->iv_tbl, id, 0)) {
|
||||||
return Qtrue;
|
return Qtrue;
|
||||||
}
|
}
|
||||||
cbase = cbase->nd_next;
|
cbase = cbase->nd_next;
|
||||||
|
@ -1451,6 +1451,7 @@ ev_const_get(cref, id)
|
||||||
while (cbase && cbase->nd_clss != rb_cObject) {
|
while (cbase && cbase->nd_clss != rb_cObject) {
|
||||||
struct RClass *klass = RCLASS(cbase->nd_clss);
|
struct RClass *klass = RCLASS(cbase->nd_clss);
|
||||||
|
|
||||||
|
if (NIL_P(klass)) return rb_const_get(rb_cObject, id);
|
||||||
if (klass->iv_tbl && st_lookup(klass->iv_tbl, id, &result)) {
|
if (klass->iv_tbl && st_lookup(klass->iv_tbl, id, &result)) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -2932,7 +2933,7 @@ rb_eval(self, n)
|
||||||
int noex;
|
int noex;
|
||||||
|
|
||||||
if (NIL_P(ruby_class)) {
|
if (NIL_P(ruby_class)) {
|
||||||
rb_raise(rb_eTypeError, "no class to add method");
|
rb_raise(rb_eTypeError, "no class/module to add method");
|
||||||
}
|
}
|
||||||
if (ruby_class == rb_cObject && node->nd_mid == init) {
|
if (ruby_class == rb_cObject && node->nd_mid == init) {
|
||||||
rb_warn("redefining Object#initialize may cause infinite loop");
|
rb_warn("redefining Object#initialize may cause infinite loop");
|
||||||
|
@ -3516,7 +3517,7 @@ rb_yield_0(val, self, klass, acheck)
|
||||||
int state;
|
int state;
|
||||||
static unsigned serial = 1;
|
static unsigned serial = 1;
|
||||||
|
|
||||||
if (!ruby_frame->iter || !ruby_block) {
|
if (!(rb_block_given_p() || rb_f_block_given_p()) || !ruby_block) {
|
||||||
rb_raise(rb_eLocalJumpError, "yield called out of block");
|
rb_raise(rb_eLocalJumpError, "yield called out of block");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4132,7 +4133,7 @@ stack_length(p)
|
||||||
alloca(0);
|
alloca(0);
|
||||||
# define STACK_END (&stack_end)
|
# define STACK_END (&stack_end)
|
||||||
#else
|
#else
|
||||||
# if defined(__GNUC__) && defined(__i386__)
|
# if defined(__GNUC__) && defined(USE_BUILTIN_FRAME_ADDRESS)
|
||||||
VALUE *stack_end = __builtin_frame_address(0);
|
VALUE *stack_end = __builtin_frame_address(0);
|
||||||
# else
|
# else
|
||||||
VALUE *stack_end = alloca(1);
|
VALUE *stack_end = alloca(1);
|
||||||
|
|
4
gc.c
4
gc.c
|
@ -949,7 +949,7 @@ rb_gc()
|
||||||
alloca(0);
|
alloca(0);
|
||||||
# define STACK_END (&stack_end)
|
# define STACK_END (&stack_end)
|
||||||
#else
|
#else
|
||||||
# if defined(__GNUC__) && defined(__i386__)
|
# if defined(__GNUC__) && defined(USE_BUILTIN_FRAME_ADDRESS)
|
||||||
VALUE *stack_end = __builtin_frame_address(0);
|
VALUE *stack_end = __builtin_frame_address(0);
|
||||||
# else
|
# else
|
||||||
VALUE *stack_end = alloca(1);
|
VALUE *stack_end = alloca(1);
|
||||||
|
@ -1029,7 +1029,7 @@ Init_stack(addr)
|
||||||
#if defined(__human68k__)
|
#if defined(__human68k__)
|
||||||
extern void *_SEND;
|
extern void *_SEND;
|
||||||
rb_gc_stack_start = _SEND;
|
rb_gc_stack_start = _SEND;
|
||||||
#elif defined(__GNUC__) && defined(__i386__)
|
#elif defined(__GNUC__) && defined(USE_BUILTIN_FRAME_ADDRESS)
|
||||||
rb_gc_stack_start = __builtin_frame_address(2);
|
rb_gc_stack_start = __builtin_frame_address(2);
|
||||||
#else
|
#else
|
||||||
VALUE start;
|
VALUE start;
|
||||||
|
|
1
ruby.c
1
ruby.c
|
@ -833,6 +833,7 @@ load_file(fname, script)
|
||||||
else if (f != rb_stdin) {
|
else if (f != rb_stdin) {
|
||||||
rb_io_close(f);
|
rb_io_close(f);
|
||||||
}
|
}
|
||||||
|
rb_gc();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
3
string.c
3
string.c
|
@ -1982,6 +1982,9 @@ rb_str_delete_bang(argc, argv, str)
|
||||||
int init = 1;
|
int init = 1;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
if (argc < 1) {
|
||||||
|
rb_raise(rb_eArgError, "wrong # of arguments");
|
||||||
|
}
|
||||||
for (i=0; i<argc; i++) {
|
for (i=0; i<argc; i++) {
|
||||||
VALUE s = argv[i];
|
VALUE s = argv[i];
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue