From ed0b5771084dfed171dc52ff41802f12f9025b92 Mon Sep 17 00:00:00 2001 From: matz Date: Tue, 8 Apr 2003 05:40:29 +0000 Subject: * eval.c (Init_Proc): make Method and UnboundMethod independent. They are like instance and its class. [ruby-core:00941] * parse.y (yylex): disallow global variables like "$1ve". [ruby-core:00945] * marshal.c (marshal_dump): Marshal.dump(0, false) should cause an error. (ruby-bugs-ja PR#421) * regex.c (re_compile_pattern): warn if '-' is the edge of character range. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@3648 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 14 ++++++++++++++ eval.c | 10 ++++++++-- marshal.c | 7 +++++-- parse.y | 2 -- regex.c | 2 ++ 5 files changed, 29 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index ccf502c25e..3f154260b2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,17 @@ +Tue Apr 8 11:49:31 2003 Yukihiro Matsumoto + + * eval.c (Init_Proc): make Method and UnboundMethod independent. + They are like instance and its class. [ruby-core:00941] + + * parse.y (yylex): disallow global variables like "$1ve". + [ruby-core:00945] + + * marshal.c (marshal_dump): Marshal.dump(0, false) should cause an + error. (ruby-bugs-ja PR#421) + + * regex.c (re_compile_pattern): warn if '-' is the edge of + character range. + Mon Apr 7 15:49:09 2003 Yukihiro Matsumoto * ext/socket/socket.c (sock_s_unpack_sockaddr_in): remove struct diff --git a/eval.c b/eval.c index 9b4420d7af..5ffcdb04c8 100644 --- a/eval.c +++ b/eval.c @@ -7452,10 +7452,16 @@ Init_Proc() rb_define_method(rb_cMethod, "unbind", method_unbind, 0); rb_define_method(rb_mKernel, "method", rb_obj_method, 1); - rb_cUnboundMethod = rb_define_class("UnboundMethod", rb_cMethod); + rb_cUnboundMethod = rb_define_class("UnboundMethod", rb_cObject); + rb_undef_alloc_func(rb_cUnboundMethod); + rb_undef_method(CLASS_OF(rb_cUnboundMethod), "new"); + rb_define_method(rb_cUnboundMethod, "==", method_eq, 1); + rb_define_method(rb_cUnboundMethod, "clone", method_clone, 0); + rb_define_method(rb_cUnboundMethod, "arity", method_arity, 0); + rb_define_method(rb_cUnboundMethod, "inspect", method_inspect, 0); + rb_define_method(rb_cUnboundMethod, "to_s", method_inspect, 0); rb_define_method(rb_cUnboundMethod, "to_proc", umethod_proc, 0); rb_define_method(rb_cUnboundMethod, "bind", umethod_bind, 1); - rb_define_method(rb_cUnboundMethod, "unbind", umethod_unbind, 0); rb_define_method(rb_cModule, "instance_method", rb_mod_method, 1); } diff --git a/marshal.c b/marshal.c index b023086aa8..b8319dcdce 100644 --- a/marshal.c +++ b/marshal.c @@ -589,19 +589,22 @@ marshal_dump(argc, argv) struct dump_arg arg; struct dump_call_arg c_arg; - port = 0; + port = Qnil; rb_scan_args(argc, argv, "12", &obj, &a1, &a2); if (argc == 3) { if (!NIL_P(a2)) limit = NUM2INT(a2); + if (NIL_P(a1)) goto type_error; port = a1; } else if (argc == 2) { if (FIXNUM_P(a1)) limit = FIX2INT(a1); + else if (NIL_P(a1)) goto type_error; else port = a1; } arg.dest = 0; - if (port) { + if (!NIL_P(port)) { if (!rb_respond_to(port, s_write)) { + type_error: rb_raise(rb_eTypeError, "instance of IO needed"); } arg.str = rb_str_buf_new(0); diff --git a/parse.y b/parse.y index faea6c4639..b37a749236 100644 --- a/parse.y +++ b/parse.y @@ -4246,8 +4246,6 @@ yylex() tokadd(c); c = nextc(); } while (ISDIGIT(c)); - if (is_identchar(c)) - break; pushback(c); tokfix(); yylval.node = NEW_NTH_REF(atoi(tok()+1)); diff --git a/regex.c b/regex.c index 655d2f077e..b7245d4494 100644 --- a/regex.c +++ b/regex.c @@ -1675,6 +1675,8 @@ re_compile_pattern(pattern, size, bufp) if (last > c) goto invalid_pattern; + if (last == '-' || c == '-') + re_warning("character class has `-' without escape"); range = 0; if (had_mbchar == 0) { for (;last<=c;last++) -- cgit v1.2.3