1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* object.c (rb_class_allocate_instance): singleton class check

moved to rb_obj_alloc(). (ruby-bugs-ja PR#345)

* re.c (rb_reg_quote): should escape white space characters,
  \t, \f, \n, \r. (ruby-bugs-ja PR#231)


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@3811 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
matz 2003-05-16 23:28:31 +00:00
parent ae8463b03c
commit 25fd1d7ff2
4 changed files with 47 additions and 10 deletions

View file

@ -9,6 +9,16 @@ Sat May 17 00:18:11 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
returns EINVAL on some platforms, need to check true error
status. [ruby-core:01037]
Sat May 17 00:21:51 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
* object.c (rb_class_allocate_instance): singleton class check
moved to rb_obj_alloc(). (ruby-bugs-ja PR#345)
Fri May 16 23:55:50 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
* re.c (rb_reg_quote): should escape white space characters,
\t, \f, \n, \r. (ruby-bugs-ja PR#231)
Fri May 16 12:40:40 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
* eval.c (block_pass): chain previous block to the pushing block.

View file

@ -730,8 +730,12 @@ VALUE
rb_obj_alloc(klass)
VALUE klass;
{
VALUE obj = rb_funcall(klass, ID_ALLOCATOR, 0, 0);
VALUE obj;
if (FL_TEST(klass, FL_SINGLETON)) {
rb_raise(rb_eTypeError, "can't create instance of virtual class");
}
obj = rb_funcall(klass, ID_ALLOCATOR, 0, 0);
if (rb_obj_class(obj) != rb_class_real(klass)) {
rb_raise(rb_eTypeError, "wrong instance allocation");
}
@ -743,14 +747,9 @@ static VALUE
rb_class_allocate_instance(klass)
VALUE klass;
{
if (FL_TEST(klass, FL_SINGLETON)) {
rb_raise(rb_eTypeError, "can't create instance of virtual class");
}
else {
NEWOBJ(obj, struct RObject);
OBJSETUP(obj, klass, T_OBJECT);
return (VALUE)obj;
}
NEWOBJ(obj, struct RObject);
OBJSETUP(obj, klass, T_OBJECT);
return (VALUE)obj;
}
VALUE

23
re.c
View file

@ -1349,6 +1349,7 @@ rb_reg_quote(str)
case '*': case '.': case '\\':
case '?': case '+': case '^': case '$':
case ' ': case '#':
case '\t': case '\f': case '\n': case '\r':
goto meta_found;
}
}
@ -1376,9 +1377,29 @@ rb_reg_quote(str)
case '(': case ')': case '|': case '-':
case '*': case '.': case '\\':
case '?': case '+': case '^': case '$':
case ' ': case '#':
case '#':
*t++ = '\\';
break;
case ' ':
*t++ = '\\';
*t++ = 's';
break;
case '\t':
*t++ = '\\';
*t++ = 't';
break;
case '\n':
*t++ = '\\';
*t++ = 'n';
break;
case '\r':
*t++ = '\\';
*t++ = 'r';
break;
case '\f':
*t++ = '\\';
*t++ = 'f';
break;
}
*t++ = c;
}

View file

@ -1194,6 +1194,13 @@ test_ok(-1045307475.to_s(36) == "-hacker")
test_ok("Just_another_Ruby_hacker".to_i(36) == 265419172580680477752431643787347)
test_ok(-265419172580680477752431643787347.to_s(36) == "-justanotherrubyhacker")
a = []
(0..255).each {|n|
ch = [n].pack("C")
a.push ch if /a#{Regexp.quote ch}b/x =~ "ab"
}
test_ok(a.size == 0)
test_check "assignment"
a = nil
test_ok(defined?(a))