21 children_groups.emplace_back();
26 if (children_groups.size() != expressions.
size()) {
32 children_groups.emplace_back();
38 if (children_groups.size() != expressions.
size()) {
42 children_groups.emplace_back();
50 append_child(children_groups.back(),
std::move(x));
54 void post_process(formula_post_process_context &context)
override
56 hi_assert(ssize(expressions) == ssize(formula_locations));
57 for (ssize_t i = 0; i != ssize(expressions); ++i) {
58 post_process_expression(context, *expressions[i], formula_locations[i]);
61 for (hilet &children : children_groups) {
62 if (ssize(children) > 0) {
63 children.back()->left_align();
66 for (hilet &child : children) {
67 child->post_process(context);
72 datum
evaluate(formula_evaluation_context &context)
override
74 hi_assert(ssize(expressions) == ssize(formula_locations));
75 for (ssize_t i = 0; i != ssize(expressions); ++i) {
76 if (evaluate_formula_without_output(context, *expressions[i], formula_locations[i])) {
77 return evaluate_children(context, children_groups[i]);
80 if (ssize(children_groups) > ssize(expressions)) {
81 return evaluate_children(context, children_groups[ssize(expressions)]);
88 hi_assert(expressions.
size() > 0);
90 s += to_string(*expressions[0]);
97 s += to_string(*expressions[i]);
103 if (children_groups.size() != expressions.
size()) {
106 return to_string(*x);
bool append(std::unique_ptr< skeleton_node > x) noexcept override
Append a template-piece to the current template.
Definition skeleton_if_node.hpp:48