summaryrefslogtreecommitdiff
path: root/eval.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2000-01-24 03:46:14 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2000-01-24 03:46:14 +0000
commit1af83e49971e5ca5fa1b0c80a12e7b34d9271cac (patch)
tree6ffb7b4d699e973fd1e4f46db6bb78551e76e1b1 /eval.c
parent2d2bbb96777e868e49a39cebe8359d02f6f117a2 (diff)
2000-01-24
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_4@610 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/eval.c b/eval.c
index 3a684b484c..88ec197f96 100644
--- a/eval.c
+++ b/eval.c
@@ -556,14 +556,27 @@ dvar_asgn(id, value, push)
struct RVarmap *vars = ruby_dyna_vars;
while (vars) {
- if (push && vars->id == 0) break;
+ if (push && vars->id == 0) {
+ rb_dvar_push(id, value);
+ return;
+ }
if (vars->id == id) {
vars->val = value;
return;
}
vars = vars->next;
}
+
+ vars = 0;
+ if (ruby_dyna_vars && ruby_dyna_vars->id == 0) {
+ vars = ruby_dyna_vars;
+ ruby_dyna_vars = ruby_dyna_vars->next;
+ }
rb_dvar_push(id, value);
+ if (vars) {
+ vars->next = ruby_dyna_vars;
+ ruby_dyna_vars = vars;
+ }
}
void