diff options
author | Andreas Stöckel <astoecke@techfak.uni-bielefeld.de> | 2015-01-28 01:07:16 +0100 |
---|---|---|
committer | Andreas Stöckel <astoecke@techfak.uni-bielefeld.de> | 2015-01-28 01:07:16 +0100 |
commit | 21a91f26dc1c86fef631d22bf15bbd78414736d0 (patch) | |
tree | 1a87bb1ea71ba9541d00cadedb652b07cc015bb9 /src/core/parser/ParserScope.cpp | |
parent | af95065aa32179ff26894e57dfca9e52c0d61e89 (diff) |
Added select method and repair of some Doxygen comments
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 0e2350f..3d1ba78 100644 --- a/src/core/parser/ParserScope.cpp +++ b/src/core/parser/ParserScope.cpp @@ -168,6 +168,20 @@ Rooted<Node> ParserScope::getRoot() const { return nodes.front(); } Rooted<Node> ParserScope::getLeaf() const { return nodes.back(); } +Rooted<Node> ParserScope::select(RttiSet types, int maxDepth) +{ + ssize_t minDepth = 0; + if (maxDepth >= 0) { + minDepth = static_cast<ssize_t>(nodes.size()) - (maxDepth + 1); + } + for (ssize_t i = nodes.size() - 1; i >= minDepth; i--) { + if (nodes[i]->type().isOneOf(types)) { + return nodes[i]; + } + } + return nullptr; +} + void ParserScope::setFlag(ParserFlag flag, bool value) { // Fetch the current stack depth |