#include "ast_gen.h" using namespace ast_gen; GlobalElement* GlobalElement::UniquePtr = nullptr; GlobalElement::GlobalElement(const QString& name) :names_store(name) { UniquePtr = this; } void GlobalElement::clearCache() { node_cache.clear(); } std::shared_ptr GlobalElement::appendToCache(std::shared_ptr named_node) { auto mixed_key = QString(u8"%1<%2>").arg(named_node->signature()).arg(named_node->typeMark()); if (node_cache.contains(mixed_key)) return node_cache[mixed_key]; node_cache[mixed_key] = named_node; return nullptr; } std::shared_ptr GlobalElement::getNamedNodeBy(int paramType, const QString& signature) const { auto mixed_key = QString(u8"%1<%2>").arg(signature).arg(paramType); if (!node_cache.contains(mixed_key)) return nullptr; return node_cache[mixed_key]; } int GlobalElement::typeMark() const { return 0; } bool ast_gen::GlobalElement::isAnonymous() const { return true; } QString GlobalElement::signature() const { return u8"::global"; } QString GlobalElement::path() const { return u8""; } std::shared_ptr GlobalElement::parent() const { return nullptr; } void ast_gen::GlobalElement::setParent(std::shared_ptr inst) {} QList> GlobalElement::selfTokens() const { return QList>(); } std::shared_ptr ast_gen::GlobalElement::bindExpression() const { return bind_exprs; } void GlobalElement::addChild(std::shared_ptr citem) { auto convx = std::dynamic_pointer_cast(citem); bind_exprs->addChild(convx); } ElementAccess::ElementAccess(std::shared_ptr point) { peers = point; } std::shared_ptr ElementAccess::element() const { return peers; } QList> ElementAccess::children() const { auto expression_inst = element()->bindExpression(); auto children = expression_inst->children(); QList> retvalues; for (auto item : children) { auto elem_inst = std::dynamic_pointer_cast(item); retvalues.append(std::make_shared(elem_inst)); } return retvalues; } QList> ElementAccess::tokens() const { return element()->selfTokens(); } TokenAccess::TokenAccess(std::shared_ptr elm_inst, std::shared_ptr token_inst) : element_bind(elm_inst), token_store(token_inst) {} std::shared_ptr TokenAccess::bind() const { return element_bind; } std::shared_ptr TokenAccess::token() const { return token_store; }