71 datum
evaluate(formula_evaluation_context &context)
override
73 auto list_data = evaluate_formula_without_output(context, *list_expression, location);
75 if (!holds_alternative<datum::vector_type>(list_data)) {
76 throw operation_error(std::format(
"{}: Expecting expression returns a vector, got {}", location, list_data));
79 hilet output_size = context.output_size();
80 if (hilet loop_size = list_data.size()) {
81 ssize_t loop_count = 0;
82 for (hilet &item : list_data) {
84 name_expression->assign_without_output(context, item);
87 throw operation_error(std::format(
"{}: Could not evaluate for-loop expression.\n{}", location, e.
what()));
90 context.loop_push(loop_count++, loop_size);
91 auto tmp = evaluate_children(context, children);
96 }
else if (tmp.is_continue()) {
98 }
else if (!tmp.is_undefined()) {
99 context.set_output_size(output_size);
105 auto tmp = evaluate_children(context, else_children);
106 if (tmp.is_break() || tmp.is_continue()) {
108 }
else if (!tmp.is_undefined()) {
109 context.set_output_size(output_size);