MCPcopy Create free account
hub / github.com/Vector35/binaryninja-api / IterativeParsingState Transit

Method IterativeParsingState Transit

rapidjson/reader.h:1649–1798  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1647 // May return a new state on state pop.
1648 template <unsigned parseFlags, typename InputStream, typename Handler>
1649 RAPIDJSON_FORCEINLINE IterativeParsingState Transit(IterativeParsingState src, Token token, IterativeParsingState dst, InputStream& is, Handler& handler) {
1650 (void)token;
1651
1652 switch (dst) {
1653 case IterativeParsingErrorState:
1654 return dst;
1655
1656 case IterativeParsingObjectInitialState:
1657 case IterativeParsingArrayInitialState:
1658 {
1659 // Push the state(Element or MemeberValue) if we are nested in another array or value of member.
1660 // In this way we can get the correct state on ObjectFinish or ArrayFinish by frame pop.
1661 IterativeParsingState n = src;
1662 if (src == IterativeParsingArrayInitialState || src == IterativeParsingElementDelimiterState)
1663 n = IterativeParsingElementState;
1664 else if (src == IterativeParsingKeyValueDelimiterState)
1665 n = IterativeParsingMemberValueState;
1666 // Push current state.
1667 *stack_.template Push<SizeType>(1) = n;
1668 // Initialize and push the member/element count.
1669 *stack_.template Push<SizeType>(1) = 0;
1670 // Call handler
1671 bool hr = (dst == IterativeParsingObjectInitialState) ? handler.StartObject() : handler.StartArray();
1672 // On handler short circuits the parsing.
1673 if (!hr) {
1674 RAPIDJSON_PARSE_ERROR_NORETURN(kParseErrorTermination, is.Tell());
1675 return IterativeParsingErrorState;
1676 }
1677 else {
1678 is.Take();
1679 return dst;
1680 }
1681 }
1682
1683 case IterativeParsingMemberKeyState:
1684 ParseString<parseFlags>(is, handler, true);
1685 if (HasParseError())
1686 return IterativeParsingErrorState;
1687 else
1688 return dst;
1689
1690 case IterativeParsingKeyValueDelimiterState:
1691 RAPIDJSON_ASSERT(token == ColonToken);
1692 is.Take();
1693 return dst;
1694
1695 case IterativeParsingMemberValueState:
1696 // Must be non-compound value. Or it would be ObjectInitial or ArrayInitial state.
1697 ParseValue<parseFlags>(is, handler);
1698 if (HasParseError()) {
1699 return IterativeParsingErrorState;
1700 }
1701 return dst;
1702
1703 case IterativeParsingElementState:
1704 // Must be non-compound value. Or it would be ObjectInitial or ArrayInitial state.
1705 ParseValue<parseFlags>(is, handler);
1706 if (HasParseError()) {

Callers

nothing calls this directly

Calls 6

StartObjectMethod · 0.45
StartArrayMethod · 0.45
TellMethod · 0.45
TakeMethod · 0.45
EndObjectMethod · 0.45
EndArrayMethod · 0.45

Tested by

no test coverage detected