Skip to content

Commit

Permalink
* object.c (rb_class_allocate_instance): singleton class check
Browse files Browse the repository at this point in the history
  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
  • Loading branch information
matz committed May 16, 2003
1 parent ae8463b commit 25fd1d7
Show file tree
Hide file tree
Showing 4 changed files with 47 additions and 10 deletions.
10 changes: 10 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,16 @@ Sat May 17 00:18:11 2003 Nobuyoshi Nakada <[email protected]>
returns EINVAL on some platforms, need to check true error
status. [ruby-core:01037]

Sat May 17 00:21:51 2003 Yukihiro Matsumoto <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* eval.c (block_pass): chain previous block to the pushing block.
Expand Down
17 changes: 8 additions & 9 deletions object.c
Original file line number Diff line number Diff line change
Expand Up @@ -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");
}
Expand All @@ -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
Expand Down
23 changes: 22 additions & 1 deletion re.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
}
Expand Down Expand Up @@ -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;
Expand Down
7 changes: 7 additions & 0 deletions sample/test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -1194,6 +1194,13 @@ def shift_test(a)
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))
Expand Down

0 comments on commit 25fd1d7

Please sign in to comment.