summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.cvsignore2
-rw-r--r--ChangeLog8
-rw-r--r--eval.c7
-rw-r--r--misc/ruby-mode.el2
-rw-r--r--object.c2
-rw-r--r--struct.c4
6 files changed, 18 insertions, 7 deletions
diff --git a/.cvsignore b/.cvsignore
index 52a5620133..69a30e5f81 100644
--- a/.cvsignore
+++ b/.cvsignore
@@ -5,6 +5,8 @@
*~
.ccmalloc
.ppack
+.ext
+.rbconfig.time
COPYING.LIB
ChangeLog.pre-alpha
ChangeLog.pre1_1
diff --git a/ChangeLog b/ChangeLog
index 294fb035aa..826978e51a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -6016,6 +6016,14 @@ Thu Mar 18 21:44:38 2004 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
* lib/drb/drb.rb: backport drb.rb 1.16.
+Fri Mar 18 17:49:51 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * struct.c (make_struct): allow const_id for accessor names.
+ [ruby-core:04585]
+
+ * eval.c (rb_attr): check if attribute name is local_id or
+ const_id.
+
Thu Mar 18 16:22:38 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
* eval.c (proc_eq): avoid false positive by using scope and
diff --git a/eval.c b/eval.c
index e6a927b21f..990aa5da47 100644
--- a/eval.c
+++ b/eval.c
@@ -622,6 +622,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");
@@ -633,9 +636,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 0218fe55ce..61d865060c 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))
diff --git a/object.c b/object.c
index f291931466..21615cd3ea 100644
--- a/object.c
+++ b/object.c
@@ -2471,7 +2471,7 @@ VALUE ruby_top_self;
* Creating a new Name
*
* Classes, modules, and objects are interrelated. In the diagram
- * that follows, the arrows represent inheritance, and the
+ * that follows, the vertical arrows represent inheritance, and the
* parentheses meta-classes. All metaclasses are instances
* of the class `Class'.
*
diff --git a/struct.c b/struct.c
index 8521195b71..59de2ea618 100644
--- a/struct.c
+++ b/struct.c
@@ -212,7 +212,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<10) {
rb_define_method_id(nstr, id, ref_func[i], 0);
}
@@ -488,7 +488,7 @@ inspect_struct(s)
}
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);
}