diff options
author | Fumitoshi Ukai <fumitoshi.ukai@gmail.com> | 2015-06-30 18:02:45 +0900 |
---|---|---|
committer | Fumitoshi Ukai <fumitoshi.ukai@gmail.com> | 2015-07-02 11:17:57 +0900 |
commit | 2142617c97be0754e897a4ead094101172a66e78 (patch) | |
tree | fddc6d06abe300cf06a4240de92477ea89709a92 /func.go | |
parent | fb1fb2c140253e55d3268079b892c137f15ab0c2 (diff) | |
download | kati-2142617c97be0754e897a4ead094101172a66e78.tar.gz |
fix autovar_assign.mk
$(eval x+=$(x)) in $(foreach) will leave origin "file" variable.
but if it didn't assign by $(eval) in $(foreach), foreach's loop
variable will be restored.
Diffstat (limited to 'func.go')
-rw-r--r-- | func.go | 7 |
1 files changed, 5 insertions, 2 deletions
@@ -1421,8 +1421,7 @@ func (f *funcForeach) Eval(w io.Writer, ev *Evaluator) error { varname := string(fargs[0]) ws := newWordScanner(fargs[1]) text := f.args[3] - restore := ev.outVars.save(varname) - defer restore() + ov := ev.LookupVar(varname) space := false for ws.Scan() { word := ws.Bytes() @@ -1437,5 +1436,9 @@ func (f *funcForeach) Eval(w io.Writer, ev *Evaluator) error { space = true } freeBuf(abuf) + av := ev.LookupVar(varname) + if _, ok := av.(*automaticVar); ok { + ev.outVars.Assign(varname, ov) + } return nil } |