Lines Matching full:state

51   ParseState State;  member
132 ParseProgress<ResultType> makeParseProgress(ParseState State, in makeParseProgress() argument
134 return ParseProgress<ResultType>{State, std::move(Result)}; in makeParseProgress()
153 // Parses a single expected character \c c from \c State, skipping preceding
155 static ExpectedProgress<std::nullopt_t> parseChar(char c, ParseState State) { in parseChar() argument
156 State.Input = consumeWhitespace(State.Input); in parseChar()
157 if (State.Input.empty() || State.Input.front() != c) in parseChar()
158 return makeParseError(State, in parseChar()
160 return makeParseProgress(advance(State, 1), std::nullopt); in parseChar()
164 static ExpectedProgress<std::string> parseId(ParseState State) { in parseId() argument
165 State.Input = consumeWhitespace(State.Input); in parseId()
166 auto Id = State.Input.take_while( in parseId()
169 return makeParseError(State, "failed to parse name"); in parseId()
170 return makeParseProgress(advance(State, Id.size()), Id.str()); in parseId()
175 static ExpectedProgress<std::string> parseStringId(ParseState State) { in parseStringId() argument
176 State.Input = consumeWhitespace(State.Input); in parseStringId()
177 if (State.Input.empty()) in parseStringId()
178 return makeParseError(State, "unexpected end of input"); in parseStringId()
179 if (!State.Input.consume_front("\"")) in parseStringId()
181 State, in parseStringId()
184 StringRef Id = State.Input.take_until([](char c) { return c == '"'; }); in parseStringId()
185 if (State.Input.size() == Id.size()) in parseStringId()
186 return makeParseError(State, "unterminated string"); in parseStringId()
188 return makeParseProgress(advance(State, Id.size() + 1), Id.str()); in parseStringId()
196 ParseState State) { in parseSingle() argument
197 auto P = parseChar('(', State); in parseSingle()
201 auto E = ParseElement(P->State); in parseSingle()
205 P = parseChar(')', E->State); in parseSingle()
209 return makeParseProgress(P->State, Op(std::move(E->Value))); in parseSingle()
217 ParseState State) { in parsePair() argument
218 auto P = parseChar('(', State); in parsePair()
222 auto Left = ParseElement(P->State); in parsePair()
226 P = parseChar(',', Left->State); in parsePair()
230 auto Right = ParseElement(P->State); in parsePair()
234 P = parseChar(')', Right->State); in parsePair()
238 return makeParseProgress(P->State, in parsePair()
246 parseRangeSelectorImpl(ParseState State) { in parseRangeSelectorImpl() argument
247 auto Id = parseId(State); in parseRangeSelectorImpl()
253 return parseSingle(parseStringId, *Op, Id->State); in parseRangeSelectorImpl()
256 return parseSingle(parseRangeSelectorImpl, *Op, Id->State); in parseRangeSelectorImpl()
259 return parsePair(parseStringId, *Op, Id->State); in parseRangeSelectorImpl()
262 return parsePair(parseRangeSelectorImpl, *Op, Id->State); in parseRangeSelectorImpl()
264 return makeParseError(State, "unknown selector name: " + OpName); in parseRangeSelectorImpl()
268 ParseState State = {Input, Input}; in parseRangeSelector() local
269 ExpectedProgress<RangeSelector> Result = parseRangeSelectorImpl(State); in parseRangeSelector()
272 State = Result->State; in parseRangeSelector()
274 State.Input = consumeWhitespace(State.Input); in parseRangeSelector()
275 if (State.Input.empty()) in parseRangeSelector()
277 return makeParseError(State, "unexpected input after selector"); in parseRangeSelector()