99 lines
2.6 KiB
C++
99 lines
2.6 KiB
C++
#include "ast_access.h"
|
|
|
|
using namespace ast_gen;
|
|
using namespace ast_basic;
|
|
|
|
|
|
GlobalElement* GlobalElement::UniquePtr = nullptr;
|
|
|
|
GlobalElement::GlobalElement(const QString& name) :names_store(name) {
|
|
UniquePtr = this;
|
|
}
|
|
|
|
void GlobalElement::clearCache() {
|
|
node_cache.clear();
|
|
}
|
|
|
|
std::shared_ptr<const SyntaxElement> GlobalElement::appendToCache(std::shared_ptr<const SyntaxElement> 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<const SyntaxElement> 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 GlobalElement::isAnonymous() const {
|
|
return true;
|
|
}
|
|
|
|
QString GlobalElement::signature() const {
|
|
return u8"::global";
|
|
}
|
|
|
|
QString GlobalElement::path() const {
|
|
return u8"";
|
|
}
|
|
|
|
std::weak_ptr<const SyntaxElement> GlobalElement::parent() const {
|
|
return std::weak_ptr<const SyntaxElement>();
|
|
}
|
|
|
|
void GlobalElement::setParent(std::shared_ptr<const SyntaxElement> inst) { }
|
|
|
|
QList<std::shared_ptr<const TokenAccess>> GlobalElement::selfTokens() const {
|
|
return QList<std::shared_ptr<const TokenAccess>>();
|
|
}
|
|
|
|
std::shared_ptr<const IExprInstance> GlobalElement::bindExpression() const {
|
|
return nullptr;
|
|
}
|
|
|
|
void GlobalElement::addChild(std::shared_ptr<SyntaxElement> citem) {
|
|
}
|
|
|
|
ElementAccess::ElementAccess(std::shared_ptr<const SyntaxElement> point) {
|
|
peers = point;
|
|
}
|
|
|
|
std::shared_ptr<const SyntaxElement> ElementAccess::element() const {
|
|
return peers;
|
|
}
|
|
|
|
QList<std::shared_ptr<const ElementAccess>> ElementAccess::children() const {
|
|
auto expression_inst = element()->bindExpression();
|
|
auto children = expression_inst->children();
|
|
|
|
QList<std::shared_ptr<const ElementAccess>> retvalues;
|
|
for (auto item : children) {
|
|
auto elem_inst = std::dynamic_pointer_cast<const SyntaxElement>(item);
|
|
retvalues.append(std::make_shared<ElementAccess>(elem_inst));
|
|
}
|
|
return retvalues;
|
|
}
|
|
|
|
QList<std::shared_ptr<const TokenAccess>> ElementAccess::tokens() const {
|
|
return element()->selfTokens();
|
|
}
|
|
|
|
TokenAccess::TokenAccess(std::shared_ptr<const SyntaxElement> elm_inst, std::shared_ptr<const lib_token::IToken> token_inst)
|
|
: element_bind(elm_inst), token_store(token_inst) { }
|
|
|
|
std::shared_ptr<const SyntaxElement> TokenAccess::bind() const {
|
|
return element_bind;
|
|
}
|
|
|
|
std::shared_ptr<const lib_token::IToken> TokenAccess::token() const {
|
|
return token_store;
|
|
}
|