diff options
Diffstat (limited to 'variables.c')
-rw-r--r-- | variables.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/variables.c b/variables.c index 5fd9d0e..725cfa6 100644 --- a/variables.c +++ b/variables.c @@ -1821,11 +1821,17 @@ make_variable_value (var, value, flags) oval = value_cell (var); lval = evalexp (oval, &expok); /* ksh93 seems to do this */ if (expok == 0) - jump_to_top_level (DISCARD); + { + top_level_cleanup (); + jump_to_top_level (DISCARD); + } } rval = evalexp (value, &expok); if (expok == 0) - jump_to_top_level (DISCARD); + { + top_level_cleanup (); + jump_to_top_level (DISCARD); + } if (flags & ASS_APPEND) rval += lval; retval = itos (rval); @@ -3452,9 +3458,11 @@ push_func_var (data) if (shell_variables == global_variables) var->attributes &= ~(att_tempvar|att_propagate); else - shell_variables->flags |= VC_HASTMPVAR; + shell_variables->flags |= VC_HASTMPVAR; v->attributes |= var->attributes; } + else + stupidly_hack_special_variables (var->name); /* XXX */ dispose_variable (var); } @@ -3541,6 +3549,8 @@ push_exported_var (data) var->attributes &= ~att_propagate; v->attributes |= var->attributes; } + else + stupidly_hack_special_variables (var->name); /* XXX */ dispose_variable (var); } |