#pragma once #include // for clangd #include "parse_tree.hpp" namespace info { class GlobalInfo; class Context; } // namespace info namespace interpreter { class Visitor; struct Node { //public: //Node(info::GlobalInfo& global_info) : global_info_(global_info) {} // ?? not needed ?? virtual void Accept(Visitor* visitor); /* ------------ use visitor instead ------------ virtual void build(parser::ParseTree::Cursor& cursor) = 0; // build tree from parse tree virtual void find_symbols() = 0; // find types, typeclasses, namespaces, .. virtual void assign_types() = 0; // typecheck virtual void execute(info::Context& context) = 0; // execute part of tree */ /*private: size_t start_position_; // ?? size_t end_position_; // ?? Node* parent_; // ?? info::GlobalInfo& global_info_;*/ }; } // namespace interpreter