7#include "formula_binary_operator_node.hpp"
19 if (rhs_name ==
nullptr) {
20 throw parse_error(
"{}: Expecting a name token on the right hand side of a member accessor. got {}.", location, rhs);
25 method = context.get_method(rhs_name->name);
27 throw parse_error(
"{}: Could not find method .{}().", location, rhs_name->name);
32 if (lhs->has_evaluate_xvalue()) {
33 ttlet &lhs_ = lhs->evaluate_xvalue(context);
35 if (!lhs_.contains(rhs_name->name)) {
36 throw operation_error(
"{}: Unknown attribute .{}", location, rhs_name->name);
39 return lhs_[rhs_name->name];
45 ttlet lhs_ = lhs->evaluate(context);
47 if (!lhs_.contains(rhs_name->name)) {
48 throw operation_error(
"{}: Unknown attribute .{}", location, rhs_name->name);
51 return lhs_[rhs_name->name];
59 auto &lhs_ = lhs->evaluate_lvalue(context);
61 return lhs_[rhs_name->name];
68 auto &lhs_ = lhs->evaluate_lvalue(context);
70 return method(context, lhs_, arguments);
77 return fmt::format(
"({} . {})", *lhs, *rhs);
Exception thrown during parsing on an error.
Definition exception.hpp:26
Exception thrown during execution of a dynamic operation.
Definition exception.hpp:42
Definition formula_binary_operator_node.hpp:11
Definition formula_evaluation_context.hpp:16
Definition formula_member_node.hpp:11
void resolve_function_pointer(formula_post_process_context &context) override
Resolve function and method pointers.
Definition formula_member_node.hpp:24
datum & evaluate_lvalue(formula_evaluation_context &context) const override
Evaluate an existing lvalue.
Definition formula_member_node.hpp:58
datum evaluate(formula_evaluation_context &context) const override
Evaluate an rvalue.
Definition formula_member_node.hpp:31
datum call(formula_evaluation_context &context, datum::vector const &arguments) const override
Call a function with a datum::vector as arguments.
Definition formula_member_node.hpp:67
Definition formula_name_node.hpp:11
Definition formula_post_process_context.hpp:18
Definition parse_location.hpp:16