aboutsummaryrefslogtreecommitdiff
path: root/var.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 /var.go
parentfb1fb2c140253e55d3268079b892c137f15ab0c2 (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.go22
1 files changed, 15 insertions, 7 deletions
diff --git a/var.go b/var.go
index 4388431..446b00d 100644
--- a/var.go
+++ b/var.go
@@ -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