From 5080de0225be265b1dc4bdcfa818c68b6096de6d Mon Sep 17 00:00:00 2001 From: Arne H Juul Date: Tue, 16 Nov 2021 14:06:03 +0000 Subject: use slightly less stack --- .../src/vespa/searchlib/fef/blueprintresolver.cpp | 26 +++++++++++----------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/searchlib/src/vespa/searchlib/fef/blueprintresolver.cpp b/searchlib/src/vespa/searchlib/fef/blueprintresolver.cpp index da6cfdba158..2a12867dd33 100644 --- a/searchlib/src/vespa/searchlib/fef/blueprintresolver.cpp +++ b/searchlib/src/vespa/searchlib/fef/blueprintresolver.cpp @@ -182,31 +182,31 @@ struct Compiler : public Blueprint::DependencyHandler { } FeatureRef resolve_feature(const vespalib::string &feature_name, Accept accept_type) { - FeatureNameParser parser(feature_name); - if (!parser.valid()) { + auto parser = std::make_unique(feature_name); + if (!parser->valid()) { return fail(feature_name, "malformed name"); } - if (failed_set.count(parser.featureName()) > 0) { - return fail(parser.featureName(), "already failed"); + if (failed_set.count(parser->featureName()) > 0) { + return fail(parser->featureName(), "already failed"); } - auto old_feature = feature_map.find(parser.featureName()); + auto old_feature = feature_map.find(parser->featureName()); if (old_feature != feature_map.end()) { - return verify_type(parser, old_feature->second, accept_type); + return verify_type(*parser, old_feature->second, accept_type); } if ((resolve_stack.size() + 1) > BlueprintResolver::MAX_DEP_DEPTH) { - return fail(parser.featureName(), "dependency graph too deep"); + return fail(parser->featureName(), "dependency graph too deep"); } for (const Frame &frame: resolve_stack) { - if (frame.parser.executorName() == parser.executorName()) { - return fail(parser.featureName(), "dependency cycle detected"); + if (frame.parser.executorName() == parser->executorName()) { + return fail(parser->featureName(), "dependency cycle detected"); } } - setup_executor(parser); - auto new_feature = feature_map.find(parser.featureName()); + setup_executor(*parser); + auto new_feature = feature_map.find(parser->featureName()); if (new_feature != feature_map.end()) { - return verify_type(parser, new_feature->second, accept_type); + return verify_type(*parser, new_feature->second, accept_type); } - return fail(parser.featureName(), fmt("unknown output: '%s'", parser.output().c_str())); + return fail(parser->featureName(), fmt("unknown output: '%s'", parser->output().c_str())); } std::optional resolve_input(const vespalib::string &feature_name, Accept accept_type) override { -- cgit v1.2.3