MCPcopy Create free account
hub / github.com/CodingGay/BlackDex / parse

Method parse

Bcore/src/main/cpp/Dobby/tests/catch.hpp:6003–6037  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

6001 using ParserBase::parse;
6002
6003 auto parse(std::string const &, TokenStream const &tokens) const -> InternalParseResult override {
6004 auto validationResult = validate();
6005 if (!validationResult)
6006 return InternalParseResult(validationResult);
6007
6008 auto remainingTokens = tokens;
6009 if (remainingTokens && remainingTokens->type == TokenType::Option) {
6010 auto const &token = *remainingTokens;
6011 if (isMatch(token.token)) {
6012 if (m_ref->isFlag()) {
6013 auto flagRef = static_cast<detail::BoundFlagRefBase *>(m_ref.get());
6014 auto result = flagRef->setFlag(true);
6015 if (!result)
6016 return InternalParseResult(result);
6017 if (result.value() == ParseResultType::ShortCircuitAll)
6018 return InternalParseResult::ok(ParseState(result.value(), remainingTokens));
6019 } else {
6020 auto valueRef = static_cast<detail::BoundValueRefBase *>(m_ref.get());
6021 ++remainingTokens;
6022 if (!remainingTokens)
6023 return InternalParseResult::runtimeError("Expected argument following " + token.token);
6024 auto const &argToken = *remainingTokens;
6025 if (argToken.type != TokenType::Argument)
6026 return InternalParseResult::runtimeError("Expected argument following " + token.token);
6027 auto result = valueRef->setValue(argToken.token);
6028 if (!result)
6029 return InternalParseResult(result);
6030 if (result.value() == ParseResultType::ShortCircuitAll)
6031 return InternalParseResult::ok(ParseState(result.value(), remainingTokens));
6032 }
6033 return InternalParseResult::ok(ParseState(ParseResultType::Matched, ++remainingTokens));
6034 }
6035 }
6036 return InternalParseResult::ok(ParseState(ParseResultType::NoMatch, remainingTokens));
6037 }
6038
6039 auto validate() const -> Result override {
6040 if (m_optNames.empty())

Callers

nothing calls this directly

Calls 6

ParseStateClass · 0.85
isFlagMethod · 0.45
getMethod · 0.45
setFlagMethod · 0.45
valueMethod · 0.45
setValueMethod · 0.45

Tested by

no test coverage detected