diff options
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | eval.c | 7 | ||||
-rw-r--r-- | misc/ruby-mode.el | 2 | ||||
-rw-r--r-- | numeric.c | 2 | ||||
-rw-r--r-- | struct.c | 4 |
5 files changed, 14 insertions, 7 deletions
@@ -1,3 +1,9 @@ +Mon Apr 18 15:37:35 2005 Yukihiro Matsumoto <matz@ruby-lang.org> + + * eval.c (rb_attr): attribute name check added. + + * numeric.c (flo_plus): small typo fix. + Mon Apr 18 11:25:14 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp> * ext/zlib/zlib.c (zstream_run): fixed SEGV. [ruby-core:4712] @@ -624,6 +624,9 @@ rb_attr(klass, id, read, write, ex) } } + if (!rb_is_local_id(id) && !rb_is_const_id(id)) { + rb_name_error(id, "invalid attribute name `%s'", rb_id2name(id)); + } name = rb_id2name(id); if (!name) { rb_raise(rb_eArgError, "argument needs to be symbol or string"); @@ -635,9 +638,7 @@ rb_attr(klass, id, read, write, ex) rb_add_method(klass, id, NEW_IVAR(attriv), noex); } if (write) { - sprintf(buf, "%s=", name); - id = rb_intern(buf); - rb_add_method(klass, id, NEW_ATTRSET(attriv), noex); + rb_add_method(klass, rb_id_attrset(id), NEW_ATTRSET(attriv), noex); } } diff --git a/misc/ruby-mode.el b/misc/ruby-mode.el index e2f64c8c3..2190a932b 100644 --- a/misc/ruby-mode.el +++ b/misc/ruby-mode.el @@ -398,7 +398,7 @@ The variable ruby-indent-level controls the amount of indentation. ((and (not (eobp)) (ruby-expr-beg 'expr-qstr) (not (looking-at "%=")) - (looking-at "%[QqrxWw]?\\(.\\)")) + (looking-at "%[QqrxWw]?\\([^a-zA-Z0-9 \t\n]\\)")) (goto-char (match-beginning 1)) (setq expand (not (memq (char-before) '(?q ?w)))) (setq w (match-string 1)) @@ -593,7 +593,7 @@ flo_minus(x, y) * call-seq: * float * other => float * - * Returns a new float with is the product of <code>float</code> + * Returns a new float which is the product of <code>float</code> * and <code>other</code>. */ @@ -210,7 +210,7 @@ make_struct(name, members, klass) rb_define_singleton_method(nstr, "members", rb_struct_s_members_m, 0); for (i=0; i< RARRAY(members)->len; i++) { ID id = SYM2ID(RARRAY(members)->ptr[i]); - if (rb_is_local_id(id)) { + if (rb_is_local_id(id) || rb_is_const_id(id)) { if (i<sizeof(ref_func)) { rb_define_method_id(nstr, id, ref_func[i], 0); } @@ -496,7 +496,7 @@ inspect_struct(s, dummy, recur) } slot = RARRAY(members)->ptr[i]; id = SYM2ID(slot); - if (rb_is_local_id(id)) { + if (rb_is_local_id(id) || rb_is_const_id(id)) { p = rb_id2name(id); rb_str_cat2(str, p); } |