header_utils
|
NOTE: Decade syntax is slower to execute but more natural. More...
#include <eval.h>
Public Types | |
using | self_type = environment< DECADE_SYNTAX > |
using | eval_func = std::function< value(self_type &, std::vector< value >)> |
Public Member Functions | |
self_type * | get_root_env () const noexcept |
auto | find_in_user_storage (this auto &&self, std::string_view name) |
value | user_var (std::string_view name) |
json & | set_user_var (std::string_view name, value val, bool force_local=false) |
eval_func const * | find_unknown_func_eval () const noexcept |
eval_func const * | find_func (std::string_view name) const |
template<typename... ARGS> | |
json | report_error (std::string_view fmt, ARGS &&... args) |
value | eval_call (std::vector< value > args) |
template<typename V > | |
value | eval (V &&val) |
template<typename T > | |
json | safe_eval (T &&value) |
bool | is_true (json const &val) |
bool | is_true (value const &val) |
value | eval_arg (std::vector< value > &args, size_t n, json::value_t type=json::value_t::discarded) |
void | eval_args (std::vector< value > &args, size_t n) |
void | eval_args (std::vector< value > &args) |
template<typename LIB_TYPE > | |
void | import_lib () |
template<template< bool > typename LIB_TYPE> | |
void | import_lib () |
Static Public Member Functions | |
static void | assert_args (std::span< value const > args, size_t arg_count) |
static void | assert_args (std::span< value const > args, size_t min_args, size_t max_args) |
static void | assert_min_args (std::span< value const > args, size_t arg_count) |
static auto | assert_arg (std::span< value const > args, size_t arg_num, json::value_t type=json::value_t::discarded) |
template<std::same_as< nlohmann::json::value_t >... T> | |
static void | assert_args (std::vector< value > args, T... arg_types) |
Public Attributes | |
self_type * | parent_env |
std::map< std::string, eval_func, std::less<> > | funcs |
TODO: How to do const parent envs, or const vars? | |
eval_func | unknown_func_eval |
std::function< value(self_type &, std::string_view)> | unknown_var_eval |
std::function< void(std::string_view)> | error_handler |
std::map< std::string, json, std::less<> > | user_storage |
void * | user_data |
std::map< std::string, eval_func, std::less<> > | prefix_macros |
std::function< bool(json const &)> | truthiness_function |
eval('.test') -> eval(prefix_macros['.']('.test')) | |
Static Public Attributes | |
static constexpr bool | decade_syntax |
static constexpr bool | sexps_syntax |
NOTE: Decade syntax is slower to execute but more natural.
using ghassanpl::eval::environment< DECADE_SYNTAX >::eval_func = std::function<value(self_type&, std::vector<value>)> |
using ghassanpl::eval::environment< DECADE_SYNTAX >::self_type = environment<DECADE_SYNTAX> |
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inlinenoexcept |
|
inlinenoexcept |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
staticconstexpr |
std::function<void(std::string_view)> ghassanpl::eval::environment< DECADE_SYNTAX >::error_handler |
std::map<std::string, eval_func, std::less<> > ghassanpl::eval::environment< DECADE_SYNTAX >::funcs |
self_type* ghassanpl::eval::environment< DECADE_SYNTAX >::parent_env |
std::map<std::string, eval_func, std::less<> > ghassanpl::eval::environment< DECADE_SYNTAX >::prefix_macros |
|
staticconstexpr |
std::function<bool(json const&)> ghassanpl::eval::environment< DECADE_SYNTAX >::truthiness_function |
eval_func ghassanpl::eval::environment< DECADE_SYNTAX >::unknown_func_eval |
std::function<value(self_type&, std::string_view)> ghassanpl::eval::environment< DECADE_SYNTAX >::unknown_var_eval |
void* ghassanpl::eval::environment< DECADE_SYNTAX >::user_data |
std::map<std::string, json, std::less<> > ghassanpl::eval::environment< DECADE_SYNTAX >::user_storage |