patterns: Provide Node constructor, simplify error throwing

By having a node constructor, we can construct a node inline
for error reporting needs, simplifying the code a bit.
This commit is contained in:
Julian Andres Klode
2020-02-01 17:04:58 +01:00
parent 2746cd503a
commit bcb9ecb2cd
2 changed files with 5 additions and 10 deletions
+3 -10
View File
@@ -33,13 +33,7 @@ std::unique_ptr<PatternTreeParser::Node> PatternTreeParser::parseTop()
skipSpace();
if (node->end != sentence.size())
{
Node node2;
node2.start = node->end;
node2.end = sentence.size();
throw Error{node2, "Expected end of file"};
}
throw Error{Node{node->end, sentence.size()}, "Expected end of file"};
return node;
}
@@ -55,9 +49,8 @@ std::unique_ptr<PatternTreeParser::Node> PatternTreeParser::parse()
if ((node = parseWord()) != nullptr)
return node;
Node eNode;
eNode.end = eNode.start = state.offset;
throw Error{eNode, "Expected pattern, quoted word, or word"};
throw Error{Node{state.offset, sentence.size()},
"Expected pattern, quoted word, or word"};
}
// Parse a list pattern (or function call pattern)
+2
View File
@@ -39,6 +39,8 @@ struct PatternTreeParser
size_t start = 0;
size_t end = 0;
explicit Node(size_t start = 0, size_t end = 0) : start(start), end(end) {}
virtual std::ostream &render(std::ostream &os) { return os; };
std::nullptr_t error(std::string message);
};