aboutsummaryrefslogtreecommitdiff
path: root/func.go
diff options
context:
space:
mode:
authorFumitoshi Ukai <fumitoshi.ukai@gmail.com>2015-06-30 18:02:45 +0900
committerFumitoshi Ukai <fumitoshi.ukai@gmail.com>2015-07-02 11:17:57 +0900
commit2142617c97be0754e897a4ead094101172a66e78 (patch)
treefddc6d06abe300cf06a4240de92477ea89709a92 /func.go
parentfb1fb2c140253e55d3268079b892c137f15ab0c2 (diff)
downloadkati-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.go7
1 files changed, 5 insertions, 2 deletions
diff --git a/func.go b/func.go
index 03ca521..576855e 100644
--- a/func.go
+++ b/func.go
@@ -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
}