|
|
@@ -189,19 +189,19 @@ func interpret(scanner *scanProvider, envs []environ) (val value, returned bool)
|
|
|
for j := i + 1; j < len(stack); j++ {
|
|
|
stack[j] = toValue(stack[j], envs)
|
|
|
}
|
|
|
- local := environ{op: val}
|
|
|
+ local := environ{}
|
|
|
+ for name, val := range val.env {
|
|
|
+ local[name] = val
|
|
|
+ }
|
|
|
+ local[op] = val
|
|
|
for j, name := range val.param {
|
|
|
local[name] = stack[i+1+j]
|
|
|
}
|
|
|
- ctx := environ{}
|
|
|
- for name, val := range val.env {
|
|
|
- ctx[name] = val
|
|
|
- }
|
|
|
global := envs[0]
|
|
|
- if envs[2] != nil {
|
|
|
- global = envs[2]
|
|
|
+ if envs[1] != nil {
|
|
|
+ global = envs[1]
|
|
|
}
|
|
|
- stack[i], _ = opRun(&_list{list: val.body}, []environ{local, ctx, global})
|
|
|
+ stack[i], _ = opRun(&_list{list: val.body}, []environ{local, global})
|
|
|
stack = stack[:i+1]
|
|
|
updated = true
|
|
|
}
|
|
|
@@ -231,5 +231,5 @@ func main() {
|
|
|
}
|
|
|
scanner := bufio.NewScanner(os.Stdin)
|
|
|
scanner.Split(splitFunc)
|
|
|
- interpret(&scanProvider{isList: false, scanner: scanner}, []environ{env, nil, nil})
|
|
|
+ interpret(&scanProvider{isList: false, scanner: scanner}, []environ{env, nil})
|
|
|
}
|