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 /var.go | |
| parent | fb1fb2c140253e55d3268079b892c137f15ab0c2 (diff) | |
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 'var.go')
| -rw-r--r-- | var.go | 22 |
1 files changed, 15 insertions, 7 deletions
@@ -169,25 +169,31 @@ func (v *automaticVar) Append(ev *Evaluator, s string) (Var, error) { if err != nil { return nil, err } - buf := bytes.NewBuffer(v.value) + buf := bytes.NewBuffer(nil) + buf.Write(v.value) buf.WriteByte(' ') err = val.Eval(buf, ev) if err != nil { return nil, err } - v.value = buf.Bytes() - return v, nil + return &simpleVar{ + value: buf.String(), + origin: "file", + }, nil } func (v *automaticVar) AppendVar(ev *Evaluator, val Value) (Var, error) { - buf := bytes.NewBuffer(v.value) + buf := bytes.NewBuffer(nil) + buf.Write(v.value) buf.WriteByte(' ') err := val.Eval(buf, ev) if err != nil { return nil, err } - v.value = buf.Bytes() - return v, nil + return &simpleVar{ + value: buf.String(), + origin: "file", + }, nil } type recursiveVar struct { @@ -293,7 +299,6 @@ func (vt Vars) Lookup(name string) Var { // default // TODO(ukai): is this correct order? var originPrecedence = map[string]int{ - "automatic": 5, "override": 4, "environment override": 4, "command line": 3, @@ -301,11 +306,14 @@ var originPrecedence = map[string]int{ "environment": 2, "default": 1, "undefined": 0, + "automatic": 0, } // Assign assigns v to name. func (vt Vars) Assign(name string, v Var) { vo := v.Origin() + // assign automatic always win. + // assign new value to automatic always win. if vo != "automatic" { vp := originPrecedence[v.Origin()] var op int |
