// SPDX-License-Identifier: MIT #ifndef RGBDS_LINK_FSTACK_HPP #define RGBDS_LINK_FSTACK_HPP #include #include #include #include #include #include "linkdefs.hpp" struct FileStackNode { FileStackNodeType type; std::variant< std::monostate, // Default constructed; `.type` and `.data` must be set manually std::vector, // NODE_REPT std::string // NODE_FILE, NODE_MACRO > data; FileStackNode *parent; // Line at which the parent context was exited; meaningless for the root level uint32_t lineNo; // REPT iteration counts since last named node, in reverse depth order std::vector &iters() { return std::get>(data); } std::vector const &iters() const { return std::get>(data); } // File name for files, file::macro name for macros std::string &name() { return std::get(data); } std::string const &name() const { return std::get(data); } void printBacktrace(uint32_t curLineNo) const; }; #endif // RGBDS_LINK_FSTACK_HPP