7#include "formula_binary_operator_node.hpp"
9namespace hi::inline v1 {
19 if (rhs_name ==
nullptr) {
20 throw parse_error(std::format(
"{}: Expecting a name token on the right hand side of a member accessor. got {}.", location, *rhs));
26 method = context.get_method(rhs_name->name);
28 throw parse_error(std::format(
"{}: Could not find method .{}().", location, rhs_name->name));
34 if (lhs->has_evaluate_xvalue()) {
35 hilet &lhs_ = lhs->evaluate_xvalue(context);
37 if (!lhs_.contains(rhs_name->name)) {
38 throw operation_error(std::format(
"{}: Unknown attribute .{}", location, rhs_name->name));
41 return lhs_[rhs_name->name];
43 throw operation_error(std::format(
"{}: Can not evaluate member selection.\n{}", location, e.
what()));
47 hilet lhs_ = lhs->evaluate(context);
49 if (!lhs_.contains(rhs_name->name)) {
50 throw operation_error(std::format(
"{}: Unknown attribute .{}", location, rhs_name->name));
53 return lhs_[rhs_name->name];
55 throw operation_error(std::format(
"{}: Can not evaluate member selection.\n{}", location, e.
what()));
62 auto &lhs_ = lhs->evaluate_lvalue(context);
64 return lhs_[rhs_name->name];
66 throw operation_error(std::format(
"{}: Can not evaluate member-selection.\n{}", location, e.
what()));
72 auto &lhs_ = lhs->evaluate_lvalue(context);
74 return method(context, lhs_, arguments);
76 throw operation_error(std::format(
"{}: Can not evaluate call-of-method.\n{}", location, e.
what()));
82 return std::format(
"({} . {})", *lhs, *rhs);
#define hilet
Invariant should be the default for variables.
Definition required.hpp:23
A dynamic data type.
Definition datum.hpp:225
Exception thrown during parsing on an error.
Definition exception.hpp:25
Exception thrown during execution of a dynamic operation.
Definition exception.hpp:37
Definition formula_binary_operator_node.hpp:11
Definition formula_evaluation_context.hpp:16
Definition formula_member_node.hpp:11
datum & evaluate_lvalue(formula_evaluation_context &context) const override
Evaluate an existing lvalue.
Definition formula_member_node.hpp:60
datum evaluate(formula_evaluation_context &context) const override
Evaluate an rvalue.
Definition formula_member_node.hpp:32
datum call(formula_evaluation_context &context, datum::vector_type const &arguments) const override
Call a function with a datum::vector as arguments.
Definition formula_member_node.hpp:70
void resolve_function_pointer(formula_post_process_context &context) override
Resolve function and method pointers.
Definition formula_member_node.hpp:24
Definition formula_name_node.hpp:11
Definition formula_post_process_context.hpp:19
Definition parse_location.hpp:17