diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2003-05-16 23:28:31 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2003-05-16 23:28:31 +0000 |
commit | 25fd1d7ff2de52b8670b50be68a5d09a5ddedd38 (patch) | |
tree | 3f9afe4bebd166e30e9f9c73cada34d2a51a6b7b | |
parent | ae8463b03c8882da342f0d4318175ab950280f0b (diff) |
* 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
-rw-r--r-- | ChangeLog | 10 | ||||
-rw-r--r-- | object.c | 17 | ||||
-rw-r--r-- | re.c | 23 | ||||
-rw-r--r-- | sample/test.rb | 7 |
4 files changed, 47 insertions, 10 deletions
@@ -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. @@ -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 @@ -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,8 +1377,28 @@ 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; diff --git a/sample/test.rb b/sample/test.rb index 32b79a61f6..d49e7a3e28 100644 --- a/sample/test.rb +++ b/sample/test.rb @@ -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)) |