diff options
Diffstat (limited to 'src/core/parser/ParserScope.cpp')
-rw-r--r-- | src/core/parser/ParserScope.cpp | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/core/parser/ParserScope.cpp b/src/core/parser/ParserScope.cpp index 9c0b729..5440b9c 100644 --- a/src/core/parser/ParserScope.cpp +++ b/src/core/parser/ParserScope.cpp @@ -19,6 +19,7 @@ #include <core/common/Exceptions.hpp> #include <core/common/Utils.hpp> #include <core/common/VariantWriter.hpp> +#include <core/model/Domain.hpp> #include <core/model/Typesystem.hpp> #include "ParserScope.hpp" @@ -37,6 +38,19 @@ Rooted<Node> ParserScopeBase::resolve(const Rtti *type, const std::vector<std::string> &path, Logger &logger) { + // if the last element of the path is the default field name, we want to + // resolve the parent descriptor first. + if (type == &RttiTypes::FieldDescriptor && + path.back() == DEFAULT_FIELD_NAME) { + std::vector<std::string> descPath; + descPath.insert(descPath.end(), path.begin(), path.end() - 1); + Rooted<Node> res = resolve(&RttiTypes::Descriptor, descPath, logger); + if (res == nullptr) { + return nullptr; + } + return res.cast<Descriptor>()->getFieldDescriptor(); + } + // Go up the stack and try to resolve the for (auto it = nodes.rbegin(); it != nodes.rend(); it++) { std::vector<ResolutionResult> res = (*it)->resolve(type, path); |