summaryrefslogtreecommitdiff
path: root/eval.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2002-12-17 10:34:30 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2002-12-17 10:34:30 +0000
commit86db656415a2e05b573d95d813d6ca5a26b55d07 (patch)
tree379c349bd378072c2907f4e6579b677573a2e087 /eval.c
parent3a20ed532b57da1e58287a5c53abe14400a085f4 (diff)
* node.h (NODE_ATTRASGN): new node, assignment to attribute.
[ruby-core:00637]. * eval.c (is_defined, rb_eval): ditto. * parse.y (attrset, node_assign): ditto. * string.c (rb_str_substr): tail sharing. [ruby-core:00650] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@3160 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/eval.c b/eval.c
index bfa7330999..e6ae4c41a7 100644
--- a/eval.c
+++ b/eval.c
@@ -1881,6 +1881,7 @@ is_defined(self, node, buf)
goto check_bound;
case NODE_CALL:
+ case NODE_ATTRASGN:
PUSH_TAG(PROT_NONE);
if ((state = EXEC_TAG()) == 0) {
val = rb_eval(self, node->nd_recv);
@@ -2742,6 +2743,23 @@ rb_eval(self, n)
rb_eval(self, node->nd_body));
break;
+ case NODE_ATTRASGN:
+ {
+ VALUE recv;
+ int argc; VALUE *argv; /* used in SETUP_ARGS */
+ TMP_PROTECT;
+
+ BEGIN_CALLARGS;
+ recv = rb_eval(self, node->nd_recv);
+ SETUP_ARGS(node->nd_args);
+ END_CALLARGS;
+
+ SET_CURRENT_SOURCE();
+ rb_call(CLASS_OF(recv),recv,node->nd_mid,argc,argv,0);
+ result = argv[argc-1];
+ }
+ break;
+
case NODE_CALL:
{
VALUE recv;