summaryrefslogtreecommitdiff
path: root/src/core/parser/ParserStack.cpp
diff options
context:
space:
mode:
authorAndreas Stöckel <astoecke@techfak.uni-bielefeld.de>2015-01-02 12:12:00 +0100
committerAndreas Stöckel <andreas@somweyr.de>2015-01-02 12:12:00 +0100
commit7bca3d7e34ca5c2b1e939a001229c04fe6b6bde0 (patch)
treea9ee906cecaf2e32fd05dadf1b07f34d51d1a9cf /src/core/parser/ParserStack.cpp
parenta68ee5ed18d9f6744ce99890b8e0249dff3bd070 (diff)
Added argument validation to parser stack
Diffstat (limited to 'src/core/parser/ParserStack.cpp')
-rw-r--r--src/core/parser/ParserStack.cpp18
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{"\""}};
}
}