argmap.go

 1package ast
 2
 3func arg2map(defs ArgumentDefinitionList, args ArgumentList, vars map[string]interface{}) map[string]interface{} {
 4	result := map[string]interface{}{}
 5	var err error
 6
 7	for _, argDef := range defs {
 8		var val interface{}
 9		var hasValue bool
10
11		if argValue := args.ForName(argDef.Name); argValue != nil {
12			if argValue.Value.Kind == Variable {
13				val, hasValue = vars[argValue.Value.Raw]
14			} else {
15				val, err = argValue.Value.Value(vars)
16				if err != nil {
17					panic(err)
18				}
19				hasValue = true
20			}
21		}
22
23		if !hasValue && argDef.DefaultValue != nil {
24			val, err = argDef.DefaultValue.Value(vars)
25			if err != nil {
26				panic(err)
27			}
28			hasValue = true
29		}
30
31		if hasValue {
32			result[argDef.Name] = val
33		}
34	}
35
36	return result
37}