diff options
author | Andreas Stöckel <astoecke@techfak.uni-bielefeld.de> | 2015-01-02 12:12:00 +0100 |
---|---|---|
committer | Andreas Stöckel <andreas@somweyr.de> | 2015-01-02 12:12:00 +0100 |
commit | 7bca3d7e34ca5c2b1e939a001229c04fe6b6bde0 (patch) | |
tree | a9ee906cecaf2e32fd05dadf1b07f34d51d1a9cf /src/core/parser/ParserStack.cpp | |
parent | a68ee5ed18d9f6744ce99890b8e0249dff3bd070 (diff) |
Added argument validation to parser stack
Diffstat (limited to 'src/core/parser/ParserStack.cpp')
-rw-r--r-- | src/core/parser/ParserStack.cpp | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/src/core/parser/ParserStack.cpp b/src/core/parser/ParserStack.cpp index 5e801ee..ff2647d 100644 --- a/src/core/parser/ParserStack.cpp +++ b/src/core/parser/ParserStack.cpp @@ -37,6 +37,11 @@ void Handler::data(const std::string &data, int field) } } +void Handler::child(std::shared_ptr<Handler> handler) +{ + // Do nothing here +} + /* Class HandlerDescriptor */ HandlerInstance HandlerDescriptor::create(const ParserContext &ctx, @@ -45,7 +50,14 @@ HandlerInstance HandlerDescriptor::create(const ParserContext &ctx, const Variant &args) const { Handler *h = ctor(ctx, name, targetState, parentState, isChild); - h->start(args); + + // Canonicalize the arguments + Variant arguments = args; + if (argsType != nullptr) { + argsType->build(arguments, ctx.logger); + } + + h->start(arguments); return HandlerInstance(h, this); } @@ -67,8 +79,8 @@ static LoggableException invalidCommand(const std::string &name, std::string{"Expected "} + (expected.size() == 1 ? std::string{"\""} : std::string{"one of \""}) + - Utils::join(expected, "\", \"") + std::string{"\", but got \""} + name + - std::string{"\""}}; + Utils::join(expected, "\", \"") + std::string{"\", but got \""} + + name + std::string{"\""}}; } } |