#pragma once #include #include #include #include #include #include "../parser/parser.h" class Object { public: bool isCustomObject = false; std::variant value; std::map> children; Object(ASTValue value); Object(ASTFunction function); Object(); }; /** * @class Executor * @brief Responsible for executing a sequence of operations defined in an abstract syntax tree (AST). * * This class provides execution functionality for ASTCodeBlock objects. * It maintains a mapping of variables and functions that can be used within the * context of execution. The class implements mechanisms for traversing AST nodes * and consuming or peeking at individual nodes. */ class Executor { private: std::map variables; ASTCodeBlock code; size_t iterator = 0; std::optional consume(); std::optional peek(int ahead = 1); void printValue(const ASTValue& arg); ASTValue evaluateOperator(const std::shared_ptr& op); public: explicit Executor(ASTCodeBlock in, bool isInitCall = false, std::map scopeVals = {}, std::vector args = {}); std::map getVariables(); };