mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* file.c (rb_find_file): load must be done from an abolute path if
$SAFE >= 4. * re.c (rb_reg_s_quote): quote whitespaces for /x cases. * eval.c (rb_thread_cleanup): should not terminate main_thread by Fatal error. * regex.c (is_in_list): need to not exclude NUL and NEWLINE. * re.c (rb_reg_expr_str): wrong backslash escapement. * re.c (rb_reg_expr_str): do not escape embedded space characters. * eval.c (rb_thread_cleanup): current thread may be THREAD_STOPPED, for example when terminated from signal handler. * re.c (rb_reg_expr_str): should treat backslash specially in escaping. * bignum.c (rb_big_eq): check `y == x' if y is neither Fixnum, Bignum, nor Float. * pack.c (pack_unpack): should treat 'U' in character unit, not in byte unit. * marshal.c (w_uclass): should check based on rb_obj_class(), not CLASS_OF(). * io.c (io_write): check error if written data is less than specified size to detect EPIPE. * eval.c (assign): ruby_verbose should be surrounded by RTEST(). * object.c (rb_str2cstr): ditto. * parse.y (void_expr): ditto. * parse.y (void_stmts): ditto. * variable.c (rb_ivar_get): ditto. * variable.c (rb_cvar_set): ditto. * variable.c (rb_cvar_get): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_6@2419 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
11a1286fe1
commit
8145a071a9
14 changed files with 146 additions and 75 deletions
69
ChangeLog
69
ChangeLog
|
@ -1,7 +1,16 @@
|
|||
Mon Apr 29 18:46:42 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||
|
||||
* file.c (rb_find_file): load must be done from an abolute path if
|
||||
$SAFE >= 4.
|
||||
|
||||
Sun Apr 28 17:01:56 2002 WATANABE Hirofumi <eban@ruby-lang.org>
|
||||
|
||||
* win32/win32.c (insert): fix prototype for ANSI C.
|
||||
|
||||
Fri Apr 26 13:41:00 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||
|
||||
* re.c (rb_reg_s_quote): quote whitespaces for /x cases.
|
||||
|
||||
Wed Apr 24 14:21:41 2002 WATANABE Hirofumi <eban@ruby-lang.org>
|
||||
|
||||
* configure.in: set size of the initial stack from
|
||||
|
@ -22,10 +31,54 @@ Wed Apr 24 00:42:41 2002 NAKAMURA Usaku <usa@ruby-lang.org>
|
|||
* lib/mkmf.rb (create_makefile): add `{$(srcdir)}' when including depend
|
||||
file.
|
||||
|
||||
Mon Apr 22 09:31:30 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||
|
||||
* eval.c (rb_thread_cleanup): should not terminate main_thread by
|
||||
Fatal error.
|
||||
|
||||
* regex.c (is_in_list): need to not exclude NUL and NEWLINE.
|
||||
|
||||
Sat Apr 20 00:19:13 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||
|
||||
* re.c (rb_reg_expr_str): wrong backslash escapement.
|
||||
|
||||
* re.c (rb_reg_expr_str): do not escape embedded space
|
||||
characters.
|
||||
|
||||
Fri Apr 19 17:06:48 2002 WATANABE Hirofumi <eban@ruby-lang.org>
|
||||
|
||||
* ext/socket/extconf.rb: include <windows.h>, <winsock.h> on _WIN32.
|
||||
|
||||
Fri Apr 19 01:08:20 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||
|
||||
* eval.c (rb_thread_cleanup): current thread may be THREAD_STOPPED,
|
||||
for example when terminated from signal handler.
|
||||
|
||||
Wed Apr 17 16:53:33 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||
|
||||
* re.c (rb_reg_expr_str): should treat backslash specially in
|
||||
escaping.
|
||||
|
||||
Mon Apr 15 18:12:57 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||
|
||||
* bignum.c (rb_big_eq): check `y == x' if y is neither Fixnum,
|
||||
Bignum, nor Float.
|
||||
|
||||
Mon Apr 15 09:27:31 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||
|
||||
* pack.c (pack_unpack): should treat 'U' in character unit, not in
|
||||
byte unit.
|
||||
|
||||
Thu Apr 11 23:54:36 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||
|
||||
* marshal.c (w_uclass): should check based on rb_obj_class(), not
|
||||
CLASS_OF().
|
||||
|
||||
Thu Apr 11 20:01:44 2002 Masahiro Tomita <tommy@tmtm.org>
|
||||
|
||||
* io.c (io_write): check error if written data is less than
|
||||
specified size to detect EPIPE.
|
||||
|
||||
Thu Apr 11 18:40:38 2002 WATANABE Hirofumi <eban@ruby-lang.org>
|
||||
|
||||
* io.c (read_all): return "" if file.size == 0.
|
||||
|
@ -34,6 +87,22 @@ Thu Apr 11 18:40:38 2002 WATANABE Hirofumi <eban@ruby-lang.org>
|
|||
|
||||
* configure.in: ditto.
|
||||
|
||||
Thu Apr 11 07:57:48 2002 Michal Rokos <m.rokos@sh.cvut.cz>
|
||||
|
||||
* eval.c (assign): ruby_verbose should be surrounded by RTEST().
|
||||
|
||||
* object.c (rb_str2cstr): ditto.
|
||||
|
||||
* parse.y (void_expr): ditto.
|
||||
|
||||
* parse.y (void_stmts): ditto.
|
||||
|
||||
* variable.c (rb_ivar_get): ditto.
|
||||
|
||||
* variable.c (rb_cvar_set): ditto.
|
||||
|
||||
* variable.c (rb_cvar_get): ditto.
|
||||
|
||||
Thu Apr 11 01:55:52 2002 Wakou Aoyama <wakou@fsinet.or.jp>
|
||||
|
||||
* lib/cgi/session.rb: support for multipart form.
|
||||
|
|
2
bignum.c
2
bignum.c
|
@ -597,7 +597,7 @@ rb_big_eq(x, y)
|
|||
case T_FLOAT:
|
||||
return (rb_big2dbl(x) == RFLOAT(y)->value)?Qtrue:Qfalse;
|
||||
default:
|
||||
return Qfalse;
|
||||
return rb_equal(y, x);
|
||||
}
|
||||
if (RBIGNUM(x)->sign != RBIGNUM(y)->sign) return Qfalse;
|
||||
if (RBIGNUM(x)->len != RBIGNUM(y)->len) return Qfalse;
|
||||
|
|
6
eval.c
6
eval.c
|
@ -3819,7 +3819,7 @@ assign(self, lhs, val, check)
|
|||
break;
|
||||
|
||||
case NODE_CVDECL:
|
||||
if (ruby_verbose && FL_TEST(ruby_cbase, FL_SINGLETON)) {
|
||||
if (RTEST(ruby_verbose) && FL_TEST(ruby_cbase, FL_SINGLETON)) {
|
||||
rb_warn("declaring singleton class variable");
|
||||
}
|
||||
rb_cvar_declare(cvar_cbase(), lhs->nd_vid, val);
|
||||
|
@ -8533,13 +8533,15 @@ rb_thread_cleanup()
|
|||
}
|
||||
|
||||
FOREACH_THREAD(th) {
|
||||
if (th != curr_thread && th->status != THREAD_KILLED) {
|
||||
if (th->status != THREAD_KILLED) {
|
||||
rb_thread_ready(th);
|
||||
th->gid = 0;
|
||||
th->priority = 0;
|
||||
if (th != main_thread) {
|
||||
th->status = THREAD_TO_KILL;
|
||||
}
|
||||
}
|
||||
}
|
||||
END_FOREACH(th);
|
||||
}
|
||||
|
||||
|
|
4
file.c
4
file.c
|
@ -2241,6 +2241,10 @@ rb_find_file(path)
|
|||
if (file_load_ok(f)) return path;
|
||||
}
|
||||
|
||||
if (rb_safe_level() >= 4) {
|
||||
rb_raise(rb_eSecurityError, "loading from non-absolute path %s", f);
|
||||
}
|
||||
|
||||
if (rb_load_path) {
|
||||
int i;
|
||||
|
||||
|
|
4
io.c
4
io.c
|
@ -250,11 +250,11 @@ io_write(io, str)
|
|||
break;
|
||||
n = ptr - RSTRING(str)->ptr;
|
||||
}
|
||||
if (n == 0 && ferror(f))
|
||||
if (n != RSTRING(str)->len && ferror(f))
|
||||
rb_sys_fail(fptr->path);
|
||||
#else
|
||||
n = fwrite(RSTRING(str)->ptr, 1, RSTRING(str)->len, f);
|
||||
if (n == 0 && ferror(f)) {
|
||||
if (n != RSTRING(str)->len && ferror(f)) {
|
||||
rb_sys_fail(fptr->path);
|
||||
}
|
||||
#endif
|
||||
|
|
26
lib/cgi.rb
26
lib/cgi.rb
|
@ -1164,12 +1164,12 @@ convert string charset, and set language to "ja".
|
|||
|
||||
checkbox_group("name", ["foo"], ["bar", true], "baz")
|
||||
# <INPUT TYPE="checkbox" NAME="name" VALUE="foo">foo
|
||||
# <INPUT TYPE="checkbox" SELECTED NAME="name" VALUE="bar">bar
|
||||
# <INPUT TYPE="checkbox" CHECKED NAME="name" VALUE="bar">bar
|
||||
# <INPUT TYPE="checkbox" NAME="name" VALUE="baz">baz
|
||||
|
||||
checkbox_group("name", ["1", "Foo"], ["2", "Bar", true], "Baz")
|
||||
# <INPUT TYPE="checkbox" NAME="name" VALUE="1">Foo
|
||||
# <INPUT TYPE="checkbox" SELECTED NAME="name" VALUE="2">Bar
|
||||
# <INPUT TYPE="checkbox" CHECKED NAME="name" VALUE="2">Bar
|
||||
# <INPUT TYPE="checkbox" NAME="name" VALUE="Baz">Baz
|
||||
|
||||
checkbox_group({ "NAME" => "name",
|
||||
|
@ -1211,7 +1211,7 @@ convert string charset, and set language to "ja".
|
|||
# <INPUT TYPE="file" NAME="name" SIZE="40">
|
||||
|
||||
file_field("name", 40, 100)
|
||||
# <INPUT TYPE="file" NAME="name" SIZE="40", MAXLENGTH="100">
|
||||
# <INPUT TYPE="file" NAME="name" SIZE="40" MAXLENGTH="100">
|
||||
|
||||
file_field({ "NAME" => "name", "SIZE" => 40 })
|
||||
# <INPUT TYPE="file" NAME="name" SIZE="40">
|
||||
|
@ -1370,7 +1370,7 @@ The hash keys are case sensitive. Ask the samples.
|
|||
# <INPUT TYPE="image" SRC="url">
|
||||
|
||||
image_button("url", "name", "string")
|
||||
# <INPUT TYPE="image" SRC="url" NAME="name", ALT="string">
|
||||
# <INPUT TYPE="image" SRC="url" NAME="name" ALT="string">
|
||||
|
||||
image_button({ "SRC" => "url", "ATL" => "strng" })
|
||||
# <INPUT TYPE="image" SRC="url" ALT="string">
|
||||
|
@ -1391,10 +1391,10 @@ The hash keys are case sensitive. Ask the samples.
|
|||
=begin
|
||||
=== IMG ELEMENT
|
||||
img("src", "alt", 100, 50)
|
||||
# <IMG SRC="src" ALT="alt" WIDTH="100", HEIGHT="50">
|
||||
# <IMG SRC="src" ALT="alt" WIDTH="100" HEIGHT="50">
|
||||
|
||||
img({ "SRC" => "src", "ALT" => "alt", "WIDTH" => 100, "HEIGHT" => 50 })
|
||||
# <IMG SRC="src" ALT="alt" WIDTH="100", HEIGHT="50">
|
||||
# <IMG SRC="src" ALT="alt" WIDTH="100" HEIGHT="50">
|
||||
=end
|
||||
def img(src = "", alt = "", width = nil, height = nil)
|
||||
attributes = if src.kind_of?(String)
|
||||
|
@ -1448,7 +1448,7 @@ The hash keys are case sensitive. Ask the samples.
|
|||
# <INPUT TYPE="password" NAME="name" VALUE="value" SIZE="40">
|
||||
|
||||
password_field("password", "value", 80, 200)
|
||||
# <INPUT TYPE="password" NAME="name" VALUE="value", SIZE="80", MAXLENGTH="200">
|
||||
# <INPUT TYPE="password" NAME="name" VALUE="value" SIZE="80" MAXLENGTH="200">
|
||||
|
||||
password_field({ "NAME" => "name", "VALUE" => "value" })
|
||||
# <INPUT TYPE="password" NAME="name" VALUE="value">
|
||||
|
@ -1534,10 +1534,10 @@ The hash keys are case sensitive. Ask the samples.
|
|||
=begin
|
||||
=== RADIO_BUTTON
|
||||
radio_button("name", "value")
|
||||
# <INPUT TYPE="radio" NAME="name", VALUE="value">
|
||||
# <INPUT TYPE="radio" NAME="name" VALUE="value">
|
||||
|
||||
radio_button("name", "value", true)
|
||||
# <INPUT TYPE="radio" NAME="name", VALUE="value", CHECKED>
|
||||
# <INPUT TYPE="radio" NAME="name" VALUE="value" CHECKED>
|
||||
|
||||
radio_button({ "NAME" => "name", "VALUE" => "value", "ID" => "foo" })
|
||||
# <INPUT TYPE="radio" NAME="name" VALUE="value" ID="foo">
|
||||
|
@ -1563,12 +1563,12 @@ The hash keys are case sensitive. Ask the samples.
|
|||
|
||||
radio_group("name", ["foo"], ["bar", true], "baz")
|
||||
# <INPUT TYPE="radio" NAME="name" VALUE="foo">foo
|
||||
# <INPUT TYPE="radio" SELECTED NAME="name" VALUE="bar">bar
|
||||
# <INPUT TYPE="radio" CHECKED NAME="name" VALUE="bar">bar
|
||||
# <INPUT TYPE="radio" NAME="name" VALUE="baz">baz
|
||||
|
||||
radio_group("name", ["1", "Foo"], ["2", "Bar", true], "Baz")
|
||||
# <INPUT TYPE="radio" NAME="name" VALUE="1">Foo
|
||||
# <INPUT TYPE="radio" SELECTED NAME="name" VALUE="2">Bar
|
||||
# <INPUT TYPE="radio" CHECKED NAME="name" VALUE="2">Bar
|
||||
# <INPUT TYPE="radio" NAME="name" VALUE="Baz">Baz
|
||||
|
||||
radio_group({ "NAME" => "name",
|
||||
|
@ -1670,10 +1670,10 @@ The hash keys are case sensitive. Ask the samples.
|
|||
# <INPUT TYPE="text" NAME="name" VALUE="value" SIZE="40">
|
||||
|
||||
text_field("name", "value", 80)
|
||||
# <INPUT TYPE="text" NAME="name" VALUE="value", SIZE="80">
|
||||
# <INPUT TYPE="text" NAME="name" VALUE="value" SIZE="80">
|
||||
|
||||
text_field("name", "value", 80, 200)
|
||||
# <INPUT TYPE="text" NAME="name" VALUE="value", SIZE="80", MAXLENGTH="200">
|
||||
# <INPUT TYPE="text" NAME="name" VALUE="value" SIZE="80" MAXLENGTH="200">
|
||||
|
||||
text_field({ "NAME" => "name", "VALUE" => "value" })
|
||||
# <INPUT TYPE="text" NAME="name" VALUE="value">
|
||||
|
|
|
@ -246,7 +246,7 @@ w_uclass(obj, klass, arg)
|
|||
VALUE obj, klass;
|
||||
struct dump_arg *arg;
|
||||
{
|
||||
if (CLASS_OF(obj) != klass) {
|
||||
if (rb_obj_class(obj) != klass) {
|
||||
w_byte(TYPE_UCLASS, arg);
|
||||
w_unique(rb_class2name(CLASS_OF(obj)), arg);
|
||||
}
|
||||
|
|
2
object.c
2
object.c
|
@ -1026,7 +1026,7 @@ rb_str2cstr(str, len)
|
|||
str = rb_str_to_str(str);
|
||||
}
|
||||
if (len) *len = RSTRING(str)->len;
|
||||
else if (ruby_verbose && RSTRING(str)->len != strlen(RSTRING(str)->ptr)) {
|
||||
else if (RTEST(ruby_verbose) && RSTRING(str)->len != strlen(RSTRING(str)->ptr)) {
|
||||
rb_warn("string contains \\0 character");
|
||||
}
|
||||
return RSTRING(str)->ptr;
|
||||
|
|
4
pack.c
4
pack.c
|
@ -1457,11 +1457,11 @@ pack_unpack(str, fmt)
|
|||
case 'U':
|
||||
if (len > send - s) len = send - s;
|
||||
while (len > 0 && s < send) {
|
||||
int alen = len;
|
||||
int alen = send - s;
|
||||
unsigned long l;
|
||||
|
||||
l = utf8_to_uv(s, &alen);
|
||||
s += alen; len -= alen;
|
||||
s += alen; len--;
|
||||
rb_ary_push(ary, rb_uint2inum(l));
|
||||
}
|
||||
break;
|
||||
|
|
4
parse.y
4
parse.y
|
@ -4493,7 +4493,7 @@ void_expr(node)
|
|||
{
|
||||
char *useless = 0;
|
||||
|
||||
if (!ruby_verbose) return;
|
||||
if (!RTEST(ruby_verbose)) return;
|
||||
if (!node) return;
|
||||
|
||||
again:
|
||||
|
@ -4590,7 +4590,7 @@ static void
|
|||
void_stmts(node)
|
||||
NODE *node;
|
||||
{
|
||||
if (!ruby_verbose) return;
|
||||
if (!RTEST(ruby_verbose)) return;
|
||||
if (!node) return;
|
||||
if (nd_type(node) != NODE_BLOCK) return;
|
||||
|
||||
|
|
72
re.c
72
re.c
|
@ -220,7 +220,7 @@ rb_reg_expr_str(str, s, len)
|
|||
need_escape = 1;
|
||||
break;
|
||||
}
|
||||
p++;
|
||||
p += mbclen(*p);
|
||||
}
|
||||
if (!need_escape) {
|
||||
rb_str_cat(str, s, len);
|
||||
|
@ -228,7 +228,7 @@ rb_reg_expr_str(str, s, len)
|
|||
else {
|
||||
p = s;
|
||||
while (p<pend) {
|
||||
if (*p == '/') {
|
||||
if (*p == '/' && (s == p || p[-1] != '\\')) {
|
||||
char c = '\\';
|
||||
rb_str_cat(str, &c, 1);
|
||||
rb_str_cat(str, p, 1);
|
||||
|
@ -241,35 +241,14 @@ rb_reg_expr_str(str, s, len)
|
|||
else if (ISPRINT(*p)) {
|
||||
rb_str_cat(str, p, 1);
|
||||
}
|
||||
else {
|
||||
else if (!ISSPACE(*p)) {
|
||||
char b[8];
|
||||
switch (*p) {
|
||||
case '\r':
|
||||
rb_str_cat(str, "\\r", 2);
|
||||
break;
|
||||
case '\n':
|
||||
rb_str_cat(str, "\\n", 2);
|
||||
break;
|
||||
case '\t':
|
||||
rb_str_cat(str, "\\t", 2);
|
||||
break;
|
||||
case '\f':
|
||||
rb_str_cat(str, "\\f", 2);
|
||||
break;
|
||||
case 007:
|
||||
rb_str_cat(str, "\\a", 2);
|
||||
break;
|
||||
case 013:
|
||||
rb_str_cat(str, "\\v", 2);
|
||||
break;
|
||||
case 033:
|
||||
rb_str_cat(str, "\\e", 2);
|
||||
break;
|
||||
default:
|
||||
|
||||
sprintf(b, "\\%03o", *p & 0377);
|
||||
rb_str_cat(str, b, 4);
|
||||
break;
|
||||
}
|
||||
else {
|
||||
rb_str_cat(str, p, 1);
|
||||
}
|
||||
p++;
|
||||
}
|
||||
|
@ -1063,7 +1042,7 @@ rb_reg_s_quote(argc, argv)
|
|||
int kcode_saved = reg_kcode;
|
||||
char *s, *send, *t;
|
||||
VALUE tmp;
|
||||
int len;
|
||||
int len, c;
|
||||
|
||||
rb_scan_args(argc, argv, "11", &str, &kcode);
|
||||
if (!NIL_P(kcode)) {
|
||||
|
@ -1077,24 +1056,41 @@ rb_reg_s_quote(argc, argv)
|
|||
t = RSTRING(tmp)->ptr;
|
||||
|
||||
for (; s < send; s++) {
|
||||
if (ismbchar(*s)) {
|
||||
int n = mbclen(*s);
|
||||
c = *s;
|
||||
if (ismbchar(c)) {
|
||||
int n = mbclen(c);
|
||||
|
||||
while (n-- && s < send)
|
||||
*t++ = *s++;
|
||||
s--;
|
||||
continue;
|
||||
}
|
||||
if (*s == '[' || *s == ']'
|
||||
|| *s == '{' || *s == '}'
|
||||
|| *s == '(' || *s == ')'
|
||||
|| *s == '|' || *s == '-'
|
||||
|| *s == '*' || *s == '.' || *s == '\\'
|
||||
|| *s == '?' || *s == '+'
|
||||
|| *s == '^' || *s == '$') {
|
||||
switch (c) {
|
||||
case '\t':
|
||||
c = 't';
|
||||
*t++ = '\\';
|
||||
break;
|
||||
case '\f':
|
||||
c = 'f';
|
||||
*t++ = '\\';
|
||||
break;
|
||||
case '\r':
|
||||
c = 'r';
|
||||
*t++ = '\\';
|
||||
break;
|
||||
case '\n':
|
||||
c = 'n';
|
||||
*t++ = '\\';
|
||||
break;
|
||||
case '[': case ']': case '{': case '}':
|
||||
case '(': case ')': case '|': case '-':
|
||||
case '*': case '.': case '\\':
|
||||
case '?': case '+': case '^': case '$':
|
||||
case ' ':
|
||||
*t++ = '\\';
|
||||
break;
|
||||
}
|
||||
*t++ = *s;
|
||||
*t++ = c;
|
||||
}
|
||||
kcode_reset_option();
|
||||
rb_str_resize(tmp, t - RSTRING(tmp)->ptr);
|
||||
|
|
3
regex.c
3
regex.c
|
@ -717,8 +717,7 @@ is_in_list(c, b)
|
|||
else
|
||||
j = k;
|
||||
}
|
||||
if (i < size && EXTRACT_MBC(&b[i*8]) <= c
|
||||
&& ((unsigned char)c != '\n' && (unsigned char)c != '\0'))
|
||||
if (i < size && EXTRACT_MBC(&b[i*8]) <= c)
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
|
3
ruby.h
3
ruby.h
|
@ -124,12 +124,15 @@ typedef unsigned long ID;
|
|||
|
||||
#define FIXNUM_FLAG 0x01
|
||||
#define INT2FIX(i) ((VALUE)(((long)(i))<<1 | FIXNUM_FLAG))
|
||||
#define LONG2FIX(i) INT2FIX(i)
|
||||
#define rb_fix_new(v) INT2FIX(v)
|
||||
VALUE rb_int2inum _((long));
|
||||
#define INT2NUM(v) rb_int2inum(v)
|
||||
#define LONG2NUM(v) INT2NUM(v)
|
||||
#define rb_int_new(v) rb_int2inum(v)
|
||||
VALUE rb_uint2inum _((unsigned long));
|
||||
#define UINT2NUM(v) rb_uint2inum(v)
|
||||
#define ULONG2NUM(v) UINT2NUM(v)
|
||||
#define rb_uint_new(v) rb_uint2inum(v)
|
||||
|
||||
#define FIX2LONG(x) RSHIFT((long)x,1)
|
||||
|
|
|
@ -342,9 +342,8 @@ static VALUE
|
|||
undef_getter(id)
|
||||
ID id;
|
||||
{
|
||||
if (ruby_verbose) {
|
||||
rb_warning("global variable `%s' not initialized", rb_id2name(id));
|
||||
}
|
||||
|
||||
return Qnil;
|
||||
}
|
||||
|
||||
|
@ -911,9 +910,8 @@ rb_ivar_get(obj, id)
|
|||
return generic_ivar_get(obj, id);
|
||||
break;
|
||||
}
|
||||
if (ruby_verbose) {
|
||||
rb_warning("instance variable %s not initialized", rb_id2name(id));
|
||||
}
|
||||
|
||||
return Qnil;
|
||||
}
|
||||
|
||||
|
@ -1376,7 +1374,7 @@ cvar_set(klass, id, val, warn)
|
|||
if (OBJ_FROZEN(tmp)) rb_error_frozen("class/module");
|
||||
if (!OBJ_TAINTED(tmp) && rb_safe_level() >= 4)
|
||||
rb_raise(rb_eSecurityError, "Insecure: can't modify class variable");
|
||||
if (warn && ruby_verbose && klass != tmp) {
|
||||
if (warn && RTEST(ruby_verbose) && klass != tmp) {
|
||||
rb_warning("already initialized class variable %s", rb_id2name(id));
|
||||
}
|
||||
st_insert(RCLASS(tmp)->iv_tbl,id,val);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue