···20662066and eval_call env bnds f args =
20672067 match path_of_ref f with
20682068 | None -> raise (Eval_error "dynamic call target not supported")
20692069+ | Some [ "walk" ] when List.length args = 2 ->
20702070+ (* [walk(coll, [path, value])] is OPA's tree-walk generator: each
20712071+ pair produced by walk yields a separate binding set, rather
20722072+ than one binding to the whole array of pairs. *)
20732073+ eval_expr env bnds (List.nth args 0)
20742074+ |> List.concat_map (fun (v, b) ->
20752075+ let pairs = walk_pairs v in
20762076+ let last_expr = List.nth args 1 in
20772077+ List.concat_map
20782078+ (fun (p, vv) ->
20792079+ let pair = Value.Array [ p; vv ] in
20802080+ bind_value_pattern env b last_expr pair
20812081+ |> List.map (fun b' -> (Value.Bool true, b')))
20822082+ pairs)
20692083 | Some path ->
20702084 let name = String.concat "." path in
20712085 let n = List.length args in