code: func (v *evalVisitor) evalCtxPath(ctx reflect.Value, parts []string, exprRoot bool) (interface{}, bool) {
  	var result interface{}
  	partResolved := false
  
  	switch ctx.Kind() {
  	case reflect.Array, reflect.Slice:
  		// Array context
  		var results []interface{}
  
  		for i := 0; i < ctx.Len(); i++ {
  			value, _ := v.evalPath(ctx.Index(i), parts, exprRoot)
  			if value.IsValid() {
  				results = append(results, value.Interface())
  			}
  		}
  
  		result = results
  	default:
  		// NOT array context
  		var value reflect.Value
  
  		value, partResolved = v.evalPath(ctx, parts, exprRoot)
  		if value.IsValid() {
  			result = value.Interface()
  		}
  	}
  
  	return result, partResolved
  }
docs: // evalCtxPath evaluates path with given context