MCPcopy Create free account
hub / github.com/Kitware/CMake / Evaluate

Method Evaluate

Source/cmGeneratorExpressionNode.cxx:1319–1837  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1317 bool AcceptsArbitraryContentParameter() const override { return true; }
1318
1319 std::string Evaluate(
1320 std::vector<std::string> const& parameters, cm::GenEx::Evaluation* eval,
1321 GeneratorExpressionContent const* content,
1322 cmGeneratorExpressionDAGChecker* /*dagChecker*/) const override
1323 {
1324 static std::unordered_map<
1325 cm::string_view,
1326 std::function<std::string(cm::GenEx::Evaluation*,
1327 GeneratorExpressionContent const*,
1328 Arguments&)>>
1329 stringCommands{
1330 { "LENGTH"_s,
1331 [](cm::GenEx::Evaluation* ev, GeneratorExpressionContent const* cnt,
1332 Arguments& args) -> std::string {
1333 if (CheckStringParameters(ev, cnt, "LENGTH"_s, args)) {
1334 return std::to_string(cm::CMakeString{ args.front() }.Length());
1335 }
1336 return std::string{};
1337 } },
1338 { "SUBSTRING"_s,
1339 [](cm::GenEx::Evaluation* ev, GeneratorExpressionContent const* cnt,
1340 Arguments& args) -> std::string {
1341 if (CheckStringParameters(ev, cnt, "SUBSTRING"_s, args, 3)) {
1342 cm::CMakeString str{ args.front() };
1343 std::vector<long> indexes;
1344 if (GetNumericArguments(ev, cnt, args.advance(1), indexes)) {
1345 try {
1346 return str.Substring(indexes.front(), indexes.back());
1347 } catch (std::out_of_range const& e) {
1348 reportError(ev, cnt->GetOriginalExpression(), e.what());
1349 return std::string{};
1350 }
1351 }
1352 }
1353 return std::string{};
1354 } },
1355 { "FIND"_s,
1356 [](cm::GenEx::Evaluation* ev, GeneratorExpressionContent const* cnt,
1357 Arguments& args) -> std::string {
1358 if (CheckStringParametersEx(ev, cnt, "FIND"_s, args.size(), 2,
1359 false)) {
1360 if (args.size() > 3) {
1361 reportError(ev, cnt->GetOriginalExpression(),
1362 "$<STRING:FIND> expression expects at "
1363 "most three parameters.");
1364 return std::string{};
1365 }
1366
1367 auto const FROM = "FROM:"_s;
1368
1369 cm::CMakeString str{ args.front() };
1370 cm::CMakeString::FindFrom from =
1371 cm::CMakeString::FindFrom::Begin;
1372 cm::string_view substring;
1373
1374 args.advance(1);
1375 if (args.size() == 2) {
1376 cm::CMakeString::FindFrom opt =

Callers

nothing calls this directly

Calls 15

CheckStringParametersFunction · 0.85
to_stringFunction · 0.85
GetNumericArgumentsFunction · 0.85
reportErrorFunction · 0.85
CheckStringParametersExFunction · 0.85
cmHasPrefixFunction · 0.85
SubstringMethod · 0.80
GetOriginalExpressionMethod · 0.80
to_stringMethod · 0.80
c_strMethod · 0.80
lengthMethod · 0.80
PrependMethod · 0.80

Tested by

no test coverage detected