From 86db656415a2e05b573d95d813d6ca5a26b55d07 Mon Sep 17 00:00:00 2001 From: nobu Date: Tue, 17 Dec 2002 10:34:30 +0000 Subject: * 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 --- eval.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'eval.c') 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; -- cgit v1.2.3