From 72dfee9a96069791b888d1596a48ddd07caf5c51 Mon Sep 17 00:00:00 2001 From: matz Date: Tue, 4 Mar 2003 09:31:02 +0000 Subject: [PATCH] * array.c (rb_ary_aref): give warning if index is a symbol. [ruby-list:37217] * array.c (rb_ary_aset): raise TypeError if index is a symbol. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@3553 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 7 +++++++ array.c | 15 +++++++++++++++ numeric.c | 3 +++ 3 files changed, 25 insertions(+) diff --git a/ChangeLog b/ChangeLog index 1807fdf0d8..74b0901e52 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Tue Mar 4 17:54:30 2003 Yukihiro Matsumoto + + * array.c (rb_ary_aref): give warning if index is a symbol. + [ruby-list:37217] + + * array.c (rb_ary_aset): raise TypeError if index is a symbol. + Tue Nov 13 14:39:11 2001 WATANABE Tetsuya * missing/strftime.c: HP-UX support. diff --git a/array.c b/array.c index 666a68a947..759c4a3536 100644 --- a/array.c +++ b/array.c @@ -500,6 +500,9 @@ rb_ary_aref(argc, argv, ary) long beg, len; if (argc == 2) { + if (SYMBOL_P(argv[0])) { + rb_raise(rb_eTypeError, "Symbol as array index"); + } beg = NUM2LONG(argv[0]); len = NUM2LONG(argv[1]); if (beg < 0) { @@ -515,6 +518,9 @@ rb_ary_aref(argc, argv, ary) if (FIXNUM_P(arg)) { return rb_ary_entry(ary, FIX2LONG(arg)); } + if (SYMBOL_P(arg)) { + rb_raise(rb_eTypeError, "Symbol as array index"); + } /* check if idx is Range */ switch (rb_range_beg_len(arg, &beg, &len, RARRAY(ary)->len, 0)) { case Qfalse: @@ -714,6 +720,12 @@ rb_ary_aset(argc, argv, ary) long offset, beg, len; if (argc == 3) { + if (SYMBOL_P(argv[0])) { + rb_raise(rb_eTypeError, "Symbol as array index"); + } + if (SYMBOL_P(argv[1])) { + rb_raise(rb_eTypeError, "Symbol as subarray length"); + } rb_ary_update(ary, NUM2LONG(argv[0]), NUM2LONG(argv[1]), argv[2]); return argv[2]; } @@ -724,6 +736,9 @@ rb_ary_aset(argc, argv, ary) offset = FIX2LONG(argv[0]); goto fixnum; } + if (SYMBOL_P(argv[0])) { + rb_raise(rb_eTypeError, "Symbol as array index"); + } if (rb_range_beg_len(argv[0], &beg, &len, RARRAY(ary)->len, 1)) { /* check if idx is Range */ rb_ary_update(ary, beg, len, argv[1]); diff --git a/numeric.c b/numeric.c index fe549fb1ee..5157b3b64f 100644 --- a/numeric.c +++ b/numeric.c @@ -943,6 +943,9 @@ rb_num2long(val) case T_BIGNUM: return rb_big2long(val); + case T_SYMBOL: + rb_warning("treating Symbol as an integer"); + /* fall through */ default: val = rb_to_int(val); return NUM2LONG(val);