code: func getArgumentValues(
  	argDefs []*Argument, argASTs []*ast.Argument,
  	variableValues map[string]interface{}) map[string]interface{} {
  
  	argASTMap := map[string]*ast.Argument{}
  	for _, argAST := range argASTs {
  		if argAST.Name != nil {
  			argASTMap[argAST.Name.Value] = argAST
  		}
  	}
  	results := map[string]interface{}{}
  	for _, argDef := range argDefs {
  		var (
  			tmp   interface{}
  			value ast.Value
  		)
  		if tmpValue, ok := argASTMap[argDef.PrivateName]; ok {
  			value = tmpValue.Value
  		}
  		if tmp = valueFromAST(value, argDef.Type, variableValues); isNullish(tmp) {
  			tmp = argDef.DefaultValue
  		}
  		if !isNullish(tmp) {
  			results[argDef.PrivateName] = tmp
  		}
  	}
  	return results
  }
docs: // Prepares an object map of argument values given a list of argument
  // definitions and list of argument AST nodes.