From 25fd1d7ff2de52b8670b50be68a5d09a5ddedd38 Mon Sep 17 00:00:00 2001 From: matz Date: Fri, 16 May 2003 23:28:31 +0000 Subject: * 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 --- ChangeLog | 10 ++++++++++ object.c | 17 ++++++++--------- re.c | 23 ++++++++++++++++++++++- sample/test.rb | 7 +++++++ 4 files changed, 47 insertions(+), 10 deletions(-) diff --git a/ChangeLog b/ChangeLog index ef78d0049e..f1bed984c3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -9,6 +9,16 @@ Sat May 17 00:18:11 2003 Nobuyoshi Nakada returns EINVAL on some platforms, need to check true error status. [ruby-core:01037] +Sat May 17 00:21:51 2003 Yukihiro Matsumoto + + * 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 + + * 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 * eval.c (block_pass): chain previous block to the pushing block. diff --git a/object.c b/object.c index c9fc29d5bd..602634ea24 100644 --- a/object.c +++ b/object.c @@ -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 diff --git a/re.c b/re.c index 6d08fb81a1..29e2b94e09 100644 --- a/re.c +++ b/re.c @@ -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)) -- cgit v1.2.3