MCPcopy Create free account
hub / github.com/FastLED/FastLED / on_token

Method on_token

src/fl/stl/json.cpp.hpp:919–1074  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

917 JsonBuilder() FL_NOEXCEPT : mRoot(), mDepth(0) {}
918
919 ParseState on_token(JsonToken token, const fl::span<const char>& value) override {
920 // Recursion depth check
921 if (mDepth > MAX_JSON_DEPTH) {
922 FL_ERROR("JSON parser: FATAL - recursion depth exceeded " << MAX_JSON_DEPTH);
923 return ParseState::ERROR;
924 }
925
926 switch (token) {
927 // Specialized array tokens - parse directly into typed vectors
928 case JsonToken::ARRAY_UINT8: {
929 fl::vector<u8> vec;
930 if (!parse_int_array(value, vec)) return ParseState::ERROR;
931 auto arr_val = fl::make_shared<json_value>(fl::move(vec));
932 push_value(arr_val);
933 return ParseState::KEEP_GOING;
934 }
935
936 case JsonToken::ARRAY_INT16: {
937 fl::vector<i16> vec;
938 if (!parse_int_array(value, vec)) return ParseState::ERROR;
939 auto arr_val = fl::make_shared<json_value>(fl::move(vec));
940 push_value(arr_val);
941 return ParseState::KEEP_GOING;
942 }
943
944 case JsonToken::ARRAY_FLOAT: {
945 fl::vector<float> vec;
946 if (!parse_float_array(value, vec)) return ParseState::ERROR;
947 auto arr_val = fl::make_shared<json_value>(fl::move(vec));
948 push_value(arr_val);
949 return ParseState::KEEP_GOING;
950 }
951
952 case JsonToken::LBRACE: {
953 auto obj_val = fl::make_shared<json_value>(json_object{});
954 // Don't push to parent yet - will push in RBRACE
955 mStack.push_back({StackFrame::OBJECT, obj_val, ""});
956 mDepth++;
957 return ParseState::KEEP_GOING;
958 }
959
960 case JsonToken::RBRACE: {
961 if (!mStack.empty() && mStack.back().type == StackFrame::OBJECT) {
962 auto obj_val = mStack.back().value;
963 mStack.pop_back();
964 mDepth--;
965 // Push to parent after object is complete
966 push_value(obj_val);
967 }
968 return ParseState::KEEP_GOING;
969 }
970
971 case JsonToken::LBRACKET: {
972 auto arr_val = fl::make_shared<json_value>(json_array{});
973 // Don't push to parent yet - will push in RBRACKET after optimization
974 mStack.push_back({StackFrame::ARRAY, arr_val, ""});
975 mDepth++;
976 return ParseState::KEEP_GOING;

Callers 1

parseMethod · 0.45

Calls 12

optimize_arrayFunction · 0.85
has_escape_sequencesFunction · 0.85
unescape_stringFunction · 0.85
ieee754_parse_decimalFunction · 0.85
internMethod · 0.80
parseIntFunction · 0.70
push_backMethod · 0.45
emptyMethod · 0.45
backMethod · 0.45
pop_backMethod · 0.45
sizeMethod · 0.45
dataMethod · 0.45

Tested by

no test coverage detected