blob: 990c745859422d04c23ac8ded7ed5b76a19f1711 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
#include "yql_visit.h"
#include <yql/essentials/utils/yql_panic.h>
#include <util/string/builder.h>
namespace NYql {
void TVisitorTransformerBase::AddHandler(std::initializer_list<TStringBuf> names, THandler handler) {
for (auto name: names) {
YQL_ENSURE(Handlers.emplace(name, handler).second, "Duplicate handler for " << name);
}
}
IGraphTransformer::TStatus TVisitorTransformerBase::DoTransform(TExprNode::TPtr input, TExprNode::TPtr& output, TExprContext& ctx) {
YQL_ENSURE(input->Type() == TExprNode::Callable);
output = input;
if (auto handler = Handlers.FindPtr(input->Content())) {
return (*handler)(input, output, ctx);
}
if (FailOnUnknown) {
ctx.AddError(TIssue(ctx.GetPosition(input->Pos()), TStringBuilder() << "Unsupported callable: " << input->Content()));
return TStatus::Error;
}
return TStatus::Ok;
}
}
|